+2005-02-04 Christian Hitz <chhitz@gmx.net>
+
+ * scm/scm/define-markup-commands.scm (fill-line): rework for better
+ alignment with centered texts
+
+ * scm/stencil.scm (stack-stencils-padding-list): new function, takes a
+ list of paddings
+
2005-02-04 Han-Wen Nienhuys <hanwen@xs4all.nl>
* mf/GNUmakefile ($(outdir)/lilypond.map): add aybabtu to .map file.
MergeFonts("feta-alphabet%(design_size)d.pfa");
MergeKern("feta-alphabet%(design_size)d.tfm");
-LoadTableFromFile("LILF", "%(name)s%(design_size)d.subfonts")
+LoadTableFromFile("LILF", "%(name)s-%(design_size)d.subfonts")
LoadTableFromFile("LILC", "feta%(design_size)d.otf-table")
LoadTableFromFile("LILY", "feta%(design_size)d.otf-gtable")
-Generate("%(name)s%(design_size)d.otf");
-Generate("%(name)s%(design_size)d.cff");
-Generate("%(name)s%(design_size)d.svg");
+Generate("%(name)s-%(design_size)d.otf");
+Generate("%(name)s-%(design_size)d.cff");
+Generate("%(name)s-%(design_size)d.svg");
''' % vars()
- path = os.path.join (outdir, name + '%d' % design_size + '.pe')
+ path = os.path.join (outdir, '%s-%d.pe' % (name, design_size))
open (path, 'w').write (script)
subfonts = ['feta%(design_size)d',
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, '%(name)s-%(design_size)d.subfonts' % vars()), 'w').write (subfonts_str)
- path = os.path.join (outdir, name + '%d' % design_size + '.dep')
+ path = os.path.join (outdir, '%s-%d.dep' % (name, design_size))
- deps = r'''%(name)s%(design_size)d.otf: $(outdir)/feta%(design_size)d.pfa \
+ deps = r'''%(name)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
add_output_format (String format)
{
if (output_format_global != "")
- output_format_global += ", ";
+ output_format_global += ",";
output_format_global += format;
}
out-port)
))
-#(write-cff "emmentaler-26" "emmentaler26.cff")
-#(write-cff "emmentaler-23" "emmentaler23.cff")
-#(write-cff "emmentaler-20" "emmentaler20.cff")
-#(write-cff "emmentaler-18" "emmentaler18.cff")
-#(write-cff "emmentaler-16" "emmentaler16.cff")
-#(write-cff "emmentaler-14" "emmentaler14.cff")
-#(write-cff "emmentaler-13" "emmentaler13.cff")
-#(write-cff "emmentaler-11" "emmentaler11.cff")
+#(write-cff "emmentaler-26" "emmentaler-26.cff")
+#(write-cff "emmentaler-23" "emmentaler-23.cff")
+#(write-cff "emmentaler-20" "emmentaler-20.cff")
+#(write-cff "emmentaler-18" "emmentaler-18.cff")
+#(write-cff "emmentaler-16" "emmentaler-16.cff")
+#(write-cff "emmentaler-14" "emmentaler-14.cff")
+#(write-cff "emmentaler-13" "emmentaler-13.cff")
+#(write-cff "emmentaler-11" "emmentaler-11.cff")
#(write-cff "aybabtu" "aybabtu.cff")
STAFF_SIZES = 11 13 14 16 18 20 23 26
BRACES = a b c d e f g h i
-OTF_FILES = $(addsuffix .otf, $(addprefix $(outdir)/emmentaler, $(STAFF_SIZES)))\
+OTF_FILES = $(addsuffix .otf, $(addprefix $(outdir)/emmentaler-, $(STAFF_SIZES)))\
$(outdir)/aybabtu.otf
-PE_SCRIPTS = $(addsuffix .pe, $(addprefix $(outdir)/emmentaler, $(STAFF_SIZES))) \
- $(addsuffix .dep, $(addprefix $(outdir)/emmentaler, $(STAFF_SIZES)))
+PE_SCRIPTS = $(addsuffix .pe, $(addprefix $(outdir)/emmentaler-, $(STAFF_SIZES))) \
+ $(addsuffix .dep, $(addprefix $(outdir)/emmentaler-, $(STAFF_SIZES)))
OTF_TABLES = $(addsuffix .otf-table, $(addprefix $(outdir)/feta, $(STAFF_SIZES))) \
$(BRACES:%=$(outdir)/feta-braces-%.otf-table)
FETA_FONTS = $(FETA_MF_FILES:.mf=)
export MFINPUTS:=.:$(MFINPUTS)
-default: pfa_warning $(ALL_GEN_FILES) $(outdir)/emmentaler20.otf
+default: pfa_warning $(ALL_GEN_FILES) $(outdir)/emmentaler-20.otf
pfa_warning:
ifneq ($(shell $(MFTRACE) --version | sed 's/ .*//'),mftrace)
$(outdir)/lilypond.map: $(AFM_FILES)
for i in $(FETA_FONTS); do echo $$i $$i '<'$$i.pfa; done > $@
for i in $(STAFF_SIZES); \
- do echo "emmentaler$$i emmentaler-$$i <emmentaler$$i.cff.ps" ; done \
+ do echo "emmentaler-$$i emmentaler-$$i <emmentaler-$$i.cff.ps" ; done \
>> $@
echo "aybabtu aybabtu <aybabtu.cff.ps" >> $@
(if (ly:stencil-empty? stc)
point-stencil
stc)) orig-stencils))
- (text-width (apply +
- (map (lambda (stc)
- (if (ly:stencil-empty? stc)
- 0.0
- (interval-length (ly:stencil-extent stc X))))
- stencils)))
+ (text-widths
+ (map (lambda (stc)
+ (if (ly:stencil-empty? stc)
+ 0.0
+ (interval-length (ly:stencil-extent stc X))))
+ stencils))
+ (text-width (apply + text-widths))
(word-count (length stencils))
(word-space (chain-assoc-get 'word-space props))
(line-width (chain-assoc-get 'linewidth props))
- (fill-space (if (< line-width text-width)
- word-space
- (/ (- line-width text-width)
- (if (= word-count 1) 2 (- word-count 1)))))
+ (fill-space
+ (cond
+ ((= word-count 1)
+ (list
+ (/ (- line-width text-width) 2)
+ (/ (- line-width text-width) 2)))
+ ((= word-count 2)
+ (list
+ (- line-width text-width)))
+ (else
+ (get-fill-space word-count line-width text-widths))))
+ (fill-space-normal
+ (map (lambda (x)
+ (if (< x word-space)
+ word-space
+ x))
+ fill-space))
+
(line-stencils (if (= word-count 1)
(list
point-stencil
(if (null? (remove ly:stencil-empty? orig-stencils))
empty-stencil
- (stack-stencils X RIGHT fill-space line-stencils))))
+ (stack-stencils-padding-list X RIGHT fill-space-normal line-stencils))))
+
+(define (get-fill-space word-count line-width text-widths)
+ "Calculates the necessary paddings between each two adjacent texts.
+ The lengths of all texts are stored in @var{text-widths}.
+ The normal formula for the padding between texts a and b is:
+ padding = line-width/(word-count - 1) - (length(a) + length(b))/2
+ The first and last padding have to be calculated specially using the
+ whole length of the first or last text.
+ Returns a list of paddings.
+"
+ (cond
+ ;; special case first padding
+ ((= (length text-widths) word-count)
+ (cons
+ (- (- (/ line-width (1- word-count)) (car text-widths)) (/ (car (cdr text-widths)) 2))
+ (get-fill-space word-count line-width (cdr text-widths))))
+ ;; special case last padding
+ ((= (length text-widths) 2)
+ (list (- (/ line-width (1- word-count)) (+ (/ (car text-widths) 2) (car (cdr text-widths)))) 0))
+ (else
+ (cons
+ (- (/ line-width (1- word-count)) (/ (+ (car text-widths) (car (cdr text-widths))) 2))
+ (get-fill-space word-count line-width (cdr text-widths))))))
(define (font-markup qualifier value)
(lambda (layout props arg)
(car stils) axis dir (stack-stencils axis dir padding (cdr stils))
padding))))
+(define-public (stack-stencils-padding-list axis dir padding stils)
+ "Stack stencils STILS in direction AXIS, DIR, using a list of PADDING."
+ (cond
+ ((null? stils) empty-stencil)
+ ((null? (cdr stils)) (car stils))
+ (else (ly:stencil-combine-at-edge
+ (car stils) axis dir (stack-stencils-padding-list axis dir (cdr padding) (cdr stils))
+ (car padding)))))
+
(define-public (stack-lines dir padding baseline stils)
"Stack vertically with a baseline-skip."
(if (null? stils)