B
    _?                @   s  d dl Z d dlZd dlZd dlZded d Zedd Zedd ZG dd deZ	g Z
ejjZdd	 Zd
d Zededdd Zededd dd Zededdd Zedddd Zededdd Zedddd Zed edd!d Zed"d#d$d Zed%d&d'd Zed(d)d*d Zed+d,d-d Zed.d/d0d Zed1d2d3d Zed4d5d6d Zed7d8d9d Zed:d;d<d Zed=d>d?d Zed@edAdBd ZedCdDdEd ZedFdGdHd ZedIdJdKd ZedLedMdN dOd ZedPdQdRd ZedSdTdUd ZedVdWdXd ZedYdZd[d Zed\d]d^d Zed_d`dad Zedbdcddd Zededfdgd Zedhdidjd Zedkdldmd Zednedodp dqd Zedrdsdtd Zedudvdwd Zedxdydzd Zed{d|d}d Zed~eddd Zedddd Zedddd Zedddd Zedddd Zedddd Zededdd Zedddd Zedddd Zedddd Zedddd Zedddd Zdd Zededd dd Zedddd Zedddd Zedddd Zededdd Zedddd Zedddd Zedddd Zedddd Zedddd Zededdd ZeddŃdd Zeddȃdd Zedd˃dd Zedd΃dd Zededуd dd ZeddՃdd Zedd؃dd Zeddۃdd ZededMd dd Zedddd Zedddd Zededdd Zedddd Zedddd Zedddd Zedddd Zdd Zedddd Zddddddd dZdd Zdd Zdd Zdd	 Zd
d Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zeddd d Zed!d"d#d Zed$d%d&d Zed'd(d)d Zed*d+d,d Zed-d.d/d Zed0ed1d2 d3d Zed4d5d6d Zed7d8d9d Zed:ed;d<d Zed=ed>d?d Zd@dA ZdBdC Ze dDZe dEZe dFZe dGZe dHZ e dIZ!dJdK Z"dLdM Z#e dNZ$dOdP Z%dQdR Z&edSedTdUd ZedVedWdXd ZedYdZd[d Zed\ed]d^ d_ d`d Zedaedbdcd Zedddedfd ZedgedMdh did Zedjedkdld Zedmdndod Zedpdqdrd Zedsdtdud Zedvdwdxd Zedyedzd{d Zed|d}d~d Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zededdd Zedddd Zededdd Zedddd Zedded1d  dd Zedded dd Zededdd Zedddd Zededdd Zededdd Zedddd Zedddd Zedddd Zedddd Zedddd ZedÐdădd ZedƐdǃdd Zedɐdʃdd Zededdd Zedΐdσdd Zedѐd҃dd Zeded1d dd Zedאd؃dd Zedڐdۃdd Zedݐdރdd Zedddd Zedddd Zedddd Zededdd Zedddd Zedddd Zedddd Zedddd Zededdd Zedddd Zededdd Zed ddd Zedddd Zedddd Zed	d
dd Zedddd Zededdd Zeded1d dd Zedddd Zededdd Zedddd Zededdd Zed d!d"d Zed#d$d%d Zed&d'd(d Zed)d*d+d Zed,d-d.d Zed/d0d1d Zed2d3d4d Zed5d6d7d Zed8d9d:d Zed;ed<d=d Zed>ed?d@d ZedAdBdCd ZedDdEdFd ZedGedMdH dId ZedJdKdLd ZedMdNdOd ZedPdQdRd ZedSdTdUd ZedVedWdXd ZedVdYdZd Zed[d\d]d Zed^d_d`d Zedadbdcd Zedddedfd Zedgdhdid Zedjdkdld Zedmdndod Zedpedqdrd Zedsdtdud Zedveddwd Zedxdydzd Zed{d|d}d Zed~eddd Zededdd Zedddd Zedddd Zedddd Zedddd Zedddd Zedded dd Zedddd Zedddd Zedddd Zededdd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zededd ed dd Zededdd ZededŃdd Zededȃdd Zeded˃dd Zeded΃dd Zededуdd Zededԃdd Zeded׃dd Zedِdڃdd Zeded݃dd Zededdd Zededdd Zededdd Zededdd Zededdd Zededdd Zededdd Zededdd Zededdd Zededdd Zededdd Zeded dd Zededdd Zedddd Zedd	d
d Zdd Z'dd Z(dd Z)dd Z*dd Z+dd Z,da-dd Z.edddd Zedddd Zed d!d"d Zd#d$ Z/d%Z0d&e0 d' e'd( d) d* d+ e/d, d- e0 d. Z1d/e/d( d0 e0 d1 e1 d2 e0 d3 e/d( d4 Z2d5e0 d6 e2 d7 Z3ed8d9d:d Zed;d<d=d Zed>d?d@d ZedAdBdCd ZedDdEdFd ZdGZ4edHdIdJd ZedKeddLd ZedMdNdOd ZedPdQdRd ZdSZ5edTdUdVd ZdWe4 dX e4 dY e4 dZ Z6e6dY e6 d[ Z7e4d\ e4 d] Z8d^d_ Z9e d`e2 da db e3 d] e1 dc e1 dd e3 de Z:edfdgdhd Zedidjdkd Zedldmdnd Zedodpdqd Zedrdsdtd Zedudvdwd Zedxedydzd Zed{d|d}d Zed~ddd Zedddd Zedddd Zededdd Zedddd Zedddd Zedddd ZdZ;dZ<edddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zedddd Zde'd, d Z=edddd Zedddd Zededdd ZdS (      N
zNot smart enough to convert %s.z<Please refer to the manual for details, and update manually.z%s has been replaced by %sc               @   s   e Zd ZdS )FatalConversionErrorN)__name__
__module____qualname__ r   r   n/home/gub/NewGub/gub/target/mingw/src/lilypond-git.sv.gnu.org--lilypond.git-stable-2.22/python/convertrules.pyr   $   s   r   c             C   s   t td|   d S )Nzwarning: %s)stderr_write_)sr   r   r   warning,   s    r   c                s    fdd}|S )a  
    version: a LilyPond version tuple like (2, 11, 50)
    message: the message that describes the conversion.

    This decorator adds its function together with the version and the
    message to the global conversions list.  (It doesn't need to return
    the function as it isn't used directly anyway.)

    A conversion rule using this decorator looks like this:

    @rule ((1, 2, 3), "convert foo to bar")
    def conv(s):
        s = s.replace('foo', 'bar')
        return s

    c                s   t |  f d S )N)conversionsappend)f)messageversionr   r   decC   s    zrule.<locals>.decr   )r   r   r   r   )r   r   r   rule2   s    r   )r      	   z*\header { key = concat + with + operator }c             C   s   t d| rttd  | S )Nz\\multiz\multi)researchr	   	NOT_SMART)r   r   r   r   convH   s    r   )r   r      zdeprecated %sz\octavec             C   s$   t d| r ttd  tt | S )Nz\\octavez\octave)r   r   r	   r   UPDATE_MANUALLY)r   r   r   r   r   O   s    )r   r      z&deprecated \textstyle, new \key syntaxc             C   s   t dd| } | S )Nz\\textstyle([^;]+);z"\\property Lyrics . textstyle = \1)r   sub)r   r   r   r   r   X   s    )r   r      z0\musical_pitch -> \musicalpitch, \meter -> \timec             C   s    t dd| } t dd| } | S )Nz\\musical_pitchz\\musicalpitchz\\meterz\\time)r   r   )r   r   r   r   r   a   s    )r   r   r   zbump version for releasec             C   s   | S )Nr   )r   r   r   r   r   h   s    )r   r   r   zC\accidentals -> \keysignature, specialaccidentals -> keyoctaviationc             C   s.   t dd| } t dd| } t dd| } | S )Nz\\accidentalsz\\keysignaturezspecialaccidentals *= *1zkeyoctaviation = 0zspecialaccidentals *= *0zkeyoctaviation = 1)r   r   )r   r   r   r   r   m   s    )r   r      c             C   s    t d| rtttd  | S )Nz\\headerznew \header format)r   r   r	   r   r
   )r   r   r   r   r   u   s    )r   r      z\melodic -> \notesc             C   s   t dd| } | S )Nz\\melodic([^a-zA-Z])z	\\notes\1)r   r   )r   r   r   r   r   |   s    )r   r      zdefault_{paper,midi}c             C   s    t dd| } t dd| } | S )Nzdefault_paper *= zdefault_midi *=)r   r   )r   r   r   r   r      s    )r   r      zChoireStaff -> ChoirStaffc             C   s    t dd| } t dd| } | S )NZChoireStaff
ChoirStaffz\\outputz	output = )r   r   )r   r   r   r   r      s    )r   r      z=foo = \translator {\type .. } ->\translator {\type ..; foo; }c             C   s    t d| rtttd  | S )Nz[a-zA-Z]+ = *\translatorz\translator syntax)r   r   r	   r   r
   )r   r   r   r   r      s    )r   r      z\lyric -> \lyricsc             C   s   t dd| } | S )Nz	\\lyrics*z\\lyrics)r   r   )r   r   r   r   r      s    )r   r   
   z[2/3 ]1/1 -> \times 2/3 c             C   sf   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd
| } t dd| } | S )Nz\\\[/3+z\\times 2/3 { z\[/3+z\\times 2/3 { [z\\\[([0-9/]+)z\\times \1 {z\[([0-9/]+)z\\times \1 { [z\\\]([0-9/]+)}z\\\]z\]([0-9/]+)z] })r   r   )r   r   r   r   r      s    )r   r      zChord syntax stuffc             C   s   | S )Nr   )r   r   r   r   r      s    )r   r      z<a ~ b> c -> <a b> ~ cc             C   s   t dd| } | S )Nz<([^>~]+)~([^>]*)>z	<\1 \2> ~)r   r   )r   r   r   r   r      s    )r   r      z<[a b> <a b]>c -> [<a b> <a b>]c             C   s    t dd| } t dd| } | S )Nz<\[z[<z\]>z>])r   r   )r   r   r   r   r      s    )r   r      z)\type -> \context, textstyle -> textStylec             C   sJ   t dd| } t dd| } t dd| } t dd| } t dd| } | S )	Nz\\type([^
]*engraver)z\\TYPE\1z\\type([^
]*performer)z\\typez	\\contextz\\TYPEZ	textstyleZ	textStyle)r   r   )r   r   r   r   r      s    )r   r      zB\repeat NUM Music Alternative -> \repeat FOLDSTR Music Alternativec             C   s   t d| rttd  | S )Nz\\repeatz\repeat)r   r   r	   r   )r   r   r   r   r      s    )r   r   r   zMfontsize -> fontSize, midi_instrument -> midiInstrument, SkipBars -> skipBarsc             C   s.   t dd| } t dd| } t dd| } | S )NZSkipBarsZskipBarsZfontsizeZfontSizeZmidi_instrumentZmidiInstrument)r   r   )r   r   r   r   r      s    )r   r   r   z7{,tie,slur}ydirection -> {v,tieV,slurV}erticalDirectionc             C   s.   t dd| } t dd| } t dd| } | S )NZtieydirectionZtieVerticalDirectionZslurydirectionZslurVerticalDirectionZ
ydirectionZverticalDirection)r   r   )r   r   r   r   r      s    )r   r   r   zhshift -> horizontalNoteShiftc             C   s   t dd| } | S )NZhshiftZhorizontalNoteShift)r   r   )r   r   r   r   r      s    )r   r   4   zdeprecate %sz	\groupingc             C   s   t dd| } | S )Nz\\grouping[^;]*;r"   )r   r   )r   r   r   r   r      s    )r   r   7   z\wheel -> \codac             C   s   t dd| } | S )Nz\\wheelz\\coda)r   r   )r   r   r   r   r      s    )r   r   A   z6slurdash -> slurDash, keyoctaviation -> keyOctaviationc             C   s    t dd| } t dd| } | S )NZkeyoctaviationZkeyOctaviationZslurdashZslurDash)r   r   )r   r   r   r   r      s    )r   r   B   zsemi -> voltac             C   s   t dd| } | S )Nz\\repeat *"?semi"?z\\repeat "volta")r   r   )r   r   r   r   r      s    )r   r   C   zbeamAuto -> noAutoBeamingc             C   s   t dd| } | S )Nz"?beamAuto"? *= *"?0?"?znoAutoBeaming = "1")r   r   )r   r   r   r   r      s    )r   r   r   z'automaticMelismas -> automaticMelismatac             C   s   t dd| } | S )NZautomaticMelismasautomaticMelismata)r   r   )r   r   r   r   r     s    )r   r   r   zdynamicDir -> dynamicDirectionc             C   s   t dd| } | S )NzdynamicDir\bZdynamicDirection)r   r   )r   r   r   r   r   	  s    )r   r    r!   z\cadenza -> \cadenza{On|Off}c             C   s    t dd| } t dd| } | S )Nz\\cadenza *0 *;z\\cadenzaOffz\\cadenza *1 *;z\\cadenzaOn)r   r   )r   r   r   r   r     s    )r   r    r#   zbeamAuto moment propertiesc             C   s   t dd| } | S )Nz0"?beamAuto([^"=]+)"? *= *"([0-9]+)/([0-9]+)" *;*z!beamAuto\1 = #(make-moment \2 \3))r   r   )r   r   r   r   r     s    )r   r       zstemStyle -> flagStylec             C   s   t dd| } | S )NZ	stemStyleZ	flagStyle)r   r   )r   r   r   r   r     s    )r   r    r-   zstaffLineLeading -> staffSpacec             C   s   t dd| } | S )NZstaffLineLeadingZ
staffSpace)r   r   )r   r   r   r   r   &  s    )r   r       zdeprecate %s z\repetitionsc             C   s   t d| rttd  | S )Nz\\repetitionsz\repetitions)r   r   r	   r   )r   r   r   r   r   .  s    )r   r    #   z"textEmptyDimension -> textNonEmptyc             C   s    t dd| } t dd| } | S )NztextEmptyDimension *= *##tztextNonEmpty = ##fztextEmptyDimension *= *##fztextNonEmpty = ##t)r   r   )r   r   r   r   r   6  s    )r   r    &   z$\musicalpitch { a b c } -> #'(a b c)c             C   s<   t dd| } t dd| } t d| r8tttd  | S )Nz2([a-z]+)[ 	]*=[ 	]*\\musicalpitch *{([- 0-9]+)} *
z(\1 . (\2))
z\\musicalpitch *{([0-9 -]+)}z\\musicalpitch #'(\1)z\\notenamesznew \notenames format)r   r   r   r	   r   r
   )r   r   r   r   r   A  s    )r   r    '   z\key A ;  ->\key a;c             C   s   dd }t d|| } | S )Nc             S   s   d|  d  S )Nz\key %s;r   )grouplower)matchr   r   r   replaceN  s    zconv.<locals>.replacez\\key ([^;]+);)r   r   )r   r<   r   r   r   r   L  s    )r   r    )   z/[:16 c4 d4 ] -> \repeat "tremolo" 2 { c16 d16 }c             C   s    t d| rtttd  | S )Nz\[:znew tremolo format)r   r   r	   r   r
   )r   r   r   r   r   U  s    )r   r    *   z>Staff_margin_engraver deprecated, use Instrument_name_engraverc             C   s   t dd| } | S )NZStaff_margin_engraverZInstrument_name_engraver)r   r   )r   r   r   r   r   \  s    )r   r    1   z%noteHeadStyle value: string -> symbolc             C   s   t dd| } | S )Nz note[hH]eadStyle\s*=\s*"?(\w+)"?znoteHeadStyle = #'\1)r   r   )r   r   r   r   r   b  s    )r   r    :   c             C   s   t d| rttd  | S )Nz\\keysignaturez\keysignature)r   r   r	   r   )r   r   r   r   r   i  s    )r   r    ;   z\key X ; -> \key X major; c             C   s   t dd| } | S )Nz\\key *([a-z]+) *;z\\key \1 \\major;)r   r   )r   r   r   r   r   p  s    )r   r    D   z9latexheaders = "\input global" -> latexheaders = "global"c             C   s   t dd| } | S )Nzlatexheaders *= *"\\\\input zlatexheaders = ")r   r   )r   r   r   r   r   v  s    )r   r    \   z<basicXXXProperties -> XXX, Repeat_engraver -> Volta_engraverc             C   st   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd
| } t dd| } t dd| } | S )NZbasicCollisionPropertiesZNoteCollisionZbasicVoltaSpannerPropertiesZVoltaBracketZbasicKeyPropertiesKeySignatureZbasicClefItemPropertiesClefZbasicLocalKeyPropertiesZAccidentalsZbasicMarkPropertieszbasic([A-Za-z_]+)Propertiesz\1ZRepeat_engraverZVolta_engraver)r   r   )r   r   r   r   r     s    )r   r    ]   z:change property definition case (eg. onevoice -> oneVoice)c             C   s  t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd | } t d!d"| } t d#d$| } t d%d&| } t d'd(| } t d)d*| } t d+d,| } t d-d.| } t d/d0| } t d1d2| } t d3d4| } t d5d6| } t d7d8| } t d9d:| } t d;d<| } t d=d>| } t d?d@| } t dAdB| } t dCdD| } t dEdF| } t dGdH| } | S )INz\\stemupz\\stemUpz
\\stemdownz
\\stemDownz
\\stembothz
\\stemBothz\\slurupz\\slurUpz
\\slurbothz
\\slurBothz
\\slurdownz
\\slurDownz\\slurdottedz\\slurDottedz\\slurnormalz\\slurNoDotsz
\\shiftoffz
\\shiftOffz	\\shiftonz	\\shiftOnz
\\shiftonnz
\\shiftOnnz\\shiftonnnz\\shiftOnnnz
\\onevoicez
\\oneVoicez
\\voiceonez
\\voiceOnez
\\voicetwoz
\\voiceTwoz\\voicethreez\\voiceThreez\\voicefourz\\voiceFourz:\\property *[^ ]*verticalDirection[^=]*= *#?"?(1|(\\up))"?z\\stemUp\\slurUp\\tieUpz?\\property *[^ ]*verticalDirection[^=]*= *#?"?((-1)|(\\down))"?z\\stemDown\\slurDown\\tieDownz>\\property *[^ ]*verticalDirection[^=]*= *#?"?(0|(\\center))"?z\\stemBoth\\slurBoth\\tieBothz)verticalDirection[^=]*= *#?"?(1|(\\up))"?zbStem \\override #'direction = #0
Slur \\override #'direction = #0
 Tie \\override #'direction = #1z.verticalDirection[^=]*= *#?"?((-1)|(\\down))"?zcStem \\override #'direction = #0
Slur \\override #'direction = #0
 Tie \\override #'direction = #-1z-verticalDirection[^=]*= *#?"?(0|(\\center))"?zbStem \\override #'direction = #0
