#! /usr/bin/gawk -f # Last edited on 1998-12-12 05:11:54 by stolfi # Recoding Voynich text (or interlinear file) # from FSG to EVA (European Voynich Alphabet) function fsg_to_eva(txt) { # Converts a chunk of comment-free FSG text to EVA # We discard "%" and "!" since the conversion # will destroy synchronism anyway. gsub(/[% !]/, "", txt); # Now convert gsub(/IIIE/, "iiil", txt); gsub(/IIIK/, "iiim", txt); gsub(/IIIL/, "iiin", txt); gsub(/IIIR/, "iiir", txt); gsub(/IIE/, "iil", txt); gsub(/IIK/, "iim", txt); gsub(/IIL/, "iin", txt); gsub(/IIR/, "iir", txt); gsub(/IE/, "il", txt); gsub(/IK/, "im", txt); gsub(/IL/, "in", txt); gsub(/IR/, "ir", txt); gsub(/HZ/, "cth", txt); gsub(/PZ/, "cph", txt); gsub(/DZ/, "ckh", txt); gsub(/FZ/, "cfh", txt); gsub(/2/, "s", txt); gsub(/4/, "q", txt); gsub(/6/, "g", txt); gsub(/7/, "j", txt); gsub(/8/, "d", txt); gsub(/A/, "a", txt); gsub(/C/, "e", txt); gsub(/D/, "k", txt); gsub(/E/, "l", txt); gsub(/F/, "f", txt); gsub(/G/, "y", txt); gsub(/H/, "t", txt); gsub(/I/, "i", txt); gsub(/K/, "m", txt); gsub(/L/, "n", txt); gsub(/M/, "iin", txt); gsub(/N/, "in", txt); gsub(/O/, "o", txt); gsub(/P/, "p", txt); gsub(/R/, "r", txt); gsub(/S/, "sh", txt); gsub(/T/, "ch", txt); gsub(/V/, "v", txt); gsub(/Y/, "x", txt); return txt } function convert(old, i,neu) { # Converts the text outside the '{}' comments, while # preserving the text inside the '{}' comments: neu = ""; while (length(old) != 0) { i = index(old, "{"); if (i == 0) { neu = (neu fsg_to_eva(old)); old = ""; } else if (i > 1) { neu = (neu fsg_to_eva(substr(old, 1, i-1))); old = substr(old, i); } else { match(old, /^{[^}]*}/); if (RSTART > 0) { neu = (neu substr(old, 1, RLENGTH)); old = substr(old, RLENGTH + 1); } else { printf "line %d, missing '\}'\n", FNR > "/dev/stderr"; neu = (neu old); old = ""; } } } return neu; } /^ *$/ { print; next } /^ *#/ { print; next; } /^<[^>]*> *$/ { print; next } /^