diff --git a/src/ui-styles.ts b/src/ui-styles.ts index f62171d..96d0134 100644 --- a/src/ui-styles.ts +++ b/src/ui-styles.ts @@ -830,6 +830,43 @@ const styles = ` padding-left: 6px; } + /* Code blocks generated by markdown parser only */ + .message-content pre.code-block { + background-color: var(--vscode-textCodeBlock-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + padding: 12px; + margin: 8px 0; + overflow-x: auto; + font-family: var(--vscode-editor-font-family); + font-size: 13px; + line-height: 1.5; + white-space: pre; + } + + .message-content pre.code-block code { + background: none; + border: none; + padding: 0; + color: var(--vscode-editor-foreground); + } + + .code-line { + white-space: pre-wrap; + word-break: break-word; + } + + /* Inline code */ + .message-content code { + background-color: var(--vscode-textCodeBlock-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 3px; + padding: 2px 4px; + font-family: var(--vscode-editor-font-family); + font-size: 0.9em; + color: var(--vscode-editor-foreground); + } + .priority-badge { display: inline-block; padding: 2px 6px; diff --git a/src/ui.ts b/src/ui.ts index bf38f15..0381dea 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -2260,13 +2260,44 @@ const html = ` function parseSimpleMarkdown(markdown) { - const lines = markdown.split('\\n'); + // First, handle code blocks before line-by-line processing + let processedMarkdown = markdown; + + // Handle multi-line code blocks with triple backticks + // Using RegExp constructor to avoid backtick conflicts in template literal + const codeBlockRegex = new RegExp('\\\`\\\`\\\`(\\\\w*)\\n([\\\\s\\\\S]*?)\\\`\\\`\\\`', 'g'); + processedMarkdown = processedMarkdown.replace(codeBlockRegex, function(match, lang, code) { + const language = lang || 'plaintext'; + // Process code line by line to preserve formatting like diff implementation + const codeLines = code.split('\\n'); + let codeHtml = ''; + + for (const line of codeLines) { + const escapedLine = escapeHtml(line); + codeHtml += '
' + codeHtml + '\\n';
+ });
+
+ // Handle inline code with single backticks
+ const inlineCodeRegex = new RegExp('\\\`([^\\\`]+)\\\`', 'g');
+ processedMarkdown = processedMarkdown.replace(inlineCodeRegex, '$1');
+
+ const lines = processedMarkdown.split('\\n');
let html = '';
let inUnorderedList = false;
let inOrderedList = false;
for (let line of lines) {
line = line.trim();
+
+ // Check if this is a code block
+ if (line.includes('$1');