Slur \\override #'direction = #0
 Tie \\override #'direction = #0zG\\property *[^ .]*[.]?([a-z]+)VerticalDirection[^=]*= *#?"?(1|(\\up))"?z\\\1UpzL\\property *[^ .]*[.]?([a-z]+)VerticalDirection[^=]*= *#?"?((-1)|(\\down))"?z\\\1DownzK\\property *[^ .]*[.]?([a-z]+)VerticalDirection[^=]*= *#?"?(0|(\\center))"?z\\\1Bothz1([a-z]+)VerticalDirection[^=]*= *#?"?(1|(\\up))"?z\1 \\override #'direction = #1z6([a-z]+)VerticalDirection[^=]*= *#?"?((-1)|(\\down))"?z\1 \\override #'direction = #-1z5([a-z]+)VerticalDirection[^=]*= *#?"?(0|(\\center))"?z\1 \\override #'direction = #0z>\\property *[^ .]*[.]?dynamicDirection[^=]*= *#?"?(1|(\\up))"?z\\dynamicUpz6\\property *[^ .]*[.]?dyn[^=]*= *#?"?((-1)|(\\down))"?z\\dynamicDownz5\\property *[^ .]*[.]?dyn[^=]*= *#?"?(0|(\\center))"?z\\dynamicBothz8\\property *[^ .]*[.]?([a-z]+)Dash[^=]*= *#?"?(0|(""))"?z
\\\1NoDotsz8\\property *[^ .]*[.]?([a-z]+)Dash[^=]*= *#?"?([1-9]+)"?z
\\\1Dottedz9\\property *[^ .]*[.]?noAutoBeaming[^=]*= *#?"?(0|(""))"?z\\autoBeamOnz9\\property *[^ .]*[.]?noAutoBeaming[^=]*= *#?"?([1-9]+)"?z\\autoBeamOff)r   r   )r   r   r   r   r     sp    









)r   r    a   zChordName -> ChordNamesc             C   s<   t dd| } t d| r*tttd  t dd| } | S )NzChordNames*
ChordNamesz\\textscript "[^"]* *"[^"]*"znew \textscript markup textz\textscript +("[^"]*")z\textscript #\1)r   r   r   r	   r   r
   )r   r   r   r   r     s
    )r   r    b   z&CONTEXT.textStyle -> GROB.#font-style c             C   s   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } t dd| } | S )Nz7\\property *"?Voice"? *[.] *"?textStyle"? *= *"([^"]*)"z5\\property Voice.TextScript \\set #'font-style = #'\1z8\\property *"?Lyrics"? *[.] *"?textStyle"? *= *"([^"]*)"z5\\property Lyrics.LyricText \\set #'font-style = #'\1zB\\property *"?([^.]+)"? *[.] *"?timeSignatureStyle"? *= *"([^"]*)"z5\\property \1.TimeSignature \\override #'style = #'\2z"?timeSignatureStyle"? *= *#?""z&TimeSignature \\override #'style = ##fz&"?timeSignatureStyle"? *= *#?"([^"]*)"z'TimeSignature \\override #'style = #'\1z#'style *= #*"([^"])"z#'style = #'\1zI\\property *"?([^.]+)"? *[.] *"?horizontalNoteShift"? *= *"?#?([-0-9]+)"?z<\\property \1.NoteColumn \\override #'horizontal-shift = #\2z2\\property *"?([^.]+)"? *[.] *"?flagStyle"? *= *""z0\\property \1.Stem \\override #'flag-style = ##fz9\\property *"?([^.]+)"? *[.] *"?flagStyle"? *= *"([^"]*)"z1\\property \1.Stem \\override #'flag-style = #'\2)r   r   )r   r   r   r   r     s$    )r   r    f   z3beamAutoEnd -> autoBeamSettings \push (end * * * *)c             C   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nz)"?beamAutoEnd_([0-9]*)"? *= *(#\([^)]*\))z-autoBeamSettings \\push #'(end 1 \1 * *) = \2z+"?beamAutoBegin_([0-9]*)"? *= *(#\([^)]*\))z/autoBeamSettings \\push #'(begin 1 \1 * *) = \2z "?beamAutoEnd"? *= *(#\([^)]*\))z,autoBeamSettings \\push #'(end * * * *) = \1z""?beamAutoBegin"? *= *(#\([^)]*\))z.autoBeamSettings \\push #'(begin * * * *) = \1)r   r   )r   r   r   r   r     s    )r   r    o   z#\push -> \override, \pop -> \revertc             C   s    t dd| } t dd| } | S )Nz\\pushz
\\overridez\\popz\\revert)r   r   )r   r   r   r   r     s    )r   r    q   zLyricVoice -> LyricsVoicec             C   s.   t dd| } t dd| } t dd| } | S )NZ
LyricVoiceLyricsVoicezChord[Nn]ames*.Chord[Nn]ames*zChordNames.ChordNamezChord[Nn]ames([ 	
]+\\override)zChordName\1)r   r   )r   r   r   r   r     s    c             C   s   d} d}xz| D ]r}|dkr"|}qnR|t jkrJtt|td td }n*|t jkrZd}n|t jkrt|dkrt| }| | } |}qW | S )Nr"   r
   0Ax)stringZdigitschrordZlettersZ	lowercaseupper)r   ZlastxrP   r   r   r   regularize_id"  s    


rU   )r   r    u   zidentifier names: %sz$!foo_bar_123 -> xfooBarABCc             C   s0   dd }dd }t d|| } t d|| } | S )Nc             S   s   t | dS )Nr   )rU   r9   )r;   r   r   r   regularize_dollar_reference6  s    z)conv.<locals>.regularize_dollar_referencec             S   s   dt | d d S )Nr   r   z = )rU   r9   )r;   r   r   r   regularize_assignment9  s    z#conv.<locals>.regularize_assignmentz\$([^\t\n ]+)z
([^ 	
]+)[ 	]*= *)r   r   )r   rW   rX   r   r   r   r   4  s
    )r   r    x   z+paper_xxx -> paperXxxx, pedalup -> pedalUp.c             C   s|   dd }t d|| } t dd| } t dd| } t dd	| } t d
d| } t dd| } t dd| } t dd| } | S )Nc             S   s   t | dS )Nr   )rU   r9   )r;   r   r   r   regularize_paperB  s    zconv.<locals>.regularize_paperz(paper_[a-z]+)Z	sustainup	sustainUpZnobreakZnoBreakZsustaindownsustainDownZsostenutoupsostenutoUpZsostenutodownsostenutoDownZ	unachordaZ	unaChordaZ	trechordeZ	treChorde)r   r   )r   rZ   r   r   r   r   @  s    )r   r    z   z4drarnChords -> chordChanges, \musicalpitch -> \pitchc             C   s    t dd| } t dd| } | S )NZdrarnChordsZchordChangesz\\musicalpitchz\\pitch)r   r   )r   r   r   r   r   O  s    )r   r       z'ly-X-elt-property -> ly-X-grob-propertyc             C   s   t dd| } | S )Nzly-([sg])et-elt-propertyzly-\1et-grob-property)r   r   )r   r   r   r   r   V  s    )r   r       z.point-and-click argument changed to procedure.c             C   s   t dd| } | S )Nzpoint-and-click +#tz$point-and-click line-column-location)r   r   )r   r   r   r   r   \  s    zfollowThread -> followVoice.c             C   s.   t dd| } t dd| } t dd| } | S )NZfollowThreadZfollowVoicezThread.FollowThreadzVoice.VoiceFollowerZFollowThreadZVoiceFollower)r   r   )r   r   r   r   r   c  s    )r   r       z$font-point-size -> font-design-size.c             C   s   t dd| } | S )Nzfont-point-sizezfont-design-size)r   r   )r   r   r   r   r   k  s    )r   r       zxNoDots -> xSolidc             C   s   t dd| } | S )Nz([a-zA-Z]*)NoDotsz\1Solid)r   r   )r   r   r   r   r   q  s    )r   r       zChorda -> Cordac             C   s   t dd| } | S )Nz([Cc])hord([ea])z\1ord\2)r   r   )r   r   r   r   r   w  s    )r   r       z3ContextNameXxxxVerticalExtent -> XxxxVerticalExtentc             C   sJ   t dd| } t dd| } t dd| } t dd| } t dd| } | S )	Nz ([A-Za-z]+)MinimumVerticalExtentzMinimumV@rticalExtentz([A-Za-z]+)ExtraVerticalExtentzExtraV@rticalExtentz([A-Za-z]+)VerticalExtentVerticalExtentExtraVerticalExtentMinimumVerticalExtent)r   r   )r   r   r   r   r   }  s    )r   r       zsemicolons removedc             C   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nz\\key[ 	]*;z\\key \\default;z\\mark[ 	]*;z\\mark \\default;z([^ 
	;]);(;+)z\1 ;\2z
([^ 	;#]);z\1)r   r   )r   r   r   r   r     s
    )r   r       z.default-neutral-direction -> neutral-directionc             C   s   t dd| } | S )Nzdefault-neutral-directionzneutral-direction)r   r   )r   r   r   r   r     s    )r   r       z*"(align" -> "(axis", "(rows" -> "(columns"c             C   s    t dd| } t dd| } | S )Nz\(alignz(axisz\(rowsz(columns)r   r   )r   r   r   r   r     s    )r   r#   !   z,SystemStartDelimiter -> systemStartDelimiterc             C   s   t dd| } | S )NZSystemStartDelimiterZsystemStartDelimiter)r   r   )r   r   r   r   r     s    )r   r#   r7   zarithmetic... -> spacing...c             C   s    t dd| } t dd| } | S )Nzarithmetic-multiplierzspacing-incrementzarithmetic-basicspacezshortest-duration-space)r   r   )r   r   r   r   r     s    )r   r#   (   z%s property namesZbreakAlignOrderc             C   s   dd }t d|| } | S )Nc          
   S   sR   ddddddddd	d
	}|  d}x&t| D ]\}}t|||}q0W d| S )Nzinstrument-namez	left-edgezspan-barzbreathing-signz	staff-barZclefzkey-signatureztime-signatureZcustos)	ZInstrument_nameZLeft_edge_itemZSpan_barZBreathing_signZ	Staff_barZ	Clef_itemZKey_itemZTime_signatureZCustosr   zbreakAlignOrder = #'(%s))r9   listitemsr   r   )r;   Z
break_dictZpropskvr   r   r   func  s    
zconv.<locals>.funcz)breakAlignOrder *= *#'\(([a-z_
	A-Z ]+)\))r   r   )r   rr   r   r   r   r     s    )r   r#   r?   znoAutoBeaming -> autoBeamingc             C   s    t dd| } t dd| } | S )NznoAutoBeaming *= *##fzautoBeaming = ##tznoAutoBeaming *= *##tzautoBeaming = ##f)r   r   )r   r   r   r   r     s    )r   r#   r.   z#tuplet-X-visibility -> X-visibilityc             C   s    t dd| } t dd| } | S )Nztuplet-bracket-visibilityzbracket-visibilityztuplet-number-visibilityznumber-visibility)r   r   )r   r   r   r   r     s    )r   r#   8   z&Pitch::transpose -> ly-transpose-pitchc             C   s   t dd| } | S )NzPitch::transposezly-transpose-pitch)r   r   )r   r   r   r   r     s    )r   r#   r@   ZtextNonEmptyc             C   s    t dd| } t dd| } | S )NztextNonEmpty *= *##tz(TextScript \\set #'no-spacing-rods = ##fztextNonEmpty *= *##fz(TextScript \\set #'no-spacing-rods = ##t)r   r   )r   r   r   r   r     s
    )r   r#   rA   z'XxxxVerticalExtent -> xxxVerticalExtentc             C   sf   t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } | S )	Nrh   zminimumV@rticalExtentminimumVerticalExtentrg   zextraV@rticalExtentZextraVerticalExtentrf   ZverticalExtent)r   r   )r   r   r   r   r     s    )r   r#   >   z%visibility-lambda -> break-visibilityc             C   s   t dd| } | S )Nzvisibility-lambdazbreak-visibility)r   r   )r   r   r   r   r     s    )r   r#   r2   z'automaticMelismata turned on by defaultc             C   sF   t d| rBt d| d krBttd  ttd td t | S )Nz
\addlyricsr3   z8automaticMelismata is turned on by default since 1.5.67.r   )r   r   r	   r   r
   r   )r   r   r   r   r     s    
)r   r#   rB   z'ly-set-X-property -> ly-set-X-property!c             C   s    t dd| } t dd| } | S )Nzly-set-grob-property([^!])zly-set-grob-property!zly-set-mus-property([^!])zly-set-mus-property!)r   r   )r   r   r   r   r     s    )r   r#   G   zextent-[XY] -> [XY]-extentc             C   s    t dd| } t dd| } | S )Nzextent-XzX-extentzextent-YzY-extent)r   r   )r   r   r   r   r     s    )r   r#   H   z,set! point-and-click -> set-point-and-click!c             C   s.   t dd| } t dd| } t dd| } | S )Nz0#\(set! +point-and-click +line-column-location\)z$#(set-point-and-click! 'line-column)z-#\(set![ \t]+point-and-click +line-location\)z#(set-point-and-click! 'line)z#\(set! +point-and-click +#f\)z#(set-point-and-click! 'none))r   r   )r   r   r   r   r     s    )r   r%   r#   z6Stems: flag-style -> stroke-style; style -> flag-stylec             C   s.   t dd| } t dd| } t dd| } | S )Nz
flag-stylezstroke-stylezStem([ ]+)\\override #'stylezStem \\override #'flag-stylezStem([ ]+)\\set([ ]+)#'stylezStem \\set #'flag-style)r   r   )r   r   r   r   r      s    c             C   s   dt | d S )Nz(make-music-by-name '%sEvent)r   )rU   r9   )r;   r   r   r   subst_req_name*  s    rx   )r   r&   r   z;ly-make-music foo_bar_req -> make-music-by-name FooBarEventc             C   s    t dt| } t dd| } | S )Nz'\(ly-make-music *"([A-Z][a-z_]+)_req"\)ZRequest_chordZ
EventChord)r   r   rx   )r   r   r   r   r   .  s    
ZTextSpanEventZDecrescendoEventZCrescendoEventZSustainPedalEventZ	SlurEventZUnaCordaEventZSostenutoEvent)textZdecrescendoZ	crescendoZSustainZslurZUnaCordaZ	Sostenutoc             C   s4   d}t d| drd}t| d }d||f S )NZSTOPstartr   ZSTARTr   z(make-span-event '%s %s))r   r   r9   spanner_subst)r;   stypeZmtyper   r   r   subst_ev_nameA  s
    r}   c             C   s   dt |  S )Nz = #%s)r}   )r;   r   r   r   subst_definition_ev_nameI  s    r~   c             C   s   t | }d| S )Nz#(ly-export %s))r}   )r;   r   r   r   r   subst_inline_ev_nameM  s    r   c             C   s   dt |  S )Nz  = #(make-event-chord (list %s)))r}   )r;   r   r   r   subst_csp_definitionR  s    r   c             C   s   dt |  S )Nz)#(ly-export (make-event-chord (list %s))))r}   )r;   r   r   r   subst_csp_inlineV  s    r   )r   r&   r   zL\\spanrequest -> #(make-span-event .. ), \script -> #(make-articulation .. )c             C   sf   t dt| } t dt| } t dt| } t dt| } t dd| } t dd| } t d	d
| } | S )Nz& *= *\\spanrequest *([^ ]+) *"([^"]+)"z!\\spanrequest *([^ ]+) *"([^"]+)"z- *= *\\commandspanrequest *([^ ]+) *"([^"]+)"z(\\commandspanrequest *([^ ]+) *"([^"]+)"zly-id z
ly-import z *= *\\script "([^"]+)"z = #(make-articulation "\1")z\\script "([^"]+)"z%#(ly-export (make-articulation "\1")))r   r   r~   r   r   r   )r   r   r   r   r   Z  s    



)r   r&   r    z
ly- -> ly:c             C   sv   t dd| } ddddddd	d
dddddddddddddddddddg}dd| }t |d| } t dd | } | S )!Nz\(ly-z(ly:z
duration\?zfont-metric\?z
molecule\?zmoment\?zmusic\?zpitch\?zmake-durationzmusic-duration-lengthzduration-logzduration-dotcountZintlog2zduration-factorztranspose-key-alistz
get-systemzget-broken-intozget-originalzset-point-and-click!zmake-momentz
make-pitchzpitch-octavezpitch-alterationzpitch-notenamezpitch-semitoneszpitch<\?zdir\?zmusic-duration-compressz\b(%s)|zly:\1zset-point-and-click)r   r   join)r   ZchangedZorigrer   r   r   r   m  s@    )r   r&   r!   z<< >> -> < <  > >c             C   s0   t d| r| S t dd| } t dd| } | S )Nznew-chords-donez<<z< <z>>z> >)r   r   r   )r   r   r   r   r     s
    )r   r&   r#   z$\transpose TO -> \transpose FROM  TOc             C   s    t dd| } t dd| } | S )Nz\\transposez\\transpose c'z\\transpose c' *([a-z]+)'z\\transpose c \1)r   r   )r   r   r   r   r     s    )r   r&   r%   znote\\script -> note-\scriptc             C   s<   ddddddddd	d
ddg}d |}td| d| } | S )NZarpeggior\   r[   r   pZppZpppfpZffZmfZmpZsfzr   z([^_^-])\\(%s)\bz\1-\\\2)r   r   r   )r   Zkwsorigstrr   r   r   r     s    
)r   r&   r'   z=\property ChordName #'style -> #(set-chord-name-style 'style)c             C   s    t dd| } t dd| } | S )NzO\\property *ChordNames *\. *ChordName *\\(set|override) *#'style *= *#('[a-z]+)z#(set-chord-name-style \2)z8\\property *ChordNames *\. *ChordName *\\revert *#'styler"   )r   r   )r   r   r   r   r     s
    )r   r&      z"transpose-pitch -> pitch-transposec             C   s   t dd| } | S )Nzly:transpose-pitchzly:pitch-transpose)r   r   )r   r   r   r   r     s    )r   r&   r*   z&ly:XX-molecule-YY -> ly:molecule-XX-YYc             C   sJ   t dd| } t dd| } t dd| } t dd| } t d	d
