]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.2.2 release/1.2.2
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 22 Aug 1999 23:43:06 +0000 (01:43 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 22 Aug 1999 23:43:06 +0000 (01:43 +0200)
38 files changed:
CHANGES [new file with mode: 0644]
ChangeLog [deleted file]
ChangeLog.orig [deleted file]
Documentation/BLURB.in
Documentation/FLAPTEKST.in
Documentation/bibliography/engraving.bib
Documentation/tex/lilypond-regtest.doc
Documentation/tex/mudela-book-doc.doc
Documentation/topdocs/index.yo
TODO
VERSION
buildscripts/mf-to-table.py
buildscripts/ps-to-gifs.sh
buildscripts/ps-to-pfa.py
debian/control
debian/out/control
flower/getopt-long.cc
flower/include/getopt-long.hh
flower/include/international.hh
lily/main.cc
make/mudela-rules.make
make/out/lilypond.lsm
make/out/lilypond.spec
make/toplevel.make.in
mf/feta-autometric.mf
midi2ly/main.cc
midi2ly/version.cc
po/GNUmakefile
po/it.po
po/lilypond.po
po/nl.po
scripts/convert-mudela.py
scripts/ly2dvi.py
scripts/mudela-book.py
stepmake/bin/make-version.py [new file with mode: 0644]
stepmake/bin/make-version.sh [deleted file]
stepmake/stepmake/generic-targets.make
stepmake/stepmake/po-targets.make

diff --git a/CHANGES b/CHANGES
new file mode 100644 (file)
index 0000000..03566b5
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,48 @@
+pl 1.uu2
+       - complete rewrite of mudela-book. Much cleaner now.
+Support for texinfo.
+       - convert-mudela now per file, add \version if not present.
+
+pl 1.uu1.jcn1
+       - internationalization fixes for getopt-long help
+
+pl 1.uu1
+       - rewrite --help messages for help2man:
+       * lilypond
+       * mi2mu
+       * mudela-book
+       * convert-mudela
+       - cleanup: mf-to-table.py
+       - Getopt_long: support for --help msg.
+
+pl 1.mb1
+       - bf, scalar.cc: ".3" now detected as numerical
+
+********
+       
+pl 0.uu1
+       - refman updates by Werner & Mats
+       - now use ChangeLog for changes.
+       
+pl 0.jcn2
+       - po fixes
+
+pl 0.jcn1
+       - gcc-2.95 nitpicks
+       - added pointers to mailing lists in toplevel docs
+
+0.mb2
+       - configure: more robust detection of Guile
+       - Midi_note_off: revert to fixed note-off velocity. Fixes
+         problem with notes that never stop.
+       - Decreased breakable_column_space_strength
+       - Added a few TODO
+       - bf: "harmonic" and "cross" note heads also for half and 
+         whole notes.
+       - linewidth and textheight set independent of the font size.
+       - bf, titledefs.tex: opus and piece are not repeated for 
+         every piece unless they are explicitly set again.
+
+0.mb1
+       - Changed dynamicDir to dynamicDirection.
+       - refman and tutorial corrections.
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index d867e35..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,29 +0,0 @@
-pl 1.mb1
-       - bf, scalar.cc: ".3" now detected as numerical
-       
-pl 0.uu1
-       - refman updates by Werner & Mats
-       - now use ChangeLog for changes.
-       
-pl 0.jcn2
-       - po fixes
-
-pl 0.jcn1
-       - gcc-2.95 nitpicks
-       - added pointers to mailing lists in toplevel docs
-
-0.mb2
-       - configure: more robust detection of Guile
-       - Midi_note_off: revert to fixed note-off velocity. Fixes
-         problem with notes that never stop.
-       - Decreased breakable_column_space_strength
-       - Added a few TODO
-       - bf: "harmonic" and "cross" note heads also for half and 
-         whole notes.
-       - linewidth and textheight set independent of the font size.
-       - bf, titledefs.tex: opus and piece are not repeated for 
-         every piece unless they are explicitly set again.
-
-0.mb1
-       - Changed dynamicDir to dynamicDirection.
-       - refman and tutorial corrections.
diff --git a/ChangeLog.orig b/ChangeLog.orig
deleted file mode 100644 (file)
index 9fb5000..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-pl 0.uu1
-       - refman updates by Werner & Mats
-       - now use ChangeLog for changes.
-       
-pl 0.jcn2
-       - po fixes
-
-pl 0.jcn1
-       - gcc-2.95 nitpicks
-       - added pointers to mailing lists in toplevel docs
-
-0.mb2
-       - configure: more robust detection of Guile
-       - Midi_note_off: revert to fixed note-off velocity. Fixes
-         problem with notes that never stop.
-       - Decreased breakable_column_space_strength
-       - Added a few TODO
-       - bf: "harmonic" and "cross" note heads also for half and 
-         whole notes.
-       - linewidth and textheight set independent of the font size.
-       - bf, titledefs.tex: opus and piece are not repeated for 
-         every piece unless they are explicitly set again.
-
-0.mb1
-       - Changed dynamicDir to dynamicDirection.
-       - refman and tutorial corrections.
index 591817db351a0dfd178a570ea21671b17bcce640..6933b58e2e7fd60d3effe6dba849144d46f99966 100644 (file)
@@ -2,4 +2,3 @@ LilyPond is a music typesetter.  It produces beautiful sheet music
 using a high level description file as input.  LilyPond is part of 
 the GNU Project.
 
 using a high level description file as input.  LilyPond is part of 
 the GNU Project.
 
-
index cedaa2e995e880937942e50a3767b7fbde1e629d..b09dbad7b3f19a8ef4f8adb0ff58183defe50b75 100644 (file)
@@ -1,7 +1,3 @@
-LilyPond is de muziekzetter van het GNU Project.  Dit programma drukt
-prachtige bladmuziek volgens een muzikaal definitie bestand.  Ook kan
-het een mechanische uitvoering afspelen naar een MIDI bestand.
-Bijzondere kunstjes zijn verscheidene notenbalken, maatsoorten, sleutels, 
-toonaarden, zangteksten, krachtige invoer taal, cadensa, balken, boogjes, 
-triolen, accoordnamen, transponeren, partituren, en uittreksels voor 
-individuele partijen.  Een fraaie set muziektekens is inbegrepen.
+LilyPond is een muziekzetter.  Zij maakt prachtige bladmuziek
+uitgaande van een hoog niveau beschrijving bestand.  LilyPond 
+maakt deel uit van het GNU Project.
index e423f0c1b04066b128d2a1f56e3b6961db2cb652..2696988d1b4560e5781a90b525b5c619632b2885 100644 (file)
@@ -225,16 +225,6 @@ year={1989}
 }
 
 
 }
 
 
