From 0a1a868b378d16800719be4b9663a78021815f26 Mon Sep 17 00:00:00 2001 From: Nico Di Rocco Date: Fri, 7 Sep 2012 08:46:38 +0200 Subject: [PATCH] Added sourcefile generator that generates .text files --- docs/plugins.rst | 10 +++------- docs/settings.rst | 3 +++ pelican/__init__.py | 6 +++--- pelican/generators.py | 10 ++++++++++ pelican/settings.py | 1 + pelican/signals.py | 1 - 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/docs/plugins.rst b/docs/plugins.rst index 654b18f7..0808ce04 100644 --- a/docs/plugins.rst +++ b/docs/plugins.rst @@ -53,14 +53,10 @@ List of signals Here is the list of currently implemented signals: -========================= ============================ =========================================================================== +========================= ============================ ========================================= Signal Arguments Description -========================= ============================ =========================================================================== +========================= ============================ ========================================= initialized pelican object -finalized pelican object invoked after all the generators are executed and just before pelican exits - usefull for custom post processing actions, such as: - - minifying js/css assets. - - notify/ping search engines with an updated sitemap. article_generate_context article_generator, metadata article_generator_init article_generator invoked in the ArticlesGenerator.__init__ get_generators generators invoked in Pelican.get_generator_classes, @@ -68,7 +64,7 @@ get_generators generators invoked in Pelican.ge generator in a tuple or in a list. pages_generate_context pages_generator, metadata pages_generator_init pages_generator invoked in the PagesGenerator.__init__ -========================= ============================ =========================================================================== +========================= ============================ ========================================= The list is currently small, don't hesitate to add signals and make a pull request if you need them! diff --git a/docs/settings.rst b/docs/settings.rst index 2db98259..a0411e0b 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -69,6 +69,9 @@ Setting name (default value) What doe `PDF_GENERATOR` (``False``) Set to True if you want to have PDF versions of your documents. You will need to install `rst2pdf`. +`OUTPUT_SOURCES` (``False``) Set to True if you want to copy the articles and pages in their + original format (e.g. Markdown or ReStructeredText) to the + specified OUTPUT_PATH. `RELATIVE_URLS` (``True``) Defines whether Pelican should use document-relative URLs or not. If set to ``False``, Pelican will use the SITEURL setting to construct absolute URLs. diff --git a/pelican/__init__.py b/pelican/__init__.py index 0af52c44..620f8406 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -9,7 +9,7 @@ import argparse from pelican import signals from pelican.generators import (Generator, ArticlesGenerator, PagesGenerator, - StaticGenerator, PdfGenerator, LessCSSGenerator) + StaticGenerator, PdfGenerator, LessCSSGenerator, SourceFileGenerator) from pelican.log import init from pelican.settings import read_settings, _DEFAULT_CONFIG from pelican.utils import clean_output_dir, files_changed, file_changed, NoFilesError @@ -179,14 +179,14 @@ class Pelican(object): if hasattr(p, 'generate_output'): p.generate_output(writer) - signals.finalized.send(self) - def get_generator_classes(self): generators = [StaticGenerator, ArticlesGenerator, PagesGenerator] if self.settings['PDF_GENERATOR']: generators.append(PdfGenerator) if self.settings['LESS_GENERATOR']: # can be True or PATH to lessc generators.append(LessCSSGenerator) + if self.settings['OUTPUT_SOURCES']: + generators.append(SourceFileGenerator) for pair in signals.get_generators.send(self): (funct, value) = pair diff --git a/pelican/generators.py b/pelican/generators.py index 94edb3b2..b28e5c6d 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -491,6 +491,16 @@ class PdfGenerator(Generator): for page in self.context['pages']: self._create_pdf(page, pdf_path) +class SourceFileGenerator(Generator): + def _create_source(self, obj, output_path): + filename = os.path.splitext(obj.save_as)[0] + dest = os.path.join(output_path, filename + '.text') + copy('', obj.filename, dest) + + def generate_output(self, writer=None): + logger.info(u' Generating source files...') + for object in chain(self.context['articles'], self.context['pages']): + self._create_source(object, self.output_path) class LessCSSGenerator(Generator): """Compile less css files.""" diff --git a/pelican/settings.py b/pelican/settings.py index 92c68ddc..df105673 100644 --- a/pelican/settings.py +++ b/pelican/settings.py @@ -32,6 +32,7 @@ _DEFAULT_CONFIG = {'PATH': '.', 'SITENAME': 'A Pelican Blog', 'DISPLAY_PAGES_ON_MENU': True, 'PDF_GENERATOR': False, + 'OUTPUT_SOURCES': False, 'DEFAULT_CATEGORY': 'misc', 'DEFAULT_DATE': 'fs', 'WITH_FUTURE_DATES': True, diff --git a/pelican/signals.py b/pelican/signals.py index 408d84c9..7ee88a0a 100644 --- a/pelican/signals.py +++ b/pelican/signals.py @@ -1,7 +1,6 @@ from blinker import signal initialized = signal('pelican_initialized') -finalized = signal('pelican_finalized') article_generate_context = signal('article_generate_context') article_generator_init = signal('article_generator_init') get_generators = signal('get_generators')