1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
/*! * A very simple document model and set of markup wriers. * * This crate provides a simple document [`model`](model/index.html) 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`](write/index.html) * 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 * * ```rust * 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](https://spec.commonmark.org/0.29/) spec. * * ```rust * # use somedoc::model::Document; * use somedoc::write::write_document_to_string; * use somedoc::write::markdown::MarkdownFlavor; * * # fn make_some_document() -> Document { Document::default() } * 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](https://www.xwiki.org/xwiki/bin/view/Documentation/UserGuide/Features/XWikiSyntax/) * markup format. * * ```rust * # use somedoc::model::Document; * use somedoc::write::{write_document_to_string, OutputFormat}; * * # fn make_some_document() -> Document { Document::default() } * 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` to `model::inline` which only contains string * constants for commonly supported emoji names. These can then be used to construct `Emoji` values * for inline characters. This feature is not included by default. */ #[macro_use] extern crate error_chain; #[macro_use] extern crate lazy_static; #[macro_use] extern crate log; // ------------------------------------------------------------------------------------------------ // Modules // ------------------------------------------------------------------------------------------------ #[doc(hidden)] #[macro_use] pub mod macros; pub mod error; pub mod model; //pub mod read; pub mod write;