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
TypeScript
/**
* 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