Syntax highlighting: wires the already-pinned HighlighterSwiftBridge (MarkdownEngineCodeBlocks) into services.syntaxHighlighter on every NativeTextViewWrapper, shared via one CodeSyntaxHighlighting.shared instance (JSContext init is expensive, don't build one per text view). Line numbers: app-side CodeBlockLineNumberGutter overlay positioned via onCodeBlockSelectionChange's rect, widens codeBlock.horizontalIndent to make room. Marked WIP: line-number overlays (and the engine's own built-in copy-button overlay) stay empty on cold document load until the user's first click/keystroke — a real gap in swift-markdown-engine's rebuild path (cachedCodeBlockTokens is only ever seeded by AppKit text- delegate callbacks, not the programmatic text-binding rebuild), not fixable from the app side without patching the package. See TODO.local.md for the full trace and options. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
12 lines
384 B
Swift
12 lines
384 B
Swift
#if os(macOS)
|
|
import MarkdownEngineCodeBlocks
|
|
|
|
/// One `HighlighterSwiftBridge` for the whole app. It owns a JavaScriptCore
|
|
/// context (expensive to spin up) plus its own highlight cache, so every
|
|
/// `NativeTextViewWrapper` should share this instance rather than each
|
|
/// constructing its own.
|
|
enum CodeSyntaxHighlighting {
|
|
static let shared = HighlighterSwiftBridge()
|
|
}
|
|
#endif
|