#!/bin/bash set -e set -o pipefail rm -f rules/foundries rm -f rules/*.rules rules/foundries.new chars () { for c in $rest; do case " $c " in " "?" ") ord=`perl -e 'print ord($ARGV[0]),"\n" or die $!' "$c"` ;; " "d?*" ") ord="${c#d}" c=`perl -e 'printf "%c", $ARGV[0]' "$ord"` ;; *) echo >&2 "??? $c" exit 1 ;; esac ./printrule >&3 "$bad" "$good" $height \ "^ENCODING $ord$" $partial "$c" done } seenrules=/ seenfoundries=/ while read keyword rest; do case "$keyword" in '#'|'') continue ;; pcf) pcf=$rest for f in good bad; do out=$f/$pcf.bdf zcat $f/$pcf.pcf.gz | pcf2bdf >$out eval "$f=\$out" done ;; rules) newfoundry=$rest eval `perl -ne ' next unless s/^BBX\s+//; s/\s+$//; s/\s+/,/g; s/[-+]?\b\d+\b/ sprintf "%d", $& /ge; m/^\d+\,(\d+)\b/ or die; print "key=$_; height=$1\n" or die $!; exit; ' <$good` oldfoundry=`perl -ne ' next unless s/^FOUNDRY\s+\"?//; s/\"?\s+$//; print or die $!; exit; ' <$good` case "$seenfoundries" in */"$oldfoundry,$newfoundry"/*) ;; */"$oldfoundry,"*) echo >&2 "inconsistent foundry mapping" exit 1 ;; *) seenfoundries=$seenfoundries$oldfoundry,$newfoundry/ printf >>rules/foundries.new \ "%s %s\n" "$oldfoundry" "$newfoundry" ;; esac case "$seenrules" in */"$newfoundry,$key"/*) exec 3>>rules/$newfoundry,$key.rules ;; *) exec 3>rules/$newfoundry,$key.rules echo >&3 '# -*- perl -*-' echo >&3 '# autogenerated by mkrules' echo >&3 'sub {' seenrules=$seenrules$newfoundry,$key/ ;; esac echo >&3 " # $pcf" ;; endrules) exec 3&3 " $rest" ;; *) echo >&2 "??? $keyword" exit 1 ;; esac done while :; do case "$seenrules" in /) break ;; esac seenrules=${seenrules#/} rulefile=${seenrules%%/*} seenrules=/${seenrules#*/} echo "}" >>rules/$rulefile.rules done mv rules/foundries.new rules/foundries