New "tables" extra for table syntax that matches GFM https://help.github.com/articles/github-flavored-markdown#tables and PHP-Markdown Extra https://michelf.ca/projects/php-markdown/extra/#table. For example:
| Header 1 | *Header* 2 |
| -------- | -------- |
| `Cell 1` | [Cell 2](http://example.com) link |
| Cell 3 | **Cell 4** |
See https://github.com/trentm/python-markdown2/blob/master/test/tm-cases/tables.text for examples and edge cases.
If you have documents using the 'wiki-tables' syntax and want to convert to the 'tables' syntax, there is a script to help with that here: https://github.com/trentm/python-markdown2/blob/master/tools/wiki-tables-to-tables.py
["nofollow" extra, issue #74, pull #104] Add rel="nofollow"
support
(mostly by https://github.com/cdman):
$ echo '[link](http://example)' | markdown2 -x nofollow
<p><a rel="nofollow" href="http://example">link</a></p>
Limitation: This can add a duplicate 'rel' attribute to raw HTML links in the input.
["toc" extra] Unescape Markdown special chars in TOC entries. See https://github.com/trentm/restdown/issues/15.
Now 'tox' testing support (by github.com/msabramo):
[sudo] pip install tox
tox
confirming that markdown2 works with jython (not sure which version) and pypy! Also added pypy to travis-ci testing (http://travis-ci.org/#!/trentm/python-markdown2).
[issue #90] Add a Markdown.preprocess(text) -> text
hook for subclasses.
This is a match for the Markdown.postprocess(text) -> text
hook added in
an earlier version. (by @joestump).
[issue #90, backward incompatible change] Require a space between the '#' and a text for a title. I.e.:
# This still works
#This doesn't work
##Nor this
This keeps comments, hash tags, and ticket numbers at the beginning of the line from turning into an h1. (by @joestump)
This is a backward incompatible change, however small, hence the version change to 2.0.0.
[issue #67] Fix an sub-ul
inside a ol
not working with an indent less
than 4 spaces.
Fix code blocks and fenced-code-blocks to work with a single leading newline at the start of the input.
[issue #86, 'fenced-code-blocks' extra] Fix fenced code blocks not being parsed out before other syntax elements, like headers.
[issue #83, 'fenced-code-blocks' and 'code-color' extras] Allow 'cssclass' code coloring option (passed to pygments) to be overridden (by https://github.com/kaishaku). E.g.:
import markdown2
html = markdown2.markdown(text,
extras={'fenced-code-blocks': {'cssclass': 'mycode'}})
Deprecate code-color
extra. Use the fenced-code-block
extra and
its cleaner mechanism for specifying the language, instead. This extra
will be removed in v2.0 or so.
New It includes support for code syntax highlighting as per GFM. This requires
the fenced-code-blocks
extra. It allows a code block to not have to be
indented by fencing it with '```' on a line before and after. Based on
[GFM](Some code:
```
print "hi"
```
pygments
Python module to be on the pythonpath.```python
if True:
print "hi"
```
mk
thing) and simplify to "Makefile".[issue #76] Ensure "smarty-pants" extra doesn't destroy image links and links with title text.
[issue #72] Support reading from stdin for command line tool like any well-behaved unix tool, e.g.:
$ echo 'hi' | markdown2
hi
Thanks Ryan!
Drop this "1.0.1." version silliness. The idea *was that the first three numbers tracked the Markdown.pl on which markdown2.py was originally based. I don't believe Markdown.pl really gets releases anymore tho, so pointless.
[Issue 57] Add html5 block tags (article, section, aside, et al; see "_html5tags" variable) to Markdown literal HTML block tag handling. Thanks Tim Gray!
[Issue 56] Fix setup.py install
.
[Issue 54] Fix escaping of link title attributes. Thanks FND!
Tweak list matching to NOT make a ul for something like this:
- - - - - hi there
Before this change this would be a silly 5-deep nested li. See "notquitea_list" test case.
[Issue 52] Fix potential pathologically slow matching for <hr>
markdown
("slow_hr" test case).
Add a Markdown.postprocess(text) -> text
hook that is called near the end
of markdown conversion. By default this does no transformation. It is called
just before unescaping of special characters and unhashing of literal HTML
blocks.
["header-ids" and "toc" extras] Add "n" argument to
Markdown.header_id_from_text
hook. This allows a subclass using this hook
to differentiate the header id based on the hN number (e.g. h1 diff that
h2). Also allow a None
return value to not add an id to that header (and
exclude that header from the TOC).
Note: If you used this hook, this is an incompatible change to the call signature.
Add a "markdown-in-html" extra similar to (but limited) http://michelf.com/projects/php-markdown/extra/#markdown-attr. I.e. this:
<div markdown="1">
Yo **yo**!
</div>
becomes:
<div>
Yo <strong>yo</strong>!
</div>
[Issue 39] Test case fix for pygments 1.3.1 from thomas.moschny.
[Issue 42] Add "smarty-pants" extra for transforming plain ASCII
punctuation characters into smart typographic punctuation HTML entities.
Inspiration: http://daringfireball.net/projects/smartypants/
Implementation by Nikhil Chelliah. Also add \'
and \"
escape sequences
for forcing dumb quotes when this extra is in use.
Guard against using True
instead of None
as follows
markdown(..., extras={'header-ids': True})
. None
is wanted, but True
is commonly (at least I did it twice) used.
[Issue 36] Fix "cuddled-lists" extra handling for an looks-like-a-cuddled-list-but-is-indented block. See the "test/tm-cases/cuddledlistindented.text" test case.
Experimental new "toc" extra. The returned string from conversion will have
a toc_html
attribute.
New "header-ids" extra that will add an id
attribute to headers:
# My First Section
will become:
<h1 id="my-first-section">My First Section</h1>
An argument can be give for the extra, which will be used as a prefix for the ids:
$ cat foo.txt
# hi there
$ python markdown2.py foo.txt
<h1>hi there</h1>
$ python markdown2.py foo.txt -x header-ids
<h1 id="hi-there">hi there</h1>
$ python markdown2.py foo.txt -x header-ids=prefix
<h1 id="prefix-hi-there">hi there</h1>
Preliminary support for "html-classes" extra: takes a dict mapping HTML tag to the string value to use for a "class" attribute for that emitted tag. Currently just supports "pre" and "code" for code blocks.
[Issue 33] Implement a "cuddled-lists" extra that allows:
I did these things:
* bullet1
* bullet2
* bullet3
to be converted to:
<p>I did these things:</p>
<ul>
<li>bullet1</li>
<li>bullet2</li>
<li>bullet3</li>
</ul>
Mail me: <foo_bar@example.com>
wouldn't work.[Issue 23] Add support for passing options to pygments for the "code-color" extra. For example:
>>> markdown("...", extras={'code-color': {"noclasses": True}})
This formatter_opts
dict is passed to the pygments HtmlCodeFormatter.
Patch from 'svetlyak.40wt'.
"link-patterns" extra: Add support for the href replacement being a callable, e.g.:
>>> link_patterns = [
... (re.compile("PEP\s+(\d+)", re.I),
... lambda m: "http://www.python.org/dev/peps/pep-%04d/" % int(m.group(1))),
... ]
>>> markdown2.markdown("Here is PEP 42.", extras=["link-patterns"],
... link_patterns=link_patterns)
u'<p>Here is <a href="http://www.python.org/dev/peps/pep-0042/">PEP 42</a>.</p>\n'
sys.argv
is defined at top-level code --
e.g. when used at a PostreSQL stored procedure. Fix that.easy_install markdown2-*.tar.gz
works. (Henry Precheur pointed out the problem.)<p>
-- i.e. treats them as a HTML
block tag.md5
module.Pass XML processing instructions and one-liner tags. For example:
<?blah ...?>
<xi:include xmlns:xi="..." />
Limitations: they must be on one line. Test: piandxinclude. Suggested by Wolfgang Machert.
Add "demote-headers" extra that will demote the markdown for, e.g., an h1 to h2-6 by the number of the demote-headers argument.
>>> markdown('# this would be an h1', extras={'demote-headers': 2})
u'<h3>this would be an h1</h3>\n'
This can be useful for user-supplied Markdown content for a sub-section of a page.
Fix this error that broken command-line usage:
NameError: global name 'use_file_vars' is not defined
Add "pyshell" extra for auto-codeblock'ing Python interactive shell sessions even if they weren't properly indented by the tab width.
-*- markdown-extras: ... -*-
emacs-style files
variable to set "extras" off be default. It can be turned on via
--use-file-vars
on the command line and use_file_vars=True
via the
module interface.safe_mode=True
to mean what it used
to -- i.e. "replace" safe mode.-*- markdown-extras: ... -*-
emacs-style files variables
(typically in an XML comment) to set "extras" for the markdown conversion.Markdown.html_removed_text
.Add "link-patterns" extra: allows one to specify a list of regexes that should be automatically made into links. For example, one can define a mapping for things like "Mozilla Bug 1234":
regex: mozilla\s+bug\s+(\d+)
href: http://bugzilla.mozilla.org/show_bug.cgi?id=\1
See https://github.com/trentm/python-markdown2/wiki/Extras for details.
Add a "MarkdownWithExtras" class that enables all extras (except "code-friendly"):
>>> import markdown2
>>> converter = markdown2.MarkdownWithExtras()
>>> converter.convert('...TEXT...')
...HTML...
[Issue 1] Added "code-color" extra: pygments-based (TODO: link) syntax coloring of code blocks. Requires the pygments Python library on sys.path. See https://github.com/trentm/python-markdown2/wiki/Extras for details.
_
and __
for emphasis and strong. These can easily get in the way when
writing docs about source code with variablelistthis and when one is not
careful about quoting.(Started maintaining this log 15 Oct 2007. At that point there had been no releases of python-markdown2.)