Since July 4 the VisualText org has seen 688 commits across 20 repositories — 504 of them non-merge — and a lot of it lands in places you’ll notice. Here’s the whole sweep.
The headline numbers:
| Component | July 3 | Today | Releases |
|---|---|---|---|
| NLP Engine | 3.7.0 | 3.8.12 | 24 |
| VS Code extension | 3.2.12 | 3.12.16 | 55 |
| visualtext files | 2.7.0 | 3.13.15 | 32 |
npm nlp-engine |
1.2.14 | 1.3.24 | 28 |
PyPI nlp-engine |
2.1.5 | 2.2.24 | 28 |
NLP Engine: 3.7.0 → 3.8.12
The language got bigger. NLP++ picked up a real standard library this summer:
- Strings and arrays (3.8.0) — string joining, substring search, array utilities
- Files and regex (3.8.0) —
readfile,readlines,dirlist, and real regular expressions - JSON (3.8.2) —
jsonwriteandjsonparseas builtins - Math (3.7.13) —
floor,ceiling,roundand friends - Block comments (3.7.14) — C-style
/* */everywhere the engine takes comments, including the data formats - Line comments in
analyzer.seq(3.8.12) —//finally works in the sequence file, and comments and blank lines survive a save - User functions can shadow a builtin of the same name (3.8.0)
- Function names can now contain digits and underscores (#698)
$devand$silent(3.8.4) expose the engine’s run mode to NLP++
Dictionary and KB correctness. A cluster of long-standing issues got closed: quoted numeric dict values stay strings (#385), punctuation survives in unquoted attribute values (#481), currency and symbol characters tokenize as punctuation instead of control characters (#500), numeric KBB attribute values read back as numbers (#439), deaccent() is UTF-8 aware instead of Latin-1 byte-based (#488), and every attribute on an inline KBB sense line is preserved. Over-long dictionary lines now recover instead of silently dropping the rest of the file, and the dict-line tokenizer no longer overflows past 30 tokens.
Compiled analyzers grew up: Python passes work in them (3.7.10), lazy *full.dict / *full.kbb open correctly (3.7.9), and per-run JSON/KBB data pairs load in compiled-KB analyzers (3.7.12). User-KB load is deferred until the first tokenizer pass so pre-tokenizer passes actually run first.
Speed. Codegen now emits one function per rule instead of one giant switch. Analyzer compiles use a unity build with /MP. The engine stopped flushing on every write and on every token while dumping the parse tree, caches match-table transcoding, added ASCII fast paths through the hot string functions, and stopped leaking an ICU collator per call. An O(n³) struniquechars is gone. Runs now end with a ranking of the slowest passes (3.8.3) so you can see where the time went.
Housekeeping: include guards added to 41 headers that lacked them, the unbuildable QDBM variant libraries and the lite/hold trees removed, and CI now caches vcpkg and builds in parallel.
VS Code extension: 3.2.12 → 3.12.16
This is where the summer’s biggest visible change lives.
NLP++ became a first-class language in the editor. Over 3.5.0–3.9.1 the extension gained a full language-intelligence layer: context-aware IntelliSense completion, signature help for function calls, region and rule folding, semantic highlighting, quick fixes for misspelled calls, and hover that links straight to a built-in’s own help page. Plus a document and selection formatter (3.3.0) and a standard language configuration (3.12.3).
The parse-tree graphic (3.10.0 onward) — .tree files now render as a real linguistic tree: collapsible nodes, fit-to-window, drill in one node at a time, right-click Graph Entire Tree or Graph Selected Portion of Tree, Reveal Text on any node, and overlap-driven staggering so labels stop colliding at every level. Tree files open instantly; the graphic is strictly on demand.
The updater got fixed properly. It no longer deletes the whole visualText directory, no longer hangs unzipping (native tar now), checks the same engine directory it downloads to, self-heals, and has a Stop button that works.
Analyzer deployment — you can now deploy a stand-alone compiled analyzer to its own folder, Python pass scripts included, and cloud compile is the default mode with a hosted dispatcher URL.
Smaller things you’ll feel: Find results are prefixed with the pass number and mark inactive (I) and orphan (O) passes (#787), multi-select delete in the Text view (#755), a Helpful Links node in the Help view, Insert Python Library Pass from the visualText/python library, a # MODIFIED header stamped on pass save (#849), KB and sequence tooltips that show the file’s header comment, LLM prompts that copy to the clipboard, and opening files after an analyzer run is no longer delayed.
Under the hood: a VS Code integration test harness (which promptly found and fixed six broken commands), a pure-logic suite for the language engines, cross-pass definition/reference/rename tests, TypeScript 6, dependabot, a security policy, CI that runs the harnesses on every PR and publishes the vsix on a tag, four dead dependencies dropped, and the last npm advisories cleared. Anonymous opt-out usage telemetry landed in 3.4.0 and expanded in 3.12.0 to record which shipped analyzers and templates actually get used.
Packages
putJsonFile / putJsonObject (Node and TypeScript) and put_json_file / put_json_object (Python) let you feed JSON straight into an analyzer’s KB — the same capability across all three bindings. The Python package also loads pre-compiled analyzers now, with ICU preload.
Linguistic data and help
English resources added to visualtext-files: en-lemmas.kbb (inflected form → root), en-roots.kbb (lemma → inflection, for generation), en-synonyms-full.kbb (WordNet synonym table), plus nationality, academic-degree, and subject/field-of-study dictionaries with matching knowledge bases, and KBB lookup tables generated from value-bearing dicts.
json2kbb.py — a Python pass that scans kb/user for .json files and builds the missing .kbb files.
Help got a Version 3 pass: an announcement with a screenshot of the whole workbench, a parse-tree help page, and documentation for the new math functions, the 3.8.0 builtins, function shadowing, jsonwrite/jsonparse, block comments, and a Python & Node.js package usage page.
“Prime Claude for NLP++” — the old build-analyzer prompt has been repurposed into a prompt that hands an LLM the map of the NLP++ help files, tells it that .dict and .kbb are the KB source files, when a KB beats a dictionary, and never to edit KBFuncs.nlp. It’s first in the LLM Prompts list.
Sequence tooltips — every pass in the shipped analyzers now has a description, so hovering a pass in the sequence view tells you what it does. This went out across analyzers, parse-en-us, nlp-tutorials and nlpfix-analyzers.
New repos
nlpplus-tmbundle— the NLP++ TextMate grammars, extracted from the extension into their own repo and pulled back in as a submodule. Writing a Pygments lexer against them turned up three scoping bugs and a set of operator and bracket gaps, all fixed.nlp-studio— an online NLP++ analyzer editor modeled on the VS Code extension. Phase 1 is an openvscode-server stopgap, with a Linux server deployment guide.
Also: pt, the Brazilian Portuguese phrase parser, got its first tagged release and now recognizes contractions as preposition + determiner.
Everything above is public at github.com/VisualText. Questions and bug reports welcome — a good number of the fixes listed here came straight off the issue tracker.