forked from varia/varia.website
many many many Varia's websites, work in progress: https://many.vvvvvvaria.org
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.1 KiB
32 lines
1.1 KiB
7 years ago
|
from pelican import readers
|
||
|
from pelican.readers import PelicanHTMLTranslator
|
||
|
from pelican import signals
|
||
|
from docutils import nodes
|
||
|
|
||
|
LINK_CHAR = '*'
|
||
|
|
||
|
|
||
|
def init_headerid(sender):
|
||
|
global LINK_CHAR
|
||
|
char = sender.settings.get('HEADERID_LINK_CHAR')
|
||
|
if char:
|
||
|
LINK_CHAR = char
|
||
|
|
||
|
def register():
|
||
|
signals.initialized.connect(init_headerid)
|
||
|
|
||
|
|
||
|
class HeaderIDPatchedPelicanHTMLTranslator(PelicanHTMLTranslator):
|
||
|
def depart_title(self, node):
|
||
|
close_tag = self.context[-1]
|
||
|
parent = node.parent
|
||
|
if isinstance(parent, nodes.section) and parent.hasattr('ids') and parent['ids']:
|
||
|
anchor_name = parent['ids'][0]
|
||
|
# add permalink anchor
|
||
|
if close_tag.startswith('</h'):
|
||
|
self.body.append(
|
||
|
'<a class="headerlink" href="#%s" title="Permalink to this headline">%s</a>' %
|
||
|
(anchor_name, LINK_CHAR))
|
||
|
PelicanHTMLTranslator.depart_title(self, node)
|
||
|
readers.PelicanHTMLTranslator = HeaderIDPatchedPelicanHTMLTranslator
|