[−][src]Crate somedoc
A very simple document model and set of markup wriers.
This crate provides a simple document model
that captures structure of simple documents. This is
not an all-purpose model, it does not have the richness of full document systems but is intended
for tools that simply need to generate useful documentation or reports.
The model can then be serialized into specific formats using the formatters in the write
module. Currently various flavors of Markdown are implemented as well as the XWiki format.
Model
The somedoc::model
module provides the model to construct documents.
Example
use somedoc::model::block::{HasBlockContent, Heading, List, Paragraph}; use somedoc::model::document::Document; use somedoc::model::inline::{HasInlineContent, HyperLink, Image, Span}; fn readme_maker(crate_name: &str, repo_owner: &str, repo_name: &str, headline: &str) -> Document { let tbd = Paragraph::plain_str("TBD"); let mut doc = Document::default(); doc.add_heading(Heading::section(&format!("Crate {}", crate_name))) .add_paragraph(Paragraph::plain_str(headline)); let mut para = Paragraph::default(); para.add_image(Image::new(HyperLink::external_with_label_str( "https://img.shields.io/badge/license-mit-118811.svg", "MIT License", ))) .add_image(Image::new(HyperLink::external_with_label_str( "https://img.shields.io/badge/Min%20Rust-1.40-green.svg", "Build", ))) .add_image(Image::new(HyperLink::external_with_label_str( &format!( "https://github.com/{}/{}/workflows/Rust/badge.svg", repo_owner, repo_name ), "Minimum Rust Version", ))) .add_image(Image::new(HyperLink::external_with_label_str( &format!( "https://github.com/{}/{}/workflows/Security%20audit/badge.svg", repo_owner, repo_name ), "Audit", ))); doc.add_paragraph(para) .add_thematic_break() .add_paragraph(tbd.clone()) .add_heading(Heading::sub_section("Example")) .add_paragraph(tbd.clone()) .add_heading(Heading::sub_section("Features")) .add_paragraph(tbd.clone()) .add_thematic_break() .add_heading(Heading::sub_section("Changes")) .add_paragraph(Paragraph::bold_str("Version 0.1.0")); let mut list = List::default(); list.add_item_from(Span::plain_str("Initial release.").into()); doc.add_list(list) .add_heading(Heading::sub_section("Issues")) .add_paragraph(tbd.clone()); doc }
Writers
The somedoc::write
module contains a number of serializers that generate specific markup for different platforms.
Example
The following writes a constructed document to stdout
as a Markdown document. The default flavor supported by
the writer is the CommonMark spec.
use somedoc::write::write_document_to_string; use somedoc::write::markdown::MarkdownFlavor; let doc = make_some_document(); let doc_str = write_document_to_string(&doc, MarkdownFlavor::default().into()).unwrap(); println!("{}", doc_str);
The following writes the same document out in the XWiki markup format.
use somedoc::write::{write_document_to_string, OutputFormat}; let doc = make_some_document(); let doc_str = write_document_to_string(&doc, OutputFormat::XWiki).unwrap(); println!("{}", doc_str);
Features
- emoji_names; adds a new module
emoji_names
tomodel::inline
which only contains string constants for commonly supported emoji names. These can then be used to constructEmoji
values for inline characters. This feature is not included by default.
Modules
error | Common |
model | The document model here comprises a document type with nested blocks comprised of blocks and inline content. |
write | Provides the functions, and format types, to serialize a |
Macros
strike | Create a new |
text | Create a new |
textbf | Create a new |
textit | Create a new |
textsc | Create a new |
textsl | Create a new |
texttt | Create a new |