Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate permalinks on header with python markdown library

I was wondering how to generate permalinks from the following markup, using python markdown library:

A header
========

A paragraph

The desired output would be something like

<span id="a-header"></span>
<h1>
  A header
  <a class="headerlink" title="Permalink to this headline" href="#a-header">¶</a>
</h1>
<p>A paragraph</p>

Answer:

Thanks @BlaXpirit (see answer)

Use headerid python markdown extension and input the following:

# A header [¶](#a-header) {#a-header}

A paragraph

This generates the following output:

<h1 id="a-header">
  A header
  <a href="#a-header">¶</a>
</h1>

Then use some css styling to get the common output, something like :

h1 a{visibility:hidden;}
h1:hover a{visibility:visible;}
like image 918
aminho Avatar asked Apr 12 '11 13:04

aminho


2 Answers

Markdown in Python has an extension that does this.
It also lets you specify an id you like for the header, like this:

A header            {#a-header}
========
like image 126
Oleh Prypin Avatar answered Nov 10 '22 01:11

Oleh Prypin


You can generate permalinks with the Table of Contents extension for Python-Markdown. The Python-Markdown documentation notes that when possible it is preferable to pass an instance of an extension rather than a string.

import markdown
from markdown.extensions.toc import TocExtension

markup = """
A header
========

A paragraph
"""

html = markdown.markdown(markup, extensions=[TocExtension(permalink=True)])
print(html)


configs = {'toc': {'permalink': True}}
html = markdown.markdown(markup, extensions=['toc'], extension_configs=configs)
print(html)

An answer to a different question shows how you can change the paragraph symbol by setting the permalink option to a string.

like image 23
Keegan Skeate Avatar answered Nov 10 '22 00:11

Keegan Skeate