o
    fȊ                    @   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_ Z9d`da Z:e dbe2 dc dd e3 d] e1 de e1 df e3 dg Z;edhdidjd Zedkdldmd Zedndodpd Zedqdrdsd Zedtdudvd Zedwdxdyd Zedzed{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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>dZ?dd Z@dd ZAdd ZBedddd ZedÐdădd Zededdd ZedȐdɃdd ZdZCed̐d̓dd ZdZDedАdуdd ZdZEdZFdZGed֐d׃dd Zedِdڃdd Zg dܢZHdZIedސd߃dd ZedZJedddd Zedddd ZdZKedddd Zedddd Zedddd ZedZLedZMedZNedddd ZedZOedddd Zedddd Zededd d 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   a/home/lily/lilypond-2.24.4/release/binaries/mingw/lilypond/lilypond-2.24.4/python/convertrules.pyr   $   s    r   c                 C   s   t td|   d S )Nzwarning: %s)stderr_write_sr   r   r   warning,      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   r   zrule.<locals>.decr   )r   r   r   r   r   r   rule2   s   r   )r      	   z*\header { key = concat + with + operator }c                 C      t d| rttd  | S )Nz\\multiz\multiresearchr	   	NOT_SMARTr   r   r   r   convH      r   )r   r      zdeprecated %s\octavec                 C   s$   t d| rttd  tt | S )Nz\\octaver"   )r   r   r	   r   UPDATE_MANUALLYr   r   r   r   r   O   s   )r   r      z&deprecated \textstyle, new \key syntaxc                 C      t dd| } | S )Nz\\textstyle([^;]+);z"\\property Lyrics . textstyle = \1r   subr   r   r   r   r   X   s   )r   r      z0\musical_pitch -> \musicalpitch, \meter -> \timec                 C       t dd| } t dd| } | S )Nz\\musical_pitch\\musicalpitchz\\meterz\\timer&   r   r   r   r   r   a      )r   r   r   zbump version for releasec                 C      | S r   r   r   r   r   r   r   h      )r   r   r   zC\accidentals -> \keysignature, specialaccidentals -> keyoctaviationc                 C   .   t dd| } t dd| } t dd| } | S )Nz\\accidentals\\keysignaturezspecialaccidentals *= *1zkeyoctaviation = 0zspecialaccidentals *= *0zkeyoctaviation = 1r&   r   r   r   r   r   m      )r   r      c                 C       t d| rtttd  | S )Nz\\headerznew \header formatr   r   r	   r   r
   r   r   r   r   r   u      )r   r      z\melodic -> \notesc                 C   r%   )Nz\\melodic([^a-zA-Z])z	\\notes\1r&   r   r   r   r   r   |      )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+   )r   r      zChoireStaff -> ChoirStaffc                 C   r)   )NZChoireStaff
ChoirStaffz\\outputz	output = r&   r   r   r   r   r      r+   )r   r      z=foo = \translator {\type .. } ->\translator {\type ..; foo; }c                 C   r2   )Nz[a-zA-Z]+ = *\translatorz\translator syntaxr3   r   r   r   r   r      s   )r   r      z\lyric -> \lyricsc                 C   r%   )Nz	\\lyrics*z\\lyricsr&   r   r   r   r   r      r6   )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   r      zChord syntax stuffc                 C   r,   r   r   r   r   r   r   r      r-   )r   r      z<a ~ b> c -> <a b> ~ cc                 C   r%   )Nz<([^>~]+)~([^>]*)>z	<\1 \2> ~r&   r   r   r   r   r      r6   )r   r      z<[a b> <a b]>c -> [<a b> <a b>]c                 C   r)   )Nz<\[z[<z\]>z>]r&   r   r   r   r   r      r+   )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\\type	\\contextz\\TYPEZ	textstyleZ	textStyler&   r   r   r   r   r      s   )r   r      zB\repeat NUM Music Alternative -> \repeat FOLDSTR Music Alternativec                 C   r   )Nz\\repeatz\repeatr   r   r   r   r   r         )r   r   r!   zMfontsize -> fontSize, midi_instrument -> midiInstrument, SkipBars -> skipBarsc                 C   r.   )NZSkipBarsZskipBarsZfontsizeZfontSizeZmidi_instrumentZmidiInstrumentr&   r   r   r   r   r      r0   )r   r   r$   z7{,tie,slur}ydirection -> {v,tieV,slurV}erticalDirectionc                 C   r.   )NZtieydirectionZtieVerticalDirectionZslurydirectionZslurVerticalDirectionZ
ydirectionZverticalDirectionr&   r   r   r   r   r      r0   )r   r   r(   zhshift -> horizontalNoteShiftc                 C   r%   )NZhshiftZhorizontalNoteShiftr&   r   r   r   r   r      r6   )r   r   4   zdeprecate %sz	\groupingc                 C   r%   )Nz\\grouping[^;]*;r8   r&   r   r   r   r   r      r6   )r   r   7   z\wheel -> \codac                 C   r%   )Nz\\wheelz\\codar&   r   r   r   r   r      r6   )r   r   A   z6slurdash -> slurDash, keyoctaviation -> keyOctaviationc                 C   r)   )NZkeyoctaviationZkeyOctaviationZslurdashZslurDashr&   r   r   r   r   r      r+   )r   r   B   zsemi -> voltac                 C   r%   )Nz\\repeat *"?semi"?z\\repeat "volta"r&   r   r   r   r   r      r6   )r   r   C   zbeamAuto -> noAutoBeamingc                 C   r%   )Nz"?beamAuto"? *= *"?0?"?znoAutoBeaming = "1"r&   r   r   r   r   r      r6   )r   r1   r   z'automaticMelismas -> automaticMelismatac                 C   r%   )NZautomaticMelismasautomaticMelismatar&   r   r   r   r   r     r6   )r   r1   r   zdynamicDir -> dynamicDirectionc                 C   r%   )NzdynamicDir\bZdynamicDirectionr&   r   r   r   r   r   	  r6   )r   r5   r7   z\cadenza -> \cadenza{On|Off}c                 C   r)   )Nz\\cadenza *0 *;z\\cadenzaOffz\\cadenza *1 *;z\\cadenzaOnr&   r   r   r   r   r     r+   )r   r5   r9   zbeamAuto moment propertiesc                 C   r%   )Nz0"?beamAuto([^"=]+)"? *= *"([0-9]+)/([0-9]+)" *;*z!beamAuto\1 = #(make-moment \2 \3)r&   r   r   r   r   r     
   )r   r5      zstemStyle -> flagStylec                 C   r%   )NZ	stemStyleZ	flagStyler&   r   r   r   r   r     rM   )r   r5   rE   zstaffLineLeading -> staffSpacec                 C   r%   )NZstaffLineLeadingZ
staffSpacer&   r   r   r   r   r   &  rM   )r   r5      zdeprecate %s \repetitionsc                 C   r   )Nz\\repetitionsrP   r   r   r   r   r   r   .  rF   )r   r5   #   z"textEmptyDimension -> textNonEmptyc                 C   r)   )NztextEmptyDimension *= *##tztextNonEmpty = ##fztextEmptyDimension *= *##fztextNonEmpty = ##tr&   r   r   r   r   r   6  s   )r   r5   &   z$\musicalpitch { a b c } -> #'(a b c)c                 C   s<   t dd| } t dd| } t d| rt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   r5   '   z\key A ;  ->\key a;c                 C      dd }t d|| } | S )Nc                 S   s   d|  d  S )Nz\key %s;r   )grouplowermatchr   r   r   replaceN     zconv.<locals>.replacez\\key ([^;]+);r&   )r   rZ   r   r   r   r   L  s   )r   r5   )   z/[:16 c4 d4 ] -> \repeat "tremolo" 2 { c16 d16 }c                 C   r2   )Nz\[:znew tremolo formatr3   r   r   r   r   r   U  r4   )r   r5   *   z>Staff_margin_engraver deprecated, use Instrument_name_engraverc                 C   r%   )NZStaff_margin_engraverZInstrument_name_engraverr&   r   r   r   r   r   \  r6   )r   r5   1   z%noteHeadStyle value: string -> symbolc                 C   r%   )Nz note[hH]eadStyle\s*=\s*"?(\w+)"?znoteHeadStyle = #'\1r&   r   r   r   r   r   b     )r   r5   :   c                 C   r   )Nr/   z\keysignaturer   r   r   r   r   r   i  r    )r   r5   ;   z\key X ; -> \key X major; c                 C   r%   )Nz\\key *([a-z]+) *;z\\key \1 \\major;r&   r   r   r   r   r   p  r6   )r   r5   D   z9latexheaders = "\input global" -> latexheaders = "global"c                 C   r%   )Nzlatexheaders *= *"\\\\input zlatexheaders = "r&   r   r   r   r   r   v  rM   )r   r5   \   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_]+)Properties\1ZRepeat_engraverZVolta_engraverr&   r   r   r   r   r     s   )r   r5   ]   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\\autoBeamOffr&   r   r   r   r   r     s   )r   r5   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 #\1rS   r   r   r   r   r     s
   )r   r5   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 = #'\2r&   r   r   r   r   r     s4   )r   r5   f   z3beamAutoEnd -> autoBeamSettings \push (end * * * *)c                 C   <   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 * * * *) = \1r&   r   r   r   r   r        )r   r5   o   z#\push -> \override, \pop -> \revertc                 C   r)   )Nz\\pushz
\\overridez\\popz\\revertr&   r   r   r   r   r     r+   )r   r5   q   zLyricVoice -> LyricsVoicec                 C   r.   )NZ
LyricVoiceLyricsVoicezChord[Nn]ames*.Chord[Nn]ames*zChordNames.ChordNamezChord[Nn]ames([ 	
]+\\override)zChordName\1r&   r   r   r   r   r     s   c                 C   s   d} d}| D ]8}|dkr|}q|t jv r#tt|td td }n|t jvr+d}n|t jv r8|dkr8| }| | } |}q| S )Nr8   r
   0Ax)stringZdigitschrordZlettersZ	lowercaseupper)r   Zlastxrs   r   r   r   regularize_id"  s   

rx   )r   r5   u   zidentifier names: %sz$!foo_bar_123 -> xfooBarABCc                 C   s0   dd }dd }t d|| } t d|| } | S )Nc                 S      t | dS Nr   rx   rV   rX   r   r   r   regularize_dollar_reference6     z)conv.<locals>.regularize_dollar_referencec                 S   s   dt | d d S )Nr   r   z = r|   rX   r   r   r   regularize_assignment9     z#conv.<locals>.regularize_assignmentz\$([^\t\n ]+)z
([^ 	
]+)[ 	]*= *r&   )r   r}   r   r   r   r   r   4  s
   )r   r5   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   rz   r{   r|   rX   r   r   r   regularize_paperB  r~   zconv.<locals>.regularize_paperz(paper_[a-z]+)Z	sustainup	sustainUpZnobreakZnoBreakZsustaindownsustainDownZsostenutoupsostenutoUpZsostenutodownsostenutoDownZ	unachordaZ	unaChordaZ	trechordeZ	treChorder&   )r   r   r   r   r   r   @  s   )r   r5   z   z4drarnChords -> chordChanges, \musicalpitch -> \pitchc                 C   r)   )NZdrarnChordsZchordChangesr*   z\\pitchr&   r   r   r   r   r   O  r+   )r   r5      z'ly-X-elt-property -> ly-X-grob-propertyc                 C   r%   )Nzly-([sg])et-elt-propertyzly-\1et-grob-propertyr&   r   r   r   r   r   V  r6   )r   r5      z.point-and-click argument changed to procedure.c                 C   r%   )Nzpoint-and-click +#tz$point-and-click line-column-locationr&   r   r   r   r   r   \  r_   zfollowThread -> followVoice.c                 C   r.   )NZfollowThreadZfollowVoicezThread.FollowThreadzVoice.VoiceFollowerZFollowThreadZVoiceFollowerr&   r   r   r   r   r   c  r0   )r   r5      z$font-point-size -> font-design-size.c                 C   r%   )Nzfont-point-sizezfont-design-sizer&   r   r   r   r   r   k  r6   )r   r5      zxNoDots -> xSolidc                 C   r%   )Nz([a-zA-Z]*)NoDotsz\1Solidr&   r   r   r   r   r   q  r6   )r   r5      zChorda -> Cordac                 C   r%   )Nz([Cc])hord([ea])z\1ord\2r&   r   r   r   r   r   w  r6   )r   r5      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MinimumVerticalExtentr&   r   r   r   r   r   }  s   )r   r5      zsemicolons removedc                 C   rl   )	Nz\\key[ 	]*;z\\key \\default;z\\mark[ 	]*;z\\mark \\default;z([^ 
	;]);(;+)z\1 ;\2z
([^ 	;#]);rf   r&   r   r   r   r   r     s
   )r   r5      z.default-neutral-direction -> neutral-directionc                 C   r%   )Nzdefault-neutral-directionzneutral-directionr&   r   r   r   r   r     r6   )r   r5      z*"(align" -> "(axis", "(rows" -> "(columns"c                 C   r)   )Nz\(alignz(axisz\(rowsz(columnsr&   r   r   r   r   r     r+   )r   r9   !   z,SystemStartDelimiter -> systemStartDelimiterc                 C   r%   )NZSystemStartDelimiterZsystemStartDelimiterr&   r   r   r   r   r     r6   )r   r9   rR   zarithmetic... -> spacing...c                 C   r)   )Nzarithmetic-multiplierzspacing-incrementzarithmetic-basicspacezshortest-duration-spacer&   r   r   r   r   r     r+   )r   r9   (   z%s property namesZbreakAlignOrderc                 C   rU   )Nc              
   S   sN   ddddddddd	d
	}|  d}t| D ]\}}t|||}q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))rV   listitemsr   r'   )rY   Z
break_dictZpropskvr   r   r   func  s   
conv.<locals>.funcz)breakAlignOrder *= *#'\(([a-z_
	A-Z ]+)\)r&   r   r   r   r   r   r     s
   )r   r9   r^   znoAutoBeaming -> autoBeamingc                 C   r)   )NznoAutoBeaming *= *##fzautoBeaming = ##tznoAutoBeaming *= *##tzautoBeaming = ##fr&   r   r   r   r   r     r+   )r   r9   rG   z#tuplet-X-visibility -> X-visibilityc                 C   r)   )Nztuplet-bracket-visibilityzbracket-visibilityztuplet-number-visibilitynumber-visibilityr&   r   r   r   r   r     r+   )r   r9   8   z&Pitch::transpose -> ly-transpose-pitchc                 C   r%   )NzPitch::transposezly-transpose-pitchr&   r   r   r   r   r     r6   )r   r9   r`   ZtextNonEmptyc                 C   r)   )NztextNonEmpty *= *##tz(TextScript \\set #'no-spacing-rods = ##fztextNonEmpty *= *##fz(TextScript \\set #'no-spacing-rods = ##tr&   r   r   r   r   r        )r   r9   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 )	Nr   zminimumV@rticalExtentminimumVerticalExtentr   zextraV@rticalExtentZextraVerticalExtentr   ZverticalExtentr&   r   r   r   r   r     r?   )r   r9   >   z%visibility-lambda -> break-visibilityc                 C   r%   )Nzvisibility-lambdazbreak-visibilityr&   r   r   r   r   r     r6   )r   r9   rK   z'automaticMelismata turned on by defaultc                 C   sF   t d| r!t d| d u r!ttd  ttd td t | S )Nz
