def scan_escape_string

qasim-bend-kit@0.1.0.2 · proof/JSON_LexWhitespaceProof.bend:297

import qasim-bend-kit@0.1.0.2/proof/JSON_LexWhitespaceProof.bend as JSONLexWhitespaceProof
import Base
import qasim-bend-kit@0.1.0.2/libs/JSON.bend as J
import qasim-bend-kit@0.1.0.2/proof/JSON_StringProof.bend as S

297def scan_escape_string(+text: String,
298                       +suffix: String,
299                       +reversed: String,
300                       +acc: List<&2, J.Lexeme>) -> {J.lex_scan(J.escape_string(text) ++ suffix, J.Quoted{}, reversed, acc) == J.lex_scan(suffix, J.Quoted{}, escape_reverse(text, reversed), acc) : List<&2, J.Lexeme>}:
301    match text:
302        case SNil{}: {==}
303        case SCon{+head, +tail}:
304            Equal.trans(List<&2, J.Lexeme>, J.lex_scan(J.escape_string(text) ++ suffix, J.Quoted{}, reversed, acc),
305                J.lex_scan(J.escape_char(head) ++ (J.escape_string(tail) ++ suffix), J.Quoted{}, reversed, acc),
306                J.lex_scan(suffix, J.Quoted{}, escape_reverse(text, reversed), acc),
307                Equal.cong(String, List<&2, J.Lexeme>, source => J.lex_scan(source, J.Quoted{}, reversed, acc),
308                    J.escape_string(text) ++ suffix, J.escape_char(head) ++ (J.escape_string(tail) ++ suffix),
309                    S.append_assoc(J.escape_char(head), J.escape_string(tail), suffix)),
310                Equal.trans(List<&2, J.Lexeme>,
311                    J.lex_scan(J.escape_char(head) ++ (J.escape_string(tail) ++ suffix), J.Quoted{}, reversed, acc),
312                    J.lex_scan(J.escape_string(tail) ++ suffix, J.Quoted{}, String.reverse(J.escape_char(head)) ++ reversed, acc),
313                    J.lex_scan(suffix, J.Quoted{}, escape_reverse(text, reversed), acc),
314                    scan_escape_char(head, J.escape_string(tail) ++ suffix, reversed, acc, J.escape_class(head), {==}),
315                    scan_escape_string(tail, suffix, String.reverse(J.escape_char(head)) ++ reversed, acc)))

Uses (15)

Used by (2)