UNPKG

legal-markdown-js

Version:

Node.js implementation of LegalMarkdown for processing legal documents with markdown and YAML - Complete feature parity with Ruby version

103 lines 4.03 kB
/** * Remark plugin for Legal Markdown cross-references * * This plugin processes internal cross-references in Legal Markdown documents * using AST-based processing to avoid text contamination issues. It handles: * - Header extraction with |key| syntax (l. **Title** |key|) * - Section numbering based on frontmatter formats * - Cross-reference resolution throughout the document * - Integration with field tracking for highlighting * * Architecture: * 1. First pass: Extract cross-reference definitions from headers * 2. Generate section numbers based on legal numbering formats * 3. Second pass: Replace |key| references with section numbers * 4. Integrate with field tracker for highlighting support * * @example * ```typescript * import { unified } from 'unified'; * import remarkParse from 'remark-parse'; * import remarkCrossReferences from './cross-references.js'; * * const processor = unified() * .use(remarkParse) * .use(remarkCrossReferences, { metadata: frontmatterData }); * * const result = await processor.process(content); * ``` * * @module */ import type { Plugin } from 'unified'; import type { Root } from 'mdast'; import type { YamlValue } from '../../types/index.js'; /** * Cross-reference definition extracted from headers */ interface CrossReferenceDefinition { key: string; level: number; sectionNumber: string; sectionText: string; headerText: string; position?: { line: number; column: number; }; } /** * Section counters for tracking hierarchical numbering */ interface SectionCounters { level1: number; level2: number; level3: number; level4: number; level5: number; level6: number; } /** * Plugin options for cross-reference processing */ interface CrossReferenceOptions { /** Document metadata containing level formats and other data */ metadata: Record<string, YamlValue>; /** Enable debug logging */ debug?: boolean; /** Enable field tracking with highlighting during AST processing */ enableFieldTracking?: boolean; } /** * Update section counters based on current level */ declare function updateSectionCounters(counters: SectionCounters, level: number): void; /** * Generate section number based on level and counters with academic format support */ declare function generateSectionNumber(level: number, counters: SectionCounters, levelFormats: Record<string, string>): string; /** * Extract cross-reference definitions from heading nodes */ declare function extractCrossReferencesFromAST(root: Root, metadata: Record<string, YamlValue>, _debug?: boolean): CrossReferenceDefinition[]; /** * Clean header definitions by removing |key| patterns from headers * Only removes the definition pattern at the end of headers, preserving references */ declare function cleanHeaderDefinitionsInAST(root: Root, crossReferences: CrossReferenceDefinition[]): void; /** * Replace cross-reference usage in text nodes with optional field tracking */ declare function replaceCrossReferencesInAST(root: Root, crossReferences: CrossReferenceDefinition[], metadata: Record<string, YamlValue>, enableFieldTracking?: boolean): void; /** * Format metadata values based on type and context */ declare function formatMetadataValue(value: YamlValue | undefined, key: string, metadata: Record<string, YamlValue>): string; /** * Remark plugin for processing cross-references in Legal Markdown documents */ declare const remarkCrossReferences: Plugin<[CrossReferenceOptions], Root>; export default remarkCrossReferences; export type { CrossReferenceOptions, CrossReferenceDefinition }; export { updateSectionCounters as _updateSectionCounters, generateSectionNumber as _generateSectionNumber, extractCrossReferencesFromAST as _extractCrossReferencesFromAST, cleanHeaderDefinitionsInAST as _cleanHeaderDefinitionsInAST, replaceCrossReferencesInAST as _replaceCrossReferencesInAST, formatMetadataValue as _formatMetadataValue, }; //# sourceMappingURL=cross-references.d.ts.map