PythonでMarkdownをGFM的に使う方法

Pythonには、Daring Fireball: Markdownを実装したMarkdownというパッケージがあります。

使い方は以下のようになります。

import markdown
print markdown.markdown("input")

extensionsで拡張できます。

import markdown
extensions = ["fenced_code", "tables"]
print markdown.markdown("input", extensions)

Extensions — Python Markdown

ここに書いてある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リファレンス

Extensions — Python Markdown

以下は上記のドキュメントを簡単にまとめました。興味のある方どうぞ。

目次

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を賢くパースしてくれます。

  1. Ordered item 1
  2. 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>

  1. The first paragraph of the definition.

    Paragraph two of the definition.

    A blockquote with
    multiple lines.

    a code block
    

    A final paragraph. 

  2. A footnote on the label: "@#$%". 

Show comments

Adsense

Share

  • このエントリーをはてなブックマークに追加

About

趣味でプログラミングをしています。仕事では致し方なくC言語のようなC++を書いています。

Tags

Pages