summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Metaireau <ametaireau@gmail.com>2010-11-06 02:03:32 +0000
committerAlexis Metaireau <ametaireau@gmail.com>2010-11-06 02:03:32 +0000
commit93c46b7519ebecf9e577890585de69c06880ef3a (patch)
treeb14e0793c2d8cfefab83fa79b15d461cbe685f2b
parentf7cbef6393095ed85c327484616d209a6e2e01fb (diff)
downloadpelican-2.4.tar.gz
Adding pdf support.2.4
-rwxr-xr-xbin/pelican5
-rw-r--r--pelican/contents.py12
-rw-r--r--pelican/processors.py32
-rw-r--r--setup.py5
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)
diff --git a/setup.py b/setup.py
index a1adc622..80d50568 100644
--- a/setup.py
+++ b/setup.py
@@ -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',