diff options
Diffstat (limited to 'stdlib/source/library/lux/data/text/escape.lux')
-rw-r--r-- | stdlib/source/library/lux/data/text/escape.lux | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/stdlib/source/library/lux/data/text/escape.lux b/stdlib/source/library/lux/data/text/escape.lux index 7e02459e1..f7fbaaf46 100644 --- a/stdlib/source/library/lux/data/text/escape.lux +++ b/stdlib/source/library/lux/data/text/escape.lux @@ -70,19 +70,20 @@ (def: .public (escapable? char) (-> Char Bit) - (case char - (^template [<char>] - [(^ (static <char>)) - true]) - ([..\0] [..\a] [..\b] [..\t] - [..\n] [..\v] [..\f] [..\r] - [..\''] [..\\]) - - _ - (or (n.< ..ascii_bottom char) - (n.> ..ascii_top char)))) - -(def: (ascii_escape replacement pre_offset pre_limit previous current) + (or (n.< ..ascii_bottom char) + (n.> ..ascii_top char) + (case char + (^template [<char>] + [(^ (static <char>)) + true]) + ([..\0] [..\a] [..\b] [..\t] + [..\n] [..\v] [..\f] [..\r] + [..\''] [..\\]) + + _ + false))) + +(def: (ascii_escaped replacement pre_offset pre_limit previous current) (-> Text Nat Nat Text Text [Text Text Nat]) (let [post_offset (inc pre_offset) post_limit (n.- post_offset pre_limit)] @@ -92,7 +93,7 @@ ("lux text clip" post_offset post_limit current) post_limit])) -(def: (unicode_escape char pre_offset pre_limit previous current) +(def: (unicode_escaped char pre_offset pre_limit previous current) (-> Char Nat Nat Text Text [Text Text Nat]) (let [code (\ n.hex encode char) replacement (format ..sigil "u" @@ -109,7 +110,7 @@ ("lux text clip" post_offset post_limit current) post_limit])) -(def: .public (escape text) +(def: .public (escaped text) {#.doc (doc "Yields a escaped version of the text.")} (-> Text Text) (loop [offset 0 @@ -120,7 +121,7 @@ (case ("lux text char" offset current) (^template [<char> <replacement>] [(^ (static <char>)) - (let [[previous' current' limit'] (ascii_escape <replacement> offset limit previous current)] + (let [[previous' current' limit'] (ascii_escaped <replacement> offset limit previous current)] (recur 0 previous' current' limit'))]) ([..\0 ..escaped_\0] [..\a ..escaped_\a] @@ -136,7 +137,7 @@ char (if (or (n.< ..ascii_bottom char) (n.> ..ascii_top char)) - (let [[previous' current' limit'] (unicode_escape char offset limit previous current)] + (let [[previous' current' limit'] (unicode_escaped char offset limit previous current)] (recur 0 previous' current' limit')) (recur (inc offset) previous current limit))) (format previous current)))) @@ -166,7 +167,7 @@ (def: unicode_escape_offset (n.+ ..ascii_escape_offset ..code_size)) -(def: (ascii_un_escape replacement offset previous current limit) +(def: (ascii_un_escaped replacement offset previous current limit) (-> Text Nat Text Text Nat [Text Text Nat]) (let [limit' (|> limit (n.- offset) (n.- ..ascii_escape_offset))] [(format previous @@ -175,7 +176,7 @@ ("lux text clip" (n.+ ..ascii_escape_offset offset) limit' current) limit'])) -(def: (unicode_un_escape offset previous current limit) +(def: (unicode_un_escaped offset previous current limit) (-> Nat Text Text Nat (Try [Text Text Nat])) (case (|> current ("lux text clip" (n.+ ..ascii_escape_offset offset) ..code_size) @@ -191,7 +192,7 @@ (#try.Failure error) (exception.except ..invalid_unicode_escape [current offset]))) -(def: .public (un_escape text) +(def: .public (un_escaped text) {#.doc (doc "Yields an un-escaped text." "Fails if it was improperly escaped.")} (-> Text (Try Text)) @@ -207,7 +208,7 @@ (case ("lux text char" @sigil current) (^template [<sigil> <un_escaped>] [(^ (static <sigil>)) - (let [[previous' current' limit'] (..ascii_un_escape <un_escaped> offset previous current limit)] + (let [[previous' current' limit'] (..ascii_un_escaped <un_escaped> offset previous current limit)] (recur 0 previous' current' limit'))]) ([..\0_sigil //.\0] [..\a_sigil //.\a] @@ -224,7 +225,7 @@ (let [@unicode (n.+ code_size @sigil)] (if (n.< limit @unicode) (do try.monad - [[previous' current' limit'] (..unicode_un_escape offset previous current limit)] + [[previous' current' limit'] (..unicode_un_escaped offset previous current limit)] (recur 0 previous' current' limit')) (exception.except ..invalid_unicode_escape [text offset]))) @@ -238,9 +239,9 @@ "" current _ (format previous current)))))) -(syntax: .public (escaped {literal <code>.text}) +(syntax: .public (literal {literal <code>.text}) {#.doc (doc "If given a escaped text literal, expands to an un-escaped version.")} - (case (..un_escape literal) + (case (..un_escaped literal) (#try.Success un_escaped) (in (list (code.text un_escaped))) |