Skip to main content

katana_markdown_model/
lib.rs

1#![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}