A very simple document model and markup generator.
The somedoc::model
module provides the model to construct documents.
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::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 formats for different
platforms. So far, this includes HTML, LaTeX, and Markdown of different flavors.
A JSON representation of the library's Document
structure is also provided and can be read as well as written to
allow for tool interchange.
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 form.
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);
Version 0.2.10
Added: use basic HTML output for tables in CommonMark.
Version 0.2.9
Fixed: using id macro for anchors in XWiki output.
Version 0.2.8
Fixed: trailing '|' removed from table rows for XWiki output.
Version 0.2.7
- Testing: test the
to_string
andfrom_str
functionality forOutputFormat
.OutputFormat
now delegates the addition, and parsing, of flavors.
Version 0.2.6
- Testing: better link testing.
- Fixed: link output for non-XWiki markdown.
- Fixed: link output for HTML.
- Fixed: closed tag in HTML wasn't.
- Fixed: XWiki writer didn't do line breaks correctly.
- Fixed: XWiki line breaks.
- Refactor: simplified
Image
to have path/inner
andalt_text
fields.- This reduced confusion with captions on links and images.
- Added: helper functions and constructors to
Image
.
- Added:
Label::copy_from
constructor. - Added: missing
math
andadd_math
functions fromHasInlineContent
. - Added: missing
Into<BlockContent>
forMath
.
Version 0.2.5
- Testing: added tests for labels, paragraph alignment, images, math, block quotes, and some text styles.
- Testing: added tests for remaining markdown flavors.
- Added: missing
math
andadd_math
functions forHasBlockContent
trait. - Added: new preamble elements to correctly layout and caption equations.
- Added: new
FrontMatter
enum for generated tables of content. - Added: new helper functions to
Span
. - Fixed: LaTeX writer had incorrect indentation for image blocks.
- Fixed: HTML writer had incorrect indentation for image and math blocks.
- Fixed: markdown writer swapping the markdown/xwiki format for block quotes.
Version 0.2.4
- Fixed: bug in LaTeX writer emitting two
\ref
commands for internal references. - Fixed: bug in HTML writer which did not add
id
attributes for labels. - Fixed: bug in LaTeX writer not clearing table headings.
- Fixed: bug in
Label::is_valid
matching spaces.
Version 0.2.3
- Added: JSON writer
- Added a feature
fmt_json
. - Added dependencies on
serde
andserde_json
. - Also added a
version
field to theDocument
to allow for tool checking, this will be the crate version on write. - All structures now support
Serialize
/Deserialize
for Serde
- Added a feature
- Added JSON reader using the same Serde support.
Version 0.2.2
- Added: mostly complete API/library documentation.
- Added:
inner_impl
macro for consistent use ofinner
andinto_inner
methods.- Refactor: this required renaming
link
toinner
onImage
.
- Refactor: this required renaming
- Fixed: Duplicate
From
andfrom
implementations on inline content. - Refactor: renamed
label
totext
onmodel::block::table::Column
. - Refactor: renamed
Captioned
trait toHasCaption
for consistency. - Refactor: replaced
Text
withCaption
as type forHyperLink
caption; implementedHasCaption
also. - Refactor: made definition lists only a single level, and the term is simply a
String
. - Refactor: removed constructors that only took a single value and use
From<>
instead inCaption
,Code
,Formatted
,Heading
,Image
. - Refactor: renaming
new_with_
functions to simplywith_
. - Refactor: removed
ParagraphStyle
, madealignment
a single value property onParagraph
.- Moved the Alignment enum to its own module shared with
Paragraph
andtable::Column
. - Added new
HasAlignment
trait (and macro) for consistency between paragraph and column.
- Moved the Alignment enum to its own module shared with
- Clean-up: fixed all Clippy warnings.
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.
- Added: additional features in the HTML writer. It should be complete pending testing.
- Added: complete writer implementation for LaTeX. It should be complete pending testing.
- Added: configuration features for each writer,
fmt_html
,fmt_latex
, fmt_markdown`, etc. with the default feature including all of these. - Added:
Writer
, andConfigurableWriter
to thewrite
module to capture the instantiation of a writer struct. - Added: more library/API documentation, but not all yet.
- Refactor: combined all markdown-like formats into a common module.
- Refactor: moved the
Anchor
type to a newLabel
, it is no longer a stand-alone inline value, but has been added as a property to most block types. - Refactor: moved
Abstract
out of theMetadata
enum and made it a property of the document proper. This also affects the visitor API. - Refactor: renamed
label
/alt_text
onHyperLink
tocaption
. - Clean-up: made the document API easier, removing
Result<>
where it wasn't needed. - Clean-up: removed the unused dependency on
log
. - Testing: added dependency on
pretty_assertions
for better comparison of test failures. - Testing: creating test cases across formats.
Version 0.2.0
- Added: new visitor traits and migrated the
XWiki
writer to use it. - Added: new HTML writer using the new visitor traits.
- Added: new
Math
(inline), andMathBlock
(block) constructs. - Added: new
Caption
type and implementation forCode
,MathBlock
, andTable
. - Added:
Deref
for some String newtypes (Anchor
,Caption
,Emoji
, andText
). - Testing: using
proptest
for the String newtypes listed above.
Version 0.1.7
- Fixed: fixed a bug in HeadingLevel/markdown generation.
Version 0.1.6
- Added: started on library documentation.
- Added:
model::inline::emoji_names
module, but only enabled foremoji_names
feature. - Added:
readme_maker
example, this is used in the README and lib.rs documentation. - Fixed: fixed a bug in XWiki
write_code
function. - Refactor: document metadata, and Markdown writer accordingly.
- Refactor: renamed
TextStyle
->SpanStyle
, addedSized
variant. - Clean-up: the
read
module as it was currently empty. - Clean-up: femoved the
model::visitor
module, too many changes to stabilize yet. - Testing: some initial test cases.
Version 0.1.5 (not published)
- Added some more replacement rules for XWiki anchors.
Version 0.1.4
- Moved the rules for formatting an
Anchor
into each writer.
Version 0.1.3
- Added
Formatted
alongsideCodeBlock
. - Removed some additional blank lines from both Markdown and XWiki writers.
Version 0.1.2
- Fixed nested list bug in XWiki writer.
Version 0.1.1
- Added cargo-husky for git hooks.
- Fixed bug in tables for XWiki writer.
Version 0.1.0
- Initial commit. Basic model working, initial Markdown and XWiki writers.