#! /n/gnu/bin/gawk -f # Last edited on 2000-01-31 19:26:50 by stolfi # Reads a stream of element-factored words, extracts crust+mantle # prefix and mantle+crust suffix separated by "-". /^ *$/{next;} /./{ # Delete dummy (empty) factors: gsub(/{[_]*}/, "", $0); gsub(/[_][_]*/, "", $0); # Map "ch" and "sh" to "C" and "S" to simplify processing: gsub(/ch/, "C", $0); gsub(/sh/, "S", $0); # Delete words without core gsub(/^[^ktpf]*$/, "", $0); if (length($0) == 0) { next; } # Must have at least one core element: if ($0 !~ /[{].*[ktpf].*[}]/) { error(("bad format = «" $0 "»")); } # Insert "-"s between mantle and core: $0 = gensub(/^([^ktpf]*)[{]/, "\\1-{", "g", $0); $0 = gensub(/[}]([^ktpf]*)$/, "}-\\1", "g", $0); # Delete core elements, replace by single "-": gsub(/[-].*[-]/, "-", $0); # Delete braces gsub(/[{}]/, "", $0); # Restore "cs" and 'sh": gsub(/C/, "ch", $0); gsub(/S/, "sh", $0); print $0; } function error(msg) { printf "line %d: %s\n", NR, msg >> "/dev/stderr"; abort = 1; exit 1; }