\addlyricsrL   z8automaticMelismata is turned on by default since 1.5.67.r   r   r   r	   r   r
   r   r   r   r   r   r     s   )r   r9   rb   z'ly-set-X-property -> ly-set-X-property!c                 C   r)   )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+   )r   r9   G   zextent-[XY] -> [XY]-extentc                 C   r)   )Nzextent-XzX-extentzextent-YzY-extentr&   r   r   r   r   r     r+   )r   r9   H   z,set! point-and-click -> set-point-and-click!c                 C   r.   )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   r;   r9   z6Stems: flag-style -> stroke-style; style -> flag-stylec                 C   r.   )Nz
flag-stylezstroke-stylezStem([ ]+)\\override #'stylezStem \\override #'flag-stylezStem([ ]+)\\set([ ]+)#'stylezStem \\set #'flag-styler&   r   r   r   r   r      s   c                 C   s   dt | d S )Nz(make-music-by-name '%sEvent)r   r|   rX   r   r   r   subst_req_name*  r[   r   )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'   r   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STARTr1   z(make-span-event '%s %s))r   r   rV   spanner_subst)rY   stypeZmtyper   r   r   subst_ev_nameA  s
   r   c                 C      dt |  S )Nz = #%sr   rX   r   r   r   subst_definition_ev_nameI     r   c                 C   s   t | }d| S )Nz#(ly-export %s)r   rY   r   r   r   r   subst_inline_ev_nameM  s   r   c                 C   r   )Nz  = #(make-event-chord (list %s))r   rX   r   r   r   subst_csp_definitionR  r   r   c                 C   r   )Nz)#(ly-export (make-event-chord (list %s)))r   rX   r   r   r   subst_csp_inlineV  r   r   )r   r<   r1   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<   r5   z
ly- -> ly:c                 C   sD   t dd| } g d}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-originalset-point-and-click!zmake-momentz
make-pitchzpitch-octavezpitch-alterationzpitch-notenamezpitch-semitoneszpitch<\?zdir\?zmusic-duration-compressr   z\b(%s)|zly:\1r   zset-point-and-click)r   r'   join)r   ZchangedZorigrer   r   r   r   m  s   )r   r<   r7   z<< >> -> < <  > >c                 C   s0   t d| r| S t dd| } t dd| } | S )Nznew-chords-done<<z< <>>z> >)r   r   r'   r   r   r   r   r     s
   )r   r<   r9   z$\transpose TO -> \transpose FROM  TOc                 C   r)   )Nz\\transposez\\transpose c'z\\transpose c' *([a-z]+)'z\\transpose c \1r&   r   r   r   r   r     r+   )r   r<   r;   znote\\script -> note-\scriptc                 C   s(   g d}d |}td| d| } | S )N)Z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   r)   )NzO\\property *ChordNames *\. *ChordName *\\(set|override) *#'style *= *#('[a-z]+)z#(set-chord-name-style \2)z8\\property *ChordNames *\. *ChordName *\\revert *#'styler8   r&   r   r   r   r   r     r   )r   r<      z"transpose-pitch -> pitch-transposec                 C   r%   )Nzly:transpose-pitchzly:pitch-transposer&   r   r   r   r   r     r6   )r   r<   rA   z&ly:XX-molecule-YY -> ly:molecule-XX-YYc                 C   J   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     s   )r   r<      z#linewidth = -1 -> raggedright = ##tc                 C   r%   )Nz.linewidth *= *-[0-9.]+ *(\\mm|\\cm|\\in|\\pt)?zraggedright = ##tr&   r   r   r   r   r        )r   r<   rC   zdivisiomaior -> divisioMaiorc                 C   r.   )NZdivisiomaiorZdivisioMaiorZdivisiominimaZdivisioMinimaZdivisiomaximaZdivisioMaximar&   r   r   r   r   r     r   )r   r<   rN   zSkip_req  -> Skip_eventc                 C   r%   )NZSkip_req_swallow_translatorZSkip_event_swallow_translatorr&   r   r   r   r   r     r_   )r   r<   rE   zAgroupOpen/Close  -> start/stopGroup, #'outer  -> #'enclose-boundsc                 C   r.   )NZ	groupOpenZ
startGroupZ
groupCloseZ	stopGroupz#'outerz#'enclose-boundsr&   r   r   r   r   r     s   )r   r<   r!   z	remove %sGraceContextc                 C   sD   t d| rt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   r%   )Nz(set|override|revert) *#'typez
\1 #'styler&   r   r   r   r   r     s   )r   r<   rO   zbarNonAuto -> automaticBarsc                 C   r)   )NzbarNonAuto *= *##tzautomaticBars = ##fzbarNonAuto *= *##fzautomaticBars = ##tr&   r   r   r   r   r     s   )r   r<      cluster syntaxc                 C   s.   t d| rtttd  tt t | S )Nz-(start|stop)Clusterr   r   r   r	   r   r
   r#   r   r   r   r   r   r     s
   )r   r<      znew Pedal style syntaxc                 C   r)   )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-typer8   r&   r   r   r   r   r   (  s   c                 C   s  |  d}d| }td|r|S td|r|S td|r!|S g }|fdd}td||}d	}|D ]}|d	kr<|}||krId|  d   S q4d	g}d	g}d	g}	d	}
|
|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||}|
|ksYd	|	d	| d	| }d(|||f S ))Nr   z<%s>z\\\\z
\\propertyz^\s*\)?\s*\\[a-zA-Z]+c                 S   s   | | d | dS Nr1   r   r   rV   )mdursr   r   r   sub_durs@  s   
zsub_chord.<locals>.sub_dursz([a-z]+[,'!? ]*)([0-9]+\.*)r8   c                 S   s&   |  d}||vr|| |  dS r   rV   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 \! r1   r   )r   dynsr   r   r   sub_dyn_end^  s   
zsub_chord.<locals>.sub_dyn_endz(\\!)\s*([a-z]+)c                 S      d|vr	| d | dS )Nz-))r   r   r   r   r   r   r   	sub_slursd     

zsub_chord.<locals>.sub_slursc                 S   r   )N-\)\)r   r   r   r   r   r   sub_p_slursi  r   zsub_chord.<locals>.sub_p_slursz\)[ ]*([a-z]+)z\\\)[ ]*([a-z]+)c                 S   r   )Nz-((r   r   r   r   r   r   sub_begin_slursq  r   z"sub_chord.<locals>.sub_begin_slursz([a-z]+[,'!?0-9 ]*)\(c                 S   r   )N-\(\(r   r   r   r   r   r   sub_begin_p_slursy  r   z$sub_chord.<locals>.sub_begin_p_slursz([a-z]+[,'!?0-9 ]*)\\\(c                 S   sL   |  d}|dkr|d dS |dkr|d dS |dkr$|d dS )	Nr   @STARTCRESC@z\<@STARTDECRESC@z\>-?\\!z\!r8   r   )r   r   r   r   r   r   sub_dyns  s   



zsub_chord.<locals>.sub_dynsr   r   c                 S   s    |  d}||vr|| dS )Nr   r8   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   r   r   r   r   
sub_pslurs  s   

zsub_chord.<locals>.sub_pslursz@STARTCHORD@%s@ENDCHORD@%s%s)rV   r   r   rY   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  s   

