import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; export function openChangelog(context: vscode.ExtensionContext) { const panel = vscode.window.createWebviewPanel( 'hplToolbox.changelog', 'HPL Toolbox Changelog', vscode.ViewColumn.One, { enableScripts: false } ); const changelogPath = path.join(context.extensionPath, 'CHANGELOG.md'); let markdown = '# Changelog\n\nCHANGELOG.md was not found.'; try { markdown = fs.readFileSync(changelogPath, 'utf8'); } catch { // Keep the fallback text readable in packaged or development installs. } panel.webview.html = getHtml(renderMarkdown(markdown)); } function getHtml(content: string): string { return `
${content}
`; } function renderMarkdown(markdown: string): string { const lines = markdown.replace(/\r\n/g, '\n').split('\n'); const html: string[] = []; let inList = false; const closeList = () => { if (inList) { html.push(''); inList = false; } }; for (const rawLine of lines) { const line = rawLine.trim(); if (!line) { closeList(); continue; } const heading = line.match(/^(#{1,3})\s+(.+)$/); if (heading) { closeList(); const level = Math.min(heading[1].length, 2); html.push(`${escapeHtml(heading[2])}`); continue; } const listItem = line.match(/^-\s+(.+)$/); if (listItem) { if (!inList) { html.push('