-
-@Book{unknown69:_music_notat,
-  author =      {--},
-  title =       {Music Notation},
-  publisher =   {Crescendo books},
-  year =        1969,
-  note =        {Heussenstamm writes: An extremely thorough exploration of musical notation [..]}
-}
-
-
 @Book {gerou96,
   note = {A concise, alphabetically ordered list of typesetting and music (notation) issues with a rather simplistic attitude but in most  cases "good-enough" answers JCN},
   year =  {1996},
 @Book {gerou96,
   note = {A concise, alphabetically ordered list of typesetting and music (notation) issues with a rather simplistic attitude but in most  cases "good-enough" answers JCN},
   year =  {1996},
@@ -274,7 +264,7 @@ year={1989}
        title = {Handbuch der Notationskunde},
        address={Leipzig},
        publisher={Breitkopf & Hartel},
        title = {Handbuch der Notationskunde},
        address={Leipzig},
        publisher={Breitkopf & Hartel},
-       note= {Very thorough treatment (in two volumes) of the history musical notation},
+       note= {Very thorough treatment (in two volumes) of the history of music notation},
 }
 
 @Book {rosenthal67,
 }
 
 @Book {rosenthal67,
@@ -313,3 +303,12 @@ year={1989}
 
 
 
 
 
 
+@Book{tyboni94:_noter_handb_i_tradit_noter,
+  author =      {B\"oje Tyboni},
+  title =       {Noter Handbok I Traditionell Notering},
+  publisher =   {Gehrmans Musikf\"orlag},
+  year =        1994,
+  address =     {Stockholm},
+  note =        {Swedish book on music notation.}
+}
+
index 3154acf42b82b9487c032ab93c56addcf3af6c6d..79ad4b8331892ba53bccf74761053dfdb24dafd7 100644 (file)
@@ -258,17 +258,17 @@ Fonts are  available in a default set of sizes: 11, 13, 16, 20, 23 and
 26pt staffheight.  Sizes of the text fonts and symbol fonts are made
 to match the staff dimensions.    
 
 26pt staffheight.  Sizes of the text fonts and symbol fonts are made
 to match the staff dimensions.    
 
-\mudelafile{size11.ly}
+\mudelafile[nofly]{size11.ly}
 
 
-\mudelafile{size13.ly}
+\mudelafile[nofly]{size13.ly}
 
 
-\mudelafile{size16.ly}
+\mudelafile[nofly]{size16.ly}
 
 
-\mudelafile{size20.ly}
+\mudelafile[nofly]{size20.ly}
 
 
-\mudelafile{size23.ly}
+\mudelafile[nofly]{size23.ly}
 
 
-\mudelafile{size26.ly}
+\mudelafile[nofly]{size26.ly}
 
 
 \section{Clefs and Time Signatures}
 
 
 \section{Clefs and Time Signatures}
index 95a439f6d7855eded67b79351b975cfa1b4c5643..97fd452457176bdcb7aa374f3974efd253ecbf4f 100644 (file)
@@ -32,7 +32,7 @@ This document assumes you have basic knowledge of GNU LilyPond and
 send a patch.
 
 So what does this look like? Well, here is an example:
 send a patch.
 
 So what does this look like? Well, here is an example:
-\begin{mudela}[veryverbatim, intertext="produces this music:"]
+\begin[veryverbatim, intertext="produces this music:"]{mudela}
 \score{
   \notes\relative c'{
     \time 5/8;
 \score{
   \notes\relative c'{
     \time 5/8;
@@ -67,7 +67,7 @@ music, another file than \verb|paper16.ly| will be included.
 If you want to make the music not so wide, you can insert a
 \verb|\paper| statement that set the linewidth:
 
 If you want to make the music not so wide, you can insert a
 \verb|\paper| statement that set the linewidth:
 
-\begin{mudela}[veryverbatim, intertext="produces this music:"]
+\begin[veryverbatim, intertext="produces this music:"]{mudela}
 \score{
   \notes\relative c'{
     \time 5/8;
 \score{
   \notes\relative c'{
     \time 5/8;
@@ -88,12 +88,12 @@ If you only write voice-contents in the mudela block, mudela-book
 will set the \verb|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:
 will set the \verb|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:
-\begin{mudela}[veryverbatim, intertext="produce a well known harmonic progression:"]
+\begin[veryverbatim, intertext="produce a well known harmonic progression:"]{mudela}
   <c' e g> <b d g> <c2 e g>
 \end{mudela}
 
 If you want to place music examples in the text,
   <c' e g> <b d g> <c2 e g>
 \end{mudela}
 
 If you want to place music examples in the text,
-\begin{mudela}[eps]
+\begin[eps]{mudela}
   <c' e g> <b d g> <c2 e g>
 \end{mudela}
 , you can use the \verb|eps| option. This will create the music as
   <c' e g> <b d g> <c2 e g>
 \end{mudela}
 , you can use the \verb|eps| option. This will create the music as
@@ -102,14 +102,14 @@ eps graphics and include it into the document with the
 
 The code used look like this:
 \begin{verbatim}
 
 The code used look like this:
 \begin{verbatim}
-\begin{mudela}[eps]
+\begin[eps]{mudela}
   <c' e g> <b d g> <c2 e g>
 \end{mudela}
 \end{verbatim}
 
 You can also use the \verb|eps| option if the block is a complete
 mudela source. This 5 cm long empty line, 
   <c' e g> <b d g> <c2 e g>
 \end{mudela}
 \end{verbatim}
 
 You can also use the \verb|eps| option if the block is a complete
 mudela source. This 5 cm long empty line, 
-\begin{mudela}[eps]
+\begin[eps]{mudela}
 \score{
   \notes{s}
   \paper{ linewidth = 5.\cm;}
 \score{
   \notes{s}
   \paper{ linewidth = 5.\cm;}
@@ -117,7 +117,7 @@ mudela source. This 5 cm long empty line,
 \end{mudela}
 was created with this code:
 \begin{verbatim}
 \end{mudela}
 was created with this code:
 \begin{verbatim}
-\begin{mudela}[eps]
+\begin[eps]{mudela}
 \score{
   \notes{s}
   \paper{ linewidth = 5.\cm;}
 \score{
   \notes{s}
   \paper{ linewidth = 5.\cm;}
@@ -140,7 +140,7 @@ You can use all lilypond fontsizes in mudela-book.
 The default 16pt fontsize, \mudela{<c' e g>}, is probably to big to be included in the middle of the text. 11pt, \mudela[11pt]{<c' e g>} or 13pt, \mudela[13pt]{<c' e g>} is probably better.
 The code can look like this:
 \begin{verbatim}
 The default 16pt fontsize, \mudela{<c' e g>}, is probably to big to be included in the middle of the text. 11pt, \mudela[11pt]{<c' e g>} or 13pt, \mudela[13pt]{<c' e g>} is probably better.
 The code can look like this:
 \begin{verbatim}
-\begin{mudela}[13pt, eps]
+\begin[13pt, eps]{mudela}
 <c' e g>
 \end{mudela}
 \end{verbatim}
 <c' e g>
 \end{mudela}
 \end{verbatim}
@@ -148,35 +148,35 @@ The code can look like this:
 The following options set the fontsize:
 \begin{itemize}
 \item \verb|11pt|
 The following options set the fontsize:
 \begin{itemize}
 \item \verb|11pt|
-\begin{mudela}[11pt, eps]
+\begin[11pt, eps]{mudela}
   \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 \verb|13pt|
   \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 \verb|13pt|
-\begin{mudela}[13pt, eps]
+\begin[13pt, eps]{mudela}
   \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 \verb|16pt|
   \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 \verb|16pt|
-\begin{mudela}[16pt, eps]
+\begin[16pt, eps]{mudela}
   \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 \verb|20pt|
   \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 \verb|20pt|
-\begin{mudela}[20pt, eps]
+\begin[20pt, eps]{mudela}
   \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 \verb|26pt|
   \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 \verb|26pt|
-\begin{mudela}[26pt, eps]
+\begin[26pt, eps]{mudela}
   \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]
   \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]
@@ -196,12 +196,12 @@ file is a definition of a python dictionary:
 
 \begin{verbatim}
 {    'mudela': r"""
 
 \begin{verbatim}
 {    'mudela': r"""
-\begin{mudela}[eps \fontoptions]
+\begin[eps \fontoptions]{mudela}
     \maininput
 \end{mudela}
 """,
     'mudelaRhythm': r"""
     \maininput
 \end{mudela}
 """,
     'mudelaRhythm': r"""
-\begin{mudela}[eps \fontoptions]
+\begin[eps \fontoptions]{mudela}
 \score{
     \context RhythmicStaff{
         \notes{\stemup \maininput}
 \score{
     \context RhythmicStaff{
         \notes{\stemup \maininput}
@@ -216,7 +216,7 @@ The above code show how \verb|\mudela| could have been defined, and
 also defines a new command \verb|mudelaRhythm|. Notice that you can
 send fontsize options to the defined commands. 
 \verb|\mudelaRhythm[11pt]{c4 c8 [c16 c] c4 c}| produce this music:
 also defines a new command \verb|mudelaRhythm|. Notice that you can
 send fontsize options to the defined commands. 
 \verb|\mudelaRhythm[11pt]{c4 c8 [c16 c] c4 c}| produce this music:
-\begin{mudela}[eps, 11pt]
+\begin[eps, 11pt]{mudela}
 \score{
   \context RhythmicStaff{
     \notes{ \stemup c4 r8 [c16 c] c4 c }
 \score{
   \context RhythmicStaff{
     \notes{ \stemup c4 r8 [c16 c] c4 c }
@@ -244,18 +244,18 @@ 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}
 if you need this one of these options.
 
 \section{Examples}
-This was all options to \verb|\begin{mudela}|. The rest of the
+This was all options to \verb|\begin|. The rest of the{mudela}
 document will show some ways you can use mudela in
 \LaTeX~documents. It will also act as a simple test-suite for
 mudela-book. You 
 \marginpar{
 marginpar!
 document will show some ways you can use mudela in
 \LaTeX~documents. It will also act as a simple test-suite for
 mudela-book. You 
 \marginpar{
 marginpar!
-\begin{mudela}[eps, 11pt]
+\begin[eps, 11pt]{mudela}
  \relative c'' {\key c \minor; r4 [g8 g g] es2}
 \end{mudela}
 }can place \verb|eps| mudela in footnotes\footnote{
 footnote!
  \relative c'' {\key c \minor; r4 [g8 g g] es2}
 \end{mudela}
 }can place \verb|eps| mudela in footnotes\footnote{
 footnote!
-\begin{mudela}[eps, 11pt]
+\begin[eps, 11pt]{mudela}
  \relative c'' {\key c \minor;r4 [g8 g g] es2}
 \end{mudela}
 }
  \relative c'' {\key c \minor;r4 [g8 g g] es2}
 \end{mudela}
 }
@@ -284,7 +284,7 @@ the right marging if you set floatingfigure width and mudela linewidth
 to the same value. The code looks like this:
 
 \verb|\begin{floatingfigure}{7cm}|
 to the same value. The code looks like this:
 
 \verb|\begin{floatingfigure}{7cm}|
-\begin{mudela}[verbatim]
+\begin[verbatim]{mudela}
 \score{
   \notes\relative c'{ 
     \time 12/8;  
 \score{
   \notes\relative c'{ 
     \time 12/8;  
@@ -310,22 +310,22 @@ names of some triads:
 \hline
 
 dur &
 \hline
 
 dur &
-\begin{mudela}[eps, fragment]
+\begin[eps, fragment]{mudela}
 <c' e g>
 <c' e g>
-\end{mudela} 
+\end{mudela}
 \\
 \hline moll &
 \\
 \hline moll &
-\begin{mudela}[eps]
+\begin[eps]{mudela}
 <c' es g>
 \end{mudela}
 \\
 \hline forminsket &
 <c' es g>
 \end{mudela}
 \\
 \hline forminsket &
-\begin{mudela}[eps]
+\begin[eps]{mudela}
 <c' es ges>
 \end{mudela}
 \\
 \hline forstørret &
 <c' es ges>
 \end{mudela}
 \\
 \hline forstørret &
-\begin{mudela}[eps]
+\begin[eps]{mudela}
 <c' e gis>
 \end{mudela}
 \\
 <c' e gis>
 \end{mudela}
 \\
@@ -347,11 +347,11 @@ line. The following code will probably break:
 \begin{verbatim}
 \footnote{\begin{mudela}
 \relative c''{ \key es; r8 [g g g] es2}
 \begin{verbatim}
 \footnote{\begin{mudela}
 \relative c''{ \key es; r8 [g g g] es2}
-\end{mudela}}
+\end}{mudela}
 \end{verbatim}
 Mudela-book does know about \verb|\onecolumn| and \verb|\twocolumn|. 
 So the music will be adjusted to the new linewith:
 \end{verbatim}
 Mudela-book does know about \verb|\onecolumn| and \verb|\twocolumn|. 
 So the music will be adjusted to the new linewith:
-\begin{mudela}[veryverbatim, intertext="produces"]
+\begin[veryverbatim, intertext="produces"]{mudela}
 \score{
     \notes\relative c'{c d e f | g2 g | a4 a a a | g1 |
          f4 f f f | e2 e | d4 d d d | c1}
 \score{
     \notes\relative c'{c d e f | g2 g | a4 a a a | g1 |
          f4 f f f | e2 e | d4 d d d | c1}
index 61621f2a6692c3f21cd006e9a29f76f485ca846d..bf794f498e254035541f67047f72710830fb9af2 100644 (file)
@@ -18,10 +18,6 @@ center(mudela(fragment)(
        \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 }
 ))
 
        \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 }
 ))
 
-
-
-
-
 nsect(Free Software)
 
 Of course LilyPond, being part of the GNU project, is url(free
 nsect(Free Software)
 
 Of course LilyPond, being part of the GNU project, is url(free
@@ -29,6 +25,12 @@ software)(http://www.fsf.org/copyleft/copyleft.html).  For more
 url(information)(http://www.fsf.org/philosophy/philosophy.html), see
 the url(Free Software Foundation)(http://www.fsf.org/).
 
 url(information)(http://www.fsf.org/philosophy/philosophy.html), see
 the url(Free Software Foundation)(http://www.fsf.org/).
 
+LilyPond comes in two variants, a stable one, and a development
+snapshots.  The webpages matching the stable versions are at
+lurl(http://www.gnu.org/software/...), the development pages are at
+lurl(http://www.cs.uu.nl/~hanwen/lilypond/).
+
+
 nsect(Preview)
 
 itemize(
 nsect(Preview)
 
 itemize(
diff --git a/TODO b/TODO
index 673acaf3eb4d0fbca4db07f73c4916b748e54f07..594ae3ad4aa7e8502de376b70109a8e007c78ab8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -8,8 +8,9 @@ m
 Most of the items are marked in the code as well
 Grep -i for TODO, FIXME and ugh/ugr/urg.  
 
 Most of the items are marked in the code as well
 Grep -i for TODO, FIXME and ugh/ugr/urg.  
 
-.* TODO after 1.2
+.* TODO 
 . * Break_req handling is silly (break_forbid () + \break fucks up.)
 . * Break_req handling is silly (break_forbid () + \break fucks up.)
+. * redo all --help  messages.
 . * HaraKiriStaffContext removes bar lines and doesn't remove
     staff margin text on removed staff lines.
 . * make all Feta (including dynamics) available to the user in
 . * HaraKiriStaffContext removes bar lines and doesn't remove
     staff margin text on removed staff lines.
 . * make all Feta (including dynamics) available to the user in
@@ -24,7 +25,19 @@ abc2ly, midi2ly?
 . * Junk ghost positioning objects eg, Script leans on  Staffside
     leans on Staff.
 . * bracket ps code.
 . * Junk ghost positioning objects eg, Script leans on  Staffside
     leans on Staff.
 . * bracket ps code.
-. * mudela-book.
+. * mudela-book
+.  * center option (??)
+.  * make mudela-book understand usepackage{geometry}
+.  * check that linewidth set in \paper is not wider than actual linewidth?
+.  * the following fails because mudelabook doesn't care that the
+  last } after \end{mudela} finishes the marginpar:
+    \marginpar{
+    \begin{mudela}
+       c d e f g
+    \end{mudela}}
+.  * force-verbatim is maybe not that useful since latex fails with footnotes,
+  marginpars and others
+"""
 . * Key_engraver, Local_key_item
 . * Think of comprehensive solution for "if (grace_b == self_grace_b_)"
 . * String[String.length] doesn't trap.
 . * Key_engraver, Local_key_item
 . * Think of comprehensive solution for "if (grace_b == self_grace_b_)"
 . * String[String.length] doesn't trap.
diff --git a/VERSION b/VERSION
index f0e4122f1889392ba5a420b4378af3a6a9a77f9d..95a1009af5a79e8a37b49f7523d4bc390cba798b 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=2
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=2
-PATCH_LEVEL=1
-MY_PATCH_LEVEL=mb1
+PATCH_LEVEL=2
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 7b6ecd183e746be2c59d29a9567bd7a66f4aa69b..efbcb7e6613ab8b3f2017cd784c9dd9197ffb820 100644 (file)
@@ -6,20 +6,13 @@
 # 
 # (c) 1997 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 # 
 # (c) 1997 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
-
-#
-# TODO: Should use RE.
-#
-
 import os
 import sys
 import getopt
 import os
 import sys
 import getopt
-from string import *
-import regex
-import regsub
+import string
+import re
 import time
 
 import time
 
-
 (options, files) = getopt.getopt(
     sys.argv[1:], 'a:d:hl:o:p:t:', 
     ['afm=', 'outdir=', 'dep=',  'tex=', 'debug', 'help', 'package='])
 (options, files) = getopt.getopt(
     sys.argv[1:], 'a:d:hl:o:p:t:', 
     ['afm=', 'outdir=', 'dep=',  'tex=', 'debug', 'help', 'package='])
@@ -30,92 +23,49 @@ for opt in options:
     if o == '-p' or o == '--package':
        topdir = a
 
     if o == '-p' or o == '--package':
        topdir = a
 
-sys.path.append (topdir + '/stepmake/bin')
-from packagepython import *
-package = Package (topdir)
-packager = Packager ()
-
-from packagepython import *
-from flower import *
+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
+
+version = '0.9'
 
 
-begin_autometric_re = regex.compile('@{')
-end_autometric_re = regex.compile('@}')
-include_re = regex.compile ('(\([a-zA-Z_0-9-]+\.mf\)')
-autometric_re = regex.compile('@{\(.*\)@}')
-version = '0.8'
 postfixes = ['log', 'dvi', '2602gf', 'tfm']
 
 postfixes = ['log', 'dvi', '2602gf', 'tfm']
 
-class Feta_file(File):
-    """Read Feta metrics from a metafont log-file."""
-
-    def include_scan (self, line):
-       include_pos =  include_re.search (line)
-       while include_pos <> -1:
-           self.dependencies.append (include_re.group (1))
-
-           line = line[include_pos + 1:]
-           include_pos =  include_re.search (line)
-
-    def read_autometricline(self):
-       line = ''
-       while end_autometric_re.search(line) == -1 and not self.eof():
-           suf = File.readline(self)
-           self.include_scan (suf)
-           if begin_autometric_re.search(line) == -1:
-               line = ''
-           line = line + regsub.sub('\n','', suf)
-            line = regsub.sub('\r','', line)
-
-       if self.eof():
-          return ''
-
-       return line;
-    def readline(self):
-       """return what is enclosed in one @{ @} pair"""
-       line = '';
-       while autometric_re.search(line) == -1 and not self.eof():
-           line = self.read_autometricline()
-
-       if self.eof():
-           return '';
-
-       return autometric_re.group(1);
-    def __init__(self, nm):
-       File.__init__(self, nm)
-       self.dependencies = []
-    def do_file(infile_nm):
-       infile = readline();
-
-#
-# FIXME: should parse output for {} to do indenting.
-#
-class Indentable_file(File):
-    """Output file with support for indentation"""
-    def __init__(self,nm, mode):
-       File.__init__(self,nm,mode)
-       self.current_indent_ = 0
-       self.delta_indent_ = 4
-    def writeline (self, str):
-       File.write(self, str)
-    def writeeol(self):
-       File.write(self, '\n')
-       File.write(self, ' '* self.current_indent_)
-
-    def indent(self):
-       self.current_indent_ = self.delta_indent_ + self.current_indent_;
-    def dedent(self):
-       self.current_indent_ = self.current_indent_ - self.delta_indent_;
-       if self.current_indent_ < 0:
-           raise 'Nesting!'
-
-    def write(self, str):
-       lines = split(str, '\n')
-       for l in lines[:-1]:
-           self.writeline(l)
-           self.writeeol()
-        self.writeline (lines[-1])
-
-class Afm_file (File):
+print re
+
+def read_log_file (fn):
+       str = gulp_file (fn)
+       str = re.sub ('\n', '', str)    
+       str = re.sub ('[\t ]+', ' ', str) 
+
+       deps = []
+       autolines = []
+       def include_func (match, d = deps):
+               d.append (match.group (1))
+               return ''
+
+       def auto_func (match, a = autolines):
+               a.append (match.group (1))
+               return ''
+
+       str = re.sub ('\(([a-zA-Z_0-9-]+\.mf)', include_func, str)
+       str = re.sub ('@{(.*?)@}', auto_func, str)
+
+       return (autolines, deps)
+
+
+class Afm_file:
     def print_dimen(self, f):
        f = f * 1000 / self.fontsize
     
     def print_dimen(self, f):
        f = f * 1000 / self.fontsize
     
@@ -127,8 +77,8 @@ class Afm_file (File):
        self.write( dimstr  +' ');
 
     def def_symbol (self, code, lily_id, tex_id, xdim, ydim):
        self.write( dimstr  +' ');
 
     def def_symbol (self, code, lily_id, tex_id, xdim, ydim):
-       xdim = map (atof, xdim)
-       ydim = map (atof, ydim)
+       xdim = map (string.atof, xdim)
+       ydim = map (string.atof, ydim)
        
        wid = xdim[0] + xdim[1]
        self.write ('C %s ; ' % code)
        
        wid = xdim[0] + xdim[1]
        self.write ('C %s ; ' % code)
@@ -143,30 +93,36 @@ class Afm_file (File):
        self.print_dimen(ydim [1])
 
        self.write (' ;\n');
        self.print_dimen(ydim [1])
 
        self.write (' ;\n');
-       
+    def write (self, str):
+       self.file.write (str)
+    def __init__ (self, fn):
+        self.file = open (fn,'w')
     def start (self,nm):
        self.write ('Start%s\n' % nm)
     def end (self,nm):
        self.write ('End%s\n' % nm)
 
        
     def start (self,nm):
        self.write ('Start%s\n' % nm)
     def end (self,nm):
        self.write ('End%s\n' % nm)
 
        
+       
 class Log_reader:
     """Read logs, destill info, and put into output files"""
     def output_label(self, line):
 
        if not line:
            return;
 class Log_reader:
     """Read logs, destill info, and put into output files"""
     def output_label(self, line):
 
        if not line:
            return;
-       tags = split(line, '@:')
+
+       tags = string.split(line, '@:')
        label = tags[0]
        name = tags[1]
        afm = self.afmfile
        label = tags[0]
        name = tags[1]
        afm = self.afmfile
+       print tags
        if tags[0] == 'font':
            self.texfile.write("% name\n")
 
            afm.write ('FontName %s\n' % name)
            afm.start ('FontMetrics')
            afm.start ('CharMetrics')       
        if tags[0] == 'font':
            self.texfile.write("% name\n")
 
            afm.write ('FontName %s\n' % name)
            afm.start ('FontMetrics')
            afm.start ('CharMetrics')       
-           afm.fontsize = atof(tags[2])
+           afm.fontsize = string.atof(tags[2])
        elif label == "group":
            self.texfile.write("% " + name + "\n")
            afm.groupname = name
        elif label == "group":
            self.texfile.write("% " + name + "\n")
            afm.groupname = name
@@ -203,18 +159,17 @@ class Log_reader:
        
     def do_file(self,filenm):
        self.texfile.write ('\n% input from ' + filenm + '\n')
        
     def do_file(self,filenm):
        self.texfile.write ('\n% input from ' + filenm + '\n')
-       feta = Feta_file(filenm)
-       while not feta.eof():
-           line = feta.readline()
-           self.output_label(line)
-       feta.close()
+       (autolines, deps) = read_log_file (filenm)
+
+       for a in autolines:
+           self.output_label(a)
        
        
-       self.writedeps (feta.dependencies)
+       self.writedeps (deps)
 
     def __init__(self,  texfile_nm, depfile_nm, afmfile_nm):       
 
     def __init__(self,  texfile_nm, depfile_nm, afmfile_nm):       
-       self.texfile = Indentable_file(texfile_nm, 'w')
-       self.depfile = File (depfile_nm, 'w')
-       self.afmfile = Afm_file (afmfile_nm, 'w')
+       self.texfile = open(texfile_nm, 'w')
+       self.depfile = open (depfile_nm, 'w')
+       self.afmfile = Afm_file (afmfile_nm)
        headerstr = '%% Creator: %s\n%% Automatically generated on\n%% Do not edit' % \
                   (program_id() )
 
        headerstr = '%% Creator: %s\n%% Automatically generated on\n%% Do not edit' % \
                   (program_id() )
 
@@ -238,17 +193,17 @@ def identify():
     sys.stdout.write(program_id() + '\n')
     
 def help():
     sys.stdout.write(program_id() + '\n')
     
 def help():
-    sys.stdout.write("Usage: mf-to-table [options] LOGFILEs\n"
-                + "Generate mozarella metrics table from preparated feta log\n\n"
-                + "Options:\n"
-                + "  -a, --afm=FILE         .afm file\n"
-                + "  -d, --dep=FILE         print dependency info to FILE\n"
-                + "  -h, --help             print this help\n"
-                + "  -l, --ly=FILE          name output table\n"
-                + "  -o, --outdir=DIR       prefix for dependency info\n"
-                + "  -p, --package=DIR      specify package\n"
-                + "  -t, --tex=FILE         name output tex chardefs\n"
-                    )
+    sys.stdout.write(r"""Usage: mf-to-table [options] LOGFILEs
+Generate feta metrics table from preparated feta log\n
+Options:
+  -a, --afm=FILE         .afm file
+  -d, --dep=FILE         print dependency info to FILE
+  -h, --help             print this help
+  -l, --ly=FILE          name output table
+  -o, --outdir=DIR       prefix for dependency info
+  -p, --package=DIR      specify package
+  -t, --tex=FILE         name output tex chardefs"""
+)
     sys.exit (0)
 
 
     sys.exit (0)
 
 
index bf9c8c8c754f1967f4a75e98ad52eec5ded65583..e2a3da89cb7b0451cd3d55a9610557f32bcfbc43 100755 (executable)
@@ -74,7 +74,6 @@ fi
 # urg, pipe breaks
 rm -f $BASE{.ppm,.$GIF} $BASE-page*{.ppm,.$GIF}
 
 # urg, pipe breaks
 rm -f $BASE{.ppm,.$GIF} $BASE-page*{.ppm,.$GIF}
 
-# generate the pixmap at twice the size, then rescale (for antialiasing)
 cat $FILE | gs -sDEVICE=pgm $SIZE -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="$BASE-page%d.ppm" -r90 -dNOPAUSE - -c quit $FILE
 # quant is soo slow
 # cat $PPMFILE | ppmquant 2 | pnmscale 0.3333 | pnmcrop | $PNMTOGIF $color > $OUTFILE
 cat $FILE | gs -sDEVICE=pgm $SIZE -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="$BASE-page%d.ppm" -r90 -dNOPAUSE - -c quit $FILE
 # quant is soo slow
 # cat $PPMFILE | ppmquant 2 | pnmscale 0.3333 | pnmcrop | $PNMTOGIF $color > $OUTFILE
index f1d4d8c38b96fb383e1ae022f64ecaff6aba2062..bab745820d330d367b83a040974b8da639da38f0 100644 (file)
@@ -16,12 +16,8 @@ datadir = ''
 import find
 import os
 import sys
 import find
 import os
 import sys
-
 import getopt
 from string import *
 import getopt
 from string import *
-import regsub
-
-# todo, port: see http://starship.skyport.net/crew/amk/regex/regex-to-re.html
 import re
 import time
 
 import re
 import time
 
index 183e068afcc53e6a4fbf2d5426285021c71fcccd..5b0c3d387b949fd962c1f7c7c477ff0a4402ec22 100644 (file)
@@ -14,7 +14,6 @@ Description: The GNU Project music typesetter.
  using a high level description file as input.  LilyPond is part of 
  the GNU Project.
  
  using a high level description file as input.  LilyPond is part of 
  the GNU Project.
  
  .
   URLs: http://www.cs.uu.nl/~hanwen/lilypond/
         http://www.xs4all.nl/~jantien/lilypond/
  .
   URLs: http://www.cs.uu.nl/~hanwen/lilypond/
         http://www.xs4all.nl/~jantien/lilypond/
index 183e068afcc53e6a4fbf2d5426285021c71fcccd..5b0c3d387b949fd962c1f7c7c477ff0a4402ec22 100644 (file)
@@ -14,7 +14,6 @@ Description: The GNU Project music typesetter.
  using a high level description file as input.  LilyPond is part of 
  the GNU Project.
  
  using a high level description file as input.  LilyPond is part of 
  the GNU Project.
  
  .
   URLs: http://www.cs.uu.nl/~hanwen/lilypond/
         http://www.xs4all.nl/~jantien/lilypond/
  .
   URLs: http://www.cs.uu.nl/~hanwen/lilypond/
         http://www.xs4all.nl/~jantien/lilypond/
index e3a3176b271e483211ec01937383c2a9c2a249eb..c63f04e35341d79c8b87d3202602191bcc7ccdf4 100644 (file)
@@ -7,8 +7,20 @@
 #include <stdio.h>
 #include <iostream.h>
 #include <assert.h>
 #include <stdio.h>
 #include <iostream.h>
 #include <assert.h>
+#include "config.hh"
 #include "getopt-long.hh"
 #include "international.hh"
 #include "getopt-long.hh"
 #include "international.hh"
+#include "string-convert.hh"
+
+#if !HAVE_GETTEXT
+inline char*
+gettext (char const* s)
+{
+  return s;
+}
+#else
+#include <libintl.h>
+#endif
 
 long
 Getopt_long::argument_to_i()
 
 long
 Getopt_long::argument_to_i()
@@ -33,7 +45,7 @@ Getopt_long::parselong()
   found_option_l_=0;
   for (int i=0; i< table_len_i_; i++)
     {
   found_option_l_=0;
   for (int i=0; i< table_len_i_; i++)
     {
-      char const *ln = option_a_[i].longname;
+      char const *ln = option_a_[i].longname_sz_;
 
       if (ln && !strncmp (ln, optnm, searchlen))
        {
 
       if (ln && !strncmp (ln, optnm, searchlen))
        {
@@ -51,7 +63,7 @@ Getopt_long::parselong()
   argument_index_i_ = 0;
 
 
   argument_index_i_ = 0;
 
 
-  if (found_option_l_->take_arg)
+  if (found_option_l_->take_arg_sz_)
     {
       if (endopt)
        optional_argument_ch_C_ = endopt +1; // a '='
     {
       if (endopt)
        optional_argument_ch_C_ = endopt +1; // a '='
@@ -78,15 +90,41 @@ String
 Long_option_init::str () const
 {
   String str;
 Long_option_init::str () const
 {
   String str;
-  if (shortname)
-    str +=  "-" + shortname;
-  if (shortname && longname)
+  if (shortname_ch_)
+    str +=  "-" + shortname_ch_;
+  if (shortname_ch_ && longname_sz_)
     str += ", ";
     str += ", ";
-  if (longname)
-    str += String ("`--") + longname + "'";
+  if (longname_sz_)
+    str += String ("`--") + longname_sz_ + "'";
   return str;
 }
 
   return str;
 }
 
+String
+Long_option_init::str_for_help () const
+{
+  String s;
+  if (shortname_ch_)
+    s = "-" + to_str (shortname_ch_);
+  else
+    s = "  ";
+
+  s = s + ((shortname_ch_ && longname_sz_) ? "," : " ");
+
+  if (longname_sz_)
+    s = s + "--" + longname_sz_;
+
+  if (take_arg_sz_)
+    {
+      if (longname_sz_)
+       s = s + "=";
+      else
+       s = s + " ";
+      
+      s = s + gettext (take_arg_sz_);
+    }
+  return s;
+}
+
 // report an error, GNU style.
 void
 Getopt_long::report (Errorcod c)
 // report an error, GNU style.
 void
 Getopt_long::report (Errorcod c)
@@ -131,7 +169,7 @@ Getopt_long::parseshort()
   assert (c);
 
   for (int i=0; i < table_len_i_; i++)
   assert (c);
 
   for (int i=0; i < table_len_i_; i++)
-    if (option_a_[i].shortname == c)
+    if (option_a_[i].shortname_ch_ == c)
       {
        found_option_l_  = option_a_+i;
        break;
       {
        found_option_l_  = option_a_+i;
        break;
@@ -144,7 +182,7 @@ Getopt_long::parseshort()
     }
 
   argument_index_i_++;
     }
 
   argument_index_i_++;
-  if (!found_option_l_->take_arg)
+  if (!found_option_l_->take_arg_sz_)
     {
       optional_argument_ch_C_ = 0;
       return found_option_l_;
     {
       optional_argument_ch_C_ = 0;
       return found_option_l_;
@@ -205,6 +243,8 @@ Getopt_long::operator()()
     }
 }
 
     }
 }
 
+
+
 Getopt_long::Getopt_long (int c, char  **v, Long_option_init *lo)
 {
   option_a_ = lo;
 Getopt_long::Getopt_long (int c, char  **v, Long_option_init *lo)
 {
   option_a_ = lo;
@@ -216,8 +256,9 @@ Getopt_long::Getopt_long (int c, char  **v, Long_option_init *lo)
 
   //    reached end of option table?
   table_len_i_ =0;
 
   //    reached end of option table?
   table_len_i_ =0;
-  for (int i = 0;  option_a_[i].longname ||option_a_[i].shortname; i++)
+  for (int i = 0;  option_a_[i].longname_sz_ ||option_a_[i].shortname_ch_; i++)
     table_len_i_ ++;
     table_len_i_ ++;
+
 }
 
 bool
 }
 
 bool
@@ -258,3 +299,50 @@ Getopt_long::get_next_arg()
     }
   return a;
 }
     }
   return a;
 }
+
+
+const int EXTRA_SPACES = 5;
+
+String
+Long_option_init::table_str (Long_option_init *l) 
+{
+  String argstr = "ARG";
+  String tabstr = "";
+
+  int wid = 0;
+  for (int i=0; l[i].shortname_ch_ || l[i].longname_sz_; i++)
+    {
+      wid = wid >? l[i].str_for_help ().length_i ();
+    }
+
+  for (int i=0; l[i].shortname_ch_ || l[i].longname_sz_; i++)
+    {
+      String s  =  "  " + l[i].str_for_help ();
+      s += String_convert::char_str (' ', wid - s.length_i () + EXTRA_SPACES);
+
+      tabstr += s + gettext (l[i].help_sz_) + "\n";
+    }
+
+    
+  return tabstr;
+}
+
+int
+Long_option_init::compare (Long_option_init const &a, Long_option_init const &b)
+{
+  if (a.shortname_ch_ && b.shortname_ch_ && a.shortname_ch_- b.shortname_ch_)
+    return a.shortname_ch_ - b.shortname_ch_;
+
+  if (b.shortname_ch_ && a.longname_sz_)
+    {
+      char s[2] = {b.shortname_ch_, 0};
+      return strcmp (a.longname_sz_, s);
+    }
+  if (a.shortname_ch_ && b.longname_sz_)
+    {
+      char s[2] = {a.shortname_ch_, 0};
+      return strcmp (s, b.longname_sz_);
+    }
+  
+  return strcmp (a.longname_sz_, b.longname_sz_);
+}
index a069e284229a5c5ba330f398dd06e8c6578df586..92de4934dc52610523c688e13cc7f3daa81cafdf 100644 (file)
@@ -9,11 +9,18 @@ class ostream;
   a struct this for initialising the commandline options.
  */
 struct Long_option_init {
   a struct this for initialising the commandline options.
  */
 struct Long_option_init {
-  bool take_arg;
-  char const * longname;
-  char        shortname;
+  char const * take_arg_sz_;
+  char const * longname_sz_;
+  char        shortname_ch_;
 
 
+  char const * help_sz_;
+  
   String str () const;
   String str () const;
+  String str_for_help () const;
+  //   NO constructor!
+
+  static int compare (Long_option_init const&,Long_option_init const&);
+  static String table_str (Long_option_init *); 
 };
 
 
 };
 
 
index 49a414a3945ac96807570c3678bf73666eac5806..5ebbb65aeeaf18946e81d80782e6d656534a4e7e 100644 (file)
 
 #include "string.hh"
 
 
 #include "string.hh"
 
+/**
+ Internationalisation: _i ("to be translated") gets an entry in the POT file
+ gettext () must be invoked explicitely to do the actual "translation".
+ See flower/getopt-long.cc.
+ */
+#define _i(sz) sz
+
 // don't inline: get warnings only once
 /**
  Internationalisation: _ ("to be translated") gets "translated" by GNU gettext
 // don't inline: get warnings only once
 /**
  Internationalisation: _ ("to be translated") gets "translated" by GNU gettext
index e48887a977a0a8b68392ec8ccbf3119ed889d28a..bb3fb5d973c6272742cc71f67ec7a6ba4a98cbad 100644 (file)
@@ -59,83 +59,47 @@ Getopt_long * oparser_global_p = 0;
 
 String distill_inname_str (String name_str, String& ext_r);
 
 
 String distill_inname_str (String name_str, String& ext_r);
 
+/*
+ Internationalisation kludge in two steps:
+   * use _i () to get entry in POT file
+   * call gettext () explicitely for actual "translation"
+ */
 Long_option_init theopts[] = {
 Long_option_init theopts[] = {
-  {0, "about", 'a'},
-  {1, "output", 'o'},
-  {0, "warranty", 'w'},
-  {0, "help", 'h'},
-  {0, "test", 't'},
-  {0, "debug", 'd'},
-  {1, "init", 'i'},
-  {1, "include", 'I'},
-  {0, "no-paper", 'm'},
-  {0, "dependencies", 'M'},    // like GCC
-  {0, "no-timestamps", 'T'},   // why do we have this option?
-  {0, "find-old-relative", 'Q'},
-  {0, "ignore-version", 'V'},
-  {0, "version", 'v'},
-  {1, "output-format", 'f'},
-  {0, "safe", 's'},
-  {0,0,0}
+  {_i ("BASENAME"), "output", 'o',  _i ("write output to BASENAME[-x].extension")},
+  {0, "warranty", 'w',  _i ("show warranty and copyright")},
+  {0, "help", 'h',  _i ("this help")},
+  {0, "test", 't',  _i ("switch on experimental features")},
+  {0, "debug", 'd',  _i ("enable debugging output")},
+  {_i ("FILE"), "init", 'i',  _i ("use FILE as init file")},
+  {_i ("DIR"), "include", 'I',  _i ("add DIR to search path")},
+  {0, "no-paper", 'm',  _i ("produce midi output only")},
+  {0, "dependencies", 'M',  _i ("write Makefile dependencies for every input file")},
+  {0, "no-timestamps", 'T',  _i ("don't timestamp the output")},
+    {0, "find-old-relative", 'Q',  _i ("show all changes in relative syntax")},
+  {0, "ignore-version", 'V',  _i ("ignore mudela version")},
+  {0, "version", 'v',  _i ("print version number")},
+  {_i ("EXT"), "output-format", 'f',  _i ("use output format EXT")},
+  {0, "safe", 's',  _i ("inhibit file output naming and exporting")},
+  {0,0,0, 0}
 };
 
 void
 usage ()
 {
 };
 
 void
 usage ()
 {
-  cout << _f ("Usage: %s [OPTION]... [FILE]...", "lilypond") << '\n';
-  cout << _ ("Typeset music and or play MIDI from FILE or <stdin>");
-  cout << '\n';
+  cout << _f ("Usage: %s [OPTION]... [FILE]...", "lilypond");
+  cout << "\n\n";
+  cout << _ ("Typeset music and or play MIDI from FILE.");
+  cout << "\n\n";
+  cout << 
+#include "BLURB.hh"
+
   cout << '\n';
   cout << _ ("Options:");
   cout << '\n';
   cout << '\n';
   cout << _ ("Options:");
   cout << '\n';
-  cout  << _ (
-    "  -a, --about            about LilyPond\n"
-    );
-  cout  << _ (
-    "  -d, --debug            enable debugging output\n"
-    );
-  cout  << _ (
-    "  -M, --dependencies     write Makefile dependencies for every input file\n"
-    );
-  cout  << _ (
-    "  -h, --help             this help\n"
-    );
-  cout  << _ (
-    "  -f, --output-format=X  use output format X\n"
-    );
-  cout  << _ (
-    "  -I, --include=DIR      add DIR to search path\n"
-    );
-  cout  << _ (
-    "  -i, --init=FILE        use FILE as init file\n"
-    );
-  cout  << _ (
-    "  -m, --no-paper         produce midi output only\n"
-    );
-  cout  << _ (
-    "  -o, --output=FILE      set FILE as default output base\n"
-    );
-  cout  << _ (
-    "  -Q, --find-old-relative show all changes in relative syntax\n"
-    );
-  cout << _ (
-    "  -s, --safe             inhibit file output naming and exporting TeX  macros\n");
-  cout  << _ (
-    "  -t, --test             switch on experimental features\n"
-    );
-  cout  << _ (
-    "  -T, --no-timestamps    don't timestamp the output\n"
-    );
-  cout  << _ (
-    "  -V, --ignore-version   ignore mudela version\n"
-    );
-  cout  << _ (
-             "  -w, --warranty         show warranty and copyright\n"
-             );
-  cout << '\n';
-  cout << _ ("GNU LilyPond was compiled with the following settings:");
+  cout << Long_option_init::table_str (theopts);
   cout << '\n';
   cout << '\n';
-  cout <<
+  cout << _ ("This binary was compiled with the following options:") 
+    << " " <<
 #ifdef NDEBUG
     "NDEBUG "
 #endif
 #ifdef NDEBUG
     "NDEBUG "
 #endif
@@ -145,44 +109,51 @@ usage ()
 #ifdef STRING_UTILS_INLINED
     "STRING_UTILS_INLINED "
 #endif
 #ifdef STRING_UTILS_INLINED
     "STRING_UTILS_INLINED "
 #endif
-    "datadir=" DIR_DATADIR
+    "datadir =" DIR_DATADIR
     "\n"
     "\n"
-    "localedir=" DIR_LOCALEDIR
+    "localedir =" DIR_LOCALEDIR
 
 
-    "\n";
+    "\n\n";
 
 
-  ;
+  cout << _("Report bugs to") << " bug-gnu-music@gnu.org" << endl;
 
   print_mudela_versions (cout);
 }
 
 void
 
   print_mudela_versions (cout);
 }
 
 void
-about ()
+identify ()
 {
 {
+  cout << gnu_lilypond_version_str () << endl;
+}
+
+void
+version ()
+{
+  identify ();
   cout << '\n';
   cout << '\n';
-  cout << 
-#include "BLURB.hh"
-    cout << '\n';
-  cout << _ ("GNU LilyPond is Free software, see --warranty");
-  cout << '\n';
-  cout << '\n';
+  cout << _f (""
+  "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.\n",
+    "lilypond");
+  cout << endl;
+
   cout << _f ("Copyright (c) %s by", "1996--1999");
   cout << _f ("Copyright (c) %s by", "1996--1999");
-  cout << '\n';
-  cout << "  " + _ ("Han-Wen Nienhuys <hanwen@cs.uu.nl>") + "\n";
-  cout << "  " + _ ("Jan Nieuwenhuizen <janneke@gnu.org>") + "\n";
-  cout << '\n';
+  cout << "Han-Wen Nienhuys <hanwen@cs.uu.nl>\n"
+       << "Jan Nieuwenhuizen <janneke@gnu.org>\n";
 }
 
 void
 notice ()
 {
   cout << '\n';
 }
 
 void
 notice ()
 {
   cout << '\n';
+  // GNU GNU?
   cout << _ ("GNU LilyPond -- The GNU Project music typesetter");
   cout << '\n';
   cout << _f ("Copyright (c) %s by", "1996--1999");
   cout << '\n';
   cout << _ ("GNU LilyPond -- The GNU Project music typesetter");
   cout << '\n';
   cout << _f ("Copyright (c) %s by", "1996--1999");
   cout << '\n';
-  cout << "  " + _ ("Han-Wen Nienhuys <hanwen@cs.uu.nl>") + "\n";
-  cout << "  " + _ ("Jan Nieuwenhuizen <janneke@gnu.org>") + "\n";
+  cout << "  Han-Wen Nienhuys <hanwen@cs.uu.nl>\n";
+  cout << "  Jan Nieuwenhuizen <janneke@gnu.org>\n";
   cout << '\n';
   cout << _ (
             "    This program is free software; you can redistribute it and/or\n"
   cout << '\n';
   cout << _ (
             "    This program is free software; you can redistribute it and/or\n"
@@ -200,11 +171,6 @@ notice ()
             "USA.\n");
 }
 
             "USA.\n");
 }
 
-void
-identify ()
-{
-  *mlog << gnu_lilypond_version_str () << endl;
-}
 
 void
 setup_paths ()
 
 void
 setup_paths ()
@@ -319,16 +285,16 @@ main_prog (int, char**)
 int
 main (int argc, char **argv)
 {
 int
 main (int argc, char **argv)
 {
-  identify ();
   debug_init ();               // should be first
   setup_paths ();
 
   oparser_global_p = new Getopt_long(argc, argv,theopts);
   while (Long_option_init const * opt = (*oparser_global_p)())
     {
   debug_init ();               // should be first
   setup_paths ();
 
   oparser_global_p = new Getopt_long(argc, argv,theopts);
   while (Long_option_init const * opt = (*oparser_global_p)())
     {
-      switch (opt->shortname)
+      switch (opt->shortname_ch_)
        {
        case 'v':
        {
        case 'v':
+         version();
          exit (0);             // we print a version anyway.
          break;
        case 't':
          exit (0);             // we print a version anyway.
          break;
        case 't':
@@ -354,9 +320,6 @@ main (int argc, char **argv)
        case 'i':
          init_str_global = oparser_global_p->optional_argument_ch_C_;
          break;
        case 'i':
          init_str_global = oparser_global_p->optional_argument_ch_C_;
          break;
-       case 'a':
-         about ();
-         exit (0);
        case 'h':
          usage ();
          exit (0);
        case 'h':
          usage ();
          exit (0);
@@ -384,6 +347,7 @@ main (int argc, char **argv)
          break;
        }
     }
          break;
        }
     }
+  identify ();
 
 #ifdef WINNT
   gh_enter (argc, argv, main_prog);
 
 #ifdef WINNT
   gh_enter (argc, argv, main_prog);
index 478f2da9fb94628d139a859b59023421fac6aa39..4e82175ea28068bd3dec4714f8264924e2cc00cc 100644 (file)
@@ -5,5 +5,7 @@
 
 
 $(outdir)/%.latex: %.doc
 
 
 $(outdir)/%.latex: %.doc
-       $(PYTHON) $(depth)/scripts/mudela-book.py -I $(depth)/input/test/ --outdir=$(outdir)/ --dependencies --outname=$(notdir $(basename $@)) $<
-
+       cd $(outdir);  $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies ../$< 
+       sed 's! \.\./! !g'<  $(basename $@).dep > $(outdir)/temp.dep 
+       sed 's!^\(.*\):!'$(outdir)'/\1:!g' < $(outdir)/temp.dep > $(basename $@).dep 
+       rm $(outdir)/temp.dep
index 9e6b7df97a4580a70cae2b0020114ad041996fb1..6cc17d00d5883ee9335b4d33857a561ede7765b2 100644 (file)
@@ -1,20 +1,19 @@
 Begin3
 Title: LilyPond
 Begin3
 Title: LilyPond
-Version: 1.2.1
-Entered-date: 16AUG99
+Version: 1.2.2
+Entered-date: 23AUG99
 Description: 
 LilyPond is a music typesetter.  It produces beautiful sheet music
 using a high level description file as input.  LilyPond is part of 
 the GNU Project.
 
 Description: 
 LilyPond is a music typesetter.  It produces beautiful sheet music
 using a high level description file as input.  LilyPond is part of 
 the GNU Project.
 
-
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
        janneke@gnu.org (Jan Nieuwenhuizen)
 Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       1000k lilypond-1.2.1.tar.gz 
+       1000k lilypond-1.2.2.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.2.1.tar.gz 
+       1000k lilypond-1.2.2.tar.gz 
 Copying-policy: GPL
 End
 Copying-policy: GPL
 End
index f53dfcc6a7facf49702d0477e36979601c5ae022..fdc84eaa5f692bba699bf732c7c54a528d3a47ac 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
 Name: lilypond
-Version: 1.2.1
+Version: 1.2.2
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.1.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.2.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
@@ -18,7 +18,6 @@ using a high level description file as input.  LilyPond is part of
 the GNU Project.
 
 
 the GNU Project.
 
 
-
 %prep
 %setup
 %build
 %prep
 %setup
 %build
index 288eeed2f6b32d8d5fedaf2ad9eb8512a54fb4dc..c26bfe991e809bdbf42ff57b1dc99fa642bc0511 100644 (file)
@@ -15,7 +15,7 @@ SUBDIRS = scripts buildscripts  flower lib lily mf midi2ly po debian \
 
 SCRIPTS = configure aclocal.m4
 README_FILES = BUGS DEDICATION ANNOUNCE-0.1 ANNOUNCE-1.0 ANNOUNCE-1.2 \
 
 SCRIPTS = configure aclocal.m4
 README_FILES = BUGS DEDICATION ANNOUNCE-0.1 ANNOUNCE-1.0 ANNOUNCE-1.2 \
- COPYING NEWS-0.1 NEWS-1.0 NEWS-0.0 NEWS-1.1  NEWS TODO AIMS  ChangeLog
+ COPYING NEWS-0.1 NEWS-1.0 NEWS-0.0 NEWS-1.1  NEWS TODO AIMS  CHANGES
 README_TXT_FILES = README.txt AUTHORS.txt INSTALL.txt PATCHES.txt
 IN_FILES := $(wildcard *.in)
 EXTRA_DIST_FILES = dstreamrc mudela-mode.el vimrc VERSION $(README_FILES)  $(SCRIPTS) $(IN_FILES) TASKS
 README_TXT_FILES = README.txt AUTHORS.txt INSTALL.txt PATCHES.txt
 IN_FILES := $(wildcard *.in)
 EXTRA_DIST_FILES = dstreamrc mudela-mode.el vimrc VERSION $(README_FILES)  $(SCRIPTS) $(IN_FILES) TASKS
index 76a21ed49dfb7b413346ccb70be5a676aec68561..c536c3334b2405ab6f71086cf3490a8e4bd8f4a6 100644 (file)
@@ -1,7 +1,8 @@
 % 
 % autometric.mf -- administrative MF routines
 % 
 % 
 % autometric.mf -- administrative MF routines
 % 
-% source file of the Feta (Font-En-Tja) pretty-but-neat music font
+% source file of the Feta (not an acronym for Font-En-Tja)
+% pretty-but-neat music font
 % 
 % (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 %          Jan Nieuwenhuizen <janneke@gnu.org>
 % 
 % (c) 1997, 1998 Han-Wen Nienhuys <hanwen@stack.nl>
 %          Jan Nieuwenhuizen <janneke@gnu.org>
 % to automate generation of lily tables and tex backend
 % The output should be parsed by the mf-to-table script
 
 % to automate generation of lily tables and tex backend
 % The output should be parsed by the mf-to-table script
 
+message "******************************************************";
+message "Using feta Autometric macros. ";
+message "Do not worry about the @ signs in the output, they are not errors. "; 
+message "******************************************************";
+
 % font or database?
 def fet_beginfont(expr name,size) =
        font_identifier:=name&decimal size;
 % font or database?
 def fet_beginfont(expr name,size) =
        font_identifier:=name&decimal size;
index 1fc5c25f591b432368cff4a384e119fdb4f34517..2cf9e959171165eefdd8beb0eb93072afc3ffe4d 100644 (file)
@@ -36,92 +36,87 @@ static File_path path;
 
 Verbose level_ver = NORMAL_ver;
 
 
 Verbose level_ver = NORMAL_ver;
 
+
 void
 void
-usage()
+identify()
 {
 {
-  cout << _f ("Usage: %s [OPTION]... [FILE]", "midi2ly");
-  cout << '\n';
-  cout << _ ("Translate midi-file to mudela");
-  cout << '\n';
-  cout << '\n';
-  cout << _ ("Options:");
-  cout << '\n';
-  cout << _ (
-  "  -b, --no-quantify      write exact durations, e.g.: a4*385/384\n"
-  );
-  cout << _ (
-  "  -D, --debug            enable debugging output\n"
-  );
-  cout << _ (
-  "  -h, --help             this help\n"
-  );
-  cout << _ (
-  "  -I, --include=DIR      add DIR to search path\n"
-  );
-  cout << _ (
-  "  -k, --key=ACC[:MINOR]  set key: ACC +sharps/-flats; :1 minor\n"
-  );
-  cout << _ (
-  "  -n, --no-silly         assume no tuplets or double dots, smallest is 32\n"
-  );
-  cout << _ (
-  "  -o, --output=FILE      set FILE as default output\n"
-  );
-  cout << _ (
-  "  -p, --no-tuplets       assume no tuplets\n"
-  );
-  cout << _ (
-  "  -q, --quiet            be quiet\n"
-  );
-  cout << _ (
-  "  -T, --no-timestamps    don't timestamp the output\n"
-  );
-  cout << _ (
-  "  -s, --smallest=N       assume no shorter (reciprocal) durations than N\n"
-  );
-  cout << _ (
-  "  -v, --verbose          be verbose\n"
-  );
-  cout << _ (
-  "  -w, --warranty         show warranty and copyright\n"
-  );
-  cout << _ (
-  "  -x, --no-double-dots   assume no double dotted notes\n"
-  );
-  ;
+cout << midi2ly_version_str() << endl;
+
 }
 
 void
 }
 
 void
-identify()
+version ()
 {
 {
-  LOGOUT(NORMAL_ver) << midi2ly_version_str() << endl;
+  identify ();
+  cout << '\n';
+  cout << _f (""
+  "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.\n", 
+    "midi2ly");
+  cout << endl;
+
+  cout << _f ("Copyright (c) %s by", "1996--1999");
+  cout << "Han-Wen Nienhuys <hanwen@cs.uu.nl>\n"
+       << "Jan Nieuwenhuizen <janneke@gnu.org>\n";
 }
 
 void
 notice()
 {
 }
 
 void
 notice()
 {
-  LOGOUT(NORMAL_ver) << '\n';
-  LOGOUT(NORMAL_ver) << _ ("Midi2ly, translate midi to mudela");
-  LOGOUT(NORMAL_ver) << '\n';
-  LOGOUT(NORMAL_ver) << _f ("Copyright (c) %s by", "1997, 1998");
-  LOGOUT(NORMAL_ver) << '\n';
-  LOGOUT(NORMAL_ver) << "  " + _ ("Han-Wen Nienhuys <hanwen@cs.uu.nl>") + "\n";
-  LOGOUT(NORMAL_ver) << "  " + _ ("Jan Nieuwenhuizen <janneke@gnu.org>") + "\n";
-  LOGOUT(NORMAL_ver) << '\n';
-  LOGOUT(NORMAL_ver) << _ (
-    "    This program is free software; you can redistribute it and/or\n"
-    "modify it under the terms of the GNU General Public License version 2\n"
-    "as published by the Free Software Foundation.\n"
-    "\n"
-    "    This program is distributed in the hope that it will be useful,\n"
-    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
-    "General Public License for more details.\n"
-    "\n"
-    "    You should have received a copy (refer to the file COPYING) of the\n"
-    "GNU General Public License along with this program; if not, write to\n"
-    "the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
-    "USA.\n");
+  cout << _ (
+            "    This program is free software; you can redistribute it and/or\n"
+            "modify it under the terms of the GNU General Public License version 2\n"
+            "as published by the Free Software Foundation.\n"
+            "\n"
+            "    This program is distributed in the hope that it will be useful,\n"
+            "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+            "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
+            "General Public License for more details.\n"
+            "\n"
+            "    You should have received a copy (refer to the file COPYING) of the\n"
+            "GNU General Public License along with this program; if not, write to\n"
+            "the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
+            "USA.\n");
+}
+
+/*
+ Internationalisation kludge in two steps:
+   * use _i () to get entry in POT file
+   * call gettext () explicitely for actual "translation"
+ */
+Long_option_init long_option_init_a[] =
+{
+  {0, "no-quantify", 'b', _i ("write exact durations, e.g.: a4*385/384")},
+  {0, "debug", 'd', _i ("enable debugging output")},
+  {0, "help", 'h', _i ("this help")},
+  {_i ("ACC[:MINOR]"), "key", 'k', _i ("set key: ACC +sharps/-flats; :1 minor")},
+  {0, "no-silly", 'n', _i ("assume no tuplets or double dots, smallest is 32")},
+  {_i ("FILE"), "output", 'o', _i ("set FILE as default output")},
+  {0, "no-tuplets", 'p', _i ("assume no tuplets")},
+  {0, "quiet", 'q', _i ("be quiet")},
+  {_i ("DUR"), "smallest", 's', _i ("Set smallest duration (?)")},
+  {0, "no-timestamps", 'T', _i ("don't timestamp the output")},
+  {0, "verbose", 'v', _i ("be verbose")},
+  {0, "warranty", 'w', _i ("show warranty and copyright")},
+  {0, "no-double-dots", 'x', _i ("assume no double dotted notes")},
+  {0, "version", 'V', _i ("print version number")},
+  {0,0,0, 0}
+};
+
+void
+usage()
+{
+  cout << _f ("Usage: %s [OPTION]... [FILE]", "midi2ly");
+  cout << '\n';
+  cout << _ ("Translate midi-file to mudela");
+  cout << '\n';
+  cout << '\n';
+  cout << _ ("Options:");
+  cout << '\n';
+  cout << Long_option_init::table_str (long_option_init_a) << endl;
+
+  cout << _("Report bugs to") << " bug-gnu-music@gnu.org" << endl;
 }
 
 int
 }
 
 int
@@ -140,98 +135,86 @@ main (int argc_i, char* argv_sz_a[])
   bool key_override_b = false;
   Mudela_key key (0, 0);
 
   bool key_override_b = false;
   Mudela_key key (0, 0);
 
-  Long_option_init long_option_init_a[] =
-    {
-       {0, "no-quantify", 'b'},
-       {0, "debug", 'D'},
-       {0, "help", 'h'},
-       {1, "key", 'k'},
-       {0, "no-silly", 'n'},
-       {1, "output", 'o'},
-       {0, "no-tuplets", 'p'},
-       {0, "quiet", 'q'},
-       {1, "smallest", 's'},
-       {0, "no-timestamps", 'T'},
-       {0, "verbose", 'v'},
-       {0, "warranty", 'w'},
-       {0, "no-double-dots", 'x'},
-       {0,0,0}
-  };
   Getopt_long getopt_long (argc_i, argv_sz_a, long_option_init_a);
 
   String output_str;
   while (Long_option_init const* long_option_init_p = getopt_long())
   Getopt_long getopt_long (argc_i, argv_sz_a, long_option_init_a);
 
   String output_str;
   while (Long_option_init const* long_option_init_p = getopt_long())
-       switch (long_option_init_p->shortname)
-         {
-       case 'b':
-           Duration_convert::no_quantify_b_s = true;
-           break;
-       case 'D':
-           level_ver = DEBUG_ver;
-           break;
-       case 'h':
-           identify();
-           usage();
-           exit (0);
-           break;
-//     case 'I':
-//         path->push (getopt_long.optional_argument_ch_C_);
-//         break;
-       case 'k':
-         {
-           String str = getopt_long.optional_argument_ch_C_;
-           int i = str.index_i (':');
-           i = (i >=0 ? i : str.length_i ());
-           key.accidentals_i_ = String_convert::dec2_i (str.left_str (i));
-           key.minor_i_ = (int)(bool)String_convert::dec2_i (str.cut_str (i + 1, str.length_i ()));
-           key_override_b = true;
-           break;
-         }
-       case 'n':
-           Duration_convert::no_double_dots_b_s = true;
-           Duration_convert::no_triplets_b_s = true;
-           Duration_convert::no_smaller_than_i_s = 5;
-           break;
-       case 'o':
-           output_str = getopt_long.optional_argument_ch_C_;
-           break;
-       case 'p':
-           Duration_convert::no_triplets_b_s = true;
-           break;
-       case 'q':
-           level_ver = QUIET_ver;
-           break;
-       case 'T':
-           no_timestamps_b_g = true;
-           break;
-       case 's':
-         {
-               int i = String_convert::dec2_i (getopt_long.optional_argument_ch_C_);
-               if (!i)
-                 {
-                   identify();
-                   usage();
-                   exit (2); //usage
-                 }
-               Duration_convert::no_smaller_than_i_s =
-                 Duration_convert::i2_type(i);
-             }
-           break;
-       case 'v':
-           level_ver = VERBOSE_ver;
-           break;
-       case 'w':
-           identify();
-           notice();
-           exit (0);
-           break;
-       case 'x':
-           Duration_convert::no_double_dots_b_s = true;
-           break;
-       default:
-           assert (0);
-           break;
+    switch (long_option_init_p->shortname_ch_)
+      {
+      case 'b':
+       Duration_convert::no_quantify_b_s = true;
+       break;
+      case 'd':
+       level_ver = DEBUG_ver;
+       break;
+      case 'h':
+       usage();
+       exit (0);
+       break;
+       //      case 'I':
+       //          path->push (getopt_long.optional_argument_ch_C_);
+       //          break;
+      case 'k':
+       {
+         String str = getopt_long.optional_argument_ch_C_;
+         int i = str.index_i (':');
+         i = (i >=0 ? i : str.length_i ());
+         key.accidentals_i_ = String_convert::dec2_i (str.left_str (i));
+         key.minor_i_ = (int)(bool)String_convert::dec2_i (str.cut_str (i + 1, str.length_i ()));
+         key_override_b = true;
+         break;
+       }
+      case 'n':
+       Duration_convert::no_double_dots_b_s = true;
+       Duration_convert::no_triplets_b_s = true;
+       Duration_convert::no_smaller_than_i_s = 5;
+       break;
+      case 'o':
+       output_str = getopt_long.optional_argument_ch_C_;
+       break;
+      case 'p':
+       Duration_convert::no_triplets_b_s = true;
+       break;
+      case 'q':
+       level_ver = QUIET_ver;
+       break;
+      case 'T':
+       no_timestamps_b_g = true;
+       break;
+      case 's':
+       {
+         int i = String_convert::dec2_i (getopt_long.optional_argument_ch_C_);
+         if (!i)
+           {
+             identify();
+             usage();
+             exit (2); //usage
            }
            }
+         Duration_convert::no_smaller_than_i_s =
+           Duration_convert::i2_type(i);
+       }
+       break;
+      case 'v':
+       level_ver = VERBOSE_ver;
+       break;
+
+      case 'V':
+       version ();
+       exit (0);
+       break;
+      case 'w':
+       identify();
+       notice();
+       exit (0);
+       break;
+      case 'x':
+       Duration_convert::no_double_dots_b_s = true;
+       break;
+      default:
+       assert (0);
+       break;
+      }
 
   // flag -q must be checked first
   identify();
 
   // flag -q must be checked first
   identify();
@@ -243,28 +226,28 @@ main (int argc_i, char* argv_sz_a[])
   char const* arg_sz = 0;
   while ( (arg_sz = getopt_long.get_next_arg ()))
     {
   char const* arg_sz = 0;
   while ( (arg_sz = getopt_long.get_next_arg ()))
     {
-       filename_str_g = arg_sz;
-       Midi_score_parser midi_parser;
-       Mudela_score* score_p = midi_parser.parse (arg_sz, &source);
-
-       if (!score_p)
-         return 1;
-
-       // if given on command line: override
-       if (key_override_b || !score_p->mudela_key_l_)
-         score_p->mudela_key_l_ = &key;
-       mudela_score_l_g = score_p;
-       score_p->process();
-
-       if (!output_str.length_i ())
-         {
-           String d, dir, base, ext;
-           split_path (arg_sz, d, dir, base, ext);
-           output_str = base + ext + ".ly";
-         }
-
-       score_p->output (output_str);
-       delete score_p;
+      filename_str_g = arg_sz;
+      Midi_score_parser midi_parser;
+      Mudela_score* score_p = midi_parser.parse (arg_sz, &source);
+
+      if (!score_p)
+       return 1;
+
+      // if given on command line: override
+      if (key_override_b || !score_p->mudela_key_l_)
+       score_p->mudela_key_l_ = &key;
+      mudela_score_l_g = score_p;
+      score_p->process();
+
+      if (!output_str.length_i ())
+       {
+         String d, dir, base, ext;
+         split_path (arg_sz, d, dir, base, ext);
+         output_str = base + ext + ".ly";
+       }
+
+      score_p->output (output_str);
+      delete score_p;
     }
   return 0;
 }
     }
   return 0;
 }
index 6a6306fdab8ebb721f570fed4cd808d628c85176..360b0f886a45543dee2ebf9c92ad516106c3cdc1 100644 (file)
@@ -3,11 +3,9 @@
 
 const char * midi2ly_version_sz();
 
 
 const char * midi2ly_version_sz();
 
-// should simply have Root class...
 String
 midi2ly_version_str()
 {
 String
 midi2ly_version_str()
 {
-  return  String (midi2ly_version_sz ())
-       + " " + _("of") + " " +  __DATE__ + " " + __TIME__;
+  return  String (midi2ly_version_sz ());
 }
 
 }
 
index 2eddf0eebad645b0d67123b03107a34ce4b3828e..f4b7500f5d7e04f07d496ee5623035eab91a9bd1 100644 (file)
@@ -6,6 +6,7 @@ depth = ..
 NAME = lilypond
 MODULE_NAME = po
 
 NAME = lilypond
 MODULE_NAME = po
 
+POT_FILES = $(wildcard *.pot)
 PO_FILES = $(wildcard *.po)
 MO_FILES = $(addprefix $(outdir)/, $(PO_FILES:.po=.mo))
 HELP_CATALOGS = $(PO_FILES:%.po=%)
 PO_FILES = $(wildcard *.po)
 MO_FILES = $(addprefix $(outdir)/, $(PO_FILES:.po=.mo))
 HELP_CATALOGS = $(PO_FILES:%.po=%)
index ad3a0346d48c4b8a5875d8cdeb9087820429f52b..6b8a5ba49a4618b14b210ccd335896d441d2fb79 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -5,7 +5,7 @@
 #, fuzzy
 msgid ""
 msgstr ""
 #, fuzzy
 msgid ""
 msgstr ""
-"POT-Creation-Date: 1999-08-15 23:58+0200\n"
+"POT-Creation-Date: 1999-08-20 18:48+0200\n"
 "Content-Type: text/plain; charset=\n"
 "Date: 1998-05-30 00:17:12+0200\n"
 "From:  <jantien@xs4all.nl>\n"
 "Content-Type: text/plain; charset=\n"
 "Date: 1998-05-30 00:17:12+0200\n"
 "From:  <jantien@xs4all.nl>\n"
@@ -29,27 +29,27 @@ msgstr "Non ci sono sufficienti campi in Dstream init."
 msgid "Debug output disabled.  Compiled with NPRINT."
 msgstr "L'output di debug Ã¨ disabilitato. Compilato con NPRINT."
 
 msgid "Debug output disabled.  Compiled with NPRINT."
 msgstr "L'output di debug Ã¨ disabilitato. Compilato con NPRINT."
 
-#: getopt-long.cc:103
+#: getopt-long.cc:141
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "l'opzione `%s' richiede un argomento"
 
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "l'opzione `%s' richiede un argomento"
 
-#: getopt-long.cc:107
+#: getopt-long.cc:145
 #, c-format
 msgid "option `%s' doesn't allow an argument"
 msgstr "opzione `%s' non accetta argomenti"
 
 #, c-format
 msgid "option `%s' doesn't allow an argument"
 msgstr "opzione `%s' non accetta argomenti"
 
-#: getopt-long.cc:111
+#: getopt-long.cc:149
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "opzione non riconosciuta: `%s'"
 
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "opzione non riconosciuta: `%s'"
 
-#: getopt-long.cc:113
+#: getopt-long.cc:151
 #, c-format
 msgid "%c"
 msgstr ""
 
 #, c-format
 msgid "%c"
 msgstr ""
 
-#: getopt-long.cc:117
+#: getopt-long.cc:155
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "argomento `%s' non valido per l'opzione `%s'"
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "argomento `%s' non valido per l'opzione `%s'"
@@ -371,124 +371,147 @@ msgstr ""
 msgid "Aborting"
 msgstr ""
 
 msgid "Aborting"
 msgstr ""
 
-#: lookup.cc:434
+#: lookup.cc:436
 #, c-format
 msgid "Non-matching braces in text `%s', adding braces."
 msgstr ""
 
 #, c-format
 msgid "Non-matching braces in text `%s', adding braces."
 msgstr ""
 
-#: main.cc:85
-#, c-format
-msgid "Usage: %s [OPTION]... [FILE]..."
-msgstr "Uso: %s [OPZIONE]... [FILE]..."
+#: main.cc:68
+msgid "BASENAME"
+msgstr ""
 
 
-#: main.cc:86
-msgid "Typeset music and or play MIDI from FILE or <stdin>"
-msgstr "Stampa partitura oppure suona una song MIDI da FILE o <stdin>"
+#: main.cc:68
+msgid "write output to BASENAME[-x].extension"
+msgstr ""
 
 
-#: main.cc:47 main.cc:89
-msgid "Options:"
-msgstr "Opzioni: "
+#: main.cc:69 main.cc:101
+#, fuzzy
+msgid "show warranty and copyright"
+msgstr "  -w, --warranty         mostra la garanzia e il copyright\n"
 
 
-#: main.cc:92
-msgid "  -a, --about            about LilyPond\n"
-msgstr "  -a, --about            cos'è LilyPond\n"
+#: main.cc:70 main.cc:92
+msgid "this help"
+msgstr ""
 
 
-#: main.cc:95
+#: main.cc:71
 #, fuzzy
 #, fuzzy
-msgid "  -d, --debug            enable debugging output\n"
-msgstr "  -D, --debug            abilita l'output di debugging\n"
+msgid "switch on experimental features"
+msgstr "  -t, --test             usa le caratteristiche sperimentali\n"
 
 
-#: main.cc:98
+#: main.cc:72 main.cc:91
 #, fuzzy
 #, fuzzy
-msgid ""
-"  -M, --dependencies     write Makefile dependencies for every input file\n"
+msgid "enable debugging output"
+msgstr "  -D, --debug            abilita l'output di debugging\n"
+
+#: main.cc:73 main.cc:95
+msgid "FILE"
 msgstr ""
 msgstr ""
-"  -d, --dependencies     scrive le dependenze del Makefile per ogni file di "
-"input\n"
 
 
-#: main.cc:56 main.cc:101
-msgid "  -h, --help             this help\n"
-msgstr "  -h, --help             questo help\n"
+#: main.cc:73
+#, fuzzy
+msgid "use FILE as init file"
+msgstr "  -i, --init=NOMEFILE    usa NOMEFILE come file iniziale\n"
 
 
-#: main.cc:104
-msgid "  -f, --output-format=X  use output format X\n"
-msgstr "  -f, --output-format=X  usa il formato dell'ouput X\n"
+#: main.cc:74
+msgid "DIR"
+msgstr ""
 
 
-#: main.cc:59 main.cc:107
-msgid "  -I, --include=DIR      add DIR to search path\n"
+#: main.cc:74
+#, fuzzy
+msgid "add DIR to search path"
 msgstr "  -I, --include=DIR      aggiunge DIR ai path di ricerca\n"
 
 msgstr "  -I, --include=DIR      aggiunge DIR ai path di ricerca\n"
 
-#: main.cc:110
-msgid "  -i, --init=FILE        use FILE as init file\n"
-msgstr "  -i, --init=NOMEFILE    usa NOMEFILE come file iniziale\n"
-
-#: main.cc:113
+#: main.cc:75
 #, fuzzy
 #, fuzzy
-msgid "  -m, --no-paper         produce midi output only\n"
+msgid "produce midi output only"
 msgstr "  -M, --no-paper         produce solo output midi\n"
 
 msgstr "  -M, --no-paper         produce solo output midi\n"
 
-#: main.cc:116
-msgid "  -o, --output=FILE      set FILE as default output base\n"
+#: main.cc:76
+#, fuzzy
+msgid "write Makefile dependencies for every input file"
 msgstr ""
 msgstr ""
-"  -o, --output=FILE      indica FILE come base di default per l'output\n"
+"  -d, --dependencies     scrive le dependenze del Makefile per ogni file di "
+"input\n"
 
 
-#: main.cc:119
-msgid "  -Q, --find-old-relative show all changes in relative syntax\n"
+#: main.cc:77 main.cc:99
+#, fuzzy
+msgid "don't timestamp the output"
+msgstr ""
+"  -T, --no-timestamps    non inserisce marcatori temporali nell'output\n"
+
+#: main.cc:78
+#, fuzzy
+msgid "show all changes in relative syntax"
 msgstr ""
 "  -Q, --find-old-relative mostra tutti i cambiamenti nella sintassi "
 "relativa\n"
 
 msgstr ""
 "  -Q, --find-old-relative mostra tutti i cambiamenti nella sintassi "
 "relativa\n"
 
-#: main.cc:122
-msgid ""
-"  -s, --safe             inhibit file output naming and exporting TeX  "
-"macros\n"
+#: main.cc:79
+#, fuzzy
+msgid "ignore mudela version"
+msgstr "versione di mudela errata: %s (%s, %s)"
+
+#: main.cc:80 main.cc:103
+msgid "print version number"
 msgstr ""
 msgstr ""
-"  -s, --safe             inibisce la rinomina dei file di output e "
-"l'esportazione di macro di TeX\n"
 
 
-#: main.cc:124
-msgid "  -t, --test             switch on experimental features\n"
-msgstr "  -t, --test             usa le caratteristiche sperimentali\n"
+#: main.cc:81
+msgid "EXT"
+msgstr ""
 
 
-#: main.cc:77 main.cc:127
-msgid "  -T, --no-timestamps    don't timestamp the output\n"
+#: main.cc:81
+msgid "use output format EXT"
 msgstr ""
 msgstr ""
-"  -T, --no-timestamps    non inserisce marcatori temporali nell'output\n"
 
 
-#: main.cc:130
-msgid "  -V, --ignore-version   ignore mudela version\n"
-msgstr "  -V, --ignore-version   ignora la versione di mudela\n"
+#: main.cc:82
+#, fuzzy
+msgid "inhibit file output naming and exporting"
+msgstr ""
+"  -s, --safe             inibisce la rinomina dei file di output e "
+"l'esportazione di macro di TeX\n"
 
 
-#: main.cc:86 main.cc:133
-msgid "  -w, --warranty         show warranty and copyright\n"
-msgstr "  -w, --warranty         mostra la garanzia e il copyright\n"
+#: main.cc:89
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]..."
+msgstr "Uso: %s [OPZIONE]... [FILE]..."
 
 
-#: main.cc:136
-msgid "GNU LilyPond was compiled with the following settings:"
-msgstr "GNU LilyPond Ã¨ stata compilata con le seguenti impostazioni:"
+#: main.cc:91
+#, fuzzy
+msgid "Typeset music and or play MIDI from FILE."
+msgstr "Stampa partitura oppure suona una song MIDI da FILE o <stdin>"
 
 
-#: main.cc:166
-msgid "GNU LilyPond is Free software, see --warranty"
-msgstr "GNU LilyPond Ã¨ Free software, vedi --warranty"
+#: main.cc:97 main.cc:115
+msgid "Options:"
+msgstr "Opzioni: "
 
 
-#: main.cc:106 main.cc:169 main.cc:182
-#, c-format
-msgid "Copyright (c) %s by"
-msgstr "Copyright (c) %s di"
+#: main.cc:101
+#, fuzzy
+msgid "This binary was compiled with the following options:"
+msgstr "GNU LilyPond Ã¨ stata compilata con le seguenti impostazioni:"
 
 
-#: main.cc:108 main.cc:171 main.cc:184
-msgid "Han-Wen Nienhuys <hanwen@cs.uu.nl>"
+#: main.cc:118 main.cc:119
+msgid "Report bugs to"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:109 main.cc:172 main.cc:185
-msgid "Jan Nieuwenhuizen <janneke@gnu.org>"
+#: main.cc:52 main.cc:134
+#, c-format
+msgid ""
+"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 undercertain "
+"conditions.  Invoke as `%s --warranty' for more information.\n"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:180
+#: main.cc:59 main.cc:141 main.cc:153
+#, c-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright (c) %s di"
+
+#. GNU GNU?
+#: main.cc:151
 msgid "GNU LilyPond -- The GNU Project music typesetter"
 msgstr "GNU LilyPond -- Il tipografo musicale del progetto GNU"
 
 msgid "GNU LilyPond -- The GNU Project music typesetter"
 msgstr "GNU LilyPond -- Il tipografo musicale del progetto GNU"
 
-#: main.cc:112 main.cc:188
+#: main.cc:68 main.cc:159
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -973,7 +996,6 @@ msgid ""
 "using a high level description file as input.  LilyPond is part of \n"
 "the GNU Project.\n"
 "\n"
 "using a high level description file as input.  LilyPond is part of \n"
 "the GNU Project.\n"
 "\n"
-"\n"
 msgstr ""
 
 #: out/COPERTINA.hh:2
 msgstr ""
 
 #: out/COPERTINA.hh:2
@@ -992,78 +1014,73 @@ msgstr ""
 
 #: out/FLAPTEKST.hh:2
 msgid ""
 
 #: out/FLAPTEKST.hh:2
 msgid ""
-"LilyPond is de muziekzetter van het GNU Project.  Dit programma drukt\n"
-"prachtige bladmuziek volgens een muzikaal definitie bestand.  Ook kan\n"
-"het een mechanische uitvoering afspelen naar een MIDI bestand.\n"
-"Bijzondere kunstjes zijn verscheidene notenbalken, maatsoorten, sleutels, \n"
-"toonaarden, zangteksten, krachtige invoer taal, cadensa, balken, boogjes, \n"
-"triolen, accoordnamen, transponeren, partituren, en uittreksels voor \n"
-"individuele partijen.  Een fraaie set muziektekens is inbegrepen.\n"
+"LilyPond is een muziekzetter.  Zij maakt prachtige bladmuziek\n"
+"uitgaande van een hoog niveau beschrijving bestand.  LilyPond \n"
+"maakt deel uit van het GNU Project.\n"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:42
-#, c-format
-msgid "Usage: %s [OPTION]... [FILE]"
-msgstr "Uso: %s [OPZIONE... [FILE]"
-
-#: main.cc:44
-msgid "Translate midi-file to mudela"
-msgstr "Traduce un file midi in mudela"
-
-#: main.cc:50
-msgid "  -b, --no-quantify      write exact durations, e.g.: a4*385/384\n"
+#: main.cc:90
+#, fuzzy
+msgid "write exact durations, e.g.: a4*385/384"
 msgstr "  -b, --no-quantify      scrive durate esatte,  p.es.: a4*385/384\n"
 
 msgstr "  -b, --no-quantify      scrive durate esatte,  p.es.: a4*385/384\n"
 
-#: main.cc:53
-msgid "  -D, --debug            enable debugging output\n"
-msgstr "  -D, --debug            abilita l'output di debugging\n"
+#: main.cc:93
+msgid "ACC[:MINOR]"
+msgstr ""
 
 
-#: main.cc:62
-msgid "  -k, --key=ACC[:MINOR]  set key: ACC +sharps/-flats; :1 minor\n"
+#: main.cc:93
+#, fuzzy
+msgid "set key: ACC +sharps/-flats; :1 minor"
 msgstr ""
 " -k, --key=ACC[:MINOR]  imposta l'armatura: ACC +diesis/-bemolli; :1 minore\n"
 
 msgstr ""
 " -k, --key=ACC[:MINOR]  imposta l'armatura: ACC +diesis/-bemolli; :1 minore\n"
 
-#: main.cc:65
+#: main.cc:94
 #, fuzzy
 #, fuzzy
-msgid ""
-"  -n, --no-silly         assume no tuplets or double dots, smallest is 32\n"
+msgid "assume no tuplets or double dots, smallest is 32"
 msgstr ""
 "  -n, --no-silly         assume che non ci siano gruppetti o doppi punti, la "
 "figura più piccola Ã¨ 32\n"
 
 msgstr ""
 "  -n, --no-silly         assume che non ci siano gruppetti o doppi punti, la "
 "figura più piccola Ã¨ 32\n"
 
-#: main.cc:68
-msgid "  -o, --output=FILE      set FILE as default output\n"
+#: main.cc:95
+#, fuzzy
+msgid "set FILE as default output"
 msgstr "  -o, --output=FILE      set FILE come output di default\n"
 
 msgstr "  -o, --output=FILE      set FILE come output di default\n"
 
-#: main.cc:71
-#, fuzzy
-msgid "  -p, --no-tuplets       assume no tuplets\n"
-msgstr "  -p, --no-plets         assume che non ci siano gruppetti\n"
+#: main.cc:96
+msgid "assume no tuplets"
+msgstr ""
 
 
-#: main.cc:74
-msgid "  -q, --quiet            be quiet\n"
-msgstr "  -q, --quiet            sii silenzioso\n"
+#: main.cc:97
+msgid "be quiet"
+msgstr ""
 
 
-#: main.cc:80
-msgid ""
-"  -s, --smallest=N       assume no shorter (reciprocal) durations than N\n"
+#: main.cc:98
+msgid "DUR"
 msgstr ""
 msgstr ""
-"  -s, --smallest=N       assume che non ci siano durate (reciproche) "
-"inferiori a N\n"
 
 
-#: main.cc:83
-msgid "  -v, --verbose          be verbose\n"
-msgstr "  -v, --verbose          sii loquace\n"
+#: main.cc:98
+#, fuzzy
+msgid "Set smallest duration (?)"
+msgstr "indicazione durata priva di senso"
 
 
-#: main.cc:89
-msgid "  -x, --no-double-dots   assume no double dotted notes\n"
+#: main.cc:100
+msgid "be verbose"
 msgstr ""
 msgstr ""
-" -x, --no-double-dots   assume che non ci siano note con doppio punto\n"
 
 
-#: main.cc:104
+#: main.cc:102
 #, fuzzy
 #, fuzzy
-msgid "Midi2ly, translate midi to mudela"
-msgstr "Mi2mu, tradice midi in mudela"
+msgid "assume no double dotted notes"
+msgstr ""
+" -x, --no-double-dots   assume che non ci siano note con doppio punto\n"
+
+#: main.cc:110
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]"
+msgstr "Uso: %s [OPZIONE... [FILE]"
+
+#: main.cc:112
+msgid "Translate midi-file to mudela"
+msgstr "Traduce un file midi in mudela"
 
 #: midi-parser.cc:64
 msgid "zero length string encountered"
 
 #: midi-parser.cc:64
 msgid "zero length string encountered"
@@ -1189,9 +1206,59 @@ msgstr "% Generato automaticamente"
 msgid "% from input file: "
 msgstr "% dal file di input: "
 
 msgid "% from input file: "
 msgstr "% dal file di input: "
 
-#: version.cc:11
-msgid "of"
-msgstr "di"
+#, fuzzy
+#~ msgid "enable debugging output "
+#~ msgstr "  -D, --debug            abilita l'output di debugging\n"
+
+#, fuzzy
+#~ msgid "don't timestamp the output "
+#~ msgstr ""
+#~ "  -T, --no-timestamps    non inserisce marcatori temporali nell'output\n"
+
+#~ msgid "  -a, --about            about LilyPond\n"
+#~ msgstr "  -a, --about            cos'è LilyPond\n"
+
+#~ msgid "  -h, --help             this help\n"
+#~ msgstr "  -h, --help             questo help\n"
+
+#~ msgid "  -f, --output-format=X  use output format X\n"
+#~ msgstr "  -f, --output-format=X  usa il formato dell'ouput X\n"
+
+#~ msgid "  -o, --output=FILE      set FILE as default output base\n"
+#~ msgstr ""
+#~ "  -o, --output=FILE      indica FILE come base di default per l'output\n"
+
+#~ msgid "  -V, --ignore-version   ignore mudela version\n"
+#~ msgstr "  -V, --ignore-version   ignora la versione di mudela\n"
+
+#~ msgid "GNU LilyPond is Free software, see --warranty"
+#~ msgstr "GNU LilyPond Ã¨ Free software, vedi --warranty"
+
+#~ msgid "  -D, --debug            enable debugging output\n"
+#~ msgstr "  -D, --debug            abilita l'output di debugging\n"
+
+#, fuzzy
+#~ msgid "  -p, --no-tuplets       assume no tuplets\n"
+#~ msgstr "  -p, --no-plets         assume che non ci siano gruppetti\n"
+
+#~ msgid "  -q, --quiet            be quiet\n"
+#~ msgstr "  -q, --quiet            sii silenzioso\n"
+
+#~ msgid ""
+#~ "  -s, --smallest=N       assume no shorter (reciprocal) durations than N\n"
+#~ msgstr ""
+#~ "  -s, --smallest=N       assume che non ci siano durate (reciproche) "
+#~ "inferiori a N\n"
+
+#~ msgid "  -v, --verbose          be verbose\n"
+#~ msgstr "  -v, --verbose          sii loquace\n"
+
+#, fuzzy
+#~ msgid "Midi2ly, translate midi to mudela"
+#~ msgstr "Mi2mu, tradice midi in mudela"
+
+#~ msgid "of"
+#~ msgstr "di"
 
 #~ msgid "please fix me"
 #~ msgstr "correggimi, per favore"
 
 #~ msgid "please fix me"
 #~ msgstr "correggimi, per favore"
index 23a27594e6e905b8d70bcb3bf2b6a88b300c2cc7..66cadce854d39d215c6db3af5dc71a8633470e24 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-08-15 23:58+0200\n"
+"POT-Creation-Date: 1999-08-20 18:48+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,27 +30,27 @@ msgstr ""
 msgid "Debug output disabled.  Compiled with NPRINT."
 msgstr ""
 
 msgid "Debug output disabled.  Compiled with NPRINT."
 msgstr ""
 
-#: getopt-long.cc:103
+#: getopt-long.cc:141
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr ""
 
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr ""
 
-#: getopt-long.cc:107
+#: getopt-long.cc:145
 #, c-format
 msgid "option `%s' doesn't allow an argument"
 msgstr ""
 
 #, c-format
 msgid "option `%s' doesn't allow an argument"
 msgstr ""
 
-#: getopt-long.cc:111
+#: getopt-long.cc:149
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr ""
 
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr ""
 
-#: getopt-long.cc:113
+#: getopt-long.cc:151
 #, c-format
 msgid "%c"
 msgstr ""
 
 #, c-format
 msgid "%c"
 msgstr ""
 
-#: getopt-long.cc:117
+#: getopt-long.cc:155
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr ""
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr ""
@@ -370,113 +370,127 @@ msgstr ""
 msgid "Aborting"
 msgstr ""
 
 msgid "Aborting"
 msgstr ""
 
-#: lookup.cc:434
+#: lookup.cc:436
 #, c-format
 msgid "Non-matching braces in text `%s', adding braces."
 msgstr ""
 
 #, c-format
 msgid "Non-matching braces in text `%s', adding braces."
 msgstr ""
 
-#: main.cc:85
-#, c-format
-msgid "Usage: %s [OPTION]... [FILE]..."
+#: main.cc:68
+msgid "BASENAME"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:86
-msgid "Typeset music and or play MIDI from FILE or <stdin>"
+#: main.cc:68
+msgid "write output to BASENAME[-x].extension"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:47 main.cc:89
-msgid "Options:"
+#: main.cc:69 main.cc:101
+msgid "show warranty and copyright"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:92
-msgid "  -a, --about            about LilyPond\n"
+#: main.cc:70 main.cc:92
+msgid "this help"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:95
-msgid "  -d, --debug            enable debugging output\n"
+#: main.cc:71
+msgid "switch on experimental features"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:98
-msgid ""
-"  -M, --dependencies     write Makefile dependencies for every input file\n"
+#: main.cc:72 main.cc:91
+msgid "enable debugging output"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:56 main.cc:101
-msgid "  -h, --help             this help\n"
+#: main.cc:73 main.cc:95
+msgid "FILE"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:104
-msgid "  -f, --output-format=X  use output format X\n"
+#: main.cc:73
+msgid "use FILE as init file"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:59 main.cc:107
-msgid "  -I, --include=DIR      add DIR to search path\n"
+#: main.cc:74
+msgid "DIR"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:110
-msgid "  -i, --init=FILE        use FILE as init file\n"
+#: main.cc:74
+msgid "add DIR to search path"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:113
-msgid "  -m, --no-paper         produce midi output only\n"
+#: main.cc:75
+msgid "produce midi output only"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:116
-msgid "  -o, --output=FILE      set FILE as default output base\n"
+#: main.cc:76
+msgid "write Makefile dependencies for every input file"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:119
-msgid "  -Q, --find-old-relative show all changes in relative syntax\n"
+#: main.cc:77 main.cc:99
+msgid "don't timestamp the output"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:122
-msgid ""
-"  -s, --safe             inhibit file output naming and exporting TeX  "
-"macros\n"
+#: main.cc:78
+msgid "show all changes in relative syntax"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:124
-msgid "  -t, --test             switch on experimental features\n"
+#: main.cc:79
+msgid "ignore mudela version"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:77 main.cc:127
-msgid "  -T, --no-timestamps    don't timestamp the output\n"
+#: main.cc:80 main.cc:103
+msgid "print version number"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:130
-msgid "  -V, --ignore-version   ignore mudela version\n"
+#: main.cc:81
+msgid "EXT"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:86 main.cc:133
-msgid "  -w, --warranty         show warranty and copyright\n"
+#: main.cc:81
+msgid "use output format EXT"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:136
-msgid "GNU LilyPond was compiled with the following settings:"
+#: main.cc:82
+msgid "inhibit file output naming and exporting"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:166
-msgid "GNU LilyPond is Free software, see --warranty"
+#: main.cc:89
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]..."
 msgstr ""
 
 msgstr ""
 
-#: main.cc:106 main.cc:169 main.cc:182
-#, c-format
-msgid "Copyright (c) %s by"
+#: main.cc:91
+msgid "Typeset music and or play MIDI from FILE."
+msgstr ""
+
+#: main.cc:97 main.cc:115
+msgid "Options:"
+msgstr ""
+
+#: main.cc:101
+msgid "This binary was compiled with the following options:"
+msgstr ""
+
+#: main.cc:118 main.cc:119
+msgid "Report bugs to"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:108 main.cc:171 main.cc:184
-msgid "Han-Wen Nienhuys <hanwen@cs.uu.nl>"
+#: main.cc:52 main.cc:134
+#, c-format
+msgid ""
+"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 undercertain "
+"conditions.  Invoke as `%s --warranty' for more information.\n"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:109 main.cc:172 main.cc:185
-msgid "Jan Nieuwenhuizen <janneke@gnu.org>"
+#: main.cc:59 main.cc:141 main.cc:153
+#, c-format
+msgid "Copyright (c) %s by"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:180
+#. GNU GNU?
+#: main.cc:151
 msgid "GNU LilyPond -- The GNU Project music typesetter"
 msgstr ""
 
 msgid "GNU LilyPond -- The GNU Project music typesetter"
 msgstr ""
 
-#: main.cc:112 main.cc:188
+#: main.cc:68 main.cc:159
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -940,7 +954,6 @@ msgid ""
 "using a high level description file as input.  LilyPond is part of \n"
 "the GNU Project.\n"
 "\n"
 "using a high level description file as input.  LilyPond is part of \n"
 "the GNU Project.\n"
 "\n"
-"\n"
 msgstr ""
 
 #: out/COPERTINA.hh:2
 msgstr ""
 
 #: out/COPERTINA.hh:2
@@ -959,68 +972,62 @@ msgstr ""
 
 #: out/FLAPTEKST.hh:2
 msgid ""
 
 #: out/FLAPTEKST.hh:2
 msgid ""
-"LilyPond is de muziekzetter van het GNU Project.  Dit programma drukt\n"
-"prachtige bladmuziek volgens een muzikaal definitie bestand.  Ook kan\n"
-"het een mechanische uitvoering afspelen naar een MIDI bestand.\n"
-"Bijzondere kunstjes zijn verscheidene notenbalken, maatsoorten, sleutels, \n"
-"toonaarden, zangteksten, krachtige invoer taal, cadensa, balken, boogjes, \n"
-"triolen, accoordnamen, transponeren, partituren, en uittreksels voor \n"
-"individuele partijen.  Een fraaie set muziektekens is inbegrepen.\n"
+"LilyPond is een muziekzetter.  Zij maakt prachtige bladmuziek\n"
+"uitgaande van een hoog niveau beschrijving bestand.  LilyPond \n"
+"maakt deel uit van het GNU Project.\n"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:42
-#, c-format
-msgid "Usage: %s [OPTION]... [FILE]"
+#: main.cc:90
+msgid "write exact durations, e.g.: a4*385/384"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:44
-msgid "Translate midi-file to mudela"
+#: main.cc:93
+msgid "ACC[:MINOR]"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:50
-msgid "  -b, --no-quantify      write exact durations, e.g.: a4*385/384\n"
+#: main.cc:93
+msgid "set key: ACC +sharps/-flats; :1 minor"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:53
-msgid "  -D, --debug            enable debugging output\n"
+#: main.cc:94
+msgid "assume no tuplets or double dots, smallest is 32"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:62
-msgid "  -k, --key=ACC[:MINOR]  set key: ACC +sharps/-flats; :1 minor\n"
+#: main.cc:95
+msgid "set FILE as default output"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:65
-msgid ""
-"  -n, --no-silly         assume no tuplets or double dots, smallest is 32\n"
+#: main.cc:96
+msgid "assume no tuplets"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:68
-msgid "  -o, --output=FILE      set FILE as default output\n"
+#: main.cc:97
+msgid "be quiet"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:71
-msgid "  -p, --no-tuplets       assume no tuplets\n"
+#: main.cc:98
+msgid "DUR"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:74
-msgid "  -q, --quiet            be quiet\n"
+#: main.cc:98
+msgid "Set smallest duration (?)"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:80
-msgid ""
-"  -s, --smallest=N       assume no shorter (reciprocal) durations than N\n"
+#: main.cc:100
+msgid "be verbose"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:83
-msgid "  -v, --verbose          be verbose\n"
+#: main.cc:102
+msgid "assume no double dotted notes"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:89
-msgid "  -x, --no-double-dots   assume no double dotted notes\n"
+#: main.cc:110
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:104
-msgid "Midi2ly, translate midi to mudela"
+#: main.cc:112
+msgid "Translate midi-file to mudela"
 msgstr ""
 
 #: midi-parser.cc:64
 msgstr ""
 
 #: midi-parser.cc:64
@@ -1146,7 +1153,3 @@ msgstr ""
 #, c-format
 msgid "% from input file: "
 msgstr ""
 #, c-format
 msgid "% from input file: "
 msgstr ""
-
-#: version.cc:11
-msgid "of"
-msgstr ""
index e32dcdb37414b146d4f47371df907dbc521a6646..1f5dfdd10cb1f26a793d11bafa19094812a7909c 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
 #
 msgid ""
 msgstr ""
-"POT-Creation-Date: 1999-08-15 23:58+0200\n"
+"POT-Creation-Date: 1999-08-20 18:48+0200\n"
 "Content-Type: text/plain; charset=\n"
 "Date: 1998-05-26 11:26:28+0200\n"
 "From:  <janneke@gnu.org>\n"
 "Content-Type: text/plain; charset=\n"
 "Date: 1998-05-26 11:26:28+0200\n"
 "From:  <janneke@gnu.org>\n"
@@ -28,27 +28,27 @@ msgstr "Onvoldoende velden in Dstream init."
 msgid "Debug output disabled.  Compiled with NPRINT."
 msgstr "Ontluis berichten zijn uitgeschakeld.  Vertaald met NPRINT."
 
 msgid "Debug output disabled.  Compiled with NPRINT."
 msgstr "Ontluis berichten zijn uitgeschakeld.  Vertaald met NPRINT."
 
-#: getopt-long.cc:103
+#: getopt-long.cc:141
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "optie `%s' vereist een argument"
 
 #, c-format
 msgid "option `%s' requires an argument"
 msgstr "optie `%s' vereist een argument"
 
-#: getopt-long.cc:107
+#: getopt-long.cc:145
 #, c-format
 msgid "option `%s' doesn't allow an argument"
 msgstr "optie `%s' staat geen argument toe"
 
 #, c-format
 msgid "option `%s' doesn't allow an argument"
 msgstr "optie `%s' staat geen argument toe"
 
-#: getopt-long.cc:111
+#: getopt-long.cc:149
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "onbekende optie: `%s'"
 
 #, c-format
 msgid "unrecognized option: `%s'"
 msgstr "onbekende optie: `%s'"
 
-#: getopt-long.cc:113
+#: getopt-long.cc:151
 #, c-format
 msgid "%c"
 msgstr ""
 
 #, c-format
 msgid "%c"
 msgstr ""
 
-#: getopt-long.cc:117
+#: getopt-long.cc:155
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "onjuist argument: `%s' voor optie `%s'"
 #, c-format
 msgid "invalid argument `%s' to option `%s'"
 msgstr "onjuist argument: `%s' voor optie `%s'"
@@ -368,117 +368,127 @@ msgstr ""
 msgid "Aborting"
 msgstr ""
 
 msgid "Aborting"
 msgstr ""
 
-#: lookup.cc:434
+#: lookup.cc:436
 #, c-format
 msgid "Non-matching braces in text `%s', adding braces."
 msgstr ""
 
 #, c-format
 msgid "Non-matching braces in text `%s', adding braces."
 msgstr ""
 
-#: main.cc:85
-#, c-format
-msgid "Usage: %s [OPTION]... [FILE]..."
-msgstr "Gebruik: %s [OPTIE]... [BESTAND]..."
-
-#: main.cc:86
-msgid "Typeset music and or play MIDI from FILE or <stdin>"
-msgstr "Zet muziek en of speel MIDI van FILE of <stdin>"
+#: main.cc:68
+msgid "BASENAME"
+msgstr "BASISNAAM"
 
 
-#: main.cc:47 main.cc:89
-msgid "Options:"
-msgstr "Opties:"
+#: main.cc:68
+msgid "write output to BASENAME[-x].extension"
+msgstr "schrijf uitvoer naar BASISNAME[-x].extensie"
 
 
-#: main.cc:92
-msgid "  -a, --about            about LilyPond\n"
-msgstr "  -a, --about            over LilyPond\n"
+#: main.cc:69 main.cc:101
+msgid "show warranty and copyright"
+msgstr "toon garantie en copyright"
 
 
-#: main.cc:95
-msgid "  -d, --debug            enable debugging output\n"
-msgstr "  -D, --debug            toon ontluis berichten\n"
+#: main.cc:70 main.cc:92
+msgid "this help"
+msgstr "deze hulp"
 
 
-#: main.cc:98
-msgid ""
-"  -M, --dependencies     write Makefile dependencies for every input file\n"
-msgstr ""
-"  -d, --dependencies     schrijf Makefile afhankelijkheden voor elk\n"
-"                           invoerbestand\n"
+#: main.cc:71
+msgid "switch on experimental features"
+msgstr "doe experimentele kunstjes"
 
 
-#: main.cc:56 main.cc:101
-msgid "  -h, --help             this help\n"
-msgstr "  -h, --help             deze hulp\n"
+#: main.cc:72 main.cc:91
+msgid "enable debugging output"
+msgstr "toon ontluis berichten"
 
 
-#: main.cc:104
-msgid "  -f, --output-format=X  use output format X\n"
-msgstr "  -f, --output-format=X  gebruik uitvoer formaat X\n"
+#: main.cc:73 main.cc:95
+msgid "FILE"
+msgstr "BESTAND"
 
 
-#: main.cc:59 main.cc:107
-msgid "  -I, --include=DIR      add DIR to search path\n"
-msgstr "  -I, --include=INDEX    voeg INDEX toe aan zoekpad\n"
+#: main.cc:73
+msgid "use FILE as init file"
+msgstr "gebruik BESTAND als initialisatiebestand"
 
 
-#: main.cc:110
-msgid "  -i, --init=FILE        use FILE as init file\n"
-msgstr "  -i, --init=BESTAND     gebruik BESTAND als initialisatiebestand\n"
+#: main.cc:74
+msgid "DIR"
+msgstr "DIR"
 
 
-#: main.cc:113
-msgid "  -m, --no-paper         produce midi output only\n"
-msgstr "  -M, --no-paper         produceer alleen midi uitvoer\n"
+#: main.cc:74
+msgid "add DIR to search path"
+msgstr "voeg DIR toe aan zoekpad"
 
 
-#: main.cc:116
-msgid "  -o, --output=FILE      set FILE as default output base\n"
-msgstr "  -o, --output=BESTAND   zet BESTAND als uitvoer basis\n"
+#: main.cc:75
+msgid "produce midi output only"
+msgstr "produceer alleen midi uitvoer"
 
 
-#: main.cc:119
-msgid "  -Q, --find-old-relative show all changes in relative syntax\n"
-msgstr "  -Q, --find-old-relative toon veranderingen voor relatieve mode\n"
+#: main.cc:76
+msgid "write Makefile dependencies for every input file"
+msgstr "schrijf Makefile afhankelijkheden voor elk invoerbestand"
 
 
-#: main.cc:122
-msgid ""
-"  -s, --safe             inhibit file output naming and exporting TeX  "
-"macros\n"
-msgstr ""
-"  -s, --safe             verbiedt naamgeving van uitvoer bestand en TeX "
-"macro's\n"
+#: main.cc:77 main.cc:99
+msgid "don't timestamp the output"
+msgstr "geen tijdstempel in de uitvoer"
 
 
-#: main.cc:124
-msgid "  -t, --test             switch on experimental features\n"
-msgstr "  -t, --test             doe experimentele kunstjes\n"
+#: main.cc:78
+msgid "show all changes in relative syntax"
+msgstr "toon veranderingen voor relatieve mode"
 
 
-#: main.cc:77 main.cc:127
-msgid "  -T, --no-timestamps    don't timestamp the output\n"
-msgstr "  -T, --no-timestamps    zet geen tijdstempel in de uitvoer\n"
+#: main.cc:79
+msgid "ignore mudela version"
+msgstr "verkeerde mudela versie: %s (%s, %s)"
 
 
-#: main.cc:130
-msgid "  -V, --ignore-version   ignore mudela version\n"
-msgstr "  -V, --ignore-version   negeer mudela versie\n"
+#: main.cc:80 main.cc:103
+msgid "print version number"
+msgstr "toon versienummer"
 
 
-#: main.cc:86 main.cc:133
-msgid "  -w, --warranty         show warranty and copyright\n"
-msgstr "  -w, --warranty         toon garantie en copyright\n"
+#: main.cc:81
+msgid "EXT"
+msgstr "EXT"
 
 
-#: main.cc:136
-msgid "GNU LilyPond was compiled with the following settings:"
-msgstr "GNU LilyPond is vertaald met de volgende instellingen:"
+#: main.cc:81
+msgid "use output format EXT"
+msgstr "gebruik uitvoer formaat EXT"
 
 
-#: main.cc:166
-msgid "GNU LilyPond is Free software, see --warranty"
-msgstr "GNU LilyPond is Vrij bedenksel, zie --warranty"
+#: main.cc:82
+msgid "inhibit file output naming and exporting"
+msgstr "verbiedt naamgeving van uitvoer bestand en TeX macro's"
 
 
-#: main.cc:106 main.cc:169 main.cc:182
+#: main.cc:89
 #, c-format
 #, c-format
-msgid "Copyright (c) %s by"
-msgstr "Copyright (c) %s "
+msgid "Usage: %s [OPTION]... [FILE]..."
+msgstr "Gebruik: %s [OPTIE]... [BESTAND]..."
 
 
-#: main.cc:108 main.cc:171 main.cc:184
-msgid "Han-Wen Nienhuys <hanwen@cs.uu.nl>"
-msgstr ""
+#: main.cc:91
+msgid "Typeset music and or play MIDI from FILE."
+msgstr "Zet muziek en of speel MIDI van FILE of <stdin>"
+
+#: main.cc:97 main.cc:115
+msgid "Options:"
+msgstr "Opties:"
+
+#: main.cc:101
+msgid "This binary was compiled with the following options:"
+msgstr "Dit programma is vertaald met de volgende instellingen:"
+
+#: main.cc:118 main.cc:119
+msgid "Report bugs to"
+msgstr "Rapporteer bugs naar"
 
 
-#: main.cc:109 main.cc:172 main.cc:185
-msgid "Jan Nieuwenhuizen <janneke@gnu.org>"
+#: main.cc:52 main.cc:134
+#, c-format
+msgid ""
+"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 undercertain "
+"conditions.  Invoke as `%s --warranty' for more information.\n"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:180
+#: main.cc:59 main.cc:141 main.cc:153
+#, c-format
+msgid "Copyright (c) %s by"
+msgstr "Copyright (c) %s "
+
+#. GNU GNU?
+#: main.cc:151
 msgid "GNU LilyPond -- The GNU Project music typesetter"
 msgstr "GNU LilyPond -- De Muziekzetter van het GNU Project"
 
 msgid "GNU LilyPond -- The GNU Project music typesetter"
 msgstr "GNU LilyPond -- De Muziekzetter van het GNU Project"
 
-#: main.cc:112 main.cc:188
+#: main.cc:68 main.cc:159
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License version 2\n"
@@ -872,7 +882,7 @@ msgstr "Ik ben te dik."
 #: parser.yy:55
 #, c-format
 msgid "Oldest supported input version: %s"
 #: parser.yy:55
 #, c-format
 msgid "Oldest supported input version: %s"
-msgstr ""
+msgstr "Oudst ondersteunde invoer versie: %s"
 
 #: parser.yy:313
 msgid "Cannot evaluate Scheme in safe mode"
 
 #: parser.yy:313
 msgid "Cannot evaluate Scheme in safe mode"
@@ -955,8 +965,11 @@ msgid ""
 "using a high level description file as input.  LilyPond is part of \n"
 "the GNU Project.\n"
 "\n"
 "using a high level description file as input.  LilyPond is part of \n"
 "the GNU Project.\n"
 "\n"
-"\n"
 msgstr ""
 msgstr ""
+"LilyPond is een muziekzetter.  Zij maakt prachtige bladmuziek\n"
+"uitgaande van een hoog niveau beschrijving bestand.  LilyPond \n"
+"maakt deel uit van het GNU Project.\n"
+"\n"
 
 #: out/COPERTINA.hh:2
 msgid ""
 
 #: out/COPERTINA.hh:2
 msgid ""
@@ -974,70 +987,63 @@ msgstr ""
 
 #: out/FLAPTEKST.hh:2
 msgid ""
 
 #: out/FLAPTEKST.hh:2
 msgid ""
-"LilyPond is de muziekzetter van het GNU Project.  Dit programma drukt\n"
-"prachtige bladmuziek volgens een muzikaal definitie bestand.  Ook kan\n"
-"het een mechanische uitvoering afspelen naar een MIDI bestand.\n"
-"Bijzondere kunstjes zijn verscheidene notenbalken, maatsoorten, sleutels, \n"
-"toonaarden, zangteksten, krachtige invoer taal, cadensa, balken, boogjes, \n"
-"triolen, accoordnamen, transponeren, partituren, en uittreksels voor \n"
-"individuele partijen.  Een fraaie set muziektekens is inbegrepen.\n"
+"LilyPond is een muziekzetter.  Zij maakt prachtige bladmuziek\n"
+"uitgaande van een hoog niveau beschrijving bestand.  LilyPond \n"
+"maakt deel uit van het GNU Project.\n"
 msgstr ""
 
 msgstr ""
 
-#: main.cc:42
-#, c-format
-msgid "Usage: %s [OPTION]... [FILE]"
-msgstr "Gebruik: %s [OPTIE]... [BESTAND]"
+#: main.cc:90
+msgid "write exact durations, e.g.: a4*385/384"
+msgstr "schrijf exacte duren, bijv.: a4*385/384"
 
 
-#: main.cc:44
-msgid "Translate midi-file to mudela"
-msgstr "Vertaal midi-bestand naar mudela"
+#: main.cc:93
+msgid "ACC[:MINOR]"
+msgstr "ACC[:MINEUR]"
 
 
-#: main.cc:50
-msgid "  -b, --no-quantify      write exact durations, e.g.: a4*385/384\n"
-msgstr "  -b, --no-quantify      schrijf exacte duren, bijv.: a4*385/384\n"
+#: main.cc:93
+msgid "set key: ACC +sharps/-flats; :1 minor"
+msgstr "zet toonsoort: ACC +kruizen/-mollen; :1 mineur"
 
 
-#: main.cc:53
-msgid "  -D, --debug            enable debugging output\n"
-msgstr "  -D, --debug            toon ontluis berichten\n"
+#: main.cc:94
+msgid "assume no tuplets or double dots, smallest is 32"
+msgstr "ga niet uit van tuplets of dubbel gepunkteerd, kortste is 32"
 
 
-#: main.cc:62
-msgid "  -k, --key=ACC[:MINOR]  set key: ACC +sharps/-flats; :1 minor\n"
-msgstr "  -k, --key=ACC[:MINEUR] zet toonsoort: ACC +kruizen/-mollen; :1 mineur\n"
+#: main.cc:95
+msgid "set FILE as default output"
+msgstr "zet BESTAND als verval uitvoer"
 
 
-#: main.cc:65
-msgid ""
-"  -n, --no-silly         assume no tuplets or double dots, smallest is 32\n"
-msgstr "  -n, --no-silly         ga niet uit van tuplets of dubbel gepunteerd,       "
-"                              kortste is 32\n"
+#: main.cc:96
+msgid "assume no tuplets"
+msgstr "ga niet uit van tuplets"
 
 
-#: main.cc:68
-msgid "  -o, --output=FILE      set FILE as default output\n"
-msgstr "  -o, --output=BESTAND   zet BESTAND als verval uitvoer\n"
+#: main.cc:97
+msgid "be quiet"
+msgstr "wees stil"
 
 
-#: main.cc:71
-msgid "  -p, --no-tuplets       assume no tuplets\n"
-msgstr "  -p, --no-tuplets       ga uit van geen tuplets\n"
+#: main.cc:98
+msgid "DUR"
+msgstr "DUUR"
 
 
-#: main.cc:74
-msgid "  -q, --quiet            be quiet\n"
-msgstr "  -q, --quiet            wees stil\n"
+#: main.cc:98
+msgid "Set smallest duration (?)"
+msgstr "Zet kortste duur (?)"
 
 
-#: main.cc:80
-msgid ""
-"  -s, --smallest=N       assume no shorter (reciprocal) durations than N\n"
-msgstr "  -s, --smallest=N       ga niet uit van kortere (reciproke) duren dan N\n"
+#: main.cc:100
+msgid "be verbose"
+msgstr "wees breedsprakig"
 
 
-#: main.cc:83
-msgid "  -v, --verbose          be verbose\n"
-msgstr "  -v, --verbose          wees breedsprakig\n"
+#: main.cc:102
+msgid "assume no double dotted notes"
+msgstr "ga niet uit van dubbel gepunkteerde noten"
 
 
-#: main.cc:89
-msgid "  -x, --no-double-dots   assume no double dotted notes\n"
-msgstr "  -x, --no-double-dots   ga niet uit van dubbel gepunkteerde noten\n"
+#: main.cc:110
+#, c-format
+msgid "Usage: %s [OPTION]... [FILE]"
+msgstr "Gebruik: %s [OPTIE]... [BESTAND]"
 
 
-#: main.cc:104
-msgid "Midi2ly, translate midi to mudela"
-msgstr "Midi2ly, vertaal midi naar mudela"
+#: main.cc:112
+msgid "Translate midi-file to mudela"
+msgstr "Vertaal midi-bestand naar mudela"
 
 #: midi-parser.cc:64
 msgid "zero length string encountered"
 
 #: midi-parser.cc:64
 msgid "zero length string encountered"
@@ -1163,9 +1169,17 @@ msgstr ""
 msgid "% from input file: "
 msgstr ""
 
 msgid "% from input file: "
 msgstr ""
 
-#: version.cc:11
-msgid "of"
-msgstr "van"
+#~ msgid "this help "
+#~ msgstr "deze hulp"
+
+#~ msgid "GNU LilyPond is Free Software, see --warranty"
+#~ msgstr "GNU LilyPond is Vrij bedenksel, zie --warranty"
+
+#~ msgid "Midi2ly, translate midi to mudela"
+#~ msgstr "Midi2ly, vertaal midi naar mudela"
+
+#~ msgid "of"
+#~ msgstr "van"
 
 #~ msgid "please fix me"
 #~ msgstr "repareer mij alsjeblieft"
 
 #~ msgid "please fix me"
 #~ msgstr "repareer mij alsjeblieft"
index 09bc18962e6426a7f4be3ec96ec539272afab550..983abe0adfc36bfc9f4324e0a70f98c8d795f54b 100644 (file)
@@ -14,7 +14,7 @@
 #  - rewrite in python
 
 program_name = 'convert-mudela'
 #  - rewrite in python
 
 program_name = 'convert-mudela'
-version = '0.4'
+version = '@TOPLEVEL_VERSION@'
 
 import os
 import sys
 
 import os
 import sys
@@ -28,11 +28,43 @@ mudela_version_re_str = '\\\\version *\"(.*)\"'
 mudela_version_re = re.compile(mudela_version_re_str)
 
 def program_id ():
 mudela_version_re = re.compile(mudela_version_re_str)
 
 def program_id ():
-       return '%s version %s' %(program_name,  version);
+       return '%s (GNU LilyPond) %s' %(program_name,  version);
 
 def identify ():
        sys.stderr.write (program_id () + '\n')
 
 
 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)
 def gulp_file(f):
        try:
                i = open(f)
@@ -59,7 +91,6 @@ def version_cmp (t1, t2):
                if t1[x] - t2[x]:
                        return t1[x] - t2[x]
        return 0
                if t1[x] - t2[x]:
                        return t1[x] - t2[x]
        return 0
-               
 
 def guess_mudela_version(filename):
        s = gulp_file (filename)
 
 def guess_mudela_version(filename):
        s = gulp_file (filename)
@@ -69,18 +100,6 @@ def guess_mudela_version(filename):
        else:
                return ''
 
        else:
                return ''
 
-def help ():
-       sys.stdout.write (
-               ("Usage: %s [OPTION]... [FILE]...\n" 
-               + "Try to convert to newer mudela-versions\n"
-               + "Options:\n"
-               + "  -h, --help             print this help\n"
-               + '  -e, --edit             in place edit\n'
-               + '  -f, --from=VERSION     start from version\n'
-               + '  -s, --show-rules       print out all rules.\n'
-               + '  -t, --to=VERSION       target version\n') % program_name)
-       sys.exit (0)
-
 class FatalConversionError:
        pass
 
 class FatalConversionError:
        pass
 
@@ -94,16 +113,11 @@ def show_rules (file):
                
 if 1:                                  # need new a namespace
        def conv (lines):
                
 if 1:                                  # need new a namespace
        def conv (lines):
-               found =0
-               for x in lines:
-                       if re.search ('\\\\octave', x):
-                               found = 1
-                               break
-               if found:
+               if re.search ('\\\\octave', str):
                        sys.stderr.write ('\nNot smart enough to convert \\octave')
                        raise FatalConversionError()
                        sys.stderr.write ('\nNot smart enough to convert \\octave')
                        raise FatalConversionError()
-               return lines
                
                
+               return lines
 
        conversions.append (
                ((0,1,19), conv, 'deprecated \\octave; can\'t convert automatically'))
 
        conversions.append (
                ((0,1,19), conv, 'deprecated \\octave; can\'t convert automatically'))
@@ -111,14 +125,11 @@ if 1:                                     # need new a namespace
 
 if 1:                                  # need new a namespace
        def conv (lines):
 
 if 1:                                  # need new a namespace
        def conv (lines):
-               newlines = []
-               for x in lines:
-                       x = re.sub ('\\\\textstyle([^;]+);',
-                                        '\\\\property Lyrics . textstyle = \\1', x)
-                       x = re.sub ('\\\\key([^;]+);', '\\\\accidentals \\1;', x)
-                       newlines.append (x)
-               return newlines
-               
+               x = re.sub ('\\\\textstyle([^;]+);',
+                                        '\\\\property Lyrics . textstyle = \\1', str)
+               x = re.sub ('\\\\key([^;]+);', '\\\\accidentals \\1;', str)
+                       
+               return str
 
        conversions.append (
                ((0,1,20), conv, 'deprecated \\textstyle, new \key syntax'))
 
        conversions.append (
                ((0,1,20), conv, 'deprecated \\textstyle, new \key syntax'))
@@ -126,15 +137,10 @@ if 1:                                     # need new a namespace
 
 if 1:
        def conv (lines):
 
 if 1:
        def conv (lines):
-               newlines = []
-               for x in lines:
-                       x = re.sub ('\\\\musical_pitch',
-                                        '\\\\musicalpitch',x)
-                       x = re.sub ('\\\\meter',
-                                        '\\\\time',x)
-                       newlines.append (x)
-               return newlines
-               
+               x = re.sub ('\\\\musical_pitch', '\\\\musicalpitch',str)
+               x = re.sub ('\\\\meter', '\\\\time',str)
+                       
+               return str
 
        conversions.append (
                ((0,1,21), conv, '\\musical_pitch -> \\musicalpitch, '+
 
        conversions.append (
                ((0,1,21), conv, '\\musical_pitch -> \\musicalpitch, '+
@@ -150,17 +156,11 @@ if 1:
 
 if 1:
        def conv (lines):
 
 if 1:
        def conv (lines):
-               newlines = []
-               for x in lines:
-                       x = re.sub ('\\\\accidentals',
-                                   '\\\\keysignature',x)
-                       x = re.sub ('specialaccidentals *= *1',
-                                        'keyoctaviation = 0',x)
-                       x = re.sub ('specialaccidentals *= *0',
-                                        'keyoctaviation = 1',x)
-                       newlines.append (x)
-               return newlines
-               
+               x = re.sub ('\\\\accidentals', '\\\\keysignature',str)
+               x = re.sub ('specialaccidentals *= *1', 'keyoctaviation = 0',str)
+               x = re.sub ('specialaccidentals *= *0', 'keyoctaviation = 1',str)
+                       
+               return str
 
        conversions.append (
                ((1,0,1), conv, '\\accidentals -> \\keysignature, ' +
 
        conversions.append (
                ((1,0,1), conv, '\\accidentals -> \\keysignature, ' +
@@ -168,12 +168,7 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               found = 0
-               for x in lines:
-                       if re.search ('\\\\header', x):
-                               found = 1
-                               break
-               if found:
+               if re.search ('\\\\header', lines):
                        sys.stderr.write ('\nNot smart enough to convert to new \\header format')
                return lines
        
                        sys.stderr.write ('\nNot smart enough to convert to new \\header format')
                return lines
        
@@ -181,76 +176,58 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\melodic', '\\\\notes',x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\\\\melodic', '\\\\notes',str)
+                       
+               return str
        
        conversions.append ((1,0,3), conv, '\\melodic -> \\notes')
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,3), conv, '\\melodic -> \\notes')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('default_paper *=', '',x)
-                       x =  re.sub ('default_midi *=', '',x)                   
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('default_paper *=', '',str)
+               x =  re.sub ('default_midi *=', '',x)                   
+                       
+               return str
        
        conversions.append ((1,0,4), conv, 'default_{paper,midi}')
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,4), conv, 'default_{paper,midi}')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('ChoireStaff', 'ChoirStaff',x)
-                       x =  re.sub ('\\output', 'output = ',x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('ChoireStaff', 'ChoirStaff',str)
+               x =  re.sub ('\\output', 'output = ',str)
+                       
+               return str
        
        conversions.append ((1,0,5), conv, 'ChoireStaff -> ChoirStaff')
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,5), conv, 'ChoireStaff -> ChoirStaff')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               found = None
-               for x in lines:
-                       found = re.search ('[a-zA-Z]+ = *\\translator',x)
-                       newlines.append (x)
-                       if found: break
-               if found:
-                       sys.stderr.write ('\nNot smart enough to \\translator syntax')
+               if re.search ('[a-zA-Z]+ = *\\translator',str):
+                       sys.stderr.write ('\nNot smart enough to change \\translator syntax')
                        raise FatalConversionError()
                        raise FatalConversionError()
-               return newlines
+               return str
        
        conversions.append ((1,0,6), conv, 'foo = \\translator {\\type .. } ->\\translator {\\type ..; foo; }')
 
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,6), conv, 'foo = \\translator {\\type .. } ->\\translator {\\type ..; foo; }')
 
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\lyric', '\\\\lyrics',x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\\\\lyric', '\\\\lyrics',str)
+                       
+               return str
        
        conversions.append ((1,0,7), conv, '\\lyric -> \\lyrics')
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,7), conv, '\\lyric -> \\lyrics')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\\\[/3+', '\\\\times 2/3 { ',x)
-                       x =  re.sub ('\\[/3+', '\\\\times 2/3 { [',x)
-                       x =  re.sub ('\\\\\\[([0-9/]+)', '\\\\times \\1 {',x)
-                       x =  re.sub ('\\[([0-9/]+)', '\\\\times \\1 { [',x)
-                       x =  re.sub ('\\\\\\]([0-9/]+)', '}', x)
-                       x =  re.sub ('\\\\\\]', '}',x)
-                       x =  re.sub ('\\]([0-9/]+)', '] }', x)
-
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\\\\\\[/3+', '\\\\times 2/3 { ',str)
+               x =  re.sub ('\\[/3+', '\\\\times 2/3 { [',str)
+               x =  re.sub ('\\\\\\[([0-9/]+)', '\\\\times \\1 {',str)
+               x =  re.sub ('\\[([0-9/]+)', '\\\\times \\1 { [',str)
+               x =  re.sub ('\\\\\\]([0-9/]+)', '}', str)
+               x =  re.sub ('\\\\\\]', '}',str)
+               x =  re.sub ('\\]([0-9/]+)', '] }', str)
+               return str
        
        conversions.append ((1,0,10), conv, '[2/3 ]1/1 -> \\times 2/3 ')
 
        
        conversions.append ((1,0,10), conv, '[2/3 ]1/1 -> \\times 2/3 ')
 
@@ -262,63 +239,51 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('<([^>~]+)~([^>]*)>','<\\1 \\2> ~', x)
-                       newlines.append (x)
-               return newlines
+               
+               
+               x =  re.sub ('<([^>~]+)~([^>]*)>','<\\1 \\2> ~', str)
+                       
+               return str
        
        conversions.append ((1,0,13), conv, '<a ~ b> c -> <a b> ~ c')
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,13), conv, '<a ~ b> c -> <a b> ~ c')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('<\\[','[<', x)
-                       x =  re.sub ('\\]>','>]', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('<\\[','[<', str)
+               x =  re.sub ('\\]>','>]', str)
+                       
+               return str
        
        conversions.append ((1,0,14), conv, '<[a b> <a b]>c -> [<a b> <a b>]')
 
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,14), conv, '<[a b> <a b]>c -> [<a b> <a b>]')
 
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\type','\\\\context', x)
-                       x =  re.sub ('textstyle','textStyle', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\\\\type','\\\\context', str)
+               x =  re.sub ('textstyle','textStyle', str)
+                       
+               return str
        
        conversions.append ((1,0,16), conv, '\\type -> \\context, textstyle -> textStyle')
 
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,16), conv, '\\type -> \\context, textstyle -> textStyle')
 
 
 if 1:
        def conv(lines):
-               newlines =[]
-               found = None
-               for x in lines:
-                       found = re.search ('\\\\repeat',x)
-                       newlines.append (x)
-                       if found: break
-               if found:
+               if re.search ('\\\\repeat',str):
                        sys.stderr.write ('\nNot smart enough to convert \\repeat')
                        raise FatalConversionError()
                        sys.stderr.write ('\nNot smart enough to convert \\repeat')
                        raise FatalConversionError()
-               return newlines
+               return str
        
        conversions.append ((1,0,18), conv,
                            '\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative')
 
 if 1:
        def conv(lines):
        
        conversions.append ((1,0,18), conv,
                            '\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('SkipBars','skipBars', x)
-                       x =  re.sub ('fontsize','fontSize', x)
-                       x =  re.sub ('midi_instrument','midiInstrument', x)                     
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('SkipBars','skipBars', str)
+               x =  re.sub ('fontsize','fontSize', str)
+               x =  re.sub ('midi_instrument','midiInstrument', x)                     
+                       
+               return str
 
        conversions.append ((1,0,19), conv,
                            'fontsize -> fontSize, midi_instrument -> midiInstrument, SkipBars -> skipBars')
 
        conversions.append ((1,0,19), conv,
                            'fontsize -> fontSize, midi_instrument -> midiInstrument, SkipBars -> skipBars')
@@ -326,13 +291,11 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('tieydirection','tieVerticalDirection', x)
-                       x =  re.sub ('slurydirection','slurVerticalDirection', x)
-                       x =  re.sub ('ydirection','verticalDirection', x)                       
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('tieydirection','tieVerticalDirection', str)
+               x =  re.sub ('slurydirection','slurVerticalDirection', str)
+               x =  re.sub ('ydirection','verticalDirection', x)                       
+                       
+               return str
 
        conversions.append ((1,0,20), conv,
                            '{,tie,slur}ydirection -> {v,tieV,slurV}erticalDirection')
 
        conversions.append ((1,0,20), conv,
                            '{,tie,slur}ydirection -> {v,tieV,slurV}erticalDirection')
@@ -340,11 +303,9 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('hshift','horizontalNoteShift', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('hshift','horizontalNoteShift', str)
+                       
+               return str
 
        conversions.append ((1,0,21), conv,
                            'hshift -> horizontalNoteShift')
 
        conversions.append ((1,0,21), conv,
                            'hshift -> horizontalNoteShift')
@@ -352,11 +313,9 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\grouping[^;]*;','', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\\\\grouping[^;]*;','', str)
+                       
+               return str
 
        conversions.append ((1,1,52), conv,
                            'deprecate \\grouping')
 
        conversions.append ((1,1,52), conv,
                            'deprecate \\grouping')
@@ -364,34 +323,28 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\wheel','\\\\coda', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\\\\wheel','\\\\coda', str)
+                       
+               return str
 
        conversions.append ((1,1,55), conv,
                            '\\wheel -> \\coda')
 
 if 1:
        def conv(lines):
 
        conversions.append ((1,1,55), conv,
                            '\\wheel -> \\coda')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('keyoctaviation','keyOctaviation', x)
-                       x =  re.sub ('slurdash','slurDash', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('keyoctaviation','keyOctaviation', str)
+               x =  re.sub ('slurdash','slurDash', str)
+                       
+               return str
 
        conversions.append ((1,1,65), conv,
                            'slurdash -> slurDash, keyoctaviation -> keyOctaviation')
 
 if 1:
        def conv(lines):
 
        conversions.append ((1,1,65), conv,
                            'slurdash -> slurDash, keyoctaviation -> keyOctaviation')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\repeat *\"?semi\"?','\\\\repeat "volta"', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\\\\repeat *\"?semi\"?','\\\\repeat "volta"', str)
+                       
+               return str
 
        conversions.append ((1,1,66), conv,
                            'semi -> volta')
 
        conversions.append ((1,1,66), conv,
                            'semi -> volta')
@@ -399,33 +352,27 @@ if 1:
 
 if 1:
        def conv(lines):
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\"?beamAuto\"? *= *\"?0?\"?','noAutoBeaming = "1"', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('\"?beamAuto\"? *= *\"?0?\"?','noAutoBeaming = "1"', str)
+                       
+               return str
 
        conversions.append ((1,1,67), conv,
                            'beamAuto -> noAutoBeaming')
 
 if 1:
        def conv(lines):
 
        conversions.append ((1,1,67), conv,
                            'beamAuto -> noAutoBeaming')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('automaticMelismas', 'automaticMelismata', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('automaticMelismas', 'automaticMelismata', str)
+                       
+               return str
 
        conversions.append ((1,2,0), conv,
                            'automaticMelismas -> automaticMelismata')
 
 if 1:
        def conv(lines):
 
        conversions.append ((1,2,0), conv,
                            'automaticMelismas -> automaticMelismata')
 
 if 1:
        def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('dynamicDir', 'dynamicDirection', x)
-                       newlines.append (x)
-               return newlines
+               x =  re.sub ('dynamicDir', 'dynamicDirection', str)
+                       
+               return str
 
        conversions.append ((1,2,1), conv,
                            'dynamicDir -> dynamicDirection')
 
        conversions.append ((1,2,1), conv,
                            'dynamicDir -> dynamicDirection')
@@ -447,22 +394,26 @@ def do_conversion (infile, from_version, outfile, to_version):
        conv_list = get_conversions (from_version, to_version)
 
        sys.stderr.write ('Applying conversions: ')
        conv_list = get_conversions (from_version, to_version)
 
        sys.stderr.write ('Applying conversions: ')
-       lines = infile.readlines();
+       str = infile.read (-1)
        last_conversion = ()
        try:
                for x in conv_list:
                        sys.stderr.write (tup_to_str (x[0])  + ', ')
        last_conversion = ()
        try:
                for x in conv_list:
                        sys.stderr.write (tup_to_str (x[0])  + ', ')
-                       lines = x[1] (lines)
+                       str = x[1] (str)
                        last_conversion = x[0]
                        last_conversion = x[0]
-                       
 
        except FatalConversionError:
                sys.stderr.write ('Error while converting; I won\'t convert any further')
 
 
        except FatalConversionError:
                sys.stderr.write ('Error while converting; I won\'t convert any further')
 
-       for x in lines:
-               if last_conversion:
-                       x = re.sub (mudela_version_re_str, '\\\\version \"%s\"' % tup_to_str (last_conversion), x)
-               outfile.write(x)
+       if last_conversion:
+               sys.stderr.write ('\n')
+               new_ver =  '\\\\version \"%s\"' % tup_to_str (last_conversion)
+               if re.search (mudela_version_re_str):
+                       str = re.sub (mudela_version_re_str,new_ver , str)
+               else:
+                       str = new_ver + '\n' + str
+
+               outfile.write(str)
 
 class UnknownVersion:
        pass
 
 class UnknownVersion:
        pass
@@ -524,15 +475,17 @@ to_version = ()
 from_version = ()
 outfile_name = ''
 
 from_version = ()
 outfile_name = ''
 
-identify ()
 (options, files) = getopt.getopt (
 (options, files) = getopt.getopt (
-       sys.argv[1:], 'o:f:t:seh', ['output', 'show-rules', 'help', 'edit', 'from', 'to'])
+       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':
                help ()
 
 for opt in options:
        o = opt[0]
        a = opt[1]
        if o== '--help' or o == '-h':
                help ()
+       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':
        elif o== '--from' or o=='-f':
                from_version = str_to_tuple (a)
        elif o== '--to' or o=='-t':
@@ -548,7 +501,7 @@ for opt in options:
                print o
                raise getopt.error
 
                print o
                raise getopt.error
 
-
+identify ()
 for f in files:
        if f == '-':
                f = ''
 for f in files:
        if f == '-':
                f = ''
index 64afbc5c4d5d1af445f4b435534d8aa0c3187f7d..b2d62ef9db2829ce7610e1cfe6b2080a79dc74f8 100644 (file)
@@ -353,6 +353,10 @@ class TeXOutput:
 
 \f
 
 
 \f
 
+
+# ARG! THIS CODE IS BLOATED:
+# FIXME: Junk all set/get methods.
+
 class Properties:
     """
     This class handles all ly2dvi.py property manipulation
 class Properties:
     """
     This class handles all ly2dvi.py property manipulation
index 59c1ad287b392cbce1308910ed32b83abc028202..0000a26aeabc04bb31fa7a63b35d824f22e81877 100644 (file)
@@ -1,77 +1,4 @@
 #!@PYTHON@
 #!@PYTHON@
-#
-# The bugs you find are made by Tom Cato Amundsen <tomcato@xoommail.com>
-# Send patches/questions/bugreports to a mailinglist:
-#  gnu-music-discuss@gnu.org
-#  bug-gnu-music@gnu.org
-#  help-gnu-music@gnu.org
-#
-#  TODO:
-# * center option (??)
-# * make mudela-book understand usepackage{geometry}
-# * check that linewidth set in \paper is not wider than actual linewidth?
-# * the following fails because mudelabook doesn't care that the
-#   last } after \end{mudela} finishes the marginpar:
-#     \marginpar{
-#     \begin{mudela}
-#        c d e f g
-#     \end{mudela}}
-# * force-verbatim is maybe not that useful since latex fails with footnotes,
-#   marginpars and others
-# log:
-# 0.3:
-#   rewrite in Python.
-# 0.4:
-#   much rewritten by new author. I think the work has been split more
-#   logical between different classes.
-# 0.4.1:
-#   - cleanup
-#   - speedup, do all mudela parsing at the same time to avoid multiple
-#     guile startup that takes some seconds on my computer
-# 0.4.2:
-#   - fixed default latex fontsize, it should be 10pt not 11pt
-#   - verbatim option no longer visible
-#   - mudela-book produces .dvi output
-#   - change to use castingalgorithm = \Gourlay instead of \Wordwrap. It gives
-#     better result on small linewidths.
-#   - mudela-book-doc.doc rewritten
-# 0.5:
-#   - junked floating and fragment options, added eps option
-#   - mudela-book will scan the mudela code to find out if it has to add
-#     paper-definition and \score{\notes{...}}
-#   - possible to define commands that look like this: \mudela{ c d e }
-#   - don't produce .dvi output, it was a silly idea...
-# 0.5.1:
-#   - removed init/mudela-book-defs.py, \mudela is defined inside mudela-book
-#   - fragment and nonfragment options will override autodetection of type of
-#     in mudela-block (voice contents or complete code)
-# 0.5.2:
-#   - fixed verbatim option behaviour: don't show \begin{mudela} \end{mudela}
-#     and show both mudela code and music
-#   - veryverbatim option, same as verbatim but show \begin{mudela}
-#     and \end{mudela}. (saves keystrokes in mudela-book-doc.doc)
-#   - intertext="bla bla bla" option
-#   - mudela-book now understand latex \begin{verbatim}
-# 0.5.3:
-#   - bf: \mudela{ \times 2/3{...} }
-#        * \t in \times is not tab character and
-#        * dont treat the first '}' as command ending
-# 0.5.4: (Mats B)
-#   - .fly and .sly files in \mudelafile{} are treated as standalone Lilypond.
-#   - Fragments, .fly and .sly files are in \relative mode.
-# 0.5.5: (Mats B)
-#   - bf: Default fragments have linewidth=-1.0
-#   - Added 'singleline' and 'multiline' options.
-# 0.5.6:
-#   - \mudelafile{} set linewidth correct, -1 for .sly and texlinewidth for .fly
-#   - changes to Mudela_output
-#   - changed RE to search for pre/postMudelaExample to make it possible to
-#     comment out a definition.
-#   - use sys.stderr and sys.stdout instead of print
-# 1.1.62
-#   - junked separate versioning
-#   - pass -I options to lily.
-#   - portability stuff (os.sep).
 
 import os
 import string
 
 import os
 import string
@@ -83,739 +10,722 @@ import __main__
 outdir = 'out'
 initfile = ''
 program_version = '@TOPLEVEL_VERSION@'
 outdir = 'out'
 initfile = ''
 program_version = '@TOPLEVEL_VERSION@'
-include_path = ['.']
-
-out_files = []
-
-fontsize_i2a = {11:'eleven', 13:'thirteen', 16:'sixteen',
-                20:'twenty', 26:'twentysix'}
-fontsize_pt2i = {'11pt':11, '13pt':13, '16pt':16, '20pt':20, '26pt':26}
-
-# perhaps we can do without this?
-
-begin_mudela_re = re.compile ('^ *\\\\begin{mudela}')
-begin_verbatim_re = re.compile ('^ *\\\\begin{verbatim}')
-end_verbatim_re = re.compile ('^ *\\\\end{verbatim}')
-extract_papersize_re = re.compile('\\\\documentclass[\[, ]*(\w*)paper[\w ,]*\]\{\w*\}')
-extract_fontsize_re = re.compile('[ ,\[]*([0-9]*)pt')
-begin_mudela_opts_re = re.compile('\[[^\]]*\]')
-end_mudela_re = re.compile ('^ *\\\\end{mudela}')
-section_re = re.compile ('\\\\section')
-chapter_re = re.compile ('\\\\chapter')
-input_re = re.compile ('^\\\\input{([^}]*)')
-include_re = re.compile ('^\\\\include{([^}]*)')
-begin_document_re = re.compile ('^ *\\\\begin{document}')
-documentclass_re = re.compile('\\\\documentclass')
-twocolumn_re = re.compile('\\\\twocolumn')
-onecolumn_re = re.compile('\\\\onecolumn')
-mudela_file_re = re.compile('\\\\mudelafile{([^}]+)}')
-file_ext_re = re.compile('.+\\.([^.}]+$)')
-preMudelaExample_re = re.compile('^\s*\\\\def\\\\preMudelaExample')
-postMudelaExample_re = re.compile('^\s*\\\\def\\\\postMudelaExample')
-boundingBox_re = re.compile('%%BoundingBox: ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)')
-intertext_re = re.compile("intertext=\"([^\"]*)\"")
-
-def file_exist_b(name):
-    try: 
-       f = open(name)
-    except IOError:
-       return 0
-    f.close ()
-    return 1
-
-def ps_dimention(fname):
-    fd = open(fname)
-    lines = fd.readlines()
-    for line in lines:
-        s = boundingBox_re.search(line)
-        if s:
-            break
-    return (int(s.groups()[2])-int(s.groups()[0]), 
-            int(s.groups()[3])-int(s.groups()[1]))
 
 
+cwd = os.getcwd ()
+include_path = [cwd]
 
 
-def find_file (name):
-    for a in include_path:
+# TODO: use splitting iso. \mudelagraphic.
+
+#
+default_music_fontsize = 16
+default_text_fontsize = 12
+
+# latex linewidths:
+# indices are no. of columns, papersize,  fontsize
+# Why can't this be calculated?
+latex_linewidths = {
+ 1: {'a4':{10: 345, 11: 360, 12: 390},
+        'a5':{10: 276, 11: 276, 12: 276},
+        'b5':{10: 345, 11: 356, 12: 356},
+        'letter':{10: 345, 11: 360, 12: 390},
+        'legal': {10: 345, 11: 360, 12: 390},
+        'executive':{10: 345, 11: 360, 12: 379}},
+ 2: {'a4':{10: 167, 11: 175, 12: 190},
+        'a5':{10: 133, 11: 133, 12: 133},
+        'b5':{10: 167, 11: 173, 12: 173},
+        'letter':{10: 167, 11: 175, 12: 190},
+        'legal':{10: 167, 11: 175, 12: 190},
+        'executive':{10: 167, 11: 175, 12: 184}}}
+
+
+options = [
+  ('', 'h', 'help', 'print help'),
+  ('EXT', 'f', 'format', 'set format.  EXT is one of texi and latex.'),
+  ('', 'v', 'version', 'print version information' ),
+  ('FILE', 'o', 'outname', 'prefix for filenames'),
+  ('DIM',  '', 'default-mudela-fontsize', 'default fontsize for music.  DIM is assumed to in points'),
+#  ('DIM', '', 'force-mudela-fontsize', 'force fontsize for all inline mudela. DIM is assumed to in points'),
+  ('', '', 'force-verbatim', 'make all mudela verbatim'),
+  ('', 'M', 'dependencies', 'write dependencies'),
+  ('DIR', 'I', 'include', 'include path'),
+  ('', '', 'init', 'mudela-book initfile')
+  ]
+
+format = 'latex'
+no_match = 'a\ba'
+
+# format specific strings, ie. regex-es for input, and % strings for output
+re_dict = {
+       'latex': {'input': '\\\\input{?([^}\t \n}]*)',
+                 'include': '\\\\include{([^}]+)}',
+                 'include-mudela':r"""\begin%s{mudela}
+%s
+\end{mudela}""",
+                 'header': r"""\\documentclass(\[.*?\])?""",
+                 'preamble-end': '\\\\begin{document}',
+                 'verbatim': r"""(?s)\\begin{verbatim}(.*?)\\end{verbatim}""",
+                 'verb': r"""\\verb(.)(.*?)\1""",
+                 'mudela-file': '\\\\mudelafile(\[[^\\]]+\])?{([^}]+)}',
+                 'mudela' : '\\\\mudela(\[.*?\])?{(.*?)}',
+                 'mudela-block': r"""(?s)\\begin(\[.*?\])?{mudela}(.*?)\\end{mudela}""",
+                 'interesting-cs': '\\\\(chapter|section|mudelagraphic|twocolumn|onecolumn)',
+                 'quote-verbatim': r"""\begin{verbatim}%s\end{verbatim}""",
+                 'def-post-re': r"""\\def\\postMudelaExample""",
+                 'def-pre-re': r"""\\def\\preMudelaExample""",           
+                 'default-post': r"""\def\postMudelaExample{}""",
+                 'default-pre': r"""\def\preMudelaExample{}""",
+                 'output-eps': '\\noindent\\parbox{\\mudelaepswidth{%s.eps}}{\includegraphics{%s.eps}}',
+                 'output-tex': '\\preMudelaExample \\input %s.tex \\postMudelaExample\n'
+                 },
+       'texi': {'input': '@include[ \n\t]+([^\t \n]*)',
+                'include': no_match,
+                'include-mudela': """@mudela[%s]
+%s
+@end mudela
+""",
+                'header': no_match,
+                'preamble-end': no_match,
+                'verbatim': r"""(?s)@example(.*?)@end example$""",
+                'verb': r"""@code{(.*?)}""",
+                'mudela-file': '@mudelafile(\[[^\\]]+\])?{([^}]+)}',
+                'mudela' : '@mudela(\[.*?\])?{(.*?)}',
+                'mudela-block': r"""(?s)@mudela(\[.*?\])?(.*?)@end mudela""",
+                'interesting-cs': r"""[\\@](node|mudelagraphic)""",
+                'quote-verbatim': r"""@example
+%s
+@end example""",
+                'output-all': r"""@tex
+\input %s.tex
+@end tex
+@html
+<img src=%s.png>
+@end html
+""",
+               }
+       }
+
+
+
+
+def get_re (name):
+       return  re_dict[format][name]
+
+
+def bounding_box_dimensions(fname):
        try:
        try:
-           nm = os.path.join (a, name)
-           f = open (nm)
-           return nm
+               fd = open(fname)
        except IOError:
        except IOError:
-           pass
-    return ''
+               error ("Error opening `%s'" % fname)
+       str = fd.read (-1)
+       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 find_file (name):
+       for a in include_path:
+               try:
+                       nm = os.path.join (a, name)
+                       f = open (nm)
+                       return nm
+               except IOError:
+                       pass
+       return ''
+
+def error (str):
+       sys.stderr.write (str + "\n  Exiting ... \n\n")
+       raise 'Exiting.'
+
+
+def compose_full_body (body, opts):
+       "Construct the text of an input file: add stuff to BODY using OPTS as options."
+       paper = 'a4'
+       music_size = default_music_fontsize
+       latex_size = default_text_fontsize
+
+       cols = 1
+       for o in opts:
+               m = re.search ('^(.*)paper$', o)
+               if m:
+                       paper = m.group (1)
+               
+
+               m = re.match ('([0-9]+)pt', o)
+               if m:
+                       music_size = string.atoi(m.group (1))
 
 
-class CompileStatus:
-    pass
-class SomethingIsSeriouslyBroken:
-    pass
+               m = re.match ('latexfontsize=([0-9]+)pt', o)
+               if m:
+                       latex_size = string.atoi (m.group (1))
+
+
+       if 'twocolumn' in opts:
+               cols = 2
+               
+       if 'fragment' or 'singleline' in opts:
+               l = -1.0;
+       else:
+               l = latex_linewidths[cols][paper][latex_size]
 
 
-def file_mtime (name):
-    return os.stat (name)[8] #mod time
+       if not 'nofly' in opts and not re.search ('\\\\score', body):
+               opts.append ('fly')
+
+
+       if 'fly' in opts:
+               body = r"""\score { 
+  \notes\relative c {
+    %s
+  }
+  \paper { }  
+}""" % body
+
+               
+       body = r"""
+%% Generated by mudela-book.py
+\include "paper%d.ly"
+\paper  { linewidth = %f \pt; } 
+""" % (music_size, l) + body
+
+       return body
 
 
-def need_recompile_b(infile, outfile):
-    indate = file_mtime (infile)
-    try:
-        outdate = file_mtime (outfile)
-        return indate > outdate
-    except os.error:
-        return 1
 
 #
 
 #
-# executes os.system(command) if infile is newer than
-# outfile or outfile don't exist
+# Petr, ik zou willen dat ik iets zinvoller deed,
+# maar wat ik kan ik doen, het verandert toch niets?
+#   --hwn 20/aug/99
 #
 #
-def compile (command, workingdir, infile, outfile):
-    "Test if infile is newer than outfile. If so, cd to workingdir"
-    "and execute command"
-    print "COMPILE!!"
-    indate = file_mtime (workingdir+infile)
-    try:
-        outdate = file_mtime (workingdir+outfile)
-        recompile = indate > outdate
-
-    except os.error:
-        recompile = 1
-
-    if recompile:
-        sys.stderr.write ('invoking `%s\'\n' % command)
-        if workingdir == '':
-            status = os.system (command)
-        else:
-            status = os.system ('cd %s; %s' %(workingdir, command))
-        if status:
-            raise CompileStatus
-
-class Properties:
-    #
-    # init
-    #
-    def __init__(self):
-        self.__linewidth = {
-            1: {'a4':{10: 345, 11: 360, 12: 390},
-                'a5':{10: 276, 11: 276, 12: 276},
-                'b5':{10: 345, 11: 356, 12: 356},
-                'letter':{10: 345, 11: 360, 12: 390},
-                'legal': {10: 345, 11: 360, 12: 390},
-                'executive':{10: 345, 11: 360, 12: 379}},
-            2: {'a4':{10: 167, 11: 175, 12: 190},
-                'a5':{10: 133, 11: 133, 12: 133},
-                'b5':{10: 167, 11: 173, 12: 173},
-                'letter':{10: 167, 11: 175, 12: 190},
-                'legal':{10: 167, 11: 175, 12: 190},
-                'executive':{10: 167, 11: 175, 12: 184}}}
-        # >0 --> force all mudela to this pt size
-        self.force_mudela_fontsize = 0
-        self.force_verbatim_b = 0
-        self.__data = {
-            'mudela-fontsize' : {'init': 16},
-            'papersize' : {'init': 'a4'},
-            'num-column' : {'init': 1},
-            'tex-fontsize' : {'init': 10}
-            }
-    def clear_for_new_file(self):
-        for var in self.__data.keys():
-            self.__data[var] = {'init': self.__data[var]['init']}
-    def clear_for_new_block(self):
-        for var in self.__data.keys():
-            if self.__data[var].has_key('block'):
-                del self.__data[var]['block']
-    def __get_variable(self, var):
-        if self.__data[var].has_key('block'):
-            return self.__data[var]['block']
-        elif self.__data[var].has_key('file'):
-            return self.__data[var]['file']
-        else:
-            return self.__data[var]['init']
-    def setPapersize(self, size, requester):
-        self.__data['papersize'][requester] = size
-    def getPapersize(self):
-        return self.__get_variable('papersize')
-    def setMudelaFontsize(self, size, requester):
-        self.__data['mudela-fontsize'][requester] = size
-    def getMudelaFontsize(self):
-        if self.force_mudela_fontsize:
-            return self.force_mudela_fontsize
-        return self.__get_variable('mudela-fontsize')
-    def setTexFontsize(self, size, requester):
-        self.__data['tex-fontsize'][requester] = size
-    def getTexFontsize(self):
-        return self.__get_variable('tex-fontsize')
-    def setNumColumn(self, num, requester):
-        self.__data['num-column'][requester] = num
-    def getNumColumn(self):
-        return self.__get_variable('num-column')
-    def getLineWidth(self):
-        return self.__linewidth[self.getNumColumn()][self.getPapersize()][self.getTexFontsize()]
-
-
-class Mudela_output:
-    """ Using only self.code_type to deside both value of linewith and
-    if we have to put code into \score{...} was silly. Now we use:
-    self.code_type:  show us what need to be added.
-                        None : init value
-                        'NOTES' : add \context Voice{ ... }
-                        'CONTEXT' : add \score{ ... }
-                        'COMPLETE' : jupp
-    self.single_line_b:   0 : linewidth=-1  1: linewith=textwidth
-    """
-    def __init__ (self, basename):
-        self.basename = basename
-        self.temp_filename = "%s/%s" %(outdir, 'mudela-temp.ly')
-        self.file = open (self.temp_filename, 'w')
-        self.__lines = []
-        # 'tex' or 'eps'
-        self.graphic_type = 'tex'
-        self.code_type = None
-        self.single_line_b = 1
-        self.optlist = []
-    def write (self, line):
-        # match only if there is nothing but whitespace before \begin.
-        # we should not have to do this RE for every line
-        if re.search('^\s*\\\\begin{mudela}', line):
-            r  = begin_mudela_opts_re.search(line)
-            if r:
-                o = r.group()[1:-1]
-                self.optlist =  re.compile('[\s,]*').split(o)
-            else:
-                self.optlist = []
-        else: # ugh this is NOT bulletproof...
-            if not self.code_type:
-                if re.search('^\s*%', line) or re.search('^\s*$', line):
-                    pass
-                elif re.search('^\s*\\\\context', line):
-                    self.code_type = 'CONTEXT'
-                    self.single_line_b = 0
-                elif re.search('^\s*\\\\score', line) or \
-                     re.search('^\s*\\\\paper', line) or \
-                     re.search('^\s*\\\\header', line) or \
-                     re.search('^\s*\\\\version', line) or \
-                     re.search('^\s*\\\\include', line) or \
-                     re.search('^\s*[A-Za-z]*\s*=', line):
-                    self.code_type = 'COMPLETE'
-                    self.single_line_b = 0
-                else:
-                    self.code_type = 'NOTES'
-                    self.single_line_b = 1
-            self.__lines.append(line)
-    def write_red_tape(self):
-        if 'eps' in self.optlist:
-            self.graphic_type = 'eps'
-            #self.single_line_b = 1
-        if 'fragment' in self.optlist:
-            self.code_type = 'NOTES'
-        if 'nonfragment' in self.optlist:
-            self.code_type = 'COMPLETE'
-        if 'multiline' in self.optlist:
-            self.single_line_b = 0
-        for pt in fontsize_pt2i.keys():
-            if pt in self.optlist:
-                Props.setMudelaFontsize(fontsize_pt2i[pt], 'block')
-        self.file.write ('\\include \"paper%d.ly\"\n' \
-                         % Props.getMudelaFontsize())
-                         
-        s = fontsize_i2a[Props.getMudelaFontsize()]
-        if 'singleline' in self.optlist:
-            self.single_line_b = 1
-        if self.single_line_b:
-            linewidth_str = 'linewidth = -1.\cm;'
-        else:
-            linewidth_str = 'linewidth = %i.\\pt;' % Props.getLineWidth()
-        self.file.write("\\paper {"
-                        + "\\paper_%s " % s
-                        + linewidth_str
-                        + "castingalgorithm = \Gourlay; \n}\n")
-                        #+ "castingalgorithm = \Wordwrap; indent = 2.\cm; \n}")
-        if self.code_type == 'CONTEXT':
-            self.file.write('\\score{\n\\notes\\relative c{')
-        if self.code_type == 'NOTES' :
-            self.file.write('\\score{\n\\notes\\relative c{\\context Voice{')
-    def close (self):
-        self.write_red_tape()
-        for l in self.__lines:
-            self.file.write(l)
-        if self.code_type == 'CONTEXT':
-            self.file.write('}}')
-        elif self.code_type == 'NOTES':
-            self.file.write('}}}')
-        self.file.close()
-
-        inf = outdir + self.basename + '.ly'
-        outf = outdir + self.basename + '.tex'
-        if not os.path.isfile(inf):
-            status = 1
-        else:
-            status = os.system ('diff -q %s %s' % (self.temp_filename, inf))
-        if status:
-            os.rename (self.temp_filename, inf)
-
-       recompile_b =  need_recompile_b(inf, outf)
-       if recompile_b:
-            out_files.append((self.graphic_type, inf))
-       return recompile_b
-
-    def insert_me_string(self):
-        "ugh the name of this function is wrong"
-        if self.graphic_type == 'tex':
-            return ['tex', self.basename]
-        elif self.graphic_type == 'eps':
-            return ['eps', self.basename]
-        else:
-            raise SomethingIsSeriouslyBroken
-
-class Tex_output:
-    def __init__ (self, name):
-        self.output_fn = '%s/%s' % (outdir, name)
-        self.__lines = []
-    def open_verbatim (self, line, level):
-        self.__lines.append('\\begin{verbatim}\n')
-        if level == 2:
-            s = re.sub('veryverbatim[\s,]*', '', line)
-            s = re.sub('intertext=\"([^\"]*)\"[\s,]*', '', s)
-            s = re.sub(',\s*\]', ']', s)
-            s = re.sub('\[\]', '', s)
-            self.__lines.append(s);
-    def close_verbatim (self):
-        self.__lines.append('\\end{verbatim}\n')
-    def write (self, s):
-        self.__lines.append(s)
-    def create_graphics(self):
-        s = ''
-        g_vec = []
-        for line in self.__lines:
-            if type(line)==type([]):
-                g_vec.append(line)
-        for g in g_vec:
-            if need_recompile_b(outdir+g[1]+'.ly', outdir+g[1]+'.tex'):
-                    s = s + ' ' + g[1]+'.ly'
-
-        lilyoptions = ''
-       for inc in __main__.include_path :
-               p = inc[:]
-               if p[0] <> os.sep and outdir:           # UGH-> win32 ?
-                       p = '..' + os.sep + p 
-               lilyoptions = lilyoptions + " -I \"%s\"" % p
+
+
+def read_tex_file (filename):
+       """Read the input file, substituting for \input, \include, \mudela{} and \mudelafile"""
+       str = ''
+       for fn in [filename, filename+'.tex', filename+'.doc']:
+               try:
+                       f = open(fn)
+                       str = f.read (-1)
+               except:
+                       pass
                
                
-        if s != '':
-           cmd = 'cd %s; lilypond %s %s' %(outdir, lilyoptions, s)
-           sys.stderr.write ('invoking command %s'  % cmd)
-            e = os.system(cmd)
-            if e:
-                sys.stderr.write("error: lilypond exited with value %i\n" % e)
-                sys.exit(e)
-        for g in g_vec:
-            if g[0] == 'eps':
-                compile('tex %s' % g[1]+'.tex', outdir, g[1]+'.tex', g[1]+'.dvi')
-                compile('dvips -E -o %s %s' %(g[1]+'.eps', g[1]+'.dvi'), outdir,
-                        g[1]+'.dvi', g[1]+'.eps')
-    def write_outfile(self):
-        file = open(self.output_fn+'.latex', 'w')
-        file.write('% Created by mudela-book\n')
-        last_line = None
-        for line in self.__lines:
-            if type(line)==type([]):
-                if last_line == '\n':
-                    file.write(r'\vspace{0.5cm}')
-                if line[0] == 'tex':                    
-                    file.write('\\preMudelaExample \\input %s \\postMudelaExample\n'\
-                               % (line[1]+'.tex'))
-                if line[0] == 'eps':
-                    ps_dim = ps_dimention(outdir+line[1]+'.eps')
-                    file.write('\\noindent\\parbox{%ipt}{\includegraphics{%s}}\n' \
-                               % (ps_dim[0], line[1]+'.eps'))
-            else:
-                file.write(line)
-            if type(last_line)==type([]):
-                if line=='\n':
-                    file.write(r'\vspace{0.5cm}')
-            last_line = line
-        file.close()
-
-# given parameter s="\mudela[some options]{CODE} some text and commands"
-# it returns a tuple:
-#    (CODE, integer)
-# where the last number is the index of the ending '}'
-def extract_command(s):
-    start_found_b = 0
-    count = 0
-    start = 0
-    for idx in range(len(s)):
-        if s[idx] == '{':
-            if not start_found_b:
-                start = idx
-                start_found_b = 1
-            count = count + 1
-        if s[idx] == '}':
-            count = count - 1
-        if (start_found_b == 1) and (count == 0):
-            break
-    return s[start+1:idx], idx
-
-class Tex_input:
-    def __init__ (self, filename):
-        for fn in [filename, filename+'.tex', filename+'.doc']:
-            try:
-                self.infile = open (fn)
-                self.filename = fn
-                return
-            except:
-                continue
-        raise IOError
-
-    def get_lines (self):
-        lines = self.infile.readlines ()
-        (retlines, retdeps) = ([],[self.filename])
-        for line in lines:
-            r_inp = input_re.search (line)
-            r_inc = include_re.search (line)
-
-            # Filename rules for \input :
-            # input: no .tex ext
-            # 1. will search for file with exact that name (tex-input.my will be found)
-            # 2. will search for file with .tex ext, (tex-input.my
-            #    will find tex-input.my.tex)
-            # input: with .tex ext
-            # 1. will find exact match
-            
-            # Filename rules for \include :
-            # 1. will only find files with name given to \include + .tex ext
-            if r_inp:
-                try:
-                    t = Tex_input (r_inp.groups()[0])
-                    ls = t.get_lines ()
-                    retlines = retlines + ls[0]
-                    retdeps = retdeps + ls[1]
-                except:
-                    sys.stderr.write("warning: can't find %s, let's hope latex will\n" % r_inp.groups()[0])
-                    retlines.append (line)
-            elif r_inc:
-                try:
-                    t = Tex_input (r_inc.groups()[0]+'.tex')
-                    ls =t.get_lines ()
-                    ls[0].insert(0, '\\newpage\n')
-                    ls[0].append('\\newpage\n')
-                    retlines = retlines + ls[0]
-                    retdeps = retdeps + ls[1]
-                except:
-                    sys.stderr.write("warning: can't find %s, let's hope latex will" % r_inc.groups()[0])
-                    retlines.append (line)
-            else:
-                # This code should be rewritten, it looks terrible
-                r_mud = defined_mudela_cmd_re.search(line)
-                if r_mud:
-                   # TODO document this
-                    ss = "\\\\verb(?P<xx>[^a-zA-Z])\s*\\\\%s\s*(?P=xx)" \
-                         % re.escape(r_mud.group()[1:])
-                    # just append the line if the command is inside \verb|..|
-                    if re.search(ss, line):
-                        retlines.append(line)
-                        continue
-                    while 1:
-                        opts = r_mud.groups()[2]
-                        cmd_start_idx = r_mud.span()[0]
-                        if cmd_start_idx > 0:
-                            retlines.append(line[:cmd_start_idx])
-                            
-                        cmd_data, rest_idx = extract_command(line[cmd_start_idx:])
-                        rest_idx = rest_idx + cmd_start_idx + 1
-                        if opts == None:
-                            opts = ''
-                        else:
-                            opts = ', '+opts
-                        
-                        v = string.split(defined_mudela_cmd[r_mud.groups()[0]], '\n')
-                        for l in v[1:-1]:
-                            l = string.replace(l, '\\fontoptions', opts)
-                            l = string.replace(l, '\\maininput', cmd_data)
-                            retlines.append(l)
-                        r_mud = defined_mudela_cmd_re.search(line[rest_idx:])
-                        if not r_mud:
-                            rs = line[rest_idx:]
-                            while rs[0] == " ":
-                                rs = rs[1:]
-                            if rs != "\n":
-                                retlines.append(line[rest_idx:])
-                            break;
-                        line = line[rest_idx:]
-                else:
-                    retlines.append (line)
-        return (retlines, retdeps)
-
-
-class Main_tex_input(Tex_input):
-    def __init__ (self, name, outname):
-
-        Tex_input.__init__ (self, name) # ugh
-        self.outname = outname
-        self.chapter = 0
-        self.section = 0
-        self.fine_count =0
-        self.mudtex = Tex_output (self.outname)
-        self.mudela = None
-        self.deps = []
-        self.verbatim = 0
-        # set to 'mudela' when we are processing mudela code,
-        # both verbatim and graphic-to-be
-        self.mode = 'latex'
-    def set_sections (self, l):
-        if section_re.search (l):
-            self.section = self.section + 1
-        if chapter_re.search (l):
-            self.section = 0
-            self.chapter = self.chapter + 1
-
-    def gen_basename (self):
-        return '%s-%d.%d.%d' % (self.outname, self.chapter,
-                                self.section, self.fine_count)
-    def extract_papersize_from_documentclass(self, line):
-        pre = extract_papersize_re.search(line)
-        if not pre:
-            return None
-        return pre.groups()[0]
-    def extract_fontsize_from_documentclass(self, line):
-        r = extract_fontsize_re.search(line)
-        if r:
-            return int(r.groups()[0])
-    def do_it(self):
-        preMudelaDef = postMudelaDef = 0
-        (lines, self.deps) = self.get_lines ()
-        #HACK
-        latex_verbatim = 0
-        for line in lines:
-            if documentclass_re.search (line):
-                p = self.extract_papersize_from_documentclass (line)
-                if p:
-                    Props.setPapersize(p, 'file')
-                f = self.extract_fontsize_from_documentclass (line)
-                if f:
-                    Props.setTexFontsize (f, 'file')
-            elif twocolumn_re.search (line):
-                Props.setNumColumn (2, 'file')
-            elif onecolumn_re.search (line):
-                Props.setNumColumn (1, 'file')
-            elif preMudelaExample_re.search (line):
-                preMudelaDef = 1
-            elif postMudelaExample_re.search (line):
-                postMudelaDef = 1
-            elif begin_verbatim_re.search (line):
-                latex_verbatim = 1
-            elif end_verbatim_re.search (line):
-                latex_verbatim = 0
-            elif begin_document_re.search (line):
-                if not preMudelaDef:
-                    self.mudtex.write ('\\def\\preMudelaExample{}\n')
-                if not postMudelaDef:
-                    self.mudtex.write ('\\def\\postMudelaExample{}\n')
-
-            elif mudela_file_re.search(line):
-               r = mudela_file_re.search(line)
-
-               self.mudela = Mudela_output(self.gen_basename())
-               fn = r.group (1)
-               full_path = find_file (fn)
+
+       if not str:
+               raise IOError
+
+       retdeps =  [filename]
+
+       def inclusion_func (match, surround):
+               insert = match.group (0)
+               try:
+                       (insert, d) = read_tex_file (match.group(1))
+                       deps = deps + d
+                       insert = surround + insert + surround
+               except:
+                       sys.stderr.write("warning: can't find %s, let's hope latex will\n" % m.group(1))
+
+               return (insert, deps)
+       
+       def include_func (match, d = retdeps):
+               (s,d) = inclusion_func (match, '\\newpage ', retdeps)
+               retdeps = retdeps + d
+               return s
+
+       str = re.sub (get_re ('input'), include_func, str)
+
+       def input_func (match, d = retdeps):
+               (s,d) = inclusion_func (match, '', retdeps)
+               retdeps = retdeps + d
+               return s
+
+       str = re.sub (get_re ('include'), input_func, str)
+       
+       return (str, retdeps)
+
+def scan_preamble (str):
+       options = []
+       m = re.search (get_re ('header'), str)
+
+       # should extract paper & fontsz.
+       if m and m.group (1):
+               options = options + re.split (',[\n \t]*', m.group(1)[1:-1])
+
+       def verbose_fontsize ( x):
+               if o.match('[0-9]+pt'):
+                       return 'latexfontsize=' + x
+               else:
+                       return x 
+                       
+       options = map (verbose_fontsize, options)
+
+       return options
+
+
+def completize_preamble (str):
+       m = re.search (get_re ('preamble-end'), str)
+       if not m:
+               return str
+       
+       preamble = str [:m.start (0)]
+       str = str [m.start(0):]
+       
+       if not re.search (get_re('def-post-re'), preamble):
+               preamble = preamble + get_re('default-post')
+       if not re.search (get_re ('def-pre-re'),  preamble):
+               preamble = preamble + get_re ('default-pre')
+
+       if  re.search ('\\\\includegraphics', str) and not re.search ('usepackage{graphics}',str):
+               preamble = preamble + '\\usepackage{graphics}\n'
+
+       return preamble + str
+       
+def find_mudela_sections (str):
+       """Find mudela blocks, while watching for verbatim. Returns
+       (STR,MUDS) with \mudelagraphic substituted for the blocks in STR,
+       and the blocks themselves MUDS"""
+       
+       mudelas = []
+       verbblocks = []
+       noverbblocks = []
+
+       while str:
+               m = re.search (get_re ('verbatim'), str)
+               m2 = re.search (get_re ("verb"), str)
+
+               if  m == None and m2 == None:
+                       noverbblocks.append (str)
+                       str = ''
+                       break
+
+               if m == None:
+                       m = m2
+
+               if m2 and m2.start (0) < m.start (0):
+                       m = m2
+                       
+               noverbblocks.append (str[:m.start (0)])
+               verbblocks.append (m.group (0))
+               str = str [m.end(0):]
+
+       def mudela_short (match):
+               "Find \mudela{}, and substitute appropriate \begin / \end blocks."
+               opts = match.group (1)
+               if opts:
+                       opts = ',' + opts[1:-1]
+               else:
+                       opts = ''
+               return r"""\begin[eps,fragment%s]{mudela}
+  \context Staff <
+    \context Voice{
+      %s
+    }
+  >
+\end{mudela}""" % (opts, match.group (2))
+
+       def mudela_file (match):
+               "Find \mudelafile, and substitute appropriate \begin / \end blocks."
+               d = [] #, d = retdeps
+               full_path = find_file (match.group (2))
                if not full_path:
                if not full_path:
-                   sys.stderr.write("error: can't find file '%s'\n" % fn)
-                   sys.exit (1)
-
-               f = open (full_path, 'r')
-               lines =f.readlines ()
-               self.mudela.write ('%% This is a copy of file %s\n' % full_path)
-               for x in lines:
-                   self.mudela.write (x)
-               r = file_ext_re.search(fn)
-                if r:
-                    if r.group(1) == 'fly':
-                        self.mudela.optlist.append('multiline')
-               stat =self.mudela.close ()
-               if stat:
-                       sys.stdout.write("(File %s needs recompiling)\n" % full_path)
-                self.mudtex.write (self.mudela.insert_me_string())
-               self.deps.append (full_path)
-               del self.mudela
-                self.mudela = None
-                self.fine_count = self.fine_count + 1
-               continue
-            elif begin_mudela_re.search (line) and not latex_verbatim:
-                Props.clear_for_new_block()
-                if __debug__:
-                    if self.mode == 'mudela':
-                        raise AssertionError
-                self.mode = 'mudela'
-                r  = begin_mudela_opts_re.search (line)
-                if r:
-                    o = r.group()[1:][:-1]
-                    optlist =  re.compile('[ ,]*').split(o)
-                    m = intertext_re.search(r.group())
-                    if m:
-                        self.intertext = m.groups()[0]
-                    else:
-                        self.intertext = None
-                else:
-                    optlist = []
-                if ('veryverbatim' in optlist):
-                    self.verbatim = 2
-                elif ('verbatim' in optlist) or (Props.force_verbatim_b):
-                    self.verbatim = 1
-                else:
-                    self.verbatim = 0
-                if self.verbatim:
-                    self.mudtex.open_verbatim (line, self.verbatim)
-                self.mudela = Mudela_output (self.gen_basename ())
-                self.mudela.write (line)
-                continue
-            elif end_mudela_re.search (line) and not latex_verbatim:
-                if __debug__:
-                    if self.mode != 'mudela':
-                        raise AssertionError
-
-                if self.verbatim:
-                    if self.verbatim == 2:
-                        self.mudtex.write (line)
-                    self.mudtex.close_verbatim ()
-                self.mudela.close ()
-                if self.verbatim and self.intertext:
-                    self.mudtex.write(self.intertext)
-                self.mudtex.write (self.mudela.insert_me_string())
-                del self.mudela
-                self.mudela = None
-                self.fine_count = self.fine_count + 1
-                self.mode = 'latex'
-                continue
-
-
-            if self.mode == 'mudela':
-                self.mudela.write (line)
-                if self.verbatim:
-                    self.mudtex.write (line)
-            else:
-                self.mudtex.write (line)
-                self.set_sections(line)
-        self.mudtex.create_graphics()
-        self.mudtex.write_outfile()
-        del self.mudtex
+                       error("error: can't find file `%s'\n" % match.group(2))
+
+               d.append (full_path)
+               f = open (full_path)
+               str = f.read (-1)
+               opts = match.group (1)
+               if opts:
+                       opts = re.split (',[ \n\t]*', opts[1:-1])
+               else:
+                       opts = []
+
+               if re.search ('.fly$', full_path):
+                       opts.append ('fly')
+               elif re.search ('.sly$', full_path):
+                       opts = opts + [ 'fly','fragment']
+               elif re.search ('.ly$', full_path):
+                       opts .append ('nofly')
+                       
+               str_opts = string.join (opts, ',')
+               if str_opts: str_opts = '[' + str_opts + ']'
+
+
+               str = "%% copied from %s" % full_path + str 
+               return get_re ('include-mudela') % (str_opts, str)
+
+
+       def find_one_mudela_block (match,muds =mudelas):
+               "extract body and options from a mudela block, and append into MUDELAS"
+               opts = match.group (1)
+               if opts:
+                       opts = opts[1:-1]
+               else:
+                       opts = ''
+                       
+               body = match.group (2)
+               optlist = re.split (', *', opts)
+               muds.append ((body, optlist))
+
+               return '\\mudelagraphic\n'#  UGH.
+
+       doneblocks = []
+       for b in noverbblocks:
+               b = re.sub (get_re('mudela-file'),  mudela_file, b)
+               b = re.sub (get_re('mudela'), mudela_short, b)
+               b = re.sub (get_re ("mudela-block"),  find_one_mudela_block, b)
+               doneblocks.append (b)
+
+       allblocks = []
+       verbblocks.append ('')
+       while doneblocks:
+               allblocks = allblocks + doneblocks[0:1] +  verbblocks[0:1]
+               verbblocks = verbblocks[1:]
+               doneblocks =doneblocks[1:]
+
+       str = string.join (allblocks,'')
+
+       return (str, mudelas)
+
+
+def eps_file_cs (base):
+       if format == 'latex':
+               return
+       els
+
+def tex_file_cs (base):
+       return 
+
+
+
+
+def make_files (str, mudelas, filename):       
+       (chapter, section, count) = (0,0,0)
+       total = 0
+       done = ''
+
+       # number them.
+       numbering = []
+       current_opts = []
+       while str:
+               m = re.search (get_re ('interesting-cs'), str)
+               if not m:
+                       done = done + str
+                       str = ''
+                       break
+               
+               done = done + str[:m.end (0)]
+               str = str[m.end(0):]
+               g = m.group (1)
+
+               if g == 'twocolumn':
+                       current_opts.append ('twocolumn')
+               elif g  == 'onecolumn':
+                       try:
+                               current_opts.remove ('twocolumn')
+                       except IndexError:
+                               pass
+               if g == 'mudelagraphic':
+                       numbering.append ((chapter, section, count, current_opts[:]))
+                       count = count + 1
+               elif g == 'chapter':
+                       (chapter, section, count)  = (chapter + 1, 0, 0)
+               elif g == 'section' or g == 'node':
+                       (section, count)  = (section + 1, 0)
+                       
+
+       todo = []
+       str = done
+       
+
+       done = ''
+       while str:
+               m = re.search ('\\\\mudelagraphic', str)
+               if not m:
+                       done = done + str;
+                       str = ''
+                       break
+
+               done = done + str[:m.start(0)]
+               str = str[m.end(0):]
                
                
+               (c1,c2,c3, file_opts) = numbering[0]
+               (body, opts) = mudelas[0]
+               numbering = numbering[1:]
+               mudelas = mudelas[1:]
+               
+               opts = opts + file_opts
+
+               base = '%s-%d.%d.%d'  % (filename, c1, c2,c3)
+               if 'verbatim' in opts:
+                       done = done + get_re ('quote-verbatim') % body
+                       
+
+               body = compose_full_body (body, opts)
+               updated = update_file (body, base + '.ly')
+               def is_updated (extension, t = todo):
+                       for x in t:
+                               if t[0] == extension:
+                                       return 1
+                       return 0
+
+               if not os.path.isfile (base + '.tex') or updated:
+                       todo.append (('tex', base, opts))
+                       updated = 1
+
+               for o in opts:
+                       m = re.search ('intertext="(.*?)"', o)
+                       if m:
+                               done = done  + m.group (1)
+
+               if format == 'texi':
+                       opts.append ('png')
+                       
+               if 'png' in opts:
+                       opts.append ('eps')
+
+               if 'eps' in opts and (is_updated ('tex') or
+                                     not os.path.isfile (base + '.eps')):
+                       todo.append (('eps', base, opts))
+
+               if 'png' in opts and (is_updated ('eps') or
+                                     not os.path.isfile (base + '.png')):
+                       todo.append (('png', base, opts))
+                       
+               if format == 'latex':
+                       if 'eps' in opts :
+                               done = done + get_re ('output-eps') %  (base, base )
+                       else:
+                               done = done + get_re ('output-tex') % base
+               elif format == 'texi':
+                       done = done + get_re ('output-all') % (base, base) 
+
+
+       compile_all_files (todo)
+
+       def find_eps_dims (match):
+               "Fill in dimensions of EPS files."
+               fn =match.group (1)
+               dims = bounding_box_dimensions (fn)
+               
+               return '%ipt' % dims[0]
+
+       done = re.sub (r"""\\mudelaepswidth{(.*?)}""", find_eps_dims, done)
+
+       return done 
+
+def system (cmd):
+       sys.stderr.write ("invoking `%s'\n" % cmd)
+       st = os.system (cmd)
+       if st:
+               sys.stderr.write ('Error command exited with value %d\n' % st)
+       return st
+
+def compile_all_files ( list):
+       eps = []
+       tex = []
+       gif = []
+       for l in list:
+               if l[0] == 'eps':
+                       eps.append (l[1])
+               elif l[0] == 'tex':
+                       tex.append (l[1] + '.ly')
+               elif l[0] == 'png':
+                       gif.append (l[1])
+
+       if tex:
+               lilyopts = map (lambda x:  '-I ' + x, include_path)
+               texfiles = string.join (tex, ' ')
+               lilyopts = string.join (lilyopts, ' ' )
+               system ('lilypond %s %s' % (lilyopts, texfiles))
+
+
+       for e in eps:
+               cmd = r"""tex %s; dvips -E -o %s %s""" % \
+                     (e, e + '.eps', e)
+               system (cmd)
+
+       for g in gif:
+               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)
+
+       
+def update_file (body, name):
+       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):
+       "Transform 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():
 
 def help():
-    sys.stdout.write("""Usage: mudela-book [options] FILE\n
+       sys.stdout.write("""Usage: mudela-book [options] FILE\n
 Generate hybrid LaTeX input from Latex + mudela
 Generate hybrid LaTeX input from Latex + mudela
-Options:\n
-  -h, --help                     print this help
-  -d, --outdir=DIR               directory to put generated files
-  -o, --outname=FILE             prefix for filenames
-  --default-mudela-fontsize=??pt default fontsize for music
-  --force-mudela-fontsize=??pt   force fontsize for all inline mudela
-  --force-verbatim               make all mudela verbatim\n
-  --dependencies                 write dependencies
-  --include                      include path
-  --init                         mudela-book initfile
-  """
-                    )
-    sys.exit (0)
-
-
-def write_deps (fn, out,  deps):
-       out_fn = os.path.join (outdir, fn)
-       
-       sys.stdout.write('writing `%s\'\n' % out_fn)
+Options:
+""")
+       sys.stdout.write (options_help_str (options))
+       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 <tomcato@xoommail.com> and
+Han-Wen Nienhuys <hanwen@cs.uu.nl>
+""")
+
+       sys.exit (0)
+
+
+def write_deps (fn, target,  deps):
+       sys.stdout.write('writing `%s\'\n' % fn)
+
+       f = open (fn, 'w')
        
        
-       f = open (out_fn, 'w')
-       target = re.sub (os.sep + os.sep, os.sep, os.path.join (outdir, out + '.latex'))
-       f.write ('%s: %s\n'% (target,
-                             reduce (lambda x,y: x + ' '+ y, deps)))
+       target = target + '.latex'
+       f.write ('%s: %s\n'% (target, string.join (deps, ' ')))
        f.close ()
 
        f.close ()
 
+               
 def identify():
 def identify():
-    sys.stderr.write ('This is %s version %s\n' % ('mudela-book', program_version))
+       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 main():
 
 def main():
-    global outdir, initfile, defined_mudela_cmd, defined_mudela_cmd_re
-    outname = ''
-    try:
-        (options, files) = getopt.getopt(
-            sys.argv[1:], 'hd:o:I:', ['outdir=', 'outname=',
-                                    'default-mudela-fontsize=',
-                                    'force-mudela-fontsize=',
-                                    'help', 'dependencies', 'include=',
-                                    'force-verbatim', 'init='])
-    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 == '--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 == '--outdir' or o == '-d':
-            outdir = a
-        elif o == '--help' or o == '-h':
-            help ()
-       elif o == '--dependencies':
-            do_deps = 1
-        elif o == '--default-mudela-fontsize':
-            if not fontsize_pt2i.has_key(a):
-                sys.stderr.write("Error: invalid fontsize: %s" % a)
-                sys.stderr.write("  accepted fontsizes are: 11pt, 13pt, 16pt, 20pt, 26pt")
-                sys.exit()
-            Props.setMudelaFontsize(fontsize_pt2i[a], 'init')
-       elif o == '--force-mudela-fontsize':
-            if not fontsize_pt2i.has_key(a):
-                sys.stderr.write("Error: invalid fontsize: %s" % a)
-                sys.stderr.write("  accepted fontsizes are: 11pt, 13pt, 16pt, 20pt, 26pt")
-                sys.exit()
-            Props.force_mudela_fontsize = fontsize_pt2i[a]
-        elif o == '--force-verbatim':
-            Props.force_verbatim_b = 1
-        elif o == '--init':
-            initfile =  a
-    if outdir[-1:] != os.sep:
-        outdir = outdir + os.sep
-
-    # r""" ... """ means: leave escape seqs alone.
-    defined_mudela_cmd = {'mudela': r"""
-\begin{mudela}[eps, singleline \fontoptions]
-  \context Staff <
-    \context Voice{
-      \maininput
-    }
-  >
-\end{mudela}
-"""}
-    if initfile != '':
-        f = open(initfile)
-        s = f.read()
-        f.close()
-        d = eval(s)
-        for i in d.keys():
-            defined_mudela_cmd[i] = d[i]
-        del d
-
-    c = string.join (defined_mudela_cmd.keys(), '|')
-
-    defined_mudela_cmd_re = re.compile("\\\\(%s)(\[(\d*pt)\])*{([^}]*)}" %c)
-
-    if not os.path.isdir(outdir):
-        os.system('mkdir %s' % outdir)
-
-    for input_filename in files:
-        Props.clear_for_new_file()
-        if outname:
-            my_outname = outname
-        else:
-            my_outname = os.path.basename(os.path.splitext(input_filename)[0])
-        my_depname = my_outname + '.dep'        
-        inp = Main_tex_input (input_filename, my_outname)
-        inp.do_it ()
-        if do_deps:
-            write_deps (my_depname, my_outname, inp.deps)
-
-identify()
-Props = Properties()
+       global outdir, initfile, defined_mudela_cmd, defined_mudela_cmd_re
+       outname = ''
+       try:
+               (sh, long) = getopt_args (__main__.options)
+               (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':
+                       print_version ()
+                       sys.exit  (0)
+
+               elif o == '--format' or o == '-o':
+                       __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 == '--outdir' or o == '-d':
+                       outdir = a
+               elif o == '--help' or o == '-h':
+                       help ()
+               elif o == '--dependencies':
+                       do_deps = 1
+               elif o == '--default-mudela-fontsize':
+                       default_music_fontsize = string.atoi (a)
+               elif o == '--init':
+                       initfile =  a
+       
+       identify()
+
+       for input_filename in files:
+               file_settings = {}
+               if outname:
+                       my_outname = outname
+               else:
+                       my_outname = os.path.basename(os.path.splitext(input_filename)[0])
+               my_depname = my_outname + '.dep'                
+
+               (input, deps) = read_tex_file (input_filename)
+               (input, muds) = find_mudela_sections (input)
+               output = make_files  (input, muds, my_outname)
+               output = completize_preamble (output)
+
+               foutn = my_outname + '.' + format
+               sys.stderr.write ("Writing `%s'\n" % foutn)
+               fout = open (foutn, 'w')
+
+               fout.write (output)
+               fout.close ()
+
+               if do_deps:
+                       write_deps (my_depname, my_outname, deps)
+
 main()
 main()
diff --git a/stepmake/bin/make-version.py b/stepmake/bin/make-version.py
new file mode 100644 (file)
index 0000000..4912f0a
--- /dev/null
@@ -0,0 +1,27 @@
+
+import re
+import sys
+
+
+vf = 'VERSION'
+if sys.argv[1:]:
+       vf = sys.argv[1]
+
+f = open (vf)
+ls = f.readlines ()
+mypatch = 0
+defs = []
+for l in ls:
+       l = re.sub ('#.*','', l)
+       m  = re.search ('([^ =]*)[\t ]*=[ \t]*([^ \t]*)[ \t]*\n', l)
+       if m:
+               defs.append ((m.group(1), m.group(2)))
+
+
+sys.stdout.write ('/* automatically generated */')
+for d in defs:
+       sys.stdout.write ('#define %s \"%s\"\n' % d)
+
+if ('MY_PATCH_LEVEL', '') in defs:
+       sys.stdout.write ('#define NO_MY_PATCHLEVEL')
+       
diff --git a/stepmake/bin/make-version.sh b/stepmake/bin/make-version.sh
deleted file mode 100755 (executable)
index 2324ac1..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-#shift;
-if test "x$1" = x;
-then
-    versionfile="VERSION"
-else
-    versionfile=$1;
-fi
-
-cat $versionfile| sed 's/#.*$//g'|sed 's/\([^ =]*\)[\t ]*=[ \t]*\([^ \t]*\)[ \t]*$/#define \1 \"\2\"/g' 
-echo
-    
index c66a7aa4bc3832581699bbcbd64f05414a373787..4a2a70dbc4cabee70f87e64401410bc9882f10e3 100644 (file)
@@ -131,7 +131,7 @@ $(outdir)/VERSION: $(depth)/VERSION
        cp $< $@
 
 $(outdir)/version.hh: $(outdir)/VERSION
        cp $< $@
 
 $(outdir)/version.hh: $(outdir)/VERSION
-       sh $(step-bindir)/make-version.sh $< > $@
+       $(PYTHON) $(step-bindir)/make-version.py $< > $@
 
 # should this be in Rules?
 configure: configure.in aclocal.m4
 
 # should this be in Rules?
 configure: configure.in aclocal.m4
index 9b6662260358eaa9022acf16a2194890ab77938d..6b5e125743c26a5e46ef8d8d3a7703ab42273f50 100644 (file)
@@ -23,7 +23,7 @@ ifneq ($(strip $(ALL_PO_SOURCES)),)
        @echo $(ALL_PO_SOURCES)
        xgettext --c++ --default-domain=$(package) --join \
         --output-dir=$(po-dir)/$(outdir) --add-comments \
        @echo $(ALL_PO_SOURCES)
        xgettext --c++ --default-domain=$(package) --join \
         --output-dir=$(po-dir)/$(outdir) --add-comments \
-        --keyword=_ --keyword=_f $(ALL_PO_SOURCES)
+        --keyword=_ --keyword=_f --keyword=_i $(ALL_PO_SOURCES)
 endif
 endif
 
 endif
 endif