> - Pango picking system fonts, resulting in unpredictable output For this issue, I've written a patch to set the Helvetica substitute and Courier substitute as the default font of provisional. With this patch, pango doesn't choose system fonts for default san-serif font and monospace font.
> - thinking about choosing default fonts for sans-serif and monospace This patch should be rewritten in accordance with the conclusions of the font choosing.
>From 66a27d465cc2cf30929a6acf6e3c61ec3a41b5e1 Mon Sep 17 00:00:00 2001 From: Masamichi Hosoda <truer...@trueroad.jp> Date: Sat, 28 Mar 2015 01:37:58 +0900 Subject: [PATCH] Add sans-serif and monospace fonts Nimbus Sans L (Helvetica substitute) as sans-serif font. Nimbus Mono L (Courier substitute) as monospace font. --- config.make.in | 4 ++ configure.ac | 96 +++++++++++++++++++++++++++++++-- mf/GNUmakefile | 36 ++++++++++++- scm/font.scm | 8 +-- scripts/auxiliar/pfx2ttf-mono.fontforge | 36 +++++++++++++ 5 files changed, 172 insertions(+), 8 deletions(-) create mode 100644 scripts/auxiliar/pfx2ttf-mono.fontforge diff --git a/config.make.in b/config.make.in index 9837fc3..c8b776d 100644 --- a/config.make.in +++ b/config.make.in @@ -91,6 +91,10 @@ vimdir = $(lilypond_datadir)/vim NCSB_SOURCE_FILES = @NCSB_SOURCE_FILES@ NCSB_DIR = @NCSB_DIR@ +HELV_SOURCE_FILES = @HELV_SOURCE_FILES@ +HELV_DIR = @HELV_DIR@ +COUR_SOURCE_FILES = @COUR_SOURCE_FILES@ +COUR_DIR = @COUR_DIR@ ################################################################ ## PROGRAMS diff --git a/configure.ac b/configure.ac index f740237..0c431eb 100644 --- a/configure.ac +++ b/configure.ac @@ -34,10 +34,22 @@ AC_ARG_ENABLE(guile2, AC_ARG_WITH(ncsb-dir, [AS_HELP_STRING([--with-ncsb-dir=DIR], - [location of Century Schoolbook fonts.])], + [location of Century Schoolbook L fonts.])], [NCSB_DIR=$withval], [NCSB_DIR=""]) +AC_ARG_WITH(helv-dir, + [AS_HELP_STRING([--with-helv-dir=DIR], + [location of Nimbus Sans L (Helvetica) fonts.])], + [HELV_DIR=$withval], + [HELV_DIR=""]) + +AC_ARG_WITH(cour-dir, + [AS_HELP_STRING([--with-cour-dir=DIR], + [location of Nimbus Mono L (Courier) fonts.])], + [COUR_DIR=$withval], + [COUR_DIR=""]) + reloc_b=no AC_ARG_ENABLE(relocation, [AS_HELP_STRING([--enable-relocation], @@ -61,7 +73,7 @@ AC_SUBST(LINK_GXX_STATICALLY) STEPMAKE_COMPILE AC_CHECK_PROG(FCLIST, fc-list, fc-list) -AC_MSG_CHECKING([for New Century Schoolbook PFB files]) +AC_MSG_CHECKING([for Century Schoolbook L PFB files]) AC_SUBST(NCSB_SOURCE_FILES) AC_SUBST(NCSB_DIR) if test "$NCSB_DIR" = ""; then @@ -90,7 +102,7 @@ if test "$NCSB_DIR" != "" ; then fi if test "$NCSB_DIR" = "" -o "$MISSING_NCSB_SOURCE_FILES" != "$INCOMPLETE_NCSB_SOURCE_FILES"; then AC_MSG_RESULT(no) - STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts) + STEPMAKE_ADD_ENTRY(REQUIRED,International Century Schoolbook L fonts) if test "$NCSB_DIR" = ""; then if test "$FCLIST" = ""; then STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-ncsb-dir)') @@ -108,6 +120,84 @@ else AC_MSG_RESULT(yes) fi +AC_MSG_CHECKING([for Nimbus Sans L (Helvetica) PFB files]) +AC_SUBST(HELV_SOURCE_FILES) +AC_SUBST(HELV_DIR) +if test "$HELV_DIR" = ""; then + HELV_DIR=$NCSB_DIR +fi +if test "$HELV_DIR" != "" ; then + for f in n019003l.pfb n019004l.pfb n019023l.pfb n019024l.pfb; do + if test ! -f "$HELV_DIR/$f"; then + MISSING_HELV_SOURCE_FILES="$f $MISSING_HELV_SOURCE_FILES" + else + if test "`grep Cyrillic "$HELV_DIR/$f"`" = ""; then + INCOMPLETE_HELV_SOURCE_FILES="$f $INCOMPLETE_HELV_SOURCE_FILES" + else + HELV_SOURCE_FILES="$HELV_DIR/$f $HELV_SOURCE_FILES" + fi + fi + done +fi +if test "$HELV_DIR" = "" -o "$MISSING_HELV_SOURCE_FILES" != "$INCOMPLETE_HELV_SOURCE_FILES"; then + AC_MSG_RESULT(no) + STEPMAKE_ADD_ENTRY(REQUIRED,International Nimbus Sans L fonts) + if test "$HELV_DIR" = ""; then + if test "$FCLIST" = ""; then + STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-helv-dir)') + else + STEPMAKE_ADD_ENTRY(REQUIRED,'(make sure the fc-list utility can see them, or use --with-helv-dir)') + fi + fi + if test "$MISSING_HELV_SOURCE_FILES" != ""; then + STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_HELV_SOURCE_FILES)') + fi + if test "$INCOMPLETE_HELV_SOURCE_FILES" != ""; then + STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_HELV_SOURCE_FILES)') + fi +else + AC_MSG_RESULT(yes) +fi + +AC_MSG_CHECKING([for Nimbus Mono L (Courier) PFB files]) +AC_SUBST(COUR_SOURCE_FILES) +AC_SUBST(COUR_DIR) +if test "$COUR_DIR" = ""; then + COUR_DIR=$NCSB_DIR +fi +if test "$COUR_DIR" != "" ; then + for f in n022003l.pfb n022004l.pfb n022023l.pfb n022024l.pfb; do + if test ! -f "$COUR_DIR/$f"; then + MISSING_COUR_SOURCE_FILES="$f $MISSING_COUR_SOURCE_FILES" + else + if test "`grep Cyrillic "$COUR_DIR/$f"`" = ""; then + INCOMPLETE_COUR_SOURCE_FILES="$f $INCOMPLETE_COUR_SOURCE_FILES" + else + COUR_SOURCE_FILES="$COUR_DIR/$f $COUR_SOURCE_FILES" + fi + fi + done +fi +if test "$COUR_DIR" = "" -o "$MISSING_COUR_SOURCE_FILES" != "$INCOMPLETE_COUR_SOURCE_FILES"; then + AC_MSG_RESULT(no) + STEPMAKE_ADD_ENTRY(REQUIRED,International Nimbus Mono L fonts) + if test "$COUR_DIR" = ""; then + if test "$FCLIST" = ""; then + STEPMAKE_ADD_ENTRY(REQUIRED,'(install the fc-list utility from FontConfig, or use --with-cour-dir)') + else + STEPMAKE_ADD_ENTRY(REQUIRED,'(make sure the fc-list utility can see them, or use --with-cour-dir)') + fi + fi + if test "$MISSING_COUR_SOURCE_FILES" != ""; then + STEPMAKE_ADD_ENTRY(REQUIRED,'(these files are missing: $MISSING_COUR_SOURCE_FILES)') + fi + if test "$INCOMPLETE_COUR_SOURCE_FILES" != ""; then + STEPMAKE_ADD_ENTRY(REQUIRED,'(these files do not contain Cyrillic characters: $INCOMPLETE_COUR_SOURCE_FILES)') + fi +else + AC_MSG_RESULT(yes) +fi + AC_LANG([C++]) STEPMAKE_PYTHON(REQUIRED, 2.4, 3.0) diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 141ba63..646234c 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -40,6 +40,16 @@ NCSB_OTFS = $(addprefix $(outdir)/,CenturySchL-Ital.otf \ CenturySchL-Roma.otf \ CenturySchL-Bold.otf) +HELV_OTFS = $(addprefix $(outdir)/,NimbusSanL-ReguItal.otf \ + NimbusSanL-BoldItal.otf \ + NimbusSanL-Regu.otf \ + NimbusSanL-Bold.otf) + +COUR_OTFS = $(addprefix $(outdir)/,NimbusMonL-ReguObli.otf \ + NimbusMonL-BoldObli.otf \ + NimbusMonL-Regu.otf \ + NimbusMonL-Bold.otf) + LOG_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.log) LISP_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.lisp) ENC_FILES = $(FETA_MF_FILES:%.mf=$(outdir)/%.enc) @@ -74,6 +84,8 @@ $(outdir)/emmentaler-%.genpe: $(buildscript-dir)/gen-emmentaler-scripts ALL_GEN_FILES = $(ENC_FILES) \ $(NCSB_OTFS) \ + $(HELV_OTFS) \ + $(COUR_OTFS) \ $(OTF_FILES) \ $(SVG_FILES) \ $(WOFF_FILES) @@ -87,7 +99,7 @@ INSTALLATION_OUT_SUFFIXES = 1 2 INSTALLATION_OUT_DIR1 = $(local_lilypond_datadir)/fonts/otf INSTALLATION_OUT_FILES1 = $(OTF_FILES) \ - $(NCSB_OTFS) + $(NCSB_OTFS) $(HELV_OTFS) $(COUR_OTFS) INSTALLATION_OUT_DIR2 = $(local_lilypond_datadir)/fonts/svg INSTALLATION_OUT_FILES2 = $(SVG_FILES) $(WOFF_FILES) @@ -172,3 +184,25 @@ $(addprefix $(outdir)/,CenturySchL-Ital.otf \ CenturySchL-Bold.otf \ CenturySchL-BoldItal.otf): $(outdir)/CenturySchL-Roma.otf $(UPDATE_TARGET) + +$(outdir)/NimbusSanL-Regu.otf: $(HELV_SOURCE_FILES) \ + $(auxscript-dir)/pfx2ttf.fontforge + $(foreach i, $(basename $(HELV_SOURCE_FILES)), \ + $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf.fontforge \ + $(i).pfb $(i).afm $(outdir)/ && ) true + +$(addprefix $(outdir)/,NimbusSanL-ReguItal.otf \ + NimbusSanL-Bold.otf \ + NimbusSanL-BoldItal.otf): $(outdir)/NimbusSanL-Regu.otf + $(UPDATE_TARGET) + +$(outdir)/NimbusMonL-Regu.otf: $(COUR_SOURCE_FILES) \ + $(auxscript-dir)/pfx2ttf-mono.fontforge + $(foreach i, $(basename $(COUR_SOURCE_FILES)), \ + $(FONTFORGE) -script $(auxscript-dir)/pfx2ttf-mono.fontforge \ + $(i).pfb $(i).afm $(outdir)/ && ) true + +$(addprefix $(outdir)/,NimbusMonL-ReguObli.otf \ + NimbusMonL-Bold.otf \ + NimbusMonL-BoldObli.otf): $(outdir)/NimbusMonL-Regu.otf + $(UPDATE_TARGET) diff --git a/scm/font.scm b/scm/font.scm index 11c9719..0582a49 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -253,8 +253,8 @@ used. This is used to select the proper design size for the text fonts. (music "emmentaler") (brace "emmentaler") (roman "Century Schoolbook L") - (sans "sans-serif") - (typewriter "monospace") + (sans "Nimbus Sans L") + (typewriter "Nimbus Mono L") (factor 1)) (let ((n (make-font-tree-node 'font-encoding 'fetaMusic))) (add-music-fonts n 'feta music brace feta-design-size-mapping factor) @@ -274,8 +274,8 @@ 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" + "Nimbus Sans L" + "Nimbus Mono L" factor)) (define-public all-text-font-encodings diff --git a/scripts/auxiliar/pfx2ttf-mono.fontforge b/scripts/auxiliar/pfx2ttf-mono.fontforge new file mode 100644 index 0000000..7b80494 --- /dev/null +++ b/scripts/auxiliar/pfx2ttf-mono.fontforge @@ -0,0 +1,36 @@ +Open($1); +MergeKern($2) + + +# The AFM files of `New Century Schoolbook' family as distributed within the +# urw-fonts-1.0.7pre41.tar.bz2 archive contain a bunch of ligatures which +# shouldn't be active by default: +# +# T + M -> trademark +# N + o -> afii61352 +# i + j -> ij +# I + J -> IJ +# +# This font bundle is shipped by Fedora Core 6 and other GNU/Linux +# distributions; we simply remove those ligatures. + +# Monospace font shouldn't have these ligature. +# +# f + i -> fi +# f + l -> fl + +SelectIf("trademark", "trademark", \ + "afii61352", "afii61352", \ + "ij", "ij", \ + "IJ", "IJ", \ + "fi", "fi", \ + "fl", "fl"); +if (Strtol($version) < 20070501) + RemoveATT("Ligature", "*", "*"); +else + RemovePosSub("*"); +endif + +Generate($3 + $fontname + ".otf"); + +# EOF -- 2.1.4
\version "2.19.18" #(set-global-staff-size 50) \markup \roman { Roman } \markup \roman { fi ff fl } \markup \roman \italic { Roman Italic } \markup \roman \italic { fi ff fl } \markup \roman \bold { Roman Bold } \markup \roman \bold { fi ff fl } \markup \roman \italic \bold { Roman Italic Bold } \markup \roman \italic \bold { fi ff fl } \markup \sans { Sans } \markup \sans { fi ff fl } \markup \sans \italic { Sans Italic } \markup \sans \italic { fi ff fl } \markup \sans \bold { Sans Bold } \markup \sans \bold { fi ff fl } \markup \sans \italic \bold { Sans Italic Bold } \markup \sans \italic \bold { fi ff fl } \markup \typewriter { Typewriter } \markup \typewriter { fi ff fl } \markup \typewriter \italic { Typewriter Italic } \markup \typewriter \italic { fi ff fl } \markup \typewriter \bold { Typewriter Bold } \markup \typewriter \bold { fi ff fl } \markup \typewriter \italic \bold { Typewriter Italic Bold } \markup \typewriter \italic \bold { fi ff fl }
_______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel