feat: add Python and Java regex engines
This commit is contained in:
@@ -7,11 +7,15 @@ boundaries.
|
||||
React workbench
|
||||
├─ Pattern SyntaxSupervisor → syntax.worker
|
||||
│ ├─ Regexpp ECMAScript provider → normalized AST
|
||||
│ └─ PCRE2 lexical provider → partial normalized structure
|
||||
│ ├─ PCRE2 lexical provider → partial normalized structure
|
||||
│ ├─ Python lexical provider → partial normalized structure
|
||||
│ └─ Java lexical provider → partial normalized structure
|
||||
├─ Replacement SyntaxSupervisor → syntax.worker → typed replacement tokens
|
||||
├─ EngineSupervisor
|
||||
│ ├─ ecmascript.worker → native RegExp → match DTOs
|
||||
│ └─ pcre2.worker → PCRE2 10.47 WASM ABI → match DTOs
|
||||
│ ├─ pcre2.worker → PCRE2 10.47 WASM ABI → match DTOs
|
||||
│ ├─ python.worker → Pyodide 314.0.3 → CPython 3.14.2 re → match DTOs
|
||||
│ └─ java.worker → TeaVM 0.15.0 java.util.regex module → match DTOs
|
||||
├─ Pcre2TraceSupervisor → pcre2-trace.worker
|
||||
│ └─ separate ABI-v3 PCRE2_AUTO_CALLOUT operation → bounded trace DTOs
|
||||
├─ AnalysisPanel
|
||||
@@ -42,7 +46,18 @@ provenance. React never imports or traverses regexpp's cyclic AST.
|
||||
Every engine request carries a protocol version, monotonically increasing
|
||||
request ID and worker generation. A supervisor allows one active request,
|
||||
rejects stale responses, terminates on timeout/crash/cancel, and lazily creates
|
||||
a new generation. Timeout is a distinct error state.
|
||||
a new generation. Timeout is a distinct error state. A separate idempotent
|
||||
load operation verifies a worker's runtime identity before execution; its
|
||||
flavour-specific startup deadline is not charged to the 250 ms live or selected
|
||||
manual execution deadline. A killed generation must load and verify again.
|
||||
|
||||
The Python worker imports only the self-hosted Pyodide loader and pack, then
|
||||
evaluates the application-owned bounded bridge in CPython. The bridge returns
|
||||
code-point ranges, which are retained as native values and converted only at
|
||||
valid boundaries to editor UTF-16. The Java worker imports a verified TeaVM
|
||||
ES2015 module. That module executes TeaVM's own `java.util.regex.Pattern` and
|
||||
`Matcher` class-library implementation and returns native UTF-16 ranges; it is
|
||||
not OpenJDK.
|
||||
|
||||
PCRE2 tracing is not an `EngineSupervisor` match or replacement operation. Its
|
||||
own worker compiles with `PCRE2_AUTO_CALLOUT`, copies only complete fixed
|
||||
@@ -70,13 +85,14 @@ PCRE2 API cannot express directly. Its advertised C17 target is protected by
|
||||
deterministic golden identities and an exact PCRE2 10.47 compile/execute gate.
|
||||
|
||||
Subject minimization is a main-thread bounded reducer whose expensive predicate
|
||||
checks stay in independently terminable engine workers. Fixed pattern syntax
|
||||
is parsed once for capture metadata. The baseline and every accepted candidate
|
||||
retain the exact target and engine identity. Timeout, crash, cancellation,
|
||||
worker failure and incomplete output are separate outcomes. Deterministic
|
||||
ddmin deletion is followed by a fixed-point local sweep over Unicode-scalar
|
||||
deletion and lower-rank canonical replacement; only completion of that sweep
|
||||
permits a transform-local minimality claim.
|
||||
checks stay in independently terminable ECMAScript or PCRE2 workers. Fixed
|
||||
pattern syntax is parsed once for capture metadata. Python and Java are blocked
|
||||
at this feature boundary rather than routed to a different engine. The baseline
|
||||
and every accepted candidate retain the exact target and engine identity.
|
||||
Timeout, crash, cancellation, worker failure and incomplete output are separate
|
||||
outcomes. Deterministic ddmin deletion is followed by a fixed-point local sweep
|
||||
over Unicode-scalar deletion and lower-rank canonical replacement; only
|
||||
completion of that sweep permits a transform-local minimality claim.
|
||||
|
||||
Generated-case synthesis and verification are separate trust boundaries. The
|
||||
dedicated generation worker receives only a validated, complete ECMAScript
|
||||
@@ -123,12 +139,13 @@ separator during apply. This makes anchor and cross-line behavior deliberately
|
||||
different rather than silently rewriting the pattern. Match DTOs are reduced to
|
||||
bounded per-group participation counts and samples before the next document.
|
||||
|
||||
Native ranges are retained in the engine's declared unit. PCRE2 always uses
|
||||
UTF/UCP and exposes UTF-8 byte ranges; its ABI copies scalar records and names
|
||||
out of WebAssembly before returning and retains no code pointer. Browser editor ranges
|
||||
are half-open UTF-16 code-unit ranges. Reusable converters cover UTF-8 byte and
|
||||
Unicode code-point offsets, including invalid-boundary rejection and
|
||||
lone-surrogate detection.
|
||||
Native ranges are retained in the engine's declared unit. ECMAScript and Java
|
||||
use UTF-16 code units. PCRE2 always uses UTF/UCP and exposes UTF-8 byte ranges;
|
||||
its ABI copies scalar records and names out of WebAssembly before returning and
|
||||
retains no code pointer. CPython `re` exposes Unicode code-point indices.
|
||||
Browser editor ranges are half-open UTF-16 code-unit ranges. Reusable
|
||||
converters cover UTF-8 byte and Unicode code-point offsets, including
|
||||
invalid-boundary rejection and lone-surrogate detection.
|
||||
|
||||
The release boundary is `dist/` plus checked-in legal/source documents. The
|
||||
Portal consumes the resulting immutable ZIP and never imports React source.
|
||||
|
||||
Reference in New Issue
Block a user