]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.107
authorfred <fred>
Wed, 27 Mar 2002 00:37:21 +0000 (00:37 +0000)
committerfred <fred>
Wed, 27 Mar 2002 00:37:21 +0000 (00:37 +0000)
Documentation/user/convert-mudela.itexi [deleted file]
Documentation/user/latex-mudela-example.latex [deleted file]
Documentation/user/mudela-book.tely [deleted file]
lily/include/mudela-version.hh [deleted file]
lily/mudela-version.cc [deleted file]
make/mudela-rules.make [deleted file]
make/mudela-targets.make [deleted file]
make/mudela-vars.make [deleted file]
scripts/convert-mudela.py [deleted file]
scripts/mudela-book.py [deleted file]

diff --git a/Documentation/user/convert-mudela.itexi b/Documentation/user/convert-mudela.itexi
deleted file mode 100644 (file)
index 02b13d8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-@node convert-mudela, , ,Top
-@chapter convert-mudela
-@code{convert-mudela} sequentially applies different
-mudela-conversions to upgrade a Mudela input file.  It uses
-@code{\version} statements in the file to detect the old version
-number.
-
-@example
-        convert-mudela [options] [files]
-@end example
-
-@section Options
-@table @samp
-@item --output
-    The output file to write.  
-@item --edit
-    Do an inline edit of the input file. override @code{--output}
-@item --show-rules
-    shows all known conversions, and exit
-@item --from=@var{FROM_PATCHLEVEL}
-    Set the level to convert from. If this is not set, convert-mudela will
-    guess this, on the basis of @code{\version} strings in the file
-@item --to=@var{TO_PATCHLEVEL}
-    Set the goal version of the conversion. It defaults to the latest
-    available version.
-@end table
-
-Not all language changes are handled. Multiple output options won't
-work.
-
-convert-mudela is written in python, so you have install
-@uref{http://www.python.org,python}.  It was written by
-@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}.
-
-
-
diff --git a/Documentation/user/latex-mudela-example.latex b/Documentation/user/latex-mudela-example.latex
deleted file mode 100644 (file)
index 817a0f0..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-% kommentar
-\documentclass[a4paper, 12pt]{article}
-%\def\preMudelaExample{}
-%\def\postMudelaExample{}
-%\usepackage{graphics}
-%\usepackage{landscape}
-\begin{document}
-%uncomment this to try twocolumn mode
-%\twocolumn
-
-
-\section{Mudelabook + LaTeX}
-
-This is an examplefile for mixing Lilypond and Latex. It is also
-used to test mudela-book. View the source to see how it is done.
-
-A simple scale:
-
-\begin{mudela}
-\score{
- \notes\relative c'{c d e f g a b c}
-}
-\end{mudela}
-
-Mudela-book search for the \verb|\score| command when it decides
-if the code is only a fragment. Thus, in the following code, you have
-to use \verb|fragment| option, because the comment confuses mudela-book.
-
-\begin[fragment]{mudela}
-c d e % \score
-\end{mudela}
-
-There is also a shorthand version \verb|\mudela{c' e' g'}|:
-
-\mudela{c' e' g'}
-
-that is the same as writing
-\begin{verbatim}
-\begin[eps]{mudela}
-c' e' g'
-\end{mudela}
-\end{verbatim}
-
-This C major
-\begin[eps, 11pt]{mudela}
-c' e' g'
-\end{mudela}
-and C minor \mudela[11pt]{c' es' g'}  chords are floating inside the text.
-
-\subsection{verb and verbatim}
-
-As you see, the begin/end verbatim command inside 
-does not confuse mudela-book:
-
-\verb|\begin{mudela}c d e\end{mudela}|
-
-Neither does a verbatim inside verb:
-
-\verb|\begin{verbatim}\begin{mudela}c d e\end{mudela}\end{verbatim}|
-
-or verb inside verbatim:
-
-\begin{verbatim}
-\verb|\begin{mudela}c d e\end{mudela}|
-\end{verbatim}
-
-But this is just to stress \verb|mudela-book|. What you need is:
-
-\verb|\mudela{c' d' e'}|
-
-and
-
-\begin{verbatim}
-\begin{mudela}
-c d e
-\end{mudela}
-\end{verbatim}
-
-\subsection{The 'verbatim' and 'intertext' option}
-This shows the verbatim option:
-\begin[verbatim, intertext="gives this music:"]{mudela}
-c' d' e'
-\end{mudela}
-
-\subsection{LaTeX comments}
-This is a line with mudela code after the comment char % \mudela{<c' e' g'>}
-% \mudela{<c' e' g'>}
-
-If you do not see any music from the heading 'LaTeX comments' and until
-this line, then mudela-book is handling latex comments pretty well :-)
-
-\subsection{To float or not to float}
-This music
-\begin[eps]{mudela}
-c' e' 
-\end{mudela}
-should be floating inside the text by using the \verb|eps| options.
-
-This music
-
-\begin[eps]{mudela}
-c' e'
-\end{mudela}
-
-has also the \verb|eps| options, but is not floating because there
-are an emptry line before and after the mudela block. That is
-correct behaviour because it follows La\TeX{} convention that an
-empty line signals a new paragraph. Note that the \verb|eps| option
-is not necessary when you want the music in a paragraph on its own.
-
-\subsection{More examples}
-
-Itemize environment:
-\begin{itemize}
-\item \mudela[11pt]{ c'} do
-\item \mudela[11pt]{d'} re
-\item \mudela[11pt]{e'} mi
-\item \mudela[11pt]{f'} fa
-\item \mudela[11pt]{g'} sol
-\end{itemize}
-
-Tables\footnote{ and footnote: \mudela[eps,11pt]{c' e' g'} }:
-\marginpar{ Yes, even as marginpar
-\mudela[eps,11pt]{c' d' e'} }
-
-\begin{tabular}{|l|l|r|}
-\hline
-\em Notes & \em Name \\
-\hline
-\mudela[11pt, filename="cdur"]{<c' e' g'>} & major \\
-\mudela[11pt]{<c' es' g'>} & minor \\
-\mudela[11pt]{<c' es' ges'>} & diminished \\
-\mudela[11pt]{<c' e' gis'>} & augmented \\
-\hline
-\end{tabular}
-
-\pagebreak
-
-Testing of spacing. The next music is surrounded by an empty line.
-text text text text text text text text text text text text 
-text text text text text text text text text text text text 
-
-\begin{mudela}
-\score{ \notes\relative c'{ c d e f g a b c} }
-\end{mudela}
-
-text text text text text text text text text text text text 
-text text text text text text text text text text text text 
-text text text text text text text text text text text text 
-
-Next has no empty lines.
-text text text text text text text text text text text text 
-text text text text text text text text text text text text 
-text text text text text text text text text text text text 
-\begin{mudela}
-\score{ \notes\relative c'{ c d e f g a b c} }
-\end{mudela}
-text text text text text text text text text text text text 
-text text text text text text text text text text text text 
-
-
-
-\end{document}
diff --git a/Documentation/user/mudela-book.tely b/Documentation/user/mudela-book.tely
deleted file mode 100644 (file)
index ae77afe..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@setfilename mudela-book.info
-@settitle mudela-book Manual
-@afourpaper
-@titlepage
-@title mudela-book Manual
-@subtitle Integrating mudela with La@TeX{} and TeXinfo
-@author Tom Cato Amundsen and  Han-Wen Nienhuys
-
-     Copyright @copyright{} 1999 by the authors
-
-@vskip 0pt plus 1filll
-
-Permission is granted to make and distribute verbatim
-copies of this manual provided the copyright notice and
-this permission notice are preserved on all copies.
-
-Permission is granted to copy and distribute modified
-versions of this manual under the conditions for
-verbatim copying, provided also that the sections
-entitled ``Copying'' and ``GNU General Public License''
-are included exactly as in the original, and provided
-that the entire resulting derived work is distributed
-under the terms of a permission notice identical to this
-one.
-
-Permission is granted to copy and distribute
-translations of this manual into another language,
-under the above conditions for modified versions,
-except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-@end titlepage
-
-@ifinfo
-This file documents GNU LilyPond.
-
-Copyright 1999 Tom Cato Amundsen and  Han-Wen Nienhuys
-
-
-Permission is granted to make and distribute verbatim
-copies of this manual provided the copyright notice and
-this permission notice are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX
-and print the results, provided the printed document
-carries a copying permission notice identical to this
-one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-@end ignore
-
-Permission is granted to copy and distribute modified
-versions of this manual under the conditions for
-verbatim copying, provided also that the sections
-entitled ``Copying'' and ``GNU General Public License''
-are included exactly as in the original, and provided
-that the entire resulting derived work is distributed
-under the terms of a permission notice identical to this
-one.
-
-Permission is granted to copy and distribute
-translations of this manual into another language,
-under the above conditions for modified versions,
-except that this permission notice may be stated in a
-translation approved by the Free Software Foundation.
-
-@end ifinfo
-@tex
-\def\preMudelaExample{\vspace{0.5cm}}
-@end tex
-
-@contents
-@node Top, , , (dir)
-@top
-
-
-
-@section Introduction
-
-[ The tutorial part is at the moment commented out and moved to 
-the end of this document ]
-
-
-[TODO: THIS MANUAL IS NOT FINISHED YET. FIXME.]
-
-@command{mudela-book} is a script that helps integrating mudela with
-La@TeX{} or TeXinfo. @command{mudela-book} runs Lilypond on fragments
-of mudela in your source file, and includes the results into a
-document that can be processed with La@TeX{}, @command{makeinfo}
-or @command{texi2dvi}.
-The result is a text document with formatted music integrated.
-
-@command{mudela-book} will do its best to try to align the music to
-the left and right margins. Currently the most used papersizes and
-one- and twocolumn mode is supported. But if you use some more
-advances features, like the geometry-package or change the margins in
-La@TeX{} or use @code{@@pagesize} in texinfo, will break.
-
-This document assumes you have basic knowledge of GNU LilyPond and
-La@TeX{} or texinfo.
-
-@section TeXinfo reference
-
-Your markup the mudela code like this:
-@example
-@@mudela[options, go, here]
- YOUR MUDELA CODE
-@@end mudela
-@end example
-
-or
-
-@example
-@@mudela[option, go, here]@{ YOUR MUDELA CODE @}
-@end example
-
-@command{mudela-book} knows the default margins, and a few papersizes.
-These commands should be in the beginning of the document:
-@itemize @bullet
-@item @code{@@afourpaper}
-@item @code{@@afourwide}
-@item @code{@@smallbook}
-@end itemize
-@code{@@pagesizes} are not supported.
-
-@subsection Examples
-
-Two simple examples. First a complete block:
-
-@example
-@@mudela[26pt]
-c' d' e' f' g'2 g'
-@@end mudela
-@end example
-
-produces this music:
-@mudela
-c' d' e' f' g'2 g'
-@end mudela
-
-Then the short version:
-@example
-@@mudela[11pt]@{<c' e' g'>@}
-@end example
-
-and its music:
-
-@mudela[11pt]{<c' e' g'>}
-
-
-@subsection @@example and @@code
-
-I'm not sure if this will go into the final documentation, this is
-here mostly to remember me on why things are the way they are.
-
-@command{mudela-book} will do nothing with special with @code{@@code} and
-@code{@@example} environments. The 'code' and 'example' commands
-should work just as normal. People looking at document that should be
-processed by @command{mudela-book}, should notice nothing special, except from
-some block like this:
-@example
-@@mudela
-BLABLA
-@@end mudela
-@end example
-
-or this:
-
-@code{@@mudela@{ BLABLA @}}
-
-Anything other is a bug in @command{mudela-book}.
-
-So to get this in the printed manual:
-
-@example
-@@mudela[26pt]
-\relative c'@{c d e f g2 g@}
-@@end mudela
-@end example
-
-you have to write this:
-
-@example
-@@example
-@@@@mudela[26pt]
-\relative c'@@@{c d e f g2 g@@@}
-@@@@end mudela
-@@end example
-@end example
-
-Simply explained, every '@{', '@}' and '@@' has to be written as '@@@{',
-'@@@}' and '@@@@'. This is how it works in plain texinfo too.
-
-@section La@TeX{} reference
-
-Your markup the mudela code like this:
-@example
-\begin[option, go, here]@{mudela@}
- YOUR MUDELA CODE
-\end@{mudela@}
-@end example
-
-or 
-
-@example
-\mudela@{ YOUR MUDELA CODE @}
-@end example
-
-The 'geometry' package is is not supported. The most popular
-papersizes should work.
-
-Mudela-book know about the @code{\onecolumn} and 
-@code{\twocolumn} commands.
-
-The music will be surrounded by @code{\preMudelaExample} and
-@code{\postMudelaExample}. The variables are 
-defined to nothing by default, and the user can redefine them
-to whatever he wants.
-@strong{[UGH: THIS DOES NOT HAPPEN WHEN
-YOU USE THE SHORT FORM, \MUDELA@{ ... @}, CHECK OUT WHY]}
-
-@subsection @code{landscape} package 
-There is some simple support for landscape paper format, and this
-can be combined with the @code{\twocolumn} command. Only a4 and
-letter paper is supported, more to come...
-
-A more complete
-support, maybe also supporting the geometry package is planned, but
-there are more work that has to be done on @command{mudela-book}
-first.
-
-This should work:
-@example
-\documentclass@{article@}
-\usepackage@{landscape@}
-\begin@{document@}
-\twocolumn
-BLA BLA BLA
-\end@{document@}
-@end example
-
-@subsection Examples 
-
-@example
-\begin[26pt]@{mudela@}
-c' d' e' f' g'2 g'2
-\end@{mudela@}
-@end example
-
-produces this music:
-
-@mudela[26pt]
-c' d' e' f' g'2 g'2
-@end mudela
-
-Then the short version:
-@example
-\mudela[11pt]@{<c' e' g'>@}
-@end example
-
-and its music:
-
-@mudela[11pt]{<c' e' g'>}
-
-
-@subsection \begin@{verbatim@} and \verb|\verb| 
-
-There work just as expected. Look at @file{mb-latex.tex} for details.
-
-@section Options
-
-@table @samp
-@item eps
-    the music is created as eps graphics that can be inserted in 
-    the middle of a text line, not only as a separate paragraph.
-    (La@TeX{} only)
-@item verbatim
-    CONTENTS is copied into the source enclosed in a verbatim block,
-    followed by any text given with the @code{intertext} option, then
-    the actual music is displayed. This option does not work with
-    the short version of the mudela blocks:
-
-    @code{ @@mudela@{ CONTENTS @} } and @code{ \mudela@{ CONTENTS @} }
-    
-@item intertext="text inside apostrophs"
-    Used in conjunction with @code{verbatim} option.
-@item filename=FILENAME
-    Save the mudela code to FILENAME instead of using a hash value
-    of CONTENTS.
-@item 11pt, 13pt, 16pt, 20pt, 26pt
-    set the fontsize to use for the music
-@item singleline
-  linewidth = -1.
-@item multiline
-  linewidth = textwidth
-@item fragment
-@item nonfragment
-    Override @command{mudela-book} autodetection of what type of code is in the
-    mudela block, voice contents or complete code.
-@end table
-
-@section Invocation
-
-When you run @command{mudela-book} it will generate lots of small
-files that Lilypond will process. So to avoid all the garbage in
-your source directory, you should either change to a temporary
-directory, or use the @code{--outdir} commandline options:
-
-@code{cd out && mudela-book ../yourfile.tex}
-
-@code{mudela-book --outdir=out yourfile.tex}
-
-
-For latex input, the file to give to latex has ext @file{.latex}.
-TeXinfo input will be written to a file with ext @file{.texi}. So be
-careful, don't give the source file that ext, or the file will be
-overwritten.
-
-If you use @code{--outdir}, you should also @code{cd} to that directory
-before running LaTeX or makeinfo.
-
-@strong{[UGH: IS THIS THE BEST WAY TO DO IT. MAYBE ADD A COMMENT LINE TO THE
-GENERATED FILE, SO MUDELA-BOOK CAN TEST IF THE FILE IT IS TO OVERWRITE
-IS GENERATED.]}
-
-@strong{About the input}
-
-If the file contains the ``block''
-
-@example 
-
-        \begin@{mudela@}
-        CONTENTS
-        \end@{mudela@}
-@end example 
-
-then LilyPond is run on CONTENTS.  @command{mudela-book} puts the result back,
-surrounded by @code{\preMudelaExample} and @code{\postMudelaExample}
-commands. @code{\preMudelaExample} and @code{posMudelaExample} is
-defined to nothing by default, and the user can redefine them
-to whatever he wants.
-
-
-@subsection Command line options
-
-@table @samp
-
-@item @option{-f}, @option{--format=}
-    Specify the document type to process, @code{latex} or @code{texi}.
-    @command{mudela-book} usually figure out this automatically.
-@item --default-music-fontsize=??pt
-    Set the fontsize to use for mudela if no fontsize is given
-    as option.
-@item --force-music-fontsize=??pt
-    Force all mudela to use this fontsize, overriding options
-    given to \begin@{mudela@}
-@item -I DIR, --include=DIR
-    include path
-@item -M, --dependencies
-        Write dependencies to out-www/filename.dep
-@item --dep-prefix=PREF
-       prepend PREF before each -M dependency
-@item -n, --no-lily
-       don't run lilypond
-@item --no-pictures
-       don't generate pictures
-@item --read-lys
-       don't write ly files. This way you can do
-       @example
-       mudela-book file.tely
-       convert-mudela
-       mudela-book --read-lys
-       @end example
-@item --outname=FILE
-    The name of La@TeX{} file to output. If this option  is not given,
-    the output name derived from the input name.
-@item --outdir=
-       where to place generated files
-@item --version
-       print version information
-@item --help
-       Print a short help message
-@end table
-
-
-
-@command{mudela-book} is written in python 1.5, so you have to install
-@uref{http://www.python.org,python}.
-
-
-
-@section Bugs
-  
-The La@TeX{} \includeonly@{...@} command is ignored.
-
-Ignores almost all La@TeX{} commands that changes margins and linewidths.
-
-@section Authors
-
-@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}, @uref{http://www.cs.uu.nl/people/hanwen}
-
-@email{tca@@gnu.org, Tom Cato Amundsen}
-
-@bye
-@ignore
-
-So what does this look like? Well, here is an example:
-@mudela[veryverbatim, intertext="produces this music:"]
-\score{
-  \notes\relative c'{
-    \time 5/8;
-    [e16( g b c a g][e a b d] | )e2 d,8 |
-    [e16( g b c a g][e a b d] | )b2 [a16( f] |
-    [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] |
-    [f( a b d b a][f a b d] | )e2
-  }
-}
-@end mudela
-If you are lucky, the above example show a nice feature of LilyPond
-and La@TeX{}. Since LilyPond can output the music as @TeX{} graphics,
-La@TeX{} can insert pagebreaks between the lines of music.
-
-Notice that there is no @code{\paper} statement in the example
-above. Mudela-book will insert some code for you that defines the
-linewidth and the font to use. If you don't want to change the default, 
-there is no need to put an empty @code{\paper@{@}} inside the @code{\score}.
-In the example above, something like
-this might be inserted before your code:
-@example
-\include "paper16.ly"
-\paper@{ \paper_sixteen
-    linewidth = 390.\pt;
-    castingalgorithm = \Gourlay;
-@}
-@end example
-The actual values for linewidth will differ depending on papersize and
-number of columns. Also, if you use a different fontsize for the
-music, another file than @code{paper16.ly} will be included.
-
-If you want to make the music not so wide, you can insert a
-@code{\paper} statement that set the linewidth:
-
-@mudela[veryverbatim, intertext="produces this music:"]
-\score{
-  \notes\relative c'{
-    \time 5/8;
-    [e16( g b c a g][e a b d] | )e2 d,8 |
-    [e16( g b c a g][e a b d] | )b2 [a16( f] |
-    [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] |
-    [f( a b d b a][f a b d] | )e2
-  }
-  \paper{linewidth = 10.\cm;}
-}
-@end mudela
-
-Very often, if you mix music and text, the music is often only a 
-few notes or at most a few bars. This music should be as short as
-possible and not stretched to be aligned to the right margin.
-
-If you only write voice-contents in the mudela block, @command{mudela-book}
-will set the @code{linewidth} variable to -1, so Lilypond
-will make the music as short as possible but without breaking the
-line. Here is a well know harmonic progression:
-@mudela[veryverbatim, intertext="produce a well known harmonic progression:"]
-  \context Voice { <c' e g> <b d g> <c2 e g> }
-@end mudela
-
-If you want to place music examples in the text,
-@mudela[eps]
-\context Voice {  <c' e g> <b d g> <c2 e g>}
-@end mudela
-, you can use the @code{eps} option. This will create the music as
-eps graphics and include it into the document with the 
-@code{\includegraphics} command.
-
-The code used look like this:
-@example
-@@mudela[eps]
- \context Voice { <c' e g> <b d g> <c2 e g> }
-@@end mudela
-@end example
-
-You can also use the @code{eps} option if the block is a complete
-mudela source. This 5 cm long empty line, 
-@mudela[eps]
-\score{
-  \notes{s}
-  \paper{ linewidth = 5.\cm;}
-}
-@end mudela
-was created with this code:
-@example
-@@mudela[eps]
-\score@{
-  \notes@{s@}
-  \paper@{ linewidth = 5.\cm;@}
-@}
-@@end mudela
-@end example
-
-To avoid that La@TeX{} places the music on a line of its one, there should
-be no empty lines between the normal text and the mudela
-environment. 
-
-You can also use @code{mudelafile} (on a separate line, FIXME), to
-include another file.
-
-@section Fontsize options You can use all lilypond fontsizes in
-@command{mudela-book}.  The default 16pt fontsize is probably to big to be
-included in the middle of the text, 11pt or 13pt is probably better.
-
-The code can look like this:
-@example
-@@mudela[13pt, eps]
-<c' e g>
-@@end mudela
-@end example
-
-The following options set the fontsize:
-@itemize
-@item @code{11pt}
-@mudela[11pt, eps]
-  \relative c'{
-    r16 [c d e][f d e c] [g'8 c][b-\prall c] |
-    [d16 g, a b][c a b g][d'8 g f-\prall g]
-  }
-@end mudela
-@item @code{13pt}
-@mudela[13pt, eps]
-  \relative c'{
-    r16 [c d e][f d e c] [g'8 c][b-\prall c] |
-    [d16 g, a b][c a b g][d'8 g f-\prall g]
-  }
-@end mudela
-@item @code{16pt}
-@mudela[16pt, eps]
-  \relative c'{
-    r16 [c d e][f d e c] [g'8 c][b-\prall c] |
-    [d16 g, a b][c a b g][d'8 g f-\prall g]
-  }
-@end mudela
-@item @code{20pt}
-@mudela[20pt, eps]
-  \relative c'{
-    r16 [c d e][f d e c] [g'8 c][b-\prall c] |
-    [d16 g, a b][c a b g][d'8 g f-\prall g]
-  }
-@end mudela
-@item @code{26pt}
-@mudela[26pt, eps]
-  \relative c'{
-    r16 [c d e][f d e c] [g'8 c][b-\prall c] |
-    [d16 g, a b][c a b g][d'8 g f-\prall g]
-  }
-@end mudela
-@end itemize
-
-
-@section More options
-@itemize
-@item The @code{singleline} option set @code{linewidth} to -1.0.
-@item The @code{multiline} option set @code{linewidth} to a value letting
-the music be aligned to the right margin. The music can span several
-lines. 
-@end itemize
-
-@section Just in case...
-The options @code{fragment} and @code{nonfragment} will override
-@command{mudela-book} when it scans the mudela code to see if it is voice
-contents or complete code. This might be useful if @command{mudela-book} choose
-wrong. 
-
-Since there is no finder's fee which doubles every year, there is no
-need to wait for the price money to grow. So send a bug report today
-if you need this one of these options.
-
-@section Examples
-
-This was all options to @code{\begin}. The rest of the mudela
-document will show some ways you can use mudela in
-La@TeX{} documents. It will also act as a simple test-suite for
-mudela-book. You can place @code{eps} mudela in and marginspars just
-as any other included eps graphics.
-
-@mudela
-\score{
-  \notes\relative c'{ 
-        \time 12/8;  
-        r4-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--]
-        [f16-.( )f-. dis8-- gis16-.( )gis-.] cis4.-\fermata |
-        
-        r4.-\fermata [cis,16 cis g'8 f16 f b8][g16 g f8 b16 b] dis4.-\fermata
-  }
-  \paper{linewidth = 7.\cm;}
-}
-@end mudela
-
-
-To the right you can see some bars from the trumpet fanfara from the
-beginning of the fantastic street opera ``Houdini the Great'', by the
-Danish composer Andy Pape. The music is put inside a
-@code{floatingfigure} environment, and the music will be aligned by
-the right marging if you set floatingfigure width and mudela linewidth
-to the same value. The code looks like this:
-
-@mudela[verbatim]
-\score{
-  \notes\relative c'{ 
-    \time 12/8;  
-    r4.-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--]
-    [f16-.( )f-. dis8-- gis16-.( )gis-.] cis8.-\fermata |
-        
-    r4.-\fermata [cis,16 cis g'8 f16 f b8]
-    [g16 g f8 b16 b] dis4.-\fermata
-  }
-  \paper{linewidth = 7.\cm;}
-}
-@end mudela
-
-If you have a lot of small music examples like this in the middle of
-your text, you might get a nicer look by using ``double'' line
-spacing. Put the @code{\linespread@{1.6@}} command into the preamble of
-your document. Then the line spacing will not be increased between the
-lines where you have music printed with the smallest font size.
-
-Mudela-book does know about @code{\onecolumn} and @code{\twocolumn}. 
-So the music will be adjusted to the new linewith:
-
-Verbatim environments will also ignore the page margins. That is
-a feature of La@TeX{}. (But you usually put things inside a verbatim
-environment when you don't want La@TeX{} to do any linebreaking)
-
-@end ignore
diff --git a/lily/include/mudela-version.hh b/lily/include/mudela-version.hh
deleted file mode 100644 (file)
index f8d8e51..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-  mudela-version.hh -- declare Mudela_version
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 1998--2000 Jan Nieuwenhuizen <janneke@gnu.org>
-
-*/
-
-#ifndef MUDELA_VERSION_HH
-#define MUDELA_VERSION_HH
-
-#include "string.hh"
-
-struct Mudela_version 
-{
-  Mudela_version (int major, int minor, int patch);
-  Mudela_version (String str);
-
-  String str () const;
-  operator int () const;
-
-  int major_i_;
-  int minor_i_;
-  int patch_i_;
-};
-
-extern Mudela_version oldest_version;
-
-#endif // MUDELA_VERSION_HH
diff --git a/lily/mudela-version.cc b/lily/mudela-version.cc
deleted file mode 100644 (file)
index 7b2e9d5..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  mudela-version.cc -- implement Mudela_version
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 1998--2000 Jan Nieuwenhuizen <janneke@gnu.org>
-
-*/
-
-#include "mudela-version.hh"
-#include "string-convert.hh"
-#include "array.hh"
-
-Mudela_version::Mudela_version (int major, int minor, int patch)
-{
-  major_i_ = major;
-  minor_i_ = minor;
-  patch_i_ = patch;
-}
-
-Mudela_version::Mudela_version (String str)
-{
-  Array<String> version;
-  version = String_convert::split_arr (str, '.');
-  assert (version.size () == 3);
-  major_i_ = version[0].value_i ();
-  minor_i_ = version[1].value_i ();
-  patch_i_ = version[2].value_i ();
-}
-
-String
-Mudela_version::str () const
-{
-  return to_str (major_i_) + "." + to_str (minor_i_) + "." + to_str (patch_i_);
-}
-
-Mudela_version::operator int () const
-{
-    // ugh
-  return 100000 * major_i_ + 1000 * minor_i_ + patch_i_;
-}
-
diff --git a/make/mudela-rules.make b/make/mudela-rules.make
deleted file mode 100644 (file)
index 28fd189..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Mudela_rules.make
-
-.SUFFIXES: .doc .dvi .mudtex .tely .texi
-
-SUBST_TEXI_DEPS=sed 's! \.\./! !g' < $(basename $@).dep > $(outdir)/temp.dep ;         mv $(outdir)/temp.dep $(basename $@).dep 
-
-$(outdir)/%.latex: %.doc
-       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/mudela-book.py --outdir=$(outdir) -I .. -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ $< 
-       $(SUBST_TEXI_DEPS)
-
-# don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir.
-# it is not, for --scrdir builds
-$(outdir)/%.texi: %.tely
-       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/mudela-book.py --outdir=$(outdir) -I .. -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi $<
-       $(SUBST_TEXI_DEPS)
-
-# nexi: no-lily texi
-# for plain info doco: don't run lily
-$(outdir)/%.nexi: %.tely
-       LILYPONDPREFIX=$(LILYPONDPREFIX)/..  $(PYTHON) $(script-dir)/mudela-book.py --outdir=$(outdir) --no-lily -I .. -I $(input-dir)/test/ --dependencies --dep-prefix=$(outdir)/ --format=texi $<
-       mv $(@D)/$(*F).texi $@
-       $(SUBST_TEXI_DEPS)
-
-$(outdir)/%.info: $(outdir)/%.nexi
-       -$(MAKEINFO) --force --output=$@ $<
diff --git a/make/mudela-targets.make b/make/mudela-targets.make
deleted file mode 100644 (file)
index e032d7e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-# empty
-
diff --git a/make/mudela-vars.make b/make/mudela-vars.make
deleted file mode 100644 (file)
index 024d2ab..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# empty
-TELY_FILES := $(wildcard *.tely)
-EXTRA_DIST_FILES += $(TELY_FILES)
-
diff --git a/scripts/convert-mudela.py b/scripts/convert-mudela.py
deleted file mode 100644 (file)
index 8d86614..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-#!@PYTHON@
-
-# convert-mudela.py -- convertor for mudela versions
-# 
-# source file of the GNU LilyPond music typesetter
-# 
-# (c) 1998 
-
-# TODO
-#   use -f and -t for -s output
-
-# NEWS
-# 0.2
-#  - rewrite in python
-
-program_name = 'convert-mudela'
-version = '@TOPLEVEL_VERSION@'
-
-import os
-import sys
-import __main__
-import getopt
-import  string
-import re
-import time
-
-mudela_version_re_str = '\\\\version *\"(.*)\"'
-mudela_version_re = re.compile(mudela_version_re_str)
-
-def program_id ():
-       return '%s (GNU LilyPond) %s' %(program_name,  version);
-
-def identify ():
-       sys.stderr.write (program_id () + '\n')
-
-def usage ():
-       sys.stdout.write (
-               r"""Usage: %s [OPTION]... [FILE]... 
-Try to convert to newer mudela-versions.  The version number of the
-input is guessed by default from \version directive
-
-Options:
-  -h, --help             print this help
-  -e, --edit             in place edit
-  -f, --from=VERSION     start from version
-  -s, --show-rules       print all rules.
-  -t, --to=VERSION       target version
-      --version          print program version
-
-Report bugs to bugs-gnu-music@gnu.org
-
-""" % program_name)
-       
-       
-       sys.exit (0)
-
-def print_version ():
-       
-       sys.stdout.write (r"""%s
-
-This is free software.  It is covered by the GNU General Public
-License, and you are welcome to change it and/or distribute copies of
-it under certain conditions.  invoke as `%s --warranty' for more
-information.
-
-""" % (program_id() , program_name))
-       
-def gulp_file(f):
-       try:
-               i = open(f)
-               i.seek (0, 2)
-               n = i.tell ()
-               i.seek (0,0)
-       except:
-               print 'can\'t open file: ' + f + '\n'
-               return ''
-       s = i.read (n)
-       if len (s) <= 0:
-               print 'gulped empty file: ' + f + '\n'
-       i.close ()
-       return s
-
-def str_to_tuple (s):
-       return tuple (map (string.atoi, string.split (s,'.')))
-
-def tup_to_str (t):
-       return string.join (map (lambda x: '%s' % x, list (t)), '.')
-
-def version_cmp (t1, t2):
-       for x in [0,1,2]:
-               if t1[x] - t2[x]:
-                       return t1[x] - t2[x]
-       return 0
-
-def guess_mudela_version(filename):
-       s = gulp_file (filename)
-       m = mudela_version_re.search (s)
-       if m:
-               return m.group(1)
-       else:
-               return ''
-
-class FatalConversionError:
-       pass
-
-conversions = []
-
-def show_rules (file):
-       for x in conversions:
-               file.write  ('%s: %s\n' % (tup_to_str (x[0]), x[2]))
-
-############################
-               
-if 1:                                  # need new a namespace
-       def conv (str):
-               if re.search ('\\\\octave', str):
-                       sys.stderr.write ('\nNot smart enough to convert \\octave')
-                       raise FatalConversionError()
-               
-               return str
-
-       conversions.append (
-               ((0,1,19), conv, 'deprecated \\octave; can\'t convert automatically'))
-
-
-if 1:                                  # need new a namespace
-       def conv (str):
-               str = re.sub ('\\\\textstyle([^;]+);',
-                                        '\\\\property Lyrics . textstyle = \\1', str)
-               str = re.sub ('\\\\key([^;]+);', '\\\\accidentals \\1;', str)
-                       
-               return str
-
-       conversions.append (
-               ((0,1,20), conv, 'deprecated \\textstyle, new \key syntax'))
-
-
-if 1:
-       def conv (str):
-               str = re.sub ('\\\\musical_pitch', '\\\\musicalpitch',str)
-               str = re.sub ('\\\\meter', '\\\\time',str)
-                       
-               return str
-
-       conversions.append (
-               ((0,1,21), conv, '\\musical_pitch -> \\musicalpitch, '+
-                '\\meter -> \\time'))
-
-if 1:
-       def conv (str):
-               return str
-
-       conversions.append (
-               ((1,0,0), conv, '0.1.21 -> 1.0.0 '))
-
-
-if 1:
-       def conv (str):
-               str = re.sub ('\\\\accidentals', '\\\\keysignature',str)
-               str = re.sub ('specialaccidentals *= *1', 'keyoctaviation = 0',str)
-               str = re.sub ('specialaccidentals *= *0', 'keyoctaviation = 1',str)
-                       
-               return str
-
-       conversions.append (
-               ((1,0,1), conv, '\\accidentals -> \\keysignature, ' +
-                'specialaccidentals -> keyoctaviation'))
-
-if 1:
-       def conv(str):
-               if re.search ('\\\\header', str):
-                       sys.stderr.write ('\nNot smart enough to convert to new \\header format')
-               return str
-       
-       conversions.append ((1,0,2), conv, '\\header { key = concat + with + operator }')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\melodic', '\\\\notes',str)
-                       
-               return str
-       
-       conversions.append ((1,0,3), conv, '\\melodic -> \\notes')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('default_paper *=', '',str)
-               str =  re.sub ('default_midi *=', '',x)                 
-                       
-               return str
-       
-       conversions.append ((1,0,4), conv, 'default_{paper,midi}')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('ChoireStaff', 'ChoirStaff',str)
-               str =  re.sub ('\\output', 'output = ',str)
-                       
-               return str
-       
-       conversions.append ((1,0,5), conv, 'ChoireStaff -> ChoirStaff')
-
-if 1:
-       def conv(str):
-               if re.search ('[a-zA-Z]+ = *\\translator',str):
-                       sys.stderr.write ('\nNot smart enough to change \\translator syntax')
-                       raise FatalConversionError()
-               return str
-       
-       conversions.append ((1,0,6), conv, 'foo = \\translator {\\type .. } ->\\translator {\\type ..; foo; }')
-
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\lyric', '\\\\lyrics',str)
-                       
-               return str
-       
-       conversions.append ((1,0,7), conv, '\\lyric -> \\lyrics')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\\\[/3+', '\\\\times 2/3 { ',str)
-               str =  re.sub ('\\[/3+', '\\\\times 2/3 { [',str)
-               str =  re.sub ('\\\\\\[([0-9/]+)', '\\\\times \\1 {',str)
-               str =  re.sub ('\\[([0-9/]+)', '\\\\times \\1 { [',str)
-               str =  re.sub ('\\\\\\]([0-9/]+)', '}', str)
-               str =  re.sub ('\\\\\\]', '}',str)
-               str =  re.sub ('\\]([0-9/]+)', '] }', str)
-               return str
-       
-       conversions.append ((1,0,10), conv, '[2/3 ]1/1 -> \\times 2/3 ')
-
-if 1:
-       def conv(str):
-               return str
-       conversions.append ((1,0,12), conv, 'Chord syntax stuff')
-
-
-if 1:
-       def conv(str):
-               
-               
-               str =  re.sub ('<([^>~]+)~([^>]*)>','<\\1 \\2> ~', str)
-                       
-               return str
-       
-       conversions.append ((1,0,13), conv, '<a ~ b> c -> <a b> ~ c')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('<\\[','[<', str)
-               str =  re.sub ('\\]>','>]', str)
-                       
-               return str
-       
-       conversions.append ((1,0,14), conv, '<[a b> <a b]>c -> [<a b> <a b>]')
-
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\type','\\\\context', str)
-               str =  re.sub ('textstyle','textStyle', str)
-                       
-               return str
-       
-       conversions.append ((1,0,16), conv, '\\type -> \\context, textstyle -> textStyle')
-
-
-if 1:
-       def conv(str):
-               if re.search ('\\\\repeat',str):
-                       sys.stderr.write ('\nNot smart enough to convert \\repeat')
-                       raise FatalConversionError()
-               return str
-       
-       conversions.append ((1,0,18), conv,
-                           '\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('SkipBars','skipBars', str)
-               str =  re.sub ('fontsize','fontSize', str)
-               str =  re.sub ('midi_instrument','midiInstrument', str)                 
-                       
-               return str
-
-       conversions.append ((1,0,19), conv,
-                           'fontsize -> fontSize, midi_instrument -> midiInstrument, SkipBars -> skipBars')
-
-
-if 1:
-       def conv(str):
-               str =  re.sub ('tieydirection','tieVerticalDirection', str)
-               str =  re.sub ('slurydirection','slurVerticalDirection', str)
-               str =  re.sub ('ydirection','verticalDirection', str)                   
-                       
-               return str
-
-       conversions.append ((1,0,20), conv,
-                           '{,tie,slur}ydirection -> {v,tieV,slurV}erticalDirection')
-
-
-if 1:
-       def conv(str):
-               str =  re.sub ('hshift','horizontalNoteShift', str)
-                       
-               return str
-
-       conversions.append ((1,0,21), conv,
-                           'hshift -> horizontalNoteShift')
-
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\grouping[^;]*;','', str)
-                       
-               return str
-
-       conversions.append ((1,1,52), conv,
-                           'deprecate \\grouping')
-
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\wheel','\\\\coda', str)
-                       
-               return str
-
-       conversions.append ((1,1,55), conv,
-                           '\\wheel -> \\coda')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('keyoctaviation','keyOctaviation', str)
-               str =  re.sub ('slurdash','slurDash', str)
-                       
-               return str
-
-       conversions.append ((1,1,65), conv,
-                           'slurdash -> slurDash, keyoctaviation -> keyOctaviation')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\repeat *\"?semi\"?','\\\\repeat "volta"', str)
-                       
-               return str
-
-       conversions.append ((1,1,66), conv,
-                           'semi -> volta')
-
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\"?beamAuto\"? *= *\"?0?\"?','noAutoBeaming = "1"', str)
-                       
-               return str
-
-       conversions.append ((1,1,67), conv,
-                           'beamAuto -> noAutoBeaming')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('automaticMelismas', 'automaticMelismata', str)
-                       
-               return str
-
-       conversions.append ((1,2,0), conv,
-                           'automaticMelismas -> automaticMelismata')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('dynamicDir\\b', 'dynamicDirection', str)
-                       
-               return str
-
-       conversions.append ((1,2,1), conv,
-                           'dynamicDir -> dynamicDirection')
-
-if 1:
-       def conv(str):
-               str =  re.sub ('\\\\cadenza *0 *;', '\\\\cadenzaOff', str)
-               str =  re.sub ('\\\\cadenza *1 *;', '\\\\cadenzaOn', str)               
-                       
-               return str
-
-       conversions.append ((1,3,4), conv,
-                           '\\cadenza -> \cadenza{On|Off}')
-
-if 1:
-       def conv (str):
-               str = re.sub ('beamAuto([^=]+)= *"([0-9]+)/([0-9]+)" *;',
-                             'beamAuto\\1 = #(make-moment \\2 \\3)',
-                             str)
-               return str
-
-       conversions.append ((1,3,5), conv, 'beamAuto moment properties')
-
-if 1:
-       def conv (str):
-               str = re.sub ('stemStyle',
-                             'flagStyle',
-                             str)
-               return str
-
-       conversions.append ((1,3,17), conv, 'stemStyle -> flagStyle')
-
-if 1:
-       def conv (str):
-               str = re.sub ('staffLineLeading',
-                             'staffSpace',
-                             str)
-               return str
-
-       conversions.append ((1,3,18), conv, 'staffLineLeading -> staffSpace')
-
-if 1:
-       def conv (str):
-               str = re.sub ('textEmptyDimension *= *##t',
-                             'textNonEmpty = ##f',
-                             str)
-               str = re.sub ('textEmptyDimension *= *##f',
-                             'textNonEmpty = ##t',
-                             str)
-               return str
-
-       conversions.append ((1,3,35), conv, 'textEmptyDimension -> textNonEmpty')
-
-if 1:
-       def conv (str):
-               str = re.sub ("([a-z]+)[ \t]*=[ \t]*\\\\musicalpitch *{([- 0-9]+)} *\n",
-                             "(\\1 . (\\2))\n", str)
-               str = re.sub ("\\\\musicalpitch *{([0-9 -]+)}",
-                             "\\\\musicalpitch #'(\\1)", str)
-               if re.search ('\\\\notenames',str):
-                       sys.stderr.write ('\nNot smart enough to convert to new \\notenames format')
-               return str
-
-       conversions.append ((1,3,38), conv, '\musicalpitch { a b c } -> #\'(a b c)')
-
-if 1:
-       def conv (str):
-               def replace (match):
-                       return '\\key %s;' % string.lower (match.group (1))
-               
-               str = re.sub ("\\\\key ([^;]+);",  replace, str)
-               return str
-       
-       conversions.append ((1,3,39), conv, '\\key A ;  ->\\key a;')
-
-if 1:
-       def conv (str):
-               if re.search ('\\[:',str):
-                       sys.stderr.write ('\nNot smart enough to convert to new tremolo format')
-               return str
-
-       conversions.append ((1,3,41), conv,
-                           '[:16 c4 d4 ] -> \\repeat "tremolo" 2 { c16 d16 }')
-
-if 1:
-       def conv (str):
-               str = re.sub ('Staff_margin_engraver' , 'Instrument_name_engraver', str)
-               return str
-
-       conversions.append ((1,3,42), conv,
-                           'Staff_margin_engraver deprecated, use Instrument_name_engraver')
-
-if 1:
-       def conv (str):
-               str = re.sub ('note[hH]eadStyle\\s*=\\s*"?(\\w+)"?' , "noteHeadStyle = #'\\1", str)
-               return str
-
-       conversions.append ((1,3,49), conv,
-                           'noteHeadStyle value: string -> symbol')
-
-if 1:
-       def conv (str):
-               str = re.sub (r"""\\key *([a-z]+) *;""", r"""\\key \1 \major;""",str);
-               return str
-       conversions.append ((1,3,59), conv,
-                           '\key X ; -> \key X major; ') 
-
-if 1:
-       def conv (str):
-               str = re.sub (r'latexheaders *= *"\\\\input ',
-                             'latexheaders = "',
-                             str)
-               return str
-       conversions.append ((1,3,68), conv, 'latexheaders = "\\input global" -> latexheaders = "global"')
-
-
-
-################ TODO: lots of other syntax change should be done here as well
-
-
-
-if 1:
-       def conv (str):
-               str = re.sub ('basicCollisionProperties', 'NoteCollision', str)
-               str = re.sub ('basicVoltaSpannerProperties' , "VoltaBracket", str)
-               str = re.sub ('basicKeyProperties' , "KeySignature", str)
-
-               str = re.sub ('basicClefItemProperties' ,"Clef", str)
-
-
-               str = re.sub ('basicLocalKeyProperties' ,"Accidentals", str)
-               str = re.sub ('basicMarkProperties' ,"Accidentals", str)                                
-               str = re.sub ('basic([A-Za-z_]+)Properties', '\\1', str)
-               return str
-       
-       conversions.append ((1,3,92), conv, 'basicXXXProperties -> XXX')
-
-if 1:
-       def conv (str):
-               str = re.sub ('\\\\stemup', '\\\\stemUp', str)
-               str = re.sub ('\\\\stemdown', '\\\\stemDown', str)
-               str = re.sub ('\\\\stemboth', '\\\\stemBoth', str)
-               str = re.sub ('\\\\slurup', '\\\\slurUp', str)
-               str = re.sub ('\\\\slurboth', '\\\\slurBoth', str)
-               str = re.sub ('\\\\slurdown', '\\\\slurDown', str)
-               str = re.sub ('\\\\slurdotted', '\\\\slurDotted', str)
-               str = re.sub ('\\\\slurnormal', '\\\\slurNoDots', str)          
-               
-               str = re.sub ('\\\\shiftoff', '\\\\shiftOff', str)
-               str = re.sub ('\\\\shifton', '\\\\shiftOn', str)
-               str = re.sub ('\\\\shiftonn', '\\\\shiftOnn', str)
-               str = re.sub ('\\\\shiftonnn', '\\\\shiftOnnn', str)
-
-               str = re.sub ('\\\\onevoice', '\\\\oneVoice', str)
-               str = re.sub ('\\\\voiceone', '\\\\voiceOne', str)
-               str = re.sub ('\\\\voicetwo', '\\\\voiceTwo', str)
-               str = re.sub ('\\\\voicethree', '\\\\voiceThree', str)
-               str = re.sub ('\\\\voicefour', '\\\\voiceFour', str)
-               
-               return str
-       
-       conversions.append ((1,3,93), conv,
-                           'property definiton case (eg. onevoice -> oneVoice)')
-
-
-if 1:
-       def conv (str):
-               str = re.sub ('ChordNames*', 'ChordNames', str)
-               if re.search ('\\\\textscript "[^"]* *"[^"]*"', str):
-                       sys.stderr.write ('\nNot smart enough to convert to new \\textscript markup text')
-
-               str = re.sub ('\\textscript +("[^"]*")', '\\textscript #\\1', str)
-
-               return str
-       
-       conversions.append ((1,3,97), conv, 'ChordName -> ChordNames')
-
-if 1:
-       def conv (str):
-               str = re.sub ('beamAutoEnd_([0-9]*) *= *(#\\([^)]*\\))', 'autoBeamSettings \\push #\'(end 1 \\1 * *) = \\2', str)
-               str = re.sub ('beamAutoBegin_([0-9]*) *= *(#\\([^)]*\))', 'autoBeamSettings \\push #\'(begin 1 \\1 * *) = \\2', str)
-               str = re.sub ('beamAutoEnd *= *(#\\([^)]*\\))', 'autoBeamSettings \\push #\'(end * * * *) = \\1', str)
-               str = re.sub ('beamAutoBegin *= *(#\\([^)]*\\))', 'autoBeamSettings \\push #\'(begin * * * *) = \\1', str)
-
-
-               return str
-       
-       conversions.append ((1,3,102), conv, 'beamAutoEnd -> autoBeamSettings \\push (end * * * *)')
-
-############################
-       
-
-def get_conversions (from_version, to_version):
-       def version_b (v, f = from_version, t = to_version):
-               return version_cmp (v[0], f) > 0 and version_cmp (v[0], t) <= 0
-       return filter (version_b, conversions)
-
-
-def latest_version ():
-       return conversions[-1][0]
-
-def do_conversion (infile, from_version, outfile, to_version):
-       conv_list = get_conversions (from_version, to_version)
-
-       sys.stderr.write ('Applying conversions: ')
-       str = infile.read ()
-       last_conversion = ()
-       try:
-               for x in conv_list:
-                       sys.stderr.write (tup_to_str (x[0])  + ', ')
-                       str = x[1] (str)
-                       last_conversion = x[0]
-
-       except FatalConversionError:
-               sys.stderr.write ('Error while converting; I won\'t convert any further')
-
-       if last_conversion:
-               sys.stderr.write ('\n')
-               new_ver =  '\\\\version \"%s\"' % tup_to_str (last_conversion)
-               if re.search (mudela_version_re_str, str):
-                       str = re.sub (mudela_version_re_str,new_ver , str)
-               else:
-                       str = new_ver + '\n' + str
-
-               outfile.write(str)
-
-       return last_conversion
-       
-class UnknownVersion:
-       pass
-
-def do_one_file (infile_name):
-       sys.stderr.write ('Processing `%s\' ... '% infile_name)
-       outfile_name = ''
-       if __main__.edit:
-               outfile_name = infile_name + '.NEW'
-       elif __main__.outfile_name:
-               outfile_name = __main__.outfile_name
-
-       if __main__.from_version:
-               from_version = __main__.from_version
-       else:
-               guess = guess_mudela_version (infile_name)
-               if not guess:
-                       raise UnknownVersion()
-               from_version = str_to_tuple (guess)
-
-       if __main__.to_version:
-               to_version = __main__.to_version
-       else:
-               to_version = latest_version ()
-
-
-       if infile_name:
-               infile = open (infile_name,'r')
-       else:
-               infile = sys.stdin
-
-       if outfile_name:
-               outfile =  open (outfile_name, 'w')
-       else:
-               outfile = sys.stdout
-
-       touched = do_conversion (infile, from_version, outfile, to_version)
-
-       if infile_name:
-               infile.close ()
-
-       if outfile_name:
-               outfile.close ()
-
-       if __main__.edit and touched:
-               try:
-                       os.remove(infile_name + '~')
-               except:
-                       pass
-               os.rename (infile_name, infile_name + '~')
-               os.rename (infile_name + '.NEW', infile_name)
-
-       sys.stderr.write ('\n')
-       sys.stderr.flush ()
-
-edit = 0
-to_version = ()
-from_version = ()
-outfile_name = ''
-
-(options, files) = getopt.getopt (
-       sys.argv[1:], 'o:f:t:seh', ['version', 'output', 'show-rules', 'help', 'edit', 'from=', 'to'])
-
-for opt in options:
-       o = opt[0]
-       a = opt[1]
-       if o== '--help' or o == '-h':
-               usage ()
-               sys.exit (0)
-       if o == '--version' or o == '-v':
-               print_version ()
-               sys.exit (0)
-       elif o== '--from' or o=='-f':
-               from_version = str_to_tuple (a)
-       elif o== '--to' or o=='-t':
-               to_version = str_to_tuple (a)
-       elif o== '--edit' or o == '-e':
-               edit = 1
-       elif o== '--show-rules' or o == '-s':
-               show_rules (sys.stdout)
-               sys.exit(0)
-       elif o == '--output' or o == '-o':
-               outfile_name = a
-       else:
-               print o
-               raise getopt.error
-
-identify ()
-for f in files:
-       if f == '-':
-               f = ''
-       try:
-               do_one_file (f)
-       except UnknownVersion:
-               pass
diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py
deleted file mode 100644 (file)
index d37806d..0000000
+++ /dev/null
@@ -1,1102 +0,0 @@
-#!@PYTHON@
-# vim: set noexpandtab:
-# TODO:
-# * Figure out clean set of options. Hmm, isn't it pretty ok now?
-# * add support for .lilyrc
-
-
-# todo: dimension handling (all the x2y) is clumsy. 
-
-# This is was the idea for handling of comments:
-#      Multiline comments, @ignore .. @end ignore is scanned for
-#      in read_doc_file, and the chunks are marked as 'ignore', so
-#      mudela-book will not touch them any more. The content of the
-#      chunks are written to the output file. Also 'include' and 'input'
-#      regex has to check if they are commented out.
-#
-#      Then it is scanned for 'mudela', 'mudela-file' and 'mudela-block'.
-#      These three regex's has to check if they are on a commented line,
-#      % for latex, @c for texinfo.
-#
-#      Then lines that are commented out with % (latex) and @c (Texinfo)
-#      are put into chunks marked 'ignore'. This cannot be done before
-#      searching for the mudela-blocks because % is also the comment character
-#      for lilypond.
-#
-#      The the rest of the rexeces are searched for. They don't have to test
-#      if they are on a commented out line.
-
-import os
-import stat
-import string
-import re
-import getopt
-import sys
-import __main__
-import operator
-
-
-program_version = '@TOPLEVEL_VERSION@'
-if program_version == '@' + 'TOPLEVEL_VERSION' + '@':
-       program_version = '1.3.106'     
-
-include_path = [os.getcwd()]
-
-
-# g_ is for global (?)
-
-g_here_dir = os.getcwd ()
-g_dep_prefix = ''
-g_outdir = ''
-g_force_mudela_fontsize = 0
-g_read_lys = 0
-g_do_pictures = 1
-g_num_cols = 1
-format = ''
-g_run_lilypond = 1
-no_match = 'a\ba'
-
-default_music_fontsize = 16
-default_text_fontsize = 12
-
-
-class LatexPaper:
-       def __init__(self):
-               self.m_paperdef =  {
-                       # the dimentions are from geometry.sty
-                       'a0paper': (mm2pt(841), mm2pt(1189)),
-                       'a1paper': (mm2pt(595), mm2pt(841)),
-                       'a2paper': (mm2pt(420), mm2pt(595)),
-                       'a3paper': (mm2pt(297), mm2pt(420)),
-                       'a4paper': (mm2pt(210), mm2pt(297)),
-                       'a5paper': (mm2pt(149), mm2pt(210)),
-                       'b0paper': (mm2pt(1000), mm2pt(1414)),
-                       'b1paper': (mm2pt(707), mm2pt(1000)),
-                       'b2paper': (mm2pt(500), mm2pt(707)),
-                       'b3paper': (mm2pt(353), mm2pt(500)),
-                       'b4paper': (mm2pt(250), mm2pt(353)),
-                       'b5paper': (mm2pt(176), mm2pt(250)),
-                       'letterpaper': (in2pt(8.5), in2pt(11)),
-                       'legalpaper': (in2pt(8.5), in2pt(14)),
-                       'executivepaper': (in2pt(7.25), in2pt(10.5))}
-               self.m_use_geometry = None
-               self.m_papersize = 'letterpaper'
-               self.m_fontsize = 10
-               self.m_num_cols = 1
-               self.m_landscape = 0
-               self.m_geo_landscape = 0
-               self.m_geo_width = None
-               self.m_geo_textwidth = None
-               self.m_geo_lmargin = None
-               self.m_geo_rmargin = None
-               self.m_geo_includemp = None
-               self.m_geo_marginparwidth = {10: 57, 11: 50, 12: 35}
-               self.m_geo_marginparsep = {10: 11, 11: 10, 12: 10}
-               self.m_geo_x_marginparwidth = None
-               self.m_geo_x_marginparsep = None
-               self.__body = None
-       def set_geo_option(self, name, value):
-               if name == 'body' or name == 'text':
-                       if type(value) == type(""):
-                               self._set_dimen('m_geo_textwidth', value)
-                       else:
-                               self._set_dimen('m_geo_textwidth', value[0])
-                       self.__body = 1
-               elif name == 'portrait':
-                       self.m_geo_landscape = 0
-               elif name == 'reversemp' or name == 'reversemarginpar':
-                       if self.m_geo_includemp == None:
-                               self.m_geo_includemp = 1
-               elif name == 'marginparwidth' or name == 'marginpar':
-                       self._set_dimen('m_geo_x_marginparwidth', value)
-                       self.m_geo_includemp = 1
-               elif name == 'marginparsep':
-                       self._set_dimen('m_geo_x_marginparsep', value)
-                       self.m_geo_includemp = 1
-               elif name == 'scale':
-                       if type(value) == type(""):
-                               self.m_geo_width = self.get_paperwidth() * float(value)
-                       else:
-                               self.m_geo_width = self.get_paperwidth() * float(value[0])
-               elif name == 'hscale':
-                       self.m_geo_width = self.get_paperwidth() * float(value)
-               elif name == 'left' or name == 'lmargin':
-                       self._set_dimen('m_geo_lmargin', value)
-               elif name == 'right' or name == 'rmargin':
-                       self._set_dimen('m_geo_rmargin', value)
-               elif name == 'hdivide' or name == 'divide':
-                       if value[0] not in ('*', ''):
-                               self._set_dimen('m_geo_lmargin', value[0])
-                       if value[1] not in ('*', ''):
-                               self._set_dimen('m_geo_width', value[1])
-                       if value[2] not in ('*', ''):
-                               self._set_dimen('m_geo_rmargin', value[2])
-               elif name == 'hmargin':
-                       if type(value) == type(""):
-                               self._set_dimen('m_geo_lmargin', value)
-                               self._set_dimen('m_geo_rmargin', value)
-                       else:
-                               self._set_dimen('m_geo_lmargin', value[0])
-                               self._set_dimen('m_geo_rmargin', value[1])
-               elif name == 'margin':#ugh there is a bug about this option in
-                                       # the geometry documentation
-                       if type(value) == type(""):
-                               self._set_dimen('m_geo_lmargin', value)
-                               self._set_dimen('m_geo_rmargin', value)
-                       else:
-                               self._set_dimen('m_geo_lmargin', value[0])
-                               self._set_dimen('m_geo_rmargin', value[0])
-               elif name == 'total':
-                       if type(value) == type(""):
-                               self._set_dimen('m_geo_width', value)
-                       else:
-                               self._set_dimen('m_geo_width', value[0])
-               elif name == 'width' or name == 'totalwidth':
-                       self._set_dimen('m_geo_width', value)
-               elif name == 'paper' or name == 'papername':
-                       self.m_papersize = value
-               elif name[-5:] == 'paper':
-                       self.m_papersize = name
-               else:
-                       self._set_dimen('m_geo_'+name, value)
-       def _set_dimen(self, name, value):
-               if type(value) == type("") and value[-2:] == 'pt':
-                       self.__dict__[name] = float(value[:-2])
-               elif type(value) == type("") and value[-2:] == 'mm':
-                       self.__dict__[name] = mm2pt(float(value[:-2]))
-               elif type(value) == type("") and value[-2:] == 'cm':
-                       self.__dict__[name] = 10 * mm2pt(float(value[:-2]))
-               elif type(value) == type("") and value[-2:] == 'in':
-                       self.__dict__[name] = in2pt(float(value[:-2]))
-               else:
-                       self.__dict__[name] = value
-       def display(self):
-               print "LatexPaper:\n-----------"
-               for v in self.__dict__.keys():
-                       if v[:2] == 'm_':
-                               print v, self.__dict__[v]
-               print "-----------"
-       def get_linewidth(self):
-               w = self._calc_linewidth()
-               if self.m_num_cols == 2:
-                       return (w - 10) / 2
-               else:
-                       return w
-       def get_paperwidth(self):
-               #if self.m_use_geometry:
-                       return self.m_paperdef[self.m_papersize][self.m_landscape or self.m_geo_landscape]
-               #return self.m_paperdef[self.m_papersize][self.m_landscape]
-       
-       def _calc_linewidth(self):
-               # since geometry sometimes ignores 'includemp', this is
-               # more complicated than it should be
-               mp = 0
-               if self.m_geo_includemp:
-                       if self.m_geo_x_marginparsep is not None:
-                               mp = mp + self.m_geo_x_marginparsep
-                       else:
-                               mp = mp + self.m_geo_marginparsep[self.m_fontsize]
-                       if self.m_geo_x_marginparwidth is not None:
-                               mp = mp + self.m_geo_x_marginparwidth
-                       else:
-                               mp = mp + self.m_geo_marginparwidth[self.m_fontsize]
-               if self.__body:#ugh test if this is necessary
-                       mp = 0
-               def tNone(a, b, c):
-                       return a == None, b == None, c == None
-               if not self.m_use_geometry:
-                       return latex_linewidths[self.m_papersize][self.m_fontsize]
-               else:
-                       if tNone(self.m_geo_lmargin, self.m_geo_width,
-                               self.m_geo_rmargin) == (1, 1, 1):
-                               if self.m_geo_textwidth:
-                                       return self.m_geo_textwidth
-                               w = self.get_paperwidth() * 0.8
-                               return w - mp
-                       elif tNone(self.m_geo_lmargin, self.m_geo_width,
-                                self.m_geo_rmargin) == (0, 1, 1):
-                                if self.m_geo_textwidth:
-                                       return self.m_geo_textwidth
-                                return self.f1(self.m_geo_lmargin, mp)
-                       elif tNone(self.m_geo_lmargin, self.m_geo_width,
-                                self.m_geo_rmargin) == (1, 1, 0):
-                                if self.m_geo_textwidth:
-                                       return self.m_geo_textwidth
-                                return self.f1(self.m_geo_rmargin, mp)
-                       elif tNone(self.m_geo_lmargin, self.m_geo_width,
-                               self.m_geo_rmargin) \
-                                       in ((0, 0, 1), (1, 0, 0), (1, 0, 1)):
-                               if self.m_geo_textwidth:
-                                       return self.m_geo_textwidth
-                               return self.m_geo_width - mp
-                       elif tNone(self.m_geo_lmargin, self.m_geo_width,
-                               self.m_geo_rmargin) in ((0, 1, 0), (0, 0, 0)):
-                               w = self.get_paperwidth() - self.m_geo_lmargin - self.m_geo_rmargin - mp
-                               if w < 0:
-                                       w = 0
-                               return w
-                       raise "Never do this!"
-       def f1(self, m, mp):
-               tmp = self.get_paperwidth() - m * 2 - mp
-               if tmp < 0:
-                       tmp = 0
-               return tmp
-       def f2(self):
-               tmp = self.get_paperwidth() - self.m_geo_lmargin \
-                       - self.m_geo_rmargin
-               if tmp < 0:
-                       return 0
-               return tmp
-
-class TexiPaper:
-       def __init__(self):
-               self.m_papersize = 'a4'
-               self.m_fontsize = 12
-       def get_linewidth(self):
-               return texi_linewidths[self.m_papersize][self.m_fontsize]
-
-def mm2pt(x):
-       return x * 2.8452756
-def in2pt(x):
-       return x * 72.26999
-def em2pt(x, fontsize):
-       return {10: 10.00002, 11: 10.8448, 12: 11.74988}[fontsize] * x
-def ex2pt(x, fontsize):
-       return {10: 4.30554, 11: 4.7146, 12: 5.16667}[fontsize] * x
-       
-# latex linewidths:
-# indices are no. of columns, papersize,  fontsize
-# Why can't this be calculated?
-latex_linewidths = {
-       'a4paper':{10: 345, 11: 360, 12: 390},
-       'a4paper-landscape': {10: 598, 11: 596, 12:592},
-       'a5paper':{10: 276, 11: 276, 12: 276},
-       'b5paper':{10: 345, 11: 356, 12: 356},
-       'letterpaper':{10: 345, 11: 360, 12: 390},
-       'letterpaper-landscape':{10: 598, 11: 596, 12:596},
-       'legalpaper': {10: 345, 11: 360, 12: 390},
-       'executivepaper':{10: 345, 11: 360, 12: 379}}
-
-texi_linewidths = {
-       'a4': {12: 455},
-       'a4wide': {12: 470},
-       'smallbook': {12: 361},
-       'texidefault': {12: 433}}
-
-option_definitions = [
-  ('EXT', 'f', 'format', 'set format.  EXT is one of texi and latex.'),
-  ('DIM',  '', 'default-music-fontsize', 'default fontsize for music.  DIM is assumed to be in points'),
-  ('DIM',  '', 'default-mudela-fontsize', 'deprecated, use --default-music-fontsize'),
-  ('DIM', '', 'force-music-fontsize', 'force fontsize for all inline mudela. DIM is assumed be to in points'),
-  ('DIM', '', 'force-mudela-fontsize', 'deprecated, use --force-music-fontsize'),
-  ('DIR', 'I', 'include', 'include path'),
-  ('', 'M', 'dependencies', 'write dependencies'),
-  ('PREF', '',  'dep-prefix', 'prepend PREF before each -M dependency'),
-  ('', 'n', 'no-lily', 'don\'t run lilypond'),
-  ('', '', 'no-pictures', "don\'t generate pictures"),
-  ('', '', 'read-lys', "don't write ly files."),
-  ('FILE', 'o', 'outname', 'filename main output file'),
-  ('FILE', '', 'outdir', "where to place generated files"),
-  ('', 'v', 'version', 'print version information' ),
-  ('', 'h', 'help', 'print help'),
-  ]
-
-# format specific strings, ie. regex-es for input, and % strings for output
-output_dict= {
-       'latex': {
-               'output-mudela-fragment' : r"""\begin[eps,singleline,%s]{mudela}
-  \context Staff <
-    \context Voice{
-      %s
-    }
-  >
-\end{mudela}""", 
-               'output-mudela':r"""\begin[%s]{mudela}
-%s
-\end{mudela}""",
-               'output-verbatim': "\\begin{verbatim}%s\\end{verbatim}",
-               'output-default-post': "\\def\postMudelaExample{}\n",
-               'output-default-pre': "\\def\preMudelaExample{}\n",
-               'usepackage-graphics': '\\usepackage{graphics}\n',
-               'output-eps': '\\noindent\\parbox{\\mudelaepswidth{%(fn)s.eps}}{\includegraphics{%(fn)s.eps}}',
-               'output-tex': '\\preMudelaExample \\input %(fn)s.tex \\postMudelaExample\n',
-               'pagebreak': r'\pagebreak',
-               },
-       'texi' : {'output-mudela': """@mudela[%s]
-%s
-@end mudela 
-""",
-                 'output-mudela-fragment': """@mudela[%s]
-\context Staff\context Voice{ %s }
-@end mudela """,
-                 'pagebreak': None,
-                 'output-verbatim': r"""@example
-%s
-@end example
-""",
-
-# do some tweaking: @ is needed in some ps stuff.
-# override EndLilyPondOutput, since @tex is done
-# in a sandbox, you can't do \input lilyponddefs at the
-# top of the document.
-
-# should also support fragment in
-                 
-                 'output-all': r"""@tex
-\catcode`\@=12
-\input lilyponddefs
-\def\EndLilyPondOutput{}
-\input %(fn)s.tex
-\catcode`\@=0
-@end tex
-@html
-<p>
-<img src=%(fn)s.png>
-@end html
-""",
-               }
-       }
-
-def output_verbatim (body):
-       if __main__.format == 'texi':
-               body = re.sub ('([@{}])', '@\\1', body)
-       return get_output ('output-verbatim') % body
-
-
-re_dict = {
-       'latex': {'input': r'(?m)^[^%\n]*?(?P<match>\\mbinput{?([^}\t \n}]*))',
-                 'include': r'(?m)^[^%\n]*?(?P<match>\\mbinclude{(?P<filename>[^}]+)})',
-                 'option-sep' : ', *',
-                 'header': r"\\documentclass\s*(\[.*?\])?",
-                 'geometry': r"^(?m)[^%\n]*?\\usepackage\s*(\[(?P<options>.*)\])?\s*{geometry}",
-                 'preamble-end': r'(?P<code>\\begin{document})',
-                 'verbatim': r"(?s)(?P<code>\\begin{verbatim}.*?\\end{verbatim})",
-                 'verb': r"(?P<code>\\verb(?P<del>.).*?(?P=del))",
-                 'mudela-file': r'(?m)^[^%\n]*?(?P<match>\\mudelafile(\[(?P<options>.*?)\])?\{(?P<filename>.+)})',
-                 'mudela' : r'(?m)^[^%\n]*?(?P<match>\\mudela(\[(?P<options>.*?)\])?{(?P<code>.*?)})',
-                 'mudela-block': r"(?sm)^[^%\n]*?(?P<match>\\begin(\[(?P<options>.*?)\])?{mudela}(?P<code>.*?)\\end{mudela})",
-                 'def-post-re': r"\\def\\postMudelaExample",
-                 'def-pre-re': r"\\def\\preMudelaExample",               
-                 'usepackage-graphics': r"\usepackage{graphics}",
-                 'intertext': r',?\s*intertext=\".*?\"',
-                 'multiline-comment': no_match,
-                 'singleline-comment': r"(?m)^.*?(?P<match>(?P<code>^%.*$\n+))",
-                 'numcols': r"(?P<code>\\(?P<num>one|two)column)",
-                 },
-       
-       'texi': {
-                'include':  '(?m)^[^%\n]*?(?P<match>@mbinclude[ \n\t]+(?P<filename>[^\t \n]*))',
-                'input': no_match,
-                'header': no_match,
-                'preamble-end': no_match,
-                'landscape': no_match,
-                'verbatim': r"""(?s)(?P<code>@example\s.*?@end example\s)""",
-                'verb': r"""(?P<code>@code{.*?})""",
-                'mudela-file': '(?m)^(?!@c)(?P<match>@mudelafile(\[(?P<options>.*?)\])?{(?P<filename>[^}]+)})',
-                'mudela' : '(?m)^(?!@c)(?P<match>@mudela(\[(?P<options>.*?)\])?{(?P<code>.*?)})',
-                'mudela-block': r"""(?m)^(?!@c)(?P<match>(?s)(?P<match>@mudela(\[(?P<options>.*?)\])?\s(?P<code>.*?)@end mudela\s))""",
-                 'option-sep' : ', *',
-                 'intertext': r',?\s*intertext=\".*?\"',
-                 'multiline-comment': r"(?sm)^\s*(?!@c\s+)(?P<code>@ignore\s.*?@end ignore)\s",
-                 'singleline-comment': r"(?m)^.*?(?P<match>(?P<code>@c.*$\n+))",
-                 'numcols': no_match,
-                }
-       }
-
-
-for r in re_dict.keys ():
-       olddict = re_dict[r]
-       newdict = {}
-       for k in olddict.keys ():
-               newdict[k] = re.compile (olddict[k])
-       re_dict[r] = newdict
-
-       
-def uniq (list):
-       list.sort ()
-       s = list
-       list = []
-       for x in s:
-               if x not in list:
-                       list.append (x)
-       return list
-               
-
-def get_output (name):
-       return  output_dict[format][name]
-
-def get_re (name):
-       return  re_dict[format][name]
-
-def bounding_box_dimensions(fname):
-       try:
-               fd = open(fname)
-       except IOError:
-               error ("Error opening `%s'" % fname)
-       str = fd.read ()
-       s = re.search('%%BoundingBox: ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)', str)
-       if s:
-               return (int(s.group(3))-int(s.group(1)), 
-                       int(s.group(4))-int(s.group(2)))
-       else:
-               return (0,0)
-
-
-def error (str):
-       sys.stderr.write (str + "\n  Exiting ... \n\n")
-       raise 'Exiting.'
-
-
-def compose_full_body (body, opts):
-       """Construct the mudela code to send to Lilypond.
-       Add stuff to BODY using OPTS as options."""
-       music_size = default_music_fontsize
-       latex_size = default_text_fontsize
-       for o in opts:
-               if g_force_mudela_fontsize:
-                       music_size = g_force_mudela_fontsize
-               else:
-                       m = re.match ('([0-9]+)pt', o)
-                       if m:
-                               music_size = string.atoi(m.group (1))
-
-               m = re.match ('latexfontsize=([0-9]+)pt', o)
-               if m:
-                       latex_size = string.atoi (m.group (1))
-
-       if re.search ('\\\\score', body):
-               is_fragment = 0
-       else:
-               is_fragment = 1
-       if 'fragment' in opts:
-               is_fragment = 1
-       if 'nonfragment' in opts:
-               is_fragment = 0
-
-       if is_fragment and not 'multiline' in opts:
-               opts.append('singleline')
-       if 'singleline' in opts:
-               l = -1.0;
-       else:
-               l = paperguru.get_linewidth()
-       
-       if 'relative' in opts:#ugh only when is_fragment
-               body = '\\relative c { %s }' % body
-       
-       if is_fragment:
-               body = r"""\score { 
- \notes { %s }
-  \paper { }  
-}""" % body
-
-       opts = uniq (opts)
-       optstring = string.join (opts, ' ')
-       optstring = re.sub ('\n', ' ', optstring)
-       body = r"""
-%% Generated by mudela-book.py; options are %s  %%ughUGH not original options
-\include "paper%d.ly"
-\paper  { linewidth = %f \pt; } 
-""" % (optstring, music_size, l) + body
-       return body
-
-def parse_options_string(s):
-       d = {}
-       r1 = re.compile("((\w+)={(.*?)})((,\s*)|$)")
-       r2 = re.compile("((\w+)=(.*?))((,\s*)|$)")
-       r3 = re.compile("(\w+?)((,\s*)|$)")
-       while s:
-               m = r1.match(s)
-               if m:
-                       s = s[m.end():]
-                       d[m.group(2)] = re.split(",\s*", m.group(3))
-                       continue
-               m = r2.match(s)
-               if m:
-                       s = s[m.end():]
-                       d[m.group(2)] = m.group(3)
-                       continue
-               m = r3.match(s)
-               if m:
-                       s = s[m.end():]
-                       d[m.group(1)] = 1
-                       continue
-               print "trøbbel:%s:" % s
-       return d
-
-def scan_latex_preamble(chunks):
-       # first we want to scan the \documentclass line
-       # it should be the first non-comment line
-       idx = 0
-       while 1:
-               if chunks[idx][0] == 'ignore':
-                       idx = idx + 1
-                       continue
-               m = get_re ('header').match(chunks[idx][1])
-               options = re.split (',[\n \t]*', m.group(1)[1:-1])
-               for o in options:
-                       if o == 'landscape':
-                               paperguru.m_landscape = 1
-                       m = re.match("(.*?)paper", o)
-                       if m:
-                               paperguru.m_papersize = m.group()
-                       else:
-                               m = re.match("(\d\d)pt", o)
-                               if m:
-                                       paperguru.m_fontsize = int(m.group(1))
-                       
-               break
-       while chunks[idx][0] != 'preamble-end':
-               if chunks[idx] == 'ignore':
-                       idx = idx + 1
-                       continue
-               m = get_re ('geometry').search(chunks[idx][1])
-               if m:
-                       paperguru.m_use_geometry = 1
-                       o = parse_options_string(m.group('options'))
-                       for k in o.keys():
-                               paperguru.set_geo_option(k, o[k])
-               idx = idx + 1
-
-def scan_texi_preamble (chunks):
-       # this is not bulletproof..., it checks the first 10 chunks
-       idx = 0
-       while 1:
-               if chunks[idx][0] == 'input':
-                       if string.find(chunks[idx][1], "@afourpaper") != -1:
-                               paperguru.m_papersize = 'a4'
-                       elif string.find(chunks[idx][1], "@afourwide") != -1:
-                               paperguru.m_papersize = 'a4wide'
-                       elif string.find(chunks[idx][1], "@smallbook") != -1:
-                               paperguru.m_papersize = 'smallbook'
-               idx = idx + 1
-               if idx == 10 or idx == len(chunks):
-                       break
-
-def scan_preamble (chunks):
-       if __main__.format == 'texi':
-               scan_texi_preamble(chunks)
-       else:
-               assert __main__.format == 'latex'
-               scan_latex_preamble(chunks)
-               
-
-def completize_preamble (chunks):
-       if __main__.format == 'texi':
-               return chunks
-       pre_b = post_b = graphics_b = None
-       for chunk in chunks:
-               if chunk[0] == 'preamble-end':
-                       break
-               if chunk[0] == 'input':
-                       m = get_re('def-pre-re').search(chunk[1])
-                       if m:
-                               pre_b = 1
-               if chunk[0] == 'input':
-                       m = get_re('def-post-re').search(chunk[1])
-                       if m:
-                               post_b = 1
-               if chunk[0] == 'input':
-                       m = get_re('usepackage-graphics').search(chunk[1])
-                       if m:
-                               graphics_b = 1
-       x = 0
-       while chunks[x][0] != 'preamble-end':
-               x = x + 1
-       if not pre_b:
-               chunks.insert(x, ('input', get_output ('output-default-pre')))
-       if not post_b:
-               chunks.insert(x, ('input', get_output ('output-default-post')))
-       if not graphics_b:
-               chunks.insert(x, ('input', get_output ('usepackage-graphics')))
-       return chunks
-
-
-read_files = []
-def find_file (name):
-       f = None
-       for a in include_path:
-               try:
-                       nm = os.path.join (a, name)
-                       f = open (nm)
-                       __main__.read_files.append (nm)
-                       break
-               except IOError:
-                       pass
-       if f:
-               return f.read ()
-       else:
-               error ("File not found `%s'\n" % name)
-               return ''
-
-def do_ignore(match_object):
-       return [('ignore', match_object.group('code'))]
-def do_preamble_end(match_object):
-       return [('preamble-end', match_object.group('code'))]
-
-def make_verbatim(match_object):
-       return [('verbatim', match_object.group('code'))]
-
-def make_verb(match_object):
-       return [('verb', match_object.group('code'))]
-
-def do_include_file(m):
-       "m: MatchObject"
-       return [('input', get_output ('pagebreak'))] \
-            + read_doc_file(m.group('filename')) \
-            + [('input', get_output ('pagebreak'))] 
-
-def do_input_file(m):
-       return read_doc_file(m.group('filename'))
-
-def make_mudela(m):
-       if m.group('options'):
-               options = m.group('options')
-       else:
-               options = ''
-       return [('input', get_output('output-mudela-fragment') % 
-                       (options, m.group('code')))]
-
-def make_mudela_file(m):
-       if m.group('options'):
-               options = m.group('options')
-       else:
-               options = ''
-       return [('input', get_output('output-mudela') %
-                       (options, find_file(m.group('filename'))))]
-
-def make_mudela_block(m):
-       if m.group('options'):
-               options = get_re('option-sep').split (m.group('options'))
-       else:
-           options = []
-       options = filter(lambda s: s != '', options)
-       return [('mudela', m.group('code'), options)]
-
-def do_columns(m):
-       if __main__.format != 'latex':
-               return []
-       if m.group('num') == 'one':
-               return [('numcols', m.group('code'), 1)]
-       if m.group('num') == 'two':
-               return [('numcols', m.group('code'), 2)]
-       
-def chop_chunks(chunks, re_name, func, use_match=0):
-    newchunks = []
-    for c in chunks:
-        if c[0] == 'input':
-            str = c[1]
-            while str:
-                m = get_re (re_name).search (str)
-                if m == None:
-                    newchunks.append (('input', str))
-                    str = ''
-                else:
-                   if use_match:
-                        newchunks.append (('input', str[:m.start ('match')]))
-                   else:
-                        newchunks.append (('input', str[:m.start (0)]))
-                    #newchunks.extend(func(m))
-                   # python 1.5 compatible:
-                   newchunks = newchunks + func(m)
-                    str = str [m.end(0):]
-        else:
-            newchunks.append(c)
-    return newchunks
-
-def read_doc_file (filename):
-       """Read the input file, find verbatim chunks and do \input and \include
-       """
-       str = ''
-       str = find_file(filename)
-
-       if __main__.format == '':
-               latex =  re.search ('\\\\document', str[:200])
-               texinfo =  re.search ('@node|@setfilename', str[:200])
-               if (texinfo and latex) or not (texinfo or latex):
-                       error("error: can't determine format, please specify")
-               if texinfo:
-                       __main__.format = 'texi'
-               else:
-                       __main__.format = 'latex'
-       if __main__.format == 'texi':
-               __main__.paperguru = TexiPaper()
-       else:
-               __main__.paperguru = LatexPaper()
-       chunks = [('input', str)]
-       # we have to check for verbatim before doing include,
-       # because we don't want to include files that are mentioned
-       # inside a verbatim environment
-       chunks = chop_chunks(chunks, 'verbatim', make_verbatim)
-       chunks = chop_chunks(chunks, 'verb', make_verb)
-       chunks = chop_chunks(chunks, 'multiline-comment', do_ignore)
-       #ugh fix input
-       chunks = chop_chunks(chunks, 'include', do_include_file, 1)
-       chunks = chop_chunks(chunks, 'input', do_input_file, 1)
-       return chunks
-
-
-taken_file_names = {}
-def schedule_mudela_block (chunk):
-       """Take the body and options from CHUNK, figure out how the
-       real .ly should look, and what should be left MAIN_STR (meant
-       for the main file).  The .ly is written, and scheduled in
-       TODO.
-
-       Return: a chunk (TYPE_STR, MAIN_STR, OPTIONS, TODO, BASE)
-
-       TODO has format [basename, extension, extension, ... ]
-       
-       """
-       (type, body, opts) = chunk
-       assert type == 'mudela'
-       file_body = compose_full_body (body, opts)
-       basename = `abs(hash (file_body))`
-       for o in opts:
-               m = re.search ('filename="(.*?)"', o)
-               if m:
-                       basename = m.group (1)
-                       if not taken_file_names.has_key(basename):
-                           taken_file_names[basename] = 0
-                       else:
-                           taken_file_names[basename] = taken_file_names[basename] + 1
-                           basename = basename + "-%i" % taken_file_names[basename]
-       if not g_read_lys:
-               update_file(file_body, os.path.join(g_outdir, basename) + '.ly')
-       needed_filetypes = ['tex']
-
-       if format  == 'texi':
-               needed_filetypes.append('eps')
-               needed_filetypes.append('png')
-       if 'eps' in opts and not ('eps' in needed_filetypes):
-               needed_filetypes.append('eps')
-       outname = os.path.join(g_outdir, basename)
-       def f(base, ext1, ext2):
-               a = os.path.isfile(base + ext2)
-               if (os.path.isfile(base + ext1) and
-                   os.path.isfile(base + ext2) and
-                               os.stat(base+ext1)[stat.ST_MTIME] >
-                               os.stat(base+ext2)[stat.ST_MTIME]) or \
-                               not os.path.isfile(base + ext2):
-                       return 1
-       todo = []
-       if 'tex' in needed_filetypes and f(outname, '.ly', '.tex'):
-               todo.append('tex')
-       if 'eps' in needed_filetypes and f(outname, '.tex', '.eps'):
-               todo.append('eps')
-       if 'png' in needed_filetypes and f(outname, '.eps', '.png'):
-               todo.append('png')
-       newbody = ''
-       if 'verbatim' in opts:
-               newbody = output_verbatim (body)
-
-       for o in opts:
-               m = re.search ('intertext="(.*?)"', o)
-               if m:
-                       newbody = newbody  + m.group (1) + "\n\n"
-       if format == 'latex':
-               if 'eps' in opts:
-                       s = 'output-eps'
-               else:
-                       s = 'output-tex'
-       else: # format == 'texi'
-               s = 'output-all'
-       newbody = newbody + get_output(s) % {'fn': basename }
-       return ('mudela', newbody, opts, todo, basename)
-
-def process_mudela_blocks(outname, chunks):#ugh rename
-       newchunks = []
-       # Count sections/chapters.
-       for c in chunks:
-               if c[0] == 'mudela':
-                       c = schedule_mudela_block (c)
-               elif c[0] == 'numcols':
-                       paperguru.m_num_cols = c[2]
-               newchunks.append (c)
-       return newchunks
-
-
-def find_eps_dims (match):
-       "Fill in dimensions of EPS files."
-       
-       fn =match.group (1)
-       dims = bounding_box_dimensions (fn)
-       if g_outdir:
-               fn = os.path.join(g_outdir, fn)
-       
-       return '%ipt' % dims[0]
-
-
-def system (cmd):
-       sys.stderr.write ("invoking `%s'\n" % cmd)
-       st = os.system (cmd)
-       if st:
-               error ('Error command exited with value %d\n' % st)
-       return st
-
-def compile_all_files (chunks):
-       eps = []
-       tex = []
-       png = []
-
-       for c in chunks:
-               if c[0] <> 'mudela':
-                       continue
-               base  = c[4]
-               exts = c[3]
-               for e in exts:
-                       if e == 'eps':
-                               eps.append (base)
-                       elif e == 'tex':
-                               #ugh
-                               if base + '.ly' not in tex:
-                                       tex.append (base + '.ly')
-                       elif e == 'png' and g_do_pictures:
-                               png.append (base)
-       d = os.getcwd()
-       if g_outdir:
-               os.chdir(g_outdir)
-       if tex:
-               # fixme: be sys-independent.
-               def incl_opt (x):
-                       if g_outdir and x[0] <> '/' :
-                               x = os.path.join (g_here_dir, x)
-                       return ' -I %s' % x
-
-               incs =  map (incl_opt, include_path)
-               lilyopts = string.join (incs, ' ' )
-               texfiles = string.join (tex, ' ')
-               system ('lilypond %s %s' % (lilyopts, texfiles))
-       for e in eps:
-               system(r"tex '\nonstopmode \input %s'" % e)
-               system(r"dvips -E -o %s %s" % (e + '.eps', e))
-       for g in png:
-               cmd = r"""gs -sDEVICE=pgm  -dTextAlphaBits=4 -dGraphicsAlphaBits=4  -q -sOutputFile=- -r90 -dNOPAUSE %s -c quit | pnmcrop | pnmtopng > %s"""
-               cmd = cmd % (g + '.eps', g + '.png')
-               system (cmd)
-       if g_outdir:
-               os.chdir(d)
-
-
-def update_file (body, name):
-       """
-       write the body if it has changed
-       """
-       same = 0
-       try:
-               f = open (name)
-               fs = f.read (-1)
-               same = (fs == body)
-       except:
-               pass
-
-       if not same:
-               f = open (name , 'w')
-               f.write (body)
-               f.close ()
-       
-       return not same
-
-
-def getopt_args (opts):
-       "Construct arguments (LONG, SHORT) for getopt from  list of options."
-       short = ''
-       long = []
-       for o in opts:
-               if o[1]:
-                       short = short + o[1]
-                       if o[0]:
-                               short = short + ':'
-               if o[2]:
-                       l = o[2]
-                       if o[0]:
-                               l = l + '='
-                       long.append (l)
-       return (short, long)
-
-def option_help_str (o):
-       "Transform one option description (4-tuple ) into neatly formatted string"
-       sh = '  '       
-       if o[1]:
-               sh = '-%s' % o[1]
-
-       sep = ' '
-       if o[1] and o[2]:
-               sep = ','
-               
-       long = ''
-       if o[2]:
-               long= '--%s' % o[2]
-
-       arg = ''
-       if o[0]:
-               if o[2]:
-                       arg = '='
-               arg = arg + o[0]
-       return '  ' + sh + sep + long + arg
-
-
-def options_help_str (opts):
-       "Convert a list of options into a neatly formatted string"
-       w = 0
-       strs =[]
-       helps = []
-
-       for o in opts:
-               s = option_help_str (o)
-               strs.append ((s, o[3]))
-               if len (s) > w:
-                       w = len (s)
-
-       str = ''
-       for s in strs:
-               str = str + '%s%s%s\n' % (s[0], ' ' * (w - len(s[0])  + 3), s[1])
-       return str
-
-def help():
-       sys.stdout.write("""Usage: mudela-book [options] FILE\n
-Generate hybrid LaTeX input from Latex + mudela
-Options:
-""")
-       sys.stdout.write (options_help_str (option_definitions))
-       sys.stdout.write (r"""Warning all output is written in the CURRENT directory
-
-
-
-Report bugs to bug-gnu-music@gnu.org.
-
-Written by Tom Cato Amundsen <tca@gnu.org> and
-Han-Wen Nienhuys <hanwen@cs.uu.nl>
-""")
-
-       sys.exit (0)
-
-
-def write_deps (fn, target):
-       sys.stdout.write('writing `%s\'\n' % os.path.join(g_outdir, fn))
-       f = open (os.path.join(g_outdir, fn), 'w')
-       f.write ('%s%s: ' % (g_dep_prefix, target))
-       for d in __main__.read_files:
-               f.write ('%s ' %  d)
-       f.write ('\n')
-       f.close ()
-       __main__.read_files = []
-
-def identify():
-       sys.stdout.write ('mudela-book (GNU LilyPond) %s\n' % program_version)
-
-def print_version ():
-       identify()
-       sys.stdout.write (r"""Copyright 1998--1999
-Distributed under terms of the GNU General Public License. It comes with
-NO WARRANTY.
-""")
-
-def do_file(input_filename):
-       file_settings = {}
-       if outname:
-               my_outname = outname
-       else:
-               my_outname = os.path.basename(os.path.splitext(input_filename)[0])
-       my_depname = my_outname + '.dep'                
-
-       chunks = read_doc_file(input_filename)
-       chunks = chop_chunks(chunks, 'mudela', make_mudela, 1)
-       chunks = chop_chunks(chunks, 'mudela-file', make_mudela_file, 1)
-       chunks = chop_chunks(chunks, 'mudela-block', make_mudela_block, 1)
-       chunks = chop_chunks(chunks, 'singleline-comment', do_ignore, 1)
-       chunks = chop_chunks(chunks, 'preamble-end', do_preamble_end)
-       chunks = chop_chunks(chunks, 'numcols', do_columns)
-       #print "-" * 50
-       #for c in chunks: print "c:", c;
-       #sys.exit()
-       scan_preamble(chunks)
-       chunks = process_mudela_blocks(my_outname, chunks)
-       # Do It.
-       if __main__.g_run_lilypond:
-               compile_all_files (chunks)
-               newchunks = []
-               # finishing touch.
-               for c in chunks:
-                       if c[0] == 'mudela' and 'eps' in c[2]:
-                               body = re.sub (r"""\\mudelaepswidth{(.*?)}""", find_eps_dims, c[1])
-                               newchunks.append (('mudela', body))
-                       else:
-                               newchunks.append (c)
-               chunks = newchunks
-       x = 0
-       chunks = completize_preamble (chunks)
-       foutn = os.path.join(g_outdir, my_outname + '.' + format)
-       sys.stderr.write ("Writing `%s'\n" % foutn)
-       fout = open (foutn, 'w')
-       for c in chunks:
-               fout.write (c[1])
-       fout.close ()
-
-       if do_deps:
-               write_deps (my_depname, foutn)
-
-
-outname = ''
-try:
-       (sh, long) = getopt_args (__main__.option_definitions)
-       (options, files) = getopt.getopt(sys.argv[1:], sh, long)
-except getopt.error, msg:
-       sys.stderr.write("error: %s" % msg)
-       sys.exit(1)
-
-do_deps = 0
-for opt in options:    
-       o = opt[0]
-       a = opt[1]
-
-       if o == '--include' or o == '-I':
-               include_path.append (a)
-       elif o == '--version' or o == '-v':
-               print_version ()
-               sys.exit  (0)
-       elif o == '--format' or o == '-f':
-               __main__.format = a
-       elif o == '--outname' or o == '-o':
-               if len(files) > 1:
-                       #HACK
-                       sys.stderr.write("Mudela-book is confused by --outname on multiple files")
-                       sys.exit(1)
-               outname = a
-       elif o == '--help' or o == '-h':
-               help ()
-       elif o == '--no-lily' or o == '-n':
-               __main__.g_run_lilypond = 0
-       elif o == '--dependencies' or o == '-M':
-               do_deps = 1
-       elif o == '--default-music-fontsize':
-               default_music_fontsize = string.atoi (a)
-       elif o == '--default-mudela-fontsize':
-               print "--default-mudela-fontsize is deprecated, use --default-music-fontsize"
-               default_music_fontsize = string.atoi (a)
-       elif o == '--force-music-fontsize':
-               g_force_mudela_fontsize = string.atoi(a)
-       elif o == '--force-mudela-fontsize':
-               print "--force-mudela-fontsize is deprecated, use --default-mudela-fontsize"
-               g_force_mudela_fontsize = string.atoi(a)
-       elif o == '--dep-prefix':
-               g_dep_prefix = a
-       elif o == '--no-pictures':
-               g_do_pictures = 0
-       elif o == '--read-lys':
-               g_read_lys = 1
-       elif o == '--outdir':
-               g_outdir = a
-
-identify()
-if g_outdir:
-       if os.path.isfile(g_outdir):
-               error ("outdir is a file: %s" % g_outdir)
-       if not os.path.exists(g_outdir):
-               os.mkdir(g_outdir)
-for input_filename in files:
-       do_file(input_filename)
-       
-#
-# Petr, ik zou willen dat ik iets zinvoller deed,
-# maar wat ik kan ik doen, het verandert toch niets?
-#   --hwn 20/aug/99