Categorygithub.com/miekg/mmark
modulepackage
1.3.6
Repository: https://github.com/miekg/mmark.git
Documentation: pkg.go.dev

# README

Mmark

Mmark is a powerful markdown processor Go geared towards writing IETF documents. It is, however, also suited for writing books and other technical documentation.

Further documentation can be found at my site. A complete syntax document can be found here.

With Mmark your can write RFCs using markdown. Mmark (written in Go) provides an advanced markdown dialect that processes a (single) file to produce internet-drafts in XML format. Internet-drafts written in mmark can produce xml2rfc v2, xml2rfc v3 and HTML5 output.

It also allows for writing large documents such as technical books, like my Learning Go book. Sample text output of this book (when rendered as an I-D) can be found here. It is not perfect due to limitations in xml2rfc version 2. Fully rendered HTML version can be found here.

Mmark is a fork of blackfriday which is a Markdown processor implemented in Go. It supports a number of extensions, inspired by Leanpub, kramdown and Asciidoc, that allows for large documents to be written.

Example documents written in Mmark can be found in the rfc/ directory.

Mmark adds the following syntax elements to black friday:

  • TOML titleblock.
  • Including other files.
  • More enumerated lists and task-lists.
  • Table and codeblock captions.
  • Quote attribution (quote "captions").
  • Table footers, header and block tables.
  • Subfigures.
  • Inline Attribute Lists.
  • Indices.
  • Citations.
  • Abstract/Preface/Notes sections.
  • Parts.
  • Asides.
  • Main-, middle- and backmatter divisions.
  • Math support.
  • Example lists.
  • HTML Comment parsing.
  • BCP14 (RFC2119) keyword detection.
  • Include raw XML references.
  • Abbreviations.
  • Super- and subscript.
  • Callouts in code blocks.

Usage

In the mmark subdirectory you can build the mmark tool:

% cd mmark
% go build
% ./mmark -version
1.3.4

To output v2 xml just give it a markdown file and:

% ./mmark/mmark -xml2 -page mmark2rfc.md

Making a draft in text form:

% ./mmark/mmark -xml2 -page mmark2rfc.md > x.xml \
&& xml2rfc --text x.xml \
&& rm x.xml && mv x.txt mmark2rfc.txt

Outputting v3 xml is done with the -xml switch. There is not yet a processor for this XML, but you should be able to validate the resulting XML against the schema from the xml2rfc v3 draft. I'm trying to stay current with the latest draft for the V3 spec: https://tools.ietf.org/html/draft-iab-xml2rfc-03

Running from a Docker Container

To use mmark and xml2rfc without installing and configuring the separate software packages and dependencies, you can also use mmark via a Docker container. You can use https://github.com/paulej/rfctools to build a Docker image or you can use the one already created and available in Docker Hub (https://hub.docker.com/r/paulej/rfctools/).

To use Docker, you invoke commands like this:

% docker run --rm paulej/rfctools mmark -version
1.3.4

To output a v2 XML file as demonstrated in the previous section, use this command:

% docker run --rm -v $(pwd):/rfc paulej/rfctools mmark -xml2 -page mmark2rfc.md

Making a draft in text form:

% docker run --rm -v $(pwd):/rfc paulej/rfctools mmark -xml2 -page mmark2rfc.md >x.xml \
&& docker run --rm -v $(pwd):/rfc -v $HOME/.cache/xml2rfc:/var/cache/xml2rfc \
--user=$(id -u):$(id -g) paulej/rfctools xml2rfc --text x.xml \
&& rm x.xml && mv x.xml mmark2rfc.txt

The docker container expects source files to be stored in /rfc, so the above command maps the current directory to /rfc. Likewise, xml2rfc will attempt to write cache files to /var/cache/xml2rfc, so the above command maps the user's cache directory in the container.

Note also that the xml2rfc program will write an output file that will be owned by "root". To prevent that (and the cache files) from being owned by root, we instruct docker to run using the user's default user ID and group ID via the --user switch.

There is a script available called "md2rfc" simplifies the above to this:

% docker run --rm -v $(pwd):/rfc -v $HOME/.cache/xml2rfc:/var/cache/xml2rfc \
--user=$(id -u):$(id -g) paulej/rfctools mmark2rfc.md

Still appreciating that is a lot to type, there is an example directory in the https://github.com/paulej/rfctools repository that contains a Makefile. Place your .md file in a directory along with that Makefile and just type "make" to produce the .txt file.

Syntax

See the syntax document on all syntax elements that are supported by Mmark.

# Packages

No description provided by the author

# Functions

HtmlRenderer creates and configures an Html object, which satisfies the Renderer interface.
No description provided by the author
No description provided by the author
Parse is the main rendering function.
Xml2Renderer creates and configures a Xml2 object, which satisfies the Renderer interface.
XmlRenderer creates and configures a Xml object, which satisfies the Renderer interface.

# Constants

No description provided by the author
No description provided by the author
Render abbreviations `*[HTML]: Hyper Text Markup Language`.
Create the header ID from the text.
Detect embedded URLs that are not explicitly marked.
Translate trailing backslashes into line breaks.
Support citations via the link syntax.
render definition lists.
Render '(@tag) ' example lists.
Render fenced code blocks.
Pandoc-style footnotes.
Translate newlines into line breaks.
Specify header IDs with {#id}.
Include file with {{ syntax.
Detect CommonMark's IAL syntax.
Loosen up HTML block parsing rules.
Detect $$...$$ and parse as math.
Use {frontmatter} {mainmatter} {backmatter} (TODO(miek): not actually used).
No need to insert an empty line to start a (code, quote, order list, unorder list)block.
Detect part headers (-#).
Allow A> as asides.
Parse RFC 7328 markdown.
(#id) will be a cross reference.
Be strict about prefix header rules.
Render tables.
Titleblock in TOML.
When detecting identical anchors add a sequence number -1, -2 etc.
generate a complete HTML page.
generate a link at the end of a footnote to return to the source.
add a blank target.
only link with rel="nofollow".
skip the main contents (for a standalone table of contents).
only link to trusted protocols.
skip preformatted HTML blocks.
skip embedded images.
skip all links.
skip embedded <style> elements.
enable angled double quotes (with HTML_USE_SMARTYPANTS) for double quotes rendering.
enable smart dashes (with HTML_USE_SMARTYPANTS).
enable smart fractions (with HTML_USE_SMARTYPANTS).
enable LaTeX-style dashes (with HTML_USE_SMARTYPANTS and HTML_SMARTYPANTS_DASHES).
enable smart punctuation substitutions.
No description provided by the author
create standalone document.
create standalone document.

# Variables

CitationsANSI is the URL where the citations for ANSI documents are.
These have been known to change, these are the current ones (2015-08-27).
CitationsID is the URL where the citations for I-Ds are.
CitationsRFC is the URL where the citations for RFCs are.
CitationsW3C is the URL where the citations for W3C documents are.
PIs the processing instructions.
SourceCodeTypes are the different languages that are supported as a type attribute in sourcecode, see Section 2.48.4 of XML2RFC v3 (-21).

# Structs

No description provided by the author
Markdown is an io.Writer.

# Interfaces

Renderer is the rendering interface.