summaryrefslogtreecommitdiff
path: root/docs/fs.md
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 17:46:11 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:17 -0300
commite3e605bd33fc5be56cb7ec842449718bc5337a75 (patch)
tree85a9d70524ecb3358bc3f92225851c6abd249a10 /docs/fs.md
parent290584fc1127d017603c7c98c9aab27c0523a2cf (diff)
downloadpardes-e3e605bd33fc5be56cb7ec842449718bc5337a75.tar.gz
pardes-e3e605bd33fc5be56cb7ec842449718bc5337a75.zip
A class with non-ASCII runes matches them: [éa-z] is taken as (é|[a-z]), a range up to 256 runes spelled out
mvzr's classes hold bytes, and it refused a multibyte member as a bad expression. Rewriting the class before compiling, as ^a|^b already is, needs no mvzr patch; runes that differ only in their last byte go as one alternative (\xc3[\xa0-\xbf] for [à-ÿ]) so a 256-rune range fits the 512-operation limit, which counts the pattern as rewritten. A wider range and [^é] are refused, naming why. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'docs/fs.md')
-rw-r--r--docs/fs.md7
1 files changed, 6 insertions, 1 deletions
diff --git a/docs/fs.md b/docs/fs.md
index 8464768b..af64fded 100644
--- a/docs/fs.md
+++ b/docs/fs.md
@@ -733,7 +733,12 @@ unanchored branches (`^def|x`) is refused, `bad regular expression`, since
mvzr keeps `^` only first. A pattern may be up to 512 of mvzr's operations,
about 512 characters (mvzr's own is 64; pardes builds it with more); a
longer one is refused, `bad regular expression: longer than mvzr's 512
-operations`. An expression is
+operations`. A class may hold non-ASCII runes (`[éa-z]`, `[à-ÿ]`): it is
+taken as an alternation of them (`(é|[a-z])`), a range of up to 256 runes
+spelled out, and the 512 counts the pattern as rewritten. A wider range
+(`a range of runes wider than 256 in [...] is not supported`) and a negated
+class with a non-ASCII rune (`[^é]`) are refused, since mvzr's classes hold
+bytes. An expression is
evaluated from the current address, the range last written to `addr` (or
left by the last `data` write, just past it), as acme evaluates it from
`w->addr` (xfid.c:446): `.` is that address, not the selection (`dot` is