os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit 73b2653f4615cde7f1c1596e19d7c6d0adfb8ec4
parent 5101b39a05121114a1f603ee93dc7d7a4534ebd1
Author: erai <erai@omiltem.net>
Date:   Sat, 14 Sep 2024 15:16:56 -0400

escape peglib tree

Diffstat:
Mpeglib.c | 23++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/peglib.c b/peglib.c @@ -280,6 +280,10 @@ peg_free(c: *peg) { } peg_show(out: *file, n: *peg_node) { + var i: int; + var ch: int; + var hex: *byte; + hex = "0123456789abcdef"; fputs(out, "("); fputs(out, tag_to_str(n.tag)); if n.child { @@ -297,7 +301,24 @@ peg_show(out: *file, n: *peg_node) { } else { fputc(out, ' '); fputc(out, '"'); - fputb(out, n.str, n.len); + i = 0; + loop { + if i == n.len { + break; + } + + ch = n.str[i]:int; + if ch < 32 || ch > 127 || ch == '\\' || ch == '"' { + fputc(out, '\\'); + fputc(out, 'x'); + fputc(out, hex[ch >> 4]:int); + fputc(out, hex[ch & 15]:int); + } else { + fputc(out, ch); + } + + i = i + 1; + } fputc(out, '"'); } fputs(out, ")");