#! /usr/bin/gawk -f # Last edited on 2026-05-24 00:13:44 by stolfi BEGIN { abort = -1; usage = ( "capitalize_eva_ligatures.gawk \\\n" \ " -i error_funcs.gawk \\\n" \ " [ -v field=NUM ] \\\n" \ " < INFILE.wct > OUTFILE.tex" \ ); # Assumes that field number {field} of the input is a # text in EVA, possibly divided into words by [-,.], # with markers [«-»] '<%>' '<$>' and possibly # factored into elements by braces "{}". # # Adds the proper EVA ligatures (i.e. capitalization) to each element. # ("sh" -> "Sh", "cth" -> "CTh", etc.) if (field == "") { arg_error("must specify \"field\""); } } (abort >= 0) { exit abort; } /^ *([#]|$)/ { print; next; } /./ { if (NF < field) { print; next } w = $(field); if (match(w /[!][!]/)) { data_error(("bad text \"" w "\"")); } w = capitalize_ligatures(w); if (match(w, /[*]/)) { data_error(("bad text \"" w "\"")); } $(field) = w; print; next; } function capitalize_ligatures(w) { # Capitalize ligatures: gsub(/ch/, "Ch", w); gsub(/sh/, "Sh", w); gsub(/ckh/, "CKh", w); gsub(/ikh/, "IKh", w); gsub(/[?]kh/, "?Kh", w); gsub(/cth/, "CTh", w); gsub(/ith/, "ITh", w); gsub(/[?]th/, "?Th", w); gsub(/cph/, "CPh", w); gsub(/iph/, "IPh", w); gsub(/[?]ph/, "?Ph", w); gsub(/cfh/, "CFh", w); gsub(/ifh/, "IFh", w); gsub(/[?]fh/, "?Fh", w); gsub(/c[?]h/, "C?h", w); gsub(/i[?]h/, "I?h", w); gsub(/c[?]/, "C?", w); gsub(/hh/, "Hh", w); return w; } function arg_error(msg) { printf "capitalize_eva_ligatures.gawk: %s\n", msg > "/dev/stderr"; printf "usage: %s\n", usage > "/dev/stderr"; abort = 1; exit 1; } function data_error(msg) { printf "capitalize_eva_ligatures.gawk: line %d: %s\n", FNR, msg > "/dev/stderr"; abort = 1; exit 1; }