MarkdownTools is a collection of command line utilities for processing Markdown text files. At the moment the collection includes only one utility: mdmerge. Over time additional utilities will be added to support Markdown workflows.
Current stable version is 1.0. See the Installation section below for guidance.
mdmerge is a command line utility that produces a single Markdown document by merging a set of Markdown documents. The merge can be accomplished by expanding include specifications found in the input files, by concatenating a list of files found in an index file, or both.
Brett Terpstra's Marked 2 application is a GUI product that runs on OS X; it watches Markdown text files and displays the formatted output; it has extensive support for multi-file Markdown documents. Marked is my tool of choice for viewing formatted Markdown. I use it whenever I'm creating or reviewing Markdown content on my OS X machine. The invaluable multi-file document support in Marked is what drove me to create mdmerge.
mdmerge brings that same multi-file Markdown document processing to the command line. It is useful in any automated scripting environment where Markdown is processed. For example, I use it in automated build scripts (e.g., using gmake or Grunt) to produce documentation for the software I'm building. It is cross-platform; you can pre-process the Markdown files on any common OS that has a recent version of Python.
mdmerge has been tested with documents containing these Markdown syntax variants:
- classic (John Gruber's Markdown syntax)
- MultiMarkdown (Fletcher Penny's syntax, MultiMarkdown version 4)
- GHF (GitHub Flavored Markdown)
mdmerge accepts include declarations in these styles
- MultiMarkdown transclusion
- Marked file includes
- LeanPub code includes (as interpreted by Marked)
- LeanPub index files
- mmd_merge index files
Includes can be nested; that is, a file can include another file that itself include other files, and so on. Index (or book) files are only processed as such when they are the primary input; they cannot be nested -- but the files listed in the index file are treated as normal input files (expanding include specifications found within).
This example shows an include specification of another markdown file:
This next bit is an included Markdown file. If it also has embedded include specifications, they will be processed as well; these kinds of includes are nested.
<<[section-a.md]
End of example.
This example shows an include specification for source code:
This next bit is included source code. It is not examined for nested include specifications.
<<(example.c)
End of example.
This example shows a normal MultiMarkdown transclusion and a source code transclusion:
This demonstrates MultiMarkdown transclusions:
{{section-a.mmd}}
```C
{{example.c}}
```
End of example.
And of course there are raw file includes (<<{raw.html}
) and index files. Read the documentation linked in the previous section or look at docs/specifications.mmd
in the master
branch.
Installation packages are available on PyPI. For Python 3 (3.3 or later) install the MarkdownTools
; for Python 2 (2.6 or later) install the MarkdownTools2
package.
Install the package using pip, like this (in a Python 3 environment):
$ pip install MarkdownTools
or (in a Python 2 environment):
$ pip install MarkdownTools2
If you are upgrading an existing version, use pip install --upgrade
.
You may need to use sudo
if you are installing into the system's native Python environment.
The command line looks like this:
mdmerge [options] [-o outputfile] inputfile [inputFile ...]
mdmerge [options] [-o outputfile] -
options
: One or more of --book
, --export-target
, -h
, --help
, --ignore-transclusions
, --just-raw
--leanpub
, --version
.
--book
: Treat STDIN as an index file (a "book" file).
--export-target [html|latex|lyx|opml|rtf|odf]
: Indicates the ultimate output target of the markdown processor, but primarily impacts wildcard substitution in Marked inclusion.
-h
: Help information
--help
: Same as -h
.
--ignore-transclusions
: Leave any MultiMarkdown transclusion specifications alone; do not include
the specified file. Useful if you want to mix Marked/LeanPub includes and
MultiMarkdown includes, but have MultiMarkdown handline the transclusions.
--just-raw
: Ignore all include specifications except for raw includes; useful for
processing the output of the Markdown processor to pick up the raw file include
specifications that should have passed through untouched.
--leanpub
: Indicates that any input file named book.txt
should be treated as a LeanPub index file.
--version
: Gives the version information about the utility.
-o outputfile
: The filepath in which to store the merged text. If not specified, then STDOUT is used.
--outfile outputfile
: same as -o
.
-
: The input comes from STDIN.
inputfile
: A list of space separated input files that can be merged together. If multiple files are given, they are treated as if they were specified in a LeanPub index file.
MarkdownTools are written in Python. The project repository contains python2/*
branches that target Python 2 (2.6 and later) and python3/*
branches that target Python 3 (3.3 and later). There are unit tests on each branch that can be executed using the runtests
command script.
The master
branch does not contain any source or tests; it contains the README file and a few other files that describe aspects of the project.
To run the tests:
$ ./runtests.sh
For Python 2 environments you will need to install the mock package (e.g., pip install mock
).
Similar to the contribution guidance from https://github.com/github/markup:
- Fork it.
- Create a branch (
git checkout -b my_MarkdownTools
) - Commit your changes (
git commit -am "Added Snarkdown"
) - Push to the branch (
git push origin my_MarkdownTools
) - Open a Pull Request
- Enjoy a refreshing beverage and wait
Contributors should read the developer documentation, available in the docs
directory of the master
branch. To produce a nice pretty HTML version of those docs, install the doc tools (see the docs-support
directory) and run the make-docs
script in the docs
directroy.
MarkdownTools is licensed with the Mozilla Public License Version 2.0.
Copyright 2014 Dave Hein