From 80b70a87d09efada2d688ba77f5e35118593c1a1 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Tue, 3 Mar 2026 15:30:26 +0100 Subject: [PATCH] add link processing --- src/parser.ts | 1 + src/processors/asciidoc.ts | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index e12145c..b3420c1 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -72,6 +72,7 @@ export class Parser { enableLaTeX: this.options.enableLaTeX, enableMusicalNotation: this.options.enableMusicalNotation, originalContent: content, // Pass original for LaTeX detection + linkBaseURL: this.options.linkBaseURL, // Pass linkBaseURL for link processing } ); diff --git a/src/processors/asciidoc.ts b/src/processors/asciidoc.ts index 5155214..47a81ee 100644 --- a/src/processors/asciidoc.ts +++ b/src/processors/asciidoc.ts @@ -1,6 +1,6 @@ import asciidoctor from '@asciidoctor/core'; import { ProcessResult } from '../types'; -import { extractTOC, sanitizeHTML } from './html-utils'; +import { extractTOC, sanitizeHTML, processLinks } from './html-utils'; import { postProcessHtml } from './html-postprocess'; const asciidoctorInstance = asciidoctor(); @@ -10,6 +10,7 @@ export interface ProcessOptions { enableLaTeX?: boolean; enableMusicalNotation?: boolean; originalContent?: string; // Original content for LaTeX detection + linkBaseURL?: string; // Base URL for link processing } /** @@ -93,11 +94,21 @@ export async function processAsciidoc( enableMusicalNotation, }); + // Process links: add target="_blank" to external links + const processedWithLinks = options.linkBaseURL + ? processLinks(processed, options.linkBaseURL) + : processed; + // Also process TOC const tocSanitized = sanitizeHTML(toc); const tocProcessed = postProcessHtml(tocSanitized, { enableMusicalNotation: false, // Don't process music in TOC }); + + // Process links in TOC as well + const tocProcessedWithLinks = options.linkBaseURL + ? processLinks(tocProcessed, options.linkBaseURL) + : tocProcessed; // Check for LaTeX in original content (more reliable than checking HTML) const contentToCheck = options.originalContent || content; @@ -109,8 +120,8 @@ export async function processAsciidoc( ); return { - content: processed, - tableOfContents: tocProcessed, + content: processedWithLinks, + tableOfContents: tocProcessedWithLinks, hasLaTeX, hasMusicalNotation, nostrLinks: [], // Will be populated by metadata extraction @@ -123,8 +134,10 @@ export async function processAsciidoc( // Fallback to plain text with error logging const errorMessage = error instanceof Error ? error.message : String(error); // Use process.stderr.write for Node.js compatibility instead of console.error - if (typeof process !== 'undefined' && process.stderr) { - process.stderr.write(`Error processing AsciiDoc: ${errorMessage}\n`); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const nodeProcess = (globalThis as any).process; + if (nodeProcess?.stderr) { + nodeProcess.stderr.write(`Error processing AsciiDoc: ${errorMessage}\n`); } // Escape HTML in content for safe display