katana_markdown_model/
lib.rs1#![deny(warnings, clippy::all)]
2#![allow(
3 missing_docs,
4 clippy::missing_errors_doc,
5 clippy::module_name_repetitions
6)]
7
8pub mod document;
9pub mod error;
10pub mod input;
11pub mod metadata;
12pub mod source;
13
14mod parser;
15
16pub use document::{
17 CodeBlockRole, DescriptionItem, DiagramKind, DollarMathBlockNode, EmojiNode,
18 FootnoteDefinitionNode, FootnoteReferenceNode, HeadingNode, HtmlBlockRole, ImageNode,
19 InlineCodeNode, InlineHtmlNode, InlineMathNode, InlineSpan, KmmDocument, KmmNode, KmmNodeId,
20 KmmNodeKind, LinkNode, ListItemNode, ListNode, TableAlignment, TableCell, TableNode, TableRow,
21 TextSpan,
22};
23pub use error::KmmError;
24pub use input::MarkdownInput;
25pub use metadata::{
26 ConflictedTarget, ContextAnchor, MetadataDocument, MetadataEntry, MetadataReconcileRequest,
27 MetadataReconcileResult, MetadataResolver, MetadataTarget, TargetResolution,
28 TargetResolutionKind, UnresolvedTarget,
29};
30pub use source::{ByteRange, LineColumn, LineColumnRange, RawSnippet, SourceSpan, TextFingerprint};
31
32pub struct KatanaMarkdownModel;
33
34impl KatanaMarkdownModel {
35 pub fn parse(input: MarkdownInput) -> Result<KmmDocument, KmmError> {
36 parser::MarkdownParser::new().parse(input)
37 }
38
39 pub fn reconcile_targets(
40 old_document: &KmmDocument,
41 new_document: &KmmDocument,
42 metadata: &MetadataDocument,
43 ) -> Vec<TargetResolution> {
44 MetadataResolver::new().reconcile(old_document, new_document, metadata)
45 }
46
47 pub fn reconcile(request: MetadataReconcileRequest) -> MetadataReconcileResult {
48 MetadataResolver::new().reconcile_request(request)
49 }
50}