| } | S )Nzly:get-molecule-extentzly:molecule-get-extentzly:set-molecule-extent!zly:molecule-set-extent!zly:add-moleculezly:molecule-addzly:combine-molecule-at-edgezly:molecule-combine-at-edgezly:align-to!zly:molecule-align-to!)r   r   )r   r   r   r   r     s    )r   r&      z#linewidth = -1 -> raggedright = ##tc             C   s   t dd| } | S )Nz.linewidth *= *-[0-9.]+ *(\\mm|\\cm|\\in|\\pt)?zraggedright = ##t)r   r   )r   r   r   r   r     s    
)r   r&   r,   zdivisiomaior -> divisioMaiorc             C   s.   t dd| } t dd| } t dd| } | S )NZdivisiomaiorZdivisioMaiorZdivisiominimaZdivisioMinimaZdivisiomaximaZdivisioMaxima)r   r   )r   r   r   r   r     s    )r   r&   r4   zSkip_req  -> Skip_eventc             C   s   t dd| } | S )NZSkip_req_swallow_translatorZSkip_event_swallow_translator)r   r   )r   r   r   r   r     s    )r   r&   r-   zAgroupOpen/Close  -> start/stopGroup, #'outer  -> #'enclose-boundsc             C   s.   t dd| } t dd| } t dd| } | S )NZ	groupOpenZ
startGroupZ
groupCloseZ	stopGroupz#'outerz#'enclose-bounds)r   r   )r   r   r   r   r     s    )r   r&   r   z	remove %sGraceContextc             C   sD   t d| r2ttd  ttd  tt t t dd| } | S )Nz\\GraceContextr   )r   z#(add-to-grace-init .. )ZHaraKiriStaffContextZRemoveEmptyStaffContext)r   r   r	   r   FROM_TOr   r   r   )r   r   r   r   r     s    )r   r&      z#'type -> #'stylec             C   s   t dd| } | S )Nz(set|override|revert) *#'typez
\1 #'style)r   r   )r   r   r   r   r     s
    )r   r&   r5   zbarNonAuto -> automaticBarsc             C   s    t dd| } t dd| } | S )NzbarNonAuto *= *##tzautomaticBars = ##fzbarNonAuto *= *##fzautomaticBars = ##t)r   r   )r   r   r   r   r     s    )r   r&      zcluster syntaxc             C   s.   t d| r*tttd  tt t | S )Nz-(start|stop)Clusterzcluster syntax)r   r   r	   r   r
   r   r   )r   r   r   r   r     s
    )r   r&      znew Pedal style syntaxc             C   s    t dd| } t dd| } | S )NzV\\property *Staff\.(Sustain|Sostenuto|UnaCorda)Pedal *\\(override|set) *#'pedal-type *z\\property Staff.pedal\1Style zL\\property *Staff\.(Sustain|Sostenuto|UnaCorda)Pedal *\\revert *#'pedal-typer"   )r   r   )r   r   r   r   r   (  s
    
c             C   s  |  d}d| }td|r"|S td|r2|S td|rB|S g }|fdd}td||}d	}x.|D ]&}|d	krz|}||krjd|  d S qjW d	g}d	g}d	g}	d	}
x4|
|kr|}
|	fd
d}td||}|fdd}td||}|	fdd}|	fdd}td||}td||}|	fdd}td||}|	fdd}td||}|	fdd}td||}td||}|	fd d!}td"||}td#||}td$||}td%||}|	fd&d'}td||}qW d	|	d	| d	| }d(|||f S ))Nr   z<%s>z\\\\z
\\propertyz^\s*\)?\s*\\[a-zA-Z]+c             S   s   | | d | dS )Nr   r   )r   r9   )mdursr   r   r   sub_durs@  s    zsub_chord.<locals>.sub_dursz([a-z]+[,'!? ]*)([0-9]+\.*)r"   c             S   s&   |  d}||kr|| |  dS )Nr   r   )r9   r   )r   	slur_strsZtrr   r   r   sub_tremolosU  s    

zsub_chord.<locals>.sub_tremolosz([a-z]+[',!? ]*)(:[0-9]+)c             S   s   | d d| d S )Nz \! r   )r   r9   )r   dynsr   r   r   sub_dyn_end^  s    
zsub_chord.<locals>.sub_dyn_endz(\\!)\s*([a-z]+)c             S   s   d|kr| d | dS )Nz-))r   )r   r9   )r   r   r   r   r   	sub_slursd  s    
zsub_chord.<locals>.sub_slursc             S   s   d|kr| d | dS )Nz-\)z\)r   )r   r9   )r   r   r   r   r   sub_p_slursi  s    
zsub_chord.<locals>.sub_p_slursz\)[ ]*([a-z]+)z\\\)[ ]*([a-z]+)c             S   s   d|kr| d | dS )Nz-((r   )r   r9   )r   r   r   r   r   sub_begin_slursq  s    
z"sub_chord.<locals>.sub_begin_slursz([a-z]+[,'!?0-9 ]*)\(c             S   s   d|kr| d | dS )Nz-\(z\(r   )r   r9   )r   r   r   r   r   sub_begin_p_slursy  s    
z$sub_chord.<locals>.sub_begin_p_slursz([a-z]+[,'!?0-9 ]*)\\\(c             S   sH   |  d}|dkr|d n&|dkr2|d n|dkrD|d dS )	Nr   z@STARTCRESC@z\<z@STARTDECRESC@z\>z-?\\!z\!r"   )r9   r   )r   r   r   r   r   r   sub_dyns  s    

zsub_chord.<locals>.sub_dynsz@STARTCRESC@z-?\\!c             S   s    |  d}||kr|| dS )Nr   r"   )r9   r   )r   r   ar   r   r   sub_articulations  s    

z$sub_chord.<locals>.sub_articulationsz([_^-]\@ACCENT\@)z([_^-]\\[a-z]+)z([_^-][>_.+|^-])z([_^-]"[^"]+")c             S   s   | d | dS )Nz \)r   )r   r9   )r   r   r   r   r   
sub_pslurs  s    
zsub_chord.<locals>.sub_pslursz@STARTCHORD@%s@ENDCHORD@%s%s)r9   r   r   r;   r   r   )r   r   r   r   r   Zdur_strdZ
pslur_strsr   r   Zlast_strr   r   r   r   r   r   r   r   r   suffixr   r   r   	sub_chord1  sl    


r   c             C   s  d}d}d}d}d}t || r$| S t dd| } t dd| } t dd	| } t d
d| } t dd| } t dt| } t dd| } t dd| } t dd| | } t dd| | } t d	d| } t dd
| } t dd| } t d|| } t d|| } t dd| } | S )N><z<<z>>z%% new-chords-done %%z@STARTCHORD@z
@ENDCHORD@z\\<z@STARTCRESC@z\\>z@STARTDECRESC@z([_^-])>z
\1@ACCENT@z<([^<>{}]+)>z(\[ *(@STARTCHORD@[^@]+@ENDCHORD@[0-9.]*)z\1-[z)\\! *(@STARTCHORD@[^@]+@ENDCHORD@[0-9.]*)z\1-\\!z<([^?])z%s\1z>([^?])z\\context *Voice *@STARTCHORD@z@ACCENT@)r   r   r   r   )r   ZsimendZsimstartZ
chordstartZchordendZ
marker_strr   r   r   
sub_chords  s6    r   z([-^_]|\\mark)\s*(#\s*'\s*)\(z\(\s*music\bz\(\s*columns\bz\(\s*([a-zA-Z]+)z\(z\)c             C   s  d}t | }x|r|| d |d  d }| |dd  } d}td| }x<|D ]4}| dkrp|d }n|d }|dkrV| }P qVW | d | }td|}td	|}t	d
|}t
d	|}td|}|| }| |d  } t | }qW ||  }|S )Nr"   r   z \markupr   r   z[()]r   z{\\musicglyph{z{\\\1r(   )markup_startr   endr   finditerr9   
musicglyphr   columnssubmarkup_startleftparrightpar)r   resultr;   nesting_levelparsparZ
markup_endZmarkupr   r   r   text_markup  s2    


r   c             C   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nz,([^-])\[ *(\\?\)?[a-z]+[,']*[!?]?[0-9:]*\.*)z\1 \2[z(([^-])\\\) *([a-z]+[,']*[!?]?[0-9:]*\.*)z\1 \2\\)z(([^-\\])\) *([a-z]+[,']*[!?]?[0-9:]*\.*)z\1 \2)z'([^-])\\! *([a-z]+[,']*[!?]?[0-9:]*\.*)z\1 \2\\!)r   r   )r   r   r   r   articulation_substitute  s    r   z!("(?:[^"\\]|\\.)*")|(#\s*'?\s*\()c             C   s   d}t | }x|r| d |  }|t| }|dr\||d }| |dd  } nz| | d  } d}td| }x<|D ]4}| dkr|d }n|d }|dkr| }P qW || d |  }| |d  } t | }qW |t|  }|S )Nr"   r   r   z[()]r   )string_or_schemer   rz   r   r9   r   r   r   )r   r   r;   Zprevious_chunkr   r   r   Z
scheme_endr   r   r   smarter_articulation_subst  s.    



r   c             C   s   t d| rd|  } | S )Nz
\\relativez#(ly:set-option 'old-relative)
)r   r   )r   r   r   r   conv_relative0  s    r   )r   r   r   zSNew relative mode,
Postfix articulations, new text markup syntax, new chord syntax.c             C   s@   t dd| } t| } t| } t| } t| } t dd| } | S )Nz#'\(\)z	@SCM_EOL@z#'())r   r   r   r   r   r   )r   r   r   r   r   7  s    )r   r   r   zRemove - before articulationc             C   s   t d| r&ttd  tt t t dd| } t dd| } t dd| } t dd	| } t d
d| } t dd| } t dd| } t dd| } | S )Nz
font-stylez	-\\markupz	@\\markupz-\\z\\z-\)r   z-\(r   z-\[[z-\]]z-~~)r   r   r	   r   r   r   r   )r   r   r   r   r   D  s    )r   r   r   z\newcontext -> \newc             C   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nzly:set-context-propertyzly:set-context-property!z\\newcontextz\\newz\\grace[	
 ]*([^{ ]+)z\\grace { \1 }z\\grace[	
 ]*{([^}]+)}z|\\grace {
\\property Voice.Stem \\override #'stroke-style = #"grace"
  \1
  \\property Voice.Stem \\revert #'stroke-style }
)r   r   )r   r   r   r   r   W  s    )r   r   r    z%s misspellingz\acciaccaturaz4, fingerHorizontalDirection -> fingeringOrientationsc             C   sT   t dd| } t d| r4ttd  tt t t dd| } t dd| } | S )NZaccacciaturaZacciaccaturazcontext-spec-musicz(fingerHorizontalDirection *= *#(LEFT|-1)z(fingeringOrientations = #'(up down left)z(fingerHorizontalDirection *= *#(RIGHT|1)z)fingeringOrientations = #'(up down right))r   r   r   r	   r   r   r   )r   r   r   r   r   g  s    )r   r   r!   zSwap < > and << >>c             C   s  t d| rttd dd }t d|| } t dd| } t dd	| } t d
d| } t dd| } t dd| } t dd| } t dd| } t d	d| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } | S )Nz\figuresz9attempting automatic \figures conversion.  Check results!c             S   s.   |  d}tdd|}tdd|}d| S )Nr   r   z	@FIGOPEN@r   z
@FIGCLOSE@z\figures { %s })r9   r   r   )r   r   r   r   r   figures_replace  s    
zconv.<locals>.figures_replacez\\figures[ \t\n]*{([^}]+)}z\\<z@STARTCRESC@z\\>z@STARTDECRESC@z([-^_])>z
\1@ACCENT@z<<z@STARTCHORD@z>>z
@ENDCHORD@r   z
@ENDSIMUL@r   z@STARTSIMUL@z\>z\<z@ACCENT@z	@FIGOPEN@z
@FIGCLOSE@)r   r   r   r
   r   )r   r   r   r   r   r   z  s*    )r   r   r#   z1HaraKiriVerticalGroup -> RemoveEmptyVerticalGroupc             C   s   t dd| } | S )NZHaraKiriVerticalGroupRemoveEmptyVerticalGroup)r   r   )r   r   r   r   r     s    )r   r   r%   zly:get-fontc             C   sh   t d| r2ttd  ttd  tt t t d| rdttd  ttd td t | S )Nzly:get-font)z/(ly:paper-get-font (ly:grob-get-paper foo) .. )z/(ly:paper-get-font (ly:grob-get-paper foo) .. )z
\\pitch *#z\pitchz3Use Scheme code to construct arbitrary note events.r   )r   r   r	   r   r   r   r   r
   )r   r   r   r   r     s    )r   r   r&   zbuse symbolic constants for alterations,
remove \outputproperty, move ly:verbose into ly:get-optionc             C   s   dd }t d|| } t dd| } t d| }|rZttd|d|d	f  t t d
| srt d| rttd  ttd t | S )Nc             S   s8   |  d}dddddd| }d|  d	|  d
|f S )Nr    ZFLATzDOUBLE-FLATNATURALSHARPzDOUBLE-SHARP)z-1z-2rN   12z(ly:make-pitch %s %s %s)r   r   )r9   )r   Zaltr   r   r   sub_alteration  s    
zconv.<locals>.sub_alterationz4\(ly:make-pitch *([0-9-]+) *([0-9-]+) *([0-9-]+) *\)z
ly:verbosezly:get-option 'verbosez(\\outputproperty #([^#]+)[	
 ]*#'([^ ]+)z\outputproperty found,
Please hand-edit, using

  \applyoutput #(outputproperty-compatibility %s '%s <GROB PROPERTY VALUE>)

as a substitution text.r   r   z ly:(make-pitch|pitch-alteration)ZkeySignatureZpitcheszThe alteration field of Scheme pitches was multiplied by 2
to support quarter tone accidentals.  You must update the following constructs manually:

* calls of ly:make-pitch and ly:pitch-alteration
* keySignature settings made with \property
)r   r   r   r	   r
   r9   r   r   )r   r   r   r   r   r   r     s"    )r   r      zdash-length -> dash-fractionc             C   s6   t d| r2ttd  ttd  tt t | S )Nzdash-length)zdash-lengthzdash-fraction)r   r   r	   r   r   r   r   )r   r   r   r   r     s    )r   r   r   zfont-relative-size -> font-sizec             C   s(   dd }t d|| } t dd| } | S )Nc             S   s   ddt | d  S )Nz#'font-size = #%dr   r   )intr9   )r;   r   r   r   rr     s    zconv.<locals>.funcz(#'font-relative-size\s*=\s*#\+?([0-9-]+)z#'font-family\s*=\s*#'ancientz#'font-family = #'music)r   r   )r   rr   r   r   r   r     s
    )r   r   r   z&ly:get-music-length -> ly:music-lengthc             C   s   t dd| } | S )Nzly:get-music-lengthzly:music-length)r   r   )r   r   r   r   r     s    )r   r   r    zstanza -> instrumentc             C   s   t dd| } | S )Nz	\.\s+stz=z. instr )r   r   )r   r   r   r   r     s    )r   r   r!   zAremoval of automaticMelismata; use melismaBusyProperties instead.c             C   s   dd }t d|| } | S )Nc             S   sL   |  d}|  d}|dkr0|dkr(dS d| S |dksDtd| d	| S )
Nr   r   tZScorer"   z* \property %s.melismaBusyProperties \unsetr   z%Value must be ##t or ##f and not ##%sz4\property %s.melismaBusyProperties = #'(melismaBusy))r9   AssertionError)r;   cbr   r   r   rr     s    

zconv.<locals>.funcz?\\property ([a-zA-Z]+)\s*\.\s*automaticMelismata\s*=\s*##([ft]))r   r   )r   rr   r   r   r   r     s    
)r   r   r&   z"\translator Staff -> \change Staffc             C   s   t dd| } | S )Nz\\translator\s+([a-zA-Z]+)z\\change \1)r   r   )r   r   r   r   r     s    )r   r   r'   z\newaddlyrics -> \lyricstoc             C   s   t dd| } | S )Nz\\newaddlyricsz
\\lyricsto)r   r   )r   r   r   r   r     s    )r   r   r   zO\include "paper16.ly" -> #(set-staff-size 16)
\note #3 #1 #1 -> \note #"8." #1
c             C   s(   t dd| } dd }t d|| } | S )Nz&\\include\s*"paper([0-9]+)(-init)?.ly"z#(set-staff-size \1)c             S   sd   d}t | d}t | d}|dkr6dd|>  }ndddd	| }|d
| 7 }d|| df S )Nr"   r   r   r   z%dbrevelongamaxima).z\note #"%s" #%sr    )r   r9   )r;   durlogdotsr   r   r   sub_note'  s    zconv.<locals>.sub_notez-\\note\s+#([0-9-]+)\s+#([0-9]+)\s+#([0-9.-]+))r   r   )r   r   r   r   r   r      s    )r   r   r)   zOttavaSpanner -> OttavaBracketc             C   s   t dd| } | S )NZOttavaSpannerOttavaBracket)r   r   )r   r   r   r   r   <  s    )r   r   r*   z'set-staff-size -> set-global-staff-sizec             C   s   t dd| } | S )Nz\(set-staff-size z(set-global-staff-size )r   r   )r   r   r   r   r   B  s    )r   r   r+   z#style = dotted -> dash-fraction = 0c             C   s   t dd| } | S )Nz#'style\s*=\s*#'dotted-linez#'dash-fraction = #0.0 )r   r   )r   r   r   r   r   H  s    )r   r   r   z'LyricsVoice . instr(ument) -> vocalNamec             C   s    t dd| } t dd| } | S )Nz-LyricsVoice\s*\.\s*instrument\s*=\s*("[^"]*")zLyricsVoice . vocalName = \1z(LyricsVoice\s*\.\s*instr\s*=\s*("[^"]*")zLyricsVoice . vocNam = \1)r   r   )r   r   r   r   r   O  s
    )r   r   r,   z2\musicglyph #"accidentals-NUM" -> \sharp/flat/etc.c             C   s   dd }t d|| } | S )Nc          
   S   s*   ddddddddd	d
	}d||  d  S )NZdoublesharpZthreeqsharpZsharpZ	semisharpZnaturalZsemiflatZflatZ
