mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Adding pdf support.
This commit is contained in:
parent
f7cbef6393
commit
93c46b7519
4 changed files with 45 additions and 9 deletions
|
|
@ -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 !"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
5
setup.py
5
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',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue