creole_reader.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #-*- conding: utf-8 -*-
  2. '''
  3. Creole Reader
  4. -------------
  5. This plugins allows you to write your posts using the wikicreole syntax. Give to
  6. these files the creole extension.
  7. For the syntax, look at: http://www.wikicreole.org/
  8. '''
  9. from pelican import readers
  10. from pelican import signals
  11. from pelican import settings
  12. from pelican.utils import pelican_open
  13. try:
  14. from creole import creole2html
  15. creole = True
  16. except ImportError:
  17. creole = False
  18. class CreoleReader(readers.BaseReader):
  19. enabled = creole
  20. file_extensions = ['creole']
  21. def __init__(self, settings):
  22. super(CreoleReader, self).__init__(settings)
  23. def _parse_header_macro(self, text):
  24. for line in text.split('\n'):
  25. name, value = line.split(':')
  26. name, value = name.strip(), value.strip()
  27. if name == 'title':
  28. self._metadata[name] = value
  29. else:
  30. self._metadata[name] = self.process_metadata(name, value)
  31. return u''
  32. # You need to have a read method, which takes a filename and returns
  33. # some content and the associated metadata.
  34. def read(self, source_path):
  35. """Parse content and metadata of creole files"""
  36. self._metadata = {}
  37. with pelican_open(source_path) as text:
  38. content = creole2html(text, macros={'header': self._parse_header_macro})
  39. return content, self._metadata
  40. def add_reader(readers):
  41. readers.reader_classes['creole'] = CreoleReader
  42. def register():
  43. signals.readers_init.connect(add_reader)