[ANN] PHP Markdown Extra 1.1b1

Michel Fortin michel.fortin at michelf.com
Sat Sep 16 18:03:26 EDT 2006

Along with the new release of PHP Markdown 1.0.2b7 comes this new
version of PHP Markdown Extra. It contains every improvements of PHP
Markdown 1.0.2b7 plus some new fixes and two new features. You can
download it here:


and you can test it on the PHP Markdown Dingus (select PHP Markdown



Footnotes have been discussed a lot on this list back in [July 2005]
[1]. A year has passed and I implemented nothing. I looked back at
that old thread recently to rediscover the syntax and finally decided
to add it to Extra.

[1]: http://six.pairlist.net/pipermail/markdown-discuss/2005-July/

How do footnotes work? Mostly like reference-style links. There is a
marker in the text which gets converted to a superscript number in
the HTML rendering. There is a definition that can happen anywhere in
the document and which is appended at the end inside a list of
footnotes. A footnote looks like this:

That's some text with a footnote.[^1]

[^1]: And that's the footnote.

Footnote definitions can be found anywhere in the document, but
footnotes will always be listed in the order they are linked to in
the text. Note that you cannot make two links to the same footnotes:
if you try the second footnote reference will be left as plain text.

Each footnote must have a distinct name. That name will be used for
linking to and from footnote references, but has no effect on the
numbering of the footnotes. Names can be anything which is valid
within an id attribute in HTML.

Footnotes can contain block-level elements, which means that you can
put multiple paragraphs, lists, blockquotes and so on in a footnote.
It works the same as for list items: just indent the following
paragraphs by four spaces in the footnote definition:

That's some text with a footnote.[^1]

[^1]: And that's the footnote.

That's the second paragraph.

If you want things to align better, you can leave the first line of
the footnote empty and put your first paragraph just below:

And that's the footnote.

That's the second paragraph.

### Output

It has been said countless times in the discussions that one output
format cannot satisfy everyone. So I'm not trying to make something
which will work for everyone. I decided I'd follow what I've seen on
Daring Fireball, as I think it's a pretty good default, but with some
minor differences. Here is the default output from the first sample:

<p>That's some text with a footnote.
<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>

<div class="footnotes">
<hr />

<li id="fn:1">
<p>And that's the footnote.
<a href="#fnref:1" rev="footnote">&#8617;</a></p>


A little cryptic, but in a browser it will look like this (minus
links and superscript):

That's some text with a footnote.1


1. And that's the footnote. ↩

The "rel" and "rev" attributes on the links express the relation they
have with the elements they link to, the reference links to the
footnote and the backlink is a reverse reference from the footnote,
hence rel= and rev="footnote". They can be used to style the elements
with CSS rules such as:


So this is what PHP Markdown Extra 1.1b1 does. I'm thinking about
adding some configuration variables to allow customized class and
title attributes on the in-text reference and the backlink to make
that even more usable.

### Limitations

* You cannot make a footnote without having the content wrapped in
a paragraph
or another block-level construct. I've been wondering if it
would be good to
allow, somehow, span-level footnotes.

* It's probably not the best way to add bibliographic references when
a reference can appear many times in a document. I think a
distinct syntax,
using another special character instead of `^` would be better
suited for
that purpose.


PHP Markdown Extra 1.1b1 adds supports for abbreviations (HTML
`<abbr>` tag) as an experimental feature. How it works is pretty
simple: create an abbreviation definition like this:

[HTML]*: Hyper Text Markup Language
[W3C]*: World Wide Web Consortium

then write text such as:

The HTML specification
is maintained by the W3C.

and any instance of those words in the text will become:

The <abbr title="Hyper Text Markup Language">HTML</abbr>
is maintained by the <abbr title="World Wide Web

Abbreviation are case-sensitive, and can span on multiple words when
required. An abbreviation may also have an empty definition, in which
case the title attribute will be omitted.

Operation Tigra Genesis is going well.

[Tigra Genesis]*:

Abbreviation definition can be anywhere in the document. They won't
appear in the final result other than within the text as `<abbr>`

This syntax is a work in progress. I'm not sure the syntax is
distinctive enough from standard link definition. I'm open to

PHP Markdown Extra 1.1b1

* Added a syntax for footnotes.

* Added an experimental syntax to define abbreviations.

* Fixed a bug where Markdown Extra outputs invalid HTML when a
rule isn't preceded *and* followed by a blank like.

* Fixed a bug which would cause some block-level elements to appear
inside a
a tag with markdown="span", or markdown="1" defaulting to span

Michel Fortin
michel.fortin at michelf.com

More information about the Markdown-Discuss mailing list