A very simple document model and markup generator.
The somedoc::model
module provides the model to construct documents.
```rust fn readmemaker(cratename: &str, repoowner: &str, reponame: &str, headline: &str) -> Document { let tbd = Paragraph::plain_str("TBD"); let mut doc = Document::default();
doc.add_heading(Heading::heading_1(&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::heading_2("Example"))
.add_paragraph(tbd.clone())
.add_heading(Heading::heading_2("Features"))
.add_paragraph(tbd.clone())
.add_thematic_break()
.add_heading(Heading::heading_2("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::heading_2("Issues"))
.add_paragraph(tbd.clone());
doc
}
```
The somedoc::write
module contains a number of serializers that generate specific markup for different platforms.
The following writes a constructed document to stdout
as a Markdown document. The default flavor supported by
the writer is the CommonMark spec.
```rust use somedoc::write::writedocumentto_string; use somedoc::write::markdown::MarkdownFlavor;
let doc = makesomedocument();
let docstr = writedocumenttostring(&doc, MarkdownFlavor::default().into()).unwrap(); println!("{}", doc_str); ```
The following writes the same document out in the XWiki markup form.
```rust use somedoc::write::{writedocumentto_string, OutputFormat};
let doc = makesomedocument();
let docstr = writedocumenttostring(&doc, OutputFormat::XWiki).unwrap(); println!("{}", doc_str); ```
Version 0.2.3
fmt_json
.serde
and serde_json
.version
field to the Document
to allow for tool checking, this will be the crate version on write. Serialize
/Deserialize
for SerdeVersion 0.2.2
inner_impl
macro for consistent use of inner
and into_inner
methods.
link
to inner
on Image
.From
and from
implementations on inline content.label
to text
on model::block::table::Column
.Captioned
trait to HasCaption
for consistency.Text
with Caption
as type for HyperLink
caption; implemented
HasCaption
also.String
.From<>
instead in Caption
, Code
,
Formatted
, Heading
, Image
.new_with_
functions to simply with_
.ParagraphStyle
, made alignment
a single value property on Paragraph
.
Paragraph
and table::Column
.HasAlignment
trait (and macro) for consistency between paragraph and column.Version 0.2.1
This is a significant update, some APIs will have changed, but the plan is that these new API forms will be stabilized toward a 0.3.0 release that can be relied on for non-breaking changes.
fmt_html
, fmt_latex
, fmt_markdown`,
etc. with the default feature including all of these.Writer
, and ConfigurableWriter
to the write
module to capture the
instantiation of a writer struct.Anchor
type to a new Label
, it is no longer a stand-alone inline
value, but has been added as a property to most block types.Abstract
out of the Metadata
enum and made it a property of the document
proper. This also affects the visitor API.label
/alt_text
on HyperLink
to caption
.Result<>
where it wasn't needed.log
.pretty_assertions
for better comparison of test failures.Version 0.2.0
XWiki
writer to use it.Math
(inline), and MathBlock
(block) constructs.Caption
type and implementation for Code
, MathBlock
, and Table
.Deref
for some String newtypes (Anchor
, Caption
, Emoji
, and Text
).proptest
for the String newtypes listed above.Version 0.1.7
Version 0.1.6
model::inline::emoji_names
module, but only enabled for emoji_names
feature.readme_maker
example, this is used in the README and lib.rs documentation.write_code
function.TextStyle
-> SpanStyle
, added Sized
variant.read
module as it was currently empty.model::visitor
module, too many changes to stabilize yet.Version 0.1.5 (not published)
Version 0.1.4
Anchor
into each writer. Version 0.1.3
Formatted
alongside CodeBlock
.Version 0.1.2
Version 0.1.1
Version 0.1.0