v0.1.3
Notepatra v0.1.3 — preprocessor color + palette test suite
Polish release on top of v0.1.2. Caught during verification: C++ preprocessor directives were rendering black instead of brown because the palette function's substring match missed the "Pre-processor" hyphen. Fixed, with tests to prevent regression.
Fixed
🎨 C/C++/C#/JavaScript preprocessor directives now paint brown-bold
v0.1.2's palette function used description().contains("preproc") to find preprocessor styles, but QScintilla's description is literally "Pre-processor block" with a hyphen. "pre-processor".contains("preproc") is false because the hyphen splits the substring. Result: #include, #define, #if lines rendered in default black instead of Notepad++'s iconic #804000 brown.
Now matches "preproc", "pre-proc", and "processor" as substrings so both hyphenated and concatenated descriptions are caught.
Added
✅ test_palette.cpp — per-color verification across 7 languages
A new CI test builds and asserts exact RGB values for every major style in QsciLexerCPP, QsciLexerJavaScript, QsciLexerPython, QsciLexerSQL, QsciLexerJSON, QsciLexerBash, and QsciLexerMarkdown after applying the Notepad++ palette. Example output:
ok C++ style 5 keyword = #0000FF [bold]
ok C++ style 1 comment = #008000 [italic]
ok C++ style 4 number = #FF8000
ok C++ style 6 string = #808080
ok C++ style 9 pre-processor = #804000 [bold]
ok C++ style 10 operator = #000000 [bold]
ok C++ style 16 secondary keywords = #800080 [purple]
Each assertion checks: style-description substring match, foreground color RGB, background paper = #FFFFFF, and bold/italic font flags. Catches any future regression where a lexer tokenizes correctly but renders degenerate colors (the exact class of bug that made Windows v0.1.1 look unhighlighted).
✅ test_ollama.cpp — end-to-end dynamic model detection
Hits a real local Ollama daemon and verifies:
OllamaClient::isAvailable()uses the newQEventLoop + QTimerprobe and returns true when Ollama is reachableOllamaClient::listModels()fetches/api/tagsand emitsmodelsListed(QStringList)with the real installed models (verified againstcurl http://localhost:11434/api/tags)setModel()/model()round-trip works on a detected model name
If Ollama isn't running on the test host, the test prints "Ollama offline — test skipped" and exits 0 so CI stays green.
Architecture
Extracted applyNotepadPlusPalette() into its own file src/npp_palette.{h,cpp} as a free function, so the test can link it directly without pulling in Editor.cpp's full dependency graph (rustbridge, mainwindow, etc). Editor::applyNotepadPlusPalette() now delegates to the free function for source compatibility.
Verifying this release
Same pipeline as v0.1.2 — SHA-256 in SHA256SUMS, cosign keyless signatures, SLSA build provenance. See SECURITY.md.
Downloads
| Platform | Asset |
|---|---|
| Linux x64 | notepatra-linux-x64.tar.gz |
| macOS Apple Silicon | notepatra-macos-arm64.dmg |
| Windows x64 | notepatra-windows-x64.zip |