Han-Wen Nienhuys <[EMAIL PROTECTED]> writes:

> [EMAIL PROTECTED] writes:
>> There is one thing I have not done yet: adding a rule in convert-ly.
>
> I'm not sure that it will be feasible to add convert-ly rules, since
> you have to deal with correctly nesting { }  

I've added a rule that should catch some basic cases.

> I'm not sure if it's feasible, but one thing that I did have in mind
> is to convert
>
>      { c b \bold { d e } f g }
>
> to
>
>      { c b \bold  d \bold e f g }
>
> ie. flattening a (markup_head_1_list + markup_list) that is inside a
> markup_list. I think that you will need some more rules, but can you
> try if you can make it work? Then, we won't have to introduce
> additional artificial line-markup commands.

Ok, I think I got it. This is not very straightforward.

  348 full_markup: MARKUP_IDENTIFIER

  349 @21: /* vide */

  350 full_markup: MARKUP @21 markup_top

  351 markup_top: markup_composed_list
  352           | markup_head_1_list simple_markup
  353           | simple_markup
  354           | markup_braced_list

  355 markup_composed_list: markup_head_1_list markup_braced_list

  356 markup_braced_list: '{' markup_braced_list_body '}'

  357 markup_braced_list_body: /* vide */
  358                        | markup_braced_list_body markup
  359                        | markup_braced_list_body markup_composed_list

  360 markup_head_1_item: MARKUP_HEAD_MARKUP0
  361                   | MARKUP_HEAD_SCM0_MARKUP1 embedded_scm
  362                   | MARKUP_HEAD_SCM0_SCM1_MARKUP2 embedded_scm 
embedded_scm

  363 markup_head_1_list: markup_head_1_item
  364                   | markup_head_1_list markup_head_1_item

  365 simple_markup: STRING
  366              | MARKUP_IDENTIFIER
  367              | STRING_IDENTIFIER

  368 @22: /* vide */

  369 simple_markup: SCORE @22 '{' score_body '}'
  370              | MARKUP_HEAD_SCM0 embedded_scm
  371              | MARKUP_HEAD_SCM0_SCM1_SCM2 embedded_scm embedded_scm 
embedded_scm
  372              | MARKUP_HEAD_SCM0_SCM1 embedded_scm embedded_scm
  373              | MARKUP_HEAD_EMPTY
  374              | MARKUP_HEAD_LIST0 markup_braced_list
  375              | MARKUP_HEAD_MARKUP0_MARKUP1 markup markup

  376 markup: markup_head_1_list simple_markup
  377       | simple_markup
  378       | markup_braced_list


make web runs OK, except in input/regression where it fails on
ancient-fonts.ly -- I guess this is not related.

Should I commit?

oh, maybe I should add a note in NEWS.texi, as this is a syntax
change.

nicolas

Index: Documentation/user/changing-defaults.itely
===================================================================
RCS file: /cvsroot/lilypond/lilypond/Documentation/user/changing-defaults.itely,v
retrieving revision 1.93
diff -u -r1.93 changing-defaults.itely
--- Documentation/user/changing-defaults.itely	26 Nov 2004 13:33:30 -0000	1.93
+++ Documentation/user/changing-defaults.itely	28 Nov 2004 17:02:10 -0000
@@ -1461,14 +1461,14 @@
 In markup mode you can compose expressions, similar to mathematical
 expressions, XML documents, and music expressions.  The braces group
 notes into horizontal lines.  Other types of lists also exist: you can
-stack expressions grouped with @code{<} and @code{>} vertically with
+stack expressions grouped vertically with
 the command @code{\column}.  Similarly, @code{\center-align} aligns
 texts by their center lines:
 
 @lilypond[quote,verbatim,fragment,relative=1]
-c1^\markup { \column < a bbbb c > }
-c1^\markup { \center-align < a bbbb c > }
-c1^\markup { \line < a b c > }
+c1^\markup { \column { a bbbb c } }
+c1^\markup { \center-align { a bbbb c } }
+c1^\markup { \line { a b c } }
 @end lilypond
 
 
