From dc2cf4c0a6c986a226b6f05a854c938c77eab6fa Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Wed, 3 Dec 2025 16:20:04 -0800 Subject: [PATCH] Update highlighter logic, add release scripts, and bump version to 1.3.6. - Refined cached state validation in `HighlighterEngine` to ensure row validity and buffer consistency. - Added `make-release` and `make-app-release` scripts for streamlined release builds. - Disabled AddressSanitizer (ASAN) by default. - Version bump to 1.3.6. --- CMakeLists.txt | 4 ++-- make-app-release | 16 ++++++++++++++++ make-release | 26 ++++++++++++++++++++++++++ syntax/HighlighterEngine.cc | 8 ++++++-- 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100755 make-app-release create mode 100755 make-release diff --git a/CMakeLists.txt b/CMakeLists.txt index 6824aaa..46b9184 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(kte) include(GNUInstallDirs) set(CMAKE_CXX_STANDARD 17) -set(KTE_VERSION "1.3.5") +set(KTE_VERSION "1.3.6") # Default to terminal-only build to avoid SDL/OpenGL dependency by default. # Enable with -DBUILD_GUI=ON when SDL2/OpenGL/Freetype are available. @@ -16,7 +16,7 @@ option(KTE_UNDO_DEBUG "Enable undo instrumentation logs" OFF) option(KTE_ENABLE_TREESITTER "Enable optional Tree-sitter highlighter adapter" OFF) # Optionally enable AddressSanitizer (ASan) -option(ENABLE_ASAN "Enable AddressSanitizer for builds" ON) +option(ENABLE_ASAN "Enable AddressSanitizer for builds" OFF) if (ENABLE_ASAN) message(STATUS "ASan enabled") diff --git a/make-app-release b/make-app-release new file mode 100755 index 0000000..0bde4e8 --- /dev/null +++ b/make-app-release @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -eu +set -o pipefail + +mkdir -p cmake-build-release +cmake -S . -B cmake-build-release -DBUILD_GUI=ON -DCMAKE_BUILD_TYPE=Release + +cd cmake-build-release +make clean +rm -fr kge.app* +make +zip -r kge.app.zip kge.app +sha256sum kge.app.zip +open . +cd .. diff --git a/make-release b/make-release new file mode 100755 index 0000000..559614f --- /dev/null +++ b/make-release @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -eu +set -o pipefail + +KTE_VERSION=$(grep 'KTE_VERSION' CMakeLists.txt | grep -o '"[0-9.]*"' | tr -d '"') +KTE_VERSION="v${KTE_VERSION}" + +if [ "${KTE_VERSION}" = "v" ] +then + echo "invalid version" > /dev/stderr + exit 1 +fi + +echo "kte version ${KTE_VERSION}" +TREE="$(git status --porcelain --untracked-files=no)" +if [ ! -z "${TREE}" ] +then + echo "tree is dirty" > /dev/stderr + exit 1 +fi + +git tag "${KTE_VERSION}" +git push && git push --tags + +( ./make-app-release ) \ No newline at end of file diff --git a/syntax/HighlighterEngine.cc b/syntax/HighlighterEngine.cc index bbcb3ea..636269f 100644 --- a/syntax/HighlighterEngine.cc +++ b/syntax/HighlighterEngine.cc @@ -75,9 +75,13 @@ HighlighterEngine::GetLine(const Buffer &buf, int row, std::uint64_t buf_version int best = -1; for (const auto &kv: state_cache_) { int r = kv.first; + // Only use cached state if it's for the current version and row still exists if (r <= row - 1 && kv.second.version == buf_version) { - if (r > best) - best = r; + // Validate that the cached row index is still valid in the buffer + if (r >= 0 && static_cast(r) < buf.Rows().size()) { + if (r > best) + best = r; + } } } if (best >= 0) {