X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=input%2Fmanual%2Ffont-table.ly;h=b468deb016ae3bc8be93b72babda76b5008b6702;hb=a8c9e8a7ca320ab0df5fd32e717fd62cd7635ce6;hp=27eeb55c7f9bfb6c1b5b759815dab1264188034d;hpb=cdf6235aaa21e5b2ac03cd9365c1dba74a7b9926;p=lilypond.git diff --git a/input/manual/font-table.ly b/input/manual/font-table.ly index 27eeb55c7f..b468deb016 100644 --- a/input/manual/font-table.ly +++ b/input/manual/font-table.ly @@ -1,5 +1,173 @@ #(set-global-staff-size 16) +#(begin + + ;; some helper functions + + (define (filter-out pred lst) + (filter (lambda (x) (not (pred x))) lst)) + + (define (filter-out-group glyph-list substring) + (filter-out (lambda (x) (string-contains x substring)) glyph-list)) + + (define (filter-out-groups glyph-list . substrings) + (let loop ((new glyph-list) (rem substrings)) + (if (null? rem) + new + (loop (filter-out-group new (car rem)) + (cdr rem))))) + + (define (get-group glyph-list substring) + (filter (lambda (x) (string-contains x substring)) glyph-list)) + + (define glyph-list + (delete ".notdef" + (ly:otf-glyph-list (ly:system-font-load "emmentaler-20")))) + + ;;;;;;;;; + + ;; define these 3 groups first since they're + ;; harder to get with (get-groups ...) + (define numbers + '("plus" "comma" "hyphen" "period" + "zero" "one" "two" "three" "four" + "five" "six" "seven" "eight" "nine")) + + (define default-noteheads + '("noteheads.uM2" "noteheads.dM2" "noteheads.sM1" + "noteheads.s0" "noteheads.s1" "noteheads.s2")) + + (define dynamics + '("space" "f" "m" "p" "r" "s" "z")) + + ;; remove them from the glyph-list + (for-each + (lambda (x) (set! glyph-list (delete x glyph-list))) + (append numbers + default-noteheads + dynamics)) + + ;;;;;;;;; + + ;; extract ancient-music groups before extracting default + ;; accidentals, rests, etc. to prevent duplication. + (define vaticana (get-group glyph-list "vaticana")) + (define medicaea (get-group glyph-list "medicaea")) + (define hufnagel (get-group glyph-list "hufnagel")) + (define neomensural (get-group glyph-list "neomensural")) + + ;; remove neomensural before defining mensural; otherwise, searching + ;; for "mensural" would return "neomensural" matches too. + (set! glyph-list + (filter-out-groups + glyph-list + "vaticana" + "medicaea" + "hufnagel" + "neomensural")) + + ;; get the rest of the ancient-music groups + (define mensural (get-group glyph-list "mensural")) + (define petrucci (get-group glyph-list "petrucci")) + (define solesmes (get-group glyph-list "solesmes")) + + ;; remove them from the glyph-list + (set! glyph-list + (filter-out-groups + glyph-list + "mensural" + "petrucci" + "solesmes")) + + ;; This would only get "rests.2classical". + ;; We're leaving it with the other rests for now. + ;; (define classical (get-group glyph-list "classical")) + ;; (set! glyph-list (filter-out-groups glyph-list "classical")) + + ;;;;;;;;; + + ;; get everything else except noteheads. + ;; * Some accidentals contain "slash" substring, so extract + ;; "accidentals" before extracting "slash" (noteheads). + ;; * Also use "pedal." not "pedal", for example, to prevent things + ;; like "scripts.upedalheel" ending up in the "pedal." list. + ;; * This doesn't apply to the ancient stuff because searching for + ;; "vaticana." (as an example) would miss things like + ;; "dots.dotvaticana" + (define clefs (get-group glyph-list "clefs.")) + (define timesig (get-group glyph-list "timesig.")) + (define accidentals (get-group glyph-list "accidentals.")) + (define rests (get-group glyph-list "rests.")) + (define flags (get-group glyph-list "flags.")) + (define dots (get-group glyph-list "dots.")) + (define scripts (get-group glyph-list "scripts.")) + (define arrowheads (get-group glyph-list "arrowheads.")) + (define brackettips (get-group glyph-list "brackettips.")) + (define pedal (get-group glyph-list "pedal.")) + (define accordion (get-group glyph-list "accordion.")) + + ;; remove them from the glyph-list + (set! glyph-list + (filter-out-groups + glyph-list + "clefs." + "timesig." + "accidentals." + "rests." + "flags." + "dots." + "scripts." + "arrowheads." + "brackettips." + "pedal." + "accordion.")) + + ;;;;;;;;; + + ;; get special noteheads + (define cross (get-group glyph-list "cross")) + (define diamond (get-group glyph-list "diamond")) + (define harmonic (get-group glyph-list "harmonic")) + (define slash (get-group glyph-list "slash")) + (define triangle (get-group glyph-list "triangle")) + (define xcircle (get-group glyph-list "xcircle")) + + (define special-noteheads + (append cross + diamond + harmonic + slash + triangle + xcircle)) + + ;; remove special noteheads from the glyph-list + (set! glyph-list + (filter-out-groups + glyph-list + "cross" + "diamond" + "harmonic" + "slash" + "triangle" + "xcircle")) + + ;; (lazy solution) + ;; any remaining glyphs containing "noteheads." should be shape-notes. + (define shape-note-noteheads (get-group glyph-list "noteheads.")) + + ;; remove shape-note-noteheads from the glyph-list + (set! glyph-list (filter-out-group glyph-list "noteheads.")) + + ;;;;;;;;; + + ;; simple debug test for any glyphs that didn't make it. + (if #f + (if (null? glyph-list) + (format #t "No glyphs are missing from the table.\n") + (format #t "You missed these glyphs: ~a\n" glyph-list))) + +) % end of (begin ...) + \paper { %% ugh. text on toplevel is a bit broken... @@ -9,7 +177,7 @@ evenFooterMarkup = \markup {} } -\version "2.11.51" +\version "2.12.0" #(define-markup-command (doc-char layout props name) (string?) (interpret-markup layout props @@ -54,7 +222,3 @@ (cons (make-line-markup (map make-doc-char-markup head)) acc))))) (interpret-markup-list layout props (doc-chars-aux names (list)))) - -\markuplines \override-lines #'(word-space . 4) - \doc-chars #(delete ".notdef" - (ly:otf-glyph-list (ly:font-load "emmentaler-20")))