From: Graham Percival Date: Thu, 9 Feb 2012 18:34:45 +0000 (+0000) Subject: Merge branch 'release/unstable' into HEAD X-Git-Tag: release/2.15.30-1~43 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=8864a7cc89abc6d910896aa4681e89fd71c5e4f1;hp=82e1937780c911be71b439a7d1f2006f058f0490;p=lilypond.git Merge branch 'release/unstable' into HEAD --- diff --git a/Documentation/included/font-table.ly b/Documentation/included/font-table.ly index 398286ac4e..0dfaac3a59 100644 --- a/Documentation/included/font-table.ly +++ b/Documentation/included/font-table.ly @@ -32,6 +32,7 @@ (define hufnagel (get-group glyph-list "^.*hufnagel.*$")) (define petrucci (get-group glyph-list "^.*petrucci.*$")) (define solesmes (get-group glyph-list "^.*solesmes.*$")) + (define kievan (get-group glyph-list "^.*kievan.*$")) ;; remove ancient-music groups from the glyph-list (for-each @@ -42,7 +43,8 @@ mensural neomensural petrucci - solesmes)) + solesmes + kievan)) ;; define all remaining groups (define numbers diff --git a/Documentation/notation/notation-appendices.itely b/Documentation/notation/notation-appendices.itely index eb0bef92a9..830366ddd4 100644 --- a/Documentation/notation/notation-appendices.itely +++ b/Documentation/notation/notation-appendices.itely @@ -636,6 +636,7 @@ see @ref{Formatting text}. * Neomensural glyphs:: * Petrucci glyphs:: * Solesmes glyphs:: +* Kievan Notation glyphs:: @end menu @@ -878,6 +879,14 @@ see @ref{Formatting text}. \doc-chars #solesmes @end lilypond +@node Kievan Notation glyphs +@unnumberedsubsec Kievan Notation glyphs + +@lilypond[quote] +\include "font-table.ly" +\markuplist \override-lines #'(word-space . 4) + \doc-chars #kievan +@end lilypond @node Note head styles @appendixsec Note head styles diff --git a/input/regression/note-head-style.ly b/input/regression/note-head-style.ly index 255ce007dd..5fe18054d4 100644 --- a/input/regression/note-head-style.ly +++ b/input/regression/note-head-style.ly @@ -98,6 +98,13 @@ pattern = << \override Staff.NoteHead #'style = #'slash s1*0^\markup { "slash" } \pattern + + \break + + \override Staff.NoteHead #'style = #'kievan + s1*0^\markup { "kievan" } + \pattern + } diff --git a/lily/bar-line.cc b/lily/bar-line.cc index c642c3159d..1f2d9b2963 100644 --- a/lily/bar-line.cc +++ b/lily/bar-line.cc @@ -286,7 +286,8 @@ Bar_line::compound_barline (Grob *me, string str, Interval const &extent, m = dashed_bar_line (me, extent, hair); else if (str == "'") m = tick_bar_line (me, extent.at (UP), rounded); - + else if (str == "kievan") + m.add_stencil (Font_interface::get_default_font (me)->find_by_name("scripts.barline.kievan")); return m; } diff --git a/lily/note-head.cc b/lily/note-head.cc index 3ca686b2f3..fb93e40eeb 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -64,7 +64,8 @@ internal_print (Grob *me, string *font_char) if (style == "mensural" || style == "neomensural" || style == "petrucci" - || style == "baroque") + || style == "baroque" + || style == "kievan") { if (!Staff_symbol_referencer::on_line (me, diff --git a/lily/stem.cc b/lily/stem.cc index fb830624ff..8eaf2321ea 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -277,7 +277,12 @@ Stem::is_invisible (Grob *me) bool Stem::is_normal_stem (Grob *me) { - return head_count (me) && scm_to_int (me->get_property ("duration-log")) >= 1; + if (!head_count (me)) + return false; + + extract_grob_set (me, "note-heads", heads); + SCM style = heads[0]->get_property ("style"); + return style != ly_symbol2scm ("kievan") && scm_to_int (me->get_property ("duration-log")) >= 1; } MAKE_SCHEME_CALLBACK (Stem, pure_height, 3) diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 67c3522a15..6335ab65b1 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -559,6 +559,7 @@ automatically when an output definition (a @code{\score} or \accepts "PetrucciStaff" \accepts "StaffGroup" \accepts "DrumStaff" + \accepts "KievanStaff" \accepts "Lyrics" \accepts "ChordNames" \accepts "GrandStaff" @@ -568,7 +569,6 @@ automatically when an output definition (a @code{\score} or \accepts "NoteNames" \accepts "FiguredBass" - noteToFretFunction = #determine-frets predefinedDiagramTable = ##f soloText = #"Solo" @@ -1114,6 +1114,54 @@ accommodated for typesetting a piece in Petrucci style." printKeyCancellation = ##f } +\context { + \Voice + \name "KievanVoice" + \alias "Voice" + \description "Same as @code{Voice} context, except that it is +accommodated for typesetting a piece in Kievan style." + +% \override Stem #'stencil = ##f + + %% Set glyph styles. + \override NoteHead #'style = #'kievan + \override Rest #'style = #'mensural + \override Accidental #'glyph-name-alist = #alteration-kievan-glyph-name-alist + \override Dots #'style = #'kievan + \override Slur #'stencil = ##f + + %% There are beams in Kievan notation, but they are invoked manually + autoBeaming = ##f + \override Beam #'beam-thickness = #0.32 + \override Beam #'length-fraction = #0.62 +} + +\context { + \Staff + \name "KievanStaff" + \alias "Staff" + \denies "Voice" + \defaultchild "KievanVoice" + \accepts "KievanVoice" + \description "Same as @code{Staff} context, except that it is +accommodated for typesetting a piece in Kievan style." + + %% Choose Kievan tsefaut clef + clefGlyph = #"clefs.kievan.do" + middleCClefPosition = #0 + middleCPosition = #0 + clefPosition = #0 + clefOctavation = #0 + + %% Accidentals are valid only once (if the following note is different) + extraNatural = ##f + autoAccidentals = #`(Staff ,(make-accidental-rule 'same-octave 0) + ,neo-modern-accidental-rule) + autoCautionaries = #'() + printKeyCancellation = ##f + +} + %% Keep the old definitions in here for compatibility (they erase previous %% settings to the corresponding context!). %% For new scores, one should simply insert the \RemoveEmptyStaves settings diff --git a/mf/parmesan-accidentals.mf b/mf/parmesan-accidentals.mf index 340986d7e0..7c081a995f 100644 --- a/mf/parmesan-accidentals.mf +++ b/mf/parmesan-accidentals.mf @@ -392,5 +392,77 @@ fet_beginchar ("Hufnagel Flat" , "hufnagelM1"); labels (1, 2, 3, 4, 5, 6); fet_endchar; +%%%%%%%%%%%%%%% +%%% +%%% Glyphs for Kievan Music Notation +%%% +%%%%%%%%%%%%%%% + +fet_beginchar ("kievan sharp", "kievan1"); + % this draws the sharp + % the sharp never occurs in Synodal music. + % It can only be found in some early manuscripts + z1 = (0.579 staff_space, 1.459 staff_space); + z2 = (1.414 staff_space, -0.904 staff_space); + z3 = (0.187 staff_space, 0.904 staff_space); + x2 - x1 = x4 - x3; + y1 - y2 = y3 - y4; + z5 = (1.296 staff_space, 1.613 staff_space); + z6 = (0.090 staff_space, -0.864 staff_space); + z7 = (1.532 staff_space, 0.892 staff_space); + x5 - x6 = x7 - x8; + y5 - y6 = y7 - y8; + pickup pensquare xscaled 0.167staff_space + yscaled 0.167staff_space + rotated -69.2; + draw z1{dir -69.2} .. {dir -74.1}z2; + draw z3{dir -69.2} .. {dir -74.1}z4; + pickup pensquare xscaled 0.167staff_space + yscaled 0.167staff_space + rotated -114.6; + draw z5{dir -114.6} ... {dir -125.0}z6; + draw z7{dir -114.6} ... {dir -125.0}z8; + set_char_box (0, 1.6 staff_space#, 1.6 staff_space#, 1.6 staff_space#); +fet_endchar; + +fet_beginchar ("kievan flat", "kievanM1"); + % this draws the flat sign + % In Synodal music, the flat only occurs on the high B + % but it may be used elsewhere in early manuscripts + z1 = (0.452 staff_space, 1.772 staff_space); + z2 = (0.481 staff_space, 1.735 staff_space); + z3 = (0.464 staff_space, 1.626 staff_space); + z4 = (0.249 staff_space, 0.322 staff_space); + z5 = (0.432 staff_space, -0.762 staff_space); + z6 = (0.611 staff_space, -0.583 staff_space); + z7 = (0.611 staff_space, 0.224 staff_space); + z8 = (0.652 staff_space, 0.513 staff_space); + z9 = (0.900 staff_space, 0.684 staff_space); + z10 = (0.872 staff_space, 0.640 staff_space); + z11 = (0.811 staff_space, 0.359 staff_space); + z12 = (0.811 staff_space, -0.587 staff_space); + z13 = (0.338 staff_space, -1.063 staff_space); + z14 = (0.016 staff_space, 0.196 staff_space); + z15 = (0.204 staff_space, 1.316 staff_space); + fill z13 + .. z14{up} + .. z15{dir 70.8} + .. z1{dir 4.9} + .. z2 + .. z3 + .. z4{down} + .. z5 + & z5 -- cycle; + fill z5 -- z6 + & z6 -- z7 + & z7 -- z11 + & z11 -- z12 + & z12 -- z13 + & z13 -- cycle; + fill z7{up} .. z8 .. {dir 23}z9 + & z9 .. z10{dir -135} .. {down}z11 + & z11 -- cycle; + set_char_box (0, 1.0 staff_space#, 1.0 staff_space#, 1.8 staff_space#); +fet_endchar; fet_endgroup ("accidentals"); diff --git a/mf/parmesan-clefs.mf b/mf/parmesan-clefs.mf index 91988ebc4c..2af7b9fdd0 100644 --- a/mf/parmesan-clefs.mf +++ b/mf/parmesan-clefs.mf @@ -1700,5 +1700,47 @@ fet_beginchar ("Hufnagel do/fa clef", "hufnagel.do.fa_change"); draw_hufnagel_do_fa_clef ((0, 0), .8); fet_endchar; +%%%%%%%% +%% +%% Medieval East-Slavic (Kievan) Notation clefs +%% Code by Aleksandr Andreev +%% +%%%%%%%% + +def draw_kievan_do_clef = + z1 = (1.108 staff_space, 0.554 staff_space); + z2 = (1.063 staff_space, -0.122 staff_space); + z3 = (1.467 staff_space, -1.621 staff_space); + z4 = (1.002 staff_space, -2.253 staff_space); + y5 = y3; + x4 - x5 = x3 - x4; + z6 = (0.917 staff_space, -0.383 staff_space); + z7 = (0.012 staff_space, -0.448 staff_space); + z8 = (0, -0.167 staff_space); + z9 = (0.057 staff_space, 0.464 staff_space); + z10 = (0.994 staff_space, 0.387 staff_space); + z11 = (1.023 staff_space, 0.554 staff_space); + fill z1 .. z2{down} .. z3 + & z3 -- z4 + & z4 -- z5 + & z5 .. {up}z6 + & z6{left} .. z7 + & z7 .. z8{up} .. z9 + & z9 .. {right}z10 + & z10 .. z11 + & z11 -- cycle; + set_char_box (0, 1.5 staff_space#, 2.25 staff_space#, 0.55 staff_space#); +enddef; + +fet_beginchar ("kievan tsefaut clef", "kievan.do"); + % this draws the Tse-Fa-Ut clef + % it is a variant alto clef that always occurs on the third line of the staff + draw_kievan_do_clef; +fet_endchar; + +fet_beginchar ("mensural c clef", "kievan.do_change"); + % This is the same thing as a do clef? + draw_kievan_do_clef; +fet_endchar; fet_endgroup ("clefs"); diff --git a/mf/parmesan-dots.mf b/mf/parmesan-dots.mf index d6aa75682c..1c09d51efb 100644 --- a/mf/parmesan-dots.mf +++ b/mf/parmesan-dots.mf @@ -35,4 +35,24 @@ fet_beginchar ("duration dot", "dotvaticana"); set_char_box (0, dot_diam#, .5 dot_diam#, .5 dot_diam#); fet_endchar; +%%%%%%%%%%%%% +%%% +%%% Code for Kievan Music Notation +%%% +%%%%%%%%%%%%% + +save kievan_dot_diam; +kievan_dot_diam# := staff_space# - stafflinethickness#; +define_whole_pixels (kievan_dot_diam); + +fet_beginchar ("kievan augmentation dot", "dotkievan"); + % pars for superellipse are right, top, left, bottom + fill superellipse((kievan_dot_diam, 0), + (kievan_dot_diam / 2, kievan_dot_diam / 2), + (0, 0), + (kievan_dot_diam / 2, -kievan_dot_diam / 2), + 0.51); + set_char_box (0, kievan_dot_diam#, 0.5 kievan_dot_diam#, 0.5 kievan_dot_diam#); +fet_endchar; + fet_endgroup ("dots"); diff --git a/mf/parmesan-noteheads.mf b/mf/parmesan-noteheads.mf index 8ba6e4bdaf..12fd9322f7 100644 --- a/mf/parmesan-noteheads.mf +++ b/mf/parmesan-noteheads.mf @@ -1706,5 +1706,246 @@ fet_beginchar ("Hufnagel pes lower punctum", "shufnagel.lpes") % labels (1, 2, 3, 4); fet_endchar; +%%%%%%%%%%%% +%% +%% Noteheads for Medieval East-Slavic (Kievan) Notation +%% Code by Aleksandr Andreev +%% +%%%%%%%%%%%% + +fet_beginchar ("kievan final note", "sM2kievan"); + % this draws the Final Note + % the final note is the last note of a piece of music + % equivalent to having a whole note and fermata in CMN + % it always has an invariant representation + vert_bar_thickness# := 2 * stafflinethickness#; + vert_height# := 1.5 * staff_space#; + blank_space# := 1.5 * stafflinethickness#; + note_width# := vert_height# - 2 * vert_bar_thickness#; + define_pixels(vert_height, blank_space, note_width); + define_blacker_pixels (vert_bar_thickness); + + path p; + p := (0, blank_space) -- + (0, staff_space - blank_space) -- + (note_width, staff_space - blank_space) -- + (note_width, blank_space) -- + cycle; + fill p; + fill p reflectedabout ((0, 0), (1, 0)); + pickup pensquare xscaled vert_bar_thickness; + draw (note_width + 0.5 * vert_bar_thickness, vert_height) -- + (note_width + 0.5 * vert_bar_thickness, -vert_height); + + set_char_box (0, note_width# + vert_bar_thickness#, + vert_height#, vert_height#); +fet_endchar; + +fet_beginchar ("kievan recitative mark", "sM1kievan"); + inner_width# := 4 * staff_space#; + vert_bar_thickness# := 2 * stafflinethickness#; + vert_bar_height# := staff_space# - stafflinethickness#; + blank_space# := 0.20 * vert_bar_height#; + define_pixels(inner_width, blank_space, vert_bar_height); + define_blacker_pixels (vert_bar_thickness); + + path p; + p := (3 * vert_bar_thickness, blank_space) -- + (3 * vert_bar_thickness, vert_bar_height - blank_space) -- + (3 * vert_bar_thickness + inner_width, vert_bar_height - blank_space) -- + (3 * vert_bar_thickness + inner_width, blank_space) -- + cycle; + fill p; + fill p reflectedabout ((0, 0), (1, 0)); + + % draw the four vertical lines + pickup pensquare xscaled vert_bar_thickness; + p := (0.5 * vert_bar_thickness, vert_bar_height) -- + (0.5 * vert_bar_thickness, -vert_bar_height); + draw p; + draw p shifted (2 * vert_bar_thickness, 0); + draw p shifted (3 * vert_bar_thickness + inner_width, 0); + draw p shifted (5 * vert_bar_thickness + inner_width, 0); + + set_char_box (0, 6 * vert_bar_thickness# + inner_width#, + vert_bar_height#, vert_bar_height#); +fet_endchar; + +fet_beginchar ("Kievan whole note", "s0kievan"); + % the amount by which top and bottom diamond overlap + overlap# := stafflinethickness#; + height# := staff_space# - stafflinethickness#; + width# := height# + overlap#; + define_pixels(overlap, height, width); + + % pars for superellipse are right, top, left, bottom + fill superellipse((width, 0.5 * (height + overlap)), + (width/2, height + overlap), + (0, 0.5 * (height + overlap)), + (width/2, -overlap), + 0.51); + fill superellipse((width, -0.5 * (height + overlap)), + (width/2, overlap), + (0, -0.5 * (height + overlap)), + (width/2, -height - overlap), + 0.51); + set_char_box (0, width#, height# + overlap#, + height# + overlap#); +fet_endchar; + +fet_beginchar ("Kievan quarter note down", "d2kievan"); + z1 = (0.09 * staff_space, 0.33 * staff_space); + z2 = (0.66 * staff_space, 0.37 * staff_space); + z3 = (0.99 * staff_space, 0.36 * staff_space); + z4 = (0.90 * staff_space, -1.05 * staff_space); + z5 = (1.02 * staff_space, -2.19 * staff_space); + z6 = (0.60 * staff_space, -2.49 * staff_space); + z7 = (0.58 * staff_space, -1.91 * staff_space); + z8 = (0.73 * staff_space, -0.35 * staff_space); + z9 = (0.02 * staff_space, -0.39 * staff_space); + z10 = (0, -0.24 * staff_space); + fill z1{dir 8.6} .. z2 .. z3 + & z3 .. z4 .. z5 + & z5 -- z6 + & z6 .. z7 .. z8 + & z8{left} .. z9 + & z9 .. z10 ... {dir 75}cycle; + set_char_box (0, 1.02 staff_space#, 2.50 staff_space#, 0.40 staff_space#); +fet_endchar; + +fet_beginchar ("Kievan quarter note up", "u2kievan"); + z1 = (0.090 staff_space, -0.330 staff_space); + z2 = (0.664 staff_space, -0.371 staff_space); + z3 = (0.986 staff_space, -0.363 staff_space); + z4 = (0.897 staff_space, 1.051 staff_space); + z5 = (1.019 staff_space, 2.387 staff_space); + z6 = (0.603 staff_space, 2.587 staff_space); + z7 = (0.583 staff_space, 1.911 staff_space); + z8 = (0.725 staff_space, 0.346 staff_space); + z9 = (0.017 staff_space, 0.391 staff_space); + z10 = (0, 0.240 staff_space); + fill z1{dir -6.9} .. z2 .. z3 + & z3 .. z4 .. z5 + & z5 -- z6 + & z6 .. z7 .. z8 + & z8{left} .. z9 + & z9 .. z10 ... {dir -76.9}cycle; + set_char_box (0, 1.02 staff_space#, 0.40 staff_space#, 2.6 staff_space#); +fet_endchar; + +fet_beginchar ("kievan half note (line position)", "s1kievan"); + % this draws the half note with a short tail up and a long tail down + % this version of the half note is used on any line of the staff + z1 = (1.031 staff_space, 0.945 staff_space); + z2 = (0.945 staff_space, -0.122 staff_space); + z3 = (1.059 staff_space, -1.393 staff_space); + z4 = (0.713 staff_space, -1.564 staff_space); + z5 = (0.672 staff_space, -0.729 staff_space); + z6 = (0.684 staff_space, -0.318 staff_space); + z7 = (0.448 staff_space, -0.326 staff_space); + z8 = (0, -0.281 staff_space); + z9 = (0.086 staff_space, 0.350 staff_space); + z10 = (0.746 staff_space, 0.277 staff_space); + z11 = (0.909 staff_space, 0.921 staff_space); + fill z1 .. z2{down} .. z3 + & z3 -- z4 + & z4 .. z5{up} .. z6 + & z6 .. z7{left} .. z8 + & z8 -- z9 + & z9 .. {right}z10 + & z10{up} .. z11 + & z11 -- cycle; + set_char_box (0, 1.06 staff_space#, 1.6 staff_space#, 1.0 staff_space#); +fet_endchar; + +fet_beginchar ("kievan half note (space position)", "sr1kievan"); + % this draws the half note with a short tail down and a long tail up + % this version of the half note is used in any space of the staff + z1 = (1.071 staff_space, 1.426 staff_space); + z2 = (0.974 staff_space, 0.191 staff_space); + z3 = (1.059 staff_space, -0.994 staff_space); + z4 = (0.713 staff_space, -1.169 staff_space); + z5 = (0.676 staff_space, -0.436 staff_space); + z6 = (0.684 staff_space, -0.310 staff_space); + z7 = (0.448 staff_space, -0.322 staff_space); + z8 = (0, -0.277 staff_space); + z9 = (0.0856 staff_space, 0.359 staff_space); + z10 = (0.746 staff_space, 0.281 staff_space); + z11 = (0.807 staff_space, 0.847 staff_space); + z12 = (0.945 staff_space, 1.401 staff_space); + fill z1 .. z2{down} .. z3 + & z3 -- z4 + & z4 .. z5{up} .. z6 + & z6 .. z7{left} .. z8 + & z8 -- z9 + & z9 .. z10{right} + & z10 .. z11 .. z12 + & z12 -- cycle; + set_char_box (0, 1.1 staff_space#, 1.0 staff_space#, 1.4 staff_space#); +fet_endchar; + +fet_beginchar ("kievan eighth note (down)", "d3kievan"); + % this draws the eighth note + % this form of the eight note occurs on the third line or higher + % and sometimes between the second line and the third line + z1 = (0.261 staff_space, 0.416 staff_space); + z2 = (1.022 staff_space, 0.269 staff_space); + z3 = (0.664 staff_space, -0.603 staff_space); + z4 = (1.259 staff_space, -0.726 staff_space); + z5 = (1.055 staff_space, -2.012 staff_space); + z6 = (1.186 staff_space, -2.794 staff_space); + z7 = (0.778 staff_space, -2.999 staff_space); + z8 = (0.741 staff_space, -2.567 staff_space); + z9 = (0.941 staff_space, -1.467 staff_space); + z10 = (0.33 staff_space, -1.340 staff_space); + z11 = (0.631 staff_space, -0.448 staff_space); + z12 = (0, -0.334 staff_space); + fill z1{right} .. z2 + & z2 -- z3 + & z3{right} .. z4 + & z4 .. z5{down} .. z6 + & z6 -- z7 + & z7 .. z8{up} .. z9 + & z9 .. {left}z10 + & z10{dir 78.7} .. z11 + & z11 .. {left}z12 + & z12{dir 78.7} .. {dir 62}cycle; + set_char_box (0, 1.25 staff_space#, 3.0 staff_space#, 0.5 staff_space#); +fet_endchar; + +fet_beginchar ("kievan eighth note (up)", "u3kievan"); + % this draws the flagged eighth note + % this version of the eighth note occurs on the second line or lower + % first, draw the upside down quarter note + z1 = (0.090 staff_space, -0.33 staff_space); + z2 = (0.664 staff_space, -0.371 staff_space); + z3 = (0.986 staff_space, -0.363 staff_space); + z4 = (0.896 staff_space, 1.051 staff_space); + z5 = (1.019 staff_space, 2.387 staff_space); + z6 = (0.603 staff_space, 2.587 staff_space); + z7 = (0.583 staff_space, 1.911 staff_space); + z8 = (0.725 staff_space, 0.346 staff_space); + z9 = (0.016 staff_space, 0.391 staff_space); + z10 = (0, 0.240 staff_space); + fill z1{dir -6.9} .. z2 .. z3 + & z3 .. z4 .. z5 + & z5 -- z6 + & z6 .. z7 .. z8 + & z8{left} .. z9 + & z9 .. z10 ... {dir -76.9}cycle; + % now, draw the stem + z11 = (0.033 staff_space, 2.823 staff_space); + z12 = (0.391 staff_space, 2.648 staff_space); + z13 = (0.354 staff_space, 2.290 staff_space); + z14 = (0.676 staff_space, 1.076 staff_space); + z15 = (0.693 staff_space, 0.88 staff_space); + z16 = (0.208 staff_space, 1.699 staff_space); + z17 = (0.024 staff_space, 2.616 staff_space); + fill z11 -- z12 + & z12 .. z13{down} .. z14 + & z14 -- z15 + & z15 .. z16 .. z17{up} .. cycle; + set_char_box (0, 1.0 staff_space#, 0.4 staff_space#, 2.9 staff_space#); +fet_endchar; fet_endgroup ("noteheads"); diff --git a/mf/parmesan-scripts.mf b/mf/parmesan-scripts.mf index 18646a807e..dcc3fd4518 100644 --- a/mf/parmesan-scripts.mf +++ b/mf/parmesan-scripts.mf @@ -238,5 +238,57 @@ fet_beginchar ("signum congruentiae down", "dsignumcongruentiae"); xy_mirror_char; fet_endchar; +%%%%%%%%%%%%% +%%%% +%%%% Code for Kievan Notation +%%%% +%%%%%%%%%%%%% + +fet_beginchar ("kievan end of piece (slash)", "barline.kievan"); + % this draws the end of piece figure + % this figure is placed at the end of the musical piece, after the staff + save hair_thickness, thick_thickness, width, depth, height, padding; + hair# = 1.9 linethickness#; + thick# = 6.0 linethickness#; + width = .8 staff_space; + height# + depth# = 4 staff_space#; + depth# = height# + hair# / 2; + padding = .2 staff_space; + + set_char_box (0, 0, depth#, height#); + define_pixels (hair, thick); + + x1r - x2l = width; + y1 - y3r = d + h + linethickness / 2; + z3 = z2; + z4 = .5 [z1, z2] = (width / 2 + padding, hair / 8); + z5 = (x2 - .17 staff_space, 9/10 [y2, y1]); + z7 - z6 = (.5 staff_space, -.2 staff_space); + .4 [z6, z7] = 7/6 [z2, z1]; + + pickup pencircle scaled blot_diameter; + penpos1 (hair, 0); + penpos2 (hair, 0); + penpos3 (hair, -90); + penpos4 (thick, 10); + penpos5 (thick, 35); + penpos6 (hair, -90); + penpos7 (.5 thick, -120); + + penlabels (1, 2, 3, 4, 5, 6, 7); + + penstroke z1e + -- z2e; + + fill simple_serif (z3l, z3r, 90){1.5 right} + .. z4r + .. z5r + .. z6r + .. simple_serif (z7r, z7l, 80) + .. {left}z6l + .. z5l + .. z4l + .. cycle; +fet_endchar; fet_endgroup ("scripts"); diff --git a/scm/output-lib.scm b/scm/output-lib.scm index 7a43a7bb54..17bbea995b 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -159,10 +159,16 @@ (if (interval-empty? (interval-intersection stem_ph my_ph)) #f (coord-translate stem_ph dist))) #f)) +;; FIXME: NEED TO FIND A BETTER WAY TO HANDLE KIEVAN NOTATION (define-public (note-head::calc-duration-log grob) - (min 2 - (ly:duration-log - (ly:event-property (event-cause grob) 'duration)))) + (let ((style (ly:grob-property grob 'style))) + (if (and (symbol? style) (string-match "kievan*" (symbol->string style))) + (min 3 + (ly:duration-log + (ly:event-property (event-cause grob) 'duration))) + (min 2 + (ly:duration-log + (ly:event-property (event-cause grob) 'duration)))))) (define-public (dots::calc-dot-count grob) (ly:duration-dot-count @@ -226,6 +232,8 @@ and duration-log @var{log}." (string-append (number->string log) "petrucci"))) ((neomensural) (string-append (number->string log) (symbol->string style))) + ((kievan) + (string-append (number->string log) "kievan")) (else (if (string-match "vaticana*|hufnagel*|medicaea*" (symbol->string style)) (symbol->string style) @@ -233,9 +241,10 @@ and duration-log @var{log}." (symbol->string style)))))) (define-public (note-head::calc-glyph-name grob) - (let ((style (ly:grob-property grob 'style)) - (log (min 2 (ly:grob-property grob 'duration-log)))) - + (let* ((style (ly:grob-property grob 'style)) + (log (if (string-match "kievan*" (symbol->string style)) + (min 3 (ly:grob-property grob 'duration-log)) + (min 2 (ly:grob-property grob 'duration-log))))) (select-head-glyph style log))) (define-public (note-head::brew-ez-stencil grob) @@ -388,7 +397,10 @@ and duration-log @var{log}." ("S|:" . ("S" . "|:")) (".S|:" . ("|" . "S|:")) (":|S|:" . (":|" . "S|:")) - (":|S.|:" . (":|S" . "|:")))) + (":|S.|:" . (":|S" . "|:")) + + ;; ancient bar lines + ("kievan" . ("kievan" . "")))) (define-public (bar-line::calc-glyph-name grob) (let* ((glyph (ly:grob-property grob 'glyph)) @@ -678,6 +690,9 @@ and duration-log @var{log}." (0 . "accidentals.vaticana0") (1/2 . "accidentals.mensural1"))) +(define-public alteration-kievan-glyph-name-alist + '((-1/2 . "accidentals.kievanM1") + (1/2 . "accidentals.kievan1"))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; * Pitch Trill Heads diff --git a/scm/parser-clef.scm b/scm/parser-clef.scm index c92de614c7..6d46cc626c 100644 --- a/scm/parser-clef.scm +++ b/scm/parser-clef.scm @@ -76,7 +76,8 @@ ("petrucci-f4" . ("clefs.petrucci.f" 2 0)) ("petrucci-f5" . ("clefs.petrucci.f" 4 0)) ("petrucci-f" . ("clefs.petrucci.f" 2 0)) - ("petrucci-g" . ("clefs.petrucci.g" -2 0)))) + ("petrucci-g" . ("clefs.petrucci.g" -2 0)) + ("kievan-do" . ("clefs.kievan.do" 0 0)))) ;; "an alist mapping GLYPHNAME to the position of the middle C for ;; that symbol" @@ -103,7 +104,8 @@ ("clefs.petrucci.c4" . 0) ("clefs.petrucci.c5" . 0) ("clefs.petrucci.f" . 4) - ("clefs.petrucci.g" . -4))) + ("clefs.petrucci.g" . -4) + ("clefs.kievan.do" . 0))) (define-public (make-clef-set clef-name) "Generate the clef setting commands for a clef with name @var{clef-name}."