diff --git a/creole_reader/Readme.md b/creole_reader/Readme.md
index d478bf2..d72bc07 100644
--- a/creole_reader/Readme.md
+++ b/creole_reader/Readme.md
@@ -1,7 +1,7 @@
# 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 `<> <>`
For the complete syntax, look at: http://www.wikicreole.org/
@@ -24,12 +26,16 @@ date: 2013-12-12
= Title 1
== Title 2
-Some nice texte with **strong** and //emphasis//.
+Some nice text with **strong** and //emphasis//.
* A nice list
-** With subelements
+** With sub-elements
* Python
+<>
+print("Hello World")
+<>
+
# An ordered list
# A second item
```
diff --git a/creole_reader/creole_reader.py b/creole_reader/creole_reader.py
index 49317c5..c95651b 100644
--- a/creole_reader/creole_reader.py
+++ b/creole_reader/creole_reader.py
@@ -21,6 +21,14 @@ try:
except ImportError:
creole = False
+try:
+ from pygments import lexers
+ from pygments.formatters import HtmlFormatter
+ from pygments import highlight
+ PYGMENTS = True
+except:
+ PYGMENTS = False
+
class CreoleReader(readers.BaseReader):
enabled = creole
@@ -39,6 +47,42 @@ class CreoleReader(readers.BaseReader):
self._metadata[name] = self.process_metadata(name, value)
return u''
+ def _no_highlight(self, text):
+ html = u'\n
{}\n'.format(text)
+ return html
+
+ def _get_lexer(self, source_type, code):
+ try:
+ return lexers.get_lexer_by_name(source_type)
+ except:
+ return lexers.guess_lexer(code)
+
+ def _get_formatter(self):
+ formatter = HtmlFormatter(lineos = True, encoding='utf-8',
+ style='colorful', outencoding='utf-8',
+ cssclass='pygments')
+ return formatter
+
+ def _parse_code_macro(self, ext, text):
+ if not PYGMENTS:
+ return self._no_highlight(text)
+
+ try:
+ source_type = ''
+ if '.' in ext:
+ source_type = ext.strip().split('.')[1]
+ else:
+ source_type = ext.strip()
+ except IndexError:
+ source_type = ''
+ lexer = self._get_lexer(source_type, text)
+ formatter = self._get_formatter()
+
+ try:
+ return highlight(text, lexer, formatter).decode('utf-8')
+ except:
+ return self._no_highlight(text)
+
# You need to have a read method, which takes a filename and returns
# some content and the associated metadata.
def read(self, source_path):
@@ -46,7 +90,8 @@ class CreoleReader(readers.BaseReader):
self._metadata = {}
with pelican_open(source_path) as text:
- content = creole2html(text, macros={'header': self._parse_header_macro})
+ content = creole2html(text, macros={'header': self._parse_header_macro,
+ 'code': self._parse_code_macro})
return content, self._metadata
def add_reader(readers):