rule generation machinery
[xfonts-traditional] / mkrules
diff --git a/mkrules b/mkrules
new file mode 100755 (executable)
index 0000000..734e2a2
--- /dev/null
+++ b/mkrules
@@ -0,0 +1,68 @@
+#!/bin/bash
+set -e
+set -o pipefail
+rm -f rules/foundries
+rm -f rules/*.rules rules/foundries.new
+
+chars () {
+       for c in $rest; do
+               ord=`perl -e 'print ord($ARGV[0]),"\n" or die $!' "$c"`
+               ./printrule >&3 "$bad" "$good" $height \
+                       "^ENCODING $ord$" $partial "$c"
+       done
+}
+
+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`
+               printf "%s %s" "$oldfoundry" "$newfoundry" >>rules/foundries.new
+               exec 3>rules/$newfoundry,$key.rules
+               echo >&3 '# -*- perl -*-'
+               echo >&3 '# autogenerated by mkrules'
+               echo >&3 'sub {'
+               ;;
+       endrules)
+               echo >&3 '}'
+               exec 3</dev/null
+               ;;
+       entire)
+               partial=0
+               chars
+               ;;
+       partial)
+               partial=1
+               chars
+               ;;
+       *)
+               echo >&2 "??? $keyword"
+               exit 1
+               ;;
+       esac
+done
+
+mv rules/foundries.new rules/foundries