From 167d19bdfe76a77754d2e14a80ac0c25c725c379 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Fri, 22 Oct 2010 15:59:50 +0200 Subject: [PATCH] pdf converter, still missing motifs --- librarian/functions.py | 30 +++++++ librarian/pdf.py | 30 +++++-- librarian/pdf/wl-logo.png | Bin 0 -> 33773 bytes librarian/pdf/wl.sty | 72 ++++++++++++++++ librarian/xslt/wl2tex.xslt | 170 +++++++++++++++++++++---------------- 5 files changed, 222 insertions(+), 80 deletions(-) create mode 100644 librarian/pdf/wl-logo.png create mode 100644 librarian/pdf/wl.sty diff --git a/librarian/functions.py b/librarian/functions.py index 6d52b84..8427ba8 100644 --- a/librarian/functions.py +++ b/librarian/functions.py @@ -41,6 +41,26 @@ def reg_strip(): _register_function(strip) +def reg_starts_white(): + def starts_white(context, text): + if isinstance(text, list): + text = ''.join(text) + if not text: + return False + return text[0].isspace() + _register_function(starts_white) + + +def reg_ends_white(): + def ends_white(context, text): + if isinstance(text, list): + text = ''.join(text) + if not text: + return False + return text[-1].isspace() + _register_function(ends_white) + + def reg_wrap_words(): def wrap_words(context, text, wrapping): """XPath extension function automatically wrapping words in passed text""" @@ -63,3 +83,13 @@ def reg_wrap_words(): return '\n'.join(' '.join(line) for line in lines) _register_function(wrap_words) + +def reg_person_name(): + def person_name(context, text): + """ Converts "Name, Forename" to "Forename Name" """ + if isinstance(text, list): + text = ''.join(text) + return ' '.join([t.strip() for t in text.split(',', 1)[::-1]]) + _register_function(person_name) + + diff --git a/librarian/pdf.py b/librarian/pdf.py index 169d661..659390d 100644 --- a/librarian/pdf.py +++ b/librarian/pdf.py @@ -3,6 +3,7 @@ # This file is part of Librarian, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from __future__ import with_statement import os import os.path import shutil @@ -10,6 +11,9 @@ from StringIO import StringIO from tempfile import mkdtemp import re +import sys +sys.path.append('..') # for running from working copy + from Texml.processor import process from lxml import etree from lxml.etree import XMLSyntaxError, XSLTApplyError @@ -18,7 +22,13 @@ from librarian.parser import WLDocument from librarian import ParseError from librarian import functions + + functions.reg_substitute_entities() +functions.reg_person_name() +functions.reg_strip() +functions.reg_starts_white() +functions.reg_ends_white() STYLESHEETS = { 'wl2tex': 'xslt/wl2tex.xslt', @@ -26,7 +36,14 @@ STYLESHEETS = { def insert_tags(doc, split_re, tagname): - print tagname + """ inserts for every occurence of `split_re' in text nodes in the `doc' tree + + >>> t = etree.fromstring('A-B-CX-Y-Z'); + >>> insert_tags(t, re.compile('-'), 'd'); + >>> print etree.tostring(t) + ABCXYZ + """ + for elem in doc.iter(): if elem.text: chunks = split_re.split(elem.text) @@ -42,7 +59,7 @@ def insert_tags(doc, split_re, tagname): elem.tail = chunks.pop(0) while chunks: ins = etree.Element(tagname) - ins.tail = chunks.pop(0) + ins.tail = chunks.pop() parent.insert(ins_index, ins) @@ -58,8 +75,11 @@ def fix_hanging(doc): "nbsp") +def get_resource(path): + return os.path.join(os.path.dirname(__file__), path) + def get_stylesheet(name): - return os.path.join(os.path.dirname(__file__), STYLESHEETS[name]) + return get_resource(STYLESHEETS[name]) def transform(provider, slug, output_file=None, output_dir=None): """ produces a pdf file @@ -78,8 +98,6 @@ def transform(provider, slug, output_file=None, output_dir=None): substitute_hyphens(document.edoc) fix_hanging(document.edoc) - - print etree.tostring(document.edoc) # if output to dir, create the file if output_dir is not None: @@ -96,6 +114,8 @@ def transform(provider, slug, output_file=None, output_dir=None): fout.close() del texml + shutil.copy(get_resource('pdf/wl.sty'), temp) + shutil.copy(get_resource('pdf/wl-logo.png'), temp) print "pdflatex -output-directory %s %s" % (temp, os.path.join(temp, 'doc.tex')) if os.system("pdflatex -output-directory %s %s" % (temp, os.path.join(temp, 'doc.tex'))): raise ParseError("Error parsing .tex file") diff --git a/librarian/pdf/wl-logo.png b/librarian/pdf/wl-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..03b46b5fd6ab6ddd869a20b7c7005f8f342c2b88 GIT binary patch literal 33773 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 J5P$mW{{R6qS7`tM literal 0 HcmV?d00001 diff --git a/librarian/pdf/wl.sty b/librarian/pdf/wl.sty new file mode 100644 index 0000000..f904646 --- /dev/null +++ b/librarian/pdf/wl.sty @@ -0,0 +1,72 @@ +\usepackage[MeX]{polski} +\usepackage[utf8]{inputenc} +\pagestyle{plain} +%\usepackage{antpolt} +\usepackage{graphicx} +\usepackage{fancyhdr} + +\makeatletter + +% bottom figure below footnotes +\usepackage{fnpos} +\makeFNabove + +\usepackage{color} +\definecolor{theme-gray}{gray}{.3} + +\setlength{\marginparsep}{2em} +\setlength{\marginparwidth}{8.5em} +\setlength{\oddsidemargin}{0pt} +\setlength{\voffset}{0pt} +\setlength{\topmargin}{0pt} +\setlength{\headheight}{0pt} +\setlength{\headsep}{0pt} +\setlength{\textheight}{24cm} + +\pagestyle{fancy} +\renewcommand{\headrulewidth}{0pt} +\renewcommand{\footrulewidth}{0.4pt} +\lfoot{\footnotesize \@author, \emph{\@title}} +\cfoot{} +\rfoot{\footnotesize \thepage} + +\clubpenalty=100000 +\widowpenalty=100000 +%\interlinepenalty=8000 + + +\renewcommand{\maketitle}{ + \thispagestyle{empty} + \footnotesize + \color{theme-gray} + + \noindent \begin{minipage}[t]{.35\textwidth}\vspace{0pt} + \includegraphics[width=\textwidth]{pdf/wl-logo.png} + \end{minipage} + \begin{minipage}[t]{.65\textwidth}\vspace{0pt} + Wejdź na stronę http://wolnelektury.pl/ i~zobacz, jak wiele możliwości daje interaktywna wersja szkolnej biblioteki + internetowej Wolne Lektury. + \vspace{.5em} + + Ten utwór nie jest chroniony prawem autorskim i~znajduje się w~domenie publicznej, co oznacza, że możesz go swobodnie wykorzystywać, publikować i~rozpowszechniać. + + \vspace{.6em} + + \end{minipage} + \noindent \rule{\linewidth}{0.4pt} + + \vspace{.6em} + \color{black} + + \begin{figure}[b!] + \footnotesize + \color{theme-gray} + \noindent \rule{\linewidth}{0.4pt} + + Szkolna biblioteka internetowa Wolne Lektury tworzona jest dzięki pracy Wolontariuszy, ale to osoby + zatrudnione w~FNP będą musiały wymyślić, co powinno zostać napisane w~tym miejscu. Można zupełnie usunąć + tę sekcję, ale autor konwertera chciał się popisać, że umie coś takiego zrobić. + \color{black} + \end{figure} +} + diff --git a/librarian/xslt/wl2tex.xslt b/librarian/xslt/wl2tex.xslt index 74292a7..5de6d85 100644 --- a/librarian/xslt/wl2tex.xslt +++ b/librarian/xslt/wl2tex.xslt @@ -12,33 +12,30 @@ - \documentclass[a4paper, oneside, 11pt]{book} - \usepackage[MeX]{polski} - \usepackage[utf8]{inputenc} - \pagestyle{plain} - \usepackage{antpolt} - \usepackage[bottom]{footmisc} - - \usepackage{color} - \definecolor{theme-gray}{gray}{.3} - - - \setlength{\marginparsep}{2em} - \setlength{\marginparwidth}{8.5em} - \setlength{\oddsidemargin}{0pt} - \clubpenalty=10000 - \widowpenalty=10000 + \usepackage{wl} - - + + + + + + + + + + + + + + @@ -46,52 +43,75 @@ - - - - + + + + + + + + + + + + + + + + - - - - + + + - - + + + + + + + - - + + + + - - - - - - + + - - + + + + - - - - + + + + + + + + + + + + + + + + @@ -110,22 +130,23 @@ - + - + - + 0.4 + 0.6 - + @@ -157,26 +178,15 @@ - - - - - - - - - - - - - - + +X + + + - - @@ -283,16 +293,19 @@ - - - + 0.4 + 0.6 + + + + - + @@ -318,7 +331,6 @@ - @@ -354,7 +366,7 @@ - + @@ -400,7 +412,15 @@ - + + + + + + + + + -- 2.20.1