threeqflatZ
doubleflat)	43r   r   rN   z-1z-2z-3z-4z\%sr   )r9   )r   r   r   r   r   sub_acc[  s    zconv.<locals>.sub_accz'\\musicglyph\s*#"accidentals-([0-9-]+)")r   r   )r   r   r   r   r   r   Y  s    )r   r   r4   z-\partcombine syntax change to \newpartcombinec             C   s8   t d| r&ttd  tt t t dd| } | S )Nz\\partcombinez\partcombinezu\\context\s+Voice\s*=\s*one\s*\\partcombine\s+Voice\s*\\context\s+Thread\s*=\s*one(.*)\s*\\context\s+Thread\s*=\s*twoz\\newpartcombine
\1
)r   r   r	   r   r   r   r   )r   r   r   r   r   m  s    )r   r   r-   zB\newpartcombine -> \partcombine,
\autochange Staff -> \autochange
c             C   s    t dd| } t dd| } | S )Nz\\newpartcombinez\\partcombinez\\autochange\s+Staffz\\autochange )r   r   )r   r   r   r   r   }  s    )r   r   r   z|Drum notation changes, Removing \chordmodifiers, \notenames.
Harmonic notes. Thread context removed. Lyrics context removed.c             C   s*  t d| rttd t dd| } t dd| } t dd| } t d	d
| } t dd| } t d| r~ttdtd  t dd| } t d| rttdd  t dd| } t dd| } t dd| } t d| rttdd  t dd| } t dd| } t dd| } t dd| } | S )Nzinclude "drumpitchz,Drums found. Enclose drum notes in \drummodez\\include "drumpitch-init.ly"r"   z\\pitchnames zpitchnames = z\\chordmodifiers zchordmodifiers = z\bdrums\b\s*=zdrumContents = z	\\drums\bz\\drumContents zdrums->paperz 
%s found. Check file manually!
zDrum notationz'\\apply\s+#\(drums->paper\s+'([a-z]+)\)z/\\property DrumStaff.drumStyleTable = #\1-styleZThreadzy(\\once\s*)?\\property\s+Thread\s*\.\s*NoteHead\s*\\(set|override)\s*#'style\s*=\s*#'harmonic\s+([a-z]+[,'=]*)([0-9]*\.*)z<\3\\harmonic>\4z\\new Threadz\\context VoiceZVoicezLyricsLyricsrM   zL@ricsVoicez
\bLyrics\bZLyricsContextZLyricsVoiceContext)r   r   r	   r
   r   )r   r   r   r   r     s4    
)r   r   r   znonevent-skip -> skip-musicc             C   s   t dd| } | S )Nznonevent-skipz
skip-music)r   r   )r   r   r   r   r     s    )r   r   r   zmolecule-callback -> print-function,
brew_molecule -> print
brew-new-markup-molecule -> Text_item::print
LyricsVoice -> Lyrics
tupletInvisible -> TupletBracket \set #'transparent
%s.
zGrob::preset_extentc             C   sX   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } | S )Nzmolecule-callbackzprint-functionZbrew_moleculeprintzbrew-new-markup-moleculezText_item::printrM   r   ZtupletInvisiblez!TupletBracket \\set #'transparentz`\\property\s+[a-zA-Z]+\s*\.\s*[a-zA-Z]+\s*\\set\s*#'X-extent-callback\s*=\s*#Grob::preset_extentr"   )r   r   )r   r   r   r   r     s    )r   r   r   zU%s
        \set A.B = #C , \unset A.B
        \override A.B #C = #D, \revert A.B #C

z!new syntax for property settings:c             C   s   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } | S )Nz(\\property[^=]+)=\s*([-0-9]+)z\1= #\2z9\\property\s+([^. ]+)\s*\.\s*([^\\=]+)\s*\\(set|override)z\\overrid@ \1.\2 z.\\property\s+([^. ]+)\s*\.\s*([^\\= ]+)\s*=\s*z\\s@t \1.\2 = z1\\property\s+([^. ]+)\s*\.\s*([^\\= ]+)\s*\\unsetz\\uns@t \1.\2 zD\\property\s+([^. ]+)\s*\.\s*([^\\= ]+)\s*\\revert\s*#'([-a-z0-9_]+)z\\rev@rt \1.\2 #'\3zVoice\.r"   zLyrics\.zChordNames\.zrev@rtrevertzs@tsetzoverrid@overrideZmoleculestencilZMoleculeZStencil)r   r   )r   r   r   r   r     s&    )r   r   r5   z)Property setting syntax in \translator{ }c             C   s0   dd }t d|| } dd }t d|| } | S )Nc             S   s8   |  d}tdd|}tdd|}tdd|}|S )Nr   z\s([a-zA-Z]+)\s*\\overridez \\override \1z\s([a-zA-Z]+)\s*\\setz\s([a-zA-Z]+)\s*\\revertz \\revert \1)r9   r   r   )r;   r   r   r   r   subst_in_trans  s    
zconv.<locals>.subst_in_transz\\(translator|with)\s*{[^}]+}c             S   s<   |  d}|  }|r(d|d d  }nd}||d< d| S )Ncontextz '%sr   r"   zA#(override-auto-beam-setting %(prop)s %(num)s %(den)s%(context)s))r9   	groupdict)r   r   r   r   r   r   sub_abs  s    
zconv.<locals>.sub_absz\\override\s*(?P<context>[a-zA-Z]+\s*\.\s*)?autoBeamSettings\s*#(?P<prop>[^=]+)\s*=\s*#\(ly:make-moment\s+(?P<num>\d+)\s+(?P<den>\d)\s*\))r   r   )r   r   r   r   r   r   r     s    	)r   r   r   zmusic-list? -> ly:music-list?c             C   s    t dd| } t dd| } | S )Nzmusic-list\?zly:music-list?z\|\s*~z~ |)r   r   )r   r   r   r   r   	  s    )r   r      zScheme grob function renamingc             C   s   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t d| rttd  ttdd  t t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd | } t d!d"| } t d#d$| } t d%d&| } | S )'Nzly:get-spanner-boundzly:spanner-get-boundzly:get-extentzly:grob-extentzly:get-systemzly:grob-systemzly:get-originalzly:grob-originalzly:get-parentzly:grob-parentzly:get-broken-intozly:spanner-broken-intoZMelisma_engraverZMelisma_translatorzly:get-paper-variablezly:paper-get-variablezUse %s
z"(ly:paper-lookup (ly:grob-paper ))z\\defaultAccidentalsz #(set-accidental-style 'default)z\\voiceAccidentalsz#(set-accidental-style 'voice)z\\modernAccidentalsz#(set-accidental-style 'modern)z\\modernCautionariesz*#(set-accidental-style 'modern-cautionary)z\\modernVoiceAccidentalz%#(set-accidental-style 'modern-voice)z\\modernVoiceCautionariesz0#(set-accidental-style 'modern-voice-cautionary)z\\pianoAccidentalsz#(set-accidental-style 'piano)z\\pianoCautionariesz)#(set-accidental-style 'piano-cautionary)z\\forgetAccidentalsz#(set-accidental-style 'forget)z\\noResetKeyz!#(set-accidental-style 'no-reset))r   r   r   r	   r   r
   r   )r   r   r   r   r     s:    )r   r      zMore Scheme function renamingc             C   sX   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } | S )Nzly:set-grob-property!zly:grob-set-property!zly:set-mus-property!zly:music-set-property!zly:set-context-property!zly:context-set-property!zly:get-grob-propertyzly:grob-propertyzly:get-mus-propertyzly:music-propertyzly:get-context-propertyzly:context-property)r   r   )r   r   r   r   r   2  s    )r   r      zproperty transposing -> tuningc             C   s   dd }t d|| } | S )Nc                s   t t| dd\}  fdddD }t|d } |d  }d| }|d	d
dddg|d  7 }|d7 }|dk r|| d 7 }n|dkr||d 7 }d| S )Nr   r)   c                s   g | ]}| kr|qS r   r   ).0rP   )gr   r   
<listcomp>B  s    z'conv.<locals>.subst.<locals>.<listcomp>)r   r   r!   r#   r&   r   r   r)   r   r   ZcdefgabZesesZesr"   isZisisr   ,'z\transposition %s )divmodr   r9   len)r   oZlower_pitchesr   r   r   )r   r   subst?  s    zconv.<locals>.substz6\\set ([A-Za-z]+\s*\.\s*)?transposing\s*=\s*#([-0-9]+))r   r   )r   r   r   r   r   r   =  s    )r   r   r   zImake-music-by-name -> make-music,
new syntax for setting \arpeggioBracketc             C   s    t dd| } t dd| } | S )Nzmake-music-by-namez
make-musiczB\\override\s+.*Arpeggio\s+#.print-function\s+=\s+\\arpeggioBracketz\\arpeggioBracket)r   r   )r   r   r   r   r   U  s    )r   r      z1\center -> \center-align, \translator -> \contextc             C   s    t dd| } t dd| } | S )Nz\\center([^-])z\\center-align\1z\\translatorz	\\context)r   r   )r   r   r   r   r   ^  s    )r   r      a  \threeq{flat,sharp} -> \sesqui{flat,sharp}
ly:get-mutable-properties -> ly:mutable-music-properties
centralCPosition -> middleCPosition
ly:unset-context-property -> ly:context-unset-property
ly:translator-find -> ly:context-find
ly:get-stencil-extent -> ly:stencil-extent
c             C   sX   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } | S )Nz\\threeq(flat|sharp)z
\\sesqui\1zly:stencil-get-extentzly:stencil-extentzly:translator-findzly:context-findzly:unset-context-propertyzly:context-unset-propertyzly:get-mutable-propertieszly:mutable-music-propertiesZcentralCPositionZmiddleCPosition)r   r   )r   r   r   r   r   e  s    )r   r      zremove \alias Timingc             C   s   t dd| } | S )Nz\\alias\s*"?Timing"?r"   )r   r   )r   r   r   r   r   |  s    )r   r   rl   z&breakAlignOrder -> break-align-orders.c             C   s   t dd| } | S )NzJ(\\set\s+)?(?P<context>(Score\.)?)breakAlignOrder\s*=\s*#'(?P<list>[^\)]+)zX\n\\override \g<context>BreakAlignment #'break-align-orders = #(make-vector 3 '\g<list>))r   r   )r   r   r   r   r     s    )r   r   "   z)set-paper-size -> set-default-paper-size.c             C   s   t dd| } | S )Nz\(set-paper-sizez(set-default-paper-size)r   r   )r   r   r   r   r     s    )r   r   $   z:ly:mutable-music-properties -> ly:music-mutable-propertiesc             C   s   t dd| } | S )Nzly:mutable-music-propertieszly:music-mutable-properties)r   r   )r   r   r   r   r     s    )r   r   r   c             C   s   | S )Nr   )r   r   r   r   r     s    )r   r    r   z\apply -> \applymusicc             C   s   t dd| S )Nz	\\apply\bz\\applymusic)r   r   )r   r   r   r   r     s    )r   r    r   z\FooContext -> \Fooc             C   sb   t d| r,ttd  tt ttd t dd| } dd }t d|| } t dd	| } | S )
NZ
textheightzZPage layout has been changed, using paper size and margins.
textheight is no longer used.
z\\OrchestralScoreContextz\\Scorec             S   s&   |  ddkrd|  d S |  dS )Nr   )ZRemoveEmptyStaffZAncientRemoveEmptyStaffContextZEasyNotation\r   )r9   )r   r   r   r   rr     s    zconv.<locals>.funcz\\([a-zA-Z]+)Context\bzly:paper-lookupzly:output-def-lookup)r   r   r	   r   r   r
   r   )r   rr   r   r   r   r     s    )r   r    r!   z\notesc             C   s   t dd| } | S )Nz	\\notes\br"   )r   r   )r   r   r   r   r     s    )r   r    r%   z lastpagefill -> raggedlastbottomc             C   s   t dd| } | S )Nzlastpagefill\s*=\s*"?1"zraggedlastbottom = ##t)r   r   )r   r   r   r   r     s    )r   r    r   z2remove \consistsend, strip \lyrics from \lyricsto.c             C   s    t dd| } t dd| } | S )Nz\\consistsendz
\\consistsz9\\lyricsto\s+("?[a-zA-Z]+"?)(\s*\\new Lyrics\s*)?\\lyricsz\\lyricsto \1 \2)r   r   )r   r   r   r   r     s    )r   r    r   z=neo_mensural -> neomensural, if-text-padding -> bound-paddingc             C   s    t dd| } t dd| } | S )NZneo_mensuralZneomensuralzif-text-paddingzbound-padding)r   r   )r   r   r   r   r     s    )r   r    r'   z5\addlyrics -> \oldaddlyrics, \newlyrics -> \addlyricsc             C   s4   t dd| } t dd| } t d| r0td | S )Nz\\addlyricsz\\oldaddlyricsz\\newlyricsz\\override\s*TextSpannerzM
Warning: TextSpanner has been split into DynamicTextSpanner and TextSpanner
)r   r   r   r	   )r   r   r   r   r     s    )r   r    r   z$\setMmRestFermata -> ^\fermataMarkupc             C   s   t dd| } | S )Nz!\\setMmRestFermata\s+(R[0-9.*/]*)z\1^\\fermataMarkup)r   r   )r   r   r   r   r     s    )r   r    r)   z{\newpage -> \pageBreak, junk \script{up,down,both},
soloADue -> printPartCombineTexts, #notes-to-clusters -> \makeClusters
c             C   sf   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } | S )Nz	\\newpagez\\pageBreakz
\\scriptUpzO{
\\override TextScript  #'direction = #1
\\override Script  #'direction = #1
}z\\scriptDownzU{
  \\override TextScript  #'direction = #-1
  \\override Script  #'direction = #-1
}z\\scriptBothzE{
  \\revert TextScript  #'direction
  \\revert Script  #'direction
}ZsoloADueZprintPartCombineTextsz!\\applymusic\s*#notes-to-clustersz\\makeClusterszpagenumber\s*=zfirstpagenumber = )r   r   )r   r   r   r   r     s    )r   r    r,   zS\foo -> \foomode (for chords, notes, etc.)
fold \new FooContext \foomode into \foo.c             C   s   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } | S )Nz
\\chords\bz\\chordmodez
\\lyrics\bz\\lyricmodez\\figures\bz\\figuremodez	\\notes\bz
\\notemodez	\\drums\bz
\\drummodez\\chordmode\s*\\new ChordNamesz\\chordsz\\new ChordNames\s*\\chordmodez \\new FiguredBass\s*\\figuremodez	\\figuresz\\figuremode\s*\new FiguredBassz\\new DrumStaff\s*\\drummodez\\drumsz\\drummode\s*\\new DrumStaff)r   r   )r   r   r   r   r     s    )r   r    r4   zlslurBoth -> slurNeutral, stemBoth -> stemNeutral, etc.
\applymusic #(remove-tag 'foo) -> \removeWithTag 'fooc             C   s    t dd| } t dd| } | S )Nz>(slur|stem|phrasingSlur|tie|dynamic|dots|tuplet|arpeggio|)Bothz	\1Neutralz.\\applymusic\s*#\(remove-tag\s*'([a-z-0-9]+)\)z\\removeWithTag #'\1)r   r   )r   r   r   r   r     s
    
)r   r    r-   zText_item -> Text_interfacec             C   s   t dd| } | S )NZ	Text_itemZText_interface)r   r   )r   r   r   r   r     s    )r   r    r   z#paper -> layout, bookpaper -> paperc             C   sF   t dd| } t dd| } t d| r4ttd t dd| } | S )Nz\\paperz\\layoutz\\bookpaperzpaper-set-staff-sizezdstaff size should be changed at top-level
with

  #(set-global-staff-size <STAFF-HEIGHT-IN-POINT>)

z#\(paper-set-staff-sizez@%Use set-global-staff-size at toplevel
% #(layout-set-staff-size)r   r   r   r   r
   )r   r   r   r   r      s    )r   r    r5   z4\context Foo = NOTENAME -> \context Foo = "NOTENAME"c             C   s   t dd| } | S )Nz(\\context\s+([a-zA-Z]+)\s*=\s*([a-z]+)\sz\\context \1 = "\2" )r   r   )r   r   r   r   r   1  s    )r   r    r   zregularize other identifiersc             C   s   dd }t d|| } | S )Nc             S   s   t | dS )Nr   )rU   r9   )r   r   r   r   r   ;  s    zconv.<locals>.subz@(maintainer_email|maintainer_web|midi_stuff|gourlay_maxmeasures))r   r   )r   r   r   r   r   r   9  s    )r   r    r   z2petrucci_c1 -> petrucci-c1, 1style -> single-digitc             C   s    t dd| } t dd| } | S )NZpetrucci_c1zpetrucci-c1Z1stylezsingle-digit)r   r   )r   r   r   r   r   B  s    )r   r!   r   c             C   s   | S )Nr   )r   r   r   r   r   I  s    )r   r#   r   z\quote -> \quoteDuringc             C   s   t dd| } | S )Nz*\\quote\s+"?([a-zA-Z0-9]+)"?\s+([0-9.*/]+)z!\\quoteDuring #"\1" { \\skip \2 })r   r   )r   r   r   r   r   N  s    )r   r#   r   z"ly:import-module -> ly:module-copyc             C   s   t dd| } | S )Nzly:import-modulezly:module-copy)r   r   )r   r   r   r   r   V  s    )r   r#   r   z,\markup .. < .. > .. -> \markup .. { .. } ..c             C   sD   t dd| } t dd| } t dd| } dd }t d|| } | S )Nzl\\(column|fill-line|dir-column|center-align|right-align|left-align|bracketed-y-column)\s*<(([^>]|<[^>]*>)*)>z	\\\1 {\2}c             S   s   |  d}tdd|}|S )Nr   z((\\"|})\s*){z	 \line {)r9   r   r   )r   r   r   r   r   
get_markupf  s    
zconv.<locals>.get_markupz\\markup\s*{([^}]|{[^}]*})*})r   r   )r   r   r   r   r   r   ]  s    )r   r#   r    zEly:find-glyph-by-name -> ly:font-get-glyph, remove - from glyphnames.c             C   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nzly:find-glyph-by-namezly:font-get-glyphz"(scripts|clefs|accidentals)-z"\1.z'hufnagel-do-faz'hufnagel.do.faz<'(vaticana|hufnagel|medicaea|petrucci|neomensural|mensural)-z'\1.)r   r   )r   r   r   r   r   n  s    
)r   r#   r)   z'\set Slur #\'dashed = #X -> \slurDashedc             C   s   t dd| } | S )Nz7\\override\s+(Voice\.)?Slur #'dashed\s*=\s*#\d*(\.\d+)?z\\slurDashed)r   r   )r   r   r   r   r   x  s    )r   r#   r*   z@\encoding: smart recode latin1..utf-8. Remove ly:point-and-clickc             C   s(   dd }t d|| } t dd| } | S )Nc             S   s   |  d}|dkr|  dS ttd|   ttd td |dkr^ttd td nttd	d
|   td ttd td t d S )Nr   latin1r   z\encoding: %szLilyPond source must be UTF-8r   ZTeXzTry the texstrings backendzDo something like: %szrecode %s..utf-8 FILEzOr save as UTF-8 in your editor)r9   r	   r   r
   r   )r;   encodingr   r   r   rr     s    


zconv.<locals>.funcz$\\encoding\s+"?([a-zA-Z0-9]+)"?(\s+)z$#\(ly:set-point-and-click '[a-z-]+\)r"   )r   r   )r   rr   r   r   r   r     s    )r   r#   r4   zly:stencil-set-extent!c             C   s`   t d| r.ttd  ttdd  t t d| r\ttd  ttdd  t | S )Nzly:stencil-set-extent!zUse %s
z>(set! VAR (ly:make-stencil (ly:stencil-expr VAR) X-EXT Y-EXT))zly:stencil-align-to!z/(set! VAR (ly:stencil-aligned-to VAR AXIS DIR)))r   r   r	   r   r
   r   )r   r   r   r   r     s    )r   r#   r-   zly:warn -> ly:warningc             C   s   t dd| } | S )Nz	ly:warn\bz
