Pythonには、Daring Fireball: Markdownを実装したMarkdownというパッケージがあります。
使い方は以下のようになります。
import markdown
print markdown.markdown("input")
extensionsで拡張できます。
import markdown
extensions = ["fenced_code", "tables"]
print markdown.markdown("input", extensions)
ここに書いてあるExtensionsはデフォルトで利用可能です。このドキュメントには指定するのに'markdown.extensions.footnotes'と書いていますが、単に'footnotes'だけでも使えます。
おすすめ設定(GFM的に使える)
delタグとinsタグを使うために以下のパッケージをインストールします。
$ pip install mdx_del_ins
del_insがExtensionで使えますので以下のように設定します。
import markdown
extensions = ['extra', 'admonition', 'codehilite(css_class=highlight)',
'nl2br', 'sane_lists', 'toc', 'del_ins']
print markdown.markdown("input", extensions)
GFMライクに使えます。
Pelicanで使用する場合には、pelicanconf.pyに以下のように書きます。
MD_EXTENSIONS = ['extra', 'admonition', 'codehilite(css_class=highlight)',
'nl2br', 'sane_lists', 'toc', 'del_ins']
この記事もこの設定で書いています。
標準のExtensionリファレンス
以下は上記のドキュメントを簡単にまとめました。興味のある方どうぞ。
目次
extras
色々含まれているので1つずつ見てみます。
Abbreviations (abbr)
Abbreviations Extension — Python Markdown
略語tag(\<abbr>)を追加できます。以下に例を示します。
The HTML specification
is maintained by the W3C.
*[HTML]: Hyper Text Markup Language
*[W3C]: World Wide Web Consortium
The HTML specification
is maintained by the W3C.
(正直余り使わないし、調べるまで知りませんでした)
Attribute Lists (attr_list)
Attribute Lists Extension — Python Markdown
classやidなどのattributeを追加できます。便利そう。
This is a paragraph.
{: #an_id .a_class }
A setext style header {: #setext}
=================================
### A hash style header ### {: #hash }
[link](http://example.com){: class="foo bar" title="Some title!" }
blockに対して, inlineに対して両方使えます。
cssセレクタぽく書けます。ダブルクォーテーション("")で囲むことで複数指定もできます。
{: #someid .someclass somekey='some value' }
{: #id1 .class1 id=id2 class="class2 class3" .class4 }
Definition Lists (def_list)
Definition Lists Extension — Python Markdown
dl>dt>ddを書けます。
Apple
: Pomaceous fruit of plants of the genus Malus in
the family Rosaceae.
Orange
: The fruit of an evergreen tree of the genus Citrus.
- Apple
- Pomaceous fruit of plants of the genus Malus in
the family Rosaceae. - Orange
- The fruit of an evergreen tree of the genus Citrus.
Fenced Code Blocks (fenced_code)
Fenced Code Blocks Extension — Python Markdown
```で書こうとコードブロックになります。デフォルトの機能にしてほしいくらいです。
このExtensionは指定行だけハイライトするということもできるみたいです。以下のように指定します。
python hl_lines="2 3 4"
こんな感じになります。
$ cat sample.py
# cat result
# code block [python]
import antigravity
Footnotes (footnotes)
Footnotes Extension — Python Markdown
脚注です。
Footnotes[^1] have a label[^@#$%] and the footnote's content.
[^1]: This is a footnote content.
[^@#$%]: A footnote on the label: "@#$%".
Footnotes1 have a label2 and the footnote's content.
脚注内に複数行を入れることもできます。
[^1]:
The first paragraph of the definition.
Paragraph two of the definition.
> A blockquote with
> multiple lines.
a code block
A final paragraph.
Tables (tables)
Tables Extension — Python Markdown
テーブルが使えます。
First Header | Second Header
------------- | -------------
Content Cell | Content Cell
Content Cell | Content Cell
First Header | Second Header |
---|---|
Content Cell | Content Cell |
Content Cell | Content Cell |
Smart_Strong (smart_strong)
Smart Strong Extension — Python Markdown
賢く強調してくれます。
>>> import markdown
>>> markdown.markdown('Text with double__underscore__words.', \
extensions=['markdown.extensions.smart_strong'])
u'<p>Text with double__underscore__words.</p>'
>>> markdown.markdown('__Strong__ still works.', \
extensions=['markdown.extensions.smart_strong'])
u'<p><strong>Strong</strong> still works.</p>'
>>> markdown.markdown('__this__works__too__.', \
extensions=['markdown.extensions.smart_strong'])
u'<p><strong>this__works__too</strong>.</p>'
Admonition (admonition)
Admonition Extension — Python Markdown
reStructuredTextにあるAdminisions(reStructuredText Directives)のMarkdown版を使えます。
!!! note
You should note that the title will be automatically capitalized.
!!! warning "WARNING"
...
!!! important ""
This is a admonition box without a title.
Note
You should note that the title will be automatically capitalized.
WARNING
...
This is a admonition box without a title.
CSSをいい感じに書いておくと良いです。
CodeHilite (codehilite)
CodeHilite Extension — Python Markdown
css_classを指定しないとうまくハイライトされませんでした。
extensions = ['codehilite(css_class=highlight)']
HeaderId (headerid)
HeaderId Extension — Python Markdown
headerにheader_<数字>というIDをつけてくれます。
Meta-Data (meta)
Meta-Data Extension — Python Markdown
以下の様にメタデータを定義できるようになります。
Title: My Document
Summary: A brief description of my document.
Authors: Waylan Limberg
John Doe
Date: October 2, 2007
blank-value:
base_url: http://example.com
This is the first paragraph of the document.
New-Line-to-Break Extension (nl2br)
New Line to Break Extension — Python Markdown
以下の例に示すように、改行が新しい行になるようにパースされます。
>>> import markdown
>>> text = """
... Line 1
... Line 2
... """
>>> html = markdown.markdown(text, extensions=['markdown.extensions.nl2br'])
>>> print html
<p>Line 1<br />
Line 2</p>
Sane Lists (sane_lists)
Sane Lists Extension — Python Markdown
listを賢くパースしてくれます。
- Ordered item 1
- Ordered item 2
- Unordered item 1
- Unordered item 2
SmartyPants (smarty)
SmartyPants Extension — Python Markdown
文字参照を置き換えてくれます。詳しくは以下を参照。
Table of Contents (toc)
Table of Contents Extension — Python Markdown
目次を表示します。
[TOC]
WikiLinks
WikiLinks Extension — Python Markdown
内部参照が使えるようになります。
[[Bracketed]]
パースすると以下のようになります。
<a href="/Bracketed/" class="wikilink">Bracketed</a>
Show comments