Index: Documentation/user/music-glossary.tely
===================================================================
RCS file: /cvsroot/lilypond/lilypond/Documentation/user/music-glossary.tely,v
retrieving revision 1.93
diff -u -r1.93 music-glossary.tely
--- Documentation/user/music-glossary.tely	13 Nov 2004 20:46:35 -0000	1.93
+++ Documentation/user/music-glossary.tely	28 Nov 2004 17:02:11 -0000
@@ -1145,7 +1145,7 @@
   d1 |
   g,4^\segno a b c |
   b a g2_\markup{
-    \line < "d.s. " \tiny \raise #1 \musicglyph #"scripts-segno" > }
+    \line { "d.s. " \tiny \raise #1 \musicglyph #"scripts-segno" } }
   \bar "|."
 }
 @end lilypond
Index: Documentation/user/notation.itely
===================================================================
RCS file: /cvsroot/lilypond/lilypond/Documentation/user/notation.itely,v
retrieving revision 1.157
diff -u -r1.157 notation.itely
--- Documentation/user/notation.itely	23 Nov 2004 00:16:16 -0000	1.157
+++ Documentation/user/notation.itely	28 Nov 2004 17:02:14 -0000
@@ -5153,8 +5153,8 @@
 
 @lilypond[quote,fragment,verbatim,raggedright]
 \set Staff.instrument = \markup {
-  \column < "Clarinetti"
-            { "in B" \smaller \flat } > }
+  \column { "Clarinetti"
+            { "in B" \smaller \flat } } }
 c''1
 @end lilypond
 
