[tor-commits] [lego/master] Add markdown-header-anchors to packages
hiro at torproject.org
hiro at torproject.org
Mon Jul 1 13:44:09 UTC 2019
commit d2d88e80c6219d887bf915d81b1ea60164e37496
Author: hiro <hiro at torproject.org>
Date: Mon Jul 1 15:44:05 2019 +0200
Add markdown-header-anchors to packages
---
.../packages/markdown-header-anchors/.gitignore | 7 ++++
.../packages/markdown-header-anchors/CHANGES.md | 30 +++++++++++++
.../packages/markdown-header-anchors/LICENSE | 31 ++++++++++++++
.../packages/markdown-header-anchors/MANIFEST.in | 1 +
.../packages/markdown-header-anchors/README.md | 33 +++++++++++++++
.../lektor_markdown_header_anchors.py | 49 ++++++++++++++++++++++
.../packages/markdown-header-anchors/setup.cfg | 2 +
.../packages/markdown-header-anchors/setup.py | 40 ++++++++++++++++++
8 files changed, 193 insertions(+)
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/.gitignore b/packages/markdown-header-anchors/packages/markdown-header-anchors/.gitignore
new file mode 100644
index 0000000..de9d237
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/.gitignore
@@ -0,0 +1,7 @@
+dist
+build
+*.egg-info
+*.pyc
+*.pyo
+*~
+*#
\ No newline at end of file
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/CHANGES.md b/packages/markdown-header-anchors/packages/markdown-header-anchors/CHANGES.md
new file mode 100644
index 0000000..2cfdadb
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/CHANGES.md
@@ -0,0 +1,30 @@
+Changelog
+=========
+
+These are all the changes in Lektor Markdown Header Anchors
+since the first public release.
+
+0.3.1
+
+Release date 25th of January, 2019
+
+- Release with py2 and py3 wheel.
+
+0.3
+
+Release date 12th of May, 2018
+
+- Setup updates.
+- Use random id as anchor
+
+0.2
+
+Release date 20th of January, 2017
+
+- Workaround for weird header setups
+
+0.1
+
+Release date 24th of December, 2015
+
+- Initial Release.
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/LICENSE b/packages/markdown-header-anchors/packages/markdown-header-anchors/LICENSE
new file mode 100644
index 0000000..0921373
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/LICENSE
@@ -0,0 +1,31 @@
+Copyright (c) 2015 by Armin Ronacher.
+
+Some rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * The names of the contributors may not be used to endorse or
+ promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/MANIFEST.in b/packages/markdown-header-anchors/packages/markdown-header-anchors/MANIFEST.in
new file mode 100644
index 0000000..64ad321
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/MANIFEST.in
@@ -0,0 +1 @@
+include README.md LICENSE
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/README.md b/packages/markdown-header-anchors/packages/markdown-header-anchors/README.md
new file mode 100644
index 0000000..6fcce47
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/README.md
@@ -0,0 +1,33 @@
+# lektor-markdown-header-anchors
+
+This plugin extends the markdown support in Lektor in a way that headlines
+are given anchors and a table of contents is collected.
+
+## Enabling the Plugin
+
+To enable the plugin run this command:
+
+```shell
+$ lektor plugins add markdown-header-anchors
+```
+
+## In Templates
+
+Within templates it becomes possible to access the `.toc` property of
+markdown data. It's a list where each item has the following attributes:
+
+* `anchor`: the name of the anchor
+* `title`: the title of the headline as HTML
+* `children`: a list of headers below that header
+
+Example rendering:
+
+```jinja
+<h4>Table Of Contents</h4>
+<ul class="toc">
+{% for item in this.body.toc recursive %}
+ <li><a href="#{{ item.anchor }}">{{ item.title }}</a>{%
+ if item.children %}<ul>{{ loop(item.children) }}</ul>{% endif %}</li>
+{% endfor %}
+</ul>
+```
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/lektor_markdown_header_anchors.py b/packages/markdown-header-anchors/packages/markdown-header-anchors/lektor_markdown_header_anchors.py
new file mode 100644
index 0000000..1c324e5
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/lektor_markdown_header_anchors.py
@@ -0,0 +1,49 @@
+from lektor.pluginsystem import Plugin
+import uuid
+from lektor.utils import slugify
+from markupsafe import Markup
+from collections import namedtuple
+
+
+TocEntry = namedtuple('TocEntry', ['anchor', 'title', 'children'])
+
+
+class MarkdownHeaderAnchorsPlugin(Plugin):
+ name = 'Markdown Header Anchors'
+ description = u'Lektor plugin that adds anchors and table of contents to markdown headers.'
+
+ def on_markdown_config(self, config, **extra):
+ class HeaderAnchorMixin(object):
+ def header(renderer, text, level, raw):
+ if self.get_config().get('anchor-type') == "random":
+ anchor = uuid.uuid4().hex[:6]
+ else:
+ anchor = slugify(raw)
+ renderer.meta['toc'].append((level, anchor, Markup(text)))
+ return '<h%d id="%s">%s</h%d>' % (level, anchor, text, level)
+ config.renderer_mixins.append(HeaderAnchorMixin)
+
+ def on_markdown_meta_init(self, meta, **extra):
+ meta['toc'] = []
+
+ def on_markdown_meta_postprocess(self, meta, **extra):
+ prev_level = None
+ toc = []
+ stack = [toc]
+
+ for level, anchor, title in meta['toc']:
+ if prev_level is None:
+ prev_level = level
+ elif prev_level == level - 1:
+ stack.append(stack[-1][-1][2])
+ prev_level = level
+ elif prev_level > level:
+ while prev_level > level:
+ # Just a simple workaround for when people do weird
+ # shit with headlines.
+ if len(stack) > 1:
+ stack.pop()
+ prev_level -= 1
+ stack[-1].append(TocEntry(anchor, title, []))
+
+ meta['toc'] = toc
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/setup.cfg b/packages/markdown-header-anchors/packages/markdown-header-anchors/setup.cfg
new file mode 100644
index 0000000..3c6e79c
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/setup.cfg
@@ -0,0 +1,2 @@
+[bdist_wheel]
+universal=1
diff --git a/packages/markdown-header-anchors/packages/markdown-header-anchors/setup.py b/packages/markdown-header-anchors/packages/markdown-header-anchors/setup.py
new file mode 100644
index 0000000..82f0955
--- /dev/null
+++ b/packages/markdown-header-anchors/packages/markdown-header-anchors/setup.py
@@ -0,0 +1,40 @@
+import ast
+import io
+import re
+
+from setuptools import setup
+
+with io.open('README.md', 'rt', encoding="utf8") as f:
+ readme = f.read()
+
+_description_re = re.compile(r'description\s+=\s+(?P<description>.*)')
+
+with open('lektor_markdown_header_anchors.py', 'rb') as f:
+ description = str(ast.literal_eval(_description_re.search(
+ f.read().decode('utf-8')).group(1)))
+
+setup(
+ author='Armin Ronacher',
+ author_email='armin.ronacher at active-4.com',
+ description=description,
+ keywords='Lektor plugin markdown static-site blog toc table-of-contents anchors headers',
+ license='BSD',
+ long_description=readme,
+ long_description_content_type='text/markdown',
+ name='lektor-markdown-header-anchors',
+ py_modules=['lektor_markdown_header_anchors'],
+ url='http://github.com/lektor/lektor-markdown-header-anchors',
+ version='0.3.1',
+ classifiers=[
+ 'Environment :: Plugins',
+ 'Environment :: Web Environment',
+ 'Framework :: Lektor',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: BSD License',
+ ],
+ entry_points={
+ 'lektor.plugins': [
+ 'markdown-header-anchors = lektor_markdown_header_anchors:MarkdownHeaderAnchorsPlugin',
+ ]
+ }
+)
More information about the tor-commits
mailing list