-(define-public (make-font-tree factor)
- (let*
- ((n (make-font-tree-node 'font-encoding 'music))
- )
-
- (for-each
- (lambda (x)
- (add-font n
- (list (cons 'font-encoding (car x)))
- (cons (* factor (cadr x))
- (caddr x))))
- '((number 10
- #((3.82 . "feta-nummer4")
- (5.5 . "feta-nummer6")
- (8.0 . "feta-nummer8")
- (10.0 . "feta-nummer10")
- (12.0 . "feta-nummer12")
- (16.0 . "feta-nummer16")))
- (dynamic 14.0 #((6.0 . "feta-din6")
- (8.0 . "feta-din8")
- (10.0 . "feta-din10")
- (12.0 . "feta-din12")
- (14.0 . "feta-din14")
- (17.0 . "feta-din17")
- ))
- (math 10 #((10.0 . "msam10")))
- (music 20.0
- #((11.22 . ("feta11" "parmesan11"))
- (12.60 . ("feta13" "parmesan13"))
- (14.14 . ("feta14" "parmesan14"))
- (15.87 . ("feta16" "parmesan16"))
- (17.82 . ("feta18" "parmesan18"))
- (20.0 . ("feta20" "parmesan20"))
- (22.45 . ("feta23" "parmesan23"))
- (25.20 . ("feta26" "parmesan26"))
- ))
- (braces 10 #((10.0 . ("feta-braces00"
- "feta-braces10"
- "feta-braces20"
- "feta-braces30"
- "feta-braces40"
- "feta-braces50"
- "feta-braces60"
- "feta-braces70"
- "feta-braces80"))
- ))))
-
- (for-each
- (lambda (x)
- (add-font
- n
- `((font-encoding . text)
- (font-series . ,(vector-ref (car x) 2))
- (font-shape . ,(vector-ref (car x) 1))
- (font-family . ,(vector-ref (car x) 0)))
- (cons (* factor (cadr x))
- (cddr x))
- ))
- '((#(roman upright medium) .
- (10.0 . #((6.0 . "cmr6")
- (8.0 . "cmr8")
- (10.0 . "cmr10")
- (17.0 . "cmr17")
- )))
-
- (#(roman upright bold) .
- (10.0 . #((6.0 . "cmbx6")
- (8.0 . "cmbx8")
- (10.0 . "cmbx10")
- (12.0 . "cmbx12")
- )))
-
- (#(roman italic medium) .
- (10.0 . #((7.0 . "cmti7")
- (10.0 . "cmti10")
- (12.0 . "cmti12")
- )))
- (#(roman italic bold) .
- (10.0 . #((8.0 . "cmbxti8")
- (10.0 . "cmbxti10")
- (14.0 . "cmbxti14")
- )))
-
- (#(roman caps medium) .
- (10.0 . #((10.0 . "cmcsc10"))))
-
- (#(roman upright bold-narrow ) .
- (10.0 . #((10.0 . "cmb10")
- )))
-
- (#(sans upright medium) .
- (10.0 . #((8.0 . "cmss8")
- (10.0 . "cmss10")
- (12.0 . "cmss12")
- (17.0 . "cmss17")
- )))
- (#(typewriter upright medium) .
- (10.0 . #((8.0 . "cmtt8")
- (10.0 . "cmtt10")
- (12.0 . "cmtt12")
- )))
- ))
+;; Ugh. Currently, we load the PFB Feta fonts for `fetaDynamic' with
+;; Pango. This should be changed to load the Emmentaler fonts instead
+;; (with Pango too), but then we need support for a `font-style'
+;; property which isn't implemented yet.
+(define feta-alphabet-size-vector
+ (list->vector
+ (map (lambda (tup)
+ (cons (ly:pt (cdr tup))
+ (format "feta-alphabet~a ~a"
+ (car tup)
+ (ly:pt (cdr tup)))))
+ '((11 . 11.22)
+ (13 . 12.60)
+ (14 . 14.14)
+ (16 . 15.87)
+ (18 . 17.82)
+ (20 . 20)
+ (23 . 22.45)
+ (26 . 25.20)))))
+
+;; Each size family is a vector of fonts, loaded with a delay. The
+;; vector should be sorted according to ascending design size.
+(define-public (add-music-fonts node factor)
+ (for-each
+ (lambda (x)
+ (add-font node
+ (list (cons 'font-encoding (car x)))
+ (cons (* factor (cadr x))
+ (caddr x))))
+ `((fetaDynamic ,(ly:pt 20.0) ,feta-alphabet-size-vector)
+ (fetaNumber ,(ly:pt 20.0) ,feta-alphabet-size-vector)
+ (fetaMusic ,(ly:pt 20.0)
+ #(,(delay (ly:system-font-load "emmentaler-11"))
+ ,(delay (ly:system-font-load "emmentaler-13"))
+ ,(delay (ly:system-font-load "emmentaler-14"))
+ ,(delay (ly:system-font-load "emmentaler-16"))
+ ,(delay (ly:system-font-load "emmentaler-18"))
+ ,(delay (ly:system-font-load "emmentaler-20"))
+ ,(delay (ly:system-font-load "emmentaler-23"))
+ ,(delay (ly:system-font-load "emmentaler-26"))))
+ (fetaBraces ,(ly:pt 20.0)
+ #(,(delay (ly:system-font-load "aybabtu")))))))
+
+(define-public (add-pango-fonts node lily-family family factor)
+ (define (add-node shape series)
+ (add-font node
+ `((font-family . ,lily-family)
+ (font-shape . ,shape)
+ (font-series . ,series)
+ (font-encoding . latin1) ;; ugh.
+ )
+ `(,(ly:pt (* factor 11.0))
+ . #(,(cons
+ (ly:pt 12)
+ (ly:make-pango-description-string
+ `(((font-family . ,family)
+ (font-series . ,series)
+ (font-shape . ,shape)))
+ (ly:pt 12)))))))
+
+ (add-node 'upright 'normal)
+ (add-node 'caps 'normal)
+ (add-node 'upright 'bold)
+ (add-node 'italic 'normal)
+ (add-node 'italic 'bold))
+
+(define-public (make-pango-font-tree roman-str sans-str typewrite-str factor)
+ (let ((n (make-font-tree-node 'font-encoding 'fetaMusic)))
+ (add-music-fonts n factor)
+ (add-pango-fonts n 'roman roman-str factor)
+ (add-pango-fonts n 'sans sans-str factor)
+ (add-pango-fonts n 'typewriter typewrite-str factor)