diff --git a/creole_reader/Readme.md b/creole_reader/Readme.md new file mode 100644 index 0000000..4db3eab --- /dev/null +++ b/creole_reader/Readme.md @@ -0,0 +1,31 @@ +# Creole Reader + +This plugins allows you to write your posts using the wikicreole syntax. Give to +these files the creole extension. The medata are between <
> <
> +tags. + +## Syntax +Use ** for strong, // for emphasis, one = for 1st level titles. + +For the complete syntax, look at: http://www.wikicreole.org/ + +## Basic example +``` +<
> +title: Créole +tags: creole, python, pelican_open +date: 2013-12-12 +<
> + += Title 1 +== Title 2 + +Some nice texte with **strong** and //emphasis//. + +* A nice list +** With subelements +* Python + +# An ordered list +# A second item +``` diff --git a/creole_reader/__init__.py b/creole_reader/__init__.py new file mode 100644 index 0000000..2e26d46 --- /dev/null +++ b/creole_reader/__init__.py @@ -0,0 +1 @@ +from .creole_reader import * diff --git a/creole_reader/creole_reader.py b/creole_reader/creole_reader.py new file mode 100644 index 0000000..49317c5 --- /dev/null +++ b/creole_reader/creole_reader.py @@ -0,0 +1,56 @@ +#-*- conding: utf-8 -*- + +''' +Creole Reader +------------- + +This plugins allows you to write your posts using the wikicreole syntax. Give to +these files the creole extension. +For the syntax, look at: http://www.wikicreole.org/ +''' + +from pelican import readers +from pelican import signals +from pelican import settings + +from pelican.utils import pelican_open + +try: + from creole import creole2html + creole = True +except ImportError: + creole = False + +class CreoleReader(readers.BaseReader): + enabled = creole + + file_extensions = ['creole'] + + def __init__(self, settings): + super(CreoleReader, self).__init__(settings) + + def _parse_header_macro(self, text): + for line in text.split('\n'): + name, value = line.split(':') + name, value = name.strip(), value.strip() + if name == 'title': + self._metadata[name] = value + else: + self._metadata[name] = self.process_metadata(name, value) + return u'' + + # You need to have a read method, which takes a filename and returns + # some content and the associated metadata. + def read(self, source_path): + """Parse content and metadata of creole files""" + + self._metadata = {} + with pelican_open(source_path) as text: + content = creole2html(text, macros={'header': self._parse_header_macro}) + return content, self._metadata + +def add_reader(readers): + readers.reader_classes['creole'] = CreoleReader + +def register(): + signals.readers_init.connect(add_reader)