64 lines · 1.6 KB · Text
RawDownload
awk ' # format#   Input:  sort key (tab) string (tab) numlist#   Output: troff format, commands interpreted BEGIN {	FS = "\t"	s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz "	# set upper["a"] = "A"	for (i = 1; i <= 27; i++) upper[substr(s,i+27,1)] = substr(s,i,1)	# set lower["a"] =  lower["A"] ="a"	for (i = 1; i <= 27; i++) {		lower[substr(s,i,1)] = substr(s,i+27,1)		lower[substr(s,i+27,1)] = substr(s,i+27,1)	}}{ # mark change between letters with .YY	# find first non-punctuation char	for (i = 1; (c = substr($1,i,1)) != ""; i++)		if (c ~ /[a-zA-Z0-9 ]/)			break	this = c	if (!(this in lower)) lower[this] = " "	this = lower[this]	if (this != last)  # && this != " ")		print ".YY", this, upper[last=this]	quoted = 0   # interpret font change language 	if ($2 ~ /^   /)	# different macro, to avoid bad breaks in hier		print ".ZZ"	else		print ".XX"	if (NF == 3)		$0 = $2 "," "  " $3	# discard sort key, leave term .. numlist	else		$0 = $2 	if ($0 ~ /%/) {		quoted = 1		gsub(/%%/,  "QQ0QQ", $0)		gsub(/%\[/, "QQ1QQ", $0)		gsub(/%\]/, "QQ2QQ", $0)		gsub(/%\{/, "QQ3QQ", $0)		gsub(/%\}/, "QQ4QQ", $0)		gsub(/%~/,  "QQ5QQ", $0)	}	gsub(/%e/, "\\e", $0) # %e -> \e	gsub(/~/, " ", $0)    # unpaddable spaces go away at last	if (gsub(/\[/, "\\\\&\\f(CW", $0))		gsub(/\]/, "\\fP",   $0)	if (gsub(/\{/, "\\f2",   $0))		gsub(/\}/, "\\fP",   $0)	if (quoted) {		gsub(/%/, "", $0)		gsub(/QQ0QQ/, "%", $0)		gsub(/QQ1QQ/, "[", $0)		gsub(/QQ2QQ/, "]", $0)		gsub(/QQ3QQ/, "{", $0)		gsub(/QQ4QQ/, "}", $0)		gsub(/QQ5QQ/, "~", $0)	}	printf "\\&%s\n", $0}' $*