mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Welcome Pelican 2.0 ! Refactoring of the internals to be more extensible.
--HG-- rename : pelican/bloggenerator.py => pelican/generators.py
This commit is contained in:
parent
5e2ca2dd56
commit
fdb920e50a
9 changed files with 430 additions and 337 deletions
50
pelican/readers.py
Normal file
50
pelican/readers.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
from docutils import core
|
||||
import re
|
||||
|
||||
# import the directives to have pygments support
|
||||
import rstdirectives
|
||||
|
||||
from pelican.utils import get_date, open
|
||||
|
||||
|
||||
_METADATAS_FIELDS = {'tags': lambda x: x.split(', '),
|
||||
'date': lambda x: get_date(x),
|
||||
'category': lambda x: x,
|
||||
'author': lambda x: x}
|
||||
|
||||
|
||||
class RstReader(object):
|
||||
|
||||
def _parse_metadata(self, content):
|
||||
"""Return the dict containing metadatas"""
|
||||
output = {}
|
||||
for m in re.compile(':([a-z]+): (.*)\s', re.M).finditer(content):
|
||||
name, value = m.group(1).lower(), m.group(2)
|
||||
output[name] = _METADATAS_FIELDS[name](value)
|
||||
return output
|
||||
|
||||
def read(self, filename):
|
||||
"""Parse restructured text"""
|
||||
text = open(filename)
|
||||
metadatas = self._parse_metadata(text)
|
||||
extra_params = {'input_encoding': 'unicode',
|
||||
'initial_header_level': '2'}
|
||||
rendered_content = core.publish_parts(text, writer_name='html',
|
||||
settings_overrides=extra_params)
|
||||
title = rendered_content.get('title')
|
||||
content = rendered_content.get('body')
|
||||
if not metadatas.has_key('title'):
|
||||
metadatas['title'] = title
|
||||
return content, metadatas
|
||||
|
||||
_EXTENSIONS = {'rst': RstReader} # supported formats
|
||||
|
||||
|
||||
def read_file(filename, fmt=None):
|
||||
"""Return a reader object using the given format."""
|
||||
if not fmt:
|
||||
fmt = 'rst'
|
||||
if fmt not in _EXTENSIONS.keys():
|
||||
raise TypeError('Pelican does not know how to parse %s files' % fmt)
|
||||
reader = _EXTENSIONS[fmt]()
|
||||
return reader.read(filename)
|
||||
Loading…
Add table
Add a link
Reference in a new issue