chiark / gitweb /
mkrules: Handle multiple files with the same metrics.
[xfonts-traditional.git] / mkrules
diff --git a/mkrules b/mkrules
index ea3afebc09496658f57592fb5170006354ac081f..b55b3976f65bf4b2ce88839c8edcda284cee920e 100755 (executable)
--- a/mkrules
+++ b/mkrules
@@ -24,6 +24,8 @@ chars () {
        done
 }
 
+seenrules=/
+
 while read keyword rest; do
        case "$keyword" in
        '#'|'') continue ;;
@@ -53,13 +55,21 @@ while read keyword rest; do
                        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 {'
+               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)
-               echo >&3 '}'
                exec 3</dev/null
                ;;
        entire)
@@ -70,6 +80,9 @@ while read keyword rest; do
                partial=1
                chars
                ;;
+       verbatim)
+               echo >&3 "    $rest"
+               ;;
        *)
                echo >&2 "??? $keyword"
                exit 1
@@ -77,4 +90,12 @@ while read keyword rest; do
        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