mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-14 22:42:46 +00:00
* Add craft-wordmodel: WordCraft's document model without its editing code WordCraft's crates/doc (wordcraft-doc, at 07f97737) moved as it is, so the DOCX, RTF, ODT and other text-format crates can read into and write from one model. Module paths, type names and serde attributes are unchanged: an app that re-exports the crate keeps its native file format. Left in the app: range editing (edit.rs), IME text and equation editing. Not model, and already in craft-libs: code pages (craft-rtf), the ZIP entry-count check (craft-opc), the compound-file guard (craft-cfb). The paragraph walks moved to walk.rs and the unit helpers of wordcraft-geom to geom.rs. * craft-wordmodel: math_tree, the arguments of an equation node and a walk over its runs The DOCX reader and writer walk an equation's runs. The walk and the child accessors it uses were in WordCraft's equation editor (math_edit.rs), which stays in the app; they are structure, not editing. * craft-wordmodel: keep the document operations (edit.rs) with the model The DOCX and RTF readers use them: alternative-format chunks are merged into a document with adopt_blocks, and a reader formats ranges with format_range and inserts objects. They operate on the document, not on a view, so they belong beside it. The tests that drove them come back with them; the paragraph walks stay in walk.rs and edit re-exports them. base64 0.23, as WordCraft and craft-offcrypto use. * Add craft-flow: the flow model the text formats map to, on craft-wordmodel WordCraft's crates/formats/src/model (07f97737) moved as it is: Flow, FBlock, Para, Inline, Fmt, tables and cells, pictures, to_doc and from_doc, picture sniffing, colours, base64 and the Dropped report. Only the paths changed (wordcraft_doc is craft_wordmodel); the report helpers are public so the format crates can call them; the image re-encoding helper stays with WordCraft's RTF writer. * Add craft-markdown: Markdown read and written, on craft-flow WordCraft's crates/formats/src/markdown (07f97737) with its 35 tests, moved onto craft-flow and craft-wordmodel. Character references come from craft-html. The table cell budget lives in craft-flow, which names it in its warning. Two test lines that wrote plain text through WordCraft's txt module stay in WordCraft.
24 lines
1.3 KiB
Markdown
24 lines
1.3 KiB
Markdown
# craft-markdown
|
|
|
|
Markdown, read and written: a CommonMark subset plus GitHub pipe tables and strikethrough, to and
|
|
from the [craft-flow](../flow/README.md) model and a craft-wordmodel `Document`.
|
|
|
|
- Read (`import`, `import_on`, `parse` for the flow): ATX and setext headings, paragraphs with
|
|
soft and hard breaks, block quotes, fenced and indented code, thematic breaks, bullet and
|
|
ordered lists nested by indentation (with their start number), GFM tables, link reference
|
|
definitions; inlines by the CommonMark delimiter algorithm: emphasis and strong, `~~strike~~`,
|
|
code spans, inline, reference and autolinks, images (`data:` URIs become pictures, others their
|
|
alt text), backslash escapes, character references, HTML comments, `<br>` and `<a id>` anchors.
|
|
- Write (`export`): the same constructs; pictures become ``.
|
|
|
|
```rust
|
|
let doc = craft_markdown::import("# Title\n\nSome *emphasis* and a [link](https://example.com).\n");
|
|
assert_eq!(craft_markdown::export(&doc).trim_end(), "# Title\n\nSome *emphasis* and a [link](https://example.com).");
|
|
```
|
|
|
|
Input is hostile. Nesting is bounded, and table cells are capped (`MAX_TABLE_CELLS` in all, plus
|
|
the model's row and column limits), with one warning per kind of thing left out.
|
|
|
|
Moved from WordCraft (`crates/formats/src/markdown`, `07f97737`) with its tests; character
|
|
references come from craft-html.
|