On 4/3/2020 5:36 PM, Gerben Wierda wrote:
Thanks to Taco, the solution was to simply use:
function doubleQuotableEscapedConTeXtString( str) local rep = { [1] = { '{', '{\\textbraceleft}' }, [2] = { '}', '{\\textbraceright}' }, [3] = { '#', '{\\texthash}' }, [4] = { '$', '{\\textdollar}' }, [5] = { '&', '{\\textampersand}' }, [6] = { '%', '{\\textpercent}' }, [7] = { '\\','{\\textbackslash}' }, [8] = { '|', '{\\textbar}' }, [9] = { '_', '{\\textunderscore}' }, [10] = { '~', '{\\textasciitilde}' }, [11] = { '^', '{\\textasciicircum}' }, [12] = { '"', "\"&ditto&\"" }, } return lpeg.replacer(rep):match(str) end
And the string becomes something that can safely be given toi METAPOST and safely handled by TeX when called from METAPOST via textext() more efficient
local rep = lpeg.replacer { { '{', '{\\textbraceleft}' }, { '}', '{\\textbraceright}' }, { '#', '{\\texthash}' }, { '$', '{\\textdollar}' }, { '&', '{\\textampersand}' }, { '%', '{\\textpercent}' }, { '\\','{\\textbackslash}' }, { '|', '{\\textbar}' }, { '_', '{\\textunderscore}' }, { '~', '{\\textasciitilde}' }, { '^', '{\\textasciicircum}' }, { '"', "\"&ditto&\"" }, } function doubleQuotableEscapedConTeXtString( str) return rep:match(str) end this is probably also ok: local rep = { ["\""] = "\\char34 ", ["#"] = "\\char35 ", ["$"] = "\\char36 ", ["%"] = "\\char37 ", ["&"] = "\\char38 ", ["\\"] = "\\char92 ", ["^"] = "\\char94 ", ["_"] = "\\char95 ", ["{"] = "\\char123 ", ["|"] = "\\char124 ", ["}"] = "\\char125 ", ["~"] = "\\char126 ", } function doubleQuotableEscapedConTeXtString(str) return (string.gsub(str,".",rep)) end ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------