@@ -5922,24 +5922,24 @@
 {
   \fatText
   s^\markup {
-    \column <
+    \column {
       "vaticana"
       { " " \musicglyph #"accidentals-vaticana-1"
       " " \musicglyph #"accidentals-vaticana0" }
-    >
-    \column <
+    }
+    \column {
       "medicaea"
       { " " \musicglyph #"accidentals-medicaea-1" }
-    >
-    \column <
+    }
+    \column {
       "hufnagel"
       { " " \musicglyph #"accidentals-hufnagel-1" }
-    >
-    \column <
+    }
+    \column {
       "mensural"
       { " " \musicglyph #"accidentals-mensural-1"
       " " \musicglyph #"accidentals-mensural1" }
-    >
+    }
   }
 }
 \layout {
@@ -6436,22 +6436,22 @@
 
 @lilypond[quote,raggedright,fragment]
 \new Lyrics \lyricmode {
-  \markup { \column <
+  \markup { \column {
     \typewriter "vaticana"
     { " " \musicglyph #"custodes-vaticana-u0" }
-  > }
-  \markup { \column <
+  } }
+  \markup { \column {
     \typewriter "medicaea"
     { " " \musicglyph #"custodes-medicaea-u0" }
-  >}
-  \markup { \column <
+  }}
+  \markup { \column {
     \typewriter "hufnagel"
     { " " \musicglyph #"custodes-hufnagel-u0" }
-  >}
-  \markup { \column <
+  }}
+  \markup { \column {
     \typewriter "mensural"
     { " " \musicglyph #"custodes-mensural-u0" }
-  >}
+  }}
 }
 @end lilypond
 
@@ -7734,9 +7734,9 @@
 % create 2/4 + 5/8
 tsMarkup =\markup {
   \number {
-    \column < "2" "4" >
+    \column { "2" "4" }
     \musicglyph #"scripts-stopped"
-    \bracket \column < "5" "8" >
+    \bracket \column { "5" "8" }
   }
 }
 
Index: input/wilhelmus.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/wilhelmus.ly,v
retrieving revision 1.17
diff -u -r1.17 wilhelmus.ly
--- input/wilhelmus.ly	30 Oct 2004 20:55:15 -0000	1.17
+++ input/wilhelmus.ly	28 Nov 2004 17:02:15 -0000
@@ -1,4 +1,4 @@
-\version "2.4.0"
+\version "2.5.1"
 
 \header {
   texidoc = "Wilhelmus van Nassouwe"
@@ -142,7 +142,7 @@
 
 oneHalfNoteTime = \markup {
   \override #'(baseline-skip . 0)
-  \column < { \number "1" } { \smaller \smaller \note #"2" #-0.5 } >
+  \column { { \number "1" } { \smaller \smaller \note #"2" #-0.5 } }
 }
 
 \layout {
Index: input/mutopia/J.S.Bach/wtk1-fugue2.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/mutopia/J.S.Bach/wtk1-fugue2.ly,v
retrieving revision 1.31
diff -u -r1.31 wtk1-fugue2.ly
--- input/mutopia/J.S.Bach/wtk1-fugue2.ly	30 Oct 2004 20:55:15 -0000	1.31
+++ input/mutopia/J.S.Bach/wtk1-fugue2.ly	28 Nov 2004 17:02:15 -0000
@@ -17,17 +17,17 @@
     footer = "Mutopia-2002/08/19-6"
 
     tagline = \markup { \smaller
-			\column <
-			    \fill-line < \footer "" >
-			    \fill-line < { "This music is part of the Mutopia project, "
+			\column {
+			    \fill-line { \footer "" }
+			    \fill-line { { "This music is part of the Mutopia project, "
 					   \typewriter { "http://sca.uwaterloo.ca/Mutopia/"; }
-					   "." } >
-			    \fill-line < { "It has been typeset and placed in the public "
-					   "domain by "  \maintainer  "." } >
-			    \fill-line < { "Unrestricted modification and redistribution "
+					   "." } }
+			    \fill-line { { "It has been typeset and placed in the public "
+					   "domain by "  \maintainer  "." } }
+			    \fill-line { { "Unrestricted modification and redistribution "
 					   "is permitted and encouraged---copy this music "
-					   "and share it!" } >
-			>
+					   "and share it!" } }
+			}
 		    }
     lastupdated = "2002/August/19"
 }
@@ -44,7 +44,7 @@
 %}
 
 
-\version "2.4.0"
+\version "2.5.1"
 
 
 
Index: input/mutopia/R.Schumann/romanze-op28-2.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/mutopia/R.Schumann/romanze-op28-2.ly,v
retrieving revision 1.52
diff -u -r1.52 romanze-op28-2.ly
--- input/mutopia/R.Schumann/romanze-op28-2.ly	30 Oct 2004 20:55:15 -0000	1.52
+++ input/mutopia/R.Schumann/romanze-op28-2.ly	28 Nov 2004 17:02:16 -0000
@@ -5,7 +5,7 @@
 
 #(set-global-staff-size 16)
 
-\version "2.4.0"
+\version "2.5.1"
 
 \header {
   title = "Romanzen"
@@ -259,7 +259,7 @@
     \override Staff.InstrumentName #'font-magnification = #1
     \override Staff.InstrumentName #'extra-offset = #'(0 . 6)
    % \set Staff.instrument = "\\begin{turn}{-90}{Rechte Hand}\\end{turn}"
-    \set Staff.instrument = \markup { \column < Rechte Hand >  \hspace #2 }
+    \set Staff.instrument = \markup { \column { Rechte Hand }  \hspace #2 }
       \clef F <<\global \context Voice = "midv" \rightb>>
     }
       \context Staff = "down" {
Index: input/mutopia/W.A.Mozart/mozart-hrn-3.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/mutopia/W.A.Mozart/mozart-hrn-3.ly,v
retrieving revision 1.31
diff -u -r1.31 mozart-hrn-3.ly
--- input/mutopia/W.A.Mozart/mozart-hrn-3.ly	30 Oct 2004 20:55:15 -0000	1.31
+++ input/mutopia/W.A.Mozart/mozart-hrn-3.ly	28 Nov 2004 17:02:16 -0000
@@ -20,17 +20,17 @@
   footer = "Mutopia-2002/05/21-25"
 
   tagline = \markup { \smaller
-      \column <
-	   \fill-line < \footer "" >
-	   \fill-line < { "This music is part of the Mutopia project,"
+      \column {
+	   \fill-line { \footer "" }
+	   \fill-line { { "This music is part of the Mutopia project,"
 			  \typewriter { "http://sca.uwaterloo.ca/Mutopia/"; }
-			 } >
-	   \fill-line < #(ly:export (string-append "It has been typeset and placed in the public "
-			  "domain by "  maintainer  "."))  >
-	   \fill-line < #(ly:export (string-append "Unrestricted modification and redistribution"
+			 } }
+	   \fill-line { #(ly:export (string-append "It has been typeset and placed in the public "
+			  "domain by "  maintainer  "."))  }
+	   \fill-line { #(ly:export (string-append "Unrestricted modification and redistribution"
 			  " is permitted and encouraged---copy this music"
-			  " and share it!")) >
-	   >
+			  " and share it!")) }
+	   }
        }
 }
 %{
@@ -41,7 +41,7 @@
 
 %}
 
-\version "2.4.0"
+\version "2.5.1"
 
 \include "mozart-hrn3-defs.ily"
 \include "mozart-hrn3-allegro.ily"
Index: input/regression/instrument-name-markup.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/regression/instrument-name-markup.ly,v
retrieving revision 1.25
diff -u -r1.25 instrument-name-markup.ly
--- input/regression/instrument-name-markup.ly	30 Oct 2004 20:55:15 -0000	1.25
+++ input/regression/instrument-name-markup.ly	28 Nov 2004 17:02:16 -0000
@@ -7,14 +7,14 @@
 }
 
 
-\version "2.4.0"
+\version "2.5.1"
 
 
 textFlat = \markup {\smaller \flat}
 
 \score {
    \new Staff {
-    \set Staff.instrument = \markup { \column < "Clarinetti" { "in B" \textFlat } > }
+    \set Staff.instrument = \markup { \column { "Clarinetti" { "in B" \textFlat } } }
     \set Staff.instr = \markup { \smaller  { "Cl(B" \textFlat ")" } }
 
     { c''1 \break c'' }
Index: input/regression/markup-score.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/regression/markup-score.ly,v
retrieving revision 1.5
diff -u -r1.5 markup-score.ly
--- input/regression/markup-score.ly	30 Oct 2004 20:55:16 -0000	1.5
+++ input/regression/markup-score.ly	28 Nov 2004 17:02:16 -0000
@@ -2,7 +2,7 @@
     texidoc = "Use \\score block as markup command."
 }
 
-\version "2.4.0"
+\version "2.5.1"
 
 tuning = \markup {
     \score {
@@ -19,7 +19,7 @@
 \header {
     title = "Solo Cello Suites"
     subtitle = "Suite IV"
-    subsubtitle = \markup { \fill-line < { "Originalstimmung: " \tuning } > }
+    subsubtitle = \markup { \fill-line { { "Originalstimmung: " \tuning } } }
 }
 
 \relative {
Index: input/regression/markup-stack.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/regression/markup-stack.ly,v
retrieving revision 1.26
diff -u -r1.26 markup-stack.ly
--- input/regression/markup-stack.ly	30 Oct 2004 20:55:16 -0000	1.26
+++ input/regression/markup-stack.ly	28 Nov 2004 17:02:16 -0000
@@ -1,6 +1,6 @@
-\version "2.4.0"
+\version "2.5.1"
 \header {texidoc="Markup scripts may be stacked."}
 \layout { raggedright = ##t}
-\score {  { c''^\markup { "a" \column < "1" \bold "2"  "3" > } } }
+\score {  { c''^\markup { "a" \column { "1" \bold "2"  "3" } } } }
 
 
Index: input/regression/multi-measure-rest-text.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/regression/multi-measure-rest-text.ly,v
retrieving revision 1.24
diff -u -r1.24 multi-measure-rest-text.ly
--- input/regression/multi-measure-rest-text.ly	30 Oct 2004 20:55:16 -0000	1.24
+++ input/regression/multi-measure-rest-text.ly	28 Nov 2004 17:02:16 -0000
@@ -1,4 +1,4 @@
-\version "2.4.0"
+\version "2.5.1"
 
 \header  {
 
@@ -13,7 +13,7 @@
 \score {  {
   \time 3/4
   \set Score.skipBars = ##t
-  R2._\markup { \center-align < \musicglyph  #"scripts-dfermata" \roman "Ad lib"  >  }
+  R2._\markup { \center-align { \musicglyph  #"scripts-dfermata" \roman "Ad lib"  }  }
   R2.^\fermataMarkup
   R2.^"4"
   R2.*3_\markup { \roman "a1b2c3" }
Index: input/regression/new-markup-scheme.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/regression/new-markup-scheme.ly,v
retrieving revision 1.16
diff -u -r1.16 new-markup-scheme.ly
--- input/regression/new-markup-scheme.ly	30 Oct 2004 20:55:16 -0000	1.16
+++ input/regression/new-markup-scheme.ly	28 Nov 2004 17:02:16 -0000
@@ -5,7 +5,7 @@
     texts using a similar syntax as @code{\\markup}."
 
     }
-\version "2.4.0"
+\version "2.5.1"
 \score {
      {
         \fatText
@@ -14,7 +14,7 @@
             \raise #0.2 \hbracket \bold bar
             \override #'(baseline-skip . 4)
 
-            \bracket \column < baz bazr bla >
+            \bracket \column { baz bazr bla }
             \hspace #2.0
             \override #'(font-family . music) {
                 \lookup #"noteheads-0"
@@ -23,7 +23,7 @@
             \musicglyph #"accidentals--1"
             \combine "X" "+"   
             \combine "o" "/"
-            \box \column < { "string 1" } { "string 2" } >
+            \box \column { { "string 1" } { "string 2" } }
             "$\\emptyset$"
             \italic Norsk
             \super "2"
Index: input/regression/new-markup-syntax.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/regression/new-markup-syntax.ly,v
retrieving revision 1.35
diff -u -r1.35 new-markup-syntax.ly
--- input/regression/new-markup-syntax.ly	30 Oct 2004 20:55:16 -0000	1.35
+++ input/regression/new-markup-syntax.ly	28 Nov 2004 17:02:16 -0000
@@ -2,7 +2,7 @@
 texidoc = "With the new markup syntax, text may be written in various manners."
 }
 
-\version "2.4.0"
+\version "2.5.1"
 
 
 \score {
@@ -13,7 +13,7 @@
 		\raise #0.2 \hbracket \bold bar
 		\override #'(baseline-skip . 4)
 
-		\bracket \column < baz bazr bla >
+		\bracket \column { baz bazr bla }
 		\hspace #2.0
 		\override #'(font-family . music) {
 			\lookup #"noteheads-0"
@@ -26,7 +26,7 @@
 		\combine "X" "+"   
 		\combine "o" "/"
 %		\char-number #"abc1234abc"
-		\box \column < { "string 1" } { "string 2" } >
+		\box \column { { "string 1" } { "string 2" } }
 		"$\\emptyset$"
 		\italic Norsk
 		\super "2"
Index: input/test/coriolan-margin.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/test/coriolan-margin.ly,v
retrieving revision 1.60
diff -u -r1.60 coriolan-margin.ly
--- input/test/coriolan-margin.ly	30 Oct 2004 20:55:16 -0000	1.60
+++ input/test/coriolan-margin.ly	28 Nov 2004 17:02:16 -0000
@@ -1,5 +1,5 @@
 
-\version "2.4.0"
+\version "2.5.1"
 
 
 % Ugh, we need to override some LaTeX titling stuff
@@ -42,7 +42,7 @@
 }
 
 clarinetti =  \relative c' {
-    \set Staff.instrument = \markup { \column < "Clarinetti" { "in B" \raisedFlat } > }
+    \set Staff.instrument = \markup { \column { "Clarinetti" { "in B" \raisedFlat } } }
     \set Staff.instr = \markup { \smaller  { "Cl(B" \raisedFlat ")" } }
 
   c1 c
@@ -55,21 +55,21 @@
 }
 
 corni =  \relative c' {
-    \set Staff.instrument = \markup { \column < "Corni" { "in E" \raisedFlat } > }
+    \set Staff.instrument = \markup { \column { "Corni" { "in E" \raisedFlat } } }
     \set Staff.instr = \markup { \smaller  { "Cor(E" \raisedFlat ")" } }
 
   c1 c
 }
 
 trombe =  \relative c' {
-  \set Staff.instrument = \markup \column < "2 Trombe" "(C)" >
-  \set Staff.instr = \markup \column <  "Tbe." "(C)" >
+  \set Staff.instrument = \markup \column { "2 Trombe" "(C)" }
+  \set Staff.instr = \markup \column {  "Tbe." "(C)" }
 
   c1 c
 }
 
 timpani =  \relative c' {
-  \set Staff.instrument = \markup \column < "Timpani" "(C-G)" >
+  \set Staff.instrument = \markup \column { "Timpani" "(C-G)" }
   \set Staff.instr = #"Timp."
 
   c1 c
@@ -95,8 +95,8 @@
 }
 
 violoncello =  \relative c' {
-  \set Staff.instrument = \markup \column < "Violoncello" "e" "Contrabasso" >
-  \set Staff.instr = \markup \column <  "Vc." "Cb." >
+  \set Staff.instrument = \markup \column { "Violoncello" "e" "Contrabasso" }
+  \set Staff.instr = \markup \column {  "Vc." "Cb." }
   c1 c
 }
 
Index: input/test/title-markup.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/input/test/title-markup.ly,v
retrieving revision 1.48
diff -u -r1.48 title-markup.ly
--- input/test/title-markup.ly	30 Oct 2004 20:55:16 -0000	1.48
+++ input/test/title-markup.ly	28 Nov 2004 17:02:16 -0000
@@ -1,4 +1,4 @@
-\version "2.4.0"
+\version "2.5.1"
 
 %{
    Markup titles also available for direct PostScript output:
@@ -37,7 +37,7 @@
 }
     
 sizeTest = \markup {
-	\column <
+	\column {
             { \normalsize "normalsize"
               \hspace #5
               \smaller "smaller"
@@ -55,7 +55,7 @@
               \hspace #5
               \bigger \bigger \bigger "bigger"
             }
-       >
+       }
 }
 
 \encoding "latin1"
@@ -85,7 +85,7 @@
     piece = "Piece"
 
     %% Override automatic book title
-    %% bookTitle = \markup { \fill-line < \huge\bold \title > > }
+    %% bookTitle = \markup { \fill-line { \huge\bold \title } }
 }
 
 \book {
Index: lily/lexer.ll
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/lexer.ll,v
retrieving revision 1.155
diff -u -r1.155 lexer.ll
--- lily/lexer.ll	23 Nov 2004 20:09:16 -0000	1.155
+++ lily/lexer.ll	28 Nov 2004 17:02:16 -0000
@@ -485,12 +485,6 @@
 	\" {
 		start_quote ();
 	}
-	\< {
-		return '<';
-	}
-	\> {
-		return '>';
-	}
 	\\score {
 		return SCORE;
 	}
@@ -530,7 +524,7 @@
 	[{}]	{
 		return YYText ()[0];
 	}
-	[^<>#{}"\\ \t\n\r\f]+ {
+	[^#{}"\\ \t\n\r\f]+ {
 		String s (YYText ()); 
 
 		char c = s[s.length () - 1];
Index: lily/parser.yy
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/parser.yy,v
retrieving revision 1.443
diff -u -r1.443 parser.yy
--- lily/parser.yy	28 Nov 2004 00:47:15 -0000	1.443
+++ lily/parser.yy	28 Nov 2004 17:02:17 -0000
@@ -444,7 +444,7 @@
 %type <scm>  	Generic_prefix_music_scm 
 %type <scm>  	lyric_element
 %type <scm>     Alternative_music
-%type <scm>	markup markup_line markup_list markup_list_body full_markup
+%type <scm>	full_markup markup_composed_list markup_braced_list markup_braced_list_body markup_head_1_item markup_head_1_list markup simple_markup markup_top
 %type <scm> 	mode_changing_head
 %type <scm> 	mode_changing_head_with_context
 %type <scm>     object_id_setting 
@@ -2463,58 +2463,85 @@
 	| questions '?'	{ $$ ++; }
 	;
 
-
+/*
+This should be done more dynamically if possible.
+*/
 
 full_markup:
 	MARKUP_IDENTIFIER {
 		$$ = $1;
- 	}
+	}
 	| MARKUP
 		{ THIS->lexer_->push_markup_state (); }
-	markup
-		{ $$ = $3;
-		  THIS->lexer_->pop_state ();
-		}
+	markup_top {
+		$$ = $3;
+		THIS->lexer_->pop_state ();
+	}
 	;
 
-
-/*
-This should be done more dynamically if possible.
-*/
-markup:
-	STRING {
-		$$ = make_simple_markup (THIS->lexer_->encoding (), $1);
+markup_top:
+	markup_composed_list { 
+		$$ = scm_list_2 (ly_scheme_function ("line-markup"),  $1); 
 	}
-	| MARKUP_HEAD_EMPTY {
-		$$ = scm_list_1 ($1);
+	| markup_head_1_list simple_markup	{
+		$$ = scm_car (scm_call_2 (ly_scheme_function ("map-markup-command-list"), $1, scm_list_1 ($2)));
 	}
-	| MARKUP_HEAD_MARKUP0 markup {
-		$$ = scm_list_2 ($1, $2);
+	| simple_markup	{
+		$$ = $1;
 	}
-	| MARKUP_HEAD_MARKUP0_MARKUP1 markup markup {
-		$$ = scm_list_3 ($1, $2, $3);
+	| markup_braced_list	{
+		$$ = scm_list_2 (ly_scheme_function ("line-markup"), $1);
 	}
-	| MARKUP_HEAD_SCM0_MARKUP1 SCM_T markup {
-		$$ = scm_list_3 ($1, $2, $3);
+	;
+
+markup_composed_list:
+	markup_head_1_list markup_braced_list {
+		$$ = scm_call_2 (ly_scheme_function ("map-markup-command-list"), $1, $2);
+		
 	}
-	| markup_line {
-		$$ = $1;
+	;
+
+markup_braced_list:
+	'{' markup_braced_list_body '}'	{
+		$$ = scm_reverse_x ($2, SCM_EOL);
 	}
-	| MARKUP_HEAD_LIST0 markup_list {
-		$$ = scm_list_2 ($1,$2);
+	;
+
+markup_braced_list_body:
+	/* empty */	{  $$ = scm_list (SCM_EOL); }
+	| markup_braced_list_body markup {
+		$$ = scm_cons ($2, $1);
 	}
-	| MARKUP_HEAD_SCM0 embedded_scm {
-		$$ = scm_list_2 ($1, $2);
+	| markup_braced_list_body markup_composed_list {
+		$$ = scm_append_x (scm_list_2 (scm_reverse_x ($2, SCM_EOL), $1));
 	}
-	| MARKUP_HEAD_SCM0_SCM1_MARKUP2 embedded_scm embedded_scm markup {
-		$$ = scm_list_4 ($1, $2, $3, $4);
+	;
+
+markup_head_1_item:
+	MARKUP_HEAD_MARKUP0	{
+		$$ = scm_list_1 ($1);
 	}
-	| MARKUP_HEAD_SCM0_SCM1_SCM2 embedded_scm embedded_scm embedded_scm {
-		$$ = scm_list_4 ($1, $2, $3, $4);
+	| MARKUP_HEAD_SCM0_MARKUP1 embedded_scm	{
+		$$ = scm_list_2 ($1, $2);
 	}
-	| MARKUP_HEAD_SCM0_SCM1 embedded_scm embedded_scm {
+	| MARKUP_HEAD_SCM0_SCM1_MARKUP2 embedded_scm embedded_scm	{
 		$$ = scm_list_3 ($1, $2, $3);
 	}
+	;
+
+markup_head_1_list:
+	markup_head_1_item	{
+		$$ = scm_list_1 ($1);
+	}
+	| markup_head_1_list markup_head_1_item	{
+		$$ = scm_cons ($2, $1);
+	}
+	;
+
+simple_markup:
+	STRING {
+		$$ = make_simple_markup (THIS->lexer_->encoding (), $1);
+	}
 	| MARKUP_IDENTIFIER {
 		$$ = $1;
 	}
@@ -2530,28 +2557,38 @@
 		scm_gc_unprotect_object (sc->self_scm ());
 		THIS->lexer_->pop_state ();
 	}
+	| MARKUP_HEAD_SCM0 embedded_scm {
+		$$ = scm_list_2 ($1, $2);
+	}
+	| MARKUP_HEAD_SCM0_SCM1_SCM2 embedded_scm embedded_scm embedded_scm {
+		$$ = scm_list_4 ($1, $2, $3, $4);
+	}
+	| MARKUP_HEAD_SCM0_SCM1 embedded_scm embedded_scm {
+		$$ = scm_list_3 ($1, $2, $3);
+	}
+	| MARKUP_HEAD_EMPTY {
+		$$ = scm_list_1 ($1);
+	}
+	| MARKUP_HEAD_LIST0 markup_braced_list {
+		$$ = scm_list_2 ($1,$2);
+	}
+	| MARKUP_HEAD_MARKUP0_MARKUP1 markup markup {
+		$$ = scm_list_3 ($1, $2, $3);
+	}
 	;
-
-markup_list:
-	chord_open markup_list_body chord_close { $$ = scm_reverse_x ($2, SCM_EOL); }
-	;
-
-markup_line:
-	'{' markup_list_body '}' {
-		SCM line = ly_scheme_function ("line-markup");
 	
-		$$ = scm_list_2 (line, scm_reverse_x ($2, SCM_EOL));
+markup:
+	markup_head_1_list simple_markup	{
+		$$ = scm_car (scm_call_2 (ly_scheme_function ("map-markup-command-list"), $1, scm_list_1 ($2)));
 	}
-	;
-
-markup_list_body:
-	/**/ {  $$ = SCM_EOL; }
-	| markup_list_body markup {
-		$$ = scm_cons ($2, $1);
+	| simple_markup	{
+		$$ = $1;
+	}
+	| markup_braced_list {
+		$$ = scm_list_2 (ly_scheme_function ("line-markup"), $1);
 	}
 	;
 
-
 %%
 
 void
Index: ly/titling-init.ly
===================================================================
RCS file: /cvsroot/lilypond/lilypond/ly/titling-init.ly,v
retrieving revision 1.2
diff -u -r1.2 titling-init.ly
--- ly/titling-init.ly	21 Nov 2004 18:19:10 -0000	1.2
+++ ly/titling-init.ly	28 Nov 2004 17:02:17 -0000
@@ -1,58 +1,58 @@
 bookTitleMarkup = \markup {
-  \column <
-    \fill-line < \fromproperty #'header:dedication >
-    \fill-line <
+  \column {
+    \fill-line { \fromproperty #'header:dedication }
+    \fill-line {
       \huge \bigger \bigger \bigger \bold \fromproperty #'header:title
-    >
-    \fill-line <
+    }
+    \fill-line {
       \override #'(baseline-skip . 3)
-      \column <
-	\fill-line <
+      \column {
+	\fill-line {
 	  \huge \bigger \bigger
 	  \bold \fromproperty #'header:subtitle
-	>
-	\fill-line <
+	}
+	\fill-line {
 	  \huge \bigger
 	  \bold \fromproperty #'header:subsubtitle
-	>
-      >
-    >
-    \fill-line <
+	}
+      }
+    }
+    \fill-line {
       \fromproperty #'header:poet
       \fromproperty #'header:instrument 
-      \column <
+      \column {
 	\fromproperty #'header:composer
 	\fromproperty #'header:arranger
-      >
-    >
-  >
+      }
+    }
+  }
 }
 
 scoreTitleMarkup = \markup {
-  \fill-line <
+  \fill-line {
     \fromproperty #'header:piece
     \fromproperty #'header:opus
-  >
+  }
 }
 
 
 oddHeaderMarkup = \markup
-\fill-line <
+\fill-line {
   ""
   \fromproperty #'header:instrument
   \fromproperty #'page:page-number-string
->
+}
 
 evenHeaderMarkup = \markup
-\fill-line <
+\fill-line {
   \fromproperty #'page:page-number-string
   \fromproperty #'header:instrument
   ""
->
+}
 
 oddFooterMarkup = \markup {
-  \column <
-    \fill-line <
+  \column {
+    \fill-line {
 
       % put copyright only on pagenr. 1 
       \on-the-fly #(lambda (layout props arg)
@@ -61,8 +61,8 @@
 		     empty-stencil
 		   ))
       \fromproperty #'header:copyright
-    >
-    \fill-line <
+    }
+    \fill-line {
       % put tagline only on last page
       \on-the-fly #(lambda (layout props arg)
 		    (if (chain-assoc-get 'page:last?  props #f)
@@ -70,7 +70,7 @@
 		     empty-stencil
 		   ))
       \fromproperty #'header:tagline
-    >
-  >
+    }
+  }
 }
 
Index: scm/new-markup.scm
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scm/new-markup.scm,v
retrieving revision 1.79
diff -u -r1.79 new-markup.scm
--- scm/new-markup.scm	10 Oct 2004 11:42:06 -0000	1.79
+++ scm/new-markup.scm	28 Nov 2004 17:02:18 -0000
@@ -332,6 +332,24 @@
     (and proc (cons proc (markup-command-keyword proc)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;
+;;; used in parser.yy to map a list of markup commands on markup arguments
+(define-public (map-markup-command-list commands markups)
+  "`markups' being a list of markups, eg (markup1 markup2 markup3),
+and `commands' a list of commands with their scheme arguments, in reverse order,
+eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg:
+ ((bold (raise 4 (italic markup1)))
+  (bold (raise 4 (italic markup2)))
+  (bold (raise 4 (italic markup3))))
+"
+  (map-in-order (lambda (arg)
+                  (let ((result arg))
+                    (for-each (lambda (cmd)
+                                (set! result (append cmd (list result))))
+                              commands)
+                    result))
+                markups))
+
+;;;;;;;;;;;;;;;;;;;;;;
 ;;; markup type predicates
 
 (define (markup-function? x)
Index: scripts/convert-ly.py
===================================================================
RCS file: /cvsroot/lilypond/lilypond/scripts/convert-ly.py,v
retrieving revision 1.216
diff -u -r1.216 convert-ly.py
--- scripts/convert-ly.py	21 Nov 2004 18:19:11 -0000	1.216
+++ scripts/convert-ly.py	28 Nov 2004 17:02:19 -0000
@@ -2280,7 +2280,18 @@
 		     conv,
 		     'ly:import-module -> ly:module-copy'))
 
-
+def conv (str):
+	str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<([^<]*)>',
+		      r'\\\1 {\2}', str)
+	str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<([^<]*)>',
+		      r'\\\1 {\2}', str)
+	str = re.sub (r'\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<([^<]*)>',
+		      r'\\\1 {\2}', str)
+	return str
+
+conversions.append (((2, 5, 2),
+		     conv,
+		     '\markup .. < .. > .. -> \markup .. { .. } ..'))
 
 ################################
 #	END OF CONVERSIONS	
_______________________________________________
lilypond-devel mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to