ly:warning)r   r   )r   r   r   r   r     s    )r   r#   r   zwarn about auto beam settingsc             C   sF   t d| st d| rBtttd  ttd tt t | S )Nz$(override-|revert-)auto-beam-settingZautoBeamSettingszauto beam settingsz
Auto beam settings must now specify each interesting moment in a measure
explicitly; 1/4 is no longer multiplied to cover moments 1/2 and 3/4 too.
)r   r   r	   r   r
   r   r   )r   r   r   r   r     s    )r   r#   r   z>unfoldrepeats -> unfoldRepeats, compressmusic -> compressMusicc             C   s    t dd| } t dd| } | S )NZunfoldrepeatsZunfoldRepeatsZcompressmusiccompressMusic)r   r   )r   r   r   r   r     s    )r   r%   r   c             C   s   | S )Nr   )r   r   r   r   r     s    )r   r&   r   z+ly:get-default-font -> ly:grob-default-fontc             C   s   t dd| S )Nzly:get-default-fontzly:grob-default-font)r   r   )r   r   r   r   r     s    )r   r&   r   zly:parser-define -> ly:parser-define!
excentricity -> eccentricity
Timing_engraver -> Timing_translator + Default_bar_line_engraver
c             C   s.   t dd| } t dd| } t dd| } | S )Nzly:parser-definezly:parser-define!ZexcentricityZeccentricityz(\\(consists|remove) *"?Timing_engraver"?z9\\\1 "Timing_translator" \\\1 "Default_bar_line_engraver")r   r   )r   r   r   r   r     s    )r   r&   r   zly:X-moment -> ly:moment-Xc             C   s   t dd| } | S )Nzly:(add|mul|mod|div)-momentzly:moment-\1)r   r   )r   r   r   r   r     s    )r   r&   r!   z(keyAccidentalOrder -> keyAlterationOrderc             C   s   t dd| } | S )NZkeyAccidentalOrderZkeyAlterationOrder)r   r   )r   r   r   r   r     s    )r   r&   r%   zrPerformer_group_performer -> Performer_group, Engraver_group_engraver -> Engraver_group,
inside-slur -> avoid-slurc             C   sJ   t dd| } t dd| } t dd| } t dd| } t d	d
| } | S )NZPerformer_group_performerZPerformer_groupZEngraver_group_engraverZEngraver_groupz#'inside-slur\s*=\s*##t *z#'avoid-slur = #'inside z#'inside-slur\s*=\s*##f *z#'avoid-slur = #'around z#'inside-slurz#'avoid-slur)r   r   )r   r   r   r   r     s    )r   r&   r'   z\applyxxx -> \applyXxxc             C   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nz\\applyoutputz\\applyOutputz\\applycontextz\\applyContextz\\applymusicz\\applyMusiczly:grob-suicidezly:grob-suicide!)r   r   )r   r   r   r   r     s
    )r   r&   r   z"tabloid" -> "11x17"c             C   s   t dd| } | S )Nz	"tabloid"z"11x17")r   r   )r   r   r   r   r     s    )r   r&   r)   z"outputProperty -> overridePropertyc             C   s   t dd| } | S )NZoutputPropertyZoverrideProperty)r   r   )r   r   r   r   r   	  s    )r   r&   r*   z!layout engine refactoring [FIXME]c             C   sj   dd }t d|| } t d| r.ttd  t d| rFttd  t d| rfttd td | S )	Nc             S   s`   ddddd|  d }|  d}|  d}|d	kr@d
||f S |dkrTd||f S tdd S )Nzsprings-and-rodszafter-line-breakingzbefore-line-breakingr   )zspacing-procedurezafter-line-breaking-callbackzbefore-line-breaking-callbackzprint-functionr    r   r   r   zrevert %s #'callbacks %% %s
r   zoverride %s #'callbacks #'%sz)1st group should match revert or override)r9   RuntimeError)r;   ZnewkeyZwhatZgrobr   r   r   subber	  s    

zconv.<locals>.subberz(override|revert)\s*([a-zA-Z.]+)\s*#'(spacing-procedure|after-line-breaking-callback|before-line-breaking-callback|print-function)zbar-size-procedurezspace-functionZverticalAlignmentChildCallbackz2verticalAlignmentChildCallback has been deprecatedr   )r   r   r   r	   r   r
   )r   r   r   r   r   r   	  s    )r   r&   r+   z8Remove callbacks property, deprecate XY-extent-callback.c             C   st   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } | S )Nz$\\override +([A-Z.a-z]+) #'callbacksz\\override \1z/\\revert ([A-Z.a-z]+) #'callbacks % ([a-zA-Z]+)z\\revert \1 #'\2z([XY]-extent)-callbackz\1r   ZVerticalAxisGroupz)\\set ([a-zA-Z]*\.?)minimumVerticalExtentz1\\override \1VerticalAxisGroup #'minimum-Y-extentrt   z/\\override VerticalAxisGroup #'minimum-Y-extentz'\\set ([a-zA-Z]*\.?)extraVerticalExtentz/\\override \1VerticalAxisGroup #'extra-Y-extentz"\\set ([a-zA-Z]*\.?)verticalExtentz)\\override \1VerticalAxisGroup #'Y-extent)r   r   )r   r   r   r   r   )	  s"    )r   r&   r   z+Use grob closures iso. XY-offset-callbacks.c             C   s4   t d| rttd  t d| r0ttd  | S )Nz[XY]-offset-callbackszposition-callbacks)r   r   r	   r   )r   r   r   r   r   >	  s
    )r   r&   r-   zWbassFigureFormatFunction -> figuredBassFormatter
deprecate alignBassFigureAccidentals.
c             C   s*   t dd| } t d| r&ttd  | S )NZbassFigureFormatFunctionZfiguredBassFormatterZalignBassFigureAccidentals)r   r   r   r	   r   )r   r   r   r   r   G	  s    )r   r&   r   z!\tag #'(a b) -> \tag #'a \tag #'bc             C   s   dd }t d|| } | S )Nc             S   s&   |  d }dd |D }d|S )Nr   c             S   s   g | ]}d | qS )z	\tag #'%sr   )r   r   r   r   r   r   U	  s    z*conv.<locals>.sub_syms.<locals>.<listcomp>r   )r9   splitr   )r   ZsymsZtagsr   r   r   sub_symsS	  s    zconv.<locals>.sub_symsz\\tag #'\(([^)]+)\))r   r   )r   r   r   r   r   r   Q	  s    )r   r&   r   znumber-visibilityc             C   s   t dd| } | S )Nz#'number-visibilityzU#'number-visibility % number-visibility is deprecated. Tune the TupletNumber instead
)r   r   )r   r   r   r   r   \	  s    )r   r&   r   z(ly:spanner-get-bound -> ly:spanner-boundc             C   s   t dd| } | S )Nzly:spanner-get-boundzly:spanner-bound)r   r   )r   r   r   r   r   d	  s    )r   r&   r   z0override Stem #'beamed-* -> #'details #'beamed-*c             C   s(   x"dD ]}t d| d| | } qW | S )N)zbeamed-lengthszbeamed-minimum-free-lengthsZlengthsz#beamed-extreme-minimum-free-lengthsz\\override\s+Stem\s+#'%sz\\override Stem #'details #'%s)r   r   )r   r   r   r   r   r   j	  s
    


)r   r&   r   z\epsfilec             C   s   t dd| } | S )Nz\\epsfile *#"z\\epsfile #X #10 #")r   r   )r   r   r   r   r   u	  s    )r   r&   r   z'Foo_bar::bla_bla -> ly:foo-bar::bla-blac             C   s   dd }t d|| } | S )Nc             S   s   |  d}d| dd S )Nr   zly:r
   -)r9   r:   r<   )r   r   r   r   r   
sub_cxx_id}	  s    
zconv.<locals>.sub_cxx_idz([A-Z][a-z_0-9]+::[a-z_0-9]+))r   r   )r   r   r   r   r   r   {	  s    )r   r&       z%foobar -> foo-bar for \paper, \layoutc             C   sf   ddddddddd	d
dddddddddddddddddddddg}x|D ]\}}t ||| } qHW | S ) N)Zinputencodingzinput-encoding)Zprintpagenumberzprint-page-number)Zoutputscalezoutput-scale)Zbetweensystemspacezbetween-system-space)Zbetweensystempaddingzbetween-system-padding)Zpagetopspacezpage-top-space)Zraggedlastbottomzragged-last-bottom)Zraggedrightzragged-right)Z
raggedlastzragged-last)Zraggedbottomzragged-bottom)Zaftertitlespacezafter-title-space)Zbeforetitlespacezbefore-title-space)Zbetweentitlespacezbetween-title-space)Z	topmarginz
top-margin)Zbottommarginzbottom-margin)Zheadsepzhead-separation)Zfootsepzfoot-separation)Zrightmarginzright-margin)Z
leftmarginzleft-margin)Zprintfirstpagenumberzprint-first-page-number)Zfirstpagenumberzfirst-page-number)Zhsizezpaper-width)Zvsizezpaper-height)Zhorizontalshiftzhorizontal-shift)Z
staffspacezstaff-space)Zlinethicknesszline-thickness)Zledgerlinethicknesszledger-line-thickness)Zblotdiameterzblot-diameter)Zstaffheightzstaff-height)Z	linewidthz
line-width)Zannotatespacingzannotate-spacing)r   r   )r   Zidentifier_subsr   r   r   r   r   r   	  sD    z)debug-beam-quanting -> debug-beam-scoringc             C   s   t dd| } | S )Nzdebug-beam-quantingzdebug-beam-scoring)r   r   )r   r   r   r   r   	  s    )r   r&   r   zMdef-(music-function|markup-command) -> define-(music-function|markup-command)c             C   s    t dd| } t dd| } | S )Nzdef-music-functionzdefine-music-functionzdef-markup-commandzdefine-markup-command)r   r   )r   r   r   r   r   	  s    )r   r&   rm   zCrehearsalMarkAlignSymbol/barNumberAlignSymbol -> break-align-symbolc             C   s    t dd| } t dd| } | S )Nz-\\set\s+Score\s*\.\s*barNumberAlignSymbol\s*=z2\\override Score.BarNumber #'break-align-symbol = z1\\set\s*Score\s*\.\s*rehearsalMarkAlignSymbol\s*=z6\\override Score.RehearsalMark #'break-align-symbol = )r   r   )r   r   r   r   r   	  s
    )r   r   r!   z&(page-)penalty -> (page-)break-penaltyc             C   s    t dd| } t dd| } | S )Nzpage-penaltyzpage-break-penaltyz([^-])penaltyzbreak-penalty)r   r   )r   r   r   r   r   	  s    )r   r   r%   z:\context Foo \applyOutput #bla -> \applyOutput #'Foo #bla c             C   s   t dd| } | S )Nz+\\context\s+"?([a-zA-Z]+)"?\s*\\applyOutputz\\applyOutput #'\1)r   r   )r   r   r   r   r   	  s    
)r   r   r   zannotatefoo -> annotate-fooc             C   s.   t dd| } t dd| } t dd| } | S )NZannotatepagezannotate-pageZannotateheaderszannotate-headersZannotatesystemszannotate-systems)r   r   )r   r   r   r   r   	  s    )r   r   r   z6\set tupletNumberFormatFunction -> \override #'text = c             C   sD   t dd| } t dd| } t d| r@td td td | S )Nz`(\\set\s)?(?P<context>[a-zA-Z]*.?)tupletNumberFormatFunction\s*=\s*#denominator-tuplet-formatterzQ\\override \g<context>TupletNumber #'text = #tuplet-number::calc-denominator-textz^(\\set\s+)?(?P<context>[a-zA-Z]*.?)tupletNumberFormatFunction\s*=\s*#fraction-tuplet-formatterzN\\override \g<context>TupletNumber #'text = #tuplet-number::calc-fraction-textZtupletNumberFormatFunctionr   zPtupletNumberFormatFunction has been removed. Use #'text property on TupletNumber)r   r   r   r	   )r   r   r   r   r   	  s    )r   r   r*   zTinstrument -> instrumentName, instr -> shortInstrumentName, vocNam -> shortVocalNamec             C   s.   t dd| } t dd| } t dd| } | S )NZvocNamZshortVocalNamez\.instr\s*=z.shortInstrumentName =z\.instrument\s*=z.instrumentName =)r   r   )r   r   r   r   r   	  s    )r   r   r,   zdeprecate \tempo in \midic             C   s   dd }t d|| } | S )Nc             S   s|   t | d}t| d}t | d}d}x|dkrJ|d }|d7 }q0W d|> d|>  }d|d > d }d|| |f S )Nr   r   r    r   zk
  \midi {
    \context {
      \Score
      tempoWholesPerMinute = #(ly:make-moment %d %d)
      }
    }

)r   r9   r   )r   r   r   countZlog2dennumr   r   r   	sub_tempo	  s    

zconv.<locals>.sub_tempoz9\\midi\s*{\s*\\tempo ([0-9]+)\s*([.]*)\s*=\s*([0-9]+)\s*})r   r   )r   r  r   r   r   r   	  s    
)r   r   r   z1printfirst-page-number -> print-first-page-numberc             C   s   t dd| } | S )Nzprintfirst-page-numberzprint-first-page-number)r   r   )r   r   r   r   r   
  s    )r   r'   r   c             C   s   | S )Nr   )r   r   r   r   r   
  s    )r   r   r   z"ly:clone-parser -> ly:parser-clonec             C   s   t dd| S )Nzly:clone-parserzly:parser-clone)r   r   )r   r   r   r   r    
  s    )r   r   r    z&no-spacing-rods -> extra-spacing-widthc             C   s    t dd| } t dd| } | S )Nzno-spacing-rods\s+=\s+##tz)extra-spacing-width = #'(+inf.0 . -inf.0)zno-spacing-rods\s+=\s+##fzextra-spacing-width = #'(0 . 0))r   r   )r   r   r   r   r   &
  s
    )r   r   r#   z?deprecate cautionary-style. Use AccidentalCautionary propertiesc             C   s<   t dd| } t dd| } t dd| } t dd| } | S )	Nz/Accidental\s*#'cautionary-style\s*=\s*#'smallerz&AccidentalCautionary #'font-size = #-2z3Accidental\s*#'cautionary-style\s*=\s*#'parenthesesz*AccidentalCautionary #'parenthesized = ##tz4([A-Za-z]+)\s*#'cautionary-style\s*=\s*#'parenthesesz\1 #'parenthesized = ##tz0([A-Za-z]+)\s*#'cautionary-style\s*=\s*#'smallerz\1 #'font-size = #-2)r   r   )r   r   r   r   r   /
  s    )r   r   r%   z/Rename accidental glyphs, use glyph-name-alist.c             C   s4   dd }t d|| } t dd| } | dd} | S )Nc          	   S   s4   t | ddd}dddddd	d
ddg	d|  S )Nr   Mr   zaccidentals.doublesharpz)accidentals.sharp.slashslash.stemstemstemzaccidentals.sharpz!accidentals.sharp.slashslash.stemzaccidentals.naturalzaccidentals.mirroredflatzaccidentals.flatzaccidentals.mirroredflat.flatzaccidentals.flatflatr!   )r   r9   r<   )r   idxr   r   r   sub_acc_name?
  s    zconv.<locals>.sub_acc_namezaccidentals[.](M?[-0-9]+)z=(KeySignature|Accidental[A-Za-z]*)\s*#'style\s*=\s*#'([a-z]+)z7\1 #'glyph-name-alist = #alteration-\2-glyph-name-alistz#alteration-default-glyph-name-alistz$standard-alteration-glyph-name-alist)r   r   r<   )r   r  r   r   r   r   <
  s    )r   r   r'   z>allowBeamBreak -> Beam #'breakable = ##t
addquote -> addQuote
c             C   sB   t dd| } t dd| } t dd| } t d| r>td | S )	Nz1(\\set\s+)?([A-Z][a-zA-Z]+\s*\.\s*)allowBeamBreakz\\override \2Beam #'breakablez(\\set\s+)?allowBeamBreakz\\override Beam #'breakableZaddquoteZaddQuoteZSpan_dynamic_performerz=Span_dynamic_performer has been merged into Dynamic_performer)r   r   r   r	   )r   r   r   r   r   V
  s    )r   r   r   z7layout-set-staff-size -> layout-set-absolute-staff-sizec             C   s   t dd| } | S )Nz9\(layout-set-staff-size \(\*\s*([0-9.]+)\s*(pt|mm|cm)\)\)z*(layout-set-absolute-staff-size (* \1 \2)))r   r   )r   r   r   r   r   f
  s    )r   r   r*   z6#'arrow = ##t -> #'bound-details #'right #'arrow = ##tc             C   s>   t dd| } t d| r:tttd  ttdd  | S )Nz-\\override\s*([a-zA-Z.]+)\s*#'arrow\s*=\s*##tz3\\override \1 #'bound-details #'right #'arrow = ##tz	edge-textz"edge-text settings for TextSpannerzUse

%sz	\override TextSpanner #'bound-details #'right #'text = <right-text>
	\override TextSpanner #'bound-details #'left #'text = <left-text>
)r   r   r   r	   r   r
   )r   r   r   r   r   m
  s    )r   r   r   zTextSpanner #'edge-height -> #'bound-details #'right/left #'text = ...
Remove 'forced-distance for fixed spacing between staves in a PianoStaff.c             C   sV   dd }t d|| } t d| rRttd  ttd ttd ttd | S )	Nc             S   s~   d}xtd|  dfd|  dfgD ]T\}}|r"t|r"|  d}|sHd}|  d}|sZd}|d||||f 7 }|d	7 }q"W |S )
Nr"   leftr    rightr!   r   r   zZ%s \override %sTextSpanner #'bound-details #'%s #'text = \markup { \draw-line #'(0 . %s) }r   )r9   float)r   r   varhoncer   r   r   r   sub_edge_height~
  s    

zconv.<locals>.sub_edge_heightzy(\\once)?\s*\\override\s*([a-zA-Z]+\s*[.]\s*)?TextSpanner\s*#'edge-height\s*=\s*#'\(\s*([0-9.-]+)\s+[.]\s+([0-9.-]+)\s*\)z#'forced-distancez#VerticalAlignment #'forced-distancez,Use the `alignment-offsets' sub-property of
z2NonMusicalPaperColumn #'line-break-system-details
z'to set fixed distances between staves.
)r   r   r   r	   r   r
   )r   r  r   r   r   r   {
  s    
)r   r   r5   z-#'break-align-symbol -> #'break-align-symbolsc             C   s   t dd| } | S )NzB\\override\s*([a-zA-Z.]+)\s*#'break-align-symbol\s*=\s*#'([a-z-]+)z,\\override \1 #'break-align-symbols = #'(\2))r   r   )r   r   r   r   r   
  s    )r   r   r6   z+scripts.caesura -> scripts.caesura.curved.
