diff options
| author | Alexis Metaireau <ametaireau@gmail.com> | 2010-11-06 02:03:32 +0000 |
|---|---|---|
| committer | Alexis Metaireau <ametaireau@gmail.com> | 2010-11-06 02:03:32 +0000 |
| commit | 93c46b7519ebecf9e577890585de69c06880ef3a (patch) | |
| tree | b14e0793c2d8cfefab83fa79b15d461cbe685f2b | |
| parent | f7cbef6393095ed85c327484616d209a6e2e01fb (diff) | |
| download | pelican-2.4.tar.gz | |
Adding pdf support.2.4
| -rwxr-xr-x | bin/pelican | 5 | ||||
| -rw-r--r-- | pelican/contents.py | 12 | ||||
| -rw-r--r-- | pelican/processors.py | 32 | ||||
| -rw-r--r-- | setup.py | 5 |
4 files changed, 45 insertions, 9 deletions
diff --git a/bin/pelican b/bin/pelican index b802946e..533de87e 100755 --- a/bin/pelican +++ b/bin/pelican @@ -4,7 +4,7 @@ import argparse from pelican.utils import clean_output_dir from pelican.generators import Generator from pelican.processors import (ArticlesProcessor, PagesProcessor, - StaticProcessor) + StaticProcessor, PdfProcessor) parser = argparse.ArgumentParser(description="""A tool to generate a static blog, with restructured text input files.""") @@ -31,5 +31,6 @@ if __name__ == '__main__': generator = Generator(args.settings, args.path, args.theme, args.output, markup) clean_output_dir(args.output) - generator.run([ArticlesProcessor, PagesProcessor, StaticProcessor]) + generator.run([ArticlesProcessor, PagesProcessor, StaticProcessor, + PdfProcessor]) print "Enjoy !" diff --git a/pelican/contents.py b/pelican/contents.py index 13d8d320..91cac20d 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -10,7 +10,7 @@ class Page(object): """ mandatory_properties = ('title',) - def __init__(self, content, metadatas={}, settings={}): + def __init__(self, content, metadatas={}, settings={}, filename=None): self.content = content for key, value in metadatas.items(): setattr(self, key, value) @@ -19,6 +19,9 @@ class Page(object): if 'AUTHOR' in settings: self.author = settings['AUTHOR'] + if filename: + self.filename = filename + def check_properties(self): """test that each mandatory property is set.""" for prop in self.mandatory_properties: @@ -27,7 +30,11 @@ class Page(object): @property def url(self): - return '%s.html' % slugify(self.title) + return '%s.html' % self.slug + + @property + def slug(self): + return slugify(self.title) @property def summary(self): @@ -49,4 +56,3 @@ def is_valid_content(content, f): except NameError as e: print u" [info] Skipping %s: impossible to find informations about '%s'" % (f, e) return False - diff --git a/pelican/processors.py b/pelican/processors.py index c23af3f5..b532ead1 100644 --- a/pelican/processors.py +++ b/pelican/processors.py @@ -1,6 +1,8 @@ from operator import attrgetter import os +from rst2pdf.createpdf import RstToPdf + from pelican.utils import update_dict, copytree from pelican.contents import Article, Page, is_valid_content from pelican.readers import read_file @@ -70,7 +72,8 @@ class ArticlesProcessor(Processor): if category != '': metadatas['category'] = unicode(category) - article = Article(content, metadatas, settings=generator.settings) + article = Article(content, metadatas, settings=generator.settings, + filename=f) if not is_valid_content(article, f): continue @@ -102,7 +105,8 @@ class PagesProcessor(Processor): def preprocess(self, context, generator): for f in generator.get_files(os.sep.join((generator.path, 'pages'))): content, metadatas = read_file(f) - page = Page(content, metadatas, settings=generator.settings) + page = Page(content, metadatas, settings=generator.settings, + filename=f) if not is_valid_content(page, f): continue self.pages.append(page) @@ -125,3 +129,27 @@ class StaticProcessor(Processor): copytree(path, generator.theme, generator.output_path) copytree('pics', generator.path, generator.output_path) + +class PdfProcessor(Processor): + """Generate PDFs on the output dir, for all articles and pages coming from + rst""" + + def _create_pdf(self, creator, obj, output_path): + if obj.filename.endswith(".rst"): + creator.createPdf(text=open(obj.filename).read(), + output=os.path.join(output_path, "%s.pdf" % obj.slug)) + + def process(self, context, generator): + pdf_path = os.path.join(generator.output_path, 'pdf') + try: + os.mkdir(pdf_path) + except OSError: + pass + + pdfcreator = RstToPdf(breakside=0, stylesheets=['twelvepoint']) + + for article in context['articles']: + self._create_pdf(pdfcreator, article, pdf_path) + + for page in context['pages']: + self._create_pdf(pdfcreator, page, pdf_path) @@ -1,13 +1,14 @@ from setuptools import setup import sys -requires = ['feedgenerator', 'jinja2', 'pygments', 'docutils', 'Markdown'] +requires = ['feedgenerator', 'jinja2', 'pygments', 'docutils', 'Markdown', + 'rst2pdf'] if sys.version_info < (2,7): requires.append('argparse') setup( name = "pelican", - version = '2.3', + version = '2.4', url = 'http://alexis.notmyidea.org/pelican/', author = 'Alexis Metaireau', author_email = 'alexis@notmyidea.org', |
