Skip to content
Snippets Groups Projects
Commit b7fb04f6 authored by mazenovi's avatar mazenovi
Browse files

add extract_toc plugins to inernal links

parent 24d709e8
No related branches found
No related tags found
No related merge requests found
Metadata-Version: 1.0
Name: blog-limos
Version: 1.0
Summary: UNKNOWN
Home-page: UNKNOWN
Author: UNKNOWN
Author-email: UNKNOWN
License: UNKNOWN
Description: UNKNOWN
Platform: UNKNOWN
blog_limos.egg-info/PKG-INFO
blog_limos.egg-info/SOURCES.txt
blog_limos.egg-info/dependency_links.txt
blog_limos.egg-info/requires.txt
blog_limos.egg-info/top_level.txt
\ No newline at end of file
pelican
markdown
beautifulsoup4
Title: Les documentations ISIMA/LIMOS (cri ou utilisateur)
Date: 2017-05-03 10:20
Title: Les documentations cri et utilisateur pour ISIMA/LIMOS
Date: 2017-05-16 10:20
Status: Published
Tags: doc, admin, www
......
Title: <i class="fa fa-graduation-cap" aria-hidden="true"></i> Cours
Date: 2010-12-30 10:25
Category: pipo
Tags: pipo, mollo
Date: 2017-05-16 10:25
## Following is a review of my favorite mechanical keyboard.
page
## Cette page est actuellement en cours de construction
Title: <i class="fa fa-briefcase" aria-hidden="true"></i> &Agrave; propos
Date: 2010-12-28 10:27
Category: pipo
Tags: pipo, mollo
Date: 2010-05-17 10:27
## Following is a review of my favorite mechanical keyboard.
page
## Cette page est actuellement en cours de construction
Title: <i class="fa fa-cogs" aria-hidden="true"></i> Projets
Date: 2010-12-12 10:25
Date: 2010-05-17 10:27
## Following is a review of my favorite mechanical keyboard.
page
## Cette page est actuellement en cours de construction
Title: <i class="fa fa-flask" aria-hidden="true"></i> Recherche
Date: 2010-12-29 10:26
Category: pipo
Tags: pipo, mollo
Date: 2010-05-17 10:27
## Following is a review of my favorite mechanical keyboard.
page
## Cette page est actuellement en cours de construction
......@@ -94,7 +94,8 @@ DISPLAY_CATEGORIES_ON_MENU = False
THEME = os.path.dirname(os.path.abspath(__file__)) + "/themes/limos"
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
PLUGIN_PATHS = [os.path.dirname(os.path.abspath(__file__)) + '/plugins']
PLUGINS = ['i18n_subsites', 'tag_cloud', 'tipue_search']
PLUGINS = ['i18n_subsites', 'tag_cloud', 'tipue_search', 'extract_toc'] #, 'pandoc_reader']
MARKDOWN = {'extensions': ['toc']}
I18N_TEMPLATES_LANG = 'en'
# https://bootswatch.com/
SHOW_ARTICLE_AUTHOR = False
......
Extract Table of Content
========================
A Pelican plugin to extract table of contents (ToC) from `article.content` and
place it in its own `article.toc` variable for use in templates.
Copyright (c) Talha Mansoor
Author | Talha Mansoor
----------------|-----
Author Email | talha131@gmail.com
Author Homepage | http://onCrashReboot.com
Github Account | https://github.com/talha131
Acknowledgement
---------------
Thanks to [Avaris](https://github.com/avaris) for going out of the way to help
me fix Unicode issues and doing a thorough code review.
Thanks to [gw0](http://gw.tnode.com/) for adding Pandoc reader support.
Why do you need it?
===================
Pelican can generate ToC of reST and Markdown files, using markup's respective
directive and extension. Such ToC is generated and placed at the beginning of
`article.content` like a string. Consequently it can not be placed anywhere
else on the page (eg. `<nav>` HTML5 tag, in header, or at the end of your
article's contents).
To solve this problem, this plugin extracts ToC from `article.content` and
places it in its own `article.toc` variable for use in templates.
Requirements
============
`extract_toc` requires BeautifulSoup.
```bash
pip install beautifulsoup4
```
How to Use
==========
This plugin works by extracting the first occurrence of enclosed in:
- `<div class="toc">` for the default Markdown reader
- `<div class="contents topic">` for the default reStructuredText reader
- `<nav class="TOC">` for the Pandoc reader
If ToC appears in your article at more than one places, `extract_toc` will
remove only the first occurrence. You shouldn't probably need to have multiple
ToC in your article. In case you need to display it multiple times, you can
print it via your template.
Template example
----------------
Add something like this to your Pelican templates if missing:
```python
{% if article.toc %}
<nav class="toc">
{{ article.toc }}
</nav>
{% endif %}
```
reStructuredText reader
-----------------------
To add a table of contents to your reStructuredText document (`.rst`) you need to add a `.. contents::` directive to its beginning. See the [docutils documentation](http://docutils.sourceforge.net/docs/ref/rst/directives.html#table-of-contents) for more details.
```rst
My super title
##############
:date: 2010-10-03
:tags: thats, awesome
.. contents::
..
1 Head 1
1.1 Head 2
2 Head 3
3 head 4
Heading 1
---------
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.
```
Markdown reader
---------------
To enable table of contents generation for the Markdown reader you need to set `MD_EXTENSIONS = (['toc'])` in your Pelican configuration file.
To add a table of contents to your Markdown document (`.md`) you need to place the `[TOC]` marker to its beginning. See the [Python Markdown documentation](http://pythonhosted.org/Markdown/extensions/toc.html) for more details.
```markdown
title: My super title
date: 4-4-2013
tags: thats, awesome
[TOC]
# Heading 1 #
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.
```
Pandoc reader
-------------
To enable table of contents generation for the Pandoc reader you need to set `PANDOC_ARGS = (['--toc', '--template=pandoc-template-toc'])` in your Pelican configuration file.
Contents of the Pandoc template file `pandoc-template-toc.html5`:
```html
$if(toc)$
<nav id="TOC">
$toc$
</nav>
$endif$
$body$
```
from .extract_toc import *
# -*- coding: utf-8 -*-
"""
Extract Table of Content
========================
A Pelican plugin to extract table of contents (ToC) from `article.content` and
place it in its own `article.toc` variable for use in templates.
"""
from os import path
from bs4 import BeautifulSoup
from pelican import signals, readers, contents
import logging
import os
logger = logging.getLogger(__name__)
def extract_toc(content):
if isinstance(content, contents.Static):
return
soup = BeautifulSoup(content._content, 'html.parser')
filename = content.source_path
extension = path.splitext(filename)[1][1:]
toc = None
# default Markdown reader
if not toc and readers.MarkdownReader.enabled and extension in readers.MarkdownReader.file_extensions:
toc = soup.find('div', class_='toc')
if toc:
toc.extract()
# default reStructuredText reader
if not toc and readers.RstReader.enabled and extension in readers.RstReader.file_extensions:
toc = soup.find('div', class_='contents topic')
if toc:
toc.extract()
tag = BeautifulSoup(str(toc), 'html.parser')
tag.div['class'] = 'toc'
tag.div['id'] = ''
p = tag.find('p', class_='topic-title first')
if p:
p.extract()
toc = tag
# Pandoc reader (markdown and other formats)
if 'pandoc_reader' in content.settings['PLUGINS']:
try:
from pandoc_reader import PandocReader
except ImportError:
PandocReader = False
if not toc and PandocReader and PandocReader.enabled and extension in PandocReader.file_extensions:
toc = soup.find('nav', id='TOC')
if toc:
toc.extract()
content._content = soup.decode()
content.toc = toc.decode()
if content.toc.startswith('<html>'):
content.toc = content.toc[12:-14]
def register():
signals.content_object_init.connect(extract_toc)
pandoc_reader @ 9ef0197e
Subproject commit 9ef0197eed5d141bf0f3b9a8468cd37ad3e5fbd7
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment