]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'release/unstable' into HEAD
authorGraham Percival <graham@percival-music.ca>
Thu, 9 Feb 2012 18:34:45 +0000 (18:34 +0000)
committerGraham Percival <graham@percival-music.ca>
Thu, 9 Feb 2012 18:34:45 +0000 (18:34 +0000)
14 files changed:
Documentation/included/font-table.ly
Documentation/notation/notation-appendices.itely
input/regression/note-head-style.ly
lily/bar-line.cc
lily/note-head.cc
lily/stem.cc
ly/engraver-init.ly
mf/parmesan-accidentals.mf
mf/parmesan-clefs.mf
mf/parmesan-dots.mf
mf/parmesan-noteheads.mf
mf/parmesan-scripts.mf
scm/output-lib.scm
scm/parser-clef.scm

index 398286ac4ec2af3242f61c07a7b27c2262d1ec37..0dfaac3a59a082468dbcdec54b86da342d35cf87 100644 (file)
@@ -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
index eb0bef92a915f2daf9543672e70e40154c75ab6e..830366ddd4d5be3f7f46e3a2180c739e0b8fa451 100644 (file)
@@ -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
index 255ce007dd2ce3f2356eb37b5351976820c39c4f..5fe18054d40188562947336d01052fcaded6a9a5 100644 (file)
@@ -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
+
 }
 
 
index c642c3159d03cb677dad15b80eb23752e1303ba7..1f2d9b2963401327cc49a04ffe3920c937eba6ac 100644 (file)
@@ -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;
 }
 
index 3ca686b2f3bbb785345a385aaf63d0365d77536a..fb93e40eeb82f02574c2fa670183d19054214fd6 100644 (file)
@@ -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,
index fb830624ff23b360e1c06d5d85a7c0114033ed8e..8eaf2321ea3ecdb669df157bf959cfa4ff706c11 100644 (file)
@@ -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)
index 67c3522a1506d6d86d4f90ed8d3b050a5d217f7a..6335ab65b1fcd0fb168e0098cfa8efa57ecabe0f 100644 (file)
@@ -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
index 340986d7e0f0336bc6e51497e6d4af37c2a0de03..7c081a995f1f167c1123992f628a8e1bd82d5de9 100644 (file)
@@ -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");
index 91988ebc4ca1b6776bcad6208ce5800f2643d957..2af7b9fdd0f19c223176a24a38a2732bd99fe590 100644 (file)
@@ -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 <aleksandr.andreev@gmail.com>
+%%
+%%%%%%%%
+
+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");
index d6aa75682c940b1143e0854bfdb2b889b6955a5e..1c09d51efb907a48130681716fedcdf35d65c98f 100644 (file)
@@ -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");
index 8ba6e4bdafb48b65e0693bccc6a3c02784a6c40b..12fd9322f7936a03d82c4a2970a76426888fc281 100644 (file)
@@ -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 <aleksandr.andreev@gmail.com>
+%%
+%%%%%%%%%%%%
+
+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");
index 18646a807e3f9718d8db5497de6b2bedc32c6d62..dcc3fd451818f36dfe4241d0e4fb131b03832680 100644 (file)
@@ -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");
index 7a43a7bb54978e4f314b948ebe389e59664c14eb..17bbea995b1f7c7bf03005b4ffffea2d6c9fd221 100644 (file)
         (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
index c92de614c7da0a23fd370eb7ed4a00170c49bcb2..6d46cc626cc8df1cc64743af3428bed24fc665d7 100644 (file)
@@ -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"
     ("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}."