z=Use #'style not #'dash-fraction to select solid/dashed lines.c             C   sF   t dd| } t d| rBtttd  ttd ttd | S )Nzscripts\.caesurazscripts.caesura.curvedzdash-fractionz$all settings related to dashed linesz7Use \override ... #'style = #'line for solid lines and
z8	\override ... #'style = #'dashed-line for dashed lines.)r   r   r   r	   r   r
   )r   r   r   r   r   
  s    

)r   r   r7   zV\setEasyHeads -> \easyHeadsOn, \fatText -> \textLengthOn,
\emptyText -> \textLengthOffc             C   s.   t dd| } t dd| } t dd| } | S )NZsetEasyHeadsZeasyHeadsOnZfatTextZtextLengthOnZ	emptyTextZtextLengthOff)r   r   )r   r   r   r   r   
  s    )r   r   .   z7\set hairpinToBarline -> \override Hairpin #'to-barlinec             C   sX   t dd| } t dd| } t dd| } t dd| } t d	d| } t d
d| } | S )Nz:\\set\s+([a-zA-Z]+)\s*.\s*hairpinToBarline\s*=\s*##([tf]+)z)\\override \1.Hairpin #'to-barline = ##\2z(\\set\s+hairpinToBarline\s*=\s*##([tf]+)z&\\override Hairpin #'to-barline = ##\1z,\\unset\s+([a-zA-Z]+)\s*.\s*hairpinToBarlinez \\revert \1.Hairpin #'to-barlinez\\unset\s+hairpinToBarlinez\\revert Hairpin #'to-barlinez hairpinToBarline\s*=\s*##([tf]+)z+\\set (de|)crescendoSpanner = #'dashed-linez!\\set \1crescendoSpanner = #'text)r   r   )r   r   r   r   r   
  s    )r   r   0   z!\compressMusic -> \scaleDurationsc             C   s   t dd| } | S )Nr   ZscaleDurations)r   r   )r   r   r   r   r   
  s    )r   r   2   zrmetronomeMarkFormatter uses text markup as second argument,
fret diagram properties moved to fret-diagram-details.c             C   s   t d| r4ttd  ttd ttdd  ddddd	d
ddddddg}x<|D ]4}t || rVtttd|   ttdd  qVW | S )NZmetronomeMarkFormatterz8metronomeMarkFormatter got an additional text argument.
zNThe function assigned to Score.metronomeMarkFunction now uses the signature
%sz2	(format-metronome-markup text dur count context)
z
barre-typez	dot-colorz
dot-radiuszfinger-codez
fret-countz	label-dirznumber-typezstring-countzxo-font-magnificationzmute-stringzopen-stringZorientationz%s in fret-diagram propertieszUse %s
zfret-diagram-details)r   r   r	   r   r
   )r   Z
fret_propsZpropr   r   r   r   
  s0    

)r   r   3   a  \octave -> \octaveCheck, \arpeggioUp -> \arpeggioArrowUp,
\arpeggioDown -> \arpeggioArrowDown, \arpeggioNeutral -> \arpeggioNormal,
\setTextCresc -> \crescTextCresc, \setTextDecresc -> \dimTextDecresc,
\setTextDecr -> \dimTextDecr, \setTextDim -> \dimTextDim,
\setHairpinCresc -> \crescHairpin, \setHairpinDecresc -> \dimHairpin,
\sustainUp -> \sustainOff, \sustainDown -> \sustainOn
\sostenutoDown -> \sostenutoOn, \sostenutoUp -> \sostenutoOffc             C   s   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } | S )Nz\\octave(?![a-zA-Z])z\\octaveCheckZ
arpeggioUpZarpeggioArrowUpZarpeggioDownZarpeggioArrowDownZarpeggioNeutralZarpeggioNormalZsetTextCrescZcrescTextCrescZsetTextDecrescZdimTextDecrescZsetTextDecrZdimTextDecrZ
setTextDimZ
dimTextDimZsetHairpinCrescZcrescHairpinZsetHairpinDecresc
dimHairpinr[   Z
sustainOffr\   Z	sustainOnr^   ZsostenutoOnr]   ZsostenutoOff)r   r   )r   r   r   r   r   
  s    )r   r   r.   z\setHairpinDim -> \dimHairpinc             C   s   |  dd} | S )NZsetHairpinDimr  )r<   )r   r   r   r   r     s    )r   r   5   z/infinite-spacing-height -> extra-spacing-heightc             C   s    t dd| } t dd| } | S )Nz!infinite-spacing-height\s+=\s+##tz*extra-spacing-height = #'(-inf.0 . +inf.0)z!infinite-spacing-height\s+=\s+##fz extra-spacing-height = #'(0 . 0))r   r   )r   r   r   r   r     s
    )r   r   r/   zs#(set-octavation oct) -> \ottava #oct,
\put-adjacent markup axis dir markup -> \put-adjacent axis dir markup markupc             C   sN   t dd| } t d| rJtttd  ttd ttd td | S )Nz#\(set-octavation (-*[0-9]+)\)z\\ottava #\1zput-adjacentz\put-adjacent argument orderz,Axis and direction now come before markups:
z%\put-adjacent axis dir markup markup.r   )r   r   r   r	   r   r
   )r   r   r   r   r     s    )r   r   9   z:\center-align -> \center-column, \hcenter -> \center-alignc             C   s    t dd| } t dd| } | S )Nz([\\:]+)center-alignz\1center-columnzhcenter(\s+)zcenter-align\1)r   r   )r   r   r   r   r   &  s    )r   r   <   z$printallheaders -> print-all-headersc             C   s   t dd| } | S )NZprintallheaderszprint-all-headers)r   r   )r   r   r   r   r   -  s    )r   r   =   z!gregorian-init.ly -> gregorian.lyc             C   s   t dd| } | S )Nz!\\include(\s+)"gregorian-init.ly"z\\include\1"gregorian.ly")r   r   )r   r   r   r   r   3  s    )r   r   ru   z-makam-init.ly -> makam.ly, \bigger -> \largerc             C   s    t dd| } t dd| } | S )Nz\\include(\s+)"makam-init.ly"z\\include\1"makam.ly"z([\\:])biggerz\1larger)r   r   )r   r   r   r   r   :  s    )r   r   @   znsystemSeparatorMarkup -> system-separator-markup,
InnerStaffGroup -> StaffGroup, InnerChoirStaff -> ChoirStaffc             C   s   t dd| } t d| rDtttd  ttd  tt t t d| rztttd  ttd  tt t t d	d
| } t dd| } | S )NZsystemSeparatorMarkupzsystem-separator-markupz\\InnerStaffGroupz re-definition of InnerStaffGroup)InnerStaffGroup
StaffGroupz\\InnerChoirStaffz re-definition of InnerChoirStaff)InnerChoirStaffr$   r  r  r  r$   )	r   r   r   r	   r   r
   r   r   r   )r   r   r   r   r   B  s    )r   r)   r   z2Syntax changes for \addChordShape and \chord-shapec             C   sh   t d| r2ttd  ttd tt t t d| rdttd  ttd tt t | S )Nz\\addChordShapeZaddChordShapez2stringTuning must be added to addChordShape call.
z\\chord-shapezchord-shapez0stringTuning must be added to chord-shape call.
)r   r   r	   r   r
   r   r   )r   r   r   r   r   V  s    )r   r)   r    zRemove oldaddlyricsc             C   s6   t d| r2ttd  ttd tt t | S )Nz\\oldaddlyricsZoldaddlyricszRoldaddlyrics is no longer supported. 
         Use addlyrics or lyricsto instead.
)r   r   r	   r   r
   r   r   )r   r   r   r   r   g  s    )r   r*   r   zZkeySignature property not reversed any more
MIDI 47: orchestral strings -> orchestral harpc             C   s4   t d| r$ttd  ttd | dd} | S )Nz\set Staff.keySignaturezStaff.keySignaturezAThe alist for Staff.keySignature is no longer in reversed order.
z"orchestral strings"z"orchestral harp")r   r   r	   r   r
   r<   )r   r   r   r   r   s  s    )r   r*   r   z\bar "." now produces a thick barline
ly:hairpin::after-line-breaking -> ly:spanner::kill-zero-spanned-time
Dash parameters for slurs and ties are now in dash-definitionc             C   sv   t d| r,ttd  ttd tt t dd| } t d| sRt d| rrttd  ttd	 tt | S )
Nz\\bar\s*"\."z\bar "."z'\bar "." now produces a thick barline.
zly:hairpin::after-line-breakingz"ly:spanner::kill-zero-spanned-timez(Slur|Tie)\w+#'dash-fractionz(Slur|Tie)\w+#'dash-periodzdash-fraction, dash-periodz@Dash parameters for slurs and ties are now in 'dash-definition.
)r   r   r	   r   r
   r   r   )r   r   r   r   r   ~  s    
)r   r*   r!   a  Autobeaming rules have changed.  override-auto-beam-setting and
revert-auto-beam-setting have been eliminated.
\overrideBeamSettings has been added.
beatGrouping has been eliminated.
Different settings for vertical layout.
ly:system-start-text::print -> system-start-text::print
Beam #'thickness -> Beam #'beam-thickness
ly:note-head::brew-ez-stencil -> note-head::brew-ez-stencil
ly:ambitus::print -> ambitus::print
Explicit dynamics context definition from `Piano centered dynamics'
template replaced by new `Dynamics' context.c             C   s   t d| r,ttd  ttd tt t d| rXttd  ttd tt t dd| } t d| rttd  ttd	 tt t d
| rttd
  ttd tt t dd| } t dd| } t dd| } | S )Nzoverride-auto-beam-settingzD    Autobeam settings are now overriden with \overrideBeamSettings.
zrevert-auto-beam-settingzA    Autobeam settings are now reverted with \revertBeamSettings.
z\\set\s+beatGroupingz\\setBeatGroupingz\w+\s*.\s*beatGroupingZbeatGroupingzb    beatGrouping with a specified context must now be accomplished with
   \overrideBeamSettings.
zalignment-offsetszalignment-offsets has been changed to alignment-distances: you must now specify the distances between staves rather than the offset of staves.
zGly:(system-start-text::print|note-head::brew-ez-stencil|ambitus::print)z\1z(\bBeam\s+#')(?=thickness\b)z\1beam-zW(\\context\s*\{{1}[^\}]+\\type\s+"?Engraver_group"?\s+\\name\s+"*Dynamics"*[^\}]*\}{1})z?% [Convert-ly] The Dynamics context is now included by default.)r   r   r	   r   r
   r   r   )r   r   r   r   r     s6    )r   r*   r'   zRemove obsolete engravers/translators: Note_swallow_translator,
Rest_swallow_translator, Skip_event_swallow_translator, Swallow_engraver,
Swallow_performer and String_number_engraver.
New vertical spacing variables.c             C   sv   t dd| } t dd| } t dd| } t dd| } t d	d
| } t d| rrttd  ttd tt | S )Nzy\\(consists|remove)\s+"*(Swallow_(engraver|performer)|(Note|Rest|Skip_event)_swallow_translator|String_number_engraver)"*r"   zD(page-top-space)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))zIobsolete-\g<0>  top-system-spacing #'space = #(/ obsolete-\1 staff-space)zJ(between-system-space)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))zobsolete-\g<0>  between-system-spacing #'space = #(/ obsolete-\1 staff-space)  between-scores-system-spacing #'space = #(/ obsolete-\1 staff-space)zL(between-system-padding)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))zobsolete-\g<0>  between-system-spacing #'padding = #(/ obsolete-\1 staff-space)  between-scores-system-spacing #'padding = #(/ obsolete-\1 staff-space)zX((before|between|after)-title-space)\s*=\s*(([+-]?[.\d]*\s*\\[-\w]+)|(#?\s*[-+]?[.\d]+))zGobsolete-\g<0>  \2-title-spacing #'space = #(/ obsolete-\1 staff-space)z)VerticalAxisGroup\s*#\s*'minimum-Y-extentzminimum-Y-extentzKVertical spacing no longer depends on the Y-extent of a VerticalAxisGroup.
)r   r   r   r	   r   r
   r   )r   r   r   r   r     s(    
)r   r*   r,   z*Unify fetaNumber and fetaDynamic encodingsc             C   s   t dd| S )Nz\bfeta(Number|Dynamic)ZfetaText)r   r   )r   r   r   r   r     s    )r   r*   r-   z7\RemoveEmpty*StaffContext -> \*Staff \RemoveEmptyStavesc             C   s    t dd| } t dd| } | S )Nz-\\RemoveEmpty(|Drum|Rhythmic|Tab)StaffContextz\\\1Staff \\RemoveEmptyStavesz \\AncientRemoveEmptyStaffContextz#\\VaticanaStaff \\RemoveEmptyStaves)r   r   )r   r   r   r   r     s    )r   r*   r   z%\cresc etc. are now postfix operatorsc             C   s   t dd| } | S )Nz\\(cresc|dim|endcresc|enddim)\bz\\deprecated\1)r   r   )r   r   r   r   r     s    )r   r*   r   z%interval-translate -> coord-translatec             C   s   t dd| } | S )Nzinterval-translatezcoord-translate)r   r   )r   r   r   r   r     s    )r   r*   r   zEliminate beamSettings, beatLength, \setBeatGrouping, \overrideBeamSettings and \revertBeamSettings.
"accordion.accEtcbase" -> "accordion.etcbass"c             C   s   dd }t d|| } t d| rBttd  ttd tt t d| rnttd  ttd	 tt t d
| rttd
  ttd tt t d| rttd  ttd tt t d| rttd  ttd tt | S )Nc             S   s$   ddddddd}d||  d	  S )
NdotZdiscantZ	bayanbassZstdbassZfreebassZoldEE)ZDotZDiscantZ	BayanbaseZStdbaseZFreebaseZOldEEz"accordion.%s"r   )r9   )r   r   r   r   r   r     s    zconv.<locals>.sub_accz"accordion\.acc([a-zA-Z]+)"ZoverrideBeamSettingsz\overrideBeamSettingsz;Use \set beamExceptions or \overrideTimeSignatureSettings.
ZrevertBeamSettingsz\revertBeamSettingsz9Use \set beamExceptions or \revertTimeSignatureSettings.
ZbeamSettingsz3Use baseMoment, beatStructure, and beamExceptions.
Z
beatLengthz"Use baseMoment and beatStructure.
ZsetBeatGroupingZsetbeatGrouping)r   r   r   r	   r   r
   r   )r   r   r   r   r   r     s4    

)r   r*   r   zWoodwind diagrams: Move size, thickness, and graphic from argument list to properties.
Deprecate negative dash-period for hidden lines: use #'style = #'none instead.c             C   s>   t d| r,ttd  ttd tt t dd| } | S )Nzwoodwind-diagramzwoodwind-diagramszXMove size, thickness, and graphic to properties.  Argument should be just the key list.
zdash-period\s+=\s*#\s*-[0-9.]+zstyle = #'none)r   r   r	   r   r
   r   r   )r   r   r   r   r   .  s    
)r   r*   r   z[Rename vertical spacing variables.
Add fretboard-table argument to savePredefinedFretboard.c             C   st   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } | S )Nzafter-title-spacingzmarkup-system-spacingzbefore-title-spacingzscore-markup-spacingzbetween-scores-system-spacingzscore-system-spacingzbetween-system-spacingzsystem-system-spacingzbetween-title-spacingzmarkup-markup-spacingzbottom-system-spacingzlast-bottom-spacingztop-title-spacingztop-markup-spacingZstorePredefinedDiagramz*storePredefinedDiagram #default-fret-table)r   r   )r   r   r   r   r   =  s    )r   r*   r8   z(Rename vertical spacing grob properties.c             C   sX   t dd| } t dd| } t dd| } t dd| } t dd	| } t d
d| } | S )Nznext-staff-spacingzstaff-staff-spacingzbetween-staff-spacingzafter-last-staff-spacingzstaffgroup-staff-spacingzinter-staff-spacingznonstaff-relatedstaff-spacingznon-affinity-spacingznonstaff-unrelatedstaff-spacingzinter-loose-line-spacingznonstaff-nonstaff-spacing)r   r   )r   r   r   r   r   P  s    )r   r*   rm   z<Remove \paper variables head-separation and foot-separation.c             C   s\   t d| r,ttd  ttd tt t d| rXttd  ttd tt | S )Nzhead-separationz0Adjust settings for top-system-spacing instead.
zfoot-separationz1Adjust settings for last-bottom-spacing instead.
)r   r   r	   r   r
   r   )r   r   r   r   r   g  s    )r   r*   r>   z^Rename space to basic-distance in various spacing alists.
Remove HarmonicParenthesesItem grob.c             C   sX   t dd| } t dd| } t d| rTttd  ttd ttd tt | S )Nz"\(space\s+\.\s+([0-9]*\.?[0-9]*)\)z(basic-distance . \1)z!#'space\s+=\s+#?([0-9]*\.?[0-9]*)z#'basic-distance = #\1ZHarmonicParenthesesItemz-HarmonicParenthesesItem has been eliminated.
z7Harmonic parentheses are part of the TabNoteHead grob.
)r   r   r   r	   r   r
   r   )r   r   r   r   r   v  s    

)r   r*   ,   zSRemove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.
c             C   s   t dd| } | S )Nz;\\(override|revert)TimeSignatureSettings(\s+[^#]*)(#[^#]*)#z\\\1TimeSignatureSettings\2#)r   r   )r   r   r   r   r     s    
)r   r*   r  zChange stringTunings from a list of semitones to a list of pitches.
Change tenor and baritone ukulele names in string tunings.
Generate messages for manual conversion of vertical spacing if required.c                s   dd fdd  fdd}t d|| } t dd	| } t d
| r\ttd  tt t d| r|ttd  tt t d| rttd  tt t d| rtdtd d  tt | S )Nc             S   s   ddddddddddddg}dd	dd	ddd	dd	dd	dg}d}x| d
krX|d7 }| d8 } q>W x| dk rv|d8 }| d7 } q\W d|||  ||  f }|S )Nr   r   r   r    r!   r#   r%   r   r   r   r)   z%d %d %sr   )Z	semitonesZstepsZalterationsZoctaveZ	pitchArgsr   r   r   semitones2pitch  s    


