File add_set-global-fonts_function.patch of Package lilypond

Description: Add set-global-fonts function to scm/font.scm
 Allow changing of notation fonts
 This commit changes the behaviour of make-pango-font-tree in the
 following ways:
 - Make all arguments optional key/value pairs
   keeping the current default values (emmentaler/Century Schoolbook)
 - Allow changing of music fonts too.
 Currently alternative music fonts have to be present in the font
 directory besides Emmentaler fonts, and they have to be manually installed.
 But now there are a number of alternative and compatible fonts available.
 See also:
Author: Abraham Lee <>
Date:   Sat Aug 2 18:17:01 2014 +0200
Origin: upstream
Applied-Upstream: 2.19.12,
Reviewed-by: Urs Liska <>
Reviewed-by: Anthony Fok <>
Last-Update: 2017-01-25
This patch header follows DEP-3:
Index: scm/font.scm
--- scm/font.scm.orig	2014-03-17 17:29:16.000000000 +0200
+++ scm/font.scm	2018-05-15 10:46:23.504364017 +0200
@@ -1,6 +1,6 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
-;;;; Copyright (C) 2004--2012 Han-Wen Nienhuys <>
+;;;; Copyright (C) 2004--2014 Han-Wen Nienhuys <>
 ;;;; LilyPond is free software: you can redistribute it and/or modify
 ;;;; it under the terms of the GNU General Public License as published by
@@ -147,7 +147,7 @@
 ;; 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 name family design-size-alist factor)
+(define-public (add-music-fonts node family name brace design-size-alist factor)
   "Set up music fonts.
@@ -156,12 +156,15 @@ Arguments:
 @var{node} is the font tree to modify.
+@var{family} is the family name of the music font.
 @var{name} is the basename for the music font.
 @file{@var{name}-<designsize>.otf} should be the music font,
-@file{@var{name}-brace.otf} should have piano braces.
-@var{family} is the family name of the music font.
+@var{brace} is the basename for the brace font.
+@file{@var{brace}-brace.otf} should have piano braces.
 @var{design-size-alist} is a list of @code{(rounded . designsize)}.
@@ -199,7 +202,7 @@ used.  This is used to select the proper
      (fetaBraces ,(ly:pt 20.0)
                  #(,(delay (ly:system-font-load
-                            (format #f "~a-brace" name)))))
+                            (format #f "~a-brace" brace)))))
 (define-public (add-pango-fonts node lily-family family factor)
@@ -229,9 +232,40 @@ used.  This is used to select the proper
   (add-node 'italic 'normal)
   (add-node 'italic 'bold))
+; This function allows the user to change the specific fonts, leaving others
+; to the default values. This way, "make-pango-font-tree"'s syntax doesn't
+; have to change from the user's perspective.
+; Usage:
+;   \paper {
+;     #(define fonts
+;       (set-global-fonts
+;        #:music "gonville"  ; (the main notation font)
+;        #:roman "FreeSerif" ; (the main/serif text font)
+;       ))
+;   }
+; Leaving out "#:brace", "#:sans", and "#:typewriter" leave them at
+; "emmentaler", "sans-serif", and "monospace", respectively. All fonts are
+; still accesible through the usual scheme symbols: 'feta, 'roman, 'sans, and
+; 'typewriter.
+(define*-public (set-global-fonts #:key
+  (music "emmentaler")
+  (brace "emmentaler")
+  (roman "Century Schoolbook L")
+  (sans "sans-serif")
+  (typewriter "monospace")
+  (factor 1))
+  (let ((n (make-font-tree-node 'font-encoding 'fetaMusic)))
+    (add-music-fonts n 'feta music brace feta-design-size-mapping factor)
+    (add-pango-fonts n 'roman roman factor)
+    (add-pango-fonts n 'sans sans factor)
+    (add-pango-fonts n 'typewriter typewriter factor)
+    n))
 (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 "emmentaler" 'feta feta-design-size-mapping factor)
+    (add-music-fonts n 'feta "emmentaler" "emmentaler" feta-design-size-mapping 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)
@@ -240,7 +274,9 @@ used.  This is used to select the proper
 (define-public (make-century-schoolbook-tree factor)
    "Century Schoolbook L"
-   "sans-serif" "monospace" factor))
+   "sans-serif"
+   "monospace"
+   factor))
 (define-public all-text-font-encodings