#! /usr/bin/gawk -f
# Last edited on 2016-05-09 23:27:30 by stolfilocal
# To be loaded into {wds-to-plaintext.gawk}
function tex_recode(pword,ptype,math,type,word,act, ptw,befo,wtex,neol)
{
# Converts {word} of the given {type} to a LaTeX construct.
# The {type} is "p" for punct, "a" for alpha, "s" for symbol,
# etc.
# Also gets the previous word {pword} and its type {ptype}
# (or "" for the first word).
# The boolean {math} tells whether the text
# is currently in math mode.
# Returns the result in the prealocated array {act[1..]}:
#
# {act[1]} the spaces to be inserted before the word,
# if there is no line break.
#
# {act[2]} the text to be appended to the line.
# Previous type and word: */
ptw = (ptype pword);
if ((ptw == "p=") || (ptw == "p÷")) { ptw = ""; }
# Defaults:
befo = "";
wtex = word;
neol = 0;
# Decide the spaces {befo} to add before before (or flush at end of parag and set {word} to nil):
if (type == "p")
{ # Punctuation:
if (word == "(")
{ befo = " "; }
else if (word == "«")
{ befo = ((ptw == "") ? "" : " ");
wtex = "``";
}
else if (word == "»")
{ wtex = "''"; }
else if (word == "<")
{ befo = " ";
wtex = "`";
}
else if (word == ">")
{ wtex = "'"; }
}
else
{ # Alpha or symbol:
wtex = word;
if ((ptw == "") || (ptw == "p(") || (ptw == "p«") || (ptw ~ /[-°]$/) || (ptw == "p<"))
{ befo = ""; }
else
{ befo = " "; }
}
# Recode some symbols:
gsub(/[~]/, "-", wtex);
gsub(/[°]/, ".~", wtex);
# Return results:
act[1] = befo;
act[2] = wtex;
}