lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Allow changing of notation fonts (issue 115590043 by address@hidden)


From: Abraham Lee
Subject: Re: Allow changing of notation fonts (issue 115590043 by address@hidden)
Date: Sat, 02 Aug 2014 17:55:37 -0006

On Sat, Aug 2, 2014 at 10:40 AM, address@hidden wrote:
Reviewers: ,

Message:
This is the current state of Abraham's approach to make music fonts
switchable. The patch is incomplete in a few senses, but Abraham wants
an official review for that current state:

- there's no documentation
  -> We'll take care of that once the user interface
     has been fixed
- there's no convert-ly rule
  -> ditto, this should pose no problems.
- the patch will somehow have to be integrated with
  Alexander's work on the text font selection interface,
  but Alexander considers it not too problematic.

See
http://lists.gnu.org/archive/html/lilypond-user/2014-08/msg00016.html

Description:
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.

Please review this at https://codereview.appspot.com/115590043/

Affected files (+42, -6 lines):
  M scm/font.scm


Index: scm/font.scm
diff --git a/scm/font.scm b/scm/font.scm
index 867612ae11529c3426a795498a6dc5168481f427..e177a055edb31ca56bcc4030718b2b759da75c4a 100644
--- a/scm/font.scm
+++ b/scm/font.scm
@@ -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.

 Arguments:
@@ -156,12 +156,15 @@ Arguments:
 @var{node} is the font tree to modify.

 @item
address@hidden is the family name of the music font.
+
address@hidden
 @var{name} is the basename for the music font.
 @address@hidden<designsize>.otf} should be the music font,
address@hidden@var{name}-brace.otf} should have piano braces.

 @item
address@hidden is the family name of the music font.
address@hidden is the basename for the brace font.
address@hidden@var{brace}-brace.otf} should have piano braces.

 @item
 @var{design-size-alist} is a list of @code{(rounded . designsize)}.
@@ -199,7 +202,7 @@ used. This is used to select the proper design size for the text fonts.
                        )))
      (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 design size for the text fonts.
   (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 design size for the text fonts.
 (define-public (make-century-schoolbook-tree factor)
   (make-pango-font-tree
    "Century Schoolbook L"
-   "sans-serif" "monospace" factor))
+   "sans-serif"
+   "monospace"
+   factor))

 (define-public all-text-font-encodings
   '(latin1))



_______________________________________________
lilypond-devel mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/lilypond-devel

Urs,

Thank you for getting the ball rolling on this. A couple of notes:

1. The behavior of make-pango-font-tree doesn't actually change, nor does it allow arguments to be optional (only the new function allows for optional, keyword arguments). However, the internals are changed to accommodate the new call syntax to add-music-fonts by putting in a value for both the music and brace fonts.

2. In a user's file, their syntax doesn't change at all, so a convert-ly rule shouldn't be required.

3. The code for make-century-schoolbook-tree need not be any different than it currently stands (sorry, I forgot to revert that).

4. And, of course, I'll handle the documentation when we finalize the code points.

Again, thank you for getting this in front of the appropriate eyes!

-Abraham


reply via email to

[Prev in Thread] Current Thread [Next in Thread]