R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><r   r   z%% new-chords-done %%@STARTCHORD@
@ENDCHORD@\\<r   \\>r   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@@ACCENT@)r   r   r'   r   )r   ZsimendZsimstartZ
chordstartZchordendZ
marker_strr   r   r   
sub_chords  s<   r   z([-^_]|\\mark)\s*(#\s*'\s*)\(z\(\s*music\bz\(\s*columns\bz\(\s*([a-zA-Z]+)r   r   c                 C   s   d}t | }|rz|| d |d  d }| |dd  } d}td| }|D ]}| dkr6|d }n|d }|dkrD| } nq)| d | }td|}td	|}t	d
|}t
d	|}td|}|| }| |d  } t | }|s	||  }|S )Nr8   r   z \markupr1   r   [()]r   z{\\musicglyph{z{\\\1r>   )markup_startr   endr   finditerrV   
musicglyphr'   columnssubmarkup_startleftparrightpar)r   resultrY   nesting_levelparsparZ
markup_endZmarkupr   r   r   text_markup  s6   


r   c                 C   rl   )	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   articulation_substitute  s   r  z!("(?:[^"\\]|\\.)*")|(#\s*'?\s*\()c                 C   s   d}t | }|rp| d |  }|t| }|dr-||d }| |dd  } n<| | d  } d}td| }|D ]}| dkrL|d }n|d }|dkrZ| } nq?|| d |  }| |d  } t | }|s	|t|  }|S )Nr8   r   r   r   r   )string_or_schemer   r   r  rV   r   r   r   )r   r   rY   Zprevious_chunkr   r   r   Z
scheme_endr   r   r   smarter_articulation_subst  s2   



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-\\\\r   r   r   r   z-\[[z-\]]z-~~r   r   r	   r   r#   r   r'   r   r   r   r   r   D  s   )r   r   r1   z\newcontext -> \newc                 C   rl   )	Nzly:set-context-property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   W  s   )r   r   r5   z%s misspellingz\acciaccaturaz4, fingerHorizontalDirection -> fingeringOrientationsc                 C   sT   t dd| } t d| rt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   r7   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   	@FIGOPEN@r   
@FIGCLOSE@z\figures { %s }rV   r   r'   r   r   r   r   r   figures_replace  s   
zconv.<locals>.figures_replacez\\figures[ \t\n]*{([^}]+)}r   r   r   r   z([-^_])>r   r   r   r   r   r   z
@ENDSIMUL@r   z@STARTSIMUL@r   r  r  )r   r   r   r
   r'   )r   r  r   r   r   r   z  s*   )r   r   r9   z1HaraKiriVerticalGroup -> RemoveEmptyVerticalGroupc                 C   r%   )NZHaraKiriVerticalGroupRemoveEmptyVerticalGroupr&   r   r   r   r   r     r6   )r   r   r;   ly:get-fontc                 C   sh   t d| rttd  ttd  tt t t d| r2ttd  ttd td t | S )Nr  )/(ly:paper-get-font (ly:grob-get-paper foo) .. )r  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| }|r-ttd|d|d	f  t t d
| s9t d| rHttd  ttd t | S )Nc                 S   s8   |  d}dddddd| }d|  d	|  d
|f S )Nr5   ZFLATzDOUBLE-FLATNATURALSHARPzDOUBLE-SHARP)-1-2rq   12z(ly:make-pitch %s %s %s)r   r1   rV   )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   r1   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
   rV   r   r   )r   r  r   r   r   r   r     s,   
)r   r      zdash-length -> dash-fractionc                 C   s6   t d| rttd  ttd  tt t | S )Ndash-length)r  dash-fraction)r   r   r	   r   r   r#   r   r   r   r   r   r     s   )r1   r   r   zfont-relative-size -> font-sizec                 C   (   dd }t d|| } t dd| } | S )Nc                 S   s   ddt | d  S )Nz#'font-size = #%dr1   r   intrV   rX   r   r   r   r     r   r   z(#'font-relative-size\s*=\s*#\+?([0-9-]+)z#'font-family\s*=\s*#'ancientz#'font-family = #'musicr&   r   r   r   r   r     s   )r1   r   r1   z&ly:get-music-length -> ly:music-lengthc                 C   r%   )Nzly:get-music-lengthzly:music-lengthr&   r   r   r   r   r     r6   )r1   r   r5   zstanza -> instrumentc                 C   r%   )Nz	\.\s+stz=z. instr r&   r   r   r   r   r     r6   )r1   r   r7   zAremoval of automaticMelismata; use melismaBusyProperties instead.c                 C   rU   )Nc                 S   sL   |  d}|  d}|dkr|dkrdS d| S |dks"J d| d	| S )
Nr   r1   tZScorer8   z* \property %s.melismaBusyProperties \unsetr   z%Value must be ##t or ##f and not ##%sz4\property %s.melismaBusyProperties = #'(melismaBusy)r  )rY   cbr   r   r   r     s   

r   z?\\property ([a-zA-Z]+)\s*\.\s*automaticMelismata\s*=\s*##([ft])r&   r   r   r   r   r     s
   )r1   r   r<   z"\translator Staff -> \change Staffc                 C   r%   )Nz\\translator\s+([a-zA-Z]+)z\\change \1r&   r   r   r   r   r     r6   )r1   r   r=   z\newaddlyrics -> \lyricstoc                 C   r%   )Nz\\newaddlyricsz
\\lyricstor&   r   r   r   r   r     r6   )r1   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rdd|>  }ndddd	| }|d
| 7 }d|| df S )Nr8   r   r1   r   z%dbrevelongamaxima).z\note #"%s" #%sr5   r  )rY   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      s   )r1   r   r@   zOttavaSpanner -> OttavaBracketc                 C   r%   )NZOttavaSpannerOttavaBracketr&   r   r   r   r   r   <  r6   )r1   r   rA   z'set-staff-size -> set-global-staff-sizec                 C   r%   )Nz\(set-staff-size z(set-global-staff-size r&   r   r   r   r   r   B  r6   )r1   r   rB   z#style = dotted -> dash-fraction = 0c                 C   r%   )Nz#'style\s*=\s*#'dotted-linez#'dash-fraction = #0.0 r&   r   r   r   r   r   H  r_   )r1   r   r   z'LyricsVoice . instr(ument) -> vocalNamec                 C   r)   )Nz-LyricsVoice\s*\.\s*instrument\s*=\s*("[^"]*")zLyricsVoice . vocalName = \1z(LyricsVoice\s*\.\s*instr\s*=\s*("[^"]*")zLyricsVoice . vocNam = \1r&   r   r   r   r   r   O  s   )r1   r   rC   z2\musicglyph #"accidentals-NUM" -> \sharp/flat/etc.c                 C   rU   )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  rq   r  r  z-3z-4z\%sr   r  r   r   r   r   r   sub_acc[  s   
conv.<locals>.sub_accz'\\musicglyph\s*#"accidentals-([0-9-]+)"r&   r   r3  r   r   r   r   Y  s
   )r1   r   rN   z-\partcombine syntax change to \newpartcombinec                 C   s8   t d| rttd  tt t t dd| } | S )N\\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   m  s   )r1   r   rE   zB\newpartcombine -> \partcombine,
\autochange Staff -> \autochange
c                 C   r)   )Nz\\newpartcombiner6  z\\autochange\s+Staffz\\autochange r&   r   r   r   r   r   }  s   )r1   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| rTttdd  t dd| } t dd| } t dd| } t d| rwt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"r8   z\\pitchnames zpitchnames = z\\chordmodifiers zchordmodifiers = z\bdrums\b\s*=zdrumContents = 	\\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Lyricsrp   zL@ricsVoicez
\bLyrics\bZLyricsContextZLyricsVoiceContext)r   r   r	   r
   r'   r   r   r   r   r     s:   )r1   r   r$   znonevent-skip -> skip-musicc                 C   r%   )Nznonevent-skipz
skip-musicr&   r   r   r   r   r     r6   )r1   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   X   t dd| } t dd| } t dd| } t dd| } t d	d
| } t dd| } | S )Nzmolecule-callbackprint-functionZbrew_moleculeprintzbrew-new-markup-moleculezText_item::printrp   r8  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_extentr8   r&   r   r   r   r   r     s   )r1   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\.r8   zLyrics\.zChordNames\.zrev@rtrevertzs@tsetzoverrid@overrideZmoleculestencilZMoleculeZStencilr&   r   r   r   r   r     s0   )r1   r   rO   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 \1r  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'  r8   zA#(override-auto-beam-setting %(prop)s %(num)s %(den)s%(context)s))rV   	groupdict)r   rA  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@  rC  r   r   r   r     s   	)r1   r   r   zmusic-list? -> ly:music-list?c                 C   r)   )Nzmusic-list\?zly:music-list?z\|\s*~z~ |r&   r   r   r   r   r   	  r+   )r1   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| rHt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-bound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-variable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     sH   )r1   r      zMore Scheme function renamingc                 C   r9  )Nzly:set-grob-property!zly:grob-set-property!zly:set-mus-property!zly:music-set-property!r
  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-propertyr&   r   r   r   r   r   2  s   )r1   r      zproperty transposing -> tuningc                 C   rU   )Nc                    s   t t| dd\}  fdddD }t|d } |d  }d| }|g d	|d  7 }|d7 }|d
k rB|| d 7 }d| S |d
krL||d 7 }d| S )Nr1   r@   c                    s   g | ]}| kr|qS r   r   ).0rs   gr   r   
<listcomp>B  s    z'conv.<locals>.subst.<locals>.<listcomp>)r   r1   r7   r9   r<   r   r   r@   r   r'  Zcdefgab)ZesesZesr8   isZisisr   ,'z\transposition %s )divmodr   rV   len)r   oZlower_pitchesr   r   r   rJ  r   subst?  s   zconv.<locals>.substz6\\set ([A-Za-z]+\s*\.\s*)?transposing\s*=\s*#([-0-9]+)r&   r   rS  r   r   r   r   =  s
   )r1   r   r   zImake-music-by-name -> make-music,
new syntax for setting \arpeggioBracketc                 C   r)   )Nzmake-music-by-namez
make-musiczB\\override\s+.*Arpeggio\s+#.print-function\s+=\s+\\arpeggioBracketz\\arpeggioBracketr&   r   r   r   r   r   U  s
   )r1   r      z1\center -> \center-align, \translator -> \contextc                 C   r)   )Nz\\center([^-])z\\center-align\1z\\translatorrD   r&   r   r   r   r   r   ^  r+   )r1   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   r9  )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-propertiesly:mutable-music-propertiesZcentralCPositionZmiddleCPositionr&   r   r   r   r   r   e  s"   )r1   r      zremove \alias Timingc                 C   r%   )Nz\\alias\s*"?Timing"?r8   r&   r   r   r   r   r   |  r6   )r1   r   r   z&breakAlignOrder -> break-align-orders.c                 C   r%   )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     rM   )r1   r   "   z)set-paper-size -> set-default-paper-size.c                 C   r%   )Nz\(set-paper-sizez(set-default-paper-sizer&   r   r   r   r   r     r_   )r1   r   $   z:ly:mutable-music-properties -> ly:music-mutable-propertiesc                 C   r%   )NrW  zly:music-mutable-propertiesr&   r   r   r   r   r     r_   )r1   r1   r   c                 C   r,   r   r   r   r   r   r   r     r-   )r1   r5   r   z\apply -> \applymusicc                 C      t dd| S )Nz	\\apply\b\\applymusicr&   r   r   r   r   r        )r1   r5   r1   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vrd|  d S |  dS )Nr   )ZRemoveEmptyStaffZAncientRemoveEmptyStaffContextZEasyNotation\r   r  r   r   r   r   r     s   
