parser: nm/parser.nepl に関する機能を提供するライブラリ
- このモジュールの公開 API を提供します。
- 実装の変更時に最小限の doctest 実行経路を維持します。
- 利用時は各関数の「目的」「注意」「計算量」を確認してください。
#entry main
#target std
fn main <()*>i32> ():
()
0FenceRes: 構造体の概要
- FenceRes の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 定義そのものは O(1) です。
ParaRes: 構造体の概要
- ParaRes の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 定義そのものは O(1) です。
is_empty_line: 主な用途
- is_empty_line の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
is_hr_line: 主な用途
- is_hr_line の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
is_nest_break_line: 主な用途
- is_nest_break_line の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
is_fence_start: 主な用途
- is_fence_start の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
is_heading_start: 主な用途
- is_heading_start の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
trim_cr: 主な用途
- trim_cr の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
safe_line: 主な用途
- safe_line の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
close_one_section: 主な用途
- close_one_section の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
close_to_level: 主な用途
- close_to_level の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
close_all_sections: 主な用途
- close_all_sections の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
parse_heading: 主な用途
- parse_heading の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
parse_fence: 主な用途
- parse_fence の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
parse_paragraph: 主な用途
- parse_paragraph の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
parse_inlines: 主な用途
- parse_inlines の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
parse_markdown: 拡張 Markdown 文字列を Document AST に変換する
- 見出し Nest / 段落 / 水平線 / コードフェンスを解析し、後段処理で使える AST を生成します。
- nm 系 API の入口として、HTML 変換・JSON 変換の双方から利用します。
- 行単位で走査し、section stack で入れ子構造を管理します。
- 行内要素(ruby/gloss/math)は
parse_inlinesに委譲します。
- 現状は
Resultではなく AST を直接返す設計です。診断回復は今後の拡張対象です。
- O(n)(n は入力サイズ)。
#entry main
#target core
#import "alloc/string" as *
#import "nm/parser" as *
fn main <()*>i32> ():
let d <Document> parse_markdown "# T\n\nx\n";
let j <str> document_to_json d;
if and str_starts_with j "{\"t\":\"doc\"" gt len j 0 0 1json_escape: 主な用途
- json_escape の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
inlines_to_json: 主な用途
- inlines_to_json の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
node_to_json: 主な用途
- node_to_json の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
nodes_to_json: 主な用途
- nodes_to_json の主な用途と呼び出し方を示します。
- 定義済み処理をそのまま呼び出す薄いラッパで構成されています。
- 引数の値は関数呼び出しで移動するため、再利用時は束縛し直してください。
- 本体処理に準じます。
document_to_json: Document AST を JSON 文字列へ変換する
- AST の内部構造を機械可読な JSON に変換して、デバッグ・テスト・CLI 出力に利用します。
- ノード種別を
tフィールドで表現し、子要素は再帰的にシリアライズします。 - 文字列は
json_escapeで最小限のエスケープを適用します。
- JSON スキーマは開発中であり、将来変更される可能性があります。
- O(m)(m は出力 JSON バイト数)。
#entry main
#target core
#import "alloc/string" as *
#import "nm/parser" as *
fn main <()*>i32> ():
let d <Document> parse_markdown "plain\n";
let j <str> document_to_json d;
if str_starts_with j "{\"t\":\"doc\"" 0 1