zconv.<locals>.semitones2pitchc                s:   |   }d}x(|D ] } t|}|d| d 7 }qW |S )Nr"   z,(ly:make-pitch z) )r   r   )Zsemitone_listZtonesZresZtoneargs)r  r   r   convert_tones  s    
zconv.<locals>.convert_tonesc                s   d |  d d S )NzstringTunings = #`(r   r   )r9   )matchobj)r  r   r   new_tunings  s    zconv.<locals>.new_tuningsz$stringTunings\s*=\s*#'\(([\d\s-]*)\)zukulele-(tenor|baritone)-tuningz\1-ukulele-tuningz[^-]page-top-spacezpage-top-spacez"[^-]between-system-(space|padding)zbetween-system-space, -paddingz&[^-](before|between|after)-title-spacez$before-, between-, after-title-spacez\\name\sr   z<Vertical spacing changes might affect user-defined contexts.)r   r   r   r	   r   r   r
   )r   r   r   )r  r  r   r     s(    )r   r*   r  z!Replace bar-size with bar-extent.c             C   s   dd }t d|| } | S )Nc             S   s*   dt | dd  }d| d | d S )Nz%gr   r   zbar-extent = #'(-z . r   )r  r9   )r  Zhalfr   r   r   size_as_extent  s    zconv.<locals>.size_as_extentzbar-size\s*=\s*#([0-9\.]+))r   r   )r   r!  r   r   r   r     s    )r   r*   r  z3Woodwind diagrams: Changes to the clarinet diagram.c             C   s0   t d| r,ttd  ttd tt | S )Nz%\\woodwind-diagram\s*#[^#]*clarinet\szwoodwind-diagramszDClarinet fingering changed to reflect actual anatomy of instrument.
)r   r   r	   r   r
   r   )r   r   r   r   r     s    
)r   r+   r   c             C   s   | S )Nr   )r   r   r   r   r     s    )r   r   r&   z$Handling of non-automatic footnotes.c             C   s0   t d| r,ttd  ttd tt | S )Nz
\\footnotez	\footnotezmIf you are using non-automatic footnotes, make sure to set footnote-auto-numbering = ##f in the paper block.
)r   r   r	   r   r
   r   )r   r   r   r   r     s    
)r   r   r   z0Change in internal property for MultiMeasureRestc             C   s0   t d| r,ttd  ttd tt | S )Nzuse-breve-restzsThis internal property has been replaced by round-up-to-longer-rest, round-up-exceptions and usable-duration-logs.
)r   r   r	   r   r
   r   )r   r   r   r   r     s    
)r   r   r'   zJCreation of a Flag grob and moving of certain Stem properties to this grobc             C   sf   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } | S )NzStem\s+#'flag-stylezFlag #'stylezStem\s+#'stroke-stylezFlag #'stroke-stylezStem\s+#'flagzFlag #'stencilz>(\s+(?:\\once\s*)?)\\override\s+Stem\s+#'transparent\s*=\s*##tzP\g<1>\\override Stem #'transparent = ##t\g<1>\\override Flag #'transparent = ##tz2(\s+(?:\\once\s*)?)\\revert\s*Stem\s+#'transparentz@\g<1>\\revert Stem #'transparent\g<1>\\revert Flag #'transparentz:(\s+(?:\\once\s*)?)\\override\s+Stem\s+#'stencil\s*=\s*##fzH\g<1>\\override Stem #'stencil = ##f\g<1>\\override Flag #'stencil = ##fz.(\s+(?:\\once\s*)?)\\revert\s*Stem\s+#'stencilz8\g<1>\\revert Stem #'stencil\g<1>\\revert Flag #'stencil)r   r   )r   r   r   r   r     s    )r   r   r,   z8\makeStringTuning, \contextStringTuning -> \stringTuningc             C   s.   t dd| } t dd| } t dd| } | S )Nz:(\s+)\\contextStringTuning(\s+)#'([-a-zA-Z]+)(\s+<[^<>]+>)zO\g<1>#(define \g<3> #{ \\stringTuning\g<4> #})\g<1>\\set stringTunings = #\g<3>z&
\\makeStringTuning(\s+)#'([-a-zA-Z]+)z
"\g<2>" = \\stringTuningz2\\makeStringTuning(\s+)#'([-a-zA-Z]+)(\s+<[^<>]+>)z)#(define \g<2> #{ \\stringTuning\g<3> #}))r   r   )r   r   r   r   r     s    )r   r   r4   z<\markuplines -> \markuplist
Change Beam broken slope syntax.c             C   sf   t dd| } t dd| } t dd| } t d| rbttd  ttd ttd	 tt | S )
Nz/
\\markuplines( +)([^ ].*)
            \1([^ ])z-
\\markuplist\g<1>\g<2>
           \g<1>\g<3>z\\markuplinesz\\markuplistz@funindex markuplinesz@funindex markuplistzconsistent-broken-slopezGconsistent-broken-slope is now handled through the positions callback.
zPinput/regression/beam-broken-classic.ly shows how broken beams are now handled.
)r   r   r   r	   r   r
   r   )r   r   r   r   r     s    

c             C   s   d|  d d|   S )Nz[^()]*?(?:\(z[^()]*?z\)[^()]*?)*?r   )nr   r   r   paren_matcher)  s    r#  c             C   s   t dd| dS )Nz\$(.?)z\1r   )r   r   r9   )r   r   r   r   undollar_scm1  s    r$  c             C   sf   t dd| d}t dtd d t|}| j| d| d | | j| d| d  S )Nz#\$#r   z#`?\(r   z\)r   )r   r   r9   r#  r$  rQ   rz   r   )r   r   r   r   r   undollar_embedded5  s    r&  c             C   s   t dtd d d| S )Nz\(ly:export\s+(r   z)\)z\1)r   r   r#  )r   r   r   r   strip_export=  s    r'  c             C   sB   t d| ds| dS dt| j| dd | d  S )Nzly:export\s+r   $r   )r   r   r9   r'  rQ   rz   r   )r   r   r   r   export_pullerB  s    
r)  c             C   sB   | j | d| d t| d | j | d| d  S )Nr   r   )rQ   rz   r'  r9   r   )r   r   r   r   ugly_function_rewriterH  s    r*  z`(?:set-time-signature|empty-music|add-grace-property|remove-grace-property|set-accidental-style)c             C   sL   t t| dsBt d| drBtd d d | d d a| dS )Nr   zly:export\s+r   r   r   r   r   )r   r;   should_really_be_music_functionr9   r   )r   r   r   r   record_uglyQ  s    r,  )r   r   r-   z#$ -> #, ly:export -> $c             C   s   t dt| } t dtd d t| } t dt d td d t| } t dt d d	| } t d
d| } t dtd d t| } t d| rt	t
d  | S )Nz(?s)#@?\{(.*?)#@?\}z2#\(define(?:-public)?\s+\(([-a-zA-Z]+)\b[^()]*?\)(r   z)\)z\(define(?:-public)?\s+\(z\b[^()]*\)(z#(?=\(r   r(  z#\(markup\*(?=\s)z$(markupz#\(z\)z\(ly:export\s+z	ly:export)r   r   r&  r#  r,  r+  r*  r)  r   r	   r   )r   r   r   r   r   Z  s    )r   r   r   z"$(set-time-signature ...) -> \timec             C   sD   t dd| } t dtd d d| } t d| r@ttd  | S )	Nz1\$\(set-time-signature\s+([0-9]+)\s+([0-9]+)\s*\)z\\time \1/\2z0\$\(set-time-signature\s+([0-9]+)\s+([0-9]+)\s+(r#   z)\)z\\time #\3 \1/\2z\(set-time-signature\s+zset-time-signature)r   r   r#  r   r	   r   )r   r   r   r   r   k  s    )r   r   r   z/$(set-accidental-style ...) -> \accidentalStylec             C   s.   t dd| } t dd| } t dd| } | S )Nz'\$\(set-accidental-style\s+'([-a-z]+)\)z\\accidentalStyle "\1"z:\$\(set-accidental-style\s+'([-a-z]+)\s+'([-A-Za-z]+)\s*\)z\\accidentalStyle #'\2 "\1"z"(@funindex\s+)set-accidental-stylez\1\\accidentalStyle)r   r   )r   r   r   r   r   v  s    c             C   s   d|  d d|   S )Nz[^{}]*?(?:{z[^{}]*?z}[^{}]*?)*?r   )r"  r   r   r   brace_matcher  s    r-  z"(?:[^"\\]|\\.)*"z+\s+(?:[$#]['`]?\s*(?:[a-zA-Z][^ \t\n()\\]*|z|#?\(r   z\)|z#-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)|z#(?:[tf]|\\.|@?\{r'   z#@?\}))|z)|\\[a-z_A-Z]+|[0-9]+(?:/[0-9]+)?|-[0-9]+)z\\markup\s*(?:@?\{z\}|z|(?:\\[a-z_A-Z][a-z_A-Z-]*(?:z)*?\s*)*(?:z|@?\{z\}))z(?:r   r   )r   r   r   z$\(auto)?Footnote(Grob)? -> \footnotec             C   s|   t dt dt d  d d| } t ddt d d  d t d d	| } t d
dt d d  d| } t dd| } | S )Nz\\footnote(z)(\s*r   r   z\\footnote\2\1\3z\\footnoteGrobr   z(\s*z\\footnote\3\2\1z\\autoFootnoteGrobz\\footnote\2\1z\\autoFootnotez
\\footnote)r   r   matchargmatchmarkup)r   r   r   r   r     s    ")r   r   r   ztempoWholesPerMinute -> \tempoc             C   s   dd }t d|| } | S )Nc             S   s   t | d}t | d}||d @ dkr6| dS |dkrf|d dkrf|dkrfd|d |d f S |d	kr|d
 dkr|dkrd|d |d
 f S d||f S )Nr   r   r   r,   r&      z\tempo %d.. = %dr!   r   r    Z   z\tempo %d. = %dz\tempo %d = %d)r   r9   )r   r  r   r   r   r   r    s    
zconv.<locals>.sub_tempozh\\context\s*@?\{\s*\\Score\s+tempoWholesPerMinute\s*=\s*#\(ly:make-moment\s+([0-9]+)\s+([0-9]+)\)\s*@?\})r   r   )r   r  r   r   r   r     s    )r   r   r8   z'\footnote ... -> \footnote ... \defaultc             C   sJ   dd }t dt d d t d t d t d t d	 |d
| } | S )Nc                s    fdd}|S )Nc                s   |  dr|  dS |  S )Nr   r   )r9   expand)r   )r   r   r   	match_fun  s    

z*conv.<locals>.not_first.<locals>.match_funr   )r   r3  r   )r   r   	not_first  s    zconv.<locals>.not_firstr   z)|z(\\footnote(?:\s*z)?z(?:z)?\s+r   z\2 \\default)r   r   matchfullmarkupr/  r.  )r   r4  r   r   r   r     s
    .)r   r   rm   zRemove beamWholeMeasurec             C   s,   t d| r(ttd  ttdd  | S )Nz\bbeamWholeMeasure\bZbeamWholeMeasurez.beamExceptions controls whole-measure beaming.r   )r   r   r	   r   r
   )r   r   r   r   r     s
    )r   r   r>   z,\set stringTuning -> \set Staff.stringTuningc             C   s   t dd| } | S )Nz(\\set\s+)stringTuningz\1Staff.stringTuning)r   r   )r   r   r   r   r     s    z-[a-zA-Z\200-\377]+(?:[-_][a-zA-Z\200-\377]+)*)r   r   +   z$"custom-tuning" = -> custom-tuning =c             C   s   t dt d d| } | S )Nz
"(z)"(\s*=\s*\\stringTuning)z
\1\2)r   r   
wordsyntax)r   r   r   r   r     s    )r   r,   r   c             C   s   | S )Nr   )r   r   r   r   r     s    )r   r4   r   z blank-*-force -> blank-*-penaltyc             C   s.   t dd| } t dd| } t dd| } | S )Nzblank-page-forcezblank-page-penaltyzblank-last-page-forcezblank-last-page-penaltyzblank-after-score-page-forcezblank-after-score-page-penalty)r   r   )r   r   r   r   r     s
    )r   r4   r!   z,\shape Grob #offsets -> \shape #offsets Grobc             C   s"   t dt d t d d| } | S )Nz\\shape(\s+(?:[a-zA-Z]+|z))(r   z\\shape\2\1)r   r   matchstringr.  )r   r   r   r   r     s    z(\\bar|whichBar|defaultBarType|segnoType|doubleRepeatType|startRepeatType|endRepeatType|doubleRepeatSegnoType|startRepeatSegnoType|endRepeatSegnoType)(\s*[=]?\s*[#]?))r   r4   r#   zNew bar line interfacec             C   sH  t td d| } t td d| } t td d| } t td d| } t td	 d
