otf: use CFF bbox for all glyphs
[neatmkfn.git] / gen.sh
blobf90d93d7c136b9a75baa813eaef8674136be678a
1 #!/bin/sh
2 # Generate a neatroff output device
4 FP="/path/to/gs/fonts" # ghostscript fonts directory; should be in GS_FONTPATH
5 TP="/path/to/font/devutf" # output device directory
6 RES="720" # device resolution
7 SCR="-Slatn,arab" # scripts to include
8 LIGIGN="\(ct\|st\|sp\|Rp\)" # pattern of ligatures to ignore
10 test -n "$1" && FP="$1"
11 test -n "$2" && TP="$2"
13 # creating DESC
14 mkdir -p $TP
15 echo "fonts 10 R I B BI CR HR HI HB S1 S" >$TP/DESC
16 echo "res $RES" >>$TP/DESC
17 echo "hor 1" >>$TP/DESC
18 echo "ver 1" >>$TP/DESC
19 echo "unitwidth 10" >>$TP/DESC
21 # afmconv troff_name font_path extra_mktrfn_options
22 afmconv()
24 echo $1
25 cat $2 | ./mkfn -a -b -r$RES -t "$1" $3 $4 $5 $6 $7 | \
26 sed "/^ligatures /s/ $LIGIGN//g" >$TP/$1
29 # ttfconv troff_name font_path extra_mktrfn_options
30 ttfconv()
32 echo $1
33 cat $2 | ./mkfn -b -l -o -r$RES $SCR -t $1 $3 $4 $5 $6 $7 | \
34 sed "/^ligatures /s/ $LIGIGN//g" >$TP/$1
37 # otfconv troff_name font_path extra_mktrfn_options
38 otfconv()
40 TTF="/tmp/.neatmkfn.ttf"
41 # convert the OTF file to TTF using fontforge
42 fontforge -lang=ff -c "Open(\"$2\"); Generate(\"$TTF\");" >/dev/null 2>&1
43 ttfconv $1 $TTF $3 $4 $5 $6 $7
44 rm $TTF
47 # stdfont troff_name gs_font urw_font extra_mktrfn_options
48 stdfont()
50 if test -f $2
51 then
52 afmconv $1 "$2" $4 $5 $6 $7 $8 $9
53 else
54 afmconv $1 "$3" $4 $5 $6 $7 $8 $9
58 # The standard fonts; ghostscriptfonts or urw-core35
59 stdfont R $FP/n021003l.afm $FP/NimbusRoman-Regular.afm -pTimes-Roman
60 stdfont I $FP/n021023l.afm $FP/NimbusRoman-Italic.afm -pTimes-Italic
61 stdfont B $FP/n021004l.afm $FP/NimbusRoman-Bold.afm -pTimes-Bold
62 stdfont BI $FP/n021024l.afm $FP/NimbusRoman-BoldItalic.afm -pTimes-BoldItalic
63 stdfont S $FP/s050000l.afm $FP/StandardSymbolsPS.afm -pSymbol -s
64 stdfont S1 $FP/n021003l.afm $FP/NimbusRoman-Regular.afm -pTimes-Roman -s
65 stdfont AR $FP/a010013l.afm $FP/URWGothic-Book.afm -pAvantGarde-Book
66 stdfont AI $FP/a010033l.afm $FP/URWGothic-BookOblique.afm -pAvantGarde-BookOblique
67 stdfont AB $FP/a010015l.afm $FP/URWGothic-Demi.afm -pAvantGarde-Demi
68 stdfont AX $FP/a010035l.afm $FP/URWGothic-DemiOblique.afm -pAvantGarde-DemiOblique
69 stdfont HR $FP/n019003l.afm $FP/NimbusSans-Regular.afm -pHelvetica
70 stdfont HI $FP/n019023l.afm $FP/NimbusSans-Oblique.afm -pHelvetica-Oblique
71 stdfont HB $FP/n019004l.afm $FP/NimbusSans-Bold.afm -pHelvetica-Bold
72 stdfont HX $FP/n019024l.afm $FP/NimbusSans-BoldOblique.afm -pHelvetica-BoldOblique
73 stdfont Hr $FP/n019043l.afm $FP/NimbusSansNarrow-Regular.afm -pHelvetica-Narrow
74 stdfont Hi $FP/n019063l.afm $FP/NimbusSansNarrow-Oblique.afm -pHelvetica-Narrow-Oblique
75 stdfont Hb $FP/n019044l.afm $FP/NimbusSansNarrow-Bold.afm -pHelvetica-Narrow-Bold
76 stdfont Hx $FP/n019024l.afm $FP/NimbusSansNarrow-BdOblique.afm -pHelvetica-Narrow-BoldOblique
77 stdfont KR $FP/b018012l.afm $FP/URWBookman-Light.afm -pBookman-Light
78 stdfont KI $FP/b018032l.afm $FP/URWBookman-LightItalic.afm -pBookman-LightItalic
79 stdfont KB $FP/b018015l.afm $FP/URWBookman-Demi.afm -pBookman-Demi
80 stdfont KX $FP/b018035l.afm $FP/URWBookman-DemiItalic.afm -pBookman-DemiItalic
81 stdfont NR $FP/c059013l.afm $FP/C059-Roman.afm -pNewCenturySchlbk-Roman
82 stdfont NI $FP/c059033l.afm $FP/C059-Italic.afm -pNewCenturySchlbk-Italic
83 stdfont NB $FP/c059016l.afm $FP/C059-Bold.afm -pNewCenturySchlbk-Bold
84 stdfont NX $FP/c059036l.afm $FP/C059-BdIta.afm -pNewCenturySchlbk-BoldItalic
85 stdfont PA $FP/p052003l.afm $FP/P052-Roman.afm -pPalatino-Roman
86 stdfont PR $FP/p052003l.afm $FP/P052-Roman.afm -pPalatino-Roman
87 stdfont PI $FP/p052023l.afm $FP/P052-Italic.afm -pPalatino-Italic
88 stdfont PB $FP/p052004l.afm $FP/P052-Bold.afm -pPalatino-Bold
89 stdfont PX $FP/p052024l.afm $FP/P052-BoldItalic.afm -pPalatino-BoldItalic
90 stdfont CR $FP/n022003l.afm $FP/NimbusMonoPS-Regular.afm -pCourier
91 stdfont CI $FP/n022023l.afm $FP/NimbusMonoPS-Italic.afm -pCourier-Oblique
92 stdfont CB $FP/n022004l.afm $FP/NimbusMonoPS-Bold.afm -pCourier-Bold
93 stdfont CX $FP/n022024l.afm $FP/NimbusMonoPS-BoldItalic.afm -pCourier-BoldOblique
94 stdfont ZI $FP/z003034l.afm $FP/Z003-MediumItalic.afm -pZapfChancery-MediumItalic
96 # The first argument of afmconv, ttfconv, and otfconv is the troff
97 # name of the font and their second argument is its path. Any other
98 # argument is passed to mkfn directly. The postscript names of the
99 # fonts are inferred from the fonts themselves To change that, you
100 # can specify their names via the -p argument of *conv functions.
102 find $FP/ -name '*.afm' | while read FN
104 afmconv `basename $FN .afm` $FN
105 done
107 find $FP/ -name '*.ttf' | while read FN
109 ttfconv `basename $FN .ttf` $FN
110 done
112 find $FP/ -name '*.otf' | while read FN
114 otfconv `basename $FN .otf` $FN
115 done