r   z\\([a-zA-Z]+)Context\bzly:paper-lookupzly:output-def-lookup)r   r   r	   r   r#   r
   r'   r   r   r   r   r     s   )r1   r5   r7   z\notesc                 C   r%   )N	\\notes\br8   r&   r   r   r   r   r     r6   )r1   r5   r;   z lastpagefill -> raggedlastbottomc                 C   r%   )Nzlastpagefill\s*=\s*"?1"zraggedlastbottom = ##tr&   r   r   r   r   r     r6   )r1   r5   r  z2remove \consistsend, strip \lyrics from \lyricsto.c                 C   r)   )Nz\\consistsendz
\\consistsz9\\lyricsto\s+("?[a-zA-Z]+"?)(\s*\\new Lyrics\s*)?\\lyricsz\\lyricsto \1 \2r&   r   r   r   r   r     s
   )r1   r5   r   z=neo_mensural -> neomensural, if-text-padding -> bound-paddingc                 C   r)   )NZneo_mensuralZneomensuralzif-text-paddingzbound-paddingr&   r   r   r   r   r     r+   )r1   r5   r=   z5\addlyrics -> \oldaddlyrics, \newlyrics -> \addlyricsc                 C   s4   t dd| } t dd| } t d| rtd | S )Nz\\addlyrics\\oldaddlyricsz\\newlyricsz\\override\s*TextSpannerzM
