aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/stdlib/patterns.c20
-rw-r--r--src/stdlib/text.c22
2 files changed, 20 insertions, 22 deletions
diff --git a/src/stdlib/patterns.c b/src/stdlib/patterns.c
index 07a17afb..e274cba9 100644
--- a/src/stdlib/patterns.c
+++ b/src/stdlib/patterns.c
@@ -1251,6 +1251,26 @@ public Closure_t Text$by_split(Text_t text, Pattern_t pattern)
};
}
+public Pattern_t Pattern$escape_text(Text_t text)
+{
+ // TODO: optimize for spans of non-escaped text
+ Text_t ret = EMPTY_TEXT;
+ TextIter_t state = NEW_TEXT_ITER_STATE(text);
+ for (int64_t i = 0; i < text.length; i++) {
+ uint32_t g = Text$get_main_grapheme_fast(&state, i);
+ if (g == '{') {
+ ret = Text$concat(ret, Text("{1{}"));
+ } else if (g == '?'
+ || uc_is_property_quotation_mark(g)
+ || (uc_is_property_paired_punctuation(g) && uc_is_property_left_of_pair(g))) {
+ ret = Text$concat(ret, Text("{1"), Text$slice(text, I(i+1), I(i+1)), Text("}"));
+ } else {
+ ret = Text$concat(ret, Text$slice(text, I(i+1), I(i+1)));
+ }
+ }
+ return ret;
+}
+
public const TypeInfo_t Pattern$info = {
.size=sizeof(Pattern_t),
.align=__alignof__(Pattern_t),
diff --git a/src/stdlib/text.c b/src/stdlib/text.c
index 177a9130..65290bb3 100644
--- a/src/stdlib/text.c
+++ b/src/stdlib/text.c
@@ -1458,26 +1458,4 @@ public const TypeInfo_t Text$info = {
.metamethods=Text$metamethods,
};
-public Pattern_t Pattern$escape_text(Text_t text)
-{
- // TODO: optimize for spans of non-escaped text
- Text_t ret = EMPTY_TEXT;
- TextIter_t state = NEW_TEXT_ITER_STATE(text);
- for (int64_t i = 0; i < text.length; i++) {
- int32_t g = Text$get_grapheme_fast(&state, i);
- ucs4_t g0 = g < 0 ? GRAPHEME_CODEPOINTS(g)[0] : (ucs4_t)g;
-
- if (g == '{') {
- ret = concat2_assuming_safe(ret, Text("{1{}"));
- } else if (g0 == '?'
- || uc_is_property_quotation_mark(g0)
- || (uc_is_property_paired_punctuation(g0) && uc_is_property_left_of_pair(g0))) {
- ret = Text$concat(ret, Text("{1"), Text$slice(text, I(i+1), I(i+1)), Text("}"));
- } else {
- ret = concat2_assuming_safe(ret, Text$slice(text, I(i+1), I(i+1)));
- }
- }
- return ret;
-}
-
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0