X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fproperty-init.ly;h=85adb52bb08b5b3314cecfed4d249097a2de86f2;hb=a767abf023c5449fcecce36ace9196901e7374a2;hp=09578b294018c4cc30a4d8d0ebdaaa5c113fd869;hpb=955f829883aa125b2b633b1e71f6256da5b773fa;p=lilypond.git diff --git a/ly/property-init.ly b/ly/property-init.ly index 09578b2940..85adb52bb0 100644 --- a/ly/property-init.ly +++ b/ly/property-init.ly @@ -1,264 +1,768 @@ % property-init.ly -\version "1.9.0" +\version "2.19.22" + +%% for dashed slurs, phrasing slurs, and ties +#(define (make-simple-dash-definition dash-fraction dash-period) + (list (list 0 1 dash-fraction dash-period))) + +%% common definition for all note head styles reverting +%% (palm mute, harmonics, dead notes, ...) +defaultNoteHeads = +#(define-music-function () () + (_i "Revert to the default note head style.") + (context-spec-music + (revert-head-style '(NoteHead TabNoteHead)) 'Bottom)) + +accidentalStyle = +#(define-music-function + (style) (symbol-list?) + (_i "Set accidental style to symbol list @var{style} in the form +@samp{piano-cautionary}. If @var{style} has a form like +@samp{Staff.piano-cautionary}, the settings are applied to that +context. Otherwise, the context defaults to @samp{Staff}, except for +piano styles, which use @samp{GrandStaff} as a context." ) + (case (length style) + ((1) (set-accidental-style (car style))) + ((2) (set-accidental-style (cadr style) (car style))) + (else + (ly:parser-error (_ "not an accidental style") + (*location*)) + (make-music 'Music)))) + +%% arpeggios + +% For drawing vertical chord brackets with \arpeggio +% This is a shorthand for the value of the print-function property +% of either Staff.Arpeggio or PianoStaff.Arpeggio, depending whether +% cross-staff brackets are desired. + +arpeggio = #(make-music 'ArpeggioEvent) +arpeggioArrowUp = { + \revert Arpeggio.stencil + \revert Arpeggio.X-extent + \override Arpeggio.arpeggio-direction = #UP +} +arpeggioArrowDown = { + \revert Arpeggio.stencil + \revert Arpeggio.X-extent + \override Arpeggio.arpeggio-direction = #DOWN +} +arpeggioNormal = { + \revert Arpeggio.stencil + \revert Arpeggio.X-extent + \revert Arpeggio.arpeggio-direction + \revert Arpeggio.dash-definition +} +arpeggioBracket = { + \revert Arpeggio.X-extent + \override Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket +} +arpeggioParenthesis = { + \override Arpeggio.stencil = #ly:arpeggio::brew-chord-slur + \override Arpeggio.X-extent = #ly:grob::stencil-width + \revert Arpeggio.dash-definition +} +arpeggioParenthesisDashed = { + \override Arpeggio.stencil = #ly:arpeggio::brew-chord-slur + \override Arpeggio.X-extent = #ly:grob::stencil-width + \override Arpeggio.dash-definition = #'((0 1 0.4 0.75)) +} -stemUp = \property Voice.Stem \set #'direction = #1 -stemDown = \property Voice.Stem \set #'direction = #-1 -stemBoth= \property Voice.Stem \revert #'direction -slurUp = \property Voice.Slur \set #'direction = #1 -slurDown = \property Voice.Slur \set #'direction = #-1 -slurBoth = \property Voice.Slur \revert #'direction +%% auto beaming -% There's also dash, but setting dash period/length should be fixed. -slurDotted = \property Voice.Slur \set #'dashed = #1 -slurSolid = \property Voice.Slur \revert #'dashed +autoBeamOn = \set autoBeaming = ##t +autoBeamOff = \set autoBeaming = ##f -phrasingSlurUp = \property Voice.PhrasingSlur \set #'direction = #1 -phrasingSlurDown = \property Voice.PhrasingSlur \set #'direction = #-1 -phrasingSlurBoth = \property Voice.PhrasingSlur \revert #'direction +%% balloon length -shiftOn = \property Voice.NoteColumn \set #'horizontal-shift = #1 -shiftOnn = \property Voice.NoteColumn \set #'horizontal-shift = #2 -shiftOnnn = \property Voice.NoteColumn \set #'horizontal-shift = #3 -shiftOff = \property Voice.NoteColumn \revert #'horizontal-shift +balloonLengthOn = { + \override BalloonTextItem.extra-spacing-width = #'(0 . 0) + \override BalloonTextItem.extra-spacing-height = #'(-inf.0 . +inf.0) +} +balloonLengthOff = { + \override BalloonTextItem.extra-spacing-width = #'(+inf.0 . -inf.0) + \override BalloonTextItem.extra-spacing-height = #'(0 . 0) +} -tieUp = \property Voice.Tie \set #'direction = #1 -tieDown = \property Voice.Tie \set #'direction = #-1 -tieBoth = \property Voice.Tie \revert #'direction -tieDotted = \property Voice.Tie \set #'dashed = #1 -tieSolid = \property Voice.Tie \revert #'dashed +%% bar lines +defineBarLine = +#(define-void-function + (bar glyph-list) (string? list?) + (_i "Define bar line settings for bar line @var{bar}. + The list @var{glyph-list} must have three entries which define + the appearance at the end of line, at the beginning of the next line, + and the span bar, respectively." ) + (if (not (= (length glyph-list) 3)) + (ly:error (_ "Argument list for bar '~a' must have three components.") bar) + (define-bar-line bar + (car glyph-list) + (cadr glyph-list) + (caddr glyph-list)))) -dynamicUp = { - \property Voice.DynamicText \set #'direction = #1 - \property Voice.DynamicLineSpanner \set #'direction = #1 -} -dynamicDown = { - \property Voice.DynamicText \set #'direction = #-1 - \property Voice.DynamicLineSpanner \set #'direction = #-1 + +%% bass figures + +bassFigureExtendersOn = { + \set useBassFigureExtenders = ##t + \set Staff.useBassFigureExtenders = ##t } -dynamicBoth = { - \property Voice.DynamicText \revert #'direction - \property Voice.DynamicLineSpanner \revert #'direction +bassFigureExtendersOff = { + \set useBassFigureExtenders = ##f + \set Staff.useBassFigureExtenders = ##f } +bassFigureStaffAlignmentDown = + \override Staff.BassFigureAlignmentPositioning.direction = #DOWN +bassFigureStaffAlignmentUp = + \override Staff.BassFigureAlignmentPositioning.direction = #UP +bassFigureStaffAlignmentNeutral = + \revert Staff.BassFigureAlignmentPositioning.direction + + +%% cadenzas -scriptUp = { - \property Voice.TextScript \set #'direction = #1 - \property Voice.Script \set #'direction = #1 +cadenzaOn = \set Timing.timing = ##f + +cadenzaOff = \set Timing.timing = ##t + +%% chord names + +frenchChords = { + \set chordRootNamer = #(chord-name->italian-markup #t) + \set chordPrefixSpacer = #0.4 } -scriptDown = { - \property Voice.TextScript \set #'direction = #-1 - \property Voice.Script \set #'direction = #-1 +germanChords = { + \set chordRootNamer = #(chord-name->german-markup #t) + \set chordNoteNamer = #note-name->german-markup } -scriptBoth = { - \property Voice.TextScript \revert #'direction - \property Voice.Script \revert #'direction +semiGermanChords = { + \set chordRootNamer = #(chord-name->german-markup #f) + \set chordNoteNamer = #note-name->german-markup +} +italianChords = { + \set chordRootNamer = #(chord-name->italian-markup #f) + \set chordPrefixSpacer = #0.4 +} +powerChords = { + \set chordNameExceptions = #powerChordExceptions } -dotsUp = \property Voice.Dots \set #'direction = #1 -dotsDown = \property Voice.Dots \set #'direction = #-1 -dotsBoth = \property Voice.Dots \revert #'direction -tupletUp = \property Voice.TupletBracket \set #'direction = #1 -tupletDown = \property Voice.TupletBracket \set #'direction = #-1 -tupletBoth = \property Voice.TupletBracket \revert #'direction +%% compressFullBarRests -cadenzaOn = \property Timing.timing = ##f -cadenzaOff = { - \property Timing.timing = ##t - \property Timing.measurePosition = #(ly:make-moment 0 1) -} +compressFullBarRests = \set Score.skipBars = ##t +expandFullBarRests = \set Score.skipBars = ##f -newpage = \notes -{ - \break - % urg, only works for TeX output - \context Score \outputproperty #(make-type-checker 'paper-column-interface) - #'between-system-string = #"\\newpage" -} -% dynamic ly:dir? text script, articulation script ly:dir? -oneVoice = #(context-spec-music (make-voice-props-revert) "Voice") -voiceOne = #(context-spec-music (make-voice-props-set 0) "Voice") -voiceTwo = #(context-spec-music (make-voice-props-set 1) "Voice") -voiceThree =#(context-spec-music (make-voice-props-set 2) "Voice") -voiceFour = #(context-spec-music (make-voice-props-set 3) "Voice") +%% dots - -tiny = - \property Voice.fontSize= #-2 +dotsUp = \override Dots.direction = #UP +dotsDown = \override Dots.direction = #DOWN +dotsNeutral = \revert Dots.direction -small = - \property Voice.fontSize= #-1 -normalsize = { - \property Voice.fontSize= #0 +%% dynamics + +dynamicUp = { + \override DynamicText.direction = #UP + \override DynamicLineSpanner.direction = #UP +} +dynamicDown = { + \override DynamicText.direction = #DOWN + \override DynamicLineSpanner.direction = #DOWN +} +dynamicNeutral = { + \revert DynamicText.direction + \revert DynamicLineSpanner.direction } -% End the incipit and print a ``normal line start''. -endincipit = \notes{ - \partial 16 s16 % Hack to handle e.g. \bar ".|" \endincipit - \context Staff \outputproperty #(make-type-checker 'clef-interface) #'full-size-change = ##t - \context Staff \outputproperty #(make-type-checker 'clef-interface) #'non-default = ##t - \bar "" +%% easy heads + +easyHeadsOn = { + \override NoteHead.stencil = #note-head::brew-ez-stencil + \override NoteHead.font-size = #-8 + \override NoteHead.font-family = #'sans + \override NoteHead.font-series = #'bold +} +easyHeadsOff = { + \revert NoteHead.stencil + \revert NoteHead.font-size + \revert NoteHead.font-family + \revert NoteHead.font-series } -autoBeamOff = \property Voice.autoBeaming = ##f -autoBeamOn = \property Voice.autoBeaming = ##t -fatText = \property Voice.TextScript \set #'no-spacing-rods = ##f -emptyText = \property Voice.TextScript \set #'no-spacing-rods = ##t +%% fermata markup + +fermataMarkup = +#(make-music 'MultiMeasureTextEvent + ;; Set the 'text based on the 'direction + 'text (make-fermata-markup) + 'tweaks '((outside-staff-priority . 40) + (outside-staff-padding . 0))) + +%% font sizes + +teeny = \set fontSize = #-3 +tiny = \set fontSize = #-2 +small = \set fontSize = #-1 +normalsize = \set fontSize = #0 +large = \set fontSize = #1 +huge = \set fontSize = #2 + + +%% glissando + +glissando = #(make-music 'GlissandoEvent) -showStaffSwitch = \property Voice.followVoice = ##t -hideStaffSwitch = \property Voice.followVoice = ##f -% accidentals as they were common in the 18th century. -defaultAccidentals = { - \property Current.extraNatural = ##t - \property Current.autoAccidentals = #'(Staff (same-octave . 0)) - \property Current.autoCautionaries = #'() +%% harmonics + +harmonicsOn = +#(define-music-function () () + (_i "Set the default note head style to a diamond-shaped style.") + (context-spec-music + (override-head-style '(NoteHead TabNoteHead) 'harmonic) 'Bottom)) +harmonicsOff = \defaultNoteHeads +harmonicNote = +#(define-music-function (note) (ly:music?) + (_i "Print @var{note} with a diamond-shaped note head.") + (style-note-heads 'NoteHead 'harmonic note)) + + +%% hideNotes + +hideNotes = { + % hide notes, accidentals, etc. + \override Dots.transparent = ##t + \override NoteHead.transparent = ##t + \override NoteHead.no-ledgers = ##t + % assume that any Beam inherits transparency from its parent Stem + \override Stem.transparent = ##t + \override Accidental.transparent = ##t + \override Rest.transparent = ##t + \override TabNoteHead.transparent = ##t +} +unHideNotes = { + \revert Accidental.transparent + \revert Stem.transparent + \revert NoteHead.transparent + \revert NoteHead.no-ledgers + \revert Dots.transparent + \revert Rest.transparent + \revert TabNoteHead.transparent } -% accidentals in voices instead of staves. -% Notice that accidentals from one voice do NOT get cancelled in other voices -voiceAccidentals = { - \property Current.extraNatural = ##t - \property Current.autoAccidentals = #'(Voice (same-octave . 0)) - \property Current.autoCautionaries = #'() - + +%% improvisation + +improvisationOn = { + \set squashedPosition = #0 + \override NoteHead.style = #'slash + \override TabNoteHead.style = #'slash + \override Accidental.stencil = ##f + \override AccidentalCautionary.stencil = ##f +} +improvisationOff = { + \unset squashedPosition + \revert NoteHead.style + \revert TabNoteHead.style + \revert Accidental.stencil + \revert AccidentalCautionary.stencil } -% accidentals as suggested by Kurt Stone, Music Notation in the 20th century. -% This includes all the default accidentals, but accidentals also needs cancelling -% in other octaves and in the next measure. -modernAccidentals = { - \property Current.extraNatural = ##f - \property Current.autoAccidentals = #'(Staff (same-octave . 0) (any-octave . 0) (same-octave . 1)) - \property Current.autoCautionaries = #'() +%% incipit + +incipit = +#(define-music-function (incipit-music) (ly:music?) + (_i "Output @var{incipit-music} before the main staff as an indication of + its appearance in the original music.") + #{ + \once \override Staff.InstrumentName.stencil = + #(lambda (grob) + (let* ((instrument-name (ly:grob-property grob 'long-text)) + (align-x (ly:grob-property grob 'self-alignment-X 0)) + (align-y (ly:grob-property grob 'self-alignment-Y 0))) + (set! (ly:grob-property grob 'long-text) + #{ \markup { + \score + { + \new MensuralStaff \with { + \override InstrumentName.self-alignment-X = #align-x + \override InstrumentName.self-alignment-Y = #align-y + instrumentName = #instrument-name + } + { + $incipit-music + } + \layout { + $(ly:grob-layout grob) + indent-incipit-default = 15\mm + line-width = #(primitive-eval + '(or (false-if-exception indent) + indent-incipit-default)) + indent = #(primitive-eval + '(or (false-if-exception (- line-width incipit-width)) + (* 0.5 line-width))) + ragged-right = ##f + ragged-last = ##f + system-count = 1 + \context { + \Score + \remove "Default_bar_line_engraver" + } + } + } + } + #}) + (set! (ly:grob-property grob 'self-alignment-Y) #f) + (set! (ly:grob-property grob 'self-alignment-X) RIGHT) + (system-start-text::print grob))) + #} +) + +%% kievan +kievanOn = { + \override NoteHead.style = #'kievan + \override Stem.X-offset = #stem::kievan-offset-callback + \override Stem.stencil = ##f + \override Flag.stencil = ##f + \override Rest.style = #'mensural + \override Accidental.glyph-name-alist = #alteration-kievan-glyph-name-alist + \override Dots.style = #'kievan + \override Slur.stencil = ##f + \override Stem.length = #0.0 + \override Beam.positions = #beam::get-kievan-positions + \override Beam.quantized-positions = #beam::get-kievan-quantized-positions + \override NoteHead.duration-log = #note-head::calc-kievan-duration-log +} +kievanOff = { + \revert NoteHead.style + \revert Stem.X-offset + \revert Stem.stencil + \revert Rest.style + \revert Accidental.glyph-name-alist + \revert Dots.style + \revert Slur.stencil + \revert Flag.stencil + \revert Stem.length + \revert Beam.positions + \revert Beam.quantized-positions + \revert NoteHead.duration-log } -% the accidentals that Stone adds to the old standard as cautionaries -modernCautionaries = { - \property Current.extraNatural = ##f - \property Current.autoAccidentals = #'(Staff (same-octave . 0)) - \property Current.autoCautionaries = #'(Staff (any-octave . 0) (same-octave . 1)) +%% line and page breaking controls + +autoLineBreaksOff = { + \overrideProperty Score.NonMusicalPaperColumn.line-break-permission ##f + \override Score.NonMusicalPaperColumn.line-break-permission = ##f +} +autoLineBreaksOn = { + \overrideProperty Score.NonMusicalPaperColumn.line-break-permission #'allow + \override Score.NonMusicalPaperColumn.line-break-permission = #'allow } +autoPageBreaksOff = + \override Score.NonMusicalPaperColumn.page-break-permission = ##f +autoPageBreaksOn = + \override Score.NonMusicalPaperColumn.page-break-permission = #'allow +autoBreaksOff = { \autoLineBreaksOff \autoPageBreaksOff } +autoBreaksOn = { \autoLineBreaksOn \autoPageBreaksOn } + + +%% merging + +mergeDifferentlyDottedOn = + \override Staff.NoteCollision.merge-differently-dotted = ##t +mergeDifferentlyDottedOff = + \revert Staff.NoteCollision.merge-differently-dotted +mergeDifferentlyHeadedOn = + \override Staff.NoteCollision.merge-differently-headed = ##t +mergeDifferentlyHeadedOff = + \revert Staff.NoteCollision.merge-differently-headed + + +%% numeric time signature + +numericTimeSignature = \override Staff.TimeSignature.style = #'numbered +defaultTimeSignature = \revert Staff.TimeSignature.style + + +%% palm mutes + +palmMuteOn = +#(define-music-function () () + (_i "Set the default note head style to a triangle-shaped style.") + (context-spec-music + (override-head-style 'NoteHead 'do) 'Bottom)) +palmMuteOff = \defaultNoteHeads +palmMute = +#(define-music-function (note) (ly:music?) + (_i "Print @var{note} with a triangle-shaped note head.") + (style-note-heads 'NoteHead 'do note)) + +%% part combiner + +partcombineForce = +#(define-music-function (type) ((symbol?)) + (_i "Override the part-combiner.") + (if type (propertySet 'partCombineForced type) + (propertyUnset 'partCombineForced))) + +partcombineApart = \partcombineForce #'apart +partcombineChords = \partcombineForce #'chords +partcombineUnisono = \partcombineForce #'unisono +partcombineSoloI = \partcombineForce #'solo1 +partcombineSoloII = \partcombineForce #'solo2 +partcombineAutomatic = \partcombineForce \default + + +%% phrasing slurs + +% directions +phrasingSlurUp = \override PhrasingSlur.direction = #UP +phrasingSlurDown = \override PhrasingSlur.direction = #DOWN +phrasingSlurNeutral = \revert PhrasingSlur.direction + +% dash-patterns (make-simple-dash-definition defined at top of file) +phrasingSlurDashPattern = +#(define-music-function (dash-fraction dash-period) + (number? number?) + (_i "Set up a custom style of dash pattern for @var{dash-fraction} ratio of +line to space repeated at @var{dash-period} interval for phrasing slurs.") + #{ + \override PhrasingSlur.dash-definition = + $(make-simple-dash-definition dash-fraction dash-period) + #}) +phrasingSlurDashed = + \override PhrasingSlur.dash-definition = #'((0 1 0.4 0.75)) +phrasingSlurDotted = + \override PhrasingSlur.dash-definition = #'((0 1 0.1 0.75)) +phrasingSlurHalfDashed = + \override PhrasingSlur.dash-definition = #'((0 0.5 0.4 0.75) + (0.5 1 1 1)) +phrasingSlurHalfSolid = + \override PhrasingSlur.dash-definition = #'((0 0.5 1 1) + (0.5 1 0.4 0.75)) +phrasingSlurSolid = + \revert PhrasingSlur.dash-definition + + +%% point and click + +pointAndClickOn = +#(define-void-function () () + (_i "Enable generation of code in final-format (e.g. pdf) files to reference the +originating lilypond source statement; +this is helpful when developing a score but generates bigger final-format files.") + (ly:set-option 'point-and-click #t)) + +pointAndClickOff = +#(define-void-function () () + (_i "Suppress generating extra code in final-format (e.g. pdf) files to point +back to the lilypond source statement.") + (ly:set-option 'point-and-click #f)) + +pointAndClickTypes = +#(define-void-function (types) (symbol-list-or-symbol?) + (_i "Set a type or list of types (such as @code{#'note-event}) for which point-and-click info is generated.") + (ly:set-option 'point-and-click types)) + +%% predefined fretboards + +predefinedFretboardsOff = + \set predefinedDiagramTable = ##f +predefinedFretboardsOn = + \set predefinedDiagramTable = #default-fret-table + + +%% shape note heads + +aikenHeads = \set shapeNoteStyles = ##(do re miMirror fa sol la ti) +aikenHeadsMinor = \set shapeNoteStyles = ##(la ti do re miMirror fa sol) +funkHeads = + \set shapeNoteStyles = ##(doFunk reFunk miFunk faFunk solFunk laFunk tiFunk) +funkHeadsMinor = + \set shapeNoteStyles = ##(laFunk tiFunk doFunk reFunk miFunk faFunk solFunk) +sacredHarpHeads = \set shapeNoteStyles = ##(fa sol la fa sol la mi) +sacredHarpHeadsMinor = \set shapeNoteStyles = ##(la mi fa sol la fa sol) +southernHarmonyHeads = + \set shapeNoteStyles = ##(faThin sol laThin faThin sol laThin miThin) +southernHarmonyHeadsMinor = + \set shapeNoteStyles = ##(laThin miThin faThin sol laThin faThin sol) +walkerHeads = + \set shapeNoteStyles = ##(doWalker reWalker miWalker faWalker solFunk laWalker tiWalker) +walkerHeadsMinor = + \set shapeNoteStyles = ##(laWalker tiWalker doWalker reWalker miWalker faWalker solFunk) + + +%% shifts + +shiftOff = \override NoteColumn.horizontal-shift = #0 +shiftOn = \override NoteColumn.horizontal-shift = #1 +shiftOnn = \override NoteColumn.horizontal-shift = #2 +shiftOnnn = \override NoteColumn.horizontal-shift = #3 + + +%% slurs + +% directions +slurUp = \override Slur.direction = #UP +slurDown = \override Slur.direction = #DOWN +slurNeutral = \revert Slur.direction + +% dash-patterns (make-simple-dash-definition defined at top of file) +slurDashPattern = +#(define-music-function (dash-fraction dash-period) + (number? number?) + (_i "Set up a custom style of dash pattern for @var{dash-fraction} +ratio of line to space repeated at @var{dash-period} interval for slurs.") + #{ + \override Slur.dash-definition = + $(make-simple-dash-definition dash-fraction dash-period) + #}) +slurDashed = \override Slur.dash-definition = #'((0 1 0.4 0.75)) +slurDotted = \override Slur.dash-definition = #'((0 1 0.1 0.75)) +slurHalfDashed = \override Slur.dash-definition = #'((0 0.5 0.4 0.75) + (0.5 1 1 1)) +slurHalfSolid = \override Slur.dash-definition = #'((0 0.5 1 1) + (0.5 1 0.4 0.75)) +slurSolid = \revert Slur.dash-definition + + +%% staff switches + +showStaffSwitch = \set followVoice = ##t +hideStaffSwitch = \set followVoice = ##f + + +%% stems + +stemUp = \override Stem.direction = #UP +stemDown = \override Stem.direction = #DOWN +stemNeutral = \revert Stem.direction + + +%% string numbers -% Multivoice accidentals to be read both by musicians playing one voice -% and musicians playing all voices. -% Accidentals are typeset for each voice, but they ARE cancelled across voices. -modernVoiceAccidentals = { - \property Current.extraNatural = ##f - \property Current.autoAccidentals = #'( - Voice (same-octave . 0) (any-octave . 0) (same-octave . 1) - Staff (same-octave . 0) (any-octave . 0) (same-octave . 1) - ) - \property Current.autoCautionaries = #'() +romanStringNumbers = { + \override StringNumber.number-type = #'roman-upper + \override StringNumber.stencil = #ly:text-interface::print + \override StringNumber.font-encoding = #'latin1 + \override StringNumber.font-shape = #'italic +} +arabicStringNumbers = { + \revert StringNumber.number-type + \revert StringNumber.stencil + \revert StringNumber.font-encoding + \revert StringNumber.font-shape } -% same as modernVoiceAccidental eccept that all special accidentals are typeset -% as cautionaries -modernVoiceCautionaries = { - \property Current.extraNatural = ##f - \property Current.autoAccidentals = #'( - Voice (same-octave . 0) - ) - \property Current.autoCautionaries = #'( - Voice (any-octave . 0) (same-octave . 1) - Staff (same-octave . 0) (any-octave . 0) (same-octave . 1) - ) + +%% tablature + +% switch to full notation +tabFullNotation = { + % time signature + \revert TabStaff.TimeSignature.stencil + % stems (the half note gets a double stem) + \revert TabStaff.Stem.length + \revert TabStaff.Stem.no-stem-extend + \revert TabStaff.Flag.style + \revert TabStaff.Stem.details + \revert TabStaff.Stem.stencil + \revert TabStaff.Flag.stencil + \override TabStaff.Stem.stencil = #tabvoice::draw-double-stem-for-half-notes + \override TabStaff.Stem.X-extent = #tabvoice::make-double-stem-width-for-half-notes + \set TabStaff.autoBeaming = ##t + \revert TabStaff.NoteColumn.ignore-collision + % beams, dots + \revert TabStaff.Beam.stencil + \revert TabStaff.StemTremolo.stencil + \revert TabStaff.Dots.stencil + \revert TabStaff.Tie.stencil + \revert TabStaff.Tie.after-line-breaking + \revert TabStaff.RepeatTie.stencil + \revert TabStaff.RepeatTie.after-line-breaking + \revert TabStaff.LaissezVibrerTie.stencil + \revert TabStaff.Slur.stencil + \revert TabStaff.PhrasingSlur.stencil + % tuplet stuff + \revert TabStaff.TupletBracket.stencil + \revert TabStaff.TupletNumber.stencil + % dynamic signs + \revert TabStaff.DynamicText.stencil + \revert TabStaff.DynamicTextSpanner.stencil + \revert TabStaff.DynamicTextSpanner.stencil + \revert TabStaff.Hairpin.stencil + % rests + \revert TabStaff.Rest.stencil + \revert TabStaff.MultiMeasureRest.stencil + \revert TabStaff.MultiMeasureRestNumber.stencil + \revert TabStaff.MultiMeasureRestText.stencil + % markups etc. + \revert TabStaff.Glissando.stencil + \revert TabStaff.Script.stencil + \revert TabStaff.TextScript.stencil + \revert TabStaff.TextSpanner.stencil + \revert TabStaff.Arpeggio.stencil + \revert TabStaff.NoteColumn.ignore-collision } -% stone's suggestions for accidentals on grand staff. -% Accidentals are cancelled across the staves in the same grand staff as well -pianoAccidentals = { - \property Current.autoAccidentals = #'( - Staff (same-octave . 0) (any-octave . 0) (same-octave . 1) - GrandStaff (any-octave . 0) (same-octave . 1) - ) - \property Current.autoCautionaries = #'() +%tie/repeat tie behaviour +hideSplitTiedTabNotes = { + \override TabVoice.TabNoteHead.details.tied-properties.break-visibility = #all-invisible + \override TabVoice.TabNoteHead.details.tied-properties.parenthesize = ##f + \override TabVoice.TabNoteHead.details.repeat-tied-properties.note-head-visible = ##f + \override TabVoice.TabNoteHead.details.repeat-tied-properties.parenthesize = ##f } -pianoCautionaries = { - \property Current.autoAccidentals = #'( - Staff (same-octave . 0) - ) - \property Current.autoCautionaries = #'( - Staff (any-octave . 0) (same-octave . 1) - GrandStaff (any-octave . 0) (same-octave . 1) - ) +showSplitTiedTabNotes = { + \override TabVoice.TabNoteHead.details.tied-properties.break-visibility = #begin-of-line-visible + \override TabVoice.TabNoteHead.details.tied-properties.parenthesize = ##t + \override TabVoice.TabNoteHead.details.repeat-tied-properties.note-head-visible = ##t + \override TabVoice.TabNoteHead.details.repeat-tied-properties.parenthesize = ##t } +%% text length -% Do not reset the key at the start of a measure. Accidentals will be -% printed only once and are in effect until overridden, possibly many -% measures later. -noResetKey = { - \property Current.autoAccidentals = #'(Staff (same-octave . #t)) - \property Current.autoCautionaries = #'() +textLengthOn = { + % 0.4 staff-space between adjacent texts + \override TextScript.extra-spacing-width = #'(-0.0 . 0.4) + \override TextScript.extra-spacing-height = #'(-inf.0 . +inf.0) } -% do not set localKeySignature when a note alterated differently from -% localKeySignature is found. -% Causes accidentals to be printed at every note instead of -% remembered for the duration of a measure. -% accidentals not being remembered, causing accidentals always to be typeset relative to the time signature -forgetAccidentals = { - \property Current.autoAccidentals = #'(Staff (same-octave . -1)) - \property Current.autoCautionaries = #'() +textLengthOff = { + \override TextScript.extra-spacing-width = #'(+inf.0 . -inf.0) + \override TextScript.extra-spacing-height = #'(0 . 0) } +markLengthOn = { + \override Score.MetronomeMark.extra-spacing-width = #'(0 . 1.0) + \override Score.RehearsalMark.extra-spacing-width = #'(-0.5 . 0.5) + % Raise as much as four staff-spaces before pushing notecolumns right + \override Score.MetronomeMark.extra-spacing-height = #'(4 . 4) + \override Score.RehearsalMark.extra-spacing-height = #'(4 . 4) +} -% To remove a Volta bracket or some other graphical object, -% set it to turnOff. Example: \property Staff.VoltaBracket = \turnOff +markLengthOff = { + \override Score.MetronomeMark.extra-spacing-width = #'(+inf.0 . -inf.0) + \override Score.RehearsalMark.extra-spacing-width = #'(+inf.0 . -inf.0) + \revert Score.MetronomeMark.extra-spacing-height + \revert Score.RehearsalMark.extra-spacing-height +} -%% -%% DO NOT USE THIS. IT CAN LEAD TO CRASHES. -turnOff = #'() +%% text spanners -% For drawing vertical chord brackets with -\arpeggio -% This is a shorthand for the value of the molecule-callback property -% of either Staff.Arpeggio or PianoStaff.Arpeggio, depending whether -% cross-staff brackets are desired. +textSpannerUp = \override TextSpanner.direction = #UP +textSpannerDown = \override TextSpanner.direction = #DOWN +textSpannerNeutral = \revert TextSpanner.direction -arpeggioBracket = #(lambda (grob) (Arpeggio::brew_chord_bracket grob)) -arpeggio = #(make-music-by-name 'ArpeggioEvent) -glissando = #(make-music-by-name 'GlissandoEvent) -fermataMarkup = \markup { \musicglyph #"scripts-ufermata" } +%% ties -setMmRestFermata = - \once \property Voice.MultiMeasureRestNumber \override #'text = - #fermataMarkup +% directions +tieUp = \override Tie.direction = #UP +tieDown = \override Tie.direction = #DOWN +tieNeutral = \revert Tie.direction +% dash-patterns (make-simple-dash-definition defined at top of file) +tieDashPattern = +#(define-music-function (dash-fraction dash-period) + (number? number?) + (_i "Set up a custom style of dash pattern for @var{dash-fraction} +ratio of line to space repeated at @var{dash-period} interval for ties.") + #{ + \override Tie.dash-definition = + $(make-simple-dash-definition dash-fraction dash-period) + #}) +tieDashed = \override Tie.dash-definition = #'((0 1 0.4 0.75)) +tieDotted = \override Tie.dash-definition = #'((0 1 0.1 0.75)) +tieHalfDashed = \override Tie.dash-definition = #'((0 0.5 0.4 0.75) + (0.5 1 1 1)) +tieHalfSolid = \override Tie.dash-definition = #'((0 0.5 1 1) + (0.5 1 0.4 0.75)) +tieSolid = \revert Tie.dash-definition -hideNotes =\sequential { - % hide notes, accidentals, etc. - \property Voice.Dots \override #'transparent = ##t - \property Voice.NoteHead \override #'transparent = ##t - \property Voice.Stem \override #'transparent = ##t - \property Voice.Beam \override #'transparent = ##t - \property Staff.Accidental \override #'transparent = ##t -} +%% tuplets -unHideNotes = \sequential { - \property Staff.Accidental \revert #'transparent - \property Voice.Beam \revert #'transparent - \property Voice.Stem \revert #'transparent - \property Voice.NoteHead \revert #'transparent - \property Voice.Dots \revert #'transparent -} +tupletUp = \override TupletBracket.direction = #UP +tupletDown = \override TupletBracket.direction = #DOWN +tupletNeutral = \revert TupletBracket.direction -germanChords = { - \property ChordNames. chordRootNamer = #(chord-name->german-markup #t) - \property ChordNames. chordNoteNamer = #note-name->german-markup + +%% voice properties + +% dynamic ly:dir? text script, articulation script ly:dir? +voiceOne = #(context-spec-music (make-voice-props-set 0) 'Voice) +voiceTwo = #(context-spec-music (make-voice-props-set 1) 'Voice) +voiceThree = #(context-spec-music (make-voice-props-set 2) 'Voice) +voiceFour = #(context-spec-music (make-voice-props-set 3) 'Voice) +oneVoice = #(context-spec-music (make-voice-props-revert) 'Voice) + + +%% voice styles + +voiceOneStyle = { + \override NoteHead.style = #'diamond + \override NoteHead.color = #red + \override Stem.color = #red + \override Beam.color = #red } -semiGermanChords = { - \property ChordNames. chordRootNamer = #(chord-name->german-markup #f) - \property ChordNames. chordNoteNamer = #note-name->german-markup +voiceTwoStyle = { + \override NoteHead.style = #'triangle + \override NoteHead.color = #blue + \override Stem.color = #blue + \override Beam.color = #blue +} +voiceThreeStyle = { + \override NoteHead.style = #'xcircle + \override NoteHead.color = #green + \override Stem.color = #green + \override Beam.color = #green +} +voiceFourStyle = { + \override NoteHead.style = #'cross + \override NoteHead.color = #magenta + \override Stem.color = #magenta + \override Beam.color = #magenta +} +voiceNeutralStyle = { + \revert NoteHead.style + \revert NoteHead.color + \revert Stem.color + \revert Beam.color } + + +%% volta brackets + +allowVoltaHook = +#(define-void-function (bar) (string?) + (allow-volta-hook bar)) + +%% x notes + +xNotesOn = +#(define-music-function () () + (_i "Set the default note head style to a cross-shaped style.") + (context-spec-music + (override-head-style '(TabNoteHead NoteHead) 'cross) 'Bottom)) +xNotesOff = \defaultNoteHeads +xNote = +#(define-music-function (note) (ly:music?) + (_i "Print @var{note} with a cross-shaped note head.") + (style-note-heads '(TabNoteHead NoteHead) 'cross note)) + + +%% dead notes (these need to come after "x notes") + +% Define aliases of cross-head notes for specific purposes +deadNotesOn = \xNotesOn +deadNotesOff = \xNotesOff +deadNote = #xNote