TN5RCIH3OI5AW756GICACN24TBABGLNDQ7LZJTUYHXYVW3ARGBBQC
6WM2DD32XSC2HFLOXBDPFCU6BI2BD5ZYFGBIEIVEQOKWRCNTXROQC
UW27LKXM2BJ77FQLTY4WPKDSSWI2RFNFRJ7CB4U3TS7KYVIV72LQC
FITNBSMMJCQIFJGUMVSZYHJM4OSBXEZO5YWYEJ4CXGMFPBSIT5WAC
7SNXCC5KSDXU3MBJT2FBEPAISWPY62DHPC2RLEYXC2WVTWX5TKKQC
RHFZ2YBK7K6MYUJDJGDOOIKZ6BSCCL2C7EEGYGUYZYKU7JCFGVRQC
MDCE6UHRABRWF7Z7NOQ3OTB5WXRIHPY7A625V5E6COPS44ETZSQQC
CSYWOT2I424JQUSOH4DB6UNOOHMB5FOA5B7AY4CE45EQORRB4LWAC
2CXQ53RHKGIT5KR7VHOVRVHCD5MK4V2J3AJDQ3CNSJLHJXXA4GXQC
# woo, tricky quoting inside this very script, before it gets to glotawk
lisp_eval_should_be '(string-length ".\\a.\\b.\\f.\\n.\\r.\\t.\\v.\\\\.\\".")' '19' 'string read backslash escapes'
lisp_eval_should_be_tricky_output '(mapcar (lambda (x) (substr ".\\a.\\b.\\f.\\n.\\r.\\t.\\v.\\\\.\\"." x 1)) '\''(2 4 6 8 10 12 14 16 18))' ' 28 22 5c 61 22 20 22 5c 62 22 20 22 5c 66 22 20 22 5c 6e 22 20 22 5c 72 22 20 22 5c 74 22 20 22 5c 76 22 20 22 5c 5c 22 20 22 5c 22 22 29 0a' 'string print backslash escapes'
ans = _string(substr(this, 2, length(this)-2))
ans = substr(this, 2, length(this)-2)
# effectuate backslash-escapes. note we are only
# supporting single-letter escapes, not \012 style octal
# escapes.
#
# logg_dbg("read_atom", "string before backslash escapes: " ans)
while(match(ans, /\\[abfnrtv"\\]/)) {
ch = _string_unescapes[substr(ans, RSTART+1, 1)]
ans = substr(ans, 1, RSTART-1) ch substr(ans, RSTART+RLENGTH)
}
# careful.
# logg_dbg("read_atom", "string after backslash escapes: " ans)
# ok.
ans = _string(ans)
BEGIN {
_string_reescapes["\a"] = "\\a"
_string_reescapes["\b"] = "\\b"
_string_reescapes["\f"] = "\\f"
_string_reescapes["\n"] = "\\n"
_string_reescapes["\r"] = "\\r"
_string_reescapes["\t"] = "\\t"
_string_reescapes["\v"] = "\\v"
_string_reescapes["\\"] = "\\\\"
_string_reescapes["\""] = "\\\""
}
function _repr_string(n) {
return "\"" _STRING[n] "\""
function _repr_string(n, s, chs) {
s = _STRING[n]
gsub(/\\/, "\\\\", s)
gsub(/"/, "\\\"", s)
while(match(s, /[\a\b\f\n\r\t\v]/)) {
# logg_dbg("_repr_string", "reescaping " s)
chs = _string_reescapes[substr(s, RSTART, 1)]
s = substr(s, 1, RSTART-1) chs substr(s, RSTART+1)
# logg_dbg("_repr_string", "now it is " s)
}
return "\"" s "\""