From: Han-Wen Nienhuys Date: Sun, 6 Mar 2005 15:43:02 +0000 (+0000) Subject: * buildscripts/gen-emmentaler-scripts.py (i): generate X-Git-Tag: release/2.5.14~18 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=b2af7c63b35227778a5368e40d0e72ff6c769dbf;p=lilypond.git * buildscripts/gen-emmentaler-scripts.py (i): generate emmentaler-X.fontname as well. * buildscripts/ps-embed-cff.py: new script * scm/lily-library.scm: remove ps-embed-cff. * scm/framework-ps.scm (write-preamble): don't use kpathsea for font loading. * scm/font.scm (add-music-fonts): load dynamics/numbers through fontconfig as well. * lily/font-config.cc (init_fontconfig): add cff/ too. * mf/GNUmakefile: generate .commonff to not confuse fontconfig. * ly/generate-embedded-cff.ly: capitalize. * lily/pango-select.cc (select_pango_font): use ::find_pango_font, so as to register the pango font. * lily/font-config.cc (init_fontconfig): add prefix/{otf,type1,mf/out} to fontconfig path. * lily/main.cc: only look at one prefix directory, LILYPONDPREFIX overrides all. * scm/framework-ps.scm (dump-page): use output-units for landscape. * buildscripts/gen-emmentaler-scripts.py (i): lower case file name. --- diff --git a/ChangeLog b/ChangeLog index e5283499d3..d93628d5b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,20 @@ 2005-03-06 Han-Wen Nienhuys + * buildscripts/gen-emmentaler-scripts.py (i): generate + emmentaler-X.fontname as well. + + * buildscripts/ps-embed-cff.py: new script + + * scm/lily-library.scm: remove ps-embed-cff. + + * scm/framework-ps.scm (write-preamble): don't use kpathsea for + font loading. + + * scm/font.scm (add-music-fonts): load dynamics/numbers through + fontconfig as well. + + * lily/font-config.cc (init_fontconfig): add cff/ too. + * mf/GNUmakefile: generate .commonff to not confuse fontconfig. * ly/generate-embedded-cff.ly: capitalize. diff --git a/buildscripts/gen-emmentaler-scripts.py b/buildscripts/gen-emmentaler-scripts.py index bf2d4b4e94..34b306c3d9 100644 --- a/buildscripts/gen-emmentaler-scripts.py +++ b/buildscripts/gen-emmentaler-scripts.py @@ -61,7 +61,7 @@ endloop MergeFonts("feta-alphabet%(design_size)d.pfa"); MergeKern("feta-alphabet%(design_size)d.tfm"); -LoadTableFromFile("LILF", "%(name)s-%(design_size)d.subfonts") +LoadTableFromFile("LILF", "%(filename)s-%(design_size)d.subfonts") LoadTableFromFile("LILC", "feta%(design_size)d.otf-table") LoadTableFromFile("LILY", "feta%(design_size)d.otf-gtable") @@ -70,7 +70,8 @@ Generate("%(filename)s-%(design_size)d.cff"); Generate("%(filename)s-%(design_size)d.svg"); ''' % vars() - path = os.path.join (outdir, '%s-%d.pe' % (filename, design_size)) + basename = '%s-%d' % (filename, design_size) + path = os.path.join (outdir, basename + '.pe') open (path, 'w').write (script) subfonts = ['feta%(design_size)d', @@ -83,13 +84,15 @@ Generate("%(filename)s-%(design_size)d.svg"); subfonts_str = string.join (ns) - open (os.path.join (outdir, '%(name)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str) + open (os.path.join (outdir, '%(filename)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str) - path = os.path.join (outdir, '%s-%d.dep' % (name, design_size)) + path = os.path.join (outdir, '%s-%d.dep' % (filename, design_size)) - deps = r'''%(name)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfa \ + deps = r'''%(filename)s-%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfa \ $(outdir)/parmesan%(design_size)d.pfa \ $(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-table \ $(outdir)/feta-alphabet%(design_size)d.pfa feta%(design_size)d.otf-gtable ''' % vars() open (path, 'w').write (deps) + + open (os.path.join (outdir, basename + '.fontname'), 'w').write ("%s-%d" % (name, design_size)) diff --git a/buildscripts/ps-embed-cff.py b/buildscripts/ps-embed-cff.py new file mode 100644 index 0000000000..8eabaede5b --- /dev/null +++ b/buildscripts/ps-embed-cff.py @@ -0,0 +1,35 @@ +#!@PYTHON@ +import sys + +file = sys.argv[1] +font_set_name = sys.argv[2] +output = sys.argv[3] +body = open (file).read() +body_length = len (body) +version = '0' +binary_data = "/%(font_set_name)s %(body_length)d StartData " % vars() \ + + body +binary_length = len (binary_data) + +header = r"""%%%%BeginResource: font %(font_set_name)s +%%!PS-Adobe-3.0 Resource-FontSet +%%%%DocumentNeededResources: ProcSet (FontSetInit) +%%%%Title: (FontSet/%(font_set_name)s) +%%%%Version: %(version)s +%%%%EndComments +%%%%IncludeResource: ProcSet (FontSetInit) +%%%%BeginResource: FontSet (%(font_set_name)s) +/FontSetInit /ProcSet findresource begin +%%%%BeginData: %(binary_length)d Binary Bytes +""" % vars() + + +footer = """\n%%%%EndData +%%%%EndResource +%%%%EOF +%%%%EndResource\n""" % vars() + +fo = open (output,'w') +fo.write (header) +fo.write (binary_data) +fo.write (footer) diff --git a/lily/font-config.cc b/lily/font-config.cc index 48b4fba100..4871c58303 100644 --- a/lily/font-config.cc +++ b/lily/font-config.cc @@ -32,6 +32,7 @@ init_fontconfig () dirs.push (prefix_directory + "/otf/"); dirs.push (prefix_directory + "/mf/out/"); dirs.push (prefix_directory + "/type1/"); + dirs.push (prefix_directory + "/cff/"); for (int i = 0; i < dirs.size(); i++) { diff --git a/lily/pango-font.cc b/lily/pango-font.cc index 92fe8aea50..5770a7e14f 100644 --- a/lily/pango-font.cc +++ b/lily/pango-font.cc @@ -130,21 +130,30 @@ Pango_font::pango_item_string_stencil (PangoItem *item, String str, Real dx) con FcPatternGetString(fcpat, FC_FILE, 0, (FcChar8 **) &filename); char const *ps_name_str0 = FT_Get_Postscript_Name (ftface); + if (!ps_name_str0) + warning (_f ("No PS font name for font `%s'", filename)); - /* - UGH: kludge a PS name for OTF fonts. - */ String ps_name; if (!ps_name_str0 && filename - && String (filename).index (".otf") >= 0) + && (String (filename).index (".otf") >= 0 + || String (filename).index (".cff") >= 0)) { + + /* + UGH: kludge a PS name for OTF/CFF fonts. + + */ + String name = filename; - name = name.left_string (name.length () - name.index (".otf")); + int idx = String (filename).index (".otf") + >? String (filename).index (".cff"); + + name = name.left_string (idx); int slash_idx = name.index_last ('/'); // UGh. What's happens on windows? if (slash_idx >= 0) - name = name.right_string (name.length() - slash_idx); + name = name.right_string (name.length() - slash_idx - 1); String initial = name.cut_string (0,1); initial.to_upper(); diff --git a/ly/generate-embedded-cff.ly b/ly/generate-embedded-cff.ly deleted file mode 100644 index 1d7882ad5f..0000000000 --- a/ly/generate-embedded-cff.ly +++ /dev/null @@ -1,22 +0,0 @@ -\version "2.4.0" -#(define (write-cff name filename) - (let* - ((body (ly:gulp-file filename)) - (outname (format "~a.ps" filename)) - (out-port (open-output-file outname)) - ) - - - (display (ps-embed-cff body name 0) - out-port) - )) - -#(write-cff "Emmentaler-26" "emmentaler-26.commonff") -#(write-cff "Emmentaler-23" "emmentaler-23.commonff") -#(write-cff "Emmentaler-20" "emmentaler-20.commonff") -#(write-cff "Emmentaler-18" "emmentaler-18.commonff") -#(write-cff "Emmentaler-16" "emmentaler-16.commonff") -#(write-cff "Emmentaler-14" "emmentaler-14.commonff") -#(write-cff "Emmentaler-13" "emmentaler-13.commonff") -#(write-cff "Emmentaler-11" "emmentaler-11.commonff") -#(write-cff "aybabtu" "aybabtu.commonff") diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 8082c40058..15a82bbed6 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -26,7 +26,7 @@ OTF_TABLES = $(addsuffix .otf-table, $(addprefix $(outdir)/feta, $(STAFF_SIZES)) $(BRACES:%=$(outdir)/feta-braces-%.otf-table) FETA_FONTS = $(FETA_MF_FILES:.mf=) SVG_FILES = $(OTF_FILES:%.otf=%.svg) $(ALL_FONTS:%=$(outdir)/%.svg) -COMMONFF_FILES = $(OTF_FILES:%.otf=%.commonff) +CFF_FILES = $(OTF_FILES:%.otf=%.cff) CFF_PS_FILES = $(OTF_FILES:%.otf=%.cff.ps) @@ -59,22 +59,22 @@ foe: echo $(TEXMF) kpsewhich exbase.mf -$(outdir)/%.commonff $(outdir)/%.otf $(outdir)/%.svg: $(outdir)/%.pe - (cd $(outdir) && fontforge -script $(notdir $<) \ - && mv $(notdir $(basename $<)).cff $(notdir $(basename $<)).commonff) +$(outdir)/%.cff.ps $(outdir)/%.cff $(outdir)/%.otf $(outdir)/%.svg: $(outdir)/%.pe + (cd $(outdir) && fontforge -script $(notdir $<)) + $(PYTHON) $(buildscript-dir)/ps-embed-cff.py $(basename $<).cff `cat $(basename $<).fontname` $(basename $<).cff.ps -$(CFF_PS_FILES): $(COMMONFF_FILES) - cd $(outdir) && $(builddir)/lily/$(outconfbase)/lilypond --verbose $(abs-srcdir)/ly/generate-embedded-cff $(outdir)/%.otf-table: $(outdir)/%.lisp $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) cat $< \ $(if $(findstring brace,$<),,$(subst feta,parmesan,$<)) \ $(if $(findstring brace,$<),,$(subst feta,feta-alphabet,$<)) > $@ -$(outdir)/aybabtu.otf: $(outdir)/aybabtu.subfonts $(outdir)/aybabtu.otf-table $(outdir)/aybabtu.otf-gtable +$(outdir)/aybabtu.otf: $(outdir)/aybabtu.subfonts $(outdir)/aybabtu.fontname $(outdir)/aybabtu.otf-table $(outdir)/aybabtu.otf-gtable +$(outdir)/aybabtu.fontname: + echo -n 'aybabtu' > $@ $(outdir)/aybabtu.subfonts: - echo $(subst .mf,,$(wildcard feta-braces-[a-z].mf)) > $@ + echo $(subst .mf,,$(wildcard feta-braces-[a-z].mf)) > $@ $(PE_SCRIPTS): $(buildscript-dir)/gen-emmentaler-scripts.py $(PYTHON) $< --dir=$(outdir) @@ -85,13 +85,13 @@ PFA_FILES = $(ALL_FONTS:%=$(outdir)/%.pfa) # Make tfm files first, log files last, # so that normally log files aren't made twice -ALL_GEN_FILES= $(TFM_FILES) $(TEXTABLES) $(TFM_FILES) $(LOG_FILES) $(ENC_FILES) $(LISP_FILES) $(FETA_LIST_FILES) $(OTF_TABLES) $(PFA_FILES) $(outdir)/lilypond.map $(OTF_FILES) $(SVG_FILES) $(CFF_PS_FILES) +ALL_GEN_FILES= $(TFM_FILES) $(TEXTABLES) $(TFM_FILES) $(LOG_FILES) $(ENC_FILES) $(LISP_FILES) $(FETA_LIST_FILES) $(OTF_TABLES) $(PFA_FILES) $(outdir)/lilypond.map $(OTF_FILES) $(SVG_FILES) $(CFF_PS_FILES) $(CFF_FILES) #PRE_INSTALL=$(MAKE) "$(ALL_GEN_FILES)" INSTALLATION_DIR=$(local_lilypond_datadir)/fonts/source INSTALLATION_FILES=$(MF_FILES) $(AF_FILES) -INSTALLATION_OUT_SUFFIXES=1 2 3 4 5 6 7 9 +INSTALLATION_OUT_SUFFIXES=1 2 3 4 5 6 7 8 9 INSTALLATION_OUT_DIR1=$(local_lilypond_datadir)/tex INSTALLATION_OUT_FILES1=$(TEXTABLES) @@ -112,6 +112,9 @@ INSTALLATION_OUT_FILES5=$(PFA_FILES) INSTALLATION_OUT_DIR6=$(local_lilypond_datadir)/fonts/map INSTALLATION_OUT_FILES6=$(outdir)/lilypond.map +INSTALLATION_OUT_DIR7=$(local_lilypond_datadir)/cff/ +INSTALLATION_OUT_FILES7=$(CFF_FILES) + INSTALLATION_OUT_DIR7=$(local_lilypond_datadir)/ps/ INSTALLATION_OUT_FILES7=$(ENC_FILES) diff --git a/scm/font.scm b/scm/font.scm index 9c083fac87..bede4008e2 100644 --- a/scm/font.scm +++ b/scm/font.scm @@ -137,6 +137,21 @@ ; Each size family is a vector of fonts, loaded with a delay. ; The vector should be sorted according to ascending design size. ; +(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))))) (define-public (add-music-fonts node factor) (for-each @@ -145,28 +160,8 @@ (list (cons 'font-encoding (car x))) (cons (* factor (cadr x)) (caddr x)))) - `((fetaNumber ,(ly:pt 20) - #(,(delay (ly:font-load "feta-alphabet11")) - ,(delay (ly:font-load "feta-alphabet13")) - ,(delay (ly:font-load "feta-alphabet14")) - ,(delay (ly:font-load "feta-alphabet16")) - ,(delay (ly:font-load "feta-alphabet18")) - ,(delay (ly:font-load "feta-alphabet20")) - ,(delay (ly:font-load "feta-alphabet23")) - ,(delay (ly:font-load "feta-alphabet26")))) - (fetaTest ,(ly:pt 20) - #((cons (ly:pt 20) - "Emmentaler 20 7.02799479"))) - - (fetaDynamic ,(ly:pt 20.0) #(,(delay (ly:font-load "feta-alphabet11")) - ,(delay (ly:font-load "feta-alphabet13")) - ,(delay (ly:font-load "feta-alphabet14")) - ,(delay (ly:font-load "feta-alphabet16")) - ,(delay (ly:font-load "feta-alphabet18")) - ,(delay (ly:font-load "feta-alphabet20")) - ,(delay (ly:font-load "feta-alphabet23")) - ,(delay (ly:font-load "feta-alphabet26")))) - + `((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:font-load "emmentaler-11")) ,(delay (ly:font-load "emmentaler-13")) diff --git a/scm/framework-ps.scm b/scm/framework-ps.scm index 63d63488b2..3c954609e8 100644 --- a/scm/framework-ps.scm +++ b/scm/framework-ps.scm @@ -224,26 +224,21 @@ (lambda (x) (let* ((bare-file-name (ly:find-file x)) (cffname (string-append x ".cff.ps")) - (aname (string-append x ".pfa")) - (bname (string-append x ".pfb")) (cff-file-name (ly:find-file cffname)) - (a-file-name (ly:kpathsea-find-file aname)) - (b-file-name (ly:kpathsea-find-file bname)) ) - (display x )(newline) (cond + ((and bare-file-name (string-match "\\.pfa" bare-file-name)) + (cached-file-contents bare-file-name)) ((and bare-file-name (string-match "\\.pfb" bare-file-name)) (ly:pfb->pfa bare-file-name)) ((and bare-file-name - (string-match "\\.otf" bare-file-name)) + (string-match "\\.(otf|cff)" bare-file-name)) - (cached-file-contents (string-regexp-substitute "otf" "cff.ps" bare-file-name))) + (cached-file-contents (string-regexp-substitute "(otf|cff)" "cff.ps" bare-file-name))) ((and bare-file-name (string-match "\\.ttf" bare-file-name)) (ly:ttf->pfa bare-file-name)) (bare-file-name (cached-file-contents bare-file-name)) (cff-file-name (cached-file-contents cff-file-name)) - (a-file-name (ps-embed-pfa (cached-file-contents a-file-name) x 0)) - (b-file-name (ps-embed-pfa (ly:pfb->pfa b-file-name) x 0)) (else (ly:warn "cannot find CFF/PFA/PFB font ~S" x) "")))) diff --git a/scm/lily-library.scm b/scm/lily-library.scm index b7dfacfd43..277d0f7a7c 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -336,39 +336,6 @@ possibly turned off." (debugf "design:~S\n" designsize) scaling)) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(define-public (ps-embed-cff body font-set-name version) - (let* ((binary-data - (string-append - (format "/~a ~s StartData " font-set-name (string-length body)) - body)) - - (header - (format - "%%BeginResource: font ~a -%!PS-Adobe-3.0 Resource-FontSet -%%DocumentNeededResources: ProcSet (FontSetInit) -%%Title: (FontSet/~a) -%%Version: ~s -%%EndComments -%%IncludeResource: ProcSet (FontSetInit) -%%BeginResource: FontSet (~a) -/FontSetInit /ProcSet findresource begin -%%BeginData: ~s Binary Bytes -" - font-set-name font-set-name version font-set-name - (string-length binary-data))) - (footer "\n%%EndData -%%EndResource -%%EOF -%%EndResource\n")) - - (string-append - header - binary-data - footer))) - (define-public (version-not-seen-message) (ly:warn (format #f