| } t td d| } t td d| } t td d| } t td d| } t td d| } t td d| } t td d| } t td d| } t td d| } t td d| } t td d | } t td! d"| } t td# d$| } | S )%Nz"\|:"z	\1\2".|:"z":\|"z	\1\2":|."z"\|\|:"z\1\2".|:-||"z":\|:"z
\1\2":..:"z"\.\|\."z\1\2".."z"\|S"z	\1\2"S-|"z"S\|"z	\1\2"S-S"z":\|S"z
\1\2":|.S"z":\|S\."z\1\2":|.S-S"z"S\|:"z\1\2"S.|:-S"z"\.S\|:"z
\1\2"S.|:"z	":\|S\|:"z\1\2":|.S.|:"z":\|S\.\|:"z\1\2":|.S.|:-S"z":"z\1\2";"z"\|s"z	\1\2"|-s"z"dashed"z\1\2"!"z"kievan"z\1\2"k"z"empty"z\1\2"-")r   r   	barstring)r   r   r   r   r     s&    z#'(?:z|\(\s*z(?:\s+z)*\s*\))z)*z(?:\s*\.\s*z)?c          	   C   s"   |  ddtt|  d S )Nr   r   r   )r9   r   r   findallr7  )r   r   r   r   path_replace#  s    r;  r   z)|z(\\footnote(?:\s*z)(z)?(\s+z)(\s+\\default)?)r   r4   r%   z\accidentalStyle #'Context "style" -> \accidentalStyle Context.style
\alterBroken "Context.grob" -> \alterBroken Context.grob
\overrideProperty "Context.grob" -> \overrideProperty Context.grob
\tweak Grob #'symbol -> \tweak Grob.symbolc             C   s   dd }t dd| } t dd| } t dd| } t dd| } t d	d| } t|| } t d
t t d d| } t dt d t d t| } t dt d t d t| } | S )Nc             S   sp   dd }|  dr|  dS |  d|  d }|  drl|tdt d	 ||  d }|  d
sld| }|S )Nc             S   s6   d tt| d}|dkr(d| }| d| S )Nr   r   )ZTimeSignaturerD   ZBarLinerE   ZStaffSymbolr   ZLedgerLineSpannerzStaff.r   )r   r   r:  r7  r9   )r   rP   r   r   r   fn_path_replace5  s    z-conv.<locals>.patrep.<locals>.fn_path_replacer   r   r   r!   r    z(\s*)(r   r#   z\single)r9   r   r   symbol_list)r   r<  rP   r   r   r   patrep4  s    



zconv.<locals>.patrepz&(\\accidentalStyle\s+)#?"([-A-Za-z]+)"z\1\2z8(\\accidentalStyle\s+)#'([A-Za-z]+)\s+#?"?([-A-Za-z]+)"?z\1\2.\3zI(\\(?:alterBroken|overrideProperty)\s+)#?"([A-Za-z]+)\s*\.\s*([A-Za-z]+)"z<(\\tweak\s+)#?"?([A-W][A-Za-z]*)"?\s+?#'([a-zX-Z][-A-Za-z]*)z"(\\tweak\s+)#'([a-zX-Z][-A-Za-z]*)z(\\alterBroken)(\s+[A-Za-z.]+)(r   z\1\3\2z(\\overrideProperty\s+)(z\s+z(\\(?:override|revert)\s+)()r   r   	footnotecr.  	grob_spec	grob_pathr;  )r   r>  r   r   r   r   /  s&    )r   r4   r   z\times -> \tuplet, \set tupletSpannerDuration -> \tupletSpan
(ly:make-moment 1 4) -> (ly:make-moment 1/4)
(ly:make-duration 0 0 1 2) -> (ly:make-duration 0 0 1/2)c             C   s`   dd }t d|| } t dd| } t dd| } t dd	| } t d
d| } t dd	| } | S )Nc             S   s   t | d}t | d}||d @ dkr8d||f S |dkrT|dkrTd|d  S |dkrp|dkrpd	|d  S |dkrd
| S d||f S )Nr   r   r   z\tupletSpan 1*%d/%dr!   r&   z\tupletSpan %d..r    z\tupletSpan %d.z\tupletSpan %d)r   r9   )r   r  r   r   r   r   sub_dur`  s    zconv.<locals>.sub_durzP\\set\s+tupletSpannerDuration\s*=\s*#\(ly:make-moment\s+([0-9]+)\s+([0-9]+)\s*\)z\\unset tupletSpannerDurationz\\tupletSpan \\defaultz\\times(\s*)([0-9]+)/([0-9]+)z\\tuplet\1\3/\2z/(\(ly:make-moment\s+-?[0-9]+)\s+([1-9][0-9]*\))z\1/\2z?(\(ly:make-moment\s+-?[0-9]+)\s+([0-9]+\s+-?[0-9]+)\s([0-9]+\))z\1/\2/\3z>(\(ly:make-duration\s+-?[0-9]+\s+[0-9]+\s+[0-9]+)\s+([0-9]+\)))r   r   )r   rB  r   r   r   r   \  s    )r   r4   r+   z.\accepts ... -> \accepts ... \defaultchild ...c             C   s&   dd }t dtd d || } | S )Nc             S   sN   t d| dr| dS t d| dr8| dS t dd| ddS )Nz
\s*\\[A-Z]r   r   z\\defaultchild[^-_a-zA-Z]z5(?
[ 	]*|[ 	]+)\\accepts(\s+(?:#?".*?"|[-_a-zA-Z]+))z\g<0>\1\\defaultchild\2)r   r;   r9   r   r   )r   r   r   r   matchaccepts  s    

zconv.<locals>.matchacceptsz\\context\s*@?\{(r   z)\})r   r   r-  )r   rC  r   r   r   r     s    )r   r4   r   z8#(ly:set-option 'old-relative)
\relative -> \relative c'c             C   s   t d| r&ttd  tt t t d| }|rlt d|jd |  t js`t d| rfd}qpd}nd}t 	d	d
| d | } | S )Nz#[#$]\(ly:set-option\s+'old-relativez#(ly:set-option 'old-relative)zI\\language\s(?!\s*#?"(?:nederlands|deutsch|english|norsk|suomi|svenska))"z	^[^%
]*\{uW   \\language\s(?!\s*#?"(?:catalan|espanol|español|italiano|français|portugues|vlaams))"z$(ly:make-pitch 0 0)zdo'zc'z(\\relative)(\s+(\{|[\\<]))z\1 z\2)
r   r   r	   r   r   r   rQ   rz   r  r   )r   r   Zdor   r   r   r     s    )r   r4   r-   z@Rename OctavateEight to ClefModifier, rename related properties.c             C   st   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } t dd| } t dd| } | S )NZOctavateEightZClefModifierzoctavate-eight-interfacezclef-modifier-interfaceZclefOctavationZclefTranspositionZclefOctavationFormatterZclefTranspositionFormatterZclefOctavationStyleZclefTranspositionStyleZcueClefOctavationZcueClefTranspositionZcueClefOctavationFormatterZcueClefTranspositionFormatterZcueClefOctavationStyleZcueClefTranspositionStyle)r   r   )r   r   r   r   r     s"    )r   r4   r   z?\column { \vspace #2 } -> \column { \combine \null \vspace #2 }c             C   s&   dd }t dtd d || } | S )Nc             S   s   t dd| d}|S )Nz(\\\\?)vspace(\s)z\1combine \1null \1vspace\2r   )r   r   r9   )r   r   r   r   r   vspace_replace  s    zconv.<locals>.vspace_replacez&\\(?:left-|right-|center-|)column\s*\{r   z\})r   r   r-  )r   rD  r   r   r   r     s    )r   r4   r   z1Flag.transparent and Flag.color inherit from Stemc             C   s.   t dd| } t dd| } t dd| } | S )Nzv(((?:\\once\s*)?)\\override\s+((?:\w+\.)?)Stem\.(transparent|color)\s*=\s*(#\S+))\s+\2\\override\s+\3Flag\.\4\s*=\s*\5z\1z\(((?:\\once\s*)?)\\revert\s+((?:\w+\.)?)Stem\.(transparent|color))\s+\2\\revert\s+\3Flag\.\4zV(\\tweak\s+((?:\w+\.)?)Stem\.(transparent|color)\s+(#\S+))\s+\\tweak\s+\2Flag\.\3\s+\4)r   r   )r   r   r   r   r     s    )r   r4   r   zn\tempo 4. = 50~60 -> \tempo 4. = 50-60
-| -> -!
pipeSymbol, escapedParenthesisOpenSymbol ... -> "|", "\\(" ...c                s   t dd| } dd }t dt d || } t dd| } d	d
dddddddddg}dddddddddddg dd | d!  fd"d#}t d$ t || } | S )%Nz(=\s*[0-9]+\s*)~(\s*[0-9]+\s)z\1-\2c             S   s"   |  dr|  dd S |  dS )Nr   !r   )r9   )r   r   r   r   subnonstring  s    
zconv.<locals>.subnonstringz
([-^_])\||z|[-^_][-^_]z\bdashBar\bZdashBangZ
pipeSymbolZbracketOpenSymbolZbracketCloseSymbolZtildeSymbolZparenthesisOpenSymbolZparenthesisCloseSymbolZescapedExclamationSymbolZescapedParenthesisOpenSymbolZescapedParenthesisCloseSymbolZescapedBiggerSymbolZescapedSmallerSymbolz"|"z"["z"]"z"~"z"("z")"z"\\!"z"\\("z"\\)"z"\\>"z"\\<"z\b(?:(z)|(z))\bc                sD    fdd}| j r  | j d  S dt|| ddd  d S )Nc                s   t dd | jd  S )Nz["\\]z\\\g<0>r   )r   r   	lastindex)r   )replr   r   instring  s    z+conv.<locals>.wordreplace.<locals>.instringr   "r   r   )rG  r   r   r9   )r   rI  )rH  wordsr   r   wordreplace  s    zconv.<locals>.wordreplacer   )r   r   r8  r   )r   rF  ZorigrL  r   )rH  rK  r   r     s>    	
)r   r4   r   z(\stringTuning \notemode -> \stringTuningc             C   s6   t dd| } t d| r2ttd  ttd | S )Nz3\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?\}z\\stringTuning\1\2z[^-\w]staff-padding[^-\w]zstaff-paddingzOStaff-padding now controls the distance to the baseline, not the nearest point.)r   r   r   r	   r   r
   )r   r   r   r   r   %  s    
)r   r4   r   zhDynamic_engraver -> New_dynamic_engraver+Dynamic_align_engraver
New_dynamic_engraver -> Dynamic_engraverc             C   s    t dd| } t dd| } | S )Nz9(?
?[ 	]*\\(?:consists|remove)\s*)("?)Dynamic_engraver\2z6\1\2New_dynamic_engraver\2\1\2Dynamic_align_engraver\2ZNew_dynamic_engraverZDynamic_engraver)r   r   )r   r   r   r   r   0  s
    )r   r4   rG   z?(make-relative (a b) b ...) -> make-relative (a b) #{ a b #}...c             C   s    t dd| } t dd| } | S )Nza(\(make-relative\s+\(\s*(([A-Za-z][-_A-Za-z0-9]*)(?:\s+[A-Za-z][-_A-Za-z0-9]*)*)\s*\)\s*)\3(?=\s)z\1(make-event-chord (list \2))za(\(make-relative\s+\(\s*([A-Za-z][-_A-Za-z0-9]*(?:\s+([A-Za-z][-_A-Za-z0-9]*))+)\s*\)\s*)\3(?=\s)z#\1(make-sequential-music (list \2)))r   r   )r   r   r   r   r   <  s
    )r   r-   r   c             C   s   | S )Nr   )r   r   r   r   r   G  s    )r   r   r   z:\lyricsto \new/\context/... -> \new/\context/... \lyricstoc             C   sp   dt  d }td| d | d | d d| } td| d d	| } td| d
 d| } tdd	| } | S )Nz(?:#?"[^"]*"|\bz\b)z(\\lyricsto\s*z\s*)(\\(?:new|context)\s*z
(?:\s*=\s*z)?\s*)z\2\1z\s*)\\lyricmode\b\s*z\1z\s*)\\lyrics\b\s*z\\new Lyrics \1z\\lyricmode\s*(\\lyricsto\b))r7  r   r   )r   wordr   r   r   r   M  s    )r   r   r&   zkeySignature -> keyAlterationsc             C   s.   t dd| } t dd| } t dd| } | S )Nz\bkeySignature\bZkeyAlterationsz\blastKeySignature\bZlastKeyAlterationsz\blocalKeySignature\bZlocalAlterations)r   r   )r   r   r   r   r   [  s    )r   r   r   zthin-kern -> segno-kernc             C   s   t dd| } | S )Nz\bthin-kern\bz
segno-kern)r   r   )r   r   r   r   r   c  s    z<(?:^|(?<!\\)(?:\\\\)+|(?<=[^-_\\a-zA-Z])|(?<=[^a-zA-Z][-_]))z(?![a-zA-Z]|[-_][a-zA-Z]))r   r   r,   zimplicitTimeSignatureVisibility -> initialTimeSignatureVisibility
csharp -> c-sharp
TimeSignature: style = #'() -> style = #'numberedc             C   sT   t dd| } t dt d t d| } t jdd| t jd} t jd	d
| t jd} | S )Nz#\bimplicitTimeSignatureVisibility\bZinitialTimeSignatureVisibilityr   z$[a-g])((?:sharp){1,2}|(?:flat){1,2})z\1-\2z\\override
                   (\s+)
                   ([a-zA-Z]+\.)?TimeSignature.style
                   (\s*)
                   =
                   (\s*)
                   \#'\(\)z0\\override\1\2TimeSignature.style\3=\4#'numbered)flagsz\\tweak
                   (\s+)
                   (TimeSignature\.)?style
                   (\s*)
                   \#'\(\)
                   (\s+)
                   \\time
                   z$\\tweak\1\2style\3#'numbered\4\\time)r   r   	before_idafter_idVERBOSE)r   r   r   r   r   v  s    

)r   r   r   zwhiteout -> whiteout-box
(define-xxx-function (parser location ...) -> (define-xxx-function (...)
(xxx ... parser ...) -> (xxx ... ...)
ChordNameVoice -> ChordNamesc                s   t dd| } t dd| } t dd| } t dd| } d	d
 }t dtd d || }  fddfdd  | } t dt d d| } t dd| } | S )Nz\\whiteout(?![a-z_-])z\\whiteout-boxz\b\.whiteout(?![a-z_-])\bz.whiteout-boxz#'whiteout(?![a-z_-])\bz#'whiteout-boxz\bstencil-whiteout\bzstencil-whiteout-boxc             S   s   dd }t d|| dS )Nc             S   s:   |  dtd|  d d dtdd|  d }|S )	Nr   z(?<=\s|["\\()])r   z(?=\s|["\\()])z(*location*)z#(?<=\s|["\\()])parser(?=\s|["\\()])z
(*parser*)r    )r9   r   r   )r   r   r   r   r   subsub  s    z#conv.<locals>.subst.<locals>.subsubz2(\([-a-z]+\s*\(+)parser\s+([-a-z]+)\s*((?:.|\n)*)$r   )r   r   r9   )r   rR  r   r   r   r     s    zconv.<locals>.substz8\(define-(?:music|event|scheme|void)-function(?=\s|["(])r   z\)c                s   |  d |  d S )Nr   r   )r9   )r   )innerr   r   rH    s    zconv.<locals>.replc                s   t dtd d  | } | S )Na  (\((?:ly:parser-lexer|ly:parser-clone|ly:parser-output-name|ly:parser-error|ly:parser-define!|ly:parser-lookup|ly:parser-has-error\?|ly:parser-clear-error|ly:parser-set-note-names|ly:parser-include-string|note-names-language|display-lily-music|music->lily-string|note-name->lily-string|value->lily-string|check-grob-path|event-chord-wrap!|collect-bookpart-for-book|collect-scores-for-book|collect-music-aux|collect-book-music-for-book|scorify-music|collect-music-for-book|collect-book-music-for-book|toplevel-book-handler|default-toplevel-book-handler|print-book-with-defaults|toplevel-music-handler|toplevel-score-handler|toplevel-text-handler|toplevel-bookpart-handler|book-music-handler|context-mod-music-handler|bookpart-music-handler|output-def-music-handler|print-book-with-defaults-as-systems|add-score|add-text|add-music|make-part-combine-music|make-directed-part-combine-music|add-quotable|paper-variable|make-autochange-music|context-mod-from-music|context-defs-from-music)(?=\s|[()]))(r   z+)(?:\s+parser(?=\s|[()])|\s*\(\*parser\*\)))r   r   r#  )r   )rH  r   r   rS    s    /zconv.<locals>.innerz$(\(\s*\(ly:music-function-extract\s+z*\s*\)\s+)\(\*parser\*\)\s*\(\*location\*\)z\1ZChordNameVoicerH   )r   r   r#  r7  )r   r   r   )rS  rH  r   r     s    
3
)r   r   r   zRmusic-has-type -> music-is-of-type?
\applyOutput #'Context -> \applyOutput Contextc             C   s    t dd| } t dd| } | S )Nz+(?<=\s|["\\()])music-has-type(?=\s|["\\()])zmusic-is-of-type?z(\\applyOutput\s+)#'([a-zA-Z])z\1\2)r   r   )r   r   r   r   r     s    )r   r   r   z,c:5.x, c:5^x, c:sus -> c:3.5.x, c:3.5^x, c:5c             C   sX   t dd| } t dd| } t dd| } t dd| } t dd| } t d	d| } | S )
Nz:5([.^][1-9])z:3.5\1z&:3\.5((?:\.[0-9]+)*\^(?:[0-9]+\.)*)3\.z:5\1z8:3\.5((?:\.[0-9]+)*\^?:[0-9]+(?:\.[0-9]+)*)\.3(?![.0-9])z :3\.5((?:\.[0-9]+)*)\^3(?=\s|\})z:sus(?=\s|\})z:5z:1\.5(?=\s|[.^}]))r   r   )r   r   r   r   r     s    
)r   r   r   z'partcombine*Once -> \once \partcombine*c             C   s>   t dd| } t dt d d| } t dt d d| } | S )Nz?(\\partcombine(?:Apart|Chords|Unisono|SoloII?|Automatic))Once\bz	\\once \1z(\\partcombineForcez)\s*##f(\s)z\1\2z)\s*##t(\s)z\\once \1\2)r   r   r.  )r   r   r   r   r     s    )r   r   r   zwhiteout-box -> whiteoutc             C   s.   t dd| } t dd| } t dd| } | S )Nz\\whiteout-box(?![a-z_-])z
\\whiteoutz\b\.whiteout-box(?![a-z_-])\bz	.whiteoutz#'whiteout-box(?![a-z_-])\bz
#'whiteout)r   r   )r   r   r   r   r     s    )r   r   r8   z0...-spacing #'prop... = -> ...-spacing.prop... =c             C   s   t dt d t| } | S )Nz(\s)((?:markup-markup-spacing|markup-system-spacing|score-markup-spacing|last-bottom-spacing|score-system-spacing|system-system-spacing|top-markup-spacing|top-system-spacing)(?:\s+#\s*'\s*z)+)(?=\s*=))r   r   r7  r;  )r   r   r   r   r     s    )r   r   rm   z"\time #'(2 3) ... -> \time 2,3 ...c             C   s>   dd }t d|| } t d|| } dd }t d|| } | S )Nc             S   s   |  dtdd|  d S )Nr   z\s+r   r   )r9   r   r   )r   r   r   r   rH  *  s    zconv.<locals>.replz2(beatStructure\s*=\s*)#'\(([0-9]+(?:\s+[0-9]+)+)\)z'(\\time\s*)#'\(([0-9]+(?:\s+[0-9]+)+)\)c             S   s@   t dd| d}|dt| d t| d  | d S )Nz\s+r   r   r!   r   r   )r   r   r9   r   )r   r   r   r   r   rH  2  s    z2#'\(([0-9]+(?:\s+[0-9]+)+)\)(\s+%\s*beatStructure))r   r   )r   rH  r   r   r   r   (  s    )r   r   r  z>\context ... \modification -> \context ... \with \modificationc             C   sX   dt  d }dtdt  d | ddg }td| d	 | d
 | d d| } | S )Nz(?:#?"[^"]*"|\bz\b)r   z
(z)\s*=\s*\\with(?:\s|\\|\{)ZRemoveEmptyStavesZRemoveAllEmptyStavesz>(\\(?:drums|figures|chords|lyrics|addlyrics|(?:new|context)\s*z
(?:\s*=\s*z)?)\s*)(\\(?:z))z\1\\with \2)r7  r   r   r:  r   )r   rM  Zmodsr   r   r   r   ;  s    )r   r   r?   zeid -> output-attributes.id or output-attributes
for \tweak, \override, \overrideProperty, and \revertc             C   s|   d}d| d }d| d }t || r\ttd  ttdd  ttd	d  tt t |d
| } t |d| } | S )Nz=(?:[a-zA-Z\200-\377](?:[-_]?[a-zA-Z\200-\377])*(?:\s*\.\s*))*z)(\\(?:tweak|override|overrideProperty)\s+z)id(\s*=?\s*(?:\\|#\s*\())z0(\\(?:tweak|override|overrideProperty|revert)\s+z)idz"output-attributes"zCPreviously the "id" grob property (string) was used for SVG output.r   z;Now "output-attributes" (association list) is used instead.z\1output-attributes\2z\1output-attributes.id)r   r   r	   r   r
   r   r   )r   pathZmanual_editsZ	automaticr   r   r   r   G  s    )r   r   r   z\language "deutsch": beh -> hehc             C   s4   t d| }|r0|dt|kr0t dd| } | S )Nu   \\language\s*#?"([a-zçñ]+)"Zdeutschz\bbeh\bZheh)r   r:  r   r   r   )r   Zchangesr   r   r   r   b  s    z<(?:[a-zA-Z_][-a-zA-Z_0-9]*|"(?:[^\\"]|\\.)*"|[-+]?[0-9.]+|\(z\)))r   r   r   a<  \note #"4." -> \note {4.}
\markup-command #" -> \markup-command "
\partcombine* -> \partCombine, \autochange -> \autoChange
scripts.trilelement -> scripts.trillelement
\fermataMarkup -> \fermata
remove \\powerChords, deprecate banter-chord-names and jazz-chord-names
\compressFullBarRests  -> \compressEmptyMeasures
c                s   dd  dd  fdd}fdd}fd	d
}t t|| } t dtd d || } t dtd d || } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t dd| } t d| rttd  tt | S )Nc             S   sJ   |  dd dkr.|  dd |  d d S |  dd |  d d S )Nr   r   Zblmr   z{\r(   r   )r9   )r   r   r   r   repl1lyw  s    zconv.<locals>.repl1lyc             S   sH   d|  ddddddddd	d
dddd|  d | d| d f S )Nz%s(ly:make-duration %d %d)r   r   r   r    r!   r#   r%   r&   r   r   r   )r   r   r   8Z16Z32Z64Z128Z256r   r   r   )r9   r   rz   )r   r   r   r   repl1scm|  s    
zconv.<locals>.repl1scmc                s   t d | dS )NzF(\\note\s*)#?"((?:1|2|4|8|16|32|64|128|256|breve|longa|maxima)\s*\.*)"r   )r   r   r9   )r   )rU  r   r   replly  s    zconv.<locals>.repllyc                s   t d | dS )Nz9"()(1|2|4|8|16|32|64|128|256|breve|longa|maxima)\s*(\.*)"r   )r   r   r9   )r   )rX  r   r   replscm  s    zconv.<locals>.replscmc                s   t d | dS )NzB(#:note\s+)"(1|2|4|8|16|32|64|128|256|breve|longa|maxima)\s*(\.*)"r   )r   r   r9   )r   )rX  r   r   
replmarkup  s    zconv.<locals>.replmarkupz^\(tuplet-number::(?:fraction-with-notes|non-default-fraction-with-notes|append-note-wrapper)\sr   z\)z
\(markup\sz(\\(?:fret-diagram(?:-terse)?|harp-pedal|justify-string|lookup|musicglyph|postscript|simple|tied-lyric|verbatim-file|with-url|wordwrap-string|discant|freeBass|stdBass|stdBassIV|stdBassV|stdBassVI)\s*)[#$](\\?")z\1\2zK\\partcombine(Force|Up|Down|Chords|Apart|Unisono|SoloI|SoloII|Automatic|)\bz\\partCombine\1z\\autochangez\\autoChangez\\powerChordsr"   z"scripts\.trilelement"z"scripts.trillelement"z\\fermataMarkupz	\\fermataz\\(compress|expand)FullBarRestsz\\\1EmptyMeasuresz#(banter|jazz)-chordnamesz"alternative chord naming functions)r   r   r5  r#  r   r	   r   r   )r   rY  rZ  r[  r   )rU  rX  r   r   n  s.    	)r   r   r   z.\tocItem "string" -> \tocItem \markup "string"c             C   s   t dd| } | S )Nz\\tocItem\s+"z\\tocItem \\markup ")r   r   )r   r   r   r   r     s    )r   r   r   c             C   s   | S )Nr   )r   r   r   r   r     s    )>r   rQ   sysZlilylibr
   r   r   r   	Exceptionr   r   stderrwriter	   r   r   r   rU   rx   r{   r}   r~   r   r   r   r   r   compiler   r   r   r   r   r   r   r   r   r   r   r#  r$  r&  r'  r)  r*  r+  r,  r-  r8  r.  r5  r/  r7  r9  r=  rA  r@  r;  r?  rO  rP  Zmatchscmargr   r   r   r   <module>   sB  
		
		L		
	)
	"	
	y%$# -

(" ""
		
"
		 ,		 	

 #(3


	F<		$@*&4[
	5