Skip to content

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 09 Apr 16:13

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 new QEventLoop + QTimer probe and returns true when Ollama is reachable
  • OllamaClient::listModels() fetches /api/tags and emits modelsListed(QStringList) with the real installed models (verified against curl 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