commit 73b2653f4615cde7f1c1596e19d7c6d0adfb8ec4
parent 5101b39a05121114a1f603ee93dc7d7a4534ebd1
Author: erai <erai@omiltem.net>
Date: Sat, 14 Sep 2024 15:16:56 -0400
escape peglib tree
Diffstat:
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, ")");