#!/usr/bin/env tclsh
# make TeX files for a set of TrueType dingbat faces
# 2001 Jul 13

# Released under the terms of the FSF's General Public License

# fixme: i should pull the encodings first, then ttf2afm can
#  embed the encoding

# fixme: sometimes assumes the TTFs are in the current dir.

# fixme: see if Ghostscript can see other encodings available, if so
#  pick the one with best coverage and write dvips map to suit

# fixme: some decorative fonts may have ligatures, accents, etc.
#  which may need to be recoded to suit TeX

if {[llength $argv] < 2} {
	puts stderr "Usage: $argv0   ..."
	puts { for the collection}
	puts { TrueType files to include}
	exit 1
}

set name [lindex $argv 0]
set argv [lrange $argv 1 end]
set dir decor/$name

file mkdir texmf/dvips/config
file mkdir texmf/fonts/afm/$dir
file mkdir texmf/fonts/tfm/$dir
file mkdir texmf/fonts/ttf/$dir


# pass 1: generate unencoded metrics and mappings
set psm [open $name.ps w]
set dpm [open texmf/dvips/config/$name.map w]
foreach i $argv {
	set f [file root $i]
	puts -nonewline "$f  "
	flush stdout

	exec ttf2afm -a $f.ttf >$f.uam

	set mf [open $f.uam r]
	while {-1 < [gets $mf line]} {
		if {1 == [scan $line {FontName %s} facename]} {
			puts $psm "($facename) (/usr/pkg/share/texmf/fonts/ttf/$dir/$f.ttf) ;"
			puts $dpm "$f $facename \"\""
			break
		}
	}
	close $mf
}
close $psm
close $dpm


# pass 2: use Ghostscript to get the default encodings
puts "\nGetting encodings"
set gs [open [list | gs -dBATCH -dNOPAUSE -q -sDEVICE=nullpage - >$name.gso] w]
puts $gs {
/doit {
	.tryloadfont {
		exch == % print name
		% begin Encoding == end
		/Encoding get ==
	} {
		pop % discard name
	} ifelse
} def}
foreach i $argv {
	puts -nonewline "$i  "
	flush stdout
	puts $gs "(./$i) doit"
	flush $gs
}
close $gs


# pass 3: add encodings to Adobe metrics,
#  generate TeX metrics, reorganise files
puts "\nConverting metrics"
set gs [open $name.gso r]
while {-1<[gets $gs line]} {
	# sometimes gs writes a little grumble
	if {![string match {(./*)} $line]} continue

	set f [string range $line 3 end-5]
	puts -nonewline "$f  "
	flush stdout

	set n -1
	foreach s [string range [gets $gs] 1 end-1] {
		set codeof([string range $s 1 end]) [incr n]
	}
	set codeof(.notdef) -1
	set ufm [open $f.uam r]
	set afm [open $f.afm w]
	while {-1<[gets $ufm line]} {
		if {7 == [scan $line {C %d ; WX %d ; N %s ; B %d %d %d %d } code width glyph ba bb bc bd]
		 && ![catch {set codeof($glyph)} n]} {
			set line "C $n ; WX $width ; N $glyph ; B $ba $bb $bc $bd ;"
		}
		puts $afm $line
	}
	close $afm
	close $ufm
	unset codeof

	exec afm2tfm $f

	file delete $f.uam
	foreach i {afm tfm ttf} {
		file rename -force $f.$i texmf/fonts/$i/$dir
	}
}
close $gs
file delete $name.gso


puts {}

puts "\nNow:"
puts "* transfer the texmf tree into the TeX space,"
puts "* run texhash,"
puts "* add `$name.map' on its own line to extra_modules in texmf/dvips/config/updmap,"
puts "* run texmf/dvips/config/updmap,"
puts "* append $name.ps to ghostscript/6.01vflib/lib/Fontmap.GS."

#eof

    Source: geocities.com/kwantus