Warning: TextSpanner has been split into DynamicTextSpanner and TextSpanner
r   r'   r   r	   r   r   r   r   r     s   )r1   r5   r   z$\setMmRestFermata -> ^\fermataMarkupc                 C   r%   )Nz!\\setMmRestFermata\s+(R[0-9.*/]*)z\1^\\fermataMarkupr&   r   r   r   r   r     r_   )r1   r5   r@   z{\newpage -> \pageBreak, junk \script{up,down,both},
soloADue -> printPartCombineTexts, #notes-to-clusters -> \makeClusters
c                 C   f   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     s    )r1   r5   rC   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\\figuremoder`  z
\\notemoder7  z
\\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 DrumStaffr&   r   r   r   r   r     s   )r1   r5   rN   zlslurBoth -> slurNeutral, stemBoth -> stemNeutral, etc.
\applymusic #(remove-tag 'foo) -> \removeWithTag 'fooc                 C   r)   )Nz>(slur|stem|phrasingSlur|tie|dynamic|dots|tuplet|arpeggio|)Bothz	\1Neutralz.\\applymusic\s*#\(remove-tag\s*'([a-z-0-9]+)\)z\\removeWithTag #'\1r&   r   r   r   r   r     s   )r1   r5   rE   zText_item -> Text_interfacec                 C   r%   )NZ	Text_itemZText_interfacer&   r   r   r   r   r     r6   )r1   r5   r   z#paper -> layout, bookpaper -> paperc                 C   sF   t dd| } t dd| } t d| rt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   )r1   r5   rO   z4\context Foo = NOTENAME -> \context Foo = "NOTENAME"c                 C   r%   )Nz(\\context\s+([a-zA-Z]+)\s*=\s*([a-z]+)\sz\\context \1 = "\2" r&   r   r   r   r   r   1  rM   )r1   r5   r   zregularize other identifiersc                 C   rU   )Nc                 S   rz   r{   r|   r_  r   r   r   r'   ;  r~   zconv.<locals>.subz@(maintainer_email|maintainer_web|midi_stuff|gourlay_maxmeasures)r&   )r   r'   r   r   r   r   9  s
   )r1   r5   rD  z2petrucci_c1 -> petrucci-c1, 1style -> single-digitc                 C   r)   )NZpetrucci_c1zpetrucci-c1Z1stylezsingle-digitr&   r   r   r   r   r   B  r+   )r1   r7   r   c                 C   r,   r   r   r   r   r   r   r   I  r-   )r1   r9   r   z\quote -> \quoteDuringc                 C   r%   )Nz*\\quote\s+"?([a-zA-Z0-9]+)"?\s+([0-9.*/]+)z!\\quoteDuring #"\1" { \\skip \2 }r&   r   r   r   r   r   N  rM   )r1   r9   r   z"ly:import-module -> ly:module-copyc                 C   r%   )Nzly:import-modulezly:module-copyr&   r   r   r   r   r   V  r_   )r1   r9   r1   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\2 \\line {r  r  r   r   r   
get_markupf  s   
zconv.<locals>.get_markupz\\markup\s*{([^}]|{[^}]*})*}r&   )r   rd  r   r   r   r   ]  s   )r1   r9   r5   zEly:find-glyph-by-name -> ly:font-get-glyph, remove - from glyphnames.c                 C   rl   )	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   n  s   )r1   r9   r@   z'\set Slur #\'dashed = #X -> \slurDashedc                 C   r%   )Nz7\\override\s+(Voice\.)?Slur #'dashed\s*=\s*#\d*(\.\d+)?z\\slurDashedr&   r   r   r   r   r   x  r_   )r1   r9   rA   z@\encoding: smart recode latin1..utf-8. Remove ly:point-and-clickc                 C   r  )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 )Nr   latin1r1   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)rV   r	   r   r
   r   )rY   encodingr   r   r   r     s    


r   z$\\encoding\s+"?([a-zA-Z0-9]+)"?(\s+)z$#\(ly:set-point-and-click '[a-z-]+\)r8   r&   r   r   r   r   r     s   )r1   r9   rN   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 )Nrg  rF  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     s   )r1   r9   rE   zly:warn -> ly:warningc                 C   r%   )Nz	ly:warn\bz
ly:warningr&   r   r   r   r   r     r6   )r1   r9   r(   zwarn about auto beam settingsc                 C   sF   t d| st d| r!t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     s   
)r1   r9   rD  z>unfoldrepeats -> unfoldRepeats, compressmusic -> compressMusicc                 C   r)   )NZunfoldrepeatsZunfoldRepeatsZcompressmusiccompressMusicr&   r   r   r   r   r     r+   )r1   r;   r   c                 C   r,   r   r   r   r   r   r   r     r-   )r1   r<   r   z+ly:get-default-font -> ly:grob-default-fontc                 C   r[  )Nzly:get-default-fontzly:grob-default-fontr&   r   r   r   r   r     r]  )r1   r<   r   zly:parser-define -> ly:parser-define!
excentricity -> eccentricity
Timing_engraver -> Timing_translator + Default_bar_line_engraver
c                 C   r.   )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     s   )r1   r<   r1   zly:X-moment -> ly:moment-Xc                 C   r%   )Nzly:(add|mul|mod|div)-momentzly:moment-\1r&   r   r   r   r   r     r6   )r1   r<   r7   z(keyAccidentalOrder -> keyAlterationOrderc                 C   r%   )NZkeyAccidentalOrderZkeyAlterationOrderr&   r   r   r   r   r     r6   )r1   r<   r;   zrPerformer_group_performer -> Performer_group, Engraver_group_engraver -> Engraver_group,
inside-slur -> avoid-slurc                 C   r   )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-slurr&   r   r   r   r   r     s   )r1   r<   r=   z\applyxxx -> \applyXxxc                 C   rl   )	Nz\\applyoutputz\\applyOutputz\\applycontextz\\applyContextr\  z\\applyMusiczly:grob-suicidezly:grob-suicide!r&   r   r   r   r   r     s
   )r1   r<   r   z"tabloid" -> "11x17"c                 C   r%   )Nz	"tabloid"z"11x17"r&   r   r   r   r   r     r6   )r1   r<   r@   z"outputProperty -> overridePropertyc                 C   r%   )NZoutputPropertyZoverridePropertyr&   r   r   r   r   r   	  r6   )r1   r<   rA   z!layout engine refactoring [FIXME]c                 C   sj   dd }t d|| } t d| rttd  t d| r#ttd  t d| r3ttd td | S )	Nc                 S   s\   ddddd|  d }|  d}|  d}|d	kr d
||f S |dkr*d||f S td)Nzsprings-and-rodszafter-line-breakingzbefore-line-breakingr?  )zspacing-procedurezafter-line-breaking-callbackzbefore-line-breaking-callbackr:  r5   r   r1   r<  zrevert %s #'callbacks %% %s
r>  zoverride %s #'callbacks #'%sz)1st group should match revert or override)rV   RuntimeError)rY   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   rS   )r   rj  r   r   r   r   	  s   )r1   r<   rB   z8Remove callbacks property, deprecate XY-extent-callback.c                 C   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$\\override +([A-Z.a-z]+) #'callbacksz\\override \1z/\\revert ([A-Z.a-z]+) #'callbacks % ([a-zA-Z]+)z\\revert \1 #'\2z([XY]-extent)-callbackrf   r  ZVerticalAxisGroupz)\\set ([a-zA-Z]*\.?)minimumVerticalExtentz1\\override \1VerticalAxisGroup #'minimum-Y-extentr   z/\\override VerticalAxisGroup #'minimum-Y-extentz'\\set ([a-zA-Z]*\.?)extraVerticalExtentz/\\override \1VerticalAxisGroup #'extra-Y-extentz"\\set ([a-zA-Z]*\.?)verticalExtentz)\\override \1VerticalAxisGroup #'Y-extentr&   r   r   r   r   r   )	  s.   )r1   r<   r   z+Use grob closures iso. XY-offset-callbacks.c                 C   s4   t d| rttd  t d| rttd  | S )Nz[XY]-offset-callbackszposition-callbacksr   r   r   r   r   r   >	  s
   )r1   r<   rE   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   )r1   r<   r   z!\tag #'(a b) -> \tag #'a \tag #'bc                 C   rU   )Nc                 S   s&   |  d }dd |D }d|S )Nr   c                 S   s   g | ]}d | qS )z	\tag #'%sr   )rI  r   r   r   r   rL  U	  s    z*conv.<locals>.sub_syms.<locals>.<listcomp>r   )rV   splitr   )r   ZsymsZtagsr   r   r   sub_symsS	  s   
zconv.<locals>.sub_symsz\\tag #'\(([^)]+)\)r&   )r   rm  r   r   r   r   Q	  s   )r1   r<   r   r   c                 C   r%   )Nz#'number-visibilityzU#'number-visibility % number-visibility is deprecated. Tune the TupletNumber instead
r&   r   r   r   r   r   \	  rM   )r1   r<   r   z(ly:spanner-get-bound -> ly:spanner-boundc                 C   r%   )NrE  zly:spanner-boundr&   r   r   r   r   r   d	  r6   )r1   r<   rU  z0override Stem #'beamed-* -> #'details #'beamed-*c                 C   s$   dD ]}t d| d| | } q| S )N)zbeamed-lengthszbeamed-minimum-free-lengthsZlengthsz#beamed-extreme-minimum-free-lengthsz\\override\s+Stem\s+#'%sz\\override Stem #'details #'%sr&   )r   r   r   r   r   r   j	  s   
)r1   r<   rV  z\epsfilec                 C   r%   )Nz\\epsfile *#"z\\epsfile #X #10 #"r&   r   r   r   r   r   u	  r6   )r1   r<   rX  z'Foo_bar::bla_bla -> ly:foo-bar::bla-blac                 C   rU   )Nc                 S   s   |  d}d| dd S )Nr   zly:r
   -)rV   rW   rZ   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   ro  r   r   r   r   {	  s
   )r1   r<       z%foobar -> foo-bar for \paper, \layoutc                 C   s(   g d}|D ]\}}t ||| } q| 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pagetopspace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headsephead-separation)Zfootsepfoot-separation)Zrightmarginzright-margin)Z
leftmarginzleft-margin)Zprintfirstpagenumber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-spacingr&   )r   Zidentifier_subsr   r#  r   r   r   r   	  s   "z)debug-beam-quanting -> debug-beam-scoringc                 C   r%   )Nzdebug-beam-quantingzdebug-beam-scoringr&   r   r   r   r   r   	  r6   )r1   r<   rZ  zMdef-(music-function|markup-command) -> define-(music-function|markup-command)c                 C   r)   )Nzdef-music-functionzdefine-music-functionzdef-markup-commandzdefine-markup-commandr&   r   r   r   r   r   	  r+   )r1   r<   r   zCrehearsalMarkAlignSymbol/barNumberAlignSymbol -> break-align-symbolc                 C   r)   )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   )r1   r   r7   z&(page-)penalty -> (page-)break-penaltyc                 C   r)   )Nzpage-penaltyzpage-break-penaltyz([^-])penaltyzbreak-penaltyr&   r   r   r   r   r   	  r+   )r1   r   r;   z:\context Foo \applyOutput #bla -> \applyOutput #'Foo #bla c                 C   r%   )Nz+\\context\s+"?([a-zA-Z]+)"?\s*\\applyOutputz\\applyOutput #'\1r&   r   r   r   r   r   	  r   )r1   r   r   zannotatefoo -> annotate-fooc                 C   r.   )NZannotatepagezannotate-pageZannotateheaderszannotate-headersZannotatesystemszannotate-systemsr&   r   r   r   r   r   	  r0   )r1   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 TupletNumberrb  r   r   r   r   r   	  s   )r1   r   rA   zTinstrument -> instrumentName, instr -> shortInstrumentName, vocNam -> shortVocalNamec                 C   r.   )NZvocNamZshortVocalNamez\.instr\s*=z.shortInstrumentName =z\.instrument\s*=z.instrumentName =r&   r   r   r   r   r   	  r0   )r1   r   rC   zdeprecate \tempo in \midic                 C   rU   )Nc                 S   s~   t | d}t| d}t | d}d}|dkr'|d }|d7 }|dksd|> d|>  }d|d > d }d|| |f S )Nr   r1   r5   r   zk
  \midi {
    \context {
      \Score
      tempoWholesPerMinute = #(ly:make-moment %d %d)
      }
    }

)r   rV   rQ  )r   r+  r-  countZlog2dennumr   r   r   	sub_tempo	  s   
conv.<locals>.sub_tempoz9\\midi\s*{\s*\\tempo ([0-9]+)\s*([.]*)\s*=\s*([0-9]+)\s*}r&   r   rx  r   r   r   r   	  s
   )r1   r   r!   z1printfirst-page-number -> print-first-page-numberc                 C   r%   )Nzprintfirst-page-numberrt  r&   r   r   r   r   r   
  r6   )r1   r=   r   c                 C   r,   r   r   r   r   r   r   r   
  r-   )r1   r   r1   z"ly:clone-parser -> ly:parser-clonec                 C   r[  )Nzly:clone-parserzly:parser-cloner&   r   r   r   r   r    
  s   )r1   r   r5   z&no-spacing-rods -> extra-spacing-widthc                 C   r)   )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   )r1   r   r9   z?deprecate cautionary-style. Use AccidentalCautionary propertiesc                 C   rl   )	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 = #-2r&   r   r   r   r   r   /
  rm   )r1   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   s&   t | ddd}g dd|  S )Nr   Mrn  )	zaccidentals.doublesharpz)accidentals.sharp.slashslash.stemstemstemzaccidentals.sharpz!accidentals.sharp.slashslash.stemzaccidentals.naturalzaccidentals.mirroredflatzaccidentals.flatzaccidentals.mirroredflat.flatzaccidentals.flatflatr7   )r   rV   rZ   )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'   rZ   )r   r}  r   r   r   r   <
  s   )r1   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_performerrb  r   r   r   r   r   V
  s   )r1   r   r   z7layout-set-staff-size -> layout-set-absolute-staff-sizec                 C   r%   )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   f
  r_   )r1   r   rA   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>
rS   r   r   r   r   r   m
  s   )r1   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| r)ttd  ttd ttd ttd | S )	Nc                 S   sz   d}d|  dfd|  dffD ]*\}}|r:t|r:|  d}|s#d}|  d}|s,d}|d||||f 7 }|d	7 }q|S )
Nr8   leftr5   rightr7   r   r1   zZ%s \override %sTextSpanner #'bound-details #'%s #'text = \markup { \draw-line #'(0 . %s) }r   )rV   float)r   r   varhoncerA  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.
rS   )r   r  r   r   r   r   {
  s   )r1   r   rO   z-#'break-align-symbol -> #'break-align-symbolsc                 C   r%   )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_   )r1   r   rQ   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| r!tttd  ttd ttd | S )Nzscripts\.caesurazscripts.caesura.curvedr  z$all settings related to dashed linesz7Use \override ... #'style = #'line for solid lines and
z8	\override ... #'style = #'dashed-line for dashed lines.rS   r   r   r   r   r   
  s   )r1   r   rR   zV\setEasyHeads -> \easyHeadsOn, \fatText -> \textLengthOn,
\emptyText -> \textLengthOffc                 C   r.   )NZsetEasyHeadsZeasyHeadsOnZfatTextZtextLengthOnZ	emptyTextZtextLengthOffr&   r   r   r   r   r   
  s   )r1   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 = #'textr&   r   r   r   r   r   
  s&   )r1   r   0   z!\compressMusic -> \scaleDurationsc                 C   r%   )Nrh  ZscaleDurationsr&   r   r   r   r   r   
  r6   )r1   r   2   zrmetronomeMarkFormatter uses text markup as second argument,
fret diagram properties moved to fret-diagram-details.c                 C   sz   t d| rttd  ttd ttdd  g d}|D ]}t || r:tttd|   ttdd  q | 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 propertiesrF  zfret-diagram-detailsr3   )r   Z
fret_propsZpropr   r   r   r   
  s"   
)r1   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sostenutoOffr&   r   r   r   r   r   
  s   )r1   r   rG   z\setHairpinDim -> \dimHairpinc                 C   s   |  dd} | S )NZsetHairpinDimr  )rZ   r   r   r   r   r     s   )r1   r   5   z/infinite-spacing-height -> extra-spacing-heightc                 C   r)   )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   )r1   r   rH   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| r%t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   rS   r   r   r   r   r     s   )r1   r   9   z:\center-align -> \center-column, \hcenter -> \center-alignc                 C   r)   )Nz([\\:]+)center-alignz\1center-columnzhcenter(\s+)zcenter-align\1r&   r   r   r   r   r   &  r+   )r1   r   <   z$printallheaders -> print-all-headersc                 C   r%   )NZprintallheaderszprint-all-headersr&   r   r   r   r   r   -  r6   )r1   r   =   z!gregorian-init.ly -> gregorian.lyc                 C   r%   )Nz!\\include(\s+)"gregorian-init.ly"z\\include\1"gregorian.ly"r&   r   r   r   r   r   3  r_   )r1   r   r   z-makam-init.ly -> makam.ly, \bigger -> \largerc                 C   r)   )Nz\\include(\s+)"makam-init.ly"z\\include\1"makam.ly"z([\\:])biggerz\1largerr&   r   r   r   r   r   :  s
   )r1   r   @   znsystemSeparatorMarkup -> system-separator-markup,
InnerStaffGroup -> StaffGroup, InnerChoirStaff -> ChoirStaffc                 C   s   t dd| } t d| r"tttd  ttd  tt t t d| r=t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   )r1   r@   r   z2Syntax changes for \addChordShape and \chord-shapec                 C   sh   t d| rttd  ttd tt t t d| r2t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   V  s   )r1   r@   r5   zRemove oldaddlyricsc                 C   s6   t d| rttd  ttd tt t | S )Nra  ZoldaddlyricszRoldaddlyrics is no longer supported. 
         Use addlyrics or lyricsto instead.
r   r   r   r   r   r   g  s   )r1   rA   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
   rZ   r   r   r   r   r   s  s
   )r1   rA   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| s)t d| r9t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    
)r1   rA   r7   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| r,ttd  ttd tt t dd| } t d| rIttd  ttd	 tt t d
| r_t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)rf   z(\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     s2   )r1   rA   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| r9ttd  ttd tt | S )Nzy\\(consists|remove)\s+"*(Swallow_(engraver|performer)|(Note|Rest|Skip_event)_swallow_translator|String_number_engraver)"*r8   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     s4   )r1   rA   rC   z*Unify fetaNumber and fetaDynamic encodingsc                 C   r[  )Nz\bfeta(Number|Dynamic)ZfetaTextr&   r   r   r   r   r     s   )r1   rA   rE   z7\RemoveEmpty*StaffContext -> \*Staff \RemoveEmptyStavesc                 C   r)   )N-\\RemoveEmpty(|Drum|Rhythmic|Tab)StaffContext\\\1Staff \\RemoveEmptyStaves \\AncientRemoveEmptyStaffContext#\\VaticanaStaff \\RemoveEmptyStavesr&   r   r   r   r   r     s   )r1   rA   r$   z%\cresc etc. are now postfix operatorsc                 C   r%   )Nz\\(cresc|dim|endcresc|enddim)\bz\\deprecated\1r&   r   r   r   r   r        )r1   rA   rH  z%interval-translate -> coord-translatec                 C   r%   )Nzinterval-translatezcoord-translater&   r   r   r   r   r     r  )r1   rA   rU  zEliminate beamSettings, beatLength, \setBeatGrouping, \overrideBeamSettings and \revertBeamSettings.
"accordion.accEtcbase" -> "accordion.etcbass"c                 C   s   dd }t d|| } t d| r!ttd  ttd tt t d| r7ttd  ttd	 tt t d
| rMttd
  ttd tt t d| rcttd  ttd tt t d| ryt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)DotZDiscantZ	BayanbaseZStdbaseZFreebaseZOldEEz"accordion.%s"r   r  r2  r   r   r   r3    s   r4  z"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setbeatGroupingr  r5  r   r   r   r     s:   )r1   rA   rX  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-diagram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 = #'noner  r   r   r   r   r   .  s   )r1   rA   rZ  z[Rename vertical spacing variables.
Add fretboard-table argument to savePredefinedFretboard.c                 C   rk  )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-tabler&   r   r   r   r   r   =  s   )r1   rA   rT   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-spacingr&   r   r   r   r   r   P  s&   )r1   rA   r   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| r,ttd  ttd tt | S )Nrr  z0Adjust settings for top-system-spacing instead.
rs  z1Adjust settings for last-bottom-spacing instead.
r   r   r	   r   r
   r#   r   r   r   r   r   g  s   )r1   rA   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| r*t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   v  s   )r1   rA   ,   zSRemove context from overrideTimeSignatureSettings and revertTimeSignatureSettings.
c                 C   r%   )Nz;\\(override|revert)TimeSignatureSettings(\s+[^#]*)(#[^#]*)#z\\\1TimeSignatureSettings\2#r&   r   r   r   r   r     s   )r1   rA   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| rNttd  tt t d| rbtdtd d  tt | S )Nc                 S   sn   g d}g d}d}| dkr|d7 }| d8 } | dks| dk r*|d8 }| d7 } | dk sd|||  ||  f }|S )N)r   r   r   r   r1   r5   r5   r7   r7   r9   r9   r;   )r  r  r  r  r  r  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                    s6   |   }d}|D ]} t|}|d| d 7 }q|S )Nr8   z,(ly:make-pitch z) )rl  r   )Zsemitone_listZtonesresZtoneargs)r  r   r   convert_tones  s   zconv.<locals>.convert_tonesc                    s   d |  d d S )NzstringTunings = #`(r   r   r  )matchobj)r  r   r   new_tunings  r   zconv.<locals>.new_tuningsz$stringTunings\s*=\s*#'\(([\d\s-]*)\)zukulele-(tenor|baritone)-tuningz\1-ukulele-tuningz[^-]page-top-spacerq  z"[^-]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,   )r1   rA   r  z!Replace bar-size with bar-extent.c                 C   rU   )Nc                 S   s*   dt | dd  }d| d | d S )Nz%gr   r1   zbar-extent = #'(-z . r   )r  rV   )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     s   )r1   rA   r  z3Woodwind diagrams: Changes to the clarinet diagram.c                 C   0   t d| rttd  ttd tt | S )Nz%\\woodwind-diagram\s*#[^#]*clarinet\sr  zDClarinet fingering changed to reflect actual anatomy of instrument.
r  r   r   r   r   r        )r1   rB   r   c                 C   r,   r   r   r   r   r   r   r        )r1   r   r<   z$Handling of non-automatic footnotes.c                 C   r  )N
\\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  )r1   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  )r1   r   r=   zJCreation of a Flag grob and moving of certain Stem properties to this grobc                 C   rc  )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 #'stencilr&   r   r   r   r   r     s    )r1   r   rC   z8\makeStringTuning, \contextStringTuning -> \stringTuningc                 C   r.   )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     s   )r1   r   rN   z<\markuplines -> \markuplist
Change Beam broken slope syntax.c                 C   sf   t dd| } t dd| } t dd| } t d| r1t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     s    c                 C      d|  d d|   S )Nz[^()]*?(?:\(z[^()]*?z\)[^()]*?)*?r   nr   r   r   paren_matcher)     r  c                 C   s   t dd| dS )Nz\$(.?)rf   r   r   r'   rV   r_  r   r   r   undollar_scm1  r   r  c                 C   sf   t dd| d}t dtd d t|}| j| d| d | | j| d| d  S )Nz#\$#r   z#`?\(rD  r   r   )r   r'   rV   r  r  rt   r   r   r  r   r   r   undollar_embedded5  s   8r  c                 C   s   t dtd d d| S )Nz\(ly:export\s+(rD  )\)rf   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 )Nly:export\s+r   $r   )r   r   rV   r  rt   r   r   r_  r   r   r   export_pullerB  s   
&r  c                 C   sB   | j | d| d t| d | j | d| d  S )Nr   r   )rt   r   r  rV   r   r_  r   r   r   ugly_function_rewriterH  s   Br  z`(?:set-time-signature|empty-music|add-grace-property|remove-grace-property|set-accidental-style)c                 C   sL   t t| ds!t d| dr!td d d | d d a| dS )Nr   r  r1   r'  r   r   r   )r   rY   should_really_be_music_functionrV   r   r_  r   r   r   record_uglyQ  s   
r  )r1   r   rE   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| rPt	t
d  | S )Nz(?s)#@?\{(.*?)#@?\}z2#\(define(?:-public)?\s+\(([-a-zA-Z]+)\b[^()]*?\)(rD  r  z\(define(?:-public)?\s+\(z\b[^()]*\)(z#(?=\(r   r  z#\(markup\*(?=\s)z$(markupz#\(r   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.   
)r1   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+(r9   r  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   )r1   r   r$   z/$(set-accidental-style ...) -> \accidentalStylec                 C   r.   )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\\accidentalStyler&   r   r   r   r   r   v  r   c                 C   r  )Nz[^{}]*?(?:{z[^{}]*?z}[^{}]*?)*?r   r  r   r   r   brace_matcher  r  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\}))(?:r   r   )r1   r   rD  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*r1   r   z\\footnote\2\1\3z\\footnoteGrobr   z(\s*z\\footnote\3\2\1z\\autoFootnoteGrobz\\footnote\2\1z\\autoFootnoter  )r   r'   matchargmatchmarkupr   r   r   r   r     s   ")r1   r   rp  ztempoWholesPerMinute -> \tempoc                 C   rU   )Nc                 S   s   t | d}t | d}||d @ dkr| dS |dkr3|d dkr3|dkr3d|d |d f S |d	krK|d
 dkrK|dkrKd|d |d
 f S d||f S )Nr   r1   r   rC   r<      z\tempo %d.. = %dr7   r  r5   Z   z\tempo %d. = %dz\tempo %d = %dr  r   rw  rv  r   r   r   rx    s   
ry  zh\\context\s*@?\{\s*\\Score\s+tempoWholesPerMinute\s*=\s*#\(ly:make-moment\s+([0-9]+)\s+([0-9]+)\)\s*@?\}r&   rz  r   r   r   r     s
   )r1   r   rT   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   )rV   expandr_  r   r   r   	match_fun  s   


z*conv.<locals>.not_first.<locals>.match_funr   )r   r  r   r   r   	not_first  s   zconv.<locals>.not_firstr   )|(\\footnote(?:\s*)?r  z)?\s+r   z\2 \\default)r   r'   matchfullmarkupr  r  )r   r  r   r   r   r     s.   )r1   r   r   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   r3   r   r   r   r   r     s   
)r1   r   r]   z,\set stringTuning -> \set Staff.stringTuningc                 C   r%   )Nz(\\set\s+)stringTuningz\1Staff.stringTuningr&   r   r   r   r   r     r6   z-[a-zA-Z\200-\377]+(?:[-_][a-zA-Z\200-\377]+)*)r1   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'   
wordsyntaxr   r   r   r   r     s   )r1   rC   r   c                 C   r,   r   r   r   r   r   r   r     r  )r1   rN   r   z blank-*-force -> blank-*-penaltyc                 C   r.   )Nzblank-page-forcezblank-page-penaltyzblank-last-page-forcezblank-last-page-penaltyzblank-after-score-page-forcezblank-after-score-page-penaltyr&   r   r   r   r   r     s   )r1   rN   r7   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   a0  (?x)
( \\bar |
  whichBar |
  defaultBarType |
  segnoType |
  doubleRepeatType |
  startRepeatType |
  endRepeatType |
  doubleRepeatSegnoType |
  startRepeatSegnoType |
  endRepeatSegnoType |
  BarLine \s* [#]'glyph |
  BarLine \s* [#]'glyph-name |
  SpanBar \s* [#]'glyph-name )
( \s* [=]? \s* [#]? )
)r1   rN   r9   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'   	barstringr   r   r   r   r     s&   z#'(?:z|\(\s*z(?:\s+z)*\s*\))z)*z(?:\s*\.\s*r  c              	   C   s"   |  ddtt|  d S )Nr   r*  r1   )rV   r   r   findallr  r_  r   r   r   path_replace1  s   "r  c                 C   s   t dt d t d t| S )Nz(\\(?:override|revert)\s+)(\s+r   )r   r'   	grob_spec	grob_pathr  r   r   r   r   convert_overrides_to_dots4  s   r  r   r  r  z)(z)?(\s+z)(\s+\\default)?)r1   rN   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| } | S )Nc                 S   sp   dd }|  dr|  dS |  d|  d }|  dr6|tdt d	 ||  d }|  d
s6d| }|S )Nc                 S   s6   d tt| d}|dv rd| }| d| S )Nr*  r1   )ZTimeSignaturerd   ZBarLinere   ZStaffSymbolr/  ZLedgerLineSpannerzStaff.r   )r   r   r  r  rV   )r   rs   r   r   r   fn_path_replaceE  s   z-conv.<locals>.patrep.<locals>.fn_path_replacer   r   r1   r7   r5   z(\s*)(r   r9   z\single)rV   r   r'   symbol_list)r   r  rs   r   r   r   patrepD  s   



zconv.<locals>.patrepz&(\\accidentalStyle\s+)#?"([-A-Za-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+)(r  )r   r'   	footnotecr  r  r  r  r  )r   r  r   r   r   r   ?  s:   
)r1   rN   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rd||f S |dkr*|dkr*d|d  S |dkr8|dkr8d	|d  S |dkr@d
| S d||f S )Nr   r1   r   z\tupletSpan 1*%d/%dr7   r<   z\tupletSpan %d..r5   z\tupletSpan %d.z\tupletSpan %dr  r  r   r   r   sub_duro  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  r   r   r   r   k  s(   )r1   rN   rB   z.\accepts ... -> \accepts ... \defaultchild ...c                 C   &   dd }t dtd d || } | S )Nc                 S   sN   t d| dr| dS t d| dr| 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   rY   rV   r   r'   r_  r   r   r   matchaccepts  s   


zconv.<locals>.matchacceptsz\\context\s*@?\{(r$   z)\}r   r'   r  )r   r  r   r   r   r     
   )r1   rN   r   z8#(ly:set-option 'old-relative)
\relative -> \relative c'c                 C   s   t d| rttd  tt t t d| }|r6t d|jd |  t js0t d| r3d}nd}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   rt   r   r{  r'   )r   r   Zdor   r   r   r     s$   
)r1   rN   rE   z@Rename OctavateEight to ClefModifier, rename related properties.c                 C   rk  )NZOctavateEightZClefModifierzoctavate-eight-interfacezclef-modifier-interfaceZclefOctavationZclefTranspositionZclefOctavationFormatterZclefTranspositionFormatterZclefOctavationStyleZclefTranspositionStyleZcueClefOctavationZcueClefTranspositionZcueClefOctavationFormatterZcueClefTranspositionFormatterZcueClefOctavationStyleZcueClefTranspositionStyler&   r   r   r   r   r     s2   )r1   rN   r!   z?\column { \vspace #2 } -> \column { \combine \null \vspace #2 }c                 C   r  )Nc                 S   s   t dd| d}|S )Nz(\\\\?)vspace(\s)z\1combine \1null \1vspace\2r   r  r  r   r   r   vspace_replace  s   
zconv.<locals>.vspace_replacez&\\(?:left-|right-|center-|)column\s*\{r$   z\}r  )r   r  r   r   r   r     r  )r1   rN   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*\5rf   z\(((?:\\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+\4r&   r   r   r   r   r     r   )r1   rN   rD  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| } g d	}g d
 dd| d  fdd}t d t || } | S )Nz(=\s*[0-9]+\s*)~(\s*[0-9]+\s)\1-\2c                 S   s"   |  dr|  dd S |  dS )Nr   !r   r  r_  r   r   r   subnonstring  s   

zconv.<locals>.subnonstringz
([-^_])\||z|[-^_][-^_]z\bdashBar\bZdashBang)Z
pipeSymbolZbracketOpenSymbolZbracketCloseSymbolZtildeSymbolZparenthesisOpenSymbolZparenthesisCloseSymbolZescapedExclamationSymbolZescapedParenthesisOpenSymbolZescapedParenthesisCloseSymbolZescapedBiggerSymbolZescapedSmallerSymbol)z"|"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'   	lastindexr_  replr   r   instring+     z+conv.<locals>.wordreplace.<locals>.instringr   "r   r'  )r  r   r'   rV   )r   r  r  Zwordsr   r   wordreplace*  s   $zconv.<locals>.wordreplacer   )r   r'   r  r   )r   r  Zorigr  r   r  r   r     s   	
)r1   rN   rH  z(\stringTuning \notemode -> \stringTuningc                 C   s6   t dd| } t d| rt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.rS   r   r   r   r   r   4  s   )r1   rN   rU  zhDynamic_engraver -> New_dynamic_engraver+Dynamic_align_engraver
New_dynamic_engraver -> Dynamic_engraverc                 C   r)   )Nz9(?
?[ 	]*\\(?:consists|remove)\s*)("?)Dynamic_engraver\2z6\1\2New_dynamic_engraver\2\1\2Dynamic_align_engraver\2ZNew_dynamic_engraverZDynamic_engraverr&   r   r   r   r   r   ?  s   )r1   rN   rh   z?(make-relative (a b) b ...) -> make-relative (a b) #{ a b #}...c                 C   r)   )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   K  s   )r1   rE   r   c                 C   r,   r   r   r   r   r   r   r   V  r  )r1   r!   r1   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 )N(?:#?"[^"]*"|\b\b)z(\\lyricsto\s*z\s*)(\\(?:new|context)\s*
(?:\s*=\s*z)?\s*)z\2\1z\s*)\\lyricmode\b\s*rf   z\s*)\\lyrics\b\s*z\\new Lyrics \1z\\lyricmode\s*(\\lyricsto\b))r  r   r'   )r   wordr   r   r   r   \  s$   )r1   r!   r<   zkeySignature -> keyAlterationsc                 C   r.   )Nz\bkeySignature\bZkeyAlterationsz\blastKeySignature\bZlastKeyAlterationsz\blocalKeySignature\bZlocalAlterationsr&   r   r   r   r   r   j  r0   )r1   r!   r   zthin-kern -> segno-kernc                 C   r%   )Nz\bthin-kern\bz
segno-kernr&   r   r   r   r   r   r  r6   z<(?:^|(?<!\\)(?:\\\\)+|(?<=[^-_\\a-zA-Z])|(?<=[^a-zA-Z][-_]))z(?![a-zA-Z]|[-_][a-zA-Z]))r1   r!   rC   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})r  z\\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VERBOSEr   r   r   r   r     s&   )r1   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| } f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&    fdd}t dtd d || S )Nc                    s     fdd}t d|| dS )Nc                    s>   |  dtd|  d d dtdd |  d }|S )	Nr   z(?<=\s|["\\()])r1   z(?=\s|["\\()])z(*location*)z#(?<=\s|["\\()])parser(?=\s|["\\()])z
(*parser*)r5   r  r  topsubstr   r   subsub  s   z5conv.<locals>.topsubst.<locals>.subst.<locals>.subsubz2(\([-a-z]+\s*\(+)parser\s+([-a-z]+)\s*((?:.|\n)*)$r   r  )r   r  r  r   r   rS    s   
z%conv.<locals>.topsubst.<locals>.substz8\(define-(?:music|event|scheme|void)-function(?=\s|["(])r$   r   r  rT  r  r   r   r    s   
zconv.<locals>.topsubstc                    s   |  d |  d S )Nr   r1   r  r_  )innerr   r   r    r  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   r   r    s   //01zconv.<locals>.innerz$(\(\s*\(ly:music-function-extract\s+z*\s*\)\s+)\(\*parser\*\)\s*\(\*location\*\)rf   ZChordNameVoiceri   r  r   r   )r  r  r  r   r     s"   3
)r1   r!   r   zRmusic-has-type -> music-is-of-type?
\applyOutput #'Context -> \applyOutput Contextc                 C   r)   )Nz+(?<=\s|["\\()])music-has-type(?=\s|["\\()])zmusic-is-of-type?z(\\applyOutput\s+)#'([a-zA-Z])r  r&   r   r   r   r   r     s
   )r1   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     s   )r1   r!   rU  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)r  z)\s*##t(\s)z\\once \1\2)r   r'   r  r   r   r   r   r     s   )r1   r!   rp  zwhiteout-box -> whiteoutc                 C   r.   )Nz\\whiteout-box(?![a-z_-])z
\\whiteoutz\b\.whiteout-box(?![a-z_-])\bz	.whiteoutz#'whiteout-box(?![a-z_-])\bz
#'whiteoutr&   r   r   r   r   r   '  r0   )r1   r!   rT   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'   r  r  r   r   r   r   r   /  s   )r1   r!   r   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   r  rN  r1   r  r_  r   r   r   r  ;  s   r  z2(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 )Nr  rN  r   r7   r   r1   )r   r'   rV   rQ  )r   rS  r   r   r   r  C  s   ,z2#'\(([0-9]+(?:\s+[0-9]+)+)\)(\s+%\s*beatStructure)r&   )r   r  r   r   r   r   9  s   )r1   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 )Nr  r  r   z
(z)\s*=\s*\\with(?:\s|\\|\{)ZRemoveEmptyStavesZRemoveAllEmptyStavesz>(\\(?:drums|figures|chords|lyrics|addlyrics|(?:new|context)\s*r  z)?)\s*)(\\(?:z))z\1\\with \2)r  r   r   r  r'   )r   r  Zmodsr   r   r   r   L  s(   )r1   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.idr  )r   pathZmanual_editsZ	automaticr   r   r   r   X  s&   

)r1   r$   r   z\language "deutsch": beh -> hehc                 C   s4   t d| }|r|dt|krt dd| } | S )Nu   \\language\s*#?"([a-zçñ]+)"Zdeutschz\bbeh\bZheh)r   r  ru  rQ  r'   )r   Zchangesr   r   r   r   s  s   z<(?:[a-zA-Z_][-a-zA-Z_0-9]*|"(?:[^\\"]|\\.)*"|[-+]?[0-9.]+|\(z\))zo(?P<startquote>#?")(?P<dur>1|2|4|8|16|32|64|128|256|breve|longa|maxima)(?P<ws>\s*)(?P<dots>[.]*)(?P<endquote>")c                 C   sz   |  ddv rd|  d }n|  d}|   d | d|    d | |  d d |   | d|   d   S )	Nr+  )r$  r%  r&  r^  
startquoter   r-  r>   endquote)rV   r   r   )rY   Znew_durr   r   r   to_ly_duration  s   
r  c                 C   s   ddddddddd	d
ddd|  d }t|  d}d| d| d}|   d | d|    | |   | d|   d   S )Nr   r   r1   r5   r7   r9   r;   r<   r  r'  r(  )r  r  r0  8Z16Z32Z64Z128Z256r$  r%  r&  r+  r-  z(ly:make-duration r   r   r  r  )rV   rQ  r   r   )rY   Zdur_log	dot_countnewr   r   r   to_scm_duration  s   
r   c                 C   s8   t d|  dt t|}t d|  dt t|}|S )Nr  z\s*z#:r  )r   r'   string_duration_rer  r   )Zmarkup_commandr   r   r   r   &convert_string_to_duration_for_command  s   r  )r1   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                 C   s   t d| } tdtd d 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| rUttd  tt | S )NZnotez^\(tuplet-number::(?:fraction-with-notes|non-default-fraction-with-notes|append-note-wrapper)\sr$   r   c                 S   s   t tt|  S r   )r   r'   r  r   rV   rX   r   r   r   <lambda>  s    zconv.<locals>.<lambda>z(\\(?: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*)[#$](\\?")r  zK\\partcombine(Force|Up|Down|Chords|Apart|Unisono|SoloI|SoloII|Automatic|)\bz\\partCombine\1z\\autochangez\\autoChangez\\powerChordsr8   z"scripts\.trilelement"z"scripts.trillelement"z\\fermataMarkupz	\\fermataz\\(compress|expand)FullBarRestsz\\\1EmptyMeasuresz#(banter|jazz)-chordnamesz"alternative chord naming functions)r  r   r'   r  r   r	   r   r#   r   r   r   r   r     s0   
	)r1   r(   r1   z.\tocItem "string" -> \tocItem \markup "string"c                 C   r%   )Nz\\tocItem\s+"z\\tocItem \\markup "r&   r   r   r   r   r     r6   )r1   r   r   c                 C   r,   r   r   r   r   r   r   r     r-   )r1   rO   r   z
combine u/d variants of triangle, do, re, and ti noteheads
rename bar line "S" to "S-||"
rename bar line "S-|" to "S"
\rest "4." -> \rest {4.}
c                 C   s   t dd| } t dd| } t dd| } t dd| } t d	d
| } td| } d| v r>d| v r>ttd  td tt | S )Nz6"noteheads\.[ud](1|2)(triangle|(?:do|re|ti)(?:Thin)?)"z"noteheads.s\1\2"z\\bar(\s+)"S"z\\bar\1"S-||"z\\bar(\s+)"S-\|"z
\\bar\1"S"zsegnoType(\s+=\s+)#?"S"zsegnoType\1"S-||"zsegnoType(\s+=\s+)#?"S-\|"zsegnoType\1"S"restz#'(multi-measure-rest . #t)z\rest-by-numberz5\override #'(multi-measure-rest . #t) \rest-by-numberz
Instead of (for example)
  \markup \override #'(multi-measure-rest . #t) \rest-by-number #0 #0
use
  \markup \multi-measure-rest-by-number #1

The argument of \multi-measure-rest-by-number is the number of measures
the multi-measure rest lasts.
)r   r'   r  r	   r   r#   r   r   r   r   r     s   
	a  
If you had

  \override Stem.neutral-direction = #DOWN

and

  \override Stem.neutral-direction #'()

to turn the use of the Melody_engraver off
and on, respectively, you should instead use

  \set suspendMelodyDecisions = ##t

and

  \set suspendMelodyDecisions = ##f

)r1   rO   r1   zr
warn about behavior change of Melody_engraver with Stem.neutral-direction
adapt module names to (lily) namespace
c                 C   sr   d}d |}d}d ||}t|d| } t|| r0td| r0ttd  tt tt tdd	| } | S )
NzStem\.neutral-directionz\\override\s+{}\s+=\s+#'\(\)z \\consists\s+"?Melody_engraver"?z	({})\s+{}rf   ZMelody_engraverz+Stem.neutral-direction with Melody_engraverzA\(scm (accreg|display-lily|graphviz|guile-debugger|song|to-xml)\)z	(lily \1))formatr   r'   r   r	   r   melody_engraver_warningr#   )r   Zneutral_dirZneutral_dir_overrideZmelody_engraverZtypical_usager   r   r   r     s   
z
ly:round-filled-polygon was renamed to ly:round-polygon and now takes
an additional optional parameter specifying whether the polygon is filled.
The default value of the extroversion optional parameter was changed from
-1 to 0.
)r1   rO   r5   z]
glyph-name-alist -> alteration-glyph-name-alist
ly:round-filled-polygon -> ly:round-polygon
c                 C   6   t dd| } d| v rttd  tt tt | S )Nz(?<!-)glyph-name-alistzalteration-glyph-name-alistzly:round-filled-polygon)r   r'   r	   r   round_filled_polygon_warningr#   r   r   r   r   r   0  s   zTrillPitchGroup\.
(
  font # recognize all font-something properties
  | color
  | extra-offset
  | layer
  | output-attributes
  | rotation
  | stencil
  | stencils
  | transparent
  | whiteout # also whiteout-style
)
zTrillPitchParentheses.\1))z#[\\#$]print-page-number-check-firstz\\if \\should-print-page-number)z [\\#$]create-page-number-stencilz'\\if \\should-print-page-numbers-global)z[\\#$]print-all-headersz\\if \\should-print-all-headers)z[\\#$]first-pagez\\if \\on-first-page)z[\\#$]not-first-pagez\\unless \\on-first-page)z[#$]\(on-page (\d+)\)z\\if \\on-page #\1)z[\\#$]last-pagez\\if \\on-last-page)z[\\#$]part-first-pagez\\if \\on-first-page-of-part)z[\\#$]not-part-first-pagez \\unless \\on-first-page-of-part)z[\\#$]part-last-pagez\\if \\on-last-page-of-part)z[\\#$]not-single-pagez\\unless \\single-page)r1   rO   r7   a/  
ly:context-now -> ly:context-current-moment
ControlPointItem, ControlPointSpanner -> ControlPoint
ControlPolygonItem, ControlPolygonSpanner -> ControlPolygon
FootnoteItem, FootnoteSpanner -> Footnote
BalloonTextItem, BalloonTextSpanner -> BalloonText
\on-the-fly #some-procedure -> \if \some-condition
c                 C   sx   t dd| } d}t |d| } t dd| } t dd| } t jtt| t jd	} tD ]\}}d
| }t ||| } q*| S )Nzly:context-nowzly:context-current-momentz@(ControlPoint|ControlPolygon|Footnote|BalloonText)(Item|Spanner)rf   ZParenthesesItemZParentheseszparentheses-item::zparentheses-interface::r  z\\on-the-fly\s+)r   r'   trill_pitch_group_rer  r  on_the_fly_replacements)r   Zitem_spannerpatternZreplacementZcomplete_patternr   r   r   r   ]  s   	)r1   rO   r9   z
Mark_tracking_translator
c                 C   s8   t d| rttd  ttd td tt | S )Nz\\consists\s+"?Mark_engraver"?z\consists Mark_engraverzRIf independent mark sequences are desired, use multiple Mark_tracking_translators.r   r  r   r   r   r   r   t  s   )ZHatZPlusZDashZBangZLargerr  Z
UnderscoreaN  
The signature of the markup->string Scheme function changed.  Calls with
just one argument are not affected.  Calls using the second optional
argument, the list of header modules, should be changed from

  (markup->string <markup> <header list>)

to

  (markup->string <markup> #:props (headers-property-alist-chain <header list>))

)r1   rO   r;   am  
defaultBarType -> measureBarType
markFormatter -> rehearsalMarkFormatter
startRepeatType -> startRepeatBarType (etc.)
make-articulation "X" -> make-articulation 'X
'articulation-type "X" -> 'articulation-type 'X
dashX = "Y" -> dashX = #(make-articulation 'Y)
markup->string 2nd argument change
ly:grob-spanned-rank-interval -> ly:grob-spanned-column-rank-interval
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| } t d| r{ttd  tt tt | 	d d!} | S )"NZdefaultBarTypeZmeasureBarTypeZdoubleRepeatSegnoTypeZdoubleRepeatSegnoBarTypeZdoubleRepeatTypeZdoubleRepeatBarTypeZendRepeatSegnoTypeZendRepeatSegnoBarTypeZendRepeatTypeZendRepeatBarTypeZfineSegnoTypeZfineSegnoBarTypeZfineStartRepeatSegnoTypeZfineStartRepeatSegnoBarTypeZmarkFormatterZrehearsalMarkFormatterZ	segnoTypeZsegnoBarTypeZstartRepeatSegnoTypeZstartRepeatSegnoBarTypeZstartRepeatTypeZstartRepeatBarTypeZunderlyingRepeatTypeZunderlyingRepeatBarTypez2((make-articulation|'articulation-type)\s+)"(\w+)"z\1'\3z(dash(%s)\s+)=(\s+)"(\w+)"r   z\1=\3#(make-articulation '\4)z0(?!(?<=\()markup\->string\s+\w+\))markup->stringzmarkup->stringzly:grob-spanned-rank-intervalz$ly:grob-spanned-column-rank-interval)
r   r'   r   dash_abbreviationsr   r	   r   markup2string_warningr#   rZ   r   r   r   r   r     s,   a  
Warning:

Your score contains a setting of barNumberVisibility to
#all-bar-numbers-visible and a setting of BarNumber.break-visibility,
but not \bar "" command.  This likely means that you have
been using

  \set Score.barNumberVisibility = #all-bar-numbers-visible
  \override Score.BarNumber.break-visibility = #end-of-line-invisible

in order to print bar numbers in the middle of systems
in addition to bar numbers at the beginning of systems.
In 2.23.7 and later, this will print the first bar number
too, which has always been the intended effect of
#all-bar-numbers-visible, but did not work without \bar ""
for technical reasons.  If you do not want the first
bar number, remove the command

  \set Score.barNumberVisibility = #all-bar-numbers-visible
)r1   rO   r<   zN
all-bar-numbers-visible + BarNumber.break-visibility + no \bar "" -> warning
c                 C   s$   d| v rd| v rd| vrt t | S )Nzall-bar-numbers-visiblezBarNumber.break-visibilityz\bar "")r	   bar_numbers_warningr   r   r   r   r     s
   )r1   rO   r  a  
scripts.augmentum -> dots.dotvaticana
scripts.trillelement -> scripts.trill_element
ly:skyline::get-touching-point -> ly:skyline-touching-point
ly:skyline::get-distance -> ly:skyline-distance
ly:skyline::get-max-height -> ly:skyline-max-height
ly:skyline::get-max-height-position -> ly:skyline-max-height-position
ly:skyline::get-height -> ly:skyline-height
Remove Default_bar_line_engraver
c                 C   rk  )Nzscripts\.augmentumzdots.dotvaticanazscripts\.trillelementzscripts.trill_elementzly:skyline::get-touching-pointzly:skyline-touching-pointzly:skyline::get-distancezly:skyline-distancezly:skyline::get-max-heightzly:skyline-max-heightz#ly:skyline::get-max-height-positionzly:skyline-max-height-positionzly:skyline::get-heightzly:skyline-heightzB[\t ]*\\(consists|remove)\s*"?Default_bar_line_engraver"?[\t ]*\n?r8   r&   r   r   r   r   r     s   z
The X-offset property of PercentRepeat is no longer relative to the
default position (centered), but to the left of the span within
which the object is centered.  Overrides/tweaks to PercentRepeat.X-offset
should be updated.
)r1   rO   r   zK
ly:percent-repeat-item-interface::xxx -> ly:percent-repeat-interface::xxx
c                 C   r  )Nz"ly:percent-repeat-item-interface::zly:percent-repeat-interface::zPercentRepeat.X-offset)r   r'   r	   r   percent_x_off_warningr#   r   r   r   r   r     s   )r1   rO   r=   ai  
automaticBars = ##f -> measureBarType = #'()
\\bar "-" -> \\bar ""
BarType = "-" -> BarType = ""
\featherDurations #(ly:make-moment x/y) -> \featherDurations x/y
\consists Chord_name_engraver -> \consists Chord_name_engraver \consists Current_chord_text_engraver
\remove Chord_name_engraver -> \remove Chord_name_engraver \remove Current_chord_text_engraver
)
c                 C   s   t dd| } d| v rttd  td tt t dd| } t dd	| } t d
d| } t dd| } t dd| } t dd| } | S )NzautomaticBars\s*=\s*##fzmeasureBarType = #'()ZautomaticBarszadvanced use of automaticBarszh
The automaticBars property has been removed.  Instead, set
measureBarType to #'() or a valid bar type.
z\\bar\s*"-"z\\bar ""zBarType\s*=\s*"-"zBarType = ""z6(\\featherDurations\s+)#\(ly:make-moment\s+([0-9/]+)\)r  z+\\(consists|remove) "?Chord_name_engraver"?z9\\\1 Chord_name_engraver \\\1 Current_chord_text_engraverr  r  r  r  )r   r'   r	   r   r#   r   r   r   r   r     s.   

)r1   rO   r   z7
\bar "B" -> \bar "B-|" for B in { .| .|: [|: S S.|: }
c                 C   s0   g d}t dd| d d| } t| } | S )N)z\.\|z\.\|:z\[\|:SzS\.\|:z
\\bar\s*"(r   z)"z\\bar "\1-|")r   r'   r   r  )r   Zchanged_bar_typesr   r   r   r   ,  s   z
Warning: \fine no longer enforces the end of the music.  If your piece
has music following \fine that you want to exclude when it is
unfolded, use \volta to exclude it.
a  
MensuralStaff and VaticanaStaff now use Divisio_engraver to engrave
divisiones as Divisio grobs.

Previously, the respective Voice-aliased contexts used
Breathing_sign_engraver to engrave divisiones as BreathingSign grobs.
Because of the new names and the move from Voice to Staff, layout
adjustments for the old scheme are not effective for the new.

If you are not content with the new default layout, deal with Divisio
and Divisio_engraver in the appropriate Staff-aliased context.
a  
GregorianTranscriptionStaff now engraves \divisioMinima,
\divisioMaior, and \divisioMaxima as BarLine grobs using Bar_engraver,
and engraves \caesura and \virgula as Divisio grobs using
Divisio_engraver.

Previously, GregorianTranscriptionVoice used Breathing_sign_engraver
to engrave these as BreathingSign grobs.  Because of the new names and
the move from Voice to Staff, layout adjustments for the old scheme
are not effective for the new.

If you are not content with the new default layout, deal with BarLine,
Bar_engraver, Divisio, and Divisio_engraver in
GregorianTranscriptionStaff context.  \EnableGregorianDivisiones may
also be used to switch to engraving Divisio grobs instead of BarLine
grobs.
)r1   rO   r@   zf
barAlways = ##t -> forbidBreakBetweenBarLines = ##f
\fine no longer stops iteration
New Divisio grob
c                 C   s   t dd| } t dd| } d| v r(d| v sd| v r(ttd  tt tt t d	| rDd
| v s6d| v rDttd  tt tt t d| r`d
| v sRd| v r`ttd  tt tt | S )NzbarAlways\s*=\s*##tz forbidBreakBetweenBarLines = ##fzbarAlways\s*=\s*##fz forbidBreakBetweenBarLines = ##tz\finez\repeat segnoz\repeat voltazmusic following \finez#GregorianTranscription(Staff|Voice)ZBreathingSignZBreathing_sign_engraverz#BreathingSign to BarLine or Divisioz (Mensural|Vaticana)(Staff|Voice)zBreathingSign to Divisio)	r   r'   r	   r   fine_iteration_warningr#   r   new_modern_divisio_grob_warning new_ancient_divisio_grob_warningr   r   r   r   r   d  s$   zT
The barAlways property has been removed.  Instead, use
forbidBreakBetweenBarLines.
)r1   rO   rA   z-
filtered-map -> filter-map
Remove barAlways
c                 C   s6   t dd| } d| v rttd  tt tt | S )Nzfiltered-mapz(@ (srfi srfi-1) filter-map)Z	barAlwayszadvanced use of barAlways)r   r'   r	   r   remove_bar_always_warningr#   r   r   r   r   r     s   )r1   rO   rB   z@
changed convention for ly:skylines-for-stencil second argument
c                 C   s(   d| v rt td  t d t t | S )Nzly:skylines-for-stencilz'ly:skylines-for-stencil second argumentz
The second argument to ly:skylines-for-stencil is now the 'horizon axis', which
is the opposite of the convention used previously.
)r	   r   r#   r   r   r   r   r     s
   )r1   r   r   c                 C   r,   r   r   r   r   r   r   r     r-   )Pr   rt   sysZlilylibr
   r   r#   r   	Exceptionr   r   stderrwriter	   r   r   r   rx   r   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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Zmatchscmargr  r  r   r  r  r  r	  r  r
  r  r  r  r  r  r  r  r  r   r   r   r   <module>   sJ  
















	




























K

































	
(	

	y%$#,	
	'

!
			


+


	"
'0
				

(%
3



\
	


	
	




