UNPKG

legal-markdown-js

Version:

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

131 lines 4.3 kB
/** * Remark Plugin for Legal Header Processing * * This plugin processes legal headers and numbering in markdown documents using * the remark AST. It provides automatic numbering, formatting, and section * management for legal document structure. * * Features: * - Automatic header numbering (l., ll., lll., etc.) * - Section references and cross-referencing * - Customizable numbering formats * - Reset and continuation options * - Indentation management * * @example * ```typescript * import { unified } from 'unified'; * import remarkParse from 'remark-parse'; * import remarkStringify from 'remark-stringify'; * import { remarkHeaders } from './headers.js'; * * const processor = unified() * .use(remarkParse) * .use(remarkHeaders, { * metadata: { 'level-one': 'l', 'level-two': 'll' }, * noReset: false, * noIndent: false * }) * .use(remarkStringify); * ``` * * @module */ import { Plugin } from 'unified'; import { Root, Heading } from 'mdast'; import type { YamlValue } from '../../types/index.js'; /** * Options for the remark headers plugin * @interface RemarkHeadersOptions */ export interface RemarkHeadersOptions { /** Document metadata containing header configurations */ metadata: Record<string, YamlValue>; /** Disable automatic numbering reset */ noReset?: boolean; /** Disable automatic indentation */ noIndent?: boolean; /** Custom header patterns */ headerPatterns?: Record<string, string>; /** Enable debug logging */ debug?: boolean; } /** * Header numbering state */ interface HeaderState { levelOne: number; levelTwo: number; levelThree: number; levelFour: number; levelFive: number; levelSix: number; levelSeven: number; levelEight: number; levelNine: number; customLevels: Map<string, number>; } /** * Header configuration extracted from metadata */ interface HeaderConfig { levelOne: string | null; levelTwo: string | null; levelThree: string | null; levelFour: string | null; levelFive: string | null; levelSix: string | null; levelSeven: string | null; levelEight: string | null; levelNine: string | null; customFormats: Map<string, string>; } /** * Remark plugin for processing legal headers * * This plugin transforms markdown headers into properly numbered legal headers * according to legal document conventions. It supports multiple numbering * formats and can maintain state across the document. * * @param options - Configuration options for header processing * @returns Remark plugin transformer function */ export declare const remarkHeaders: Plugin<[RemarkHeadersOptions], Root>; /** * Extract header configuration from document metadata */ declare function extractHeaderConfig(metadata: Record<string, YamlValue>): HeaderConfig; /** * Process a single header node */ declare function processHeader(node: Heading, config: HeaderConfig, state: HeaderState, options: { noReset: boolean; noIndent: boolean; debug: boolean; }): void; /** * Get header format for a given level */ declare function getHeaderFormat(level: number, config: HeaderConfig): string; /** * Update header numbering state based on current level */ declare function updateHeaderState(level: number, state: HeaderState, noReset: boolean): void; /** * Format header text with numbering */ declare function formatHeaderText(node: Heading, format: string, number: number, state: HeaderState, options: { noIndent: boolean; debug: boolean; }): string | null; /** * Extract text content from header node */ declare function extractTextContent(node: Heading): string; /** * Apply numbering format with actual number */ declare function applyNumberingFormat(format: string, number: number, level: number, state: HeaderState): string; declare function updateHeaderNode(node: Heading, newText: string): void; export { extractHeaderConfig as _extractHeaderConfig, processHeader as _processHeader, getHeaderFormat as _getHeaderFormat, updateHeaderState as _updateHeaderState, formatHeaderText as _formatHeaderText, extractTextContent as _extractTextContent, applyNumberingFormat as _applyNumberingFormat, updateHeaderNode as _updateHeaderNode, }; //# sourceMappingURL=headers.d.ts.map