mmd
is a miniature markdown parsing "library" consisting of a single C source
file and accompanying header file. mmd
mostly conforms to the CommonMark
version of markdown syntax with the following exceptions:
-
Embedded HTML markup and entities are explicitly not supported or allowed; the reason for this is to better support different kinds of output from the markdown "source", including XHTML, man, and
xml2rfc
. -
Tabs are silently expanded to the markdown standard of four spaces since HTML uses eight spaces per tab.
-
Link titles are silently ignored.
-
Thematic breaks using a mix of whitespace and the separator character are not supported ("* * * *", "-- -- -- --", etc.); these could conceivably be added but did not seem particularly important.
In addition, mmd
supports a couple (otherwise undocumented) CommonMark
extensions:
-
Metadata as used by Jekyll and other web markdown solutions.
-
"@" links which resolve to headings within the file.
-
Tables as used by the Github Flavored Markdown Spec.
mmd
also includes a standalone utility called mmdutil
that can be used to
generate HTML and man page source from markdown.
I'm providing mmd
as open source under the Apache License Version 2.0 with
exceptions for use with GPL2/LGPL2 applications which allows you do pretty much
do whatever you like with it. Please do provide feedback and report bugs to the
Github project page at:
https://www.msweet.org/mmd
so that everyone can benefit.
You'll need a C compiler.
Add the mmd.c
and mmd.h
files to your project. Include the mmd.h
header in any file that needs to read/convert markdown files.
The supplied makefile allows you to build the unit tests on Linux and macOS (at
least), which verify that all of the functions work as expected to produce a
HTML file called testmmd.html
:
make
The makefile also builds the mmdutil
program.
You can install the mmdutil
program by copying it to somewhere appropriate or
run:
make install
to install it in /usr/local
along with a man page.
The following changes were made for v1.6:
- Fixed some parsing bugs (Issue #7)
- Fixed a crash bug in mmdutil (Issue #8)
- Code fences using "~~~" are now supported.
- Auto-links now properly handle preceding text (Issue #8)
- Inline styles can now span multiple lines (Issue #8)
- Links can now span multiple lines (Issue #8)
- Shortcut links (
[reference]
) didn't work (Issue #8) - Fixed some issues with inline styles being incorrectly applied for things like "* *".
- The
testmmd
program now supports running tests from the CommonMark specification and/or from the CommonMark test suite (Issue #9)
The following changes were made for v1.5:
- Added support for referenced links (Issue #1)
- Added support for
__bold__
,_italic_
,~~strikethrough~~
, and hard line breaks (Issue #4)
The following changes were made for v1.4:
- Fixed a table parsing bug where trailing pipes would add empty cells on the right side.
- Tweaked the
mmdutil
program's default HTML stylesheet. - Fixed
mmdutil
error messages that incorrectly called the programmmdbook
. - Fixed some Clang static analyzer warnings in
mmd.c
. - Fixed a build issue with Visual Studio.
The following changes were made for v1.3:
- Added
mmdCopyAllText
function that returns all of the text under the given node. - Added
mmdutil
program for converting markdown to HTML and man files.
The following changes were made for v1.2:
- Changed license to Apache License Version 2.0
- Added support for markdown tables (Issue #3)
The following changes were made for v1.1:
- The
mmd.h
header now includes the C++extern "C"
wrapper around the C function prototypes. - Added a
mmdLoadFile
function that loads a markdown document from aFILE
pointer. - Fixed a parsing bug for emphasized, bold, and code text containing whitespace.
- Fixed a parsing bug for escaped characters followed by unescaped formatting sequences.
- Fixed a parsing bug for headings that follow a list.
Copyright © 2017-2019 by Michael R Sweet.
mmd is licensed under the Apache License Version 2.0 with an exception to allow linking against GPL2/LGPL2 software (like older versions of CUPS). See the files "LICENSE" and "NOTICE" for more information.