diff -Nru rst2pdf-0.16/CHANGES.txt rst2pdf-0.93/CHANGES.txt --- rst2pdf-0.16/CHANGES.txt 2010-10-06 21:12:39.000000000 +0000 +++ rst2pdf-0.93/CHANGES.txt 2012-12-18 19:39:21.000000000 +0000 @@ -1,3 +1,81 @@ +New in 0.93 +----------- + +* Fixed Issue 447: Double-sided always starts on the right (By Rob Ludwick) + + * Removed --first-page-even as it was not used anywhere. + * Added --first-page-on-right + +* Fixed Issue 464: support alignment via :class: in image directives. +* Fixed Issue 482: Line blocks with indented parts get extraneous spacing +* Fixed Issue 470: Support for :target: in figures. +* New style "image" to be applied to image directives. +* Fixed Issue 485: Better styling support for figures/images (spaceBefore/After) +* Support rst2pdf [inf [outf]] syntax to be more compatible with rst2* +* Implemented Issue 389: New --strip-element-with-class option +* Fixed Issue 474: CellStyle1 is not there in reportlab 2.6 +* Removed default padding from DelayedTable, which looked bad + on headers/footers. +* Improvements to the math directive (font color and size) +* Better support for styling literals. +* Fixed Issue 454 (Splitting failure) +* Regressed Issue 374 (some literal blocks get oversplit) +* Switched from svglib to svg2rlg +* Removed uniconvertor support +* Fixed Issue 477: Sink footnote separator (patch by asermax) +* Fixed Issue 473: Support "code" directive like an alias of code-block. +* Fixed Issue 472: Implemented MyImage._unRestrictSize +* Fixed Issue 471: Respect class in lineblocks. +* Fixed Issue 455: New pisa/xhtml2pdf has very different imports +* Reopened Issue 289: Broken bullet customization. +* Reopened Issue 310: Line numbers in code blocks are wrong +* Reopened Issue 337: Bad layout with inline images in tables +* Marked Issue 358 as fixed. +* Fixed Issue 410: always include full lines in code-blocks (mmueller patch) +* Regression in fancytitles extension: Issue 486 + +New in 0.92 +----------- + +* Fixed Issue 394; missing _restrictSize method with RL 2.5 +* Fixed Issue 452: applying missing classes to lists crashed rst2pdf +* Fixed Issue 427: multiple spaces collapsed on inline literals. +* Fixed Issue 451: roman.py was moved in docutils 0.9 +* Fixed Issue 446: made it work again with python 2.4 + +New in 0.91 +----------- + +* Fixed Issue 438: sphinx support was completely broken in 0.90 + +New in 0.90 +----------- + +* Added raw HTML support, by Dimitri Christodoulou +* Fixed Issue 422: Having no .afm files made font lookup slow. +* Fixed Issue 411: Sometimes the windows registry has the font's abspath. +* Fixed Issue 430: Using --config option caused other options to + be ignored (by charles at cstanhope dot com) +* Fixed Issue 436: Add pdf_style_path to sphinx (by tyler@datastax.com) +* Fixed Issue 428: page numbers logged as errors +* Added support for many pygments options in code-block (by Joaquin Sorianello) +* Implemented Issue 404: plantuml support +* Issue 399: support sphinx's template path option +* Fixed Issue 406: calls to the wrong logging function +* Implemented Issue 391: New --section-header-depth option. +* Fixed Issue 390: the --config option was ignored. +* Added support for many pygments options in code-block (by Joaquin Sorianello) +* Fixed Issue 379: Wrong style applied to paragraphs in definitions. +* Fixed Issue 378: Multiline :address: were shown collapsed. +* Implemented Issue 11: FrameBreak (and conditional FrameBreak) +* The description of frames in page templates was just wrong. +* Fixed Issue 374: in some cases, literal blocks were split inside + a page, or the pagebreak came too early. +* Fixed Issue 370: warning about sphinx.addnodes.highlightlang not being + handled removed. +* Fixed Issue 369: crash in hyphenator when specifying "en" as a language. +* Compatibility fix to Sphinx 0.6.x (For python 2.7 docs) + New in 0.16 ----------- diff -Nru rst2pdf-0.16/Contributors.txt rst2pdf-0.93/Contributors.txt --- rst2pdf-0.16/Contributors.txt 2010-03-18 18:50:00.000000000 +0000 +++ rst2pdf-0.93/Contributors.txt 2012-06-22 18:07:11.000000000 +0000 @@ -8,3 +8,10 @@ * Joshua J. Kugler * Patrick Maupin * anatoly techtonik +* Joaquin Sorianello +* tyler at datastax.com +* charles at stanhope.com +* al.yazdi +* Dimitri Christodoulou +* Paul Nation +* Robert Johansson diff -Nru rst2pdf-0.16/buildout.cfg rst2pdf-0.93/buildout.cfg --- rst2pdf-0.16/buildout.cfg 2010-03-25 14:43:34.000000000 +0000 +++ rst2pdf-0.93/buildout.cfg 2012-12-07 18:19:26.000000000 +0000 @@ -7,24 +7,42 @@ recipe = zc.recipe.egg:scripts eggs = rst2pdf [svgsupport, images, aafiguresupport, tests] sphinx - docutils + docutils>0.9 reportlab aafigure nose coverage PIL + pdfrw + svg2rlg +find-links = http://distfiles.minitage.org/public/externals/minitage/ + +[rst2pdf-rl24] +recipe = zc.recipe.egg:scripts +eggs = rst2pdf [svgsupport, images, aafiguresupport, tests] + sphinx + docutils + reportlab==2.4 + aafigure + nose + coverage + PIL + pdfrw + svg2rlg find-links = http://distfiles.minitage.org/public/externals/minitage/ -[rst2pdf-rl23] +[rst2pdf-rl25] recipe = zc.recipe.egg:scripts eggs = rst2pdf [svgsupport, images, aafiguresupport, tests] sphinx docutils - reportlab==2.3 + reportlab==2.5 aafigure nose coverage PIL + pdfrw + svg2rlg find-links = http://distfiles.minitage.org/public/externals/minitage/ [wordaxe] diff -Nru rst2pdf-0.16/debian/changelog rst2pdf-0.93/debian/changelog --- rst2pdf-0.16/debian/changelog 2013-04-21 06:43:32.000000000 +0000 +++ rst2pdf-0.93/debian/changelog 2013-11-26 18:32:09.000000000 +0000 @@ -1,11 +1,11 @@ -rst2pdf (0.16-2ubuntu1) raring; urgency=low +rst2pdf (0.93-1) unstable; urgency=low - * Fix CellStyle class name from python-reportlab in rst2pdf/styles.py to - also work with python-reportlab-2.6 (still works with 2.5 too). - - Added as debian/patches/reportlab_cellstyle.diff - - Already fixed in trunk upstream + * New upstream release. (Closes: #730547) + * Bump Standards-Version to 3.9.4. + * Require at least python-pdfrw 0.1 to avoid a + pkg_resources.DistributionNotFound traceback. - -- Scott Kitterman Sun, 21 Apr 2013 02:36:18 -0400 + -- Chris Lamb Tue, 26 Nov 2013 18:32:07 +0000 rst2pdf (0.16-2) unstable; urgency=low diff -Nru rst2pdf-0.16/debian/control rst2pdf-0.93/debian/control --- rst2pdf-0.16/debian/control 2013-04-21 06:43:37.000000000 +0000 +++ rst2pdf-0.93/debian/control 2013-11-26 18:32:09.000000000 +0000 @@ -1,18 +1,17 @@ Source: rst2pdf Section: utils Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Chris Lamb +Maintainer: Chris Lamb Build-Depends-Indep: python-support, python-setuptools Build-Depends: debhelper (>= 7.0.50~) -Standards-Version: 3.9.2 +Standards-Version: 3.9.4 Homepage: http://code.google.com/p/rst2pdf/ Vcs-Git: git://github.com/lamby/pkg-rst2pdf.git Vcs-Browser: https://github.com/lamby/pkg-rst2pdf Package: rst2pdf Architecture: all -Depends: ${python:Depends}, ${misc:Depends}, python-pkg-resources, python-docutils, python-reportlab, python-simplejson, python-setuptools, python-pygments, python-pdfrw +Depends: ${python:Depends}, ${misc:Depends}, python-pkg-resources, python-docutils, python-reportlab, python-simplejson, python-setuptools, python-pygments, python-pdfrw (>= 0.1) Suggests: python-uniconvertor, python-imaging, python-sphinx, python-matplotlib, python-aafigure Description: ReportLab-based reStructuredText to PDF renderer The usual way of creating PDF files from reStructuredText is by going through diff -Nru rst2pdf-0.16/debian/patches/reportlab_cellstyle.diff rst2pdf-0.93/debian/patches/reportlab_cellstyle.diff --- rst2pdf-0.16/debian/patches/reportlab_cellstyle.diff 2013-04-21 06:42:45.000000000 +0000 +++ rst2pdf-0.93/debian/patches/reportlab_cellstyle.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -Description: - * Fix CellStyle class name from python-reportlab in rst2pdf/styles.py to - also work with python-reportlab-2.6 (still works with 2.5 too). -Author: Scott Kitterman - -Origin: , -Bug: http://code.google.com/p/rst2pdf/issues/detail?id=474 -Forwarded: http://code.google.com/p/rst2pdf/issues/detail?id=474 - ---- rst2pdf-0.16.orig/rst2pdf/styles.py -+++ rst2pdf-0.16/rst2pdf/styles.py -@@ -524,7 +524,7 @@ class StyleSheet(object): - # Make stdFont the basefont, for Issue 65 - reportlab.rl_config.canvas_basefontname = self['base'].fontName - # Make stdFont the default font for table cell styles (Issue 65) -- reportlab.platypus.tables.CellStyle1.fontname=self['base'].fontName -+ reportlab.platypus.tables.CellStyle.fontname=self['base'].fontName - - - def __getitem__(self, key): diff -Nru rst2pdf-0.16/debian/patches/series rst2pdf-0.93/debian/patches/series --- rst2pdf-0.16/debian/patches/series 2013-04-21 06:41:00.000000000 +0000 +++ rst2pdf-0.93/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -reportlab_cellstyle.diff diff -Nru rst2pdf-0.16/doc/config.sample rst2pdf-0.93/doc/config.sample --- rst2pdf-0.16/doc/config.sample 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/doc/config.sample 2012-03-04 15:59:51.000000000 +0000 @@ -85,4 +85,7 @@ # Use floating images. # Makes the behaviour of images with the :align: attribute more like rst2html's -floating_images = false \ No newline at end of file +floating_images = false + +# Support the ..raw:: html directive +raw_html = false diff -Nru rst2pdf-0.16/doc/cover.tmpl rst2pdf-0.93/doc/cover.tmpl --- rst2pdf-0.16/doc/cover.tmpl 2010-05-05 13:30:00.000000000 +0000 +++ rst2pdf-0.93/doc/cover.tmpl 2012-12-18 19:48:07.000000000 +0000 @@ -9,7 +9,7 @@ .. class:: centered -Version 0.16 +Version 0.93 .. raw:: pdf Binary files /tmp/XBquCa6PS4/rst2pdf-0.16/doc/manual.pdf and /tmp/JeJSPGrXz7/rst2pdf-0.93/doc/manual.pdf differ diff -Nru rst2pdf-0.16/doc/manual.txt rst2pdf-0.93/doc/manual.txt --- rst2pdf-0.16/doc/manual.txt 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/doc/manual.txt 2012-12-18 19:39:21.000000000 +0000 @@ -3,8 +3,8 @@ ================== :author: Roberto Alsina -:version: 0.16 -:revision: $LastChangedRevision: 2393 $ +:version: 0.93 +:revision: $LastChangedRevision: 2626 $ .. header:: @@ -170,47 +170,16 @@ For raster images, rst2pdf supports anything PIL (The Python Imaging Library) supports. The exact list of supported formats varies according to your PIL version and system. -For vector image support, you need to install Dinu Gherman's svglib -(http://pypi.python.org/pypi/svglib/) or Uniconvertor from http://sk1project.org -version 1.1.3 or later. - -It provides support for these formats: - -* CorelDRAW ver.7-X3,X4 (CDR/CDT/CCX/CDRX/CMX) -* Adobe Illustrator up to 9 ver. (AI postscript based) -* Postscript (PS) -* Encapsulated Postscript (EPS) -* Computer Graphics Metafile (CGM) -* Windows Metafile (WMF) -* XFIG -* Scalable Vector Graphics (SVG) -* Skencil/Sketch/sK1 (SK and SK1) -* Acorn Draw (AFF) +For SVG support, you need to install svg2rlg or use the inkscape extension. Some features will not work when using these images.For example, gradients will not -display, and text may cause problems. +display, and text may cause problems depending on font availability. -To test suitability of your vector images for use with rst2pdf, try converting them -to PDF using uniconvertor. The result should be exactly the way they will look -when used in your documents. +You can also use PDF images, via pdfrw. If you can choose between raster and vectorial images, for non-photographic images, vector files are usually smaller and look better, specially when printed. -If you want to use PDF files as images, you need to install PythonMagick -(http://www.imagemagick.org), which will be used to convert it to PNG and -then inserted in your document. If the quality is not good enough, try something like -``--default-dpi 1200`` - -This only works for one-page PDF files, and has several drawbacks, such as -inability to copy text from the embedded image. - -In the future, rst2pdf will support ReportLab's PageCatcher to properly embed PDFs. That -is not implemented yet, though. - -If there is any other image format you need supported, please report it as a feature -request in rst2pdf's site. - .. note:: Image URLs Attempting to be more compatible with rst2html, rst2pdf will try @@ -1021,6 +990,45 @@ ZeroDivisionError: integer division or modulo by zero Exit 1 +The code-block directive supports many options, that mirror pygments':: + + FIXME: fix this to really explain them all. This is a placeholder. + + 'stripnl' : string_bool, + 'stripall': string_bool, + 'ensurenl': string_bool, + 'tabsize' : directives.positive_int, + 'encoding': directives.encoding, + # Lua + 'func_name_hightlighting':string_bool, + 'disabled_modules': string_list, + # Python Console + 'python3': string_bool, + # Delphi + 'turbopascal':string_bool, + 'delphi' :string_bool, + 'freepascal': string_bool, + 'units': string_list, + # Modula2 + 'pim' : string_bool, + 'iso' : string_bool, + 'objm2' : string_bool, + 'gm2ext': string_bool, + # CSharp + 'unicodelevel' : csharp_unicodelevel, + # Literate haskell + 'litstyle' : lhs_litstyle, + # Raw + 'compress': raw_compress, + # Rst + 'handlecodeblocks': string_bool, + # Php + 'startinline': string_bool, + 'funcnamehighlighting': string_bool, + 'disabledmodules': string_list, + +You can find more information about them in the pygments manual. + File inclusion -------------- @@ -1083,6 +1091,9 @@ Raw Directive ============= +Raw PDF +------- + Rst2pdf has a very limited mechanism to pass commands to reportlab, the PDF generation library. You can use the raw directive to insert pagebreaks and spacers (other reportlab flowables may be added if there's interest), and set page transitions. @@ -1166,6 +1177,23 @@ PageBreak twoColumn +Frame Breaks +------------ + +If you want to jump to the next frame in the page (or the next page if the current +frame is the last), you can use the FrameBreak command. It takes an optional +height in points, and then it only breaks the frame if there is less than that +vertical space available. + +For example, if you don't want a paragraph to begin if it's less than 50 points from the +bottom of the frame:: + + .. raw:: pdf + + FrameBreak 50 + + This paragraph is so important that I don't want it at the very bottom of the page... + Page Transitions ---------------- @@ -1215,6 +1243,13 @@ Transition Dissolve 1 PageBreak +Raw HTML +-------- + +If you have a document that contais raw HTML, andhave xhtml2pdf installed, rst2pdf +will try to render that HTML inside your documet. To enable this, use +the --raw-html command line option. + The counter role ================ @@ -1343,6 +1378,17 @@ Rst2pdf doesn't support numbering equations yet. +The math directive supports the following options: + +``:fontsize:`` + Sets the font size used in the math directive. By default it will use the paragraph's + font and size. + +``:color:`` + Can change the color of the math directive's output. Can take either a color by name + like ``red`` or a hex code like ``#4c050f`` + + Hyphenation =========== @@ -1465,14 +1511,14 @@ A page template has a name (oneColumn, twoColumn), some options, and a list of frames. A frame is a list containing this:: - [ left position, top position, width, height ] + [ left position, bottom position, width, height ] -For example, this defines a frame "at the very left", "at the very top", "a bit less than half +For example, this defines a frame "at the very left", "at the very bottom", "a bit less than half a page wide" and "as tall as possible":: ["0cm", "0cm", "49%", "100%"] -And this means "the bottom third of the page":: +And this means "the top third of the page":: ["0cm", "66.66%", "100%", "33.34%"] @@ -1635,6 +1681,9 @@ # A comma-separated list of custom stylesheets. Example: pdf_stylesheets = ['sphinx','kerning','a4'] + # A list of folders to search for stylesheets. Example: + pdf_style_path = ['.', '_styles'] + # Create a compressed PDF # Use True/False or 1/0 # Example: compressed=True diff -Nru rst2pdf-0.16/doc/rst2pdf.1 rst2pdf-0.93/doc/rst2pdf.1 --- rst2pdf-0.16/doc/rst2pdf.1 2010-10-06 21:24:01.000000000 +0000 +++ rst2pdf-0.93/doc/rst2pdf.1 2012-12-18 19:50:24.000000000 +0000 @@ -1,4 +1,4 @@ -.\" Man page generated from reStructeredText. +.\" Man page generated from reStructuredText. . .TH RST2PDF 1 "" "" "text processing" .SH NAME @@ -42,63 +42,53 @@ .INDENT 0.0 .TP .B \-h, \-\-help -. Show this help message and exit .TP .BI \-\-config\fB= FILE -. Config file to use. Default=~/.rst2pdf/config .TP .BI \-o \ FILE, \ \-\-output\fB= FILE -. Write the PDF to FILE .TP .BI \-s \ STYLESHEETS, \ \-\-stylesheets\fB= STYLESHEETS -. A comma\-separated list of custom stylesheets. Default="" .TP .BI \-\-stylesheet\-path\fB= FOLDERLIST -. A colon\-separated list of folders to search for stylesheets. Default="" .TP .B \-c, \-\-compressed -. Create a compressed PDF. Default=False .TP .B \-\-print\-stylesheet -. Print the default stylesheet and exit .TP .BI \-\-font\-folder\fB= FOLDER -. Search this folder for fonts. (Deprecated) .TP .BI \-\-font\-path\fB= FOLDERLIST -. A colon\-separated list of folders to search for fonts. Default="" .TP .BI \-\-baseurl\fB= URL -. The base URL for relative URLs. .TP .BI \-l \ LANG, \ \-\-language\fB= LANG -. Language to be used for hyphenation and docutils localization. Default=None .TP .BI \-\-header\fB= HEADER -. Page header if not specified in the document. .TP .BI \-\-footer\fB= FOOTER -. Page footer if not specified in the document. .TP +.BI \-\-section\-header\-depth\fB= N +Sections up to this dept will be used in the header +and footer\(aqs replacement of ###Section###. Default=2 +.TP .BI \-\-smart\-quotes\fB= VALUE -. Try to convert ASCII quotes, ellipsis and dashes to the typographically correct equivalent. Default=0 .UNINDENT @@ -106,128 +96,111 @@ The possible values are: .INDENT 0.0 .IP 0. 4 -. Suppress all transformations. (Do nothing.) .IP 1. 4 -. Performs default SmartyPants transformations: quotes (including backticks\-style), em\-dashes, and ellipses. "\-\-" (dash dash) is used to signify an em\-dash; there is no support for en\-dashes. .IP 2. 4 -. Same as \-\-smart\-quotes=1, except that it uses the old\-school typewriter shorthand for dashes: "\-\-" (dash dash) for en\-dashes, "\-\-\-" (dash dash dash) for em\-dashes. .IP 3. 4 -. Same as \-\-smart\-quotes=2, but inverts the shorthand for dashes: "\-\-" (dash dash) for em\-dashes, and "\-\-\-" (dash dash dash) for en\-dashes. .UNINDENT .INDENT 0.0 .TP .BI \-\-fit\-literal\-mode\fB= MODE -. What to do when a literal is too wide. One of error,overflow,shrink,truncate. Default="shrink" .TP .BI \-\-fit\-background\-mode\fB= MODE -. How to fit the background image to the page. One of scale or center. Default="center" .TP .B \-\-inline\-links -. Shows target between parenthesis instead of active link .TP .B \-\-repeat\-table\-rows -. Repeats header row for each splitted table .TP +.B \-\-raw\-html +Support embeddig raw HTML. Default: False +.TP .B \-q, \-\-quiet -. Print less information. .TP .B \-v, \-\-verbose -. Print debug information. .TP .B \-\-very\-verbose -. Print even more debug information. .TP .B \-\-version -. Print version number and exit. .TP .B \-\-no\-footnote\-backlinks -. Disable footnote backlinks. Default: False .TP .B \-\-inline\-footnotes -. Show footnotes inline. Default: True .TP .BI \-\-default\-dpi\fB= NUMBER -. DPI for objects sized in pixels. Default=300 .TP .B \-\-show\-frame\-boundary -. Show frame borders (only useful for debugging). Default=False .TP .B \-\-disable\-splittables -. Don\(aqt use splittable flowables in some elements. Only try this if you can\(aqt process a document any other way. .TP .BI \-b \ LEVEL, \ \-\-break\-level\fB= LEVEL -. Maximum section level that starts in a new page. Default: 0 +.UNINDENT +.INDENT 0.0 .TP -.B \-\-first\-page\-even -. -Whether first page is odd (as in the screen on "facing -pages"), or even (as in a book) +.B \-\-first\-page\-on\-right When using double sided pages, the first page will start +on the right hand side. (Book Style) +.UNINDENT +.INDENT 0.0 .TP .B \-\-blank\-first\-page -. Add a blank page at the beginning of the document. .TP .BI \-\-break\-side\fB= VALUE -. How section breaks work. Can be "even", and sections start in an even page,"odd", and sections start in odd pages, or "any" and sections start in the next page,be it even or odd. See also the \-b option. .TP .B \-\-date\-invariant -. Don\(aqt store the current date in the PDF. Useful mainly for the test suite, where we don\(aqt want the PDFs to change. .TP .BI \-e \ EXTENSIONS -. Alias for \-\-extension\-module .TP .BI \-\-extension\-module\fB= EXTENSIONS -. Add a helper extension module to this invocation of rst2pdf (module must end in .py and be on the python path) .TP .BI \-\-custom\-cover\fB= FILE -. Template file used for the cover page. Default: cover.tmpl .TP .B \-\-use\-floating\-images -. Makes images with :aling: attribute work more like in rst2html. Default: False .TP .B \-\-use\-numbered\-links -. When using numbered sections, adds the numbers to all links referring to the section headers. Default: False +.TP +.BI \-\-strip\-elements\-with\-class\fB= CLASS +Remove elements with this CLASS from the output. Can +be used multiple times. .UNINDENT .SH EXAMPLES .sp @@ -237,5 +210,4 @@ .SH AUTHOR Chris Lamb for the Debian project .\" Generated by docutils manpage writer. -.\" . diff -Nru rst2pdf-0.16/doc/rst2pdf.txt rst2pdf-0.93/doc/rst2pdf.txt --- rst2pdf-0.16/doc/rst2pdf.txt 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/doc/rst2pdf.txt 2012-12-14 21:05:04.000000000 +0000 @@ -70,6 +70,10 @@ --footer=FOOTER Page footer if not specified in the document. +--section-header-depth=N + Sections up to this dept will be used in the header + and footer's replacement of ###Section###. Default=2 + --smart-quotes=VALUE Try to convert ASCII quotes, ellipsis and dashes to the typographically correct equivalent. Default=0 @@ -99,6 +103,8 @@ --repeat-table-rows Repeats header row for each splitted table +--raw-html Support embeddig raw HTML. Default: False + -q, --quiet Print less information. @@ -127,9 +133,9 @@ -b LEVEL, --break-level=LEVEL Maximum section level that starts in a new page. Default: 0 - ---first-page-even Whether first page is odd (as in the screen on "facing - pages"), or even (as in a book) + +--first-page-on-right When using double sided pages, the first page will start + on the right hand side. (Book Style) --blank-first-page Add a blank page at the beginning of the document. @@ -160,6 +166,10 @@ --use-numbered-links When using numbered sections, adds the numbers to all links referring to the section headers. Default: False +--strip-elements-with-class=CLASS + Remove elements with this CLASS from the output. Can + be used multiple times. + EXAMPLES -------- diff -Nru rst2pdf-0.16/doc/sampler.style rst2pdf-0.93/doc/sampler.style --- rst2pdf-0.16/doc/sampler.style 2008-09-05 21:19:11.000000000 +0000 +++ rst2pdf-0.93/doc/sampler.style 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -{ - "embeddedFonts" : ["Palatino"], - "pageSetup" : { - "size" : "A5", - "firstTemplate": "coverPage" - }, - "styles" : [ - ["palatino" , { "parent": "bodytext","fontName": "Palatino"} ], - ["redpalatino" , {"parent": "normal","fontName": "Palatino", "textColor": "red"} ] - ] -} \ No newline at end of file diff -Nru rst2pdf-0.16/doc/sampler.txt rst2pdf-0.93/doc/sampler.txt --- rst2pdf-0.16/doc/sampler.txt 2008-09-05 21:19:11.000000000 +0000 +++ rst2pdf-0.93/doc/sampler.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -The rst2pdf Sampler -=================== - --------------------- -Or, what does it do? --------------------- - -.. footer:: Page ###Page### - -.. header:: ###Title### - - -.. raw:: pdf - - PageBreak twoColumn - -This document tries to show you some of the nifty things rst2pdf can do. Each one of these should be -explained in The Friendly Manual :sup:`TM` For example, you are now -reading this in a two-column layout. However, the previous page had a one-column layout. - -That's because rst2pdf lets you change the page layout as many times as you want, and define -layouts almost arbitrarily complex (as long as you like rectangular frames full of text, that is). - -Did you notice there is a hyphen in the previous paragraph? And that it's aligned *justified*? - -On the top and bottom of this page (but not of the previous one), you can see a header and a footer -showing you the current page and document name. They could also show a section name and number, but -this document is too short for that. - -Let's go back to one-column now, but first some filler, so you can see the pretty columns. - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse pede. Nam auctor. Donec ac urna. Quisque tempus, dui sit amet cursus euismod, leo arcu ullamcorper ligula, a elementum elit augue eu ipsum. Donec sem. Aliquam adipiscing nunc ut ante. Praesent consectetuer lacinia nulla. Pellentesque ut augue nec ante gravida vestibulum. Nunc dignissim odio ut elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse malesuada porta sapien. Suspendisse congue. Morbi eget nulla at purus auctor molestie. Nulla nec orci. Duis condimentum luctus sem. Etiam elementum, turpis non blandit molestie, magna felis faucibus risus, eu ultrices risus lacus at ante. Nullam sed dui nec eros iaculis facilisis. - -Morbi massa. Pellentesque metus sem, tincidunt at, hendrerit et, faucibus nec, arcu. Aenean non arcu. Sed enim odio, adipiscing at, pretium ac, porttitor ac, enim. Vestibulum sollicitudin porttitor leo. Quisque ut augue sed magna sagittis aliquam. Vestibulum lobortis. Aenean at sem a risus molestie cursus. Fusce commodo pharetra orci. Pellentesque eleifend. Sed suscipit, erat sed vestibulum feugiat, eros purus pretium quam, ut molestie pede odio sit amet ipsum. Sed eu pede. Phasellus molestie. Cras nec nulla et diam lacinia viverra. Duis libero. Aliquam tempor ligula quis leo. - -Nullam ac sem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse potenti. Nunc a libero vitae enim cursus elementum. Nullam sit amet pede eget sapien mattis dapibus. Suspendisse nec mi eu elit pharetra ultricies. Proin mollis mattis metus. Duis viverra, tortor in suscipit imperdiet, lorem sapien dapibus mi, vehicula ultricies dolor dolor ut libero. Sed dapibus, arcu vitae eleifend pharetra, nulla nibh dignissim quam, vitae lacinia leo ipsum ut turpis. Nulla justo justo, pretium blandit, mollis ac, accumsan ac, massa. Quisque lacinia quam. Cras molestie elit eu lorem. Donec vitae lorem. Vivamus iaculis, ante ullamcorper dignissim posuere, tortor sem vestibulum nunc, vel pulvinar nisl quam sit amet erat. Cras pulvinar neque eu mi. Maecenas hendrerit dapibus elit. - -.. raw:: pdf - - PageBreak oneColumn - -One of the things I am pretty proud of in rst2pdf is our sidebars. ReST has a sidebar directive that -lets you go "outside the flow of text" for the document. Like this: - -.. sidebar:: Outside the flow - - This sidebar is outside the flow of the text. - -And now we are back in the boring old text flow. You can make arbitrary fragments of code go "float" using the -sidebar *class*, too. This doesn't yet work for code block, but it does work for anything else. -There is a bug about starting a sidebar while we are *besides* a sidebar, so I will jump to the next page now. - -.. raw:: pdf - - PageBreak - -.. class:: sidebar - -This is **not** a sidebar. Really. It just looks like one. If it were a sidebar it would have a title! - -And back to the old text flow. - -Of course, since the authors are programmers, we want our code to look pretty: - -.. code-block:: python - - print ("Hello world") - -.. class:: palatino - -You can also embed fonts easily. This paragraph is in font Palatino, which is not a standard PDF font. Or rather Palladio, because Palatino costs money. True Type and Type1 fonts are supported. There are **thousands** of free fonts. - -.. role:: redpalatino - -You can even switch fonts and colors :redpalatino:`in the middle` of the text. - -More things will be added to this sampler as time allows it. - diff -Nru rst2pdf-0.16/rst2pdf/basenodehandler.py rst2pdf-0.93/rst2pdf/basenodehandler.py --- rst2pdf-0.16/rst2pdf/basenodehandler.py 2010-06-06 20:02:31.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/basenodehandler.py 2012-02-29 00:07:21.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- # See LICENSE.txt for licensing terms -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/basenodehandler.py $ -#$LastChangedDate: 2010-06-06 17:02:31 -0300 (Sun, 06 Jun 2010) $ -#$LastChangedRevision: 2172 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/basenodehandler.py $ +#$Date: 2012-02-28 21:07:21 -0300 (Tue, 28 Feb 2012) $ +#$Revision: 2443 $ ''' This module provides one useful class: NodeHandler diff -Nru rst2pdf-0.16/rst2pdf/config.py rst2pdf-0.93/rst2pdf/config.py --- rst2pdf-0.16/rst2pdf/config.py 2010-03-12 05:43:55.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/config.py 2011-02-21 03:33:09.000000000 +0000 @@ -26,6 +26,14 @@ self.modulename = modulename self.msg = msg - conf = ConfigParser.SafeConfigParser() -conf.read(["/etc/rst2pdf.conf", cfname]) + +def parseConfig(extracf=None): + global conf + cflist = ["/etc/rst2pdf.conf", cfname] + if extracf: + cflist.append(extracf) + conf = ConfigParser.SafeConfigParser() + conf.read(cflist) + +parseConfig() diff -Nru rst2pdf-0.16/rst2pdf/createpdf.py rst2pdf-0.93/rst2pdf/createpdf.py --- rst2pdf-0.16/rst2pdf/createpdf.py 2010-10-06 21:21:41.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/createpdf.py 2012-12-14 21:05:04.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/createpdf.py $ -#$LastChangedDate: 2010-10-06 18:21:41 -0300 (Wed, 06 Oct 2010) $ -#$LastChangedRevision: 2396 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/createpdf.py $ +#$Date: 2012-12-14 18:05:04 -0300 (Fri, 14 Dec 2012) $ +#$Revision: 2624 $ # See LICENSE.txt for licensing terms @@ -50,13 +50,16 @@ import tempfile import re import string +import config +import logging +from cStringIO import StringIO from os.path import abspath, dirname, expanduser, join from urlparse import urljoin, urlparse, urlunparse from copy import copy, deepcopy from optparse import OptionParser -import logging +from pprint import pprint +from xml.sax.saxutils import unescape, escape -from docutils.languages import get_language import docutils.readers.doctree import docutils.core import docutils.nodes @@ -64,8 +67,10 @@ from docutils.readers import standalone from docutils.transforms import Transform -import pygments_code_block_directive # code-block directive -import oddeven_directive +try: + from roman import toRoman +except ImportError: + from docutils.utils.roman import toRoman from reportlab.platypus import * from reportlab.platypus.doctemplate import IndexingFlowable @@ -75,63 +80,48 @@ #from reportlab.lib.units import * #from reportlab.lib.pagesizes import * -from flowables import * # our own reportlab flowables -from sinker import Sinker -import flowables -from image import MyImage, missing - -from aafigure_directive import Aanode -import counter_role - -from log import log, nodeid -from pprint import pprint - -from smartypants import smartyPants - -from roman import toRoman +from rst2pdf import counter_role, oddeven_directive +from rst2pdf import pygments_code_block_directive # code-block directive +from rst2pdf import flowables +from rst2pdf.flowables import * # our own reportlab flowables +from rst2pdf.sinker import Sinker +from rst2pdf.image import MyImage, missing +from rst2pdf.aafigure_directive import Aanode +from rst2pdf.log import log, nodeid +from rst2pdf.smartypants import smartyPants +from rst2pdf import styles as sty +from rst2pdf.nodehandlers import nodehandlers +from rst2pdf.languages import get_language_available +from rst2pdf.opt_imports import Paragraph, BaseHyphenator, PyHyphenHyphenator, \ + DCWHyphenator, sphinx as sphinx_module, wordaxe # Small template engine for covers # The obvious import doesn't work for complicated reasons ;-) -import tenjin -to_str=tenjin.helpers.generate_tostrfunc('utf-8') -escape=tenjin.helpers.escape -templateEngine=tenjin.Engine() +from rst2pdf import tenjin +to_str = tenjin.helpers.generate_tostrfunc('utf-8') +escape = tenjin.helpers.escape +templateEngine = tenjin.Engine() def renderTemplate(tname, **context): - context['to_str']=to_str - context['escape']=escape + context['to_str'] = to_str + context['escape'] = escape return templateEngine.render(tname, context) -# Is this really the best unescape in the stdlib for '&' => '&'???? -from xml.sax.saxutils import unescape, escape - -import config - -from cStringIO import StringIO - #def escape (x,y): # "Dummy escape function to test for excessive escaping" # return x -from utils import log -import styles as sty - -from opt_imports import Paragraph, BaseHyphenator, PyHyphenHyphenator, \ - DCWHyphenator, sphinx as sphinx_module, wordaxe - -from nodehandlers import nodehandlers numberingstyles={ 'arabic': 'ARABIC', 'roman': 'ROMAN_UPPER', 'lowerroman': 'ROMAN_LOWER', 'alpha': 'LETTERS_UPPER', 'loweralpha': 'LETTERS_LOWER' } - class RstToPdf(object): def __init__(self, stylesheets=[], - language='en', + language='en_US', header=None, footer=None, inlinelinks=False, @@ -149,33 +139,28 @@ real_footnotes=False, def_dpi=300, show_frame=False, - highlightlang='python', #This one is only used by sphinx + highlightlang='python', # this one is only used by Sphinx basedir=os.getcwd(), splittables=False, blank_first_page=False, + first_page_on_right=False, breakside='odd', custom_cover='cover.tmpl', floating_images=False, numbered_links=False, + section_header_depth=2, + raw_html=False, + strip_elements_with_classes=[] ): self.debugLinesPdf=False self.depth=0 self.breakside=breakside + self.first_page_on_right=first_page_on_right self.blank_first_page=blank_first_page self.splittables=splittables self.basedir=basedir - self.language = language - try: - get_language (self.language) - except ImportError: - try: - language = self.language.split('_', 1)[0] - get_language (language) - self.language = language - except ImportError: - log.warning("Can't load Docutils module "\ - "for language %s or %s", self.language, language) - self.language = 'en' + self.language, self.docutils_language = get_language_available( + language)[:2] self.doc_title = "" self.doc_title_clean = "" self.doc_subtitle = "" @@ -193,13 +178,13 @@ self.PATH = abspath(dirname(sys.executable)) else: self.PATH = abspath(dirname(__file__)) - - + + self.font_path=font_path self.style_path=style_path self.def_dpi=def_dpi self.loadStyles(stylesheets) - + self.docutils_languages = {} self.inlinelinks = inlinelinks self.breaklevel = breaklevel @@ -218,7 +203,10 @@ self.def_dpi = def_dpi self.show_frame = show_frame self.numbered_links = numbered_links + self.section_header_depth = section_header_depth self.img_dir = os.path.join(self.PATH, 'images') + self.raw_html = raw_html + self.strip_elements_with_classes = strip_elements_with_classes # Sorry about this, but importing sphinx.roles makes some # ordinary documents fail (demo.txt specifically) so @@ -232,6 +220,7 @@ else: # These rst2pdf extensions conflict with sphinx directives.register_directive('code-block', pygments_code_block_directive.code_block_directive) + directives.register_directive('code', pygments_code_block_directive.code_block_directive) import math_directive self.gen_pdftext, self.gen_elements = nodehandlers(self) @@ -242,18 +231,12 @@ if self.language: self.styles.languages.append(self.language) self.styles['bodytext'].language = self.language - + else: + self.styles.languages.append('en_US') + self.styles['bodytext'].language = 'en_US' # Load the docutils language modules for all required languages for lang in self.styles.languages: - try: - self.docutils_languages[lang] = get_language(lang) - except ImportError: - try: - self.docutils_languages[lang] = \ - get_language(lang.split('_', 1)[0]) - except ImportError: - log.warning("Can't load Docutils module \ - for language %s", lang) + self.docutils_languages[lang] = get_language_available(lang)[2] # Load the hyphenators for all required languages if wordaxe is not None: @@ -265,8 +248,8 @@ except Exception: # hyphenators may not always be available or crash, # e.g. wordaxe issue 2809074 (http://is.gd/16lqs) - log.warning("Can't load wordaxe DCW hyphenator " - "for German language, trying Py hyphenator instead") + log.warning("Can't load wordaxe DCW hyphenator" + " for German language, trying Py hyphenator instead") else: continue try: @@ -286,12 +269,12 @@ self.pending_targets=[] self.targets=[] - + def loadStyles(self, styleSheets=None ): - + if styleSheets is None: styleSheets=[] - + self.styles = sty.StyleSheet(styleSheets, self.font_path, self.style_path, @@ -318,8 +301,8 @@ def text_for_label(self, label, style): """Translate text for label.""" try: - text = self.docutils_languages[self.style_language(style)]\ - .labels[label] + text = self.docutils_languages[ + self.style_language(style)].labels[label] except KeyError: text = label.capitalize() return text @@ -327,8 +310,8 @@ def text_for_bib_field(self, field, style): """Translate text for bibliographic fields.""" try: - text = self.docutils_languages[self.style_language(style)]\ - .bibliographic_fields[field] + text = self.docutils_languages[ + self.style_language(style)].bibliographic_fields[field] except KeyError: text = field return text + ":" @@ -336,13 +319,12 @@ def author_separator(self, style): """Return separator string for authors.""" try: - sep = self.docutils_languages[self.style_language(style)]\ - .author_separators[0] + sep = self.docutils_languages[ + self.style_language(style)].author_separators[0] except KeyError: sep = ';' return sep + " " - def styleToTags(self, style): '''Takes a style name, returns a pair of opening/closing tags for it, like "". Used for inline @@ -366,13 +348,12 @@ if s.underline: r1.append('') r2.insert(0,'') - + return [''.join(r1), ''.join(r2)] except KeyError: log.warning('Unknown class %s', style) return None - def styleToFont(self, style): '''Takes a style name, returns a font tag for it, like @@ -387,7 +368,7 @@ if bc: r.append('backColor="#%s"' % bc.hexval()[2:]) if s.trueFontSize: - r.append('size="%d"'%s.fontSize) + r.append('size="%d"'%s.fontSize) r.append('>') return ''.join(r) except KeyError: @@ -420,14 +401,14 @@ else: start = 1 - if node.parent.get('bullet') or \ - isinstance(node.parent, docutils.nodes.bullet_list): - b = node.parent.get('bullet','*') + if node.parent.get('bullet') or isinstance( + node.parent, docutils.nodes.bullet_list): + b = node.parent.get('bullet', '*') if b == "None": b = "" t = 'bullet' - elif node.parent.get('enumtype')=='arabic': + elif node.parent.get('enumtype') == 'arabic': b = str(node.parent.children.index(node) + start) + '.' elif node.parent.get('enumtype') == 'lowerroman': @@ -468,7 +449,7 @@ #from pudb import set_trace; set_trace() for y in range(0, len(rows)): - for x in range(0, len(rows[y])): + for x in range(len(rows[y])-1, -1, -1): cell = rows[y][x] if isinstance(cell, str): continue @@ -521,9 +502,9 @@ content=[XXPreformatted(text, style)], mode=self.fit_mode, style=style) - def createPdf(self, text=None, - source_path=None, - output=None, + def createPdf(self, text=None, + source_path=None, + output=None, doctree=None, compressed=False, # This adds entries to the PDF TOC @@ -541,7 +522,7 @@ 'footer': self.footer, 'endnotes': [], 'extraflowables': []} - + self.pending_targets=[] self.targets=[] @@ -550,19 +531,21 @@ if doctree is None: if text is not None: if self.language: - settings_overrides={'language_code': self.language} + settings_overrides={'language_code': self.docutils_language} else: settings_overrides={} + settings_overrides['strip_elements_with_classes']=self.strip_elements_with_classes self.doctree = docutils.core.publish_doctree(text, source_path=source_path, settings_overrides=settings_overrides) + #import pdb; pdb.set_trace() log.debug(self.doctree) else: log.error('Error: createPdf needs a text or a doctree') return else: self.doctree = doctree - + if self.numbered_links: # Transform all links to sections so they show numbers from sectnumlinks import SectNumFolder, SectRefExpander @@ -570,6 +553,10 @@ self.doctree.walk(snf) srf = SectRefExpander(self.doctree, snf.sectnums) self.doctree.walk(srf) + if self.strip_elements_with_classes: + from docutils.transforms.universal import StripClassesAndElements + sce = StripClassesAndElements(self.doctree) + sce.apply() elements = self.gen_elements(self.doctree) @@ -621,8 +608,8 @@ # Handle images with alignment more like in HTML new_elem=[] for i,e in enumerate(elements[::-1]): - if isinstance (e, MyImage) and e.image.hAlign != 'CENTER'\ - and new_elem: + if (isinstance (e, MyImage) and e.image.hAlign != 'CENTER' + and new_elem): # This is an image where flowables should wrap # around it popped=new_elem.pop() @@ -670,7 +657,7 @@ # first pass in the case of ###Total###, then we # make a new forced two-pass build. This is broken. # conceptually. - + if getattr(self, 'mustMultiBuild', False): # Force a multibuild pass if not isinstance(elements[-1],UnhappyOnce): @@ -686,9 +673,10 @@ # Add it to the pile #if not isinstance (e, MySpacer): fnPile.append(e) - elif getattr(e, '_atTop', False) or \ - isinstance (e, (UnhappyOnce, MyPageBreak)): + elif getattr(e, '_atTop', False) or isinstance( + e, (UnhappyOnce, MyPageBreak)): if fnPile: + fnPile.insert(0, Separation()) newStory.append(Sinker(fnPile)) newStory.append(e) fnPile=[] @@ -702,7 +690,7 @@ continue - + break except ValueError, v: # FIXME: cross-document links come through here, which means @@ -737,7 +725,7 @@ # Notify TOC entry for headings/abstracts/dedications. level, text = flowable.level, flowable.text parent_id = flowable.parent_id - node = flowable.node + node = flowable.node pagenum = setPageCounter() self.notify('TOCEntry', (level, text, pagenum, parent_id, node)) @@ -790,7 +778,8 @@ self.afterFlowable(S[0]) doctemplate._addGeneratedContent(flowables,frame) else: - ident = "Splitting error(n==%d) on page %d in\n%s" % (n,self.page,self._fIdent(f,60,frame)) + ident = "Splitting error(n==%d) on page %d in\n%s" % ( + n, self.page, self._fIdent(f, 60, frame)) #leave to keep apart from the raise raise LayoutError(ident) del S[0] @@ -798,17 +787,17 @@ flowables.insert(i,f) # put split flowables back on the list else: if hasattr(f,'_postponed') and f._postponed > 4: - ident = "Flowable %s%s too large on page %d in frame %r%s of template %r" % \ - (self._fIdent(f,60,frame),doctemplate._fSizeString(f),self.page, self.frame.id, - self.frame._aSpaceString(), self.pageTemplate.id) + ident = "Flowable %s%s too large on page %d in frame %r%s of template %r" % ( + self._fIdent(f, 60, frame), doctemplate._fSizeString(f),self.page, + self.frame.id, self.frame._aSpaceString(), self.pageTemplate.id) #leave to keep apart from the raise raise LayoutError(ident) # this ought to be cleared when they are finally drawn! f._postponed = 1 - mbe = getattr(self,'_multiBuildEdits',None) + mbe = getattr(self, '_multiBuildEdits', None) if mbe: - mbe((delattr,f,'_postponed')) - flowables.insert(0,f) # put the flowable back + mbe((delattr, f, '_postponed')) + flowables.insert(0, f) # put the flowable back self.handle_frameEnd() @@ -830,7 +819,7 @@ def drawOn(self, canvas, x, y, _sW): pass - + flowables.PageCounter = PageCounter def setPageCounter(counter=None, style=None): @@ -853,13 +842,13 @@ else: ptext=unicode(_counter) return ptext - + class MyContainer(_Container, Flowable): pass class UnhappyOnce(IndexingFlowable): '''An indexing flowable that is only unsatisfied once. - If added to a story, it will make multiBuild run + If added to a story, it will make multiBuild run at least two passes. Useful for ###Total###''' _unhappy=True def isSatisfied(self): @@ -867,7 +856,7 @@ self._unhappy= False return False return True - + def draw(self): pass @@ -923,6 +912,8 @@ text = unicode(text, e.encoding) except AttributeError: text = unicode(text, 'utf-8') + except TypeError: + text = unicode(text, 'utf-8') text = text.replace(u'###Page###', pnum) if '###Total###' in text: @@ -935,8 +926,9 @@ getattr(canv, 'sectNum', '')) text = smartyPants(text, smarty) return text - + for i,e in enumerate(elems): + # TODO: implement a search/replace for arbitrary things if isinstance(e, Paragraph): text = replace(e.text) elems[i] = Paragraph(text, e.style) @@ -950,12 +942,18 @@ row[r]=self.replaceTokens([cell,], canv, doc, smarty)[0] elems[i]=DelayedTable(data, e._colWidths, e.style) + elif isinstance(e, BoundByWidth): + for index, item in enumerate(e.content): + if isinstance(item, Paragraph): + e.content[index] = Paragraph(replace(item.text), item.style) + elems[i] = e + elif isinstance(e, OddEven): odd=self.replaceTokens([e.odd,], canv, doc, smarty)[0] even=self.replaceTokens([e.even,], canv, doc, smarty)[0] elems[i]=OddEven(odd, even) return elems - + def draw(self, pageobj, canv, doc, x, y, width, height): self.totalpages = max(self.totalpages, doc.page) items = self.prepared @@ -1007,11 +1005,11 @@ return try: w, h, kind = MyImage.size_for_node(dict(uri=uri, ), self.client) - except ValueError: + except ValueError: # Broken image, return arbitrary stuff uri=missing w, h, kind = 100, 100, 'direct' - + pw, ph = self.styles.pw, self.styles.ph if self.client.background_fit_mode == 'center': scale = min(1.0, 1.0 * pw / w, 1.0 * ph / h) @@ -1025,12 +1023,22 @@ # Do scale anyway x, y = 0, 0 sw, sh = pw, ph - + bg = MyImage(uri, sw, sh, client=self.client) self.image_cache[uri] = info = bg, x, y bg, x, y = info bg.drawOn(canv, x, y) + def is_left(self, page_num): + """Default behavior is that the first page is on the left. + + If the user has --first_page_on_right, the calculation is reversed. + """ + val = page_num % 2 == 1 + if self.client.first_page_on_right: + val = not val + return val + def beforeDrawPage(self, canv, doc): """Do adjustments to the page according to where we are in the document. @@ -1041,8 +1049,8 @@ global _counter, _counterStyle - self.tw = self.styles.pw - self.styles.lm -\ - self.styles.rm - self.styles.gm + styles = self.styles + self.tw = styles.pw - styles.lm - styles.rm - styles.gm # What page template to use? tname = canv.__dict__.get('templateName', self.styles.firstTemplate) @@ -1052,34 +1060,33 @@ doct = getattr(canv, '_doctemplate', None) canv._doctemplate = None # to make _listWrapOn work - if doc.page==1: - _counter=0 - _counterStyle='arabic' - _counter+=1 + if doc.page == 1: + _counter = 0 + _counterStyle = 'arabic' + _counter += 1 # Adjust text space accounting for header/footer - + self.hh = self._head.prepare(self, canv, doc) self.fh = self._foot.prepare(self, canv, doc) - + canv._doctemplate = doct - self.hx = self.styles.lm - self.hy = self.styles.ph - self.styles.tm -self.hh + self.hx = styles.lm + self.hy = styles.ph - styles.tm - self.hh + + self.fx = styles.lm + self.fy = styles.bm + self.th = styles.ph - styles.tm - styles.bm - self.hh \ + - self.fh - styles.ts - styles.bs - self.fx = self.styles.lm - self.fy = self.styles.bm - self.th = self.styles.ph - self.styles.tm - \ - self.styles.bm - self.hh - self.fh - \ - self.styles.ts - self.styles.bs - # Adjust gutter margins - if doc.page % 2: # Left page - x1 = self.styles.lm + if self.is_left(doc.page): # Left page + x1 = styles.lm else: # Right page - x1 = self.styles.lm + self.styles.gm - y1 = self.styles.bm + self.fh + self.styles.bs - + x1 = styles.lm + styles.gm + y1 = styles.bm + self.fh + styles.bs + # If there is a background parameter for this page Template, draw it if 'background' in self.template: self.draw_background('background', canv) @@ -1087,13 +1094,13 @@ self.frames = [] for frame in self.template['frames']: self.frames.append(SmartFrame(self, - self.styles.adjustUnits(frame[0], self.tw) + x1, - self.styles.adjustUnits(frame[1], self.th) + y1, - self.styles.adjustUnits(frame[2], self.tw), - self.styles.adjustUnits(frame[3], self.th), + styles.adjustUnits(frame[0], self.tw) + x1, + styles.adjustUnits(frame[1], self.th) + y1, + styles.adjustUnits(frame[2], self.tw), + styles.adjustUnits(frame[3], self.th), showBoundary=self.show_frame)) - canv.firstSect=True - canv._pagenum=doc.page + canv.firstSect = True + canv._pagenum = doc.page for frame in self.frames: frame._pagenum=doc.page @@ -1101,15 +1108,15 @@ """Draw header/footer.""" # Adjust for gutter margin canv.addPageLabel(canv._pageNumber-1,numberingstyles[_counterStyle],_counter) - + log.info('Page %s [%s]'%(_counter,doc.page)) - if doc.page % 2: # Left page + if self.is_left(doc.page): # Left page hx = self.hx fx = self.fx else: # Right Page hx = self.hx + self.styles.gm fx = self.fx + self.styles.gm - + self._head.draw(self, canv, doc, hx, self.hy, self.tw, self.hh) self._foot.draw(self, canv, doc, fx, self.fy, self.tw, self.fh) @@ -1119,12 +1126,12 @@ def parse_commandline(): - + parser = OptionParser() - + parser.add_option('--config', dest='configfile', metavar='FILE', help='Config file to use. Default=~/.rst2pdf/config') - + parser.add_option('-o', '--output', dest='output', metavar='FILE', help='Write the PDF to FILE') @@ -1133,16 +1140,16 @@ parser.add_option('-s', '--stylesheets', dest='style', type='string', action='append', metavar='STYLESHEETS', default=[def_ssheets], - help='A comma-separated list of custom stylesheets.'\ - ' Default="%s"' % def_ssheets) + help='A comma-separated list of custom stylesheets. Default="%s"' + % def_ssheets) def_sheetpath = os.pathsep.join([expanduser(p) for p in config.getValue("general", "stylesheet_path", "").split(os.pathsep)]) parser.add_option('--stylesheet-path', dest='stylepath', metavar='FOLDER%sFOLDER%s...%sFOLDER'%((os.pathsep, )*3), default=def_sheetpath, - help='A list of folders to search for stylesheets,"\ - " separated using "%s". Default="%s"' %(os.pathsep, def_sheetpath)) + help='A list of folders to search for stylesheets,' + ' separated using "%s". Default="%s"' %(os.pathsep, def_sheetpath)) def_compressed = config.getValue("general", "compressed", False) parser.add_option('-c', '--compressed', dest='compressed', @@ -1161,59 +1168,69 @@ parser.add_option('--font-path', dest='fpath', metavar='FOLDER%sFOLDER%s...%sFOLDER'%((os.pathsep, )*3), default=def_fontpath, - help='A list of folders to search for fonts,'\ - ' separated using "%s". Default="%s"'%(os.pathsep, def_fontpath)) + help='A list of folders to search for fonts, separated using "%s".' + ' Default="%s"' % (os.pathsep, def_fontpath)) def_baseurl = urlunparse(['file',os.getcwd()+os.sep,'','','','']) parser.add_option('--baseurl', dest='baseurl', metavar='URL', default=def_baseurl, help='The base URL for relative URLs. Default="%s"'%def_baseurl) - def_lang = config.getValue("general", "language", 'en') + def_lang = config.getValue("general", "language", 'en_US') parser.add_option('-l', '--language', metavar='LANG', default=def_lang, dest='language', - help='Language to be used for hyphenation and '\ - 'docutils localizations. Default="%s"' % def_lang) + help='Language to be used for hyphenation' + ' and docutils localizations. Default="%s"' % def_lang) def_header = config.getValue("general", "header") parser.add_option('--header', metavar='HEADER', default=def_header, dest='header', - help='Page header if not specified in the document.'\ - ' Default="%s"' % def_header) + help='Page header if not specified in the document.' + ' Default="%s"' % def_header) def_footer = config.getValue("general", "footer") parser.add_option('--footer', metavar='FOOTER', default=def_footer, dest='footer', - help='Page footer if not specified in the document.'\ - ' Default="%s"' % def_footer) + help='Page footer if not specified in the document.' + ' Default="%s"' % def_footer) + + def_section_header_depth = config.getValue("general","section_header_depth",2) + parser.add_option('--section-header-depth', metavar='N', + default=def_section_header_depth, dest='section_header_depth', + help = '''Sections up to this depth will be used in the header and footer's replacement of ###Section###. Default=%s''' % def_section_header_depth) def_smartquotes = config.getValue("general", "smartquotes", "0") parser.add_option("--smart-quotes", metavar="VALUE", default=def_smartquotes, dest="smarty", - help='Try to convert ASCII quotes, ellipsis and dashes '\ - 'to the typographically correct equivalent. For details,'\ - ' read the man page or the manual. Default="%s"'%def_smartquotes) + help='Try to convert ASCII quotes, ellipses and dashes' + ' to the typographically correct equivalent. For details,' + ' read the man page or the manual. Default="%s"' % def_smartquotes) def_fit = config.getValue("general", "fit_mode", "shrink") parser.add_option('--fit-literal-mode', metavar='MODE', default=def_fit, dest='fit_mode', - help='What todo when a literal is too wide. One of error,'\ - ' overflow,shrink,truncate. Default="%s"'%def_fit) + help='What to do when a literal is too wide. One of error,' + ' overflow,shrink,truncate. Default="%s"' % def_fit) def_fit_background = config.getValue("general", "background_fit_mode", - "center") + "center") parser.add_option('--fit-background-mode', metavar='MODE', default=def_fit_background, dest='background_fit_mode', - help='How to fit the background image to the page.'\ - ' One of scale or center. Default="%s"'%def_fit_background) + help='How to fit the background image to the page.' + ' One of scale or center. Default="%s"' % def_fit_background) parser.add_option('--inline-links', action="store_true", dest='inlinelinks', default=False, - help='shows target between parenthesis instead of active link') + help='Shows target between parentheses instead of active link.') parser.add_option('--repeat-table-rows', action="store_true", dest='repeattablerows', default=False, - help='Repeats header row for each splitted table') + help='Repeats header row for each split table.') + + def_raw_html = config.getValue("general", "raw_html", False) + parser.add_option('--raw-html', action="store_true", + dest='raw_html', default=def_raw_html, + help='Support embeddig raw HTML. Default=%s' % def_raw_html) parser.add_option('-q', '--quiet', action="store_true", dest='quiet', default=False, @@ -1235,22 +1252,22 @@ "footnote_backlinks", True) parser.add_option('--no-footnote-backlinks', action='store_false', dest='footnote_backlinks', default=def_footnote_backlinks, - help='Disable footnote backlinks.'\ - ' Default=%s' % str(not def_footnote_backlinks)) + help='Disable footnote backlinks.' + ' Default=%s' % str(not def_footnote_backlinks)) def_inline_footnotes = config.getValue("general", "inline_footnotes", False) parser.add_option('--inline-footnotes', action='store_true', dest='inline_footnotes', default=def_inline_footnotes, - help='Show footnotes inline.'\ - ' Default=%s' % str(not def_inline_footnotes)) + help='Show footnotes inline.' + ' Default=%s' % str(not def_inline_footnotes)) def_real_footnotes = config.getValue("general", "real_footnotes", False) parser.add_option('--real-footnotes', action='store_true', dest='real_footnotes', default=def_real_footnotes, - help='Show footnotes at the bottom of the page where they are defined.'\ - ' Default=%s' % str(def_real_footnotes)) + help='Show footnotes at the bottom of the page where they are defined.' + ' Default=%s' % str(def_real_footnotes)) def_dpi = config.getValue("general", "default_dpi", 300) parser.add_option('--default-dpi', dest='def_dpi', metavar='NUMBER', @@ -1263,37 +1280,38 @@ parser.add_option('--disable-splittables', dest='splittables', action='store_false', default=True, - help='Don\'t use splittable flowables in some elements. ' - 'Only try this if you can\'t process a document any other way.') + help="Don't use splittable flowables in some elements." + " Only try this if you can't process a document any other way.") def_break = config.getValue("general", "break_level", 0) parser.add_option('-b', '--break-level', dest='breaklevel', metavar='LEVEL', default=def_break, - help='Maximum section level that starts in a new page.'\ - ' Default: %d' % def_break) - - def_fpeven = config.getValue("general", "first_page_even", False) - parser.add_option('--first-page-even', dest='first_page_even', - action='store_true', default=def_fpeven, - help='Whether first page is odd (as in the screen on "facing pages"), '\ - 'or even (as in a book)') + help='Maximum section level that starts in a new page.' + ' Default: %d' % def_break) def_blankfirst = config.getValue("general", "blank_first_page", False) parser.add_option('--blank-first-page', dest='blank_first_page', action='store_true', default=def_blankfirst, help='Add a blank page at the beginning of the document.') + def_first_page_on_right = config.getValue("general", "first_page_on_right", False) + parser.add_option('--first-page-on-right', dest='first_page_on_right', + action='store_true', default=def_first_page_on_right, + help='Two-sided book style (where first page starts on the right side)') + def_breakside = config.getValue("general", "break_side", 'any') parser.add_option('--break-side', dest='breakside', metavar='VALUE', default=def_breakside, - help='How section breaks work. Can be "even", and sections start in an even page,'\ - '"odd", and sections start in odd pages, or "any" and sections start in the next page,'\ - 'be it even or odd. See also the -b option.') + help='How section breaks work. Can be "even", and sections start' + ' in an even page, "odd", and sections start in odd pages,' + ' or "any" and sections start in the next page, be it even or odd.' + ' See also the -b option.') - parser.add_option('--date-invariant', dest='invariant', + parser.add_option('--date-invariant', dest='invariant', action='store_true', default=False, - help="Don't store the current date in the PDF. Useful mainly for the test suite, "\ - "where we don't want the PDFs to change.") + help="Don't store the current date in the PDF." + " Useful mainly for the test suite," + " where we don't want the PDFs to change.") parser.add_option('-e', '--extension-module', dest='extensions', action="append", type="string", default = ['vectorpdf'], @@ -1307,26 +1325,33 @@ def_floating_images = config.getValue("general", "floating_images", False) parser.add_option('--use-floating-images', action='store_true', default=def_floating_images, - help='Makes images with :aling: attribute work more like in rst2html. Default: %s'%def_floating_images, + help='Makes images with :align: attribute work more like in rst2html. Default: %s'%def_floating_images, dest='floating_images') def_numbered_links = config.getValue("general", "numbered_links", False) parser.add_option('--use-numbered-links', action='store_true', default=def_numbered_links, help='When using numbered sections, adds the numbers to all links referring to the section headers. Default: %s'%def_numbered_links, dest='numbered_links') + + parser.add_option('--strip-elements-with-class', action='append', dest='strip_elements_with_classes', + metavar='CLASS', help='Remove elements with this CLASS from the output. Can be used multiple times.') return parser -def main(args=None): +def main(_args=None): """Parse command line and call createPdf with the correct data.""" parser = parse_commandline() - options, args = parser.parse_args(copy(args)) + # Fix issue 430: don't overwrite args + # need to parse_args to see i we have a custom config file + options, args = parser.parse_args(copy(_args)) if options.configfile: - options.cfname=options.configfile + # If there is a config file, we need to reparse + # the command line because we have different defaults + config.parseConfig(options.configfile) parser = parse_commandline() - options, args = parser.parse_args(copy(args)) + options, args = parser.parse_args(copy(_args)) if options.version: from rst2pdf import version @@ -1353,7 +1378,18 @@ filename = False - if len(args) == 0 or args[0] == '-': + if len(args) == 0: + args = [ '-', ] + elif len(args) > 2: + log.critical('Usage: %s [ file.txt [ file.pdf ] ]', sys.argv[0]) + sys.exit(1) + elif len(args) == 2: + if options.output: + log.critical('You may not give both "-o/--output" and second argument') + sys.exit(1) + options.output = args.pop() + + if args[0] == '-': infile = sys.stdin options.basedir=os.getcwd() elif len(args) > 1: @@ -1415,9 +1451,8 @@ options.inline_footnotes = True if reportlab.Version < '2.3': - log.warning('You are using Reportlab version %s.'\ - ' The suggested version '\ - 'is 2.3 or higher'%reportlab.Version) + log.warning('You are using Reportlab version %s.' + ' The suggested version is 2.3 or higher' % reportlab.Version) if options.invariant: patch_PDFDate() @@ -1446,10 +1481,14 @@ show_frame=options.show_frame, splittables=options.splittables, blank_first_page=options.blank_first_page, + first_page_on_right=options.first_page_on_right, breakside=options.breakside, custom_cover=options.custom_cover, floating_images=options.floating_images, numbered_links=options.numbered_links, + raw_html=options.raw_html, + section_header_depth=int(options.section_header_depth), + strip_elements_with_classes=options.strip_elements_with_classes, ).createPdf(text=options.infile.read(), source_path=options.infile.name, output=options.outfile, @@ -1489,7 +1528,7 @@ lambda yyyy,mm,dd,hh,m,s: "D:%04d%02d%02d%02d%02d%02d%+03d'%02d'" % (yyyy,mm,dd,hh,m,s,0,0)) return pdfdoc.format(pdfdoc.PDFString(dfmt(*self.date)), doc) - + pdfdoc.PDFDate = PDFDate reportlab.rl_config.invariant = 1 diff -Nru rst2pdf-0.16/rst2pdf/extensions/dotted_toc.py rst2pdf-0.93/rst2pdf/extensions/dotted_toc.py --- rst2pdf-0.16/rst2pdf/extensions/dotted_toc.py 2010-03-18 18:51:01.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/dotted_toc.py 2010-11-30 21:39:28.000000000 +0000 @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- # See LICENSE.txt for licensing terms -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/extensions/dotted_toc.py $ -#$LastChangedDate: 2010-03-18 15:51:01 -0300 (Thu, 18 Mar 2010) $ -#$LastChangedRevision: 1944 $ +#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/extensions/dotted_toc.py $ +#$LastChangedDate: 2010-11-30 18:39:28 -0300 (Tue, 30 Nov 2010) $ +#$LastChangedRevision: 2417 $ # Some fragments of code are copied from Reportlab under this license: # @@ -132,7 +132,7 @@ style = copy(style) style.textColor = self.linkColor - key = self.refid_lut.get((level, text), None) + key = self.refid_lut.get((level, text, pageNum), None) if key: if not isinstance(text, unicode): text = unicode(text, 'utf-8') diff -Nru rst2pdf-0.16/rst2pdf/extensions/inkscape_r2p.py rst2pdf-0.93/rst2pdf/extensions/inkscape_r2p.py --- rst2pdf-0.16/rst2pdf/extensions/inkscape_r2p.py 2010-03-18 18:51:01.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/inkscape_r2p.py 2012-12-18 19:40:07.000000000 +0000 @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # See LICENSE.txt for licensing terms -''' +''' inkscape.py is an rst2pdf extension (e.g. rst2pdf -e inkscape xxx xxxx) which uses the inkscape program to convert an svg to a PDF, then uses the vectorpdf code to process the PDF. @@ -16,7 +16,7 @@ from weakref import WeakKeyDictionary from rst2pdf.log import log -from vectorpdf import VectorPdf +from vectorpdf_r2p import VectorPdf import rst2pdf.image @@ -81,6 +81,7 @@ raise return None + def install(createpdf, options): ''' Monkey-patch our class in to image as a replacement class for SVGImage. ''' diff -Nru rst2pdf-0.16/rst2pdf/extensions/plantuml.py rst2pdf-0.93/rst2pdf/extensions/plantuml.py --- rst2pdf-0.16/rst2pdf/extensions/plantuml.py 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/plantuml.py 2012-12-09 00:46:16.000000000 +0000 @@ -0,0 +1,78 @@ +''' +A rst2pdf extension to implement something similar to sphinx's plantuml extension +(see http://pypi.python.org/pypi/sphinxcontrib-plantuml) + +Therefore, stuff may be copied from that code. +Ergo: + + :copyright: Copyright 2010 by Yuya Nishihara . + :license: BSD, (he says see LICENSE but the file is not there ;-) + +''' + +import errno +from docutils import nodes +from docutils.parsers import rst +from docutils.parsers.rst import directives +import rst2pdf.genelements as genelements +from rst2pdf.image import MyImage +import tempfile +import subprocess + +class plantuml(nodes.General, nodes.Element): + pass + + +class UmlDirective(rst.Directive): + """Directive to insert PlantUML markup + + Example:: + + .. uml:: + :alt: Alice and Bob + + Alice -> Bob: Hello + Alice <- Bob: Hi + + + You can use a :format: option to change between SVG and PNG diagrams, however, + the SVG plantuml generates doesn't look very good to me. + """ + has_content = True + option_spec = {'alt': directives.unchanged} + option_spec = {'format': directives.unchanged} + + def run(self): + node = plantuml() + node['uml'] = '\n'.join(self.content) + node['alt'] = self.options.get('alt', None) + node['format'] = self.options.get('format', 'png') + return [node] + + +class UMLHandler(genelements.NodeHandler, plantuml): + """Class to handle UML nodes""" + + def gather_elements(self, client, node, style): + # Create image calling plantuml + tfile = tempfile.NamedTemporaryFile(dir='.', delete=False, suffix='.'+node['format']) + args = 'plantuml -pipe -charset utf-8' + if node['format'].lower() == 'svg': + args+=' -tsvg' + client.to_unlink.append(tfile.name) + try: + p = subprocess.Popen(args.split(), stdout=tfile, + stdin=subprocess.PIPE, stderr=subprocess.PIPE) + except OSError, err: + if err.errno != errno.ENOENT: + raise + raise PlantUmlError('plantuml command %r cannot be run' + % self.builder.config.plantuml) + serr = p.communicate(node['uml'].encode('utf-8'))[1] + if p.returncode != 0: + raise PlantUmlError('error while running plantuml\n\n' + serr) + + # Add Image node with the right image + return [MyImage(tfile.name, client=client)] + +directives.register_directive("uml", UmlDirective) diff -Nru rst2pdf-0.16/rst2pdf/extensions/preprocess_r2p.py rst2pdf-0.93/rst2pdf/extensions/preprocess_r2p.py --- rst2pdf-0.16/rst2pdf/extensions/preprocess_r2p.py 2010-06-16 19:44:06.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/preprocess_r2p.py 2010-11-10 03:12:06.000000000 +0000 @@ -275,9 +275,9 @@ while 1: total = sum(values) if total > 100: - values[index(max(values))] -= 1 + values[values.index(max(values))] -= 1 elif total < 100: - values[index(max(values))] += 1 + values[values.index(max(values))] += 1 else: break @@ -293,12 +293,12 @@ ''' self.changed = True if chunk: - log.error(".. styles:: does not recognize string %s" % repr(chunk)) + log.error(".. style:: does not recognize string %s" % repr(chunk)) return mystyles = '\n'.join(self.read_indented()) if not mystyles: - log.error("Empty .. styles:: block found") + log.error("Empty .. style:: block found") try: styles = rson_loads(mystyles) except ValueError, e: # Error parsing the JSON data @@ -311,25 +311,23 @@ ''' Read data from source while it is indented (or blank). Stop on the first non-indented line, and leave the rest on the source. - - Note that this function expects that the split function - will insure that every source chunk starts in the left-most - column (that it does not have to read multiple chunks from - the source in order to find a stopping point). ''' source = self.source - data = source and source.pop().splitlines() or [] - data.reverse() - while data: - line = data.pop().rstrip() - if not line or line.lstrip() != line: - yield line - continue - data.append(line) - break + data = None + while source and not data: + data = source and source.pop().splitlines() or [] + data.reverse() + while data: + line = data.pop().rstrip() + if not line or line.lstrip() != line: + yield line + continue + data.append(line) + break data.reverse() data.append('') source.append('\n'.join(data)) + source.append('\n') # Automatically generate our keywords from methods prefixed with 'handle_' keywords = list(x[7:] for x in vars() if x.startswith('handle_')) diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/__init__.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/__init__.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/__init__.py 2010-03-16 17:11:16.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- -# See LICENSE.txt for licensing terms - -import sys -import os -from weakref import WeakKeyDictionary - -try: - from reportlab.platypus import Flowable - from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT - - import pdfrw - from pdfrw.toreportlab import makerl - from pdfrw.buildxobj import CacheXObj - - from rst2pdf.log import log - import rst2pdf.image - from rst2pdf.opt_imports import LazyImports -except ImportError: - # This is just to make nosetest happy on the CI server - class Flowable: - pass - - # TODO: Looks the same as for other images, because I - # stole it from other image handlers. Common base class??? - -class VectorPdf(Flowable): - - # The filecache allows us to only read a given PDF file once - # for every RstToPdf client object. This allows this module - # to usefully cache, while avoiding being the cause of a memory - # leak in a long-running process. - - filecache = WeakKeyDictionary() - - @classmethod - def load_xobj(cls, srcinfo): - client, uri = srcinfo - loader = cls.filecache.get(client) - if loader is None: - loader = cls.filecache[client] = CacheXObj().load - return loader(uri) - - def __init__(self, filename, width=None, height=None, kind='direct', - mask=None, lazy=True, srcinfo=None): - Flowable.__init__(self) - self._kind = kind - self.xobj = self.load_xobj(srcinfo) - self.imageWidth = width - self.imageHeight = height - x1, y1, x2, y2 = self.xobj.BBox - - self._w, self._h = x2 - x1, y2 - y1 - if not self.imageWidth: - self.imageWidth = self._w - if not self.imageHeight: - self.imageHeight = self._h - self.__ratio = float(self.imageWidth)/self.imageHeight - if kind in ['direct','absolute']: - self.drawWidth = width or self.imageWidth - self.drawHeight = height or self.imageHeight - elif kind in ['bound','proportional']: - factor = min(float(width)/self.imageWidth,float(height)/self.imageHeight) - self.drawWidth = self.imageWidth*factor - self.drawHeight = self.imageHeight*factor - - def wrap(self, aW, aH): - return self.drawWidth, self.drawHeight - - def drawOn(self, canv, x, y, _sW=0): - if _sW > 0 and hasattr(self, 'hAlign'): - a = self.hAlign - if a in ('CENTER', 'CENTRE', TA_CENTER): - x += 0.5*_sW - elif a in ('RIGHT', TA_RIGHT): - x += _sW - elif a not in ('LEFT', TA_LEFT): - raise ValueError("Bad hAlign value " + str(a)) - - xobj = self.xobj - xobj_name = makerl(canv._doc, xobj) - - xscale = self.drawWidth/self._w - yscale = self.drawHeight/self._h - - x -= xobj.BBox[0] * xscale - y -= xobj.BBox[1] * yscale - - canv.saveState() - canv.translate(x, y) - canv.scale(xscale, yscale) - canv.doForm(xobj_name) - canv.restoreState() - -def install(createpdf, options): - ''' Monkey-patch this PDF handling into rst2pdf - ''' - LazyImports.pdfinfo = pdfrw - rst2pdf.image.VectorPdf = VectorPdf diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/develop_pdfrw rst2pdf-0.93/rst2pdf/extensions/vectorpdf/develop_pdfrw --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/develop_pdfrw 2009-11-25 23:54:18.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/develop_pdfrw 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -# Make pdfrw subdirectory writable for development - -svn switch --relocate http://pdfrw.googlecode.com/svn/trunk/pdfrw https://pdfrw.googlecode.com/svn/trunk/pdfrw pdfrw/ diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/__init__.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/__init__.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/__init__.py 2009-11-30 17:15:22.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -from pdfwriter import PdfWriter -from pdfreader import PdfReader -from pdfobjects import PdfObject, PdfName, PdfArray, PdfDict, IndirectPdfDict, PdfString -from pdftokens import PdfTokens - -# Add a tiny bit of compatibility to pyPdf - -PdfFileReader = PdfReader -PdfFileWriter = PdfWriter diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/buildxobj.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/buildxobj.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/buildxobj.py 2010-03-08 02:30:30.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/buildxobj.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,191 +0,0 @@ -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -''' - -This module contains code to build PDF "Form XObjects". - -A Form XObject allows a fragment from one PDF file to be cleanly -included in another PDF file. - -Reference for syntax: "Parameters for opening PDF files" from SDK 8.1 - - http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf - - supported 'page=xxx', 'viewrect=,,,' - - Units are in points - -Reference for content: Adobe PDF reference, sixth edition, version 1.7 - - http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference_1-7.pdf - - Form xobjects discussed chapter 4.9, page 355 -''' - -from pdfobjects import PdfDict, PdfArray, PdfName -from pdfreader import PdfReader - -class ViewInfo(object): - ''' Instantiate ViewInfo with a uri, and it will parse out - the filename, page, and viewrect into object attributes. - ''' - doc = None - docname = None - page = None - viewrect = None - - def __init__(self, pageinfo='', **kw): - pageinfo=pageinfo.split('#',1) - if len(pageinfo) == 2: - pageinfo[1:] = pageinfo[1].replace('&', '#').split('#') - for key in 'page viewrect'.split(): - if pageinfo[0].startswith(key+'='): - break - else: - self.docname = pageinfo.pop(0) - for item in pageinfo: - key, value = item.split('=') - key = key.strip() - value = value.replace(',', ' ').split() - if key == 'page': - assert len(value) == 1 - setattr(self, key, int(value[0])) - elif key == 'viewrect': - assert len(value) == 4 - setattr(self, key, [float(x) for x in value]) - else: - log.error('Unknown option: %s', key) - for key, value in kw.iteritems(): - assert hasattr(self, key), key - setattr(self, key, value) - -def getrects(inheritable, pageinfo): - ''' Given the inheritable attributes of a page and - the desired pageinfo rectangle, return the page's - media box and the calculated boundary (clip) box. - ''' - mbox = tuple([float(x) for x in inheritable.MediaBox]) - vrect = pageinfo.viewrect - if vrect is None: - cbox = tuple([float(x) for x in (inheritable.CropBox or mbox)]) - else: - mleft, mbot, mright, mtop = mbox - x, y, w, h = vrect - cleft = mleft + x - ctop = mtop - y - cright = cleft + w - cbot = ctop - h - cbox = max(mleft, cleft), max(mbot, cbot), min(mright, cright), min(mtop, ctop) - return mbox, cbox - -def _cache_xobj(contents, resources, mbox, bbox): - ''' Return a cached Form XObject, or create a new one and cache it. - ''' - cachedict = contents.xobj_cachedict - if cachedict is None: - cachedict = contents.private.xobj_cachedict = {} - result = cachedict.get(bbox) - if result is None: - func = (_get_fullpage, _get_subpage)[mbox != bbox] - result = PdfDict( - func(contents, resources, mbox, bbox), - Type = PdfName.XObject, - Subtype = PdfName.Form, - FormType = 1, - BBox = PdfArray(bbox), - ) - cachedict[bbox] = result - return result - -def _get_fullpage(contents, resources, mbox, bbox): - ''' fullpage is easy. Just copy the contents, - set up the resources, and let _cache_xobj handle the - rest. - ''' - return PdfDict(contents, Resources=resources) - -def _get_subpage(contents, resources, mbox, bbox): - ''' subpages *could* be as easy as full pages, but we - choose to complicate life by creating a Form XObject - for the page, and then one that references it for - the subpage, on the off-chance that we want multiple - items from the page. - ''' - return PdfDict( - stream = '/FullPage Do\n', - Resources = PdfDict( - XObject = PdfDict( - FullPage = _cache_xobj(contents, resources, mbox, mbox) - ) - ) - ) - -def pagexobj(page, viewinfo=ViewInfo(), allow_compressed=True): - ''' pagexobj creates and returns a Form XObject for - a given view within a page (Defaults to entire page.) - ''' - inheritable = page.inheritable - resources = inheritable.Resources - mbox, bbox = getrects(inheritable, viewinfo) - contents = page.Contents - # Make sure the only attribute is length - # All the filters must have been executed - assert int(contents.Length) == len(contents.stream) - if not allow_compressed: - assert len([x for x in contents.iteritems()]) == 1 - - return _cache_xobj(contents, resources, mbox, bbox) - - -def docxobj(pageinfo, doc=None, allow_compressed=True): - ''' docxobj creates and returns an actual Form XObject. - Can work standalone, or in conjunction with - the CacheXObj class (below). - ''' - if not isinstance(pageinfo, ViewInfo): - pageinfo = ViewInfo(pageinfo) - - # If we're explicitly passed a document, - # make sure we don't have one implicitly as well. - # If no implicit or explicit doc, then read one in - # from the filename. - if doc is not None: - assert pageinfo.doc is None - pageinfo.doc = doc - elif pageinfo.doc is not None: - doc = pageinfo.doc - else: - doc = pageinfo.doc = PdfReader(pageinfo.docname, decompress = not allow_compressed) - assert isinstance(doc, PdfReader) - - sourcepage = doc.pages[(pageinfo.page or 1) - 1] - return pagexobj(sourcepage, pageinfo, allow_compressed) - - -class CacheXObj(object): - ''' Use to keep from reparsing files over and over, - and to keep from making the output too much - bigger than it ought to be by replicating - unnecessary object copies. - ''' - def __init__(self, decompress=False): - ''' Set decompress true if you need - the Form XObjects to be decompressed. - Will decompress what it can and scream - about the rest. - ''' - self.cached_pdfs = {} - self.decompress = decompress - - def load(self, sourcename): - ''' Load a Form XObject from a uri - ''' - info = ViewInfo(sourcename) - fname = info.docname - pcache = self.cached_pdfs - doc = pcache.get(fname) - if doc is None: - doc = pcache[fname] = PdfReader(fname, decompress=self.decompress) - return docxobj(info, doc, allow_compressed=not self.decompress) diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfcompress.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfcompress.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfcompress.py 2010-03-12 22:38:46.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfcompress.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -''' -Currently, this sad little file only knows how to decompress -using the flate (zlib) algorithm. Maybe more later, but it's -not a priority for me... -''' - -from __future__ import generators - -try: - set -except NameError: - from sets import Set as set - -import zlib -from pdfobjects import PdfDict, PdfName - - -def streamobjects(mylist): - for obj in mylist: - if isinstance(obj, PdfDict) and obj.stream is not None: - yield obj - -def uncompress(mylist, warnings=set()): - flate = PdfName.FlateDecode - for obj in streamobjects(mylist): - ftype = obj.Filter - if ftype is None: - continue - if isinstance(ftype, list) and len(ftype) == 1: - # todo: multiple filters - ftype = ftype[0] - parms = obj.DecodeParms - if ftype != flate or parms is not None: - msg = 'Not decompressing: cannot use filter %s with parameters %s' % (repr(ftype), repr(parms)) - if msg not in warnings: - warnings.add(msg) - print msg - else: - obj.stream = zlib.decompress(obj.stream) - obj.Filter = None - -def compress(mylist): - flate = PdfName.FlateDecode - for obj in streamobjects(mylist): - ftype = obj.Filter - if ftype is not None: - continue - oldstr = obj.stream - newstr = zlib.compress(oldstr) - if len(newstr) < len(oldstr) + 30: - obj.stream = newstr - obj.Filter = flate - obj.DecodeParms = None diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfobjects.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfobjects.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfobjects.py 2010-02-14 03:39:09.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfobjects.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,183 +0,0 @@ -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -''' -Objects that can occur in PDF files. The most important -objects are arrays and dicts. Either of these can be -indirect or not, and dicts could have an associated -stream. -''' -from __future__ import generators - -try: - set -except NameError: - from sets import Set as set - -import re - -class PdfObject(str): - indirect = False - -class PdfArray(list): - indirect = False - -class PdfName(object): - def __getattr__(self, name): - return self(name) - def __call__(self, name): - return PdfObject('/' + name) - -PdfName = PdfName() - -class PdfString(str): - indirect = False - unescape_dict = {'\\b':'\b', '\\f':'\f', '\\n':'\n', - '\\r':'\r', '\\t':'\t', - '\\\r\n': '', '\\\r':'', '\\\n':'', - '\\\\':'\\', '\\':'', - } - unescape_pattern = r'(\\b|\\f|\\n|\\r|\\t|\\\r\n|\\\r|\\\n|\\[0-9]+|\\)' - unescape_func = re.compile(unescape_pattern).split - - hex_pattern = '([a-fA-F0-9][a-fA-F0-9]|[a-fA-F0-9])' - hex_func = re.compile(hex_pattern).split - - hex_pattern2 = '([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]|[a-fA-F0-9][a-fA-F0-9]|[a-fA-F0-9])' - hex_func2 = re.compile(hex_pattern2).split - - hex_funcs = hex_func, hex_func2 - - indirect = False - - def decode_regular(self, remap=chr): - assert self[0] == '(' and self[-1] == ')' - mylist = self.unescape_func(self[1:-1]) - result = [] - unescape = self.unescape_dict.get - for chunk in mylist: - chunk = unescape(chunk, chunk) - if chunk.startswith('\\') and len(chunk) > 1: - value = int(chunk[1:], 8) - # FIXME: TODO: Handle unicode here - if value > 127: - value = 127 - chunk = remap(value) - if chunk: - result.append(chunk) - return ''.join(result) - - def decode_hex(self, remap=chr, twobytes=False): - data = ''.join(self.split()) - data = self.hex_funcs[twobytes](data) - chars = data[1::2] - other = data[0::2] - assert other[0] == '<' and other[-1] == '>' and ''.join(other) == '<>', self - return ''.join([remap(int(x, 16)) for x in chars]) - - def decode(self, remap=chr, twobytes=False): - if self.startswith('('): - return self.decode_regular(remap) - - else: - return self.decode_hex(remap, twobytes) - - def encode(cls, source, usehex=False): - assert not usehex, "Not supported yet" - if isinstance(source, unicode): - source = source.encode('utf-8') - else: - source = str(source) - source = source.replace('\\', '\\\\') - source = source.replace('(', '\\(') - source = source.replace(')', '\\)') - return cls('(' +source + ')') - encode = classmethod(encode) - -class PdfDict(dict): - indirect = False - stream = None - - _special = dict(indirect = ('indirect', False), - stream = ('stream', True), - _stream = ('stream', False), - ) - - def __setitem__(self, name, value): - assert name.startswith('/'), name - if value is not None: - dict.__setitem__(self, name, value) - elif name in self: - del self[name] - - def __init__(self, *args, **kw): - if args: - if len(args) == 1: - args = args[0] - self.update(args) - if isinstance(args, PdfDict): - self.indirect = args.indirect - self._stream = args.stream - for key, value in kw.iteritems(): - setattr(self, key, value) - - def __getattr__(self, name): - return self.get(PdfName(name)) - - def __setattr__(self, name, value): - info = self._special.get(name) - if info is None: - self[PdfName(name)] = value - else: - name, setlen = info - self.__dict__[name] = value - if setlen: - notnone = value is not None - self.Length = notnone and PdfObject(len(value)) or None - - def iteritems(self): - for key, value in dict.iteritems(self): - if value is not None: - assert key.startswith('/'), (key, value) - yield key, value - - def inheritable(self): - ''' Search through ancestors as needed for inheritable - dictionary items - ''' - class Search(object): - def __init__(self, basedict): - self.basedict = basedict - def __getattr__(self, name): - return self[name] - def __getitem__(self, name): - visited = set() - mydict = self.basedict - while 1: - value = getattr(mydict, name) - if value is not None: - return value - myid = id(mydict) - assert myid not in visited - visited.add(myid) - mydict = mydict.Parent - if mydict is None: - return - return Search(self) - inheritable = property(inheritable) - - def private(self): - ''' Allows setting private metadata for use in - processing (not sent to PDF file) - ''' - class Private(object): - pass - - result = Private() - result.__dict__ = self.__dict__ - return result - private = property(private) - -class IndirectPdfDict(PdfDict): - indirect = True diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfreader.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfreader.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfreader.py 2010-03-12 22:38:46.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfreader.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -''' -The PdfReader class reads an entire PDF file into memory and -parses the top-level container objects. (It does not parse -into streams.) The object subclasses PdfDict, and the -document pages are stored in a list in the pages attribute -of the object. -''' - -from pdftokens import PdfTokens -from pdfobjects import PdfDict, PdfArray, PdfName -from pdfcompress import uncompress - -class PdfReader(PdfDict): - - class unresolved: - # Used as a placeholder until we have an object. - pass - - def readindirect(self, objnum, gennum): - ''' Read an indirect object. If it has already - been read, return it from the cache. - ''' - - def setobj(obj): - # Store the new object in the dictionary - # once we have its value - record[1] = obj - - def ordinary(source, setobj, obj): - # Deal with an ordinary (non-array, non-dict) object - setobj(obj) - return obj - - fdata, objnum, gennum = self.fdata, int(objnum), int(gennum) - record = self.indirect_objects[fdata, objnum, gennum] - if record[1] is not self.unresolved: - return record[1] - - # Read the object header and validate it - source = PdfTokens(fdata, record[0]) - objid = source.multiple(3) - assert int(objid[0]) == objnum, objid - assert int(objid[1]) == gennum, objid - assert objid[2] == 'obj', objid - - # Read the object, and call special code if it starts - # an array or dictionary - obj = source.next() - obj = self.special.get(obj, ordinary)(source, setobj, obj) - self.readstream(obj, source) - obj.indirect = True - return obj - - def readstream(obj, source): - ''' Read optional stream following a dictionary - object. - ''' - tok = source.next() - if tok == 'endobj': - return # No stream - - assert isinstance(obj, PdfDict) - assert tok == 'stream', tok - fdata = source.fdata - floc = fdata.rindex(tok, 0, source.floc) + len(tok) - ch = fdata[floc] - if ch == '\r': - floc += 1 - ch = fdata[floc] - assert ch == '\n' - startstream = floc + 1 - endstream = startstream + int(obj.Length) - obj._stream = fdata[startstream:endstream] - source = PdfTokens(fdata, endstream) - endit = source.multiple(2) - if endit != 'endstream endobj'.split(): - # /Length attribute is broken, try to read stream - # anyway disregarding the specified value - # TODO: issue warning here once we have some kind of - # logging - endstream = fdata.index('endstream', startstream) - if fdata[endstream-2:endstream] == '\r\n': - endstream -= 2 - elif fdata[endstream-1] in ['\n', '\r']: - endstream -= 1 - source = PdfTokens(fdata, endstream) - endit = source.multiple(2) - assert endit == 'endstream endobj'.split() - obj.Length = str(endstream-startstream) - obj._stream = fdata[startstream:endstream] - readstream = staticmethod(readstream) - - def readarray(self, source, setobj=lambda x:None, original=None): - special = self.special - result = PdfArray() - setobj(result) - - for value in source: - if value == ']': - break - if value in special: - value = special[value](source) - elif value == 'R': - generation = result.pop() - value = self.readindirect(result.pop(), generation) - result.append(value) - return result - - def readdict(self, source, setobj=lambda x:None, original=None): - special = self.special - result = PdfDict() - setobj(result) - - tok = source.next() - while tok != '>>': - assert tok.startswith('/'), (tok, source.multiple(10)) - key = tok - value = source.next() - if value in special: - value = special[value](source) - tok = source.next() - else: - tok = source.next() - if value.isdigit() and tok.isdigit(): - assert source.next() == 'R' - value = self.readindirect(value, tok) - tok = source.next() - result[key] = value - - return result - - def readxref(fdata): - startloc = fdata.rindex('startxref') - xrefinfo = list(PdfTokens(fdata, startloc, False)) - assert len(xrefinfo) == 3, xrefinfo - assert xrefinfo[0] == 'startxref', xrefinfo[0] - assert xrefinfo[1].isdigit(), xrefinfo[1] - assert xrefinfo[2].rstrip() == '%%EOF', repr(xrefinfo[2]) - return startloc, PdfTokens(fdata, int(xrefinfo[1])) - readxref = staticmethod(readxref) - - def parsexref(self, source): - tok = source.next() - assert tok == 'xref', tok - while 1: - tok = source.next() - if tok == 'trailer': - break - startobj = int(tok) - for objnum in range(startobj, startobj + int(source.next())): - offset = int(source.next()) - generation = int(source.next()) - if source.next() == 'n': - objid = self.fdata, objnum, generation - objval = [offset, self.unresolved] - self.indirect_objects.setdefault(objid, objval) - - pagename = PdfName.Page - pagesname = PdfName.Pages - - def readpages(self, node): - # PDFs can have arbitrarily nested Pages/Page - # dictionary structures. - if node.Type == self.pagename: - return [node] - assert node.Type == self.pagesname, node.Type - result = [] - for node in node.Kids: - result.extend(self.readpages(node)) - return result - - def __init__(self, fname=None, fdata=None, decompress=True): - - if fname is not None: - assert fdata is None - # Allow reading preexisting streams like pyPdf - if hasattr(fname, 'read'): - fdata = fname.read() - else: - f = open(fname, 'rb') - fdata = f.read() - f.close() - - assert fdata is not None - fdata = fdata.rstrip('\00') - self.private.fdata = fdata - - self.private.indirect_objects = {} - self.private.special = {'<<': self.readdict, '[': self.readarray} - - startloc, source = self.readxref(fdata) - self.parsexref(source) - assert source.next() == '<<' - self.update(self.readdict(source)) - assert source.next() == 'startxref' and source.floc > startloc - self.private.pages = self.readpages(self.Root.Pages) - if decompress: - self.uncompress() - - # For compatibility with pyPdf - self.private.numPages = len(self.pages) - - - # For compatibility with pyPdf - def getPage(self, pagenum): - return self.pages[pagenum] - - def uncompress(self): - uncompress([x[1] for x in self.indirect_objects.itervalues()]) diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdftokens.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdftokens.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdftokens.py 2010-03-12 16:55:34.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdftokens.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,249 +0,0 @@ -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -''' -A tokenizer for PDF streams. - -In general, documentation used was "PDF reference", -sixth edition, for PDF version 1.7, dated November 2006. - -''' - -from __future__ import generators - -try: - set -except NameError: - from sets import Set as set - -import re -from pdfobjects import PdfString, PdfObject - -class _PrimitiveTokens(object): - - # Table 3.1, page 50 of reference, defines whitespace - whitespaceset = set('\x00\t\n\f\r ') - - - # Text on page 50 defines delimiter characters - delimiterset = set('()<>{}[]/%') - - # Coalesce contiguous whitespace into a single token - whitespace_pattern = '[%s]+' % ''.join(whitespaceset) - - # In addition to the delimiters, we also use '\', which - # is special in some contexts in PDF. - delimiter_pattern = '\\\\|\\' + '|\\'.join(delimiterset) - - # Dictionary delimiters are '<<' and '>>'. Look for - # these before the single variety. - dictdelim_pattern = r'\<\<|\>\>' - - pattern = '(%s|%s|%s)' % (whitespace_pattern, - dictdelim_pattern, delimiter_pattern) - re_func = re.compile(pattern).finditer - del whitespace_pattern, dictdelim_pattern - del delimiter_pattern, pattern - - def __init__(self, fdata): - - class MyIterator(object): - def next(): - if not tokens: - startloc = self.startloc - for match in next_match[0]: - start = match.start() - end = match.end() - tappend(fdata[start:end]) - if start > startloc: - tappend(fdata[startloc:start]) - self.startloc = end - break - else: - s = fdata[startloc:] - self.startloc = len(fdata) - if s: - tappend(s) - if not tokens: - raise StopIteration - return tpop() - next = staticmethod(next) - - self.fdata = fdata - self.tokens = tokens = [] - self.iterator = iterator = MyIterator() - self.next = iterator.next - self.next_match = next_match = [None] - tappend = tokens.append - tpop = tokens.pop - - def setstart(self, startloc): - self.startloc = startloc - self.next_match[0] = self.re_func(self.fdata, startloc) - - def __iter__(self): - return self.iterator - - def coalesce(self, result): - ''' This function coalesces tokens together up until - the next delimiter or whitespace. - All of the coalesced tokens will either be non-matches, - or will be a matched backslash. We distinguish the - non-matches by the fact that next() will have left - a following match inside self.tokens for the actual match. - ''' - tokens = self.tokens - whitespace = self.whitespaceset - - # Optimized path for usual case -- regular data (not a name string), - # with no escape character, and followed by whitespace. - - if tokens: - token = tokens.pop() - if token != '\\': - if token[0] not in whitespace: - tokens.append(token) - return - result.append(token) - - # Non-optimized path. Either start of a name string received, - # or we just had one escape. - - for token in self: - if tokens: - result.append(token) - token = tokens.pop() - if token != '\\': - if token[0] not in whitespace: - tokens.append(token) - return - result.append(token) - - - def floc(self): - return self.startloc - sum([len(x) for x in self.tokens]) - -class PdfTokens(object): - - def __init__(self, fdata, startloc=0, strip_comments=True): - - def comment(token): - tokens = [token] - for token in primitive: - tokens.append(token) - if token[0] in whitespaceset and ('\n' in token or '\r' in token): - break - return not strip_comments and ''.join(tokens) - - def single(token): - return token - - def regular_string(token): - def escaped(): - escaped = False - i = -2 - while tokens[i] == '\\': - escaped = not escaped - i -= 1 - return escaped - - tokens = [token] - nestlevel = 1 - for token in primitive: - tokens.append(token) - if token in '()' and not escaped(): - nestlevel += token == '(' or -1 - if not nestlevel: - break - else: - assert 0, "Unexpected end of token stream" - return PdfString(''.join(tokens)) - - def hex_string(token): - tokens = [token] - for token in primitive: - tokens.append(token) - if token == '>': - break - while tokens[-2] == '>>': - tokens.append(tokens.pop(-2)) - return PdfString(''.join(tokens)) - - def normal_data(token): - - # Obscure optimization -- we can get here with - # whitespace or regular character data. If we get - # here with whitespace, then there won't be an additional - # token queued up in the primitive object, otherwise there - # will... - if primitive_tokens: #if token[0] not in whitespaceset: - tokens = [token] - primitive.coalesce(tokens) - return PdfObject(''.join(tokens)) - - def name_string(token): - tokens = [token] - primitive.coalesce(tokens) - token = ''.join(tokens) - if '#' in token: - substrs = token.split('#') - substrs.reverse() - tokens = [substrs.pop()] - while substrs: - s = substrs.pop() - tokens.append(chr(int(s[:2], 16))) - tokens.append(s[2:]) - token = ''.join(tokens) - return PdfObject(token) - - def broken(token): - assert 0, token - - dispatch = { - '(': regular_string, - ')': broken, - '<': hex_string, - '>': broken, - '[': single, - ']': single, - '{': single, - '}': single, - '/': name_string, - '%' : comment, - '<<': single, - '>>': single, - }.get - - class MyIterator(object): - def next(): - while not tokens: - token = primitive_next() - token = dispatch(token, normal_data)(token) - if token: - return token - return tokens.pop() - next = staticmethod(next) - - self.primitive = primitive = _PrimitiveTokens(fdata) - self.setstart = primitive.setstart - primitive.setstart(startloc) - self.fdata = fdata - self.strip_comments = strip_comments - self.tokens = tokens = [] - self.iterator = iterator = MyIterator() - self.next = iterator.next - primitive_next = primitive.next - primitive_tokens = primitive.tokens - whitespaceset = _PrimitiveTokens.whitespaceset - - def floc(self): - return self.primitive.floc() - sum([len(x) for x in self.tokens]) - floc = property(floc) - - def __iter__(self): - return self.iterator - - def multiple(self, count): - next = self.next - return [next() for i in range(count)] diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfwriter.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfwriter.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/pdfwriter.py 2010-02-14 03:39:09.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/pdfwriter.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,234 +0,0 @@ -#!/usr/bin/env python - -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -''' -The PdfWriter class writes an entire PDF file out to disk. - -The writing process is not at all optimized or organized. - -An instance of the PdfWriter class has two methods: - addpage(page) -and - write(fname) - -addpage() assumes that the pages are part of a valid -tree/forest of PDF objects. -''' - -try: - set -except NameError: - from sets import Set as set - -from pdfobjects import PdfName, PdfArray, PdfDict, IndirectPdfDict, PdfObject, PdfString -from pdfcompress import compress - -debug = False - -class FormatObjects(object): - ''' FormatObjects performs the actual formatting and disk write. - ''' - - def add(self, obj, visited): - ''' Add an object to our list, if it's an indirect - object. Just format it if not. - ''' - # Can't hash dicts, so just hash the object ID - objid = id(obj) - - # Automatically set stream objects to indirect - if isinstance(obj, PdfDict): - indirect = obj.indirect or (obj.stream is not None) - else: - indirect = getattr(obj, 'indirect', False) - - if not indirect: - assert objid not in visited, \ - 'Circular reference encountered in non-indirect object %s' % repr(obj) - visited.add(objid) - result = self.format_obj(obj, visited) - visited.remove(objid) - return result - - objnum = self.indirect_dict.get(objid) - - # If we haven't seen the object yet, we need to - # add it to the indirect object list. - if objnum is None: - objlist = self.objlist - objnum = len(objlist) + 1 - if debug: - print ' Object', objnum, '\r', - objlist.append(None) - self.indirect_dict[objid] = objnum - objlist[objnum-1] = self.format_obj(obj) - return '%s 0 R' % objnum - - def format_array(myarray, formatter): - # Format array data into semi-readable ASCII - if sum([len(x) for x in myarray]) <= 70: - return formatter % ' '.join(myarray) - bigarray = [] - count = 1000000 - for x in myarray: - lenx = len(x) - if lenx + count > 70: - subarray = [] - bigarray.append(subarray) - count = 0 - count += lenx + 1 - subarray.append(x) - return formatter % '\n '.join([' '.join(x) for x in bigarray]) - format_array = staticmethod(format_array) - - def format_obj(self, obj, visited=None): - ''' format PDF object data into semi-readable ASCII. - May mutually recurse with add() -- add() will - return references for indirect objects, and add - the indirect object to the list. - ''' - if visited is None: - visited = set() - if isinstance(obj, PdfArray): - myarray = [self.add(x, visited) for x in obj] - return self.format_array(myarray, '[%s]') - elif isinstance(obj, PdfDict): - if self.compress and obj.stream: - compress([obj]) - myarray = [] - # Jython 2.2.1 has a bug which segfaults when - # sorting subclassed strings, so we un-subclass them. - dictkeys = [str(x) for x in obj.iterkeys()] - dictkeys.sort() - for key in dictkeys: - myarray.append(key) - myarray.append(self.add(obj[key], visited)) - result = self.format_array(myarray, '<<%s>>') - stream = obj.stream - if stream is not None: - result = '%s\nstream\n%s\nendstream' % (result, stream) - return result - elif isinstance(obj, basestring) and not hasattr(obj, 'indirect'): - return PdfString.encode(obj) - else: - return str(obj) - - def dump(cls, f, trailer, version='1.3', compress=True): - self = cls() - self.compress = compress - self.indirect_dict = {} - self.objlist = [] - - # The first format of trailer gets all the information, - # but we throw away the actual trailer formatting. - self.format_obj(trailer) - # Now we know the size, so we update the trailer dict - # and get the formatted data. - trailer.Size = PdfObject(len(self.objlist) + 1) - trailer = self.format_obj(trailer) - - # Now we have all the pieces to write out to the file. - # Keep careful track of the counts while we do it so - # we can correctly build the cross-reference. - - header = '%%PDF-%s\n%%\xe2\xe3\xcf\xd3\n' % version - f.write(header) - offset = len(header) - offsets = [(0, 65535, 'f')] - - for i, x in enumerate(self.objlist): - objstr = '%s 0 obj\n%s\nendobj\n' % (i + 1, x) - offsets.append((offset, 0, 'n')) - offset += len(objstr) - f.write(objstr) - - f.write('xref\n0 %s\n' % len(offsets)) - for x in offsets: - f.write('%010d %05d %s\r\n' % x) - f.write('trailer\n\n%s\nstartxref\n%s\n%%%%EOF\n' % (trailer, offset)) - dump = classmethod(dump) - -class PdfWriter(object): - - _trailer = None - - def __init__(self, version='1.3', compress=True): - self.pagearray = PdfArray() - self.compress = compress - self.version = version - - def addpage(self, page): - self._trailer = None - assert page.Type == PdfName.Page - inheritable = page.inheritable # searches for resources - self.pagearray.append( - IndirectPdfDict( - page, - Resources = inheritable.Resources, - MediaBox = inheritable.MediaBox, - CropBox = inheritable.CropBox, - Rotate = inheritable.Rotate, - ) - ) - return self - - addPage = addpage # for compatibility with pyPdf - - def addpages(self, pagelist): - for page in pagelist: - self.addpage(page) - return self - - def _get_trailer(self): - trailer = self._trailer - if trailer is not None: - return trailer - - # Create the basic object structure of the PDF file - trailer = PdfDict( - Root = IndirectPdfDict( - Type = PdfName.Catalog, - Pages = IndirectPdfDict( - Type = PdfName.Pages, - Count = PdfObject(len(self.pagearray)), - Kids = self.pagearray - ) - ) - ) - # Make all the pages point back to the page dictionary - pagedict = trailer.Root.Pages - for page in pagedict.Kids: - page.Parent = pagedict - self._trailer = trailer - return trailer - - def _set_trailer(self, trailer): - self._trailer = trailer - - trailer = property(_get_trailer, _set_trailer) - - def write(self, fname, trailer=None): - trailer = trailer or self.trailer - - # Dump the data. We either have a filename or a preexisting - # file object. - preexisting = hasattr(fname, 'write') - f = preexisting and fname or open(fname, 'wb') - FormatObjects.dump(f, trailer, self.version, self.compress) - if not preexisting: - f.close() - -if __name__ == '__main__': - debug = True - import pdfreader - x = pdfreader.PdfReader('source.pdf') - y = PdfWriter() - for i, page in enumerate(x.pages): - print ' Adding page', i+1, '\r', - y.addpage(page) - print - y.write('result.pdf') - print diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/toreportlab.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/toreportlab.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf/pdfrw/toreportlab.py 2010-01-23 16:55:08.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf/pdfrw/toreportlab.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,139 +0,0 @@ -# A part of pdfrw (pdfrw.googlecode.com) -# Copyright (C) 2006-2009 Patrick Maupin, Austin, Texas -# MIT license -- See LICENSE.txt for details - -''' -Converts pdfrw objects into reportlab objects. - -Designed for and tested with rl 2.3. - -Knows too much about reportlab internals. -What can you do? - -The interface to this function is through the makerl() function. - -Parameters: - canv - a reportlab "canvas" (also accepts a "document") - pdfobj - a pdfrw PDF object - -Returns: - A corresponding reportlab object, or if the - object is a PDF Form XObject, the name to - use with reportlab for the object. - - Will recursively convert all necessary objects. - Be careful when converting a page -- if /Parent is set, - will recursively convert all pages! - -Notes: - 1) Original objects are annotated with a - derived_rl_obj attribute which points to the - reportlab object. This keeps multiple reportlab - objects from being generated for the same pdfobj - via repeated calls to makerl. This is great for - not putting too many objects into the - new PDF, but not so good if you are modifying - objects for different pages. Then you - need to do your own deep copying (of circular - structures). You're on your own. - - 2) ReportLab seems weird about FormXObjects. - They pass around a partial name instead of the - object or a reference to it. So we have to - reach into reportlab and get a number for - a unique name. I guess this is to make it - where you can combine page streams with - impunity, but that's just a guess. - - 3) Updated 1/23/2010 to handle multipass documents - (e.g. with a table of contents). These have - a different doc object on every pass. - -''' - -from reportlab.pdfbase import pdfdoc as rldocmodule -from pdfobjects import PdfDict, PdfArray, PdfName - -RLStream = rldocmodule.PDFStream -RLDict = rldocmodule.PDFDictionary -RLArray = rldocmodule.PDFArray - - -def _makedict(rldoc, pdfobj): - rlobj = rldict = RLDict() - if pdfobj.indirect: - rlobj.__RefOnly__ = 1 - rlobj = rldoc.Reference(rlobj) - pdfobj.derived_rl_obj[rldoc] = rlobj, None - - for key, value in pdfobj.iteritems(): - rldict[key[1:]] = makerl_recurse(rldoc, value) - - return rlobj - -def _makestream(rldoc, pdfobj, xobjtype=PdfName.XObject): - rldict = RLDict() - rlobj = RLStream(rldict, pdfobj.stream) - - if pdfobj.Type == xobjtype: - shortname = 'pdfrw_%s' % (rldoc.objectcounter+1) - fullname = rldoc.getXObjectName(shortname) - else: - shortname = fullname = None - result = rldoc.Reference(rlobj, fullname) - pdfobj.derived_rl_obj[rldoc] = result, shortname - - for key, value in pdfobj.iteritems(): - rldict[key[1:]] = makerl_recurse(rldoc, value) - - return result - -def _makearray(rldoc, pdfobj): - rlobj = rlarray = RLArray([]) - if pdfobj.indirect: - rlobj.__RefOnly__ = 1 - rlobj = rldoc.Reference(rlobj) - pdfobj.derived_rl_obj[rldoc] = rlobj, None - - mylist = rlarray.sequence - for value in pdfobj: - mylist.append(makerl_recurse(rldoc, value)) - - return rlobj - -def _makestr(rldoc, pdfobj): - assert isinstance(pdfobj, (float, int, str)), repr(pdfobj) - return pdfobj - -def makerl_recurse(rldoc, pdfobj): - docdict = getattr(pdfobj, 'derived_rl_obj', None) - if docdict is not None: - value = docdict.get(rldoc) - if value is not None: - return value[0] - if isinstance(pdfobj, PdfDict): - if pdfobj.stream is not None: - func = _makestream - else: - func = _makedict - if docdict is None: - pdfobj.private.derived_rl_obj = {} - elif isinstance(pdfobj, PdfArray): - func = _makearray - if docdict is None: - pdfobj.derived_rl_obj = {} - else: - func = _makestr - return func(rldoc, pdfobj) - -def makerl(canv, pdfobj): - try: - rldoc = canv._doc - except AttributeError: - rldoc = canv - rlobj = makerl_recurse(rldoc, pdfobj) - try: - name = pdfobj.derived_rl_obj[rldoc][1] - except AttributeError: - name = None - return name or rlobj diff -Nru rst2pdf-0.16/rst2pdf/extensions/vectorpdf_r2p.py rst2pdf-0.93/rst2pdf/extensions/vectorpdf_r2p.py --- rst2pdf-0.16/rst2pdf/extensions/vectorpdf_r2p.py 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/extensions/vectorpdf_r2p.py 2012-09-20 15:53:04.000000000 +0000 @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# See LICENSE.txt for licensing terms + +import sys +import os +from weakref import WeakKeyDictionary +from copy import copy + +try: + from reportlab.rl_config import _FUZZ + from reportlab.platypus import Flowable + from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT + + import pdfrw + from pdfrw.toreportlab import makerl + from pdfrw.buildxobj import CacheXObj + + from rst2pdf.log import log + import rst2pdf.image + from rst2pdf.opt_imports import LazyImports +except ImportError: + # This is just to make nosetest happy on the CI server + class Flowable: + pass + + # TODO: Looks the same as for other images, because I + # stole it from other image handlers. Common base class??? + + +class AnyCache(object): + ''' This is a memory leak waiting to happen. + It is used by the raster method. Not yet + sure how to define scope on these cached items. + ''' + +# This is monkey-patched into reportlab IFF we are using +# PDF files inside paragraphs. + +def drawImage(self, image, x, y, width=None, height=None, mask=None, + preserveAspectRatio=False, anchor='c'): + if not isinstance(image, VectorPdf): + return self._drawImageNotVectorPDF(image, x, y, width, height, mask, + preserveAspectRatio, anchor) + image.drawOn(self, x, y, width=width, height=height) + +class VectorPdf(Flowable): + + # The filecache allows us to only read a given PDF file once + # for every RstToPdf client object. This allows this module + # to usefully cache, while avoiding being the cause of a memory + # leak in a long-running process. + + filecache = WeakKeyDictionary() + + @classmethod + def load_xobj(cls, srcinfo): + client, uri = srcinfo + loader = cls.filecache.get(client) + if loader is None: + loader = cls.filecache[client] = CacheXObj().load + return loader(uri) + + def __init__(self, filename, width=None, height=None, kind='direct', + mask=None, lazy=True, srcinfo=None): + Flowable.__init__(self) + self._kind = kind + self.xobj = xobj = self.load_xobj(srcinfo) + self.imageWidth, self.imageHeight = imageWidth, imageHeight = xobj.w, xobj.h + width = width or imageWidth + height = height or imageHeight + if kind in ['bound','proportional']: + factor = min(float(width)/imageWidth,float(height)/imageHeight) + width = factor * imageWidth + height = factor * imageHeight + self.drawWidth = width + self.drawHeight = height + + def wrap(self, aW, aH): + return self.drawWidth, self.drawHeight + + def drawOn(self, canv, x, y, _sW=0, width=0, height=0): + if _sW > 0 and hasattr(self, 'hAlign'): + a = self.hAlign + if a in ('CENTER', 'CENTRE', TA_CENTER): + x += 0.5*_sW + elif a in ('RIGHT', TA_RIGHT): + x += _sW + elif a not in ('LEFT', TA_LEFT): + raise ValueError("Bad hAlign value " + str(a)) + + xobj = self.xobj + xobj_name = makerl(canv._doc, xobj) + + xscale = (width or self.drawWidth) / xobj.w + yscale = (height or self.drawHeight) / xobj.h + x -= xobj.x * xscale + y -= xobj.y * yscale + + canv.saveState() + canv.translate(x, y) + canv.scale(xscale, yscale) + canv.doForm(xobj_name) + canv.restoreState() + + def _restrictSize(self,aW,aH): + if self.drawWidth>aW+_FUZZ or self.drawHeight>aH+_FUZZ: + self._oldDrawSize = self.drawWidth, self.drawHeight + factor = min(float(aW)/self.drawWidth,float(aH)/self.drawHeight) + self.drawWidth *= factor + self.drawHeight *= factor + return self.drawWidth, self.drawHeight + + def getSize(self): + return self.drawWidth, self.drawHeight + + @staticmethod + def SleazyPDFCheck(fname): + return fname.split('#',1)[0].rsplit('.',1)[1].lower() == 'pdf' + + OldImageReader = None + + @classmethod + def NewImageReader(cls, fname): + if cls.SleazyPDFCheck(fname): + return cls(None, srcinfo=(AnyCache, fname)) + else: + return cls.OldImageReader(fname) + + @classmethod + def raster(cls, fname, client): + ''' We don't REALLY generate a raster image. + Instead, we attempt to monkey-patch reportlab + to call us with the filename again later. + ''' + if cls.OldImageReader is None: + import reportlab.platypus.paraparser as p + cls.OldImageReader = p.ImageReader + p.ImageReader = cls.NewImageReader + from reportlab.pdfgen.canvas import Canvas as c + c._drawImageNotVectorPDF = c.drawImage + c.drawImage = drawImage + return fname + + def __deepcopy__(self, *whatever): + # VectorPDF class is not deep copyable. Stop the copy at this + # class. Related to issue 126, but cropped up later when + # we added fake raster stuff for reportlab tag. + return copy(self) + + +def install(createpdf, options): + ''' Monkey-patch this PDF handling into rst2pdf + ''' + LazyImports.pdfinfo = pdfrw + rst2pdf.image.VectorPdf = VectorPdf diff -Nru rst2pdf-0.16/rst2pdf/findfonts.py rst2pdf-0.93/rst2pdf/findfonts.py --- rst2pdf-0.16/rst2pdf/findfonts.py 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/findfonts.py 2012-03-04 01:10:52.000000000 +0000 @@ -40,14 +40,11 @@ def loadFonts(): - """Given a font name, returns the actual font files. - - If the font name is not valid, it will treat it as a font family name, - and return the value of searching for the regular font of said family. - + """ + Search the system and build lists of available fonts. """ - if not afmList or not pfbList or not ttfList: + if not afmList and not pfbList and not ttfList: # Find all ".afm" and ".pfb" files files def findFontFiles(_, folder, names): for f in os.listdir(folder): @@ -223,6 +220,9 @@ fontname = ftname + " (TrueType)" try: fname = _w.QueryValueEx(fontkey, fontname)[0] + if os.path.isabs(fname): + fontkey.close() + return fname fontdir = os.environ.get("SystemRoot", u"C:\\Windows") fontdir += u"\\Fonts" fontkey.Close() diff -Nru rst2pdf-0.16/rst2pdf/flowables.py rst2pdf-0.93/rst2pdf/flowables.py --- rst2pdf-0.16/rst2pdf/flowables.py 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/flowables.py 2012-12-06 13:59:55.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- # See LICENSE.txt for licensing terms -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/flowables.py $ -#$LastChangedDate: 2010-10-06 17:17:48 -0300 (Wed, 06 Oct 2010) $ -#$LastChangedRevision: 2393 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/flowables.py $ +#$Date: 2012-12-06 10:59:55 -0300 (Thu, 06 Dec 2012) $ +#$Revision: 2540 $ __docformat__ = 'reStructuredText' @@ -56,7 +56,7 @@ pw, ph = self.wrap(aW, aH) if ph - aH < minH2: aH = ph - minH2 - + return XPreformatted.split(self, aW, aH) class MyIndenter(Indenter): @@ -90,12 +90,7 @@ the PDF TOC.""" def __init__(self, text, style, bulletText=None, caseSensitive=1, level=0, - snum=None, parent_id=None, node=None): - #if label is None: # it happens - #self.label = text.replace(u'\xa0', ' ').strip( - #).replace(' ', '-').encode('ascii', 'replace').lower() - #else: - #self.label = label.strip() + snum=None, parent_id=None, node=None, section_header_depth=2): # Issue 114: need to convert "&" to "&" and such. # Issue 140: need to make it plain text self.stext=re.sub(r'<[^>]*?>', '', unescape(text)) @@ -104,13 +99,15 @@ self.snum = snum self.parent_id=parent_id self.node=node + self.section_header_depth = section_header_depth Paragraph.__init__(self, text, style, bulletText) def draw(self): # Add outline entry self.canv.bookmarkHorizontal(self.parent_id,0,0+self.height) - if self.canv.firstSect: + # self.section_header_depth is for Issue 391 + if self.canv.firstSect and self.level < self.section_header_depth: self.canv.sectName = self.stext self.canv.firstSect=False if self.snum is not None: @@ -164,7 +161,7 @@ wrap() will always return a size large enough for both lists, and this flowable **cannot** be split, so use with care. """ - + def __init__(self, odd, even, style=None): self.odd=DelayedTable([[odd]],['100%'], style) self.even=DelayedTable([[even]],['100%'], style) @@ -193,9 +190,16 @@ """ - def __init__(self, data, colWidths, style, repeatrows=False, splitByRow=True): + def __init__(self, data, colWidths, style=None, repeatrows=False, splitByRow=True): self.data = data self._colWidths = colWidths + if style is None: + style = TableStyle([ + ('LEFTPADDING', (0,0), (-1,-1), 0), + ('RIGHTPADDING', (0,0), (-1,-1), 0), + ('TOPPADDING', (0,0), (-1,-1), 0), + ('BOTTOMPADDING', (0,0), (-1,-1), 0), + ]) self.style = style self.t = None self.repeatrows = repeatrows @@ -213,7 +217,7 @@ #self.repeatRows= 0 #self.splitByRow= 1 #self.vAlign= 'MIDDLE' - + def wrap(self, w, h): # Create the table, with the widths from colWidths reinterpreted # if needed as percentages of frame/cell/whatever width w is. @@ -226,7 +230,7 @@ self.colWidths=map(adjust, self._colWidths) #colWidths = [_w * _tw for _w in self.colWidths] self.t = Table(self.data, colWidths=self.colWidths, - style=self.style, repeatRows=self.repeatrows, + style=self.style, repeatRows=self.repeatrows, splitByRow=True) #splitByRow=self.splitByRow) self.t.hAlign = self.hAlign @@ -242,7 +246,7 @@ def drawOn(self, canvas, x, y, _sW=0): self.t.drawOn(canvas, x, y, _sW) - + def identity(self, maxLen=None): return "<%s at %s%s%s> containing: %s" % (self.__class__.__name__, hex(id(self)), self._frameName(), @@ -302,7 +306,7 @@ if l2==[]: # Not splittable, push some to next page if l==0: # Can't fit anything, push all to next page return l2 - + # We reduce the number of items we keep on the # page for two reasons: # 1) If an item is associated with the following @@ -380,7 +384,7 @@ self.height = min(aH, h) return w, self.height - + class MyPageBreak(FrameActionFlowable): @@ -688,12 +692,13 @@ """ - def __init__(self, maxWidth, content=[], style=None, mode=None): + def __init__(self, maxWidth, content=[], style=None, mode=None, scale = None): self.maxWidth = maxWidth self.content = content self.style = style self.mode = mode self.pad = None + self.scale = scale Flowable.__init__(self) def border_padding(self, useWidth, additional): @@ -722,15 +727,18 @@ self.maxWidth = maxWidth maxWidth -= (self.pad[1]+self.pad[3]) self.width, self.height = _listWrapOn(self.content, maxWidth, None) - self.scale = 1.0 if self.width > maxWidth: if self.mode <> 'shrink': + self.scale = 1.0 log.warning("BoundByWidth too wide to fit in frame (%s > %s): %s", self.width,maxWidth,self.identity()) - if self.mode == 'shrink': + if self.mode == 'shrink' and not self.scale: self.scale = (maxWidth + self.pad[1]+self.pad[3])/\ (self.width + self.pad[1]+self.pad[3]) - self.height *= self.scale + else: + self.scale = 1.0 + self.height *= self.scale + self.width *= self.scale return self.width, self.height + (self.pad[0]+self.pad[2])*self.scale def split(self, availWidth, availHeight): @@ -742,8 +750,9 @@ content = content[0].split( availWidth - (self.pad[1]+self.pad[3]), availHeight - (self.pad[0]+self.pad[2])) - return [BoundByWidth(self.maxWidth, [f], - self.style, self.mode) for f in content] + result = [BoundByWidth(self.maxWidth, [f], + self.style, self.mode, self.scale) for f in content] + return result def draw(self): """we simulate being added to a frame""" @@ -914,18 +923,18 @@ """ def __init__(self, *args, **kwargs): - + # The parent argument is to define the locality of # the TOC. If it's none, it's a global TOC and # any heading it's notified about is accepted. - + # If it's a node, then the heading needs to be "inside" # that node. This can be figured out because # the heading flowable keeps a reference to the title # node it was creatd from. # # Yes, this is gross. - + self.parent=kwargs.pop('parent') TableOfContents.__init__(self, *args, **kwargs) # reference ids for which this TOC should be notified @@ -938,7 +947,7 @@ # stuff includes (level, text, pagenum, label) level, text, pageNum, label, node = stuff rlabel='-'.join(label.split('-')[:-1]) - + def islocal(_node): '''See if this node is "local enough" for this TOC. This is for Issue 196''' @@ -949,7 +958,7 @@ return True _node=_node.parent return False - + if rlabel in self.refids and islocal(node): self.addEntry(level, text, pageNum) self.refid_lut[(level, text, pageNum)] = label diff -Nru rst2pdf-0.16/rst2pdf/genelements.py rst2pdf-0.93/rst2pdf/genelements.py --- rst2pdf-0.16/rst2pdf/genelements.py 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/genelements.py 2012-12-14 00:39:59.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/genelements.py $ -#$LastChangedDate: 2010-10-06 17:17:48 -0300 (Wed, 06 Oct 2010) $ -#$LastChangedRevision: 2393 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/genelements.py $ +#$Date: 2012-12-13 21:39:59 -0300 (Thu, 13 Dec 2012) $ +#$Revision: 2615 $ # See LICENSE.txt for licensing terms @@ -53,14 +53,15 @@ from aafigure_directive import Aanode from log import log, nodeid -from utils import log, parseRaw +from utils import log, parseRaw, parseHTML from reportlab.platypus import Paragraph, TableStyle from reportlab.lib.units import cm from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT from flowables import Table, DelayedTable, SplitTable, Heading, \ MyIndenter, MyTableOfContents, MySpacer, \ Separation, BoxedContainer, BoundByWidth, \ - MyPageBreak, Reference, tablepadding, OddEven + MyPageBreak, Reference, tablepadding, OddEven, \ + XPreformatted from opt_imports import wordaxe, Paragraph, ParagraphStyle @@ -100,7 +101,7 @@ # Take the style from the parent "table" node # because sometimes it's not passed down. - + if node.parent['classes']: style = client.styles.combinedStyle(['table']+node.parent['classes']) else: @@ -152,7 +153,7 @@ st = client.styles['table-heading'] else: st = client.styles['table-body'] - ell = client.gather_elements(cell, style=st) + ell = client.gather_elements(cell, style=st) r.append(ell) j += 1 data.append(r) @@ -164,15 +165,15 @@ else: # Only use the commands from "table" if the # specified class has no commands. - + for cmd in client.styles['table'].commands: st.add(*cmd) - + if hasHead: for cmd in client.styles.tstyleHead(headRows): st.add(*cmd) rtr = client.repeat_table_rows - + t=DelayedTable(data, colWidths, st, rtr) if style.alignment == TA_LEFT: t.hAlign='LEFT' @@ -232,14 +233,15 @@ maxdepth=4 if reportlab.Version > '2.1': maxdepth=6 - + # The parent ID is the refid + an ID to make it unique for Sphinx parent_id=(node.parent.get('ids', [None]) or [None])[0]+u'-'+unicode(id(node)) node.elements = [ Heading(text, client.styles['heading%d'%min(client.depth, maxdepth)], level=client.depth-1, parent_id=parent_id, - node=node + node=node, + section_header_depth=client.section_header_depth )] if client.depth <= client.breaklevel: node.elements.insert(0, MyPageBreak(breakTo=client.breakside)) @@ -359,6 +361,17 @@ class HandleAddress(HandleFList, docutils.nodes.address): labeltext = "address" + def gather_elements(self, client, node, style): + fb = client.gather_pdftext(node) + t_style=TableStyle(client.styles['field-list'].commands) + colWidths=client.styles['field-list'].colWidths + if self.adjustwidths: + colWidths = map(client.styles.adjustUnits, colWidths) + label=client.text_for_label(self.labeltext, style)+":" + t = self.TableType([[Paragraph(label, style=client.styles['fieldname']), + XPreformatted(fb, style)] + ], style=t_style, colWidths=colWidths) + return [t] class HandleVersion(HandleFList, docutils.nodes.version): labeltext = "version" @@ -432,18 +445,18 @@ class HandleBulletList(NodeHandler, docutils.nodes.bullet_list): def gather_elements(self, client, node, style): - + if node ['classes']: style = client.styles[node['classes'][0]] else: style = client.styles["bullet-list"] - + node.elements = client.gather_elements(node, style=style) - + # Here we need to separate the list from the previous element. # Calculate by how much: - + sb=style.spaceBefore # list separation sa=style.spaceAfter # list separation @@ -466,13 +479,13 @@ style = client.styles[node['classes'][0]] else: style = client.styles["item-list"] - + node.elements = client.gather_elements(node, style = style) - + # Here we need to separate the list from the previous element. # Calculate by how much: - + sb=style.spaceBefore # list separation sa=style.spaceAfter # list separation @@ -483,7 +496,7 @@ class HandleDefinition(NodeHandler, docutils.nodes.definition): def gather_elements(self, client, node, style): return client.gather_elements(node, - style = client.styles["definition"]) + style = style) class HandleOptionListItem(NodeHandler, docutils.nodes.option_list_item): def gather_elements(self, client, node, style): @@ -522,7 +535,7 @@ # FIXME: make this configurable from the stylesheet t_style = TableStyle (client.styles['definition'].commands) cw = getattr(client.styles['definition'],'colWidths',[]) - + if client.splittables: node.elements = [ Paragraph(''.join(ids)+' : '.join(tt), client.styles['definition-list-term']), @@ -531,7 +544,7 @@ node.elements = [ Paragraph(''.join(ids)+' : '.join(tt), client.styles['definition-list-term']), DelayedTable([['',dt]] , colWidths=[10,None], style = t_style )] - + return node.elements class HandleListItem(NodeHandler, docutils.nodes.list_item): @@ -551,7 +564,7 @@ # bulletFont # This is so the baselines of the bullet and the text align extra_space= bStyle.bulletFontSize-bStyle.fontSize - + bStyle.fontSize=bStyle.bulletFontSize bStyle.fontName=bStyle.bulletFontName @@ -595,12 +608,12 @@ else: # The bullet is smaller, move down the bullet sbb = -extra_space - + #colWidths = map(client.styles.adjustUnits, #client.styles['item_list'].colWidths) colWidths = getattr(style,'colWidths',[]) while len(colWidths) < 2: - colWidths.append(None) + colWidths.append(client.styles['item_list'].colWidths[len(colWidths)]) if client.splittables: node.elements = [MySpacer(0,sb), @@ -674,13 +687,26 @@ qstyle = copy(client.styles['lineblock']) # Fix Issue 225: no space betwen line in a lineblock, but keep # space before the lineblock itself - return [MySpacer(0,client.styles['lineblock'].spaceBefore)]+client.gather_elements(node, style=qstyle)+[MySpacer(0,client.styles['lineblock'].spaceAfter)] - + # Fix Issue 482: nested lineblocks don't need spacing before/after + if not isinstance(node.parent, docutils.nodes.line_block): + return [MySpacer(0,client.styles['lineblock'].spaceBefore)]+client.gather_elements(node, style=qstyle)+[MySpacer(0,client.styles['lineblock'].spaceAfter)] + else: + return client.gather_elements(node, style=qstyle) + class HandleLine(NodeHandler, docutils.nodes.line): def gather_elements(self, client, node, style): + # line nodes have no classes, they have to inherit from the outermost lineblock (sigh) + # For more info see Issue 471 and its test case. + + parent = node + while isinstance(parent.parent, (docutils.nodes.line, docutils.nodes.line_block)): + parent=parent.parent + p_class = (parent.get('classes') or ['line'])[0] + print node, p_class + qstyle = copy(client.styles[p_class]) # Indent .5em per indent unit i=node.__dict__.get('indent',0) - qstyle = copy(client.styles['line']) + #qstyle = copy(client.styles['line']) qstyle.leftIndent += client.styles.adjustUnits("0.5em")*i text = client.gather_pdftext(node) if not text: # empty line @@ -703,10 +729,12 @@ class HandleFigure(NodeHandler, docutils.nodes.figure): def gather_elements(self, client, node, style): - # Either use the figure style or the class + # Either use the figure style or the class # selected by the user + st_name = 'figure' if node.get('classes'): - style=client.styles[node.get('classes')[0]] + st_name = node.get('classes')[0] + style=client.styles[st_name] cmd=getattr(style,'commands',[]) image=node.children[0] if len(node.children) > 1: @@ -726,9 +754,10 @@ table = DelayedTable([[e,] for e in sub_elems],style=t_style, colWidths=cw) table.hAlign = node.get('align','CENTER').upper() - return [table] + return [MySpacer(0, style.spaceBefore),table, + MySpacer(0, style.spaceAfter)] + - class HandleCaption(NodeHandler, docutils.nodes.caption): def gather_elements(self, client, node, style): return [Paragraph(client.gather_pdftext(node), @@ -749,7 +778,7 @@ # Sphinx uses a rubric as footnote container if self.sphinxmode and len(node.children) == 1 \ and node.children[0].astext() == 'Footnotes': - return [Separation(),] + return [] else: return [Paragraph(client.gather_pdftext(node), client.styles['rubric'])] @@ -850,6 +879,9 @@ # Not really raw, but what the heck if node.get('format','NONE').lower()=='pdf': return parseRaw(str(node.astext()), node) + elif client.raw_html and node.get('format','NONE').lower()=='html': + x = parseHTML(str(node.astext()), node) + return x else: return [] diff -Nru rst2pdf-0.16/rst2pdf/genpdftext.py rst2pdf-0.93/rst2pdf/genpdftext.py --- rst2pdf-0.16/rst2pdf/genpdftext.py 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/genpdftext.py 2012-12-14 16:41:35.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/genpdftext.py $ -#$LastChangedDate: 2010-10-06 17:17:48 -0300 (Wed, 06 Oct 2010) $ -#$LastChangedRevision: 2393 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/genpdftext.py $ +#$Date: 2012-12-14 13:41:35 -0300 (Fri, 14 Dec 2012) $ +#$Revision: 2621 $ # See LICENSE.txt for licensing terms @@ -16,6 +16,7 @@ from opt_imports import Paragraph from image import MyImage, missing +from flowables import MySpacer class FontHandler(NodeHandler): def get_pre_post(self, client, node, replaceEnt): @@ -48,13 +49,19 @@ if node['classes']: pre = client.styleToFont(node['classes'][0]) else: - pre = '' % client.styles['literal'].fontName + pre = client.styleToFont('literal') post = "" if not client.styles['literal'].hyphenation: pre = '' + pre post += '' return pre, post + def get_text(self, client, node, replaceEnt): + text = node.astext() + text = escape(node.astext()) + text = text.replace(' ', ' ') + return text + class HandleSuper(NodeHandler, docutils.nodes.superscript): pre = '' post = "" @@ -126,25 +133,39 @@ class HandleImage(NodeHandler, docutils.nodes.image): def gather_elements(self, client, node, style): - # FIXME: handle class,target,alt + # FIXME: handle alt + target = None + if isinstance(node.parent, docutils.nodes.reference): + target = node.parent.get('refuri', None) + st_name = 'image' + if node.get('classes'): + st_name = node.get('classes')[0] + style=client.styles[st_name] uri = str(node.get("uri")) if uri.split("://")[0].lower() not in ('http','ftp','https'): imgname = os.path.join(client.basedir,uri) else: imgname = uri - try: w, h, kind = MyImage.size_for_node(node, client=client) - except ValueError: + except ValueError: # Broken image, return arbitrary stuff imgname=missing w, h, kind = 100, 100, 'direct' - node.elements = [MyImage(filename=imgname, height=h, width=w, - kind=kind, client=client)] - alignment = node.get('align', 'CENTER').upper() - if alignment in ('LEFT', 'CENTER', 'RIGHT'): - node.elements[0].image.hAlign = alignment + node.elements = [ + MyImage(filename=imgname, height=h, width=w, + kind=kind, client=client, target=target)] + alignment = node.get('align', '').upper() + if not alignment: + # There is no JUSTIFY for flowables, of course, so 4:LEFT + alignment = {0:'LEFT', 1:'CENTER', 2:'RIGHT', 4:'LEFT'}[style.alignment] + if not alignment: + alignment = 'CENTER' + node.elements[0].image.hAlign = alignment + node.elements[0].spaceBefore = style.spaceBefore + node.elements[0].spaceAfter = style.spaceAfter + # Image flowables don't support valign (makes no sense for them?) # elif alignment in ('TOP','MIDDLE','BOTTOM'): # i.vAlign = alignment @@ -156,7 +177,7 @@ imgname = os.path.join(client.basedir,str(node.get("uri"))) try: w, h, kind = MyImage.size_for_node(node, client=client) - except ValueError: + except ValueError: # Broken image, return arbitrary stuff imgname=missing w, h, kind = 100, 100, 'direct' @@ -171,9 +192,6 @@ # previous to passing to reportlab. # Try to rasterize using the backend w, h, kind = MyImage.size_for_node(node, client=client) - img = MyImage(filename=imgname, height=h, width=w, - kind=kind, client=client) - # Last resort, try all rasterizers uri=MyImage.raster(imgname, client) return ''%\ (uri, w, h, align) diff -Nru rst2pdf-0.16/rst2pdf/image.py rst2pdf-0.93/rst2pdf/image.py --- rst2pdf-0.16/rst2pdf/image.py 2010-09-28 20:51:46.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/image.py 2012-12-14 00:05:53.000000000 +0000 @@ -13,7 +13,7 @@ from opt_imports import LazyImports -from svgimage import SVGImage, VectorImage +from svgimage import SVGImage # This assignment could be overridden by an extension module VectorPdf = None @@ -37,13 +37,13 @@ class MyImage (Flowable): """A Image subclass that can: - + 1. Take a 'percentage_of_container' kind, which resizes it on wrap() to use... well, a percentage of the container's width. 2. Take vector formats and instantiates the right "backend" flowable - + """ warned = False @@ -71,7 +71,7 @@ return fname, extension, options def __init__(self, filename, width=None, height=None, - kind='direct', mask="auto", lazy=1, client=None): + kind='direct', mask="auto", lazy=1, client=None, target=None): # Client is mandatory. Perhaps move it farther up if we refactor assert client is not None self.__kind=kind @@ -86,7 +86,7 @@ filename = missing self.filename, self._backend=self.get_backend(filename, client) srcinfo = client, self.filename - + if kind == 'percentage_of_container': self.image=self._backend(self.filename, width, height, 'direct', mask, lazy, srcinfo) @@ -99,12 +99,13 @@ kind, mask, lazy, srcinfo) self.__ratio=float(self.image.imageWidth)/self.image.imageHeight self.__wrappedonce=False + self.target = target @classmethod def raster(self, filename, client): """Takes a filename and converts it to a raster image reportlab can process""" - + if not os.path.exists(filename): log.error("Missing image file: %s",filename) return missing @@ -115,7 +116,7 @@ return backend.raster(filename, client) except: pass - + # Last resort: try everything @@ -127,7 +128,7 @@ ext='.jpg' extension = os.path.splitext(filename)[-1][1:].lower() - + if PILImage: # See if pil can process it try: PILImage.open(filename) @@ -169,7 +170,7 @@ doc = None if doc: img = gfx.ImageList() - img.setparameter("antialise", "1") # turn on antialising + img.setparameter("antialise", "1") # turn on antialising page = doc.getPage(1) img.startpage(page.width,page.height) page.render(img) @@ -180,7 +181,7 @@ return tmpname except: # Didn't work pass - + # PIL can't and Magick can't, so we can't self.support_warning() log.error("Couldn't load image [%s]"%filename) @@ -192,7 +193,7 @@ '''Given the filename of an image, returns (fname, backend) where fname is the filename to be used (could be the same as filename, or something different if the image had to be converted - or is missing), and backend is an Image class that can handle + or is missing), and backend is an Image class that can handle fname. @@ -245,12 +246,7 @@ backend=SVGImage else: filename = missing - - elif extension in ['ai', 'ccx', 'cdr', 'cgm', 'cmx', 'fig', - 'sk1', 'sk', 'xml', 'wmf']: - log.info('Backend for %s is VectorImage'%filename) - backend=VectorImage - + elif extension in ['pdf']: if VectorPdf is not None and filename is not missing: backend = VectorPdf @@ -269,7 +265,7 @@ elif extension != 'jpg' and not LazyImports.PILImage: if LazyImports.PMImage: # Need to convert to JPG via PythonMagick - filename=self.raster(filename) + filename=self.raster(filename, client) else: # No way to make this work log.error('To use a %s image you need PIL installed [%s]',extension,filename) @@ -280,7 +276,7 @@ @classmethod def size_for_node(self, node, client): '''Given a docutils image node, returns the size the image should have - in the PDF document, and what 'kind' of size that is. + in the PDF document, and what 'kind' of size that is. That involves lots of guesswork''' uri = str(node.get("uri")) @@ -289,14 +285,14 @@ else: uri, _ = urllib.urlretrieve(uri) client.to_unlink.append(uri) - + srcinfo = client, uri # Extract all the information from the URI imgname, extension, options = self.split_uri(uri) if not os.path.isfile(imgname): imgname = missing - + scale = float(node.get('scale', 100))/100 size_known = False @@ -317,18 +313,11 @@ # These are in pt, so convert to px iw = iw * xdpi / 72 ih = ih * ydpi / 72 - - elif extension in [ - "ai", "ccx", "cdr", "cgm", "cmx", - "sk1", "sk", "xml", "wmf", "fig"] and VectorImage.available(): - iw, ih = VectorImage(imgname, srcinfo=srcinfo).wrap(0, 0) - # These are in pt, so convert to px - iw = iw * xdpi / 72 - ih = ih * ydpi / 72 - + elif extension == 'pdf': if VectorPdf is not None: - box = VectorPdf.load_xobj(srcinfo).BBox + xobj = VectorPdf.load_xobj(srcinfo) + iw, ih = xobj.w, xobj.h else: pdf = LazyImports.pdfinfo if pdf is None: @@ -336,15 +325,14 @@ return 0, 0, 'direct' reader = pdf.PdfFileReader(open(imgname, 'rb')) box = [float(x) for x in reader.getPage(0)['/MediaBox']] - x1, y1, x2, y2 = box + iw, ih = x2 - x1, y2 - y1 # These are in pt, so convert to px - iw = float((x2-x1) * xdpi / 72) - ih = float((y2-y1) * ydpi / 72) + iw = iw * xdpi / 72.0 + ih = ih * ydpi / 72.0 size_known = True # Assume size from original PDF is OK - + else: keeptrying = True - if LazyImports.PILImage: try: img = LazyImports.PILImage.open(imgname) @@ -358,7 +346,7 @@ img = LazyImports.PMImage(imgname) iw = img.size().width() ih = img.size().height() - density=img.density() + density=img.density() # The density is in pixelspercentimeter (!?) xdpi=density.width()*2.54 ydpi=density.height()*2.54 @@ -408,7 +396,7 @@ # docutils mailing list discussion w = client.styles.adjustUnits(w, client.styles.tw, default_unit='px') - + if h is None: # h is set from w with right aspect ratio h = w*ih/iw @@ -436,7 +424,12 @@ imgname, w/cm, h/cm, nodeid(node)) return w, h, kind - + + def _restrictSize(self,aW,aH): + return self.image._restrictSize(aW, aH) + + def _unRestrictSize(self,aW,aH): + return self.image._unRestrictSize(aW, aH) def __deepcopy__(self, *whatever): # ImageCore class is not deep copyable. Stop the copy at this @@ -476,7 +469,20 @@ self.image.drawWidth = availWidth self.image.drawHeight = availWidth / self.__ratio return self.image.wrap(availWidth, availHeight) - + def drawOn(self, canv, x, y, _sW=0): + if self.target: + offset = 0 + if self.image.hAlign == 'CENTER': + offset = _sW / 2. + elif self.image.hAlign == 'RIGHT': + offset = _sW + canv.linkURL(self.target, + ( + x + offset, y, + x + offset + self.image.drawWidth, + y + self.image.drawHeight), + relative = True, + #thickness = 3, + ) return self.image.drawOn(canv, x, y, _sW) - diff -Nru rst2pdf-0.16/rst2pdf/languages.py rst2pdf-0.93/rst2pdf/languages.py --- rst2pdf-0.16/rst2pdf/languages.py 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/languages.py 2012-02-29 00:07:21.000000000 +0000 @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# See LICENSE.txt for licensing terms +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/languages.py $ +#$Date: 2012-02-28 21:07:21 -0300 (Tue, 28 Feb 2012) $ +#$Revision: 2443 $ + +from docutils.languages import get_language as get_language + +from rst2pdf.log import log + + +def get_language_silent(lang): + """Docutils get_language() with patches for older versions.""" + try: + return get_language(lang) + except TypeError, err: # Docutils 0.8.1 + if 'get_language() takes exactly 2 arguments' in str(err): + class SilentReporter(object): + def warning(self, msg): + pass + return get_language(lang, SilentReporter()) + raise # re-raise any other TypeError + except ImportError: # Docutils < 0.8 + return get_language('en') + + +def get_language_available(lang): + """Docutils get_language() also returning the available language.""" + module = get_language_silent(lang) + docutils_lang = module.__name__.rsplit('.', 1)[-1] + if (docutils_lang == 'en' and docutils_lang != lang + and '_' in lang): + module = get_language_silent(lang.split('_', 1)[0]) + docutils_lang = module.__name__.rsplit('.', 1)[-1] + if docutils_lang != lang: + warn = (docutils_lang.split('_', 1)[0] == lang.split('_', 1)[0] + and log.info or log.warning) + warn("Language '%s' not supported by Docutils," + " using '%s' instead." % (lang, docutils_lang)) + if docutils_lang == 'en' and lang.split('_', 1)[0] != 'en': + lang = 'en_US' + return lang, docutils_lang, module diff -Nru rst2pdf-0.16/rst2pdf/math_directive.py rst2pdf-0.93/rst2pdf/math_directive.py --- rst2pdf-0.16/rst2pdf/math_directive.py 2010-09-07 20:00:16.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/math_directive.py 2012-07-12 16:42:28.000000000 +0000 @@ -18,6 +18,8 @@ final_argument_whitespace = True option_spec = { 'label': directives.unchanged, + 'fontsize': directives.nonnegative_int, + 'color': directives.unchanged, 'nowrap': directives.flag, } @@ -29,8 +31,12 @@ if self.arguments and self.arguments[0] and not latex: latex = self.arguments[0] label=self.options.get('label', None) + fontsize=self.options.get('fontsize', None) + color=self.options.get('color', None) return [math_node(latex=latex, label=label, + fontsize=fontsize, + color=color, rawsource=''.join(self.content))] def __repr__(self): @@ -50,10 +56,12 @@ class math_node(General, Inline, Element): children = () - def __init__(self, rawsource='', label=None, *children, **attributes): + def __init__(self, rawsource='', label=None, fontsize=12, color='black', *children, **attributes): self.rawsource = rawsource self.math_data = attributes['latex'] self.label = label + self.fontsize = fontsize + self.color = color Element.__init__(self, rawsource, *children, **attributes) @@ -76,10 +84,18 @@ class HandleMath(basenodehandler.NodeHandler, math_node): def gather_elements(self, client, node, style): - return [math_flowable.Math(node.math_data,node.label)] + if not node.fontsize: + node.fontsize=style.fontSize + if not node.color: + node.color=style.textColor.rgb() + return [math_flowable.Math(node.math_data,node.label,node.fontsize,node.color)] def get_text(self, client, node, replaceEnt): - mf = math_flowable.Math(node.math_data) + #get style for current node + sty=client.styles.styleForNode(node) + node_fontsize=sty.fontSize + node_color='#'+sty.textColor.hexval()[2:] + mf = math_flowable.Math(node.math_data,label=node.label,fontsize=node_fontsize,color=node_color) w, h = mf.wrap(0, 0) descent = mf.descent() img = mf.genImage() @@ -88,8 +104,8 @@ img, w, h, -descent) class HandleEq(basenodehandler.NodeHandler, eq_node): - + def get_text(self, client, node, replaceEnt): - return '%s'%(node.label, + return '%s'%(node.label, client.styles.linkColor, node.label) diff -Nru rst2pdf-0.16/rst2pdf/math_flowable.py rst2pdf-0.93/rst2pdf/math_flowable.py --- rst2pdf-0.16/rst2pdf/math_flowable.py 2010-09-07 12:20:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/math_flowable.py 2012-06-21 17:36:19.000000000 +0000 @@ -16,6 +16,9 @@ HAS_MATPLOTLIB = mathtext is not None +if HAS_MATPLOTLIB: + from matplotlib.font_manager import FontProperties + from matplotlib.colors import ColorConverter fonts = {} def enclose(s): @@ -26,9 +29,11 @@ class Math(Flowable): - def __init__(self, s, l=None): + def __init__(self, s, label=None, fontsize=12,color='black'): self.s = s - self.l = l + self.label = label + self.fontsize = fontsize + self.color = color if HAS_MATPLOTLIB: self.parser = mathtext.MathTextParser("Pdf") else: @@ -43,7 +48,7 @@ try: width, height, descent, glyphs, \ rects, used_characters = self.parser.parse( - enclose(self.s), 72) + enclose(self.s), 72, prop=FontProperties(size=self.fontsize)) return width, height except: pass @@ -60,6 +65,7 @@ x = x + _sW elif a not in ('LEFT',TA_LEFT): raise ValueError, "Bad hAlign value "+str(a) + height = 0 if HAS_MATPLOTLIB: global fonts canv.saveState() @@ -67,15 +73,15 @@ try: width, height, descent, glyphs, \ rects, used_characters = self.parser.parse( - enclose(self.s), 72) - if self.l: - log.info('Drawing equation-%s'%self.l) - canv.bookmarkHorizontal('equation-%s'%self.l,0,height) + enclose(self.s), 72, prop=FontProperties(size=self.fontsize)) for ox, oy, fontname, fontsize, num, symbol_name in glyphs: if not fontname in fonts: fonts[fontname] = fontname pdfmetrics.registerFont(TTFont(fontname, fontname)) canv.setFont(fontname, fontsize) + col_conv=ColorConverter() + rgb_color=col_conv.to_rgb(self.color) + canv.setFillColorRGB(rgb_color[0],rgb_color[1],rgb_color[2]) canv.drawString(ox, oy, unichr(num)) canv.setLineWidth(0) @@ -84,20 +90,25 @@ canv.rect(ox, oy+2*height, width, height, fill=1) except: # FIXME: report error - canv.setFillColorRGB(1,0,0) + col_conv=ColorConverter() + rgb_color=col_conv.to_rgb(self.color) + canv.setFillColorRGB(rgb_color[0],rgb_color[1],rgb_color[2]) canv.drawString(0,0,self.s) canv.restoreState() else: canv.saveState() canv.drawString(x, y, self.s) canv.restoreState() + if self.label: + log.info('Drawing equation-%s'%self.label) + canv.bookmarkHorizontal('equation-%s'%self.label,0,height) def descent(self): """Return the descent of this flowable, useful to align it when used inline.""" if HAS_MATPLOTLIB: width, height, descent, glyphs, rects, used_characters = \ - self.parser.parse(enclose(self.s), 72) + self.parser.parse(enclose(self.s), 72, prop=FontProperties(size=self.fontsize)) return descent return 0 @@ -113,19 +124,26 @@ dpi = 72 scale = 10 - import Image - import ImageFont - import ImageDraw - import ImageColor + try: + import Image + import ImageFont + import ImageDraw + import ImageColor + except ImportError: + from PIL import ( + Image, + ImageFont, + ImageDraw, + ImageColor, + ) if not HAS_MATPLOTLIB: - img = Image.new('L', (120, 120), ImageColor.getcolor("black", "L")) + img = Image.new('RGBA', (120, 120), (255,255,255,0)) else: width, height, descent, glyphs,\ rects, used_characters = self.parser.parse( - enclose(self.s), dpi) - img = Image.new('L', (int(width*scale), int(height*scale)), - ImageColor.getcolor("white", "L")) + enclose(self.s), dpi, prop=FontProperties(size=self.fontsize)) + img = Image.new('RGBA', (int(width*scale), int(height*scale)),(255,255,255,0)) draw = ImageDraw.Draw(img) for ox, oy, fontname, fontsize, num, symbol_name in glyphs: font = ImageFont.truetype(fontname, int(fontsize*scale)) @@ -133,15 +151,17 @@ # No, I don't understand why that 4 is there. # As we used to say in the pure math # department, that was a numerical solution. + col_conv=ColorConverter() + fc=col_conv.to_rgb(self.color) + rgb_color=(int(fc[0]*255),int(fc[1]*255),int(fc[2]*255)) draw.text((ox*scale, (height - oy - fontsize + 4)*scale), - unichr(num), font=font) + unichr(num), font=font,fill=rgb_color) for ox, oy, w, h in rects: x1 = ox*scale x2 = x1 + w*scale y1 = (height - oy)*scale y2 = y1 + h*scale - draw.rectangle([x1, y1, x2, y2], - fill=ImageColor.getcolor("black", "L")) + draw.rectangle([x1, y1, x2, y2],(0,0,0)) fh, fn = tempfile.mkstemp(suffix=".png") os.close(fh) diff -Nru rst2pdf-0.16/rst2pdf/nodehandlers.py rst2pdf-0.93/rst2pdf/nodehandlers.py --- rst2pdf-0.16/rst2pdf/nodehandlers.py 2009-12-05 04:09:59.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/nodehandlers.py 2012-02-29 00:07:21.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- # See LICENSE.txt for licensing terms -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/nodehandlers.py $ -#$LastChangedDate: 2009-12-05 01:09:59 -0300 (Sat, 05 Dec 2009) $ -#$LastChangedRevision: 1588 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/nodehandlers.py $ +#$Date: 2012-02-28 21:07:21 -0300 (Tue, 28 Feb 2012) $ +#$Revision: 2443 $ # Import all node handler modules here. # The act of importing them wires them in. diff -Nru rst2pdf-0.16/rst2pdf/opt_imports.py rst2pdf-0.93/rst2pdf/opt_imports.py --- rst2pdf-0.16/rst2pdf/opt_imports.py 2010-03-12 05:43:55.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/opt_imports.py 2012-12-07 09:27:11.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/opt_imports.py $ -#$LastChangedDate: 2010-03-12 02:43:55 -0300 (Fri, 12 Mar 2010) $ -#$LastChangedRevision: 1811 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/opt_imports.py $ +#$Date: 2012-12-07 06:27:11 -0300 (Fri, 07 Dec 2012) $ +#$Revision: 2544 $ # See LICENSE.txt for licensing terms @@ -119,24 +119,8 @@ import gfx return gfx - def _load_svglib(self): - from svglib import svglib - return svglib - - def _load_uniconvertor(self): - for p in sys.path: - d = os.path.join(p, 'uniconvertor') - if os.path.isdir(d): - sys.path.append(d) - from app.io import load - from app.plugins import plugins - import app - from uniconvsaver import save - app.init_lib() - plugins.load_plugin_configuration() - break - else: - raise ImportError - return load, plugins, save + def _load_svg2rlg(self): + import svg2rlg + return svg2rlg LazyImports = LazyImports() diff -Nru rst2pdf-0.16/rst2pdf/pdfbuilder.py rst2pdf-0.93/rst2pdf/pdfbuilder.py --- rst2pdf-0.16/rst2pdf/pdfbuilder.py 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/pdfbuilder.py 2012-07-15 21:56:18.000000000 +0000 @@ -13,28 +13,32 @@ :license: BSD, see LICENSE for details. """ - -import parser +import logging +try: + import parser +except ImportError: + # parser is not available on Jython + parser = None import re import sys +import os from os import path from os.path import abspath, dirname, expanduser, join -import os - +from pprint import pprint +from copy import copy, deepcopy +from xml.sax.saxutils import unescape, escape +from traceback import print_exc from cStringIO import StringIO -from rst2pdf import createpdf +from urlparse import urljoin, urlparse, urlunparse -from rst2pdf import pygments_code_block_directive, oddeven_directive from pygments.lexers import get_lexer_by_name, guess_lexer from docutils import writers from docutils import nodes from docutils import languages -from docutils.languages import get_language from docutils.transforms.parts import Contents from docutils.io import FileOutput import docutils.core -from urlparse import urljoin, urlparse, urlunparse import sphinx from sphinx import addnodes @@ -44,17 +48,12 @@ from sphinx.util import ustrftime, texescape from sphinx.environment import NoUri from sphinx.locale import admonitionlabels, versionlabels - if sphinx.__version__ >= '1.': from sphinx.locale import _ -import rst2pdf.log -import logging -from pprint import pprint -from copy import copy, deepcopy -from xml.sax.saxutils import unescape, escape - -from traceback import print_exc +from rst2pdf import createpdf, pygments_code_block_directive, oddeven_directive +from rst2pdf.log import log +from rst2pdf.languages import get_language_available class PDFBuilder(Builder): @@ -66,19 +65,19 @@ self.document_data = [] def write(self, *ignored): - + self.init_document_data() - + if self.config.pdf_verbosity > 1: - rst2pdf.log.log.setLevel(logging.DEBUG) + log.setLevel(logging.DEBUG) elif self.config.pdf_verbosity > 0: - rst2pdf.log.log.setLevel(logging.INFO) - + log.setLevel(logging.INFO) + for entry in self.document_data: try: docname, targetname, title, author = entry[:4] # Custom options per document - if len(entry)>4 and isinstance(entry[4],dict): + if len(entry)>4 and isinstance(entry[4],dict): opts=entry[4] else: opts={} @@ -86,11 +85,11 @@ self.opts = opts class dummy: extensions=self.config.pdf_extensions - + createpdf.add_extensions(dummy()) - + self.page_template=opts.get('pdf_page_template',self.config.pdf_page_template) - + docwriter = PDFWriter(self, stylesheets=opts.get('pdf_stylesheets',self.config.pdf_stylesheets), language=opts.get('pdf_language',self.config.pdf_language), @@ -111,13 +110,15 @@ use_numbered_links=opts.get('pdf_use_numbered_links',self.config.pdf_use_numbered_links), fit_background_mode=opts.get('pdf_fit_background_mode',self.config.pdf_fit_background_mode), baseurl=opts.get('pdf_baseurl',self.config.pdf_baseurl), + section_header_depth=opts.get('section_header_depth',self.config.section_header_depth), srcdir=self.srcdir, + style_path=opts.get('pdf_style_path', self.config.pdf_style_path), config=self.config, ) - + tgt_file = path.join(self.outdir, targetname + self.out_suffix) destination = FileOutput(destination=open(tgt_file,'wb'), encoding='utf-8') - doctree = self.assemble_doctree(docname,title,author, + doctree = self.assemble_doctree(docname,title,author, appendices=opts.get('pdf_appendices', self.config.pdf_appendices) or []) doctree.settings.author=author doctree.settings.title=title @@ -126,10 +127,10 @@ docwriter.write(doctree, destination) self.info("done") except Exception, e: - rst2pdf.log.log.error(str(e)) + log.error(str(e)) print_exc() self.info(red("FAILED")) - + def init_document_data(self): preliminary_document_data = map(list, self.config.pdf_documents) if not preliminary_document_data: @@ -153,7 +154,7 @@ # FIXME: use the new inline_all_trees from Sphinx. # check how the LaTeX builder does it. - + self.docnames = set([docname]) self.info(darkgreen(docname) + " ", nonl=1) def process_tree(docname, tree): @@ -177,28 +178,18 @@ toctreenode.parent.replace(toctreenode, newnodes) return tree - - tree = self.env.get_doctree(docname) + tree = self.env.get_doctree(docname) tree = process_tree(docname, tree) self.docutils_languages = {} if self.config.language: - lang = self.config.language - try: - self.docutils_languages[lang] = get_language(lang) - except ImportError: - try: - self.docutils_languages[lang] = \ - get_language(lang.split('_', 1)[0]) - except ImportError: - log.warning("Can't load Docutils module \ - for language %s", lang) - langmod = languages.get_language('en') + self.docutils_languages[self.config.language] = \ + get_language_available(self.config.language)[2] if self.opts.get('pdf_use_index',self.config.pdf_use_index): # Add index at the end of the document - - # This is a hack. create_index creates an index from + + # This is a hack. create_index creates an index from # ALL the documents data, not just this one. # So, we preserve a copy, use just what we need, then # restore it. @@ -213,7 +204,7 @@ genindex = self.env.create_index(self) self.env.indexentries=t # EOH (End Of Hack) - + if genindex: # No point in creating empty indexes index_nodes=genindex_nodes(genindex) tree.append(nodes.raw(text='OddPageBreak twoColumn', format='pdf')) @@ -223,7 +214,7 @@ self.domain_indices = [] # html_domain_indices can be False/True or a list of index names indices_config = self.config.pdf_domain_indices - if indices_config: + if indices_config and hasattr(self.env, 'domains'): for domain in self.env.domains.itervalues(): for indexcls in domain.indices: indexname = '%s-%s' % (domain.name, indexcls.name) @@ -248,7 +239,7 @@ # Now this in the HTML builder is passed onto write_domain_indices. # We handle it right here - + for indexname, indexcls, content, collapse in self.domain_indices: indexcontext = dict( indextitle = indexcls.localname, @@ -285,9 +276,9 @@ dt = docutils.core.publish_doctree('\n'.join(output))[1:] dt.insert(0,nodes.raw(text='OddPageBreak twoColumn', format='pdf')) - tree.extend(dt) + tree.extend(dt) + - if appendices: tree.append(nodes.raw(text='OddPageBreak %s'%self.page_template, format='pdf')) self.info() @@ -297,8 +288,8 @@ appendix = self.env.get_doctree(docname) appendix['docname'] = docname tree.append(appendix) - self.info('done') - + self.info('done') + self.info() self.info("resolving references...") #print tree @@ -318,7 +309,7 @@ else: # FIXME: This is from the LaTeX builder and I still don't understand it # well, and doesn't seem to work - + # resolve :ref:s to distant tex files -- we can't add a cross-reference, # but append the document name docname = pendingnode['refdocname'] @@ -345,7 +336,7 @@ # replaced by \token{} in LaTeX return '@token' if docname not in self.docnames: - + # It can be a 'main' document: for doc in self.document_data: if doc[0]==docname: @@ -364,7 +355,7 @@ def get_relative_uri(self, from_, to, typ=None): # ignore source path return self.get_target_uri(to, typ) - + def get_outdated_docs(self): for docname in self.env.found_docs: if docname not in self.env.all_docs: @@ -393,9 +384,9 @@ output.append('.. cssclass:: heading4\n\n%s\n\n'%key) # initial for entryname, (links, subitems) in entries: if links: - output.append('`%s <#%s>`_'%(entryname,nodes.make_id(links[0]))) + output.append('`%s <#%s>`_'%(entryname,nodes.make_id(links[0][1]))) for i,link in enumerate(links[1:]): - output[-1]+=(' `[%s] <#%s>`_ '%(i+1,nodes.make_id(link))) + output[-1]+=(' `[%s] <#%s>`_ '%(i+1,nodes.make_id(link[1]))) output.append('') else: output.append(entryname) @@ -409,7 +400,7 @@ else: output.append(subentryname) output.append('') - + doctree = docutils.core.publish_doctree('\n'.join(output)) return doctree[1] @@ -418,13 +409,13 @@ class PDFContents(Contents): # Mostly copied from Docutils' Contents transformation - + def build_contents(self, node, level=0): level += 1 sections=[] # Replaced this with the for below to make it work for Sphinx # trees. - + #sections = [sect for sect in node if isinstance(sect, nodes.section)] for sect in node: if isinstance(sect,nodes.compound): @@ -489,7 +480,9 @@ toc_depth = 9999, use_numbered_links = False, fit_background_mode = "scale", + section_header_depth = 2, baseurl = urlunparse(['file',os.getcwd()+os.sep,'','','','']), + style_path = None, config = {}): writers.Writer.__init__(self) self.builder = builder @@ -515,11 +508,17 @@ self.toc_depth=toc_depth self.use_numbered_links=use_numbered_links self.fit_background_mode=fit_background_mode + self.section_header_depth=section_header_depth self.baseurl = baseurl if hasattr(sys, 'frozen'): self.PATH = abspath(dirname(sys.executable)) else: self.PATH = abspath(dirname(__file__)) + if style_path: + self.style_path = style_path + else: + self.style_path = [self.srcdir] + supported = ('pdf') config_section = 'pdf writer' @@ -528,25 +527,15 @@ def translate(self): visitor = PDFTranslator(self.document, self.builder) self.document.walkabout(visitor) - self.docutils_languages = {} lang = self.config.language or 'en' - langmod = languages.get_language('en') - try: - langmod = get_language(lang) - except ImportError: - try: - self.docutils_languages[lang] = \ - get_language(lang.split('_', 1)[0]) - except ImportError: - log.warning("Can't load Docutils module "\ - "for language %s", lang) - langmod = languages.get_language('en') - + langmod = get_language_available(lang)[2] + self.docutils_languages = {lang: langmod} + # Generate Contents topic manually if self.use_toc: contents=nodes.topic(classes=['contents']) contents+=nodes.title('') - contents[0]+=nodes.Text( langmod.labels['contents']) + contents[0]+=nodes.Text(langmod.labels['contents']) contents['ids']=['Contents'] pending=nodes.topic() contents.append(pending) @@ -568,7 +557,14 @@ # Find cover template, save it in cover_file def find_cover(name): cover_path=[self.srcdir, os.path.expanduser('~/.rst2pdf'), - os.path.join(self.PATH,'templates')] + os.path.join(self.PATH,'templates')] + + # Add the Sphinx template paths + def add_template_path(path): + return os.path.join(self.srcdir, path) + + cover_path.extend(map(add_template_path, self.config.templates_path)) + cover_file=None for d in cover_path: if os.path.exists(os.path.join(d,name)): @@ -595,13 +591,13 @@ cover_tree = docutils.core.publish_doctree(cover_text) self.document.insert(0, cover_tree) - + sio=StringIO() - + if self.invariant: createpdf.patch_PDFDate() createpdf.patch_digester() - + createpdf.RstToPdf(sphinx=True, stylesheets=self.stylesheets, language=self.__language, @@ -612,13 +608,14 @@ inline_footnotes=self.inline_footnotes, highlightlang=self.highlightlang, splittables=self.splittables, - style_path=[self.srcdir], + style_path=self.style_path, basedir=self.srcdir, def_dpi=self.default_dpi, real_footnotes=self.real_footnotes, numbered_links=self.use_numbered_links, background_fit_mode=self.fit_background_mode, - baseurl=self.baseurl + baseurl=self.baseurl, + section_header_depth=self.section_header_depth ).createPdf(doctree=self.document, output=sio, compressed=self.compressed) @@ -646,11 +643,11 @@ 'title': document.settings.title, } self.highlightlang = builder.config.highlight_language - + def visit_document(self,node): self.curfilestack.append(node.get('docname', '')) self.footnotestack.append('') - + def visit_start_of_file(self,node): self.curfilestack.append(node['docname']) self.footnotestack.append(node['docname']) @@ -658,12 +655,12 @@ def depart_start_of_file(self,node): self.footnotestack.pop() self.curfilestack.pop() - + def visit_highlightlang(self, node): self.highlightlang = node['lang'] self.highlightlinenothreshold = node['linenothreshold'] raise nodes.SkipNode - + def visit_versionmodified(self, node): text = versionlabels[node['type']] % node['version'] if len(node): @@ -674,10 +671,10 @@ replacement+=nodes.Text(text) replacement.extend(node.children) node.parent.replace(node,replacement) - + def depart_versionmodified(self, node): pass - + def visit_literal_block(self, node): if 'code' in node['classes']: #Probably a processed code-block pass @@ -689,7 +686,7 @@ options = { 'linenos': True } else: options = {} - + # FIXME: make tab width configurable content = [c.replace('\t',' ') for c in content] replacement = nodes.literal_block() @@ -706,14 +703,14 @@ state_machine = None, ) node.parent.replace(node,replacement) - + def visit_footnote(self, node): node['backrefs']=[ '%s_%s'%(self.footnotestack[-1],x) for x in node['backrefs']] node['ids']=[ '%s_%s'%(self.footnotestack[-1],x) for x in node['ids']] node.children[0][0]=nodes.Text(str(self.footnotecounter)) for id in node['backrefs']: fnr=self.footnotedict[id] - fnr.children[0]=nodes.Text(str(self.footnotecounter)) + fnr.children[0]=nodes.Text(str(self.footnotecounter)) self.footnotecounter+=1 def visit_footnote_reference(self, node): @@ -723,10 +720,10 @@ def visit_desc_annotation(self, node): pass - + def depart_desc_annotation(self, node): pass - + # This is for graphviz support def visit_graphviz(self, node): # Not neat, but I need to send self to my handlers @@ -734,7 +731,7 @@ def visit_Aanode(self, node): pass - + def depart_Aanode(self, node): pass @@ -795,7 +792,7 @@ return None else: return lang - + def try_parse(src): # Make sure it ends in a newline src += '\n' @@ -821,6 +818,8 @@ # just replace all non-ASCII characters. src = src.encode('ascii', 'replace') + if parser is None: + return True try: parser.suite(src) except SyntaxError, UnicodeEncodeError: @@ -831,10 +830,10 @@ def init_math(app): """ This is a dummy math extension. - + It's a hack, but if you want math in a PDF via pdfbuilder, and don't want to enable pngmath or jsmath, then enable this one. - + :copyright: Copyright 2007-2009 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ @@ -847,8 +846,8 @@ # Sphinx 0.6.3 from sphinx.ext.mathbase import setup as mathbase_setup except ImportError, e: - rst2pdf.log.log.error('Error importing sphinx math extension: %s', e) - + log.error('Error importing sphinx math extension: %s', e) + class MathExtError(SphinxError): category = 'Math extension error' @@ -867,11 +866,12 @@ def setup(app): #Init dummy math extension init_math(app) - + app.add_builder(PDFBuilder) # PDF options app.add_config_value('pdf_documents', [], None) app.add_config_value('pdf_stylesheets', ['sphinx'], None) + app.add_config_value('pdf_style_path', None, None) app.add_config_value('pdf_compressed', False, None) app.add_config_value('pdf_font_path', [], None) app.add_config_value('pdf_language', 'en_US', None) @@ -896,8 +896,9 @@ app.add_config_value('pdf_toc_depth',9999, None) app.add_config_value('pdf_use_numbered_links',False, None) app.add_config_value('pdf_fit_background_mode',"scale", None) + app.add_config_value('section_header_depth',2, None) app.add_config_value('pdf_baseurl', urlunparse(['file',os.getcwd()+os.sep,'','','','']), None) - + author_texescaped = unicode(app.config.copyright)\ .translate(texescape.tex_escape_map) project_doc_texescaped = unicode(app.config.project + ' Documentation')\ diff -Nru rst2pdf-0.16/rst2pdf/pygments_code_block_directive.py rst2pdf-0.93/rst2pdf/pygments_code_block_directive.py --- rst2pdf-0.16/rst2pdf/pygments_code_block_directive.py 2010-08-12 17:25:29.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/pygments_code_block_directive.py 2012-12-08 15:17:31.000000000 +0000 @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/pygments_code_block_directive.py $ -#$LastChangedDate: 2010-08-12 14:25:29 -0300 (Thu, 12 Aug 2010) $ -#$LastChangedRevision: 2290 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/pygments_code_block_directive.py $ +#$Date: 2012-12-08 12:17:31 -0300 (Sat, 08 Dec 2012) $ +#$Revision: 2591 $ # :Author: a Pygments author|contributor; Felix Wiemann; Guenter Milde -# :Date: $Date: 2010-08-12 14:25:29 -0300 (Thu, 12 Aug 2010) $ +# :Date: $Date: 2012-12-08 12:17:31 -0300 (Sat, 08 Dec 2012) $ # :Copyright: This module has been placed in the public domain. # # This is a merge of `Using Pygments in ReST documents`_ from the pygments_ @@ -80,17 +80,20 @@ """ - def __init__(self, code, language): + def __init__(self, code, language, custom_args={}): self.code = code self.language = language + self.custom_args = custom_args def lex(self): # Get lexer for language (use text as fallback) try: if self.language and unicode(self.language).lower() <> 'none': - lexer = get_lexer_by_name(self.language.lower()) + lexer = get_lexer_by_name(self.language.lower(), + **self.custom_args + ) else: - lexer = get_lexer_by_name('text') + lexer = get_lexer_by_name('text', **self.custom_args) except ValueError: log.info("no pygments lexer for %s, using 'text'" \ % self.language) @@ -135,7 +138,11 @@ """Parse and classify content of a code_block.""" if 'include' in options: try: - content = codecs.open(options['include'], 'r', 'utf-8').read().rstrip() + if 'encoding' in options: + encoding = options['encoding'] + else: + encoding = 'utf-8' + content = codecs.open(options['include'], 'r', encoding).read().rstrip() except (IOError, UnicodeError): # no file or problem finding it or reading it log.error('Error reading file: "%s" L %s' % (options['include'], lineno)) content = u'' @@ -157,6 +164,20 @@ if after_index < 0: raise state_machine.reporter.severe('Problem with "start-at" option of "%s" ' 'code-block directive:\nText not found.' % options['start-at']) + # patch mmueller start + # Move the after_index to the beginning of the line with the + # match. + for char in content[after_index:0:-1]: + # codecs always opens binary. This works with '\n', '\r' and + # '\r\n'. We are going backwards, so '\n' is found first + # in '\r\n'. + # Going with .splitlines() seems more appropriate + # but needs a few more changes. + if char == u'\n' or char == u'\r': + break + after_index -= 1 + # patch mmueller end + content = content[after_index:] line_offset = len(content[:after_index].splitlines()) @@ -192,7 +213,12 @@ else: content = u'\n'.join(content) - tabw = int(options.get('tab-width', 8)) + + if 'tabsize' in options: + tabw = options['tabsize'] + else: + tabw = int(options.get('tab-width', 8)) + content = content.replace('\t',' '*tabw) withln = "linenos" in options @@ -211,7 +237,7 @@ code_block += nodes.inline(fstr[1:] % lineno, fstr[1:] % lineno, classes=['linenumber']) # parse content with pygments and add to code_block element - for cls, value in DocutilsInterface(content, language): + for cls, value in DocutilsInterface(content, language, options): if withln and "\n" in value: # Split on the "\n"s values = value.split("\n") @@ -233,6 +259,52 @@ return [code_block] +# Custom argument validators +# -------------------------- +# :: +# +# Move to separated module?? + +def string_list(argument): + """ + Converts a space- or comma-separated list of values into a python list + of strings. + (Directive option conversion function) + Based in positive_int_list of docutils.parsers.rst.directives + """ + if ',' in argument: + entries = argument.split(',') + else: + entries = argument.split() + return entries + +def string_bool(argument): + """ + Converts True, true, False, False in python boolean values + """ + if argument is None: + msg = 'argument required but none supplied; choose from "True" or "False"' + raise ValueError(msg) + + elif argument.lower() == 'true': + return True + elif argument.lower() == 'false': + return False + else: + raise ValueError('"%s" unknown; choose from "True" or "False"' + % argument) + +def csharp_unicodelevel(argument): + return directives.choice(argument, ('none', 'basic', 'full')) + +def lhs_litstyle(argument): + return directives.choice(argument, ('bird', 'latex')) + +def raw_compress(argument): + return directives.choice(argument, ('gz', 'bz2')) + + + # Register Directive # ------------------ @@ -248,6 +320,39 @@ 'linenos': directives.unchanged, 'linenos_offset': directives.unchanged, 'tab-width': directives.unchanged, + # generic + 'stripnl' : string_bool, + 'stripall': string_bool, + 'ensurenl': string_bool, + 'tabsize' : directives.positive_int, + 'encoding': directives.encoding, + # Lua + 'func_name_hightlighting':string_bool, + 'disabled_modules': string_list, + # Python Console + 'python3': string_bool, + # Delphi + 'turbopascal':string_bool, + 'delphi' :string_bool, + 'freepascal': string_bool, + 'units': string_list, + # Modula2 + 'pim' : string_bool, + 'iso' : string_bool, + 'objm2' : string_bool, + 'gm2ext': string_bool, + # CSharp + 'unicodelevel' : csharp_unicodelevel, + # Literate haskell + 'litstyle' : lhs_litstyle, + # Raw + 'compress': raw_compress, + # Rst + 'handlecodeblocks': string_bool, + # Php + 'startinline': string_bool, + 'funcnamehighlighting': string_bool, + 'disabledmodules': string_list, } diff -Nru rst2pdf-0.16/rst2pdf/sphinxnodes.py rst2pdf-0.93/rst2pdf/sphinxnodes.py --- rst2pdf-0.16/rst2pdf/sphinxnodes.py 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/sphinxnodes.py 2012-02-29 00:07:21.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/sphinxnodes.py $ -#$LastChangedDate: 2010-10-06 17:17:48 -0300 (Wed, 06 Oct 2010) $ -#$LastChangedRevision: 2393 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/sphinxnodes.py $ +#$Date: 2012-02-28 21:07:21 -0300 (Tue, 28 Feb 2012) $ +#$Revision: 2443 $ # See LICENSE.txt for licensing terms @@ -162,20 +162,23 @@ # Each child is a hlistcol and represents a column. # Each grandchild is a bullet list that's the contents # of the column - + # Represent it as a N-column, 1-row table, each cell containing # a list. - + cells = [[ client.gather_elements(child, style) for child in node.children]] - t_style=TableStyle(client.styles['hlist'].commands) + t_style=TableStyle(client.styles['hlist'].commands) cw=100./len(node.children) - return [ DelayedTable( cells, + return [ DelayedTable( cells, colWidths=["%s%%"%cw,]*len(cells), style=t_style )] from sphinx.ext import mathbase +class HandleHighlightLang(SphinxHandler, sphinx.addnodes.highlightlang): + pass + class HandleSphinxMath(SphinxHandler, mathbase.math, mathbase.displaymath): def gather_elements(self, client, node, style): mflow=math_flowable.Math(node.get('latex',''),node.get('label',None)) @@ -197,7 +200,7 @@ class HandleSphinxEq(SphinxHandler, mathbase.eqref): def get_text(self, client, node, replaceEnt): - return '%s'%(node['target'], + return '%s'%(node['target'], client.styles.linkColor, node.astext()) graphviz_warn = False @@ -233,7 +236,7 @@ except AttributeError: # Probably the graphviz extension is not enabled pass - + sphinxhandlers = SphinxHandler() diff -Nru rst2pdf-0.16/rst2pdf/styles/styles.style rst2pdf-0.93/rst2pdf/styles/styles.style --- rst2pdf-0.16/rst2pdf/styles/styles.style 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/styles/styles.style 2012-12-14 16:41:35.000000000 +0000 @@ -212,6 +212,10 @@ parent: bodytext alignment: TA_RIGHT + image: + parent: bodytext + alignment: TA_CENTER + figure: parent: bodytext alignment: TA_CENTER diff -Nru rst2pdf-0.16/rst2pdf/styles.py rst2pdf-0.93/rst2pdf/styles.py --- rst2pdf-0.16/rst2pdf/styles.py 2010-09-10 01:21:45.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/styles.py 2012-10-19 18:17:42.000000000 +0000 @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- # See LICENSE.txt for licensing terms -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/styles.py $ -#$LastChangedDate: 2010-09-09 22:21:45 -0300 (Thu, 09 Sep 2010) $ -#$LastChangedRevision: 2336 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/styles.py $ +#$Date: 2012-10-19 15:17:42 -0300 (Fri, 19 Oct 2012) $ +#$Revision: 2531 $ import os import sys @@ -378,7 +378,7 @@ log.error("Unknown font: \"%s\"," "replacing with Helvetica", style[key]) style[key] = "Helvetica" - + #log.info('FontList: %s'%self.embedded) #log.info('FontAlias: %s'%self.fontsAlias) # Get styles from all stylesheets in order @@ -446,7 +446,7 @@ # rare (who would have custom_name and custom-name in the # same stylesheet? ;-) # Issue 339 - + styles2=[] for s in self.styles: if not re.match("^[a-z](-?[a-z0-9]+)*$", s['name']): @@ -519,13 +519,13 @@ self.StyleSheet.add(ParagraphStyle(**s)) - + self.emsize=self['base'].fontSize # Make stdFont the basefont, for Issue 65 reportlab.rl_config.canvas_basefontname = self['base'].fontName # Make stdFont the default font for table cell styles (Issue 65) - reportlab.platypus.tables.CellStyle1.fontname=self['base'].fontName - + reportlab.platypus.tables.CellStyle.fontname=self['base'].fontName + def __getitem__(self, key): @@ -782,10 +782,10 @@ for st in validst[1:]: newst.__dict__.update(st.__dict__) - + newst.name=newname return newst - + def adjustUnits(v, total=None, dpi=300, default_unit='pt', emsize=10): """Takes something like 2cm and returns 2*cm. diff -Nru rst2pdf-0.16/rst2pdf/svgimage.py rst2pdf-0.93/rst2pdf/svgimage.py --- rst2pdf-0.16/rst2pdf/svgimage.py 2010-02-14 19:07:50.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/svgimage.py 2012-12-07 09:27:11.000000000 +0000 @@ -13,7 +13,7 @@ @classmethod def available(self): - if LazyImports.svglib or LazyImports.uniconvertor: + if LazyImports.svg2rlg: return True return False @@ -22,43 +22,23 @@ Flowable.__init__(self) ext = os.path.splitext(filename)[-1] self._kind = kind - # Prefer svglib for SVG, as it works better - if ext in ('.svg', '.svgz') and LazyImports.svglib: - self._mode = 'svglib' - self.doc = LazyImports.svglib.svg2rlg(filename) + # Prefer svg2rlg for SVG, as it works better + if LazyImports.svg2rlg: + self._mode = 'svg2rlg' + self.doc = LazyImports.svg2rlg.svg2rlg(filename) self.imageWidth = width self.imageHeight = height x1, y1, x2, y2 = self.doc.getBounds() - # Actually, svglib's getBounds seems broken. + # Actually, svg2rlg's getBounds seems broken. self._w, self._h = x2, y2 if not self.imageWidth: self.imageWidth = self._w if not self.imageHeight: self.imageHeight = self._h - # Use uniconvertor for the rest - elif LazyImports.uniconvertor: - load, plugins, self.uniconvertor_save = LazyImports.uniconvertor - self._mode = 'uniconvertor' - self.doc = load.load_drawing(filename.encode('utf-8')) - self.saver = plugins.find_export_plugin( - plugins.guess_export_plugin('.pdf')) - self.imageWidth = width - self.imageHeight = height - x1, y1, x2, y2 = self.doc.BoundingRect() - # The abs is to compensate for what appears to be - # a bug in uniconvertor. At least doing it this way - # I get the same values as in inkscape. - # This fixes Issue 236 - self._w, self._h = abs(x2)-abs(x1), abs(y2)-abs(y1) - - if not self.imageWidth: - self.imageWidth = self._w - if not self.imageHeight: - self.imageHeight = self._h else: self._mode = None - log.error("Vector image support not enabled," - " please install svglib and/or uniconvertor.") + log.error("SVG support not enabled," + " please install svg2rlg.") self.__ratio = float(self.imageWidth)/self.imageHeight if kind in ['direct','absolute']: self.drawWidth = width or self.imageWidth @@ -83,24 +63,9 @@ canv.saveState() canv.translate(x, y) canv.scale(self.drawWidth/self._w, self.drawHeight/self._h) - if self._mode == 'uniconvertor': - self.uniconvertor_save(self.doc, open('.ignoreme.pdf', 'w'), - '.ignoreme.pdf', options=dict(pdfgen_canvas=canv)) - os.unlink('.ignoreme.pdf') - elif self._mode == 'svglib': - self.doc._drawOn(canv) + self.doc._drawOn(canv) canv.restoreState() -class VectorImage(SVGImage): - '''A class for non-SVG vector image formats. The main - difference is that it is only available if uniconvertor is installed''' - @classmethod - def available(self): - if LazyImports.uniconvertor: - return True - return False - - if __name__ == "__main__": import sys from reportlab.platypus import SimpleDocTemplate diff -Nru rst2pdf-0.16/rst2pdf/tests/__init__.py rst2pdf-0.93/rst2pdf/tests/__init__.py --- rst2pdf-0.16/rst2pdf/tests/__init__.py 2010-03-15 17:54:40.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# package -from test import regulartest, releasetest, sphinxtest diff -Nru rst2pdf-0.16/rst2pdf/tests/autotest.py rst2pdf-0.93/rst2pdf/tests/autotest.py --- rst2pdf-0.16/rst2pdf/tests/autotest.py 2010-03-30 18:36:25.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/autotest.py 2012-09-02 23:31:30.000000000 +0000 @@ -1,9 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/tests/autotest.py $ -#$LastChangedDate: 2010-03-30 15:36:25 -0300 (Tue, 30 Mar 2010) $ -#$LastChangedRevision: 2074 $ +#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/tests/autotest.py $ +#$LastChangedDate: 2012-09-02 20:31:30 -0300 (Sun, 02 Sep 2012) $ +#$LastChangedRevision: 2528 $ ''' @@ -64,8 +64,7 @@ outdir = os.path.join(rootdir, 'output') md5dir = os.path.join(rootdir, 'md5') - if not os.path.exists(runfile): - raise SystemExit('Use bootstrap.py and buildout to create executable') + assert os.path.exists(runfile), 'Executable not found -- Use bootstrap.py and buildout to create it.' runcmd = [runfile] diff -Nru rst2pdf-0.16/rst2pdf/tests/execmgr.py rst2pdf-0.93/rst2pdf/tests/execmgr.py --- rst2pdf-0.16/rst2pdf/tests/execmgr.py 2010-02-18 17:13:13.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/execmgr.py 2012-03-04 03:01:12.000000000 +0000 @@ -1,9 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/tests/execmgr.py $ -#$LastChangedDate: 2010-02-18 14:13:13 -0300 (Thu, 18 Feb 2010) $ -#$LastChangedRevision: 1705 $ +#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/tests/execmgr.py $ +#$LastChangedDate: 2012-03-04 00:01:12 -0300 (Sun, 04 Mar 2012) $ +#$LastChangedRevision: 2459 $ # See LICENSE.txt for licensing terms diff -Nru rst2pdf-0.16/rst2pdf/tests/input/config.issue390 rst2pdf-0.93/rst2pdf/tests/input/config.issue390 --- rst2pdf-0.16/rst2pdf/tests/input/config.issue390 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/config.issue390 2011-02-21 03:12:11.000000000 +0000 @@ -0,0 +1,8 @@ +# This is an example config file. Modify and place in ~/.rst2pdf/config + +[general] +# A comma-separated list of custom stylesheets. Example: +# stylesheets="fruity.json,a4paper.json,verasans.json" + +stylesheets="a5" + Binary files /tmp/XBquCa6PS4/rst2pdf-0.16/rst2pdf/tests/input/images/rotated.pdf and /tmp/JeJSPGrXz7/rst2pdf-0.93/rst2pdf/tests/input/images/rotated.pdf differ diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/build.bat rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/build.bat --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/build.bat 2010-08-24 04:17:38.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/build.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -sphinx-build -b html source build/html -sphinx-build -b pdf source build/pdf diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/buildpdf.bat rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/buildpdf.bat --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/buildpdf.bat 2010-08-24 04:17:38.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/buildpdf.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -sphinx-build -b pdf source build/pdf diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/conf.py rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/conf.py --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/conf.py 2010-08-24 04:25:32.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/conf.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,261 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Foobar documentation build configuration file, created by -# sphinx-quickstart on Wed Nov 11 10:37:39 2009. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.append(os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.todo', 'sphinx.ext.pngmath','sphinx.ext.graphviz','rst2pdf.pdfbuilder'] -graphviz_output_format = 'png' - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8' - -# The master toctree document. -master_doc = 'rst2pdf-graphviz' - -# General information about the project. -project = u'rst2pdf-graphviz test' -copyright = u'2010 Nobody' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '1.0.0' -# The full version, including alpha/beta/rc tags. -release = '1.0.0 DRAFT' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of documents that shouldn't be included in the build. -#unused_docs = [] - -# List of directories, relative to source directory, that shouldn't be searched -# for source files. -exclude_trees = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_use_modindex = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = '' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'rst2pdf-graphviz' - -# modify html style -# (see http://groups.google.com/group/sphinx-dev/browse_thread/thread/b5f68eab52482f68 ) -html_style = 'local.css' - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('', '', u'rst2pdf-graphviz Documentation', - u'Nobody', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_use_modindex = True - - -# -- Options for PDF output -------------------------------------------------- -#pdf_extensions=['vectorpdf'] - -# Grouping the document tree into PDF files. List of tuples -# (source start file, target name, title, author, options). -# -# If there is more than one author, separate them with \\. -# For example: r'Guido van Rossum\\Fred L. Drake, Jr., editor' -# -# The options element is a dictionary that lets you override -# this config per-document. -# For example, -# ('index', u'MyProject', u'My Project', u'Author Name', -# dict(pdf_compressed = True)) -# would mean that specific document would be compressed -# regardless of the global pdf_compressed setting. -pdf_documents = [ -('rst2pdf-graphviz', u'rst2pdf-graphviz', u'rst2pdf-graphviz Documentation', u'Nobody'), -] -# A comma-separated list of custom stylesheets. Example: -# pdf_stylesheets = ['sphinx','kerning','a4'] -# Create a compressed PDF -# Use True/False or 1/0 -# Example: compressed=True -#pdf_compressed = False -# A colon-separated list of folders to search for fonts. Example: -# pdf_font_path = ['/usr/share/fonts', '/usr/share/texmf-dist/fonts/'] -# Language to be used for hyphenation support -pdf_language = "en_US" -# Mode for literal blocks wider than the frame. Can be -# overflow, shrink or truncate -#pdf_fit_mode = "shrink" -# Section level that forces a break page. -# For example: 1 means top-level sections start in a new page -# 0 means disabled -#pdf_break_level = 0 -# When a section starts in a new page, force it to be 'even', 'odd', -# or just use 'any' -#pdf_breakside = 'any' -# Insert footnotes where they are defined instead of -# at the end. -#pdf_inline_footnotes = True -# verbosity level. 0 1 or 2 -#pdf_verbosity = 0 -# If false, no index is generated. -#pdf_use_index = True -# If false, no modindex is generated. -#pdf_use_modindex = True -# If false, no coverpage is generated. -#pdf_use_coverpage = True -# Documents to append as an appendix to all manuals. -#pdf_appendices = [] -# Enable experimental feature to split table cells. Use it -# if you get "DelayedTable too big" errors -#pdf_splittables = False - -# set tab size -# from http://groups.google.com/group/sphinx-dev/browse_thread/thread/35b8071ffe9a8feb -tab_width = 4 - diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/intro.rst rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/intro.rst --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/intro.rst 2010-08-24 04:25:32.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/intro.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -.. intro - -Introduction --------------------------------------------------------------------- - -blah blah blah - -.. graphviz:: - - digraph g { node [shape=record,height=.08,fontsize=11]; - boing[label = "[A0]\n8|BBB\n8|CCC\n8|DDD\n8|TIMESTAMP\n16"]; - } - -Lorem ipsum etc. \ No newline at end of file diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/rst2pdf-graphviz.rst rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/rst2pdf-graphviz.rst --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue334/rst2pdf-graphviz.rst 2010-08-24 04:25:32.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue334/rst2pdf-graphviz.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -.. rst2pdf-graphviz master file - -.. include:: - -rst2pdf-graphviz (using RST2PDF with Graphviz) ----------------------------------------------- - -blah blah blah - -.. toctree:: - :maxdepth: 2 - :numbered: - - intro - -.. header:: - - ###SectNum### ###Section### - -.. footer:: - - ###Page### - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/Makefile rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/Makefile --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/Makefile 2009-09-01 01:58:12.000000000 +0000 @@ -0,0 +1,94 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf _build/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) _build/html + @echo + @echo "Build finished. The HTML pages are in _build/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) _build/dirhtml + @echo + @echo "Build finished. The HTML pages are in _build/dirhtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) _build/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) _build/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) _build/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in _build/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) _build/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in _build/qthelp, like this:" + @echo "# qcollectiongenerator _build/qthelp/issue158.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile _build/qthelp/issue158.qhc" + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex + @echo + @echo "Build finished; the LaTeX files are in _build/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) _build/changes + @echo + @echo "The overview file is in _build/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) _build/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in _build/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) _build/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in _build/doctest/output.txt." + + +pdf: + $(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) _build/pdf + @echo + @echo "Build finished. The PDF files are in _build/pdf." diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/conf.py rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/conf.py --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/conf.py 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/conf.py 2011-02-21 02:38:46.000000000 +0000 @@ -0,0 +1,230 @@ +# -*- coding: utf-8 -*- +# +# Sphinx markup documentation build configuration file, created by +# sphinx-quickstart on Tue Aug 18 22:54:33 2009. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.append(os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['rst2pdf.pdfbuilder'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'sphinx' +copyright = u'2009, RA' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = 'test' +# The full version, including alpha/beta/rc tags. +release = 'test' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +show_authors = True + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_use_modindex = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'sphinx' + + +# -- Options for LaTeX output -------------------------------------------------- + +# The paper size ('letter' or 'a4'). +#latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +#latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'sphinx.tex', u'sphinx Documentation', u'RA', 'manual'), + ('index2', 'sphinx2.tex', u'sphinx2 Documentation', u'RA', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_use_modindex = True + +# -- Options for PDF output -------------------------------------------------- + +# Grouping the document tree into PDF files. List of tuples +# (source start file, target name, title, author). +pdf_documents = [ + ('index', u'MyProject1', u'My Project', u'Author Name') +] + +# A comma-separated list of custom stylesheets. Example: +pdf_stylesheets = ['sphinx'] + +# Create a compressed PDF +# Use True/False or 1/0 +# Example: compressed=True +#pdf_compressed=False + +# A colon-separated list of folders to search for fonts. Example: +# pdf_font_path=['/usr/share/fonts', '/usr/share/texmf-dist/fonts/'] + +# Language to be used for hyphenation support +pdf_language="en_US" + +# If false, no index is generated. +pdf_use_index = True + +# If false, no modindex is generated. +pdf_use_modindex = True + +# If false, no coverpage is generated. +pdf_use_coverpage = False + +pdf_break_level = 1 + +pdf_verbosity=0 +pdf_invariant = True diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/index.rst rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/index.rst --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/index.rst 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/index.rst 2011-02-21 02:38:46.000000000 +0000 @@ -0,0 +1,16 @@ +:orphan: + +Index 1 + + + +.. glossary:: + + term1 + A term in 1st place + + term2 + A term in 2nd place + +:term:`term1` and :term:`term2` link to the glossary + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/index2.rst rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/index2.rst --- rst2pdf-0.16/rst2pdf/tests/input/sphinx-issue388/index2.rst 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/sphinx-issue388/index2.rst 2011-02-21 02:38:46.000000000 +0000 @@ -0,0 +1,16 @@ +:orphan: + +Index 2 + + + +.. glossary:: + + term3 + A term in 1st place + + term2 + A term in 2nd place + +:term:`term3` and :term:`term2` link to the glossary + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/styled_literal.style rst2pdf-0.93/rst2pdf/tests/input/styled_literal.style --- rst2pdf-0.16/rst2pdf/tests/input/styled_literal.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/styled_literal.style 2012-11-22 14:42:15.000000000 +0000 @@ -0,0 +1,7 @@ +{ + "styles" : { + "literal" : { + "textColor": "green" + } + } +} diff -Nru rst2pdf-0.16/rst2pdf/tests/input/styled_literal.txt rst2pdf-0.93/rst2pdf/tests/input/styled_literal.txt --- rst2pdf-0.16/rst2pdf/tests/input/styled_literal.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/styled_literal.txt 2012-11-22 14:42:15.000000000 +0000 @@ -0,0 +1 @@ +This should be a ``green literal``. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_blockquotes_in_table.txt rst2pdf-0.93/rst2pdf/tests/input/test_blockquotes_in_table.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_blockquotes_in_table.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_blockquotes_in_table.txt 2012-12-14 15:07:06.000000000 +0000 @@ -0,0 +1,223 @@ ++------------------------------------+ +| PMOD B2 | +| | +| ====== ============ ============ | +| Pin Row 1 Row 2 | +| ====== ============ ============ | +| 1 Vb Vb | +| ====== ============ ============ | +| | ++------------------------------------+ + ++------------------------------------+------------------------------------+ +| PMOD B2 | PMOD D2 | +| | | +| ====== ============ ============ | ====== ============ ============ | +| Pin Row 1 Row 2 | Pin Row 1 Row 2 | +| ====== ============ ============ | ====== ============ ============ | +| 1 Vb Vb | 1 Vd Vd | +| ====== ============ ============ | ====== ============ ============ | +| | | ++------------------------------------+------------------------------------+ + ++------------------------------------+------------------------------------+------------------------------------+ +| PMOD B2 | PMOD D2 | PMOD D2 | +| | | | +| ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | +| Pin Row 1 Row 2 | Pin Row 1 Row 2 | Pin Row 1 Row 2 | +| ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | +| 1 Vb Vb | 1 Vd Vd | 1 Vd Vd | +| ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | +| | | | ++------------------------------------+------------------------------------+------------------------------------+ + ++------------------------------------+------------------------------------+------------------------------------+------------------------------------+ +| PMOD B2 | PMOD D2 | PMOD D2 | PMOD D2 | +| | | | | +| ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | +| Pin Row 1 Row 2 | Pin Row 1 Row 2 | Pin Row 1 Row 2 | Pin Row 1 Row 2 | +| ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | +| 1 Vb Vb | 1 Vd Vd | 1 Vd Vd | 1 Vd Vd | +| ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | ====== ============ ============ | +| | | | | ++------------------------------------+------------------------------------+------------------------------------+------------------------------------+ + ++----------------------+ +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| This is not a quote. | +| | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | +| This is a quote. | ++----------------------+ + ++----------------------+----------------------+ +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | +| | | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | ++----------------------+----------------------+ + ++----------------------+----------------------+----------------------+ +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| This is not a quote. | This is not a quote. | This is not a quote. | +| | | | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | +| This is a quote. | This is a quote. | This is a quote. | ++----------------------+----------------------+----------------------+ diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_fancytitles.txt rst2pdf-0.93/rst2pdf/tests/input/test_fancytitles.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_fancytitles.txt 2010-08-09 03:39:43.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_fancytitles.txt 2012-12-18 19:18:51.000000000 +0000 @@ -1,58 +1,10 @@ -==================== -rl_toc demonstration -==================== - -.. contents:: Table of Contents -.. section-numbering:: - - Section 1 ========== -Subsection 1.1 ---------------- - -Subsubsection 1.1.1 -````````````````````` - -Subsubsection 1.1.2 -````````````````````` - -Subsection 1.2 ---------------- - -Subsubsection 1.2.1 -````````````````````` - -Subsubsubsection 1.2.1.1 -~~~~~~~~~~~~~~~~~~~~~~~~~ - +The titles of these sections should be pretty. Section 2 ========== -.. contents:: :local: - -Subsection 2.1 ---------------- - -.. contents:: :local: - -Subsubsection 2.1.1 -````````````````````` - -Subsubsection 2.1.2 -````````````````````` - -Subsection 2.2 ---------------- - -.. contents:: :local: - -Subsubsection 2.2.1 -````````````````````` - -Subsubsubsection 2.2.1.1 -~~~~~~~~~~~~~~~~~~~~~~~~~ - +The titles of these sections should be pretty. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_framebreak.style rst2pdf-0.93/rst2pdf/tests/input/test_framebreak.style --- rst2pdf-0.16/rst2pdf/tests/input/test_framebreak.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_framebreak.style 2010-11-10 02:36:15.000000000 +0000 @@ -0,0 +1,4 @@ +pageSetup: + firstTemplate: twoColumn + margin-left: 1cm + margin-right: 1cm diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_framebreak.txt rst2pdf-0.93/rst2pdf/tests/input/test_framebreak.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_framebreak.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_framebreak.txt 2010-11-10 02:36:15.000000000 +0000 @@ -0,0 +1,19 @@ +This is in page 1, frame 1. + +.. raw:: pdf + + FrameBreak + +This is in page 1, frame 2. + +.. raw:: pdf + + PageBreak + +This is in page 2, frame 1. + +.. raw:: pdf + + FrameBreak 5 + +This is still in page 2, frame 1. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_255_1.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_255_1.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_255_1.txt 2010-02-03 23:26:32.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_255_1.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -.. raw:: pdf - - Spacer 0 21cm - -H1 --- - -Heading -------- - -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. -Some text. - diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_294.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_294.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_294.txt 2010-03-20 19:10:53.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_294.txt 2012-12-08 01:03:10.000000000 +0000 @@ -4,5 +4,5 @@ .. image:: images/biohazard.png :height: 7cm -.. image:: images/dependencias.pdf +.. image:: images/biohazard.pdf :height: 7cm diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_327.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_327.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_327.txt 2010-06-17 09:44:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_327.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -|biohazard| - -.. image:: images/biohazard.png - :width: 50% - -.. |biohazard| image:: images/biohazard.png - :width: 50% diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_374.cli rst2pdf-0.93/rst2pdf/tests/input/test_issue_374.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_374.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_374.cli 2010-11-03 17:06:27.000000000 +0000 @@ -0,0 +1 @@ +-b 1 diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_374.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_374.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_374.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_374.style 2010-11-03 17:06:27.000000000 +0000 @@ -0,0 +1,22 @@ +{"pageSetup": { + "width": "16cm", + "height": "12cm", + "margin-top": "2mm", + "margin-bottom": "0mm", + "margin-left": "2cm", + "margin-right": "1cm", + "margin-gutter": "0cm", + "spacing-header": "2mm", + "spacing-footer": "0mm", + "firstTemplate": "cutePage" + }, + "pageTemplates" : { + "cutePage": { + "frames": [ + ["0", "0", "100%", "100%"] + ], + "showHeader" : true, + "showFooter" : true + } + } +} diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_374.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_374.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_374.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_374.txt 2010-11-03 17:10:14.000000000 +0000 @@ -0,0 +1,42 @@ +.. -*- mode: rst -*- + +h1h1h1 +------ + +h2h2h2h2 +-------- + +:: + + #!-*- coding: utf8 -*- + """Cliente serie para la balanza nc3m""" + + import struct + import serial + import decimal + + def decimal_from_nc3m(nc3m_num): + """Toma un numero en el formato NC3M y lo convierte a decimal""" + nc3m_num = nc3m_num.replace(',', '.') + return decimal.Decimal(nc3m_num) + + def main(): + #definimos el string de formato + fcn = 'c8sc7s2c' + #creamos una conexión serie + ser = serial.Serial('vserial2') + totalizador = 0 + #Adquirimos los datos + while True: + + a = ser.readline() #Leemos una linea del buffer + if len(a) == 19: + stx, neto, status, tara, cr, lf = struct.unpack(fcn, a) + if status == ' ': #Chequeamos que la balanza esté en equilibrio + neto = decimal_from_nc3m(neto) + totalizador += neto + print "Peso Neto: %s Peso Acumulado: %s" % ( neto, totalizador) + + if __name__ == "__main__": + print "Cliente serie para balanza NC3M" + main() diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_378.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_378.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_378.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_378.txt 2010-11-16 12:57:11.000000000 +0000 @@ -0,0 +1,3 @@ +:address: line 1 + line 2 + line 3 (big withespace-> ) diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_379.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_379.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_379.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_379.txt 2010-11-19 12:31:07.000000000 +0000 @@ -0,0 +1,12 @@ +Paragraph 1 + +Paragraph 2 + +Definition 1 + Paragraph 1.1 + + Paragraph 1.2 + + Paragraph 1.3 + + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_383.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_383.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_383.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_383.txt 2011-02-21 11:46:32.000000000 +0000 @@ -0,0 +1 @@ +.. image:: images/biohazard.* diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_390.cli rst2pdf-0.93/rst2pdf/tests/input/test_issue_390.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_390.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_390.cli 2011-02-21 03:12:42.000000000 +0000 @@ -0,0 +1 @@ +--config=config.issue390 diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_390.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_390.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_390.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_390.txt 2011-02-21 03:12:11.000000000 +0000 @@ -0,0 +1,3 @@ +If this page is A5, then Issue 390 is fixed. + +If this page is A4, then Issue 390 is open. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_391.cli rst2pdf-0.93/rst2pdf/tests/input/test_issue_391.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_391.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_391.cli 2011-02-21 12:53:39.000000000 +0000 @@ -0,0 +1 @@ +-b3 --header='###Section###' --section-header-depth=2 diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_391.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_391.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_391.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_391.txt 2011-02-21 12:53:39.000000000 +0000 @@ -0,0 +1,17 @@ +A section +========= + +If there is a page with "a subsubsection" in the header, issue 391 is open. + +A subsection +------------ + +A subsection +------------ + +A subsubsection +~~~~~~~~~~~~~~~ + + +A section +========= diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_394.cli rst2pdf-0.93/rst2pdf/tests/input/test_issue_394.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_394.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_394.cli 2011-02-21 02:57:31.000000000 +0000 @@ -0,0 +1 @@ +--use-floating-images -e inkscape diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_394.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_394.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_394.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_394.txt 2012-05-26 02:36:56.000000000 +0000 @@ -0,0 +1,11 @@ +=== +Foo +=== + +Bar. + +.. image:: images/biohazard.svg + :align: right + :height: 200 + +This is a test. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_394_png.cli rst2pdf-0.93/rst2pdf/tests/input/test_issue_394_png.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_394_png.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_394_png.cli 2012-05-26 02:36:56.000000000 +0000 @@ -0,0 +1 @@ +--use-floating-images diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_394_png.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_394_png.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_394_png.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_394_png.txt 2012-05-26 02:36:56.000000000 +0000 @@ -0,0 +1,10 @@ +=== +Foo +=== + +Bar. + +.. image:: images/biohazard.png + :align: right + +This is a test. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_410.py rst2pdf-0.93/rst2pdf/tests/input/test_issue_410.py --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_410.py 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_410.py 2012-03-04 01:02:38.000000000 +0000 @@ -0,0 +1,4 @@ +def f(): + a = 1 + b = 2 + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_410.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_410.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_410.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_410.txt 2012-03-04 01:02:38.000000000 +0000 @@ -0,0 +1,3 @@ +.. code-block:: python + :include: test_issue_410.py + :start-at: a = 1 diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_419.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_419.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_419.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_419.style 2012-03-04 00:47:55.000000000 +0000 @@ -0,0 +1,19 @@ +styles: + admonition: + # this works + borderPadding: [6,6,6,6] + # but the following do not work + textColor: red + borderRadius: 12 + + myclass: + # here, everything seems to work + parent: normal + spaceBefore: 16 + spaceAfter: 16 + textColor: red + borderPadding: [6,6,6,6] + borderRadius: 12 + backColor: beige + borderColor: darkgray + borderWidth: 0.5 diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_419.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_419.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_419.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_419.txt 2012-03-04 00:47:55.000000000 +0000 @@ -0,0 +1,10 @@ + +.. admonition:: Test + + The textColor and borderRadius from the stylesheet are not applied. + + However, the borderPadding is applied. + +.. class:: myclass + + Here, all styles seem to apply. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_427.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_427.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_427.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_427.txt 2012-03-04 00:28:05.000000000 +0000 @@ -0,0 +1 @@ +This should have a long space here ``-> <-`` diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_452.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_452.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_452.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_452.txt 2012-05-26 01:48:11.000000000 +0000 @@ -0,0 +1,119 @@ +.. class:: dummy + +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item +* Item + +.. class:: dummy2 + +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item +#. Item diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_461.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_461.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_461.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_461.style 2012-12-14 20:25:13.000000000 +0000 @@ -0,0 +1,8 @@ +styles: + custom: + parent: bullet-list + commands: [] + [VALIGN, [ 0, 0 ], [ -1, -1 ], TOP ] + [RIGHTPADDING, [ 0, 0 ], [ 1, -1 ], 0 ] + colWidths: ["200", null] + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_461.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_461.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_461.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_461.txt 2012-12-14 20:25:13.000000000 +0000 @@ -0,0 +1,6 @@ +This bullet list should have a very large left-indent. + +.. class:: custom + +* One item +* Another item diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_463.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_463.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_463.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_463.style 2012-12-07 12:32:46.000000000 +0000 @@ -0,0 +1,19 @@ +pageSetup: + firstTemplate: myLayout + margin-bottom: 8mm + margin-left: 12mm + margin-right: 12mm + margin-top: 8mm + +pageTemplates: + myLayout: + frames: [[0cm, 0cm, 100%, 100%]] + defaultHeader = + Biohazard PDF in the header: |img| + + .. |img| image:: images/biohazard.pdf + :width: 2cm + + showFooter: false + showHeader: true + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_463.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_463.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_463.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_463.txt 2012-12-07 12:32:46.000000000 +0000 @@ -0,0 +1,11 @@ +Hello +===== + + +This is a small test +-------------------- + +lalala + +.. image:: images/biohazard.pdf + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_464.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_464.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_464.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_464.style 2012-12-14 16:18:07.000000000 +0000 @@ -0,0 +1,3 @@ +styles: + mytext: + alignment: TA_RIGHT diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_464.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_464.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_464.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_464.txt 2012-12-14 16:18:07.000000000 +0000 @@ -0,0 +1,4 @@ +.. image:: images/biohazard.png + :class: mytext + +That image should be right-aligned. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_467.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_467.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_467.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_467.txt 2012-12-14 20:20:50.000000000 +0000 @@ -0,0 +1,5 @@ +.. role:: py(code) + :language: python + :class: highlight + +Test inline: :py:`for i in range(5):`. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_468.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_468.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_468.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_468.txt 2012-09-02 14:28:30.000000000 +0000 @@ -0,0 +1,84 @@ +All shown pages should be upright and should have geometric shapes on either side: + +.. image:: images/rotated.pdf#page=1&viewrect=0,0,432,72 + :width: 90% + +.. image:: images/rotated.pdf#page=2&viewrect=0,0,288,72 + :width: 60% + +.. image:: images/rotated.pdf#page=3&viewrect=0,0,432,72 + :width: 90% + +.. image:: images/rotated.pdf#page=4&viewrect=0,0,288,72 + :width: 60% + +All shown pages should be upside down, with no geometric shapes: + +.. image:: images/rotated.pdf#page=3&viewrect=126,216,175,72 + :width: 30% + +.. image:: images/rotated.pdf#page=4&viewrect=54,360,175,72 + :width: 30% + +.. image:: images/rotated.pdf#page=1&viewrect=126,216,175,72 + :width: 30% + +.. image:: images/rotated.pdf#page=2&viewrect=54,360,175,72 + :width: 30% + +.. raw:: pdf + + PageBreak + +Page 1 should be upright: + +.. image:: images/rotated.pdf + :width: 75% + +Page 2 should be upright: + +.. image:: images/rotated.pdf#page=2 + :width: 50% + +.. raw:: pdf + + PageBreak + +Page 3 should be upright: + +.. image:: images/rotated.pdf#page=3 + :width: 75% + +Page 4 should be upright: + +.. image:: images/rotated.pdf#page=4 + :width: 50% + +.. raw:: pdf + + PageBreak + +Page 1 should be upright: + +.. image:: images/rotated.pdf#page=2&rotate=-90 + :width: 75% + +Page 2 should be upright: + +.. image:: images/rotated.pdf#page=2&rotate=0 + :width: 50% + +.. raw:: pdf + + PageBreak + +Page 3 should be upright: + +.. image:: images/rotated.pdf#page=2&rotate=90 + :width: 75% + +Page 4 should be upright: + +.. image:: images/rotated.pdf#page=2&rotate=180 + :width: 50% + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_470.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_470.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_470.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_470.txt 2012-12-07 10:23:01.000000000 +0000 @@ -0,0 +1,15 @@ +Contenido +========= + +.. figure:: images/biohazard.png + :height: 200px + :width: 200px + :scale: 50% + :target: http://www.kde.org + + +Figura 1 +======== + +Esta es la Figura 1 + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_471.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_471.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_471.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_471.style 2012-12-07 18:25:00.000000000 +0000 @@ -0,0 +1,5 @@ + styles: + myclass: + parent: base + fontSize: 50% + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_471.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_471.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_471.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_471.txt 2012-12-07 18:43:25.000000000 +0000 @@ -0,0 +1,15 @@ +This is normal size. + +.. line-block:: + :class: myclass + + This should be + half-size + also this is halfsize + + +.. class:: myclass + +This should also be half-size. + + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_473.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_473.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_473.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_473.txt 2012-12-07 10:28:12.000000000 +0000 @@ -0,0 +1,5 @@ +.. code:: python + + def my_function(): + "just a test" + print 8/2 diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_478.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_478.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_478.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_478.txt 2012-12-14 15:27:00.000000000 +0000 @@ -0,0 +1,10 @@ ++------------------------------------+------------------------------------+------------------------------------+ +| PMOD B2 | PMOD D2 | PMOD D2 | +| | | | +| +----+----+---+ | | | +| | | | | | | | +| +----+----+---+ | | | +| | | | | | | | +| +----+----+---+ | | | +| | | | ++------------------------------------+------------------------------------+------------------------------------+ diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_485.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_485.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_485.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_485.style 2012-12-09 13:09:48.000000000 +0000 @@ -0,0 +1,12 @@ + { + "styles" : [ + ["bodytext" , { + "spaceBefore":0, + "spaceAfter": 0 + }], + ["image" , { + "spaceBefore":12, + "spaceAfter": 18 + }] + ] +} diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_485.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_485.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_485.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_485.txt 2012-12-09 13:09:48.000000000 +0000 @@ -0,0 +1,7 @@ +Paragraph 1 + +.. image:: images/biohazard.jpg + :width: 100% + +Paragraph 2 + diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_485_2.style rst2pdf-0.93/rst2pdf/tests/input/test_issue_485_2.style --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_485_2.style 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_485_2.style 2012-12-09 13:09:48.000000000 +0000 @@ -0,0 +1,23 @@ +{ + "styles" : [ + ["bodytext" , { + "spaceBefore":0, + "spaceAfter": 0 + }], + ["figure" , { + "spaceBefore":12, + "spaceAfter": 18, + "commands": [ + ["BOX", [ 0, 0 ], [ 0, 0 ], 0.5, "#B0B0B8"], + ["TOPPADDING", [ 0, 0 ], [ 0, 0 ], 1 ], + ["BOTTOMPADDING", [ 0, 0 ], [ 0, 0 ], 1 ], + ["LEFTPADDING", [ 0, 0 ], [ 0, 0 ], 1 ], + ["RIGHTPADDING", [ 0, 0 ], [ 0, 0 ], 1 ], + ["TOPPADDING", [ 0, 1 ], [ 0, 1 ], 9 ] + ] + }], + ["figure-caption" , { + "textColor": "#404050" + }] + ] +} diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_issue_485_2.txt rst2pdf-0.93/rst2pdf/tests/input/test_issue_485_2.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_issue_485_2.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_issue_485_2.txt 2012-12-09 13:09:48.000000000 +0000 @@ -0,0 +1,8 @@ +Paragraph 1 + +.. figure:: images/biohazard.jpg + :width: 100% + + Figure 1 + +Paragraph 2 diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_no_raw_html.txt rst2pdf-0.93/rst2pdf/tests/input/test_no_raw_html.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_no_raw_html.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_no_raw_html.txt 2012-03-04 15:59:51.000000000 +0000 @@ -0,0 +1,14 @@ +.. list-table:: + :widths: 50 50 + :header-rows: 1 + + * - **Name** + - **e-mail** + * - Pedro + - .. raw:: html + +

pedro@mailaddress.es

+ * - Dimitri + - .. raw:: html + +

dimitr@mailaddress.es

diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_preprocessor.txt rst2pdf-0.93/rst2pdf/tests/input/test_preprocessor.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_preprocessor.txt 2010-03-27 17:32:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_preprocessor.txt 2010-11-10 03:12:06.000000000 +0000 @@ -21,6 +21,9 @@ Now, we're going to test the single word styling: .. style:: + + foobar: {something: something_else} + singleword: {parent: base, fontSize: 24} SingleWord diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_raw_html.cli rst2pdf-0.93/rst2pdf/tests/input/test_raw_html.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_raw_html.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_raw_html.cli 2012-03-04 15:59:51.000000000 +0000 @@ -0,0 +1 @@ +--raw-html diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_raw_html.txt rst2pdf-0.93/rst2pdf/tests/input/test_raw_html.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_raw_html.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_raw_html.txt 2012-03-04 15:13:52.000000000 +0000 @@ -0,0 +1,14 @@ +.. list-table:: + :widths: 50 50 + :header-rows: 1 + + * - **Name** + - **e-mail** + * - Pedro + - .. raw:: html + +

pedro@mailaddress.es

+ * - Dimitri + - .. raw:: html + +

dimitr@mailaddress.es

diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_sidebar.txt rst2pdf-0.93/rst2pdf/tests/input/test_sidebar.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_sidebar.txt 2008-09-03 21:53:37.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_sidebar.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam condimentum, est a placerat fermentum, lacus nisl eleifend nisl, vel laoreet metus neque id nibh. Morbi elementum leo sed sapien. Aliquam erat volutpat. Praesent mollis sapien et felis. Nulla ultricies odio id elit. Ut non quam eget nulla blandit iaculis. Phasellus convallis tempor enim. Nunc nec arcu. Sed hendrerit congue quam. Nulla fermentum tortor vitae lacus. Pellentesque a ante. Pellentesque sed justo. Proin facilisis mattis pede. Donec augue orci, pellentesque id, suscipit quis, placerat id, purus. - -.. sidebar:: The Sidebar - - This is a real sidebar, declared with the sidebar directive. - -Quisque dignissim. Duis in velit vel augue rhoncus pretium. Duis non nisl in lorem placerat rutrum. Donec dui elit, blandit at, eleifend sagittis, rhoncus quis, orci. Vestibulum rutrum semper turpis. Nam pretium, mauris in varius venenatis, arcu dolor molestie justo, vitae suscipit elit diam eget dui. Phasellus elementum. Vestibulum ligula. Nunc quis enim. Sed eget augue. Maecenas convallis. Nunc pretium leo eget lectus. Ut a urna. Ut vel nunc eget leo vehicula commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - -Nunc nec diam. Phasellus adipiscing orci id arcu. Nulla consequat varius velit. Suspendisse erat risus, feugiat nec, ultricies quis, auctor porttitor, urna. Integer suscipit, purus dignissim cursus iaculis, nibh risus malesuada pede, nec cursus dolor augue eu velit. Aenean mi leo, condimentum quis, auctor quis, scelerisque at, urna. Nullam dapibus facilisis tellus. Ut ullamcorper varius massa. Suspendisse tempus felis sed pede. Sed et dolor vel ante dapibus porttitor. Nunc varius, nisl ut rutrum ullamcorper, ante quam varius tellus, quis semper nisl purus vitae ligula. Mauris sollicitudin neque. Nam faucibus aliquet purus. Donec est odio, fringilla nec, tempor et, fringilla a, ipsum. Donec urna ante, tristique quis, vehicula at, ultrices nec, mi. Suspendisse potenti. Pellentesque orci sem, posuere nec, blandit eu, feugiat eget, risus. - -Nunc erat. Nam non diam id leo rutrum placerat. Vivamus metus dolor, euismod eget, placerat et, auctor et, tellus. Integer eget nisi. Proin blandit. Vestibulum eu ipsum. Suspendisse volutpat malesuada ipsum. Praesent dignissim. Praesent bibendum tincidunt magna. Aenean blandit fermentum ligula. Aliquam eget ipsum quis justo porta fringilla. Suspendisse sit amet augue ac sapien placerat facilisis. Pellentesque venenatis tristique ante. Maecenas magna justo, euismod nec, sollicitudin sed, fringilla vulputate, mi. Nunc scelerisque viverra libero. Donec nec nisl. Etiam aliquet placerat ligula. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae nisl pretium diam egestas faucibus. Fusce rutrum feugiat arcu. - -.. class:: sidebar - -This, on the other hand, is a plain old paragraph declared to be of *class* sidebar with the class directive. Any style with the float -and width properties will do just fine. It's not justified because sidebar inherits normal, not bodytext. - -Sed mi. Integer sit amet ipsum. Vestibulum pulvinar volutpat nisl. Fusce posuere. Vivamus risus diam, auctor et, suscipit vitae, vestibulum quis, sapien. Etiam et purus. Nulla pellentesque. Quisque sed neque. Proin porta, mi ut mattis gravida, nunc nisl vestibulum magna, vitae consequat velit tellus at est. Sed ornare dictum sem. Cras neque odio, porttitor eu, semper in, hendrerit ut, erat. Suspendisse potenti. - -Sed sodales ullamcorper nibh. Vestibulum a arcu nec ligula consequat ullamcorper. Duis eu pede. Donec laoreet gravida ligula. Suspendisse dolor pede, tincidunt sed, ultrices eu, bibendum sed, enim. Donec tellus arcu, malesuada a, tempor vitae, luctus nec, odio. Suspendisse in augue. Suspendisse potenti. Suspendisse potenti. Curabitur venenatis odio vel nisl. Vestibulum sollicitudin erat id nibh. Aenean metus justo, semper non, volutpat et, laoreet non, massa. Morbi semper, mi et rutrum iaculis, nisi orci egestas nisi, in vehicula lectus diam in magna. - -Morbi dolor orci, rutrum eu, fringilla vel, aliquam sit amet, tortor. Maecenas consectetuer consectetuer nibh. Duis eu lacus. Fusce nec lectus nec metus mollis mollis. Fusce mollis, orci at fringilla eleifend, massa massa facilisis nulla, pretium ornare eros nibh ut dolor. Sed pharetra justo. Cras libero. Nulla ut ipsum. Etiam sed neque eget sapien lobortis bibendum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed faucibus nunc sed sem. Curabitur sit amet ligula. Sed porta turpis id augue. Praesent vel tortor eget eros pulvinar fringilla. Aliquam eget erat. Mauris semper, urna quis pellentesque ultrices, nisi sem tincidunt turpis, eu fermentum enim tellus rutrum velit. Integer metus leo, ullamcorper in, posuere vel, elementum at, nulla. - -.. class:: sidebar -.. code-block:: python - - print "You can not float anything using class" - - -Cras at mauris. Morbi mi leo, semper quis, hendrerit nec, mattis in, pede. Aliquam erat volutpat. Aenean adipiscing faucibus odio. Donec tellus augue, dictum ac, dictum non, fermentum eu, nibh. Quisque at nunc ut velit eleifend auctor. Morbi hendrerit, ligula aliquet posuere rutrum, ligula nibh dictum sem, quis convallis pede enim sed elit. Praesent pulvinar eros non odio. Pellentesque odio risus, tincidunt a, pulvinar consequat, pulvinar sit amet, nulla. Donec felis eros, consectetuer a, fermentum eget, fermentum quis, arcu. Morbi ultrices nibh sit amet pede. Quisque vehicula pede at eros. Proin nec sem eu nisl vehicula dapibus. Cras sapien. Suspendisse ac turpis eu est ultrices sollicitudin. In lacinia, tortor sit amet rutrum venenatis, urna risus semper justo, in eleifend ipsum risus lacinia eros. Mauris non enim. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_span_cells.txt rst2pdf-0.93/rst2pdf/tests/input/test_span_cells.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_span_cells.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_span_cells.txt 2012-12-14 16:09:32.000000000 +0000 @@ -0,0 +1,67 @@ ++------------------------------------+------------------------------------+------------------------------------+ +| Row 1 | Row 2 | Row 3 | ++====================================+====================================+====================================+ +| PMOD B2 | PMOD D2 | PMOD F2 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| Pin |Row 1 |Row 2 | Pin |Row 1 |Row 2 | Pin |Row 1 |Row 2 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 1 |Vb |Vb | 1 |Vd |Vd | 1 |Vf |Vf | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 2 |Gnd |Gnd | 2 |Gnd |Gnd | 2 |Gnd |Gnd | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 3 |Gnd |D23 | 3 |Gnd |D47 | 3 |Gnd |D71 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 4 |Gnd |D22 | 4 |Gnd |D46 | 4 |Gnd |D70 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 5 |Gnd |D21 | 5 |Gnd |D45 | 5 |Gnd |D69 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 6 |Gnd |D20 | 6 |Gnd |D44 | 6 |Gnd |D68 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| PMOD B1 | PMOD D1 | PMOD F1 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| Pin |Row 1 |Row 2 | Pin |Row 1 |Row 2 | Pin |Row 1 |Row 2 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 1 |Vb |Vb | 1 |Vd |Vd | 1 |Vf |Vf | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 2 |Gnd |Gnd | 2 |Gnd |Gnd | 2 |Gnd |Gnd | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 3 |Gnd |D19 | 3 |Gnd |D44 | 3 |Gnd |D77 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 4 |Gnd |D18 | 4 |Gnd |D43 | 4 |Gnd |D76 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 5 |Gnd |D17 | 5 |Gnd |D42 | 5 |Gnd |D65 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 6 |Gnd |D16 | 6 |Gnd |D40 | 6 |Gnd |D64 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| PMOD A2 | PMOD C2 | PMOD E2 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| Pin |Row 1 |Row 2 | Pin |Row 1 |Row 2 | Pin Row 1 |Row 2 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 1 |Va |Va | 1 |Vc |Vc | 1 |Ve |Ve | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 2 |Gnd |Gnd | 2 |Gnd |Gnd | 2 |Gnd |Gnd | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 3 |D11 |D15 | 3 |D35 |D39 | 3 |D59 |D63 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 4 |D10 |D14 | 4 |D34 |D38 | 4 |D58 |D62 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 5 |D09 |D13 | 5 |D33 |D37 | 5 |D57 |D61 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 6 |D08 |D12 | 6 |D32 |D36 | 6 |D56 |D60 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| PMOD A1 | PMOD C1 | PMOD E1 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| Pin |Row 1 |Row 2 | Pin |Row 1 |Row 2 | Pin |Row 1 |Row 2 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 1 |Va |Va | 1 |Vc |Vc | 1 |Ve |Ve | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 2 |Gnd |Gnd | 2 |Gnd |Gnd | 2 |Gnd |Gnd | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 3 |D11 |D15 | 3 |D35 |D39 | 3 |D59 |D63 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 4 |D10 |D14 | 4 |D34 |D38 | 4 |D58 |D62 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 5 |D09 |D13 | 5 |D33 |D37 | 5 |D57 |D61 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ +| 6 |D08 |D12 | 6 |D32 |D36 | 6 |D56 |D60 | ++--------+------------+--------------+--------+------------+--------------+--------+------------+--------------+ diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_strip_elements.cli rst2pdf-0.93/rst2pdf/tests/input/test_strip_elements.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_strip_elements.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_strip_elements.cli 2012-12-05 01:14:38.000000000 +0000 @@ -0,0 +1 @@ +--strip-elements-with-class=missing diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_strip_elements.txt rst2pdf-0.93/rst2pdf/tests/input/test_strip_elements.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_strip_elements.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_strip_elements.txt 2012-12-05 01:14:38.000000000 +0000 @@ -0,0 +1,5 @@ +.. class:: missing + +This should not be visible + +This should be the 1st paragraph in the output. diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_stylesheet_includes.style rst2pdf-0.93/rst2pdf/tests/input/test_stylesheet_includes.style --- rst2pdf-0.16/rst2pdf/tests/input/test_stylesheet_includes.style 2010-03-20 23:03:22.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_stylesheet_includes.style 2012-12-13 13:30:22.000000000 +0000 @@ -1 +1 @@ -options: stylesheets: [/home/ralsina/Desktop/proyectos/rst/trunk/rst2pdf/styles/twelvepoint.json, /home/ralsina/Desktop/proyectos/rst/trunk/rst2pdf/styles/twocolumn.json] +options: stylesheets: [twelvepoint, twocolumn] diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_uml_extension.cli rst2pdf-0.93/rst2pdf/tests/input/test_uml_extension.cli --- rst2pdf-0.16/rst2pdf/tests/input/test_uml_extension.cli 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_uml_extension.cli 2012-12-09 00:46:16.000000000 +0000 @@ -0,0 +1 @@ +-e inkscape -e plantuml diff -Nru rst2pdf-0.16/rst2pdf/tests/input/test_uml_extension.txt rst2pdf-0.93/rst2pdf/tests/input/test_uml_extension.txt --- rst2pdf-0.16/rst2pdf/tests/input/test_uml_extension.txt 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/test_uml_extension.txt 2011-06-17 16:17:39.000000000 +0000 @@ -0,0 +1,11 @@ +.. uml:: + :format: svg + + Alice -> Bob: Hi! + Alice <- Bob: How are you? + +.. uml:: + :format: png + + Alice -> Bob: Hi! + Alice <- Bob: How are you? diff -Nru rst2pdf-0.16/rst2pdf/tests/input/titletemplate.svg rst2pdf-0.93/rst2pdf/tests/input/titletemplate.svg --- rst2pdf-0.16/rst2pdf/tests/input/titletemplate.svg 2010-08-09 03:39:43.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/input/titletemplate.svg 2012-12-18 19:18:51.000000000 +0000 @@ -13,7 +13,7 @@ height="100" id="svg2" version="1.1" - inkscape:version="0.47 r22583" + inkscape:version="0.48.3.1 r9886" sodipodi:docname="titletemplate.svg"> @@ -38,10 +38,10 @@ inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" - inkscape:window-width="1440" - inkscape:window-height="852" - inkscape:window-x="-4" - inkscape:window-y="-3" + inkscape:window-width="1600" + inkscape:window-height="876" + inkscape:window-x="0" + inkscape:window-y="24" inkscape:window-maximized="1" /> @@ -51,7 +51,7 @@ image/svg+xml - + @@ -70,5 +70,35 @@ id="tspan2839" x="522.85712" y="1009.5051">TITLEGOESHERE + PRETTY! + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/numbered_links.json rst2pdf-0.93/rst2pdf/tests/md5/numbered_links.json --- rst2pdf-0.16/rst2pdf/tests/md5/numbered_links.json 2010-09-15 14:09:07.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/numbered_links.json 2012-12-07 20:48:36.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '80d98fac64c38665c9f7309eac7a6630', 'acd27fe880468c001e385c021cd0dfee', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/numbered_links_2.json rst2pdf-0.93/rst2pdf/tests/md5/numbered_links_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/numbered_links_2.json 2010-09-15 17:58:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/numbered_links_2.json 2012-12-07 20:48:36.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '09d2e1c8ce047acc91211b809c08c6e2', 'f3e51cf7febfa9d7c57853242f645868', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/source.json rst2pdf-0.93/rst2pdf/tests/md5/source.json --- rst2pdf-0.16/rst2pdf/tests/md5/source.json 2010-01-26 17:15:33.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/source.json 2012-12-07 20:48:36.000000000 +0000 @@ -3,7 +3,9 @@ ] good_md5 = [ + '736ea47c60f30d47824119ddb099d124', '774d9a48df9bb1c893ee6c98e76f2c69', + '8620f076b4e5ab6971897612de6c73f6', 'b7badc40893e917de87d1a14a325ce9b', 'cc0506ba438e726445768d5a9dd8e3e6', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/styled_literal.json rst2pdf-0.93/rst2pdf/tests/md5/styled_literal.json --- rst2pdf-0.16/rst2pdf/tests/md5/styled_literal.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/styled_literal.json 2012-12-07 20:48:36.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + '4a8ee22229dbd04fe36d01cdbe901f45', + 'sentinel' +] + +good_md5 = [ + '979f8ae305dec6a4c9c40d008343ae18', + 'afa33c1a8a168dff4e513c83ca1e374f', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_aafigure.json rst2pdf-0.93/rst2pdf/tests/md5/test_aafigure.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_aafigure.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_aafigure.json 2012-12-07 20:48:36.000000000 +0000 @@ -3,6 +3,8 @@ ] good_md5 = [ + '0f87f776b8f61ee3ebbf69e49ca990c6', + '136639903c59cbddbc25ec36fdeb0c25', '1e4668aa525c6dca2773934da9544448', '1f4c204838f6c7a666aaf426b862993f', '2185f5069ff14aa0e234d7a413379d16', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_aafigure_extra.json rst2pdf-0.93/rst2pdf/tests/md5/test_aafigure_extra.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_aafigure_extra.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_aafigure_extra.json 2012-12-07 20:48:36.000000000 +0000 @@ -8,6 +8,7 @@ good_md5 = [ '1430e87ba0e62c01414ebdde33b9b8fa', '23c99b1070cb2c304277246bf91d41bc', + '28ed393c1f27466ad45e2866a4d75111', '4d9f2e4ba2c22201d261b437c9d4a48e', '5879a651eabb6c6bdbb3a314649d9c6c', 'b525aa7092ebc139a2aee3762002ef05', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_autoembedding_type1.json rst2pdf-0.93/rst2pdf/tests/md5/test_autoembedding_type1.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_autoembedding_type1.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_autoembedding_type1.json 2012-12-07 20:48:36.000000000 +0000 @@ -7,6 +7,7 @@ '68f024d9c7e62966d7ee8d153c717f54', '8abc82b50940b7687980a70dbc8ae31e', 'a8a7fe07c638a01cae97caf3f9ea59f5', + 'b702b8b16ef4012954779515474cef3b', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_autoleading.json rst2pdf-0.93/rst2pdf/tests/md5/test_autoleading.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_autoleading.json 2010-01-26 17:21:51.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_autoleading.json 2012-12-07 20:48:36.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ 'dcf740e0b13a7065b04c8e5c7c251fb4', 'ef55be2e52a50a058a6ea2e1353aba88', + 'f9dd926c2a13b83917863eba70d6e7be', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_background.json rst2pdf-0.93/rst2pdf/tests/md5/test_background.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_background.json 2010-03-09 22:20:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_background.json 2012-12-07 20:48:36.000000000 +0000 @@ -6,6 +6,7 @@ '76581b62441f9d032ad54aa455bc3ce9', '89a8a2cc82dc4729b991a777bf527482', 'b9b18de20db8e7b7a3e50249c4db86ad', + 'dbfc4a607365d67c367f12d8611448ee', 'e68bf373f66f72e2cb3d607d93a54d95', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_background_svg.json rst2pdf-0.93/rst2pdf/tests/md5/test_background_svg.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_background_svg.json 2010-03-25 18:19:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_background_svg.json 2012-12-07 20:48:36.000000000 +0000 @@ -4,13 +4,14 @@ ] good_md5 = [ + '10975d9924c8cbfacd4200914797fd83', + '1318d0ea2e0f24352ff8f5ce95700f4b', '4b2b8759d4e5e9072bd5446f6168206a', '52ae8b10f658beeb79606c0c6e821964', '626d5569fc82828c97a5c9be909f972a', 'cad0e45e8c2a05d3ec2e34f092ccfe9b', 'd6af8349f51b8b94b66cdd5f4d7cf48f', 'e3bc429070c1b3bcb7c00a0e8a517fff', - '10975d9924c8cbfacd4200914797fd83', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_base_url.json rst2pdf-0.93/rst2pdf/tests/md5/test_base_url.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_base_url.json 2010-01-26 17:21:51.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_base_url.json 2012-12-07 20:48:36.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '0c0c27f2b19e02304d9a063766215433', + 'a0fd95063c8906845817ecf5f6ffe814', 'f1652e5d7e1d4ca5151ddd171e62cb0e', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_blockquotes_in_table.json rst2pdf-0.93/rst2pdf/tests/md5/test_blockquotes_in_table.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_blockquotes_in_table.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_blockquotes_in_table.json 2012-12-14 15:07:06.000000000 +0000 @@ -0,0 +1,9 @@ +bad_md5 = [ + 'ebb373f4ec6f019eb9746f5988560c30', + 'sentinel' +] + +good_md5 = [ + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_box_widths.json rst2pdf-0.93/rst2pdf/tests/md5/test_box_widths.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_box_widths.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_box_widths.json 2012-12-07 20:48:36.000000000 +0000 @@ -10,6 +10,7 @@ '6c83b967856738fe3e82d629b6cfbaee', 'a59b82c234ef8c2ce6ccc6f5ede16aaf', 'c61000452057f36b7c56db57d6e02e3b', + 'ecfd8a560ca863bdcb9472494529e4bf', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_bullet_chars.json rst2pdf-0.93/rst2pdf/tests/md5/test_bullet_chars.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_bullet_chars.json 2010-06-22 17:06:50.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_bullet_chars.json 2012-12-07 20:48:36.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '05bee47b328edff14a1d536b17d3e1cf', '0dec77ce92f34d7cce0f9aa00c7dafd8', + '1050994b342f74875f638c046e145a85', '1aad79ad4363401791700f0564412340', '5a481f5b091a497bc66dc61238e2785b', '776f337a14f272e3215661a277d98c8b', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_bullet_widths.json rst2pdf-0.93/rst2pdf/tests/md5/test_bullet_widths.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_bullet_widths.json 2010-06-22 17:08:03.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_bullet_widths.json 2012-12-07 20:48:36.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '00bfef5d100648dffe3e3173678dfcce', + '082b880bc952e0cd6d9d7eda06b6c76e', '1bdf6d00d45b651837997bf16cfdae8b', '2230374b94c266352caa9ef5d24f5c2e', '298ac40c6389eb0c8457757b5d662a10', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_codeblock_tabs.json rst2pdf-0.93/rst2pdf/tests/md5/test_codeblock_tabs.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_codeblock_tabs.json 2010-07-30 19:34:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_codeblock_tabs.json 2012-12-07 20:48:36.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '77dd2ba7bfd71c5c70ea57cd741f8cb1', + 'a143a4ea1913fdac024ab2b50370e97c', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_cover.json rst2pdf-0.93/rst2pdf/tests/md5/test_cover.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_cover.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_cover.json 2012-12-07 20:48:36.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '0bce9a10a543c03209e021d500e289b8', '931a03f18a34680e5e04f54ce5c7bcf5', 'f20ea8c568b42d726c459bf2d502595a', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_cover_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_cover_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_cover_2.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_cover_2.json 2012-12-07 20:48:36.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '40eb4d5011bf1985ca3faf4b911ae19f', + '8af85b3d54925017afeaad05ffd99047', 'b0a40615e57fc1eb736bb98c40f426d9', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_cover_3.json rst2pdf-0.93/rst2pdf/tests/md5/test_cover_3.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_cover_3.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_cover_3.json 2012-12-07 20:48:36.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '36cdf7c484be8d9693710686820857d5', + 'fed4c527d5c0fe321bb19293282c45a9', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_csv_table.json rst2pdf-0.93/rst2pdf/tests/md5/test_csv_table.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_csv_table.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_csv_table.json 2012-12-07 20:48:36.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '37e7160a1d64cc9d922ae78dbe59e9c4', '7c74c8cd6be77543ca95a6bfd4895974', '8bfa11ffc6848be81f9f861f41281aea', 'c907e376be790801e662ac3977eafd75', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_custom_cover.json rst2pdf-0.93/rst2pdf/tests/md5/test_custom_cover.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_custom_cover.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_custom_cover.json 2012-12-07 21:16:48.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '131f55d31062d1b968a2a7d033598c59', '52d0f2cd8f8de07aa6c369b049b7fbc7', 'c6fbece530c545d48cce0bd0d9ff1ddc', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_definition_lists.json rst2pdf-0.93/rst2pdf/tests/md5/test_definition_lists.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_definition_lists.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_definition_lists.json 2012-12-07 21:16:48.000000000 +0000 @@ -5,9 +5,11 @@ good_md5 = [ '0161294dede349cb48d6f88bcd5e2097', '0fb6e926c8ec0772cdfbcc5fafefd3fa', + '220685ed7b08fe23470a918ee5c26fe5', '29cb0cbc275ac40f5a4bedd946060037', '2b8a448419504070c47e0d1fac2e66ee', '4635a5ffd101f5ba6e6a16d04532e762', + '652c24ae444f1c3d669e1b51088f8698', '8348720d44c4dc367d3581293efc4c9b', 'a1af13e4f373badcbc8a8b40dcfc0fb3', 'e26c437ebedba63451775223143dc49e', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_dict_styles.json rst2pdf-0.93/rst2pdf/tests/md5/test_dict_styles.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_dict_styles.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_dict_styles.json 2012-12-07 21:16:48.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '0e0d0a2d819d481083fd58e1b04b2936', '821be9880f2397d1680b740e628c2655', '84b9249b80ca4f5ebdf47f3cc8799312', 'd4281c08a738928d114564038434258f', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_extensions.json rst2pdf-0.93/rst2pdf/tests/md5/test_extensions.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_extensions.json 2009-11-24 20:19:32.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_extensions.json 2012-12-07 21:16:48.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '04d1584992e5a28ac3a1f27174c3daae', '9852870a99307db4145b47ac7db44da9', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_fancytitles.json rst2pdf-0.93/rst2pdf/tests/md5/test_fancytitles.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_fancytitles.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_fancytitles.json 2012-12-18 19:18:51.000000000 +0000 @@ -1,9 +1,11 @@ bad_md5 = [ + '10d67f799b8c8372136274b013034f64', 'f8f99fbb7b687340b1440ab610be382f', 'sentinel' ] good_md5 = [ + '83470d0795d86a50c85337bc3ee015f6', 'a217398fa299ae19259fbcaf41f8e585', 'f1151ed4005455a522620dd156a7e79a', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_field_widths.json rst2pdf-0.93/rst2pdf/tests/md5/test_field_widths.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_field_widths.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_field_widths.json 2012-12-07 21:16:48.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '4d6143e24c974b1c1740fac430b7b413', '5eaedf1d8b3a283455bd7ff028b3ce64', + '994dfee133e55f241695122107f55c82', 'f376ff956950e72aa9155dd4a01cfc9c', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_figure_alignment.json rst2pdf-0.93/rst2pdf/tests/md5/test_figure_alignment.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_figure_alignment.json 2010-06-22 19:29:45.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_figure_alignment.json 2012-12-10 16:34:39.000000000 +0000 @@ -5,6 +5,8 @@ good_md5 = [ '1510b793d36744dfdb035aff6f9c0631', '20286c269b552b258189c14560e46542', + '7fce16d01763b1a25c09154a3d90f000', + 'e72bc35411b8e36b6dd90dc8ab8676da', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_fontsizeunits.json rst2pdf-0.93/rst2pdf/tests/md5/test_fontsizeunits.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_fontsizeunits.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_fontsizeunits.json 2012-12-07 21:37:15.000000000 +0000 @@ -7,6 +7,7 @@ 'bae7424bcfef4cd3c9fb511625f0d0b0', 'c065c537a7de1090068276f8e394fad3', 'c69bceabfff161e959ffac5e21b49383', + 'cd72b071b57d03cba4ebd2bc71a7d197', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_footnotes.json rst2pdf-0.93/rst2pdf/tests/md5/test_footnotes.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_footnotes.json 2010-09-29 02:47:52.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_footnotes.json 2012-12-07 21:37:15.000000000 +0000 @@ -6,6 +6,7 @@ '0484c21aa91bf083176d8c5723c68d75', '0699bd55a93a4fcf0bcc17468f846d6d', '2a010e14dd1423ac91f71b4cb37ff81e', + '3fe3c3d33e144c9927cba5cac91982ed', '6ca5bd26aedeb45aed9e667e6b644af9', 'a09d062deb96cc9d015c6388216b4be2', 'a76b35273c2e2e7f7f9f5f6b2dfd7a79', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_foreground.json rst2pdf-0.93/rst2pdf/tests/md5/test_foreground.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_foreground.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_foreground.json 2012-12-07 21:37:15.000000000 +0000 @@ -7,6 +7,7 @@ '9969f6b5d9c32b433fddd81e1f8cf6e0', 'd3068eaf57ac6501863f14f8cc3e1cbb', 'e99e1ed179a609b1dfcd67dfacaaa3a7', + 'ef4aa12365e1cfc074e2aa862328cd99', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_framebreak.json rst2pdf-0.93/rst2pdf/tests/md5/test_framebreak.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_framebreak.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_framebreak.json 2012-12-07 22:20:43.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '75ecc52fa5a2f6b1160091c8c1ca0fe6', + 'a430ba1c14fd1a7c42efd5af45639d23', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_greek.json rst2pdf-0.93/rst2pdf/tests/md5/test_greek.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_greek.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_greek.json 2012-12-07 22:20:43.000000000 +0000 @@ -3,6 +3,8 @@ ] good_md5 = [ + '0adc3f2438da02ea3cfe089a27b360c1', + '48d910ce8f293b901f887b488c6dcb11', '7017a882c66bf06cb3cd2425fdb4e882', '75976e02b4b5c2adabddb84479204b83', '91938e02f1d23cc2880126481bd3fad7', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_header_footer.json rst2pdf-0.93/rst2pdf/tests/md5/test_header_footer.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_header_footer.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_header_footer.json 2012-12-07 22:20:43.000000000 +0000 @@ -7,6 +7,7 @@ '29328768d8a96114cc321e5a4ba67087', '4540742623e18488fd9a2b94c7420441', 'e3d3cf87d09901be68a60a60a7154e38', + 'fe2eb3cd7015a8791e0a66e83b1f9eb5', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_header_separator.json rst2pdf-0.93/rst2pdf/tests/md5/test_header_separator.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_header_separator.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_header_separator.json 2012-12-07 22:27:40.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '1177959c10c95fe80b078f4313d8f727', '21ed745709bdef4372d1781df414c08a', '25787220282d4f7313cb57febc1d3e48', '3c48430036ab15ab346fb1035c3ea084', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_image_alignment.json rst2pdf-0.93/rst2pdf/tests/md5/test_image_alignment.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_image_alignment.json 2010-03-09 22:20:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_image_alignment.json 2012-12-07 22:27:40.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '288d58f3af99cb9b86865999ef4e5245', '91392c707d3f70c08b7a1645d734decf', + '987e6e368219cb1547ce508021d03a4e', 'a13c45a3058d262fb65480034cb516c3', 'e3c30988d4075d65bbb54a66c7ad857e', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_image_directive.json rst2pdf-0.93/rst2pdf/tests/md5/test_image_directive.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_image_directive.json 2010-03-09 22:20:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_image_directive.json 2012-12-14 00:05:53.000000000 +0000 @@ -1,9 +1,11 @@ bad_md5 = [ + '89ff80edb58a0eb846fe17656dd5ed6d', 'sentinel' ] good_md5 = [ '0df84713a21303821036cd76508872ae', + '5f08008e54aef0c820ab19acc8ebe71b', 'ae5c263652af93adf0c19c9ed96f03d4', 'f4d47d5b0fb3fd8997b396c9ed818188', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_image_units.json rst2pdf-0.93/rst2pdf/tests/md5/test_image_units.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_image_units.json 2010-03-09 22:20:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_image_units.json 2012-12-10 16:34:39.000000000 +0000 @@ -6,6 +6,8 @@ good_md5 = [ '3e033d150a1eccb0c4614963574eab7d', '7d9e14f3ec68afd235da0b3127793619', + '9a4b1d1ee5584a55cb371dabab1716b7', + 'aac5d0de95f97524dd510d5993fe96a4', 'f323c68ec86f855d52a0af5fbde0f0bb', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_image_units_pdf.json rst2pdf-0.93/rst2pdf/tests/md5/test_image_units_pdf.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_image_units_pdf.json 2010-03-09 22:20:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_image_units_pdf.json 2012-12-10 16:34:39.000000000 +0000 @@ -5,6 +5,8 @@ good_md5 = [ '045700a88ebf9e1abc524bce6da9d22f', '133e31468d7fdf7be27c7b78ea4ce0ed', + '28f58af40b24ac0caf9f8364e593aa8e', + '42c2d0088c1ed35f5e9979cf04e6ad4b', '92c3492883329dce432805ab50e680e2', 'c97310bcf8b3d79634829f319839f27b', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_image_units_svg.json rst2pdf-0.93/rst2pdf/tests/md5/test_image_units_svg.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_image_units_svg.json 2010-03-09 13:02:51.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_image_units_svg.json 2012-12-10 16:34:39.000000000 +0000 @@ -6,7 +6,9 @@ good_md5 = [ '20fdffdab5ffc537f36d42ed62be91f3', + '39583387e2ad7f15d183c57cda104aa8', '4b36c02f066717b679c0530f727ce39f', + 'be02db3a8ad03e13f9d4733fdeef5e44', 'c73c0edb829df4c65f1d8521ad5f73d6', 'c7af74120d9211916229264e3099322c', 'fce950bf83a4daab4d2d9422a18d593d', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_img_header.json rst2pdf-0.93/rst2pdf/tests/md5/test_img_header.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_img_header.json 2010-03-09 22:17:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_img_header.json 2012-12-07 22:31:25.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '762c4bd45d25337aaf4036b418741c7d', '8f4cb8f1239b2c55cb149b4838c84261', + '9769a4736c068e318ee85ea13da70263', 'bb07b0e4ab4847a7e8c706f832699685', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_inkscape.json rst2pdf-0.93/rst2pdf/tests/md5/test_inkscape.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_inkscape.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_inkscape.json 2012-12-10 16:34:39.000000000 +0000 @@ -6,6 +6,8 @@ '2f04bbc9cf4badb09e8b8af05271b16d', '684ea23b890f57d1801a87e2be82eccf', '92ecd87547473bf16c166d97b4fcc597', + '93914800fc5b9e1a19ca3c6bd2cfe984', + 'd28530485e5312b734f67be3c3332594', 'd7746bda599559f2596535890db615e5', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_inline_colors.json rst2pdf-0.93/rst2pdf/tests/md5/test_inline_colors.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_inline_colors.json 2010-01-26 17:43:30.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_inline_colors.json 2012-12-07 22:31:25.000000000 +0000 @@ -6,6 +6,7 @@ '6a0cb20f54757fa568dc07c78ee151ba', '78a2bbef427696c63f6eb111da8cc50a', 'a7657a445e82d269ada89eb14471b1c6', + 'e6b1735af84d6c692274d17770ec9cdf', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_inline_image.json rst2pdf-0.93/rst2pdf/tests/md5/test_inline_image.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_inline_image.json 2010-03-09 22:17:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_inline_image.json 2012-12-07 22:31:25.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '389179df0adf18135445fa7f2d70f3db', '4ae33d30d7f6460d888fd8bfecfd8c3b', '5cce67f86b9f3cd21948308ad8babfcc', 'ae080a4b1ca04f7e66c3b76d6218ec38', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_internal_link.json rst2pdf-0.93/rst2pdf/tests/md5/test_internal_link.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_internal_link.json 2010-01-26 17:43:30.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_internal_link.json 2012-12-07 22:31:25.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '5cf04d8f3629a9c66142dd91753399de', 'b2c8019ba476c734254aee1b6c183154', + 'bcaa6a2df94615439bbce72702c5723e', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_103.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_103.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_103.json 2010-01-26 17:43:30.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_103.json 2012-12-10 16:34:39.000000000 +0000 @@ -1,4 +1,5 @@ bad_md5 = [ + '93a84b96a10eb7710badbf383c2b5927', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_104.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_104.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_104.json 2010-03-18 20:51:32.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_104.json 2012-12-07 22:51:31.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '36d9ed47df2cd5683a2a06721c6a8d23', 'e260c4721c03e20aac2b27ceba273277', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_107.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_107.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_107.json 2010-01-26 17:43:30.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_107.json 2012-12-07 22:51:31.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '9d2bfe4d943169d12cca4f96d93a30ab', + 'c168c4480154c1b881501bc6c6607e8b', 'ccac66366dfa45a03217b0505d879c54', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_109.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_109.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_109.json 2010-06-09 21:59:08.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_109.json 2012-12-07 22:51:31.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '9eb226180e88fb8127238ec599244fcf', 'd4b135eb1cc97177964c1804bab9ec53', + 'e44a6dd59968c80acb84a6250bab117d', 'eb8400815962166d6875cab1070a4040', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_110.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_110.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_110.json 2010-08-24 03:53:50.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_110.json 2012-12-07 22:51:31.000000000 +0000 @@ -9,6 +9,7 @@ '40d466a513702099d3105282c0687f68', '4a7dd5266c9478e1dda7acd41c17d463', '6e0bd777033944b0fc469d1097c81ff1', + 'd243a20156bf4f15999acc4550aaa257', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_110_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_110_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_110_2.json 2010-08-24 03:53:50.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_110_2.json 2012-12-07 22:51:31.000000000 +0000 @@ -9,6 +9,7 @@ good_md5 = [ 'a045f367e2cf3586f6349e4cbda62259', 'ce24fbe9eba6293bbb5714b8ee16253c', + 'fea9a97ddcae3b7654d2778f5824c1ef', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_110_3.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_110_3.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_110_3.json 2010-08-24 03:53:50.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_110_3.json 2012-12-07 22:51:31.000000000 +0000 @@ -3,6 +3,7 @@ '0968c0aedb325c148b6b47dd2a8b86ae', '3c9a9e282e3d7a4e3c6793dd8014b478', '60afc0a5e1ce1f170f039b64b9e1533f', + '70645d7dc07f356b868050dda1af87fb', '8754314cca3ec5b30d9997bd61649495', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_112.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_112.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_112.json 2010-06-22 17:08:34.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_112.json 2012-12-07 22:56:06.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '07e143723a29341f32d1732ff327eed3', '6ecd82b7fba8f38e9234da7509642850', + '99703b54036a2a5488d0f0363b7e02d1', 'c83951594d3afcd0b585c9e0b763b5fc', 'db919056677d861a27eba7d9d3879187', 'fe5d3c62afd621b7d0dc7e730c1f5fda', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_113.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_113.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_113.json 2010-03-09 22:16:53.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_113.json 2012-12-07 22:56:06.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '9a143f3210c3e19341c23f45d26829dc', 'ba6a41d047eb9eb4f99b7e644bdef6f8', 'd4242e10b6f39066d90ceb3079f5e1d9', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_114.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_114.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_114.json 2010-01-26 17:56:02.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_114.json 2012-12-07 22:56:06.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '014fca7222dc66e0fe1b7b3a5f291a8a', '1504e20b114d01a4621bf1f71a18685e', + '6295a3ac997735ead25d8c11ccfbc1cf', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_116.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_116.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_116.json 2010-03-09 22:16:53.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_116.json 2012-12-07 22:56:06.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '7074acffffaa59b2c00b4ef452349fc0', '94e4742d9574cde6336e60cdd8b01747', + 'baf409a2a8992ccc77dd976299c416a6', 'cb62dcd2ffa1e3dfb37a261201de8a18', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_117.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_117.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_117.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_117.json 2012-12-07 22:56:06.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '023c18d831df76f1d6d2a360140ab4d4', '3a8c05ae42a7d895665b18b4d941e2f8', + 'cd90867733be6636a216ecbf86afedcb', 'd3b606ad8e206c41c206c58ef7b32292', 'e589bdfe721570c1f39b4137180440be', 'e689d6707d3ec0cd6fa8412381383ca3', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_118.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_118.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_118.json 2010-03-09 22:15:34.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_118.json 2012-12-10 16:34:39.000000000 +0000 @@ -4,6 +4,8 @@ good_md5 = [ '1ef445beabcbe8f08725f652144d8e4a', + '5e154ad0560da3adc55763e1481191b6', + 'cba27cfec6a5066efee1d4c0e8165e22', 'e9e67aab8d333a6fae6f308addd1df3c', 'fc7ca2041d8ce030ee3f6d7e80a948b7', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_118_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_118_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_118_2.json 2010-03-09 22:15:34.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_118_2.json 2012-12-10 16:34:39.000000000 +0000 @@ -3,7 +3,9 @@ ] good_md5 = [ + '81f58c9ccd21690dcd261ddb8c0b25fb', '9c8cfc81d4daf9d6cbf3adc32e15b25f', + 'a3833919d9f85c75d23b7b124d02d2d0', 'dcb0209dea51831018d5b008e4731e05', 'e75a57e6777fd6d1b780a1031d0c9747', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_118_3.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_118_3.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_118_3.json 2010-03-09 22:14:46.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_118_3.json 2012-12-07 22:56:06.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '243c85820fe6014d0eb8941dd28a1aed', '4a63734ccf45d4a6ad618535ef7f2097', '9bd2dc10654392e02beec6359fe57a83', 'bda33c7475770a150926ebd3b5830a4c', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_119.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_119.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_119.json 2010-01-26 18:04:13.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_119.json 2012-12-07 22:58:52.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '14d660a1bd50f6564b07b0295e781004', + '3a51961f8fc1218b0c0356ccc76ad5d8', '5c3241d26ec50c18cdfa749c69ddeb44', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_126.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_126.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_126.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_126.json 2012-12-10 16:34:39.000000000 +0000 @@ -3,12 +3,14 @@ ] good_md5 = [ + '223cd5d2926d45165e2837a16dbd1907', '3493a8bc1e41cc0882d7d043083a94df', '46af66147162c8d10418d1beccd0de59', '820d5609fb877aa9f0afa929f3c5eae7', '9b63ab39bfaa1c04a3b091b1f40e1709', 'ab9d5557661ecda1c458f71ee2b4c240', 'b776c504dfa4303461d7abd8cea559ad', + 'e5de0608ec5379ba181ceae93fd9824c', 'f8fcec8cb96c47485079184495a85992', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_127.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_127.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_127.json 2010-03-09 11:34:16.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_127.json 2012-12-07 22:58:52.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '03b4b9df0b1b0c5d9895ba9c8c44f172', '1ba1b4d8cf599892aa6449a2de13fae8', + '2b862495bda1c7178adad80103582e93', '8173b4e8dce21a5d5b32932f18676a3b', '9294cd8d30fedd2031a71f8ab992f0f5', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_128.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_128.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_128.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_128.json 2012-12-07 22:59:17.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '00d73ca5373c49f9d57bb71ce37a43a7', + '16a2703e3afd8dba13b1fd8250655f96', '22a16751fdbaf3155398367dad62cc81', '62a0103ae98aa9033c63a2170e0c276d', '962414df27ab9749f296289d356df6cb', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_132.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_132.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_132.json 2010-04-14 09:57:33.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_132.json 2012-12-07 23:09:25.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '049ad4dd7a91a3bd7eba184efb3bdecb', '856c1426273d0a51c9c9b9c04b83dc0c', + '945faf051c2137bdbc153c5ce54aa98a', 'cb3a02348ddd601ef84058bbb337c5fb', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_134.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_134.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_134.json 2010-07-27 13:56:55.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_134.json 2012-12-07 23:09:25.000000000 +0000 @@ -6,6 +6,7 @@ '690515f7bd90eed9cb5a8b38f5f43cba', 'a0a9cc5af6b0d858cb920003023fd09d', 'e98eabfa950180160ab59208a900353d', + 'fc504be67858a3e9c15cdeeddf6bca9c', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_137.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_137.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_137.json 2010-07-27 14:04:41.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_137.json 2012-12-07 23:09:25.000000000 +0000 @@ -4,6 +4,8 @@ good_md5 = [ '36c50153b8012a59a3e54141d63bc2c0', + '397c1b3abd1ac53710e941a34c29df25', + '475e97512559dad6ce9052481cb2064d', '9627e6b9eedbb5670f99510c25058758', '9c4149e9cf9c4402c7fd0b943462d283', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_138.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_138.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_138.json 2010-06-22 19:29:45.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_138.json 2012-12-10 16:34:39.000000000 +0000 @@ -8,6 +8,7 @@ '3902e2a572b4950e151851efb2662cc4', 'bd533d8c97ea897b27ed5137f3fd20f7', 'bd723427e3a4b6d691a295970ed80d88', + 'bfd59d8da628e5231514c702ed625988', 'd1cff0c300cce973f21c405655c5e66d', 'ee4222d64e54fb4870153cc0a7b7b064', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_140.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_140.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_140.json 2010-01-26 18:07:17.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_140.json 2012-12-07 23:09:25.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '30b36689a046985e8f94404edbe30b9f', '6194c917a15e6e7af16f6a9168e1bc19', + 'ca8f5932665ba1a554be3059635890cd', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_143.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_143.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_143.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_143.json 2012-12-07 23:10:52.000000000 +0000 @@ -9,6 +9,7 @@ '8dbcc4cd98e689fc187eb262ddd505fe', 'a34e6544375c12ad205636b4dbb6e707', 'a5236c858fd1c50bc67c27bafb27915a', + 'fe77a601ca4bab5a302ada7e64e4a6d6', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_144.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_144.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_144.json 2010-01-26 18:10:03.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_144.json 2012-12-07 23:10:52.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '12d31e21e95cbe533735b2cc05c1d8b5', '3a0d202f90ccae154fbcdf9816ab6871', '53df18d15c64c206f208eca854c221bd', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_146.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_146.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_146.json 2010-08-24 03:53:50.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_146.json 2012-12-07 23:17:06.000000000 +0000 @@ -5,7 +5,9 @@ good_md5 = [ '4aca1eb059d66ca4d2e3afc41647a499', '671c39f916df47ce5eb0c6457a62f992', + '77612c0a1cb2bcfe5d952caf417928a4', 'cb0ef280f0c6580b52ed02569717cf96', + 'dcc6cb5a69e46429e4ee54f7814b9636', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_147.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_147.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_147.json 2010-01-26 18:24:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_147.json 2012-12-07 23:17:06.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '02a6bf7b6695396cc5b2664965a56799', '23b80a94c42a8cf83fa14400d9fc62a4', + '5082962e3508e49eb71fa9af853be34b', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_151.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_151.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_151.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_151.json 2012-12-07 23:17:06.000000000 +0000 @@ -8,6 +8,7 @@ '5eec06c4c3a5669e7a932129fcd1485b', '6c6cd6303610f6f23cee3d9d0559329a', '9398453f2562e8e0aad1d410526e26a5', + 'ea2746162b6626c8f89c63b3e5e7032a', 'fab286d02455d2f701e40976fc616824', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_152.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_152.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_152.json 2010-06-22 17:09:16.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_152.json 2012-12-07 23:17:06.000000000 +0000 @@ -9,6 +9,7 @@ '16b82610b56f8fdbeb7bfa195b665f3f', '3899da02d7fbd37bc86e6be360b3e6b5', '3ac1089af12322f854652a573ac77470', + '3eb62408ea862bf50c486fc145112ab1', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_154.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_154.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_154.json 2010-01-26 18:24:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_154.json 2012-12-07 23:17:06.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '1215fad6197dec644bb3d9aef6f56e29', '739769684e525ca529a3d2462328e0da', 'b6bc4565080ac9b996f62d9b607a9d1d', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_155.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_155.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_155.json 2010-01-26 18:24:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_155.json 2012-12-07 23:17:06.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '40a16aaed53624e306f6ae8641ea0009', 'a8f59a41a30e1c321ba80e649b522950', 'faa483f59d919aad2acc6192ceae65dc', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_156.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_156.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_156.json 2010-01-26 18:24:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_156.json 2012-12-07 23:19:18.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '3ef77d26e5fbdb0c2dfd9e176db325d3', '5cec5e02e1258f8edef0388016843874', + 'c033deaf318e1203ea72dcf62c1d1a5c', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_159.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_159.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_159.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_159.json 2012-12-07 23:19:18.000000000 +0000 @@ -6,6 +6,7 @@ '1a1a9cc71b485b651d5f53e5b966cb46', '5fdff8d8cf5b898f3fc8ed0f35d2b863', '7a406279a393ea343b3a0302f1dd8210', + '7bfa9f5a688b37d1045127bf0421ba6d', 'f490800341cc949419c58db41f98e257', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_165.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_165.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_165.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_165.json 2012-12-07 23:19:18.000000000 +0000 @@ -7,6 +7,7 @@ good_md5 = [ '4826ddc10734ea15d933fd7d2c6c9d9c', '6e4fb7307a3e24a16abed78583a3fdf5', + '7488495e5f5bcc7fbb50c3fca0f170e9', 'b5c79c607fc7b0fd34b7bba994d507f7', 'f4b7288ae61819a2e9ed1128187de17d', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_173.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_173.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_173.json 2010-06-22 17:09:52.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_173.json 2012-12-07 23:19:18.000000000 +0000 @@ -9,6 +9,7 @@ '6a12c89747beabd45f935fedf1cb8d6a', '977795f89fc7c169ccbc65af7a414f77', 'c9efd074973e5a90ba65eae40c06a6a5', + 'de2037d02ba4f21095764369efe1855e', 'ff136c789a8095ce156ac77f881d97d9', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_174.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_174.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_174.json 2010-09-29 02:46:04.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_174.json 2012-12-14 00:39:59.000000000 +0000 @@ -7,7 +7,9 @@ '2c390d27cb8494398dc52b5580fd8bcd', '88a567f00970139de7fab4c78d109a41', '933197be88f351f5906633c4c8c836f6', + '989ac82a86e5d637dbaec81c664c71ae', 'c77116a08458694e81edca15ef174b66', + 'cab8cca1e76c5ee5187ed1e05a7a3d88', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_175.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_175.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_175.json 2010-04-18 13:24:13.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_175.json 2012-12-07 23:35:55.000000000 +0000 @@ -6,6 +6,7 @@ '2af00095a79c75330bf03e189893b618', '4ee7f6d4d89e5e134df2eee6b9cb5f38', '7a735f9b19057be9ef6e3fab9557a195', + 'eab5471ed409ea77a311de2bc1b1b896', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_176.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_176.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_176.json 2010-04-18 13:01:23.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_176.json 2012-12-07 23:35:55.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '4f6cf63092a7ac3ce16758876e824d47', '632f323c40d9d38cdc25189dfe470676', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_180_1.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_180_1.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_180_1.json 2010-06-22 17:10:32.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_180_1.json 2012-12-07 23:35:55.000000000 +0000 @@ -6,6 +6,7 @@ '04c7edb98a1a62cefc30bf5a2e8f24b9', '085b51b8798c9ae1222e69c2ffb12ad8', 'a36bef52bbc4528d92f38f78edd07f30', + 'aa48a5e0ec28ebf3d0699e0d1bcccd8e', 'b70fac7a5ffed5f7ffb03a87e53d8b4e', 'c30255eaeab6997b953de77d99b18a7e', 'd9d363dbd3dfbab050cee1df24012261', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_180_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_180_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_180_2.json 2010-07-27 14:04:41.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_180_2.json 2012-12-07 23:35:55.000000000 +0000 @@ -8,6 +8,7 @@ '6fa984019e6027b5c761555aca76b1a2', '93eb8cbf66f5b5c1f7eb0f34bac3fd17', 'b9d9bd2257cb48f8940737b2026f7848', + 'fa6a393adb9a4fabb6adf200dbc524c6', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_181.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_181.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_181.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_181.json 2012-12-07 23:35:55.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '1b813c1a33ef3af3036832babf21c458', + '327b228c5b852fa25ff079d6398ea793', '5bbce6fe6d290332848278a77f4b0d4b', '634eba6509cebb85c91d417c3653cffc', 'f639f9b09303e4eeba0b153ecf6c5a80', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_186.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_186.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_186.json 2010-06-17 01:58:53.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_186.json 2012-12-10 16:30:05.000000000 +0000 @@ -5,6 +5,8 @@ good_md5 = [ '755defbb91e3c8144bae05cdefcb2965', + '900e4ea1752e975f5c9ddcb4093a1f77', + '9805f5079c3820d6ba5f3cc52a4ea3d6', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_186_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_186_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_186_2.json 2010-06-17 09:07:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_186_2.json 2012-12-07 23:39:11.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '3c97bc4d312dbf72b1624252d976a34c', '9a9ceeb47007fbcb8551218736122484', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_186_3.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_186_3.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_186_3.json 2010-06-17 09:27:37.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_186_3.json 2012-12-07 23:39:11.000000000 +0000 @@ -5,6 +5,7 @@ ] good_md5 = [ + '469bfe3670fe4333d327f08f304df4c4', '627f4d9d623dbe1c42d7e0494c88aadd', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_196.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_196.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_196.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_196.json 2012-12-07 23:39:11.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '07a3aa3d18bb535bf1f9d2ca564dbc85', '3bed062208af9bcc17af4526b22f7260', '786be0464284e2b7ea635ba1bac3bf16', 'ba8b8b13fd503098248ddc98ebca06a3', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_197.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_197.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_197.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_197.json 2012-12-07 23:39:11.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '25bd695d6a7e854a86a192aa0e574d76', '37f10d42145c578c0469e1fc9a27d975', + 'd05f40c1d97a162abccaa1e90a7a7fa1', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_199.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_199.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_199.json 2010-03-09 11:42:31.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_199.json 2012-12-07 23:39:11.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '0aef27a6511f43b92c8e1be897b5eaf1', '35be04ff624aba62cf0d6900d06f9953', + 'd31825585637997885f58eef0706831d', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_200.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_200.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_200.json 2010-01-26 18:46:39.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_200.json 2012-12-08 00:12:09.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '18ddbd8353ea04f947106d89a59a1f7c', + '9cc91fc48f782763b0d6a00823b2cff8', 'ee08842d292d53f117fe141a1d5e77b3', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_201.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_201.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_201.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_201.json 2012-12-08 00:12:09.000000000 +0000 @@ -2,6 +2,7 @@ '15eed31308ca9bbbef564ead7a1feed4', '4fbb0b1e8b576883032e5e9e2345d52f', 'cc6f7895da2ff551cd52cd6d8730bd68', + 'cfc632a2f930f9a2c733a68ce7090bda', 'f7944cf84f20e83716f879540057d62d', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_202.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_202.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_202.json 2010-01-26 18:47:56.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_202.json 2012-12-08 00:12:09.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '02f3caa125384eb2909e91fa5237a35d', '0e9e5d9038bfb55bac63729c5884f751', '9852870a99307db4145b47ac7db44da9', 'd4e1ecf7fe56d4db28daf56d532a3c75', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_203.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_203.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_203.json 2010-09-29 02:45:21.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_203.json 2012-12-08 00:12:09.000000000 +0000 @@ -8,6 +8,7 @@ '79482248495266034f559b185a7c1659', '86265dd392275188e16ba977799ec851', 'a4fb0e3cfcb59b85c746070576a4b681', + 'a8f83e2a5b0f3f21bf400cb4a4ee6090', 'bff5329dde2580bb298206a6285a405e', 'c403ea8fa469f501ddc11389efeb5914', 'ed01ac0a96093c2a958815bf2b67b3f5', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_216.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_216.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_216.json 2010-06-09 21:59:08.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_216.json 2012-12-08 00:25:27.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '3af37bf2cfc8e5250e5820aa2c96be43', '7d852245b2f1500a310443039b9c2f43', + '93e83c5ff3fd80688383171e007f7397', 'a0c94c7490e3eccd41f8674b876247d8', 'e67de09f228504067ff9aa81ad0c2c04', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_217.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_217.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_217.json 2010-06-22 16:57:40.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_217.json 2012-12-08 00:25:27.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '0af411654a4f15562d166e132c7bd6a8', + '274d2e161c2a581e50259b175a0e8e05', '4ec1d465e8fef6eefbbb3c71a36adc83', '66abe52b70d608911b68d98b5ef21a27', 'a81bd63861cead837fad82e2a20fe09c', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_223.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_223.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_223.json 2010-01-26 18:50:28.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_223.json 2012-12-08 00:25:27.000000000 +0000 @@ -5,6 +5,8 @@ good_md5 = [ '1226fac7a7628e201daebd852e2b6365', '47a95c48b483ef04c5725a5cf69ff440', + '7d0ef854c2c813ae2f6bd15daca4c2c7', + 'a86b017d3149ce53d0061694b2e5c7d8', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_224.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_224.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_224.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_224.json 2012-12-08 00:25:27.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '4d626c7aa1872bbc12f213faa1212a0c', + '88c29fa2b7ce095c72742229db0fbc2c', 'a547f7f3342d0b42494676574c111ed3', 'e0568f215441fb0da026d54508198dd0', 'f52050dcfcb74ed1655869875365edcf', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_225.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_225.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_225.json 2010-03-09 11:49:22.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_225.json 2012-12-08 00:25:27.000000000 +0000 @@ -6,6 +6,7 @@ 'a3503431a35d3f6c77ab6fdc4943aa16', 'a748736538a26cabbd8812a631a97446', 'dc61dc468ab6eb584d22587598c35e3e', + 'ed08011b6af5d3aa1a34fd13c7d1aade', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_226.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_226.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_226.json 2010-01-26 18:53:25.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_226.json 2012-12-08 00:25:27.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '4bbe5f77b5210c9f1507958ee2370e9f', '75ae7e0265117a292b485c86519ae90f', + 'a4b2355ff987d03da3094d7f047559bd', 'de45957a2b29b5c6443730baa5f87adf', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_227.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_227.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_227.json 2010-01-26 18:55:43.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_227.json 2012-12-08 00:25:27.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '0ee92fb35a4091e9aeef408739db9c1f', + '5430c3cb69467fcbab7900659ed9bafb', '8490204bb232415f21a8242463f8d004', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_230.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_230.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_230.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_230.json 2012-12-08 00:25:27.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '176af4b979454917bece9b29966fa659', '2ec94191e967289646e1d2fe729b1707', '549137921592924cb7f254e4ab07b93e', '6f67747fcf8fedf8ac761da73af115dd', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_231.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_231.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_231.json 2010-03-18 13:08:29.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_231.json 2012-12-08 00:25:27.000000000 +0000 @@ -6,6 +6,7 @@ ] good_md5 = [ + '02d182fd3f0681c2d6407bc28595d388', '6216a091cf744aed49f21484816b725e', 'b5cec31528deb328b4fe279fb19474bd', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_232.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_232.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_232.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_232.json 2012-12-08 00:25:27.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '86af07a5e4eae44e6686a5f2e6c92bc1', + 'acb0ce9e3922b6e8e18f4d64e91b3a3a', 'f489baa4d057022fb30efb42074b6903', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_234.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_234.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_234.json 2010-03-09 22:12:34.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_234.json 2012-12-08 00:25:27.000000000 +0000 @@ -7,6 +7,7 @@ '0ba566afc6ad5a06f42ca527c756831c', '178df0402c6696c85045110d07464e2b', '797ec0c417a91abbe07d08a3ead4b0c7', + 'a51b3f03d3f96e1f02a7203b96ef4c8b', 'd419cbfc9bce59307058a3a015b52f95', 'dc4b7a4e8fdb88ee48f828d7145efb01', 'f0367b2eaf6cbe7f002e665c0226342b', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_238.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_238.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_238.json 2010-03-09 13:03:47.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_238.json 2012-12-08 00:25:27.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '150f68d9835542d22b1f512dc77674aa', + '65dd859ff35e2db5cf2ed0a28ee64b5d', '7f71d1b4222b997ae2d021e827fe8377', '92abca15ff654c5663ccc33b4b3d9bae', '94a238d7f0d6154059ef7628929b39bb', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_239_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_239_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_239_2.json 2010-03-16 22:28:43.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_239_2.json 2012-12-08 00:25:27.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '1bc00cf68b98e469afd7a12f1e7b157f', 'e28c84694ed5cbf8fda591e1b32c7a90', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_241.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_241.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_241.json 2010-01-26 19:04:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_241.json 2012-12-08 00:25:27.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '458f8c98f114748bc1270953349cf985', '4b6d87cf9edbbd7cb4ac50173420b06b', + '88f4fee433491fe62d82538cf36e8df7', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_243.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_243.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_243.json 2010-06-22 17:13:02.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_243.json 2012-12-08 00:25:27.000000000 +0000 @@ -9,6 +9,7 @@ '864be543dfd293ec3b6499d47d841915', 'bd18e3abd5530025483732998268937a', 'c2e0025b93ddc2fcbc1286cda1514e68', + 'f7995bf2dd7dd36725159f2a22bcbbfa', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_248.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_248.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_248.json 2010-06-22 17:13:41.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_248.json 2012-12-08 00:31:19.000000000 +0000 @@ -10,6 +10,7 @@ '40d74f89f108d2c8dc13ea75bc99d141', '4c6223023d83e7c57d8295fe1c4919a5', '75638ff8450b46aed9f824a79d1b63c5', + 'db553546515bc46a50873373cc71e3cb', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_249.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_249.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_249.json 2010-03-09 22:08:29.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_249.json 2012-12-08 00:31:19.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '1df2217b3a5d96f5aa64c72c1bf30259', '701364fd46b7867bcfec430342494e1e', '75a23f7b550a98b704ce809f7028e2e5', 'f626af3f18d4d08b508efb7bc0c6f6ed', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_255_1.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_255_1.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_255_1.json 2010-03-17 15:56:06.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_255_1.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -bad_md5 = [ - 'sentinel' -] - -good_md5 = [ - '008bfaae4d410ddf0d845620dc8a3600', - 'sentinel' -] - diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_261.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_261.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_261.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_261.json 2012-12-08 00:31:19.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '191c2dae00a7e85b38f332e7122f1e44', '1c9f498ef9484acbca580ef64b93fe6a', '1d4c1f4bd62929acf9d0ec131508ad62', '35190722b2e72565489144ae9647e87a', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_261_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_261_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_261_2.json 2010-06-22 17:15:10.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_261_2.json 2012-12-08 00:31:19.000000000 +0000 @@ -6,6 +6,7 @@ '04096f2d46badb64403007ddd950dfcf', '0a47c62c09bd0aede42e64ba2e8a2512', '29a0ac64b28969b282e7bf5a1ec1eb13', + '3f73a6f2e1af7e8f89bc0615ace0dd6d', '6fa69968ea81f53058fc1bf0fae050b6', 'c4158ecfa8bfea0b45f4d8554e963334', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_263.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_263.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_263.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_263.json 2012-12-14 00:39:59.000000000 +0000 @@ -6,9 +6,11 @@ '53d20c7f65e1cd5e5aba2d63ab872db4', '90c0618e4d438d4af73b03d71719da58', '9182bcf92b185906baf62918c213d1f6', + '9db2a49650df71c8cee741f573c053fa', 'b34d82916857eeed34756fa1229ff847', 'da84666f9b9f33f5bd7fd4b49c6b4ce8', 'dda00d7c498627e3f0b110bdb458ee57', + 'e05dbedcdc679fb8ecbe500755b81570', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_264.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_264.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_264.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_264.json 2012-12-08 00:36:26.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '404937b03fa7f02eaf20ebd4cece2fb0', + '4e403219843e3fd71ea073e00474d096', '76affdcff4b7481c06147b22d8d9cfee', '851882559c891ea599e7d29c0f2454f4', '9b940ccd6f7003973e6f54fbad932913', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_265.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_265.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_265.json 2010-06-22 20:37:33.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_265.json 2012-12-10 16:30:05.000000000 +0000 @@ -12,7 +12,9 @@ '6a1a787381924a233bdb987a44dc4c73', '6cee0f5d20bff477e5c27f19a0eff85b', '8cb54b94ab0ecb9d3fa676381e079478', + '9b2c1126a47a72a37316fd75c5022bc1', 'a2c3ebd88b734605b34166e3935c7fcc', + 'd4a36d2937c1a7687c10da5465899b57', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_265_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_265_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_265_2.json 2010-06-22 20:37:33.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_265_2.json 2012-12-10 16:30:05.000000000 +0000 @@ -10,6 +10,8 @@ '654affc9fa40733b65c15b6b4a360e46', '6a1a787381924a233bdb987a44dc4c73', '6cee0f5d20bff477e5c27f19a0eff85b', + '9b2c1126a47a72a37316fd75c5022bc1', + 'd4a36d2937c1a7687c10da5465899b57', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266.json 2012-12-10 16:30:05.000000000 +0000 @@ -7,10 +7,12 @@ good_md5 = [ '527ad8477b8d4b732342410c96f24b53', + '5e067d2e1c591ba5d4647521d4e5a993', '86ce287a0d4e33b65e28bcff8a615418', 'ba387c0b99acfd7899462e7d9768437e', 'ec6324d53d5cf6a9c473155e25409771', 'f2e9b7d93a81692a16b7040df5e76e02', + 'f59711a126224a503705bc05f1d46ff0', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266_2.json 2010-03-25 18:13:01.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266_2.json 2012-12-10 16:30:05.000000000 +0000 @@ -4,10 +4,12 @@ ] good_md5 = [ + '0a449d7b79a95b44328d90d7af47962b', '0cc582e2a2d8017e16f22cd6135c9e79', + '5aded4b403b6e8156f12ec9abc0c318b', + '778799a52e13a4f77106c6b45a97b6b8', '94e089113d8102122fcc1bbbd4cf8a99', '989f1fcca06a9041486947a640b9c820', - '0a449d7b79a95b44328d90d7af47962b', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266_3.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266_3.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266_3.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266_3.json 2012-12-10 16:30:05.000000000 +0000 @@ -7,6 +7,8 @@ '0b921e5a9ed301a596b7e50d9371547c', '2a2f90cfcb2ac306691f23de318d17d5', '4e819076233fdf7e062ca751164790b3', + '5841d2d09cdb18d006350a4ed9cc1fe7', + '5ede36b85dcffe5ba32cd7b2b227ea68', '67bc8632435455c3e0ba6bb3de81b97d', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266_4.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266_4.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_266_4.json 2010-06-22 20:37:33.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_266_4.json 2012-12-10 16:30:05.000000000 +0000 @@ -5,11 +5,13 @@ good_md5 = [ '05a71e5f686277c73dc2f58fb54bd387', + '24fdf0d2bdf01b5b49c62e3b289136b9', '48ae7686da917c1efb755eeba6fb4aa8', '502a1f854a56dd8c386d50ad0fdab9a3', '5c32ea260e4000fbad9d524cae70b09f', '6434f82c5f405e3aee823ff456e61815', '9afe656b0c294b464970487c08ea050b', + 'a851a9c9babb32baab9f6c7ddc8b8e98', 'ca83e4c62df55a220e9ebae9bd3b5741', 'fd3e823126ca47bba7d950ea55b31bda', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_267.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_267.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_267.json 2010-06-22 20:40:30.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_267.json 2012-12-10 16:30:05.000000000 +0000 @@ -6,8 +6,10 @@ good_md5 = [ '2432d63f22747221c4521754eed93ada', '829afc6b5fa7bd0e249ff44be96c012c', + '83404fdd5514e6dbb99cb5ed5903566c', '836de4efeda19a56cb92b73dc799bc63', '8be28e747843d6f9cfdedf75c1f3b8ef', + 'bfe502771519d6bc2a4aabcc28f4d7cb', 'e4f9a0be27642bd3cba8eb9604ef254e', 'fc67862a4b9bb870bb4dad8b6cea31f7', 'fee5fdfc0969d31f71883c89e4fd5c93', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_274.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_274.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_274.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_274.json 2012-12-08 00:38:14.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '037f545929b9c2c711ad60fac2c7131b', '0d3d827e9588281ae992b1544e091c51', '16caf6cfa1475852f024f3cec3c1fc08', '5259a73c4323f099ce387871c2ecf982', @@ -15,3 +16,8 @@ 'sentinel' ] +incomplete_md5 = [ + '73a4f2a6b5938118299c3b19ea223987', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_274_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_274_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_274_2.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_274_2.json 2012-12-08 00:38:14.000000000 +0000 @@ -10,6 +10,12 @@ '693010eabe77a83afbfab2c915ed6b7d', '701d4a63644443fd411687aac87fbb8a', 'cbc604bea61a367290b6fb035e3ef1b4', + 'f97a22207e8b86529727301ef1ab67e4', + 'sentinel' +] + +incomplete_md5 = [ + '897b494a52f27e5ce848d4eb8507ac55', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_277.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_277.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_277.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_277.json 2012-12-08 00:46:08.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '0468e9d2b8aa511acda37dfdcb8aaf15', '782bdf60beac9f042e53098fc747d343', + 'b3b8e3f5d49552e8c7ac18974664a994', 'c51e93430ab94d832aa2af9f38b5d4ac', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_277_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_277_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_277_2.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_277_2.json 2012-12-08 00:46:08.000000000 +0000 @@ -6,6 +6,7 @@ '5c8d66737e4df738be102c7a761b1c2a', '71b8492c1d20e22982565f04c11c2f15', 'b1b7e58f486ee167e297318d8630bfd2', + 'd56f2beb38ed7c653b50f2c738fefe2d', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_286.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_286.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_286.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_286.json 2012-12-08 00:46:08.000000000 +0000 @@ -1,7 +1,9 @@ bad_md5 = [ + '0a1cdc3f7affcb77d1a39b3bee24da1d', '0d96a396e61c64b0dfd6b921b0f2ef27', '13b7a7e16089df651e5a0545d8c90197', '8d8cbb04dce466bd1552c2e966453d54', + '985e67183617a4b8d0f7152748d9936f', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_288.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_288.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_288.json 2010-09-29 02:39:06.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_288.json 2012-12-08 00:46:08.000000000 +0000 @@ -7,7 +7,9 @@ '4e9e206a8128cb656099f6c71750e58b', '62961454151470e946767a0d63e3929d', '7954b2fc03e05cb0d6cae4c69cbc3c91', + '8c6f40c6f9a0e32897ffd890885b8921', '8e23d10ce90c4b6e39346ceae22c8dfd', + '9297c6435de30930f44ae694b6870a9e', 'da46306fb9c7485bac97334b6a281cb0', 'feb17996ac96c6d342705e53d5afef56', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_289.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_289.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_289.json 2010-06-22 18:02:28.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_289.json 2012-12-08 00:46:08.000000000 +0000 @@ -8,6 +8,7 @@ '37789edc624e427082a2a85130d39dfc', '43da9cf7c4985789b9981c009e1390f1', '7624ca9c3ab73a4adcb56adc49cb97de', + 'c2530919040693a6c90c143195589c0e', 'e41823398a0a5088f41110ffe0742465', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_290.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_290.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_290.json 2010-03-18 13:48:19.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_290.json 2012-12-08 01:04:33.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '8ecc87eaecb29913c6ae8bdab50bc606', + 'eb42d04af9af18595fea3fa4c2e4dfc2', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_291.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_291.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_291.json 2010-03-20 12:40:29.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_291.json 2012-12-08 01:04:33.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '3e43db50600869aaf8f49f22f8bde5b7', + 'd6f73a14eb2af2d0d0163b8fc591d219', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_292.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_292.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_292.json 2010-03-22 22:47:36.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_292.json 2012-12-08 01:04:33.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '0220442d05c234cb1b421ebfad0f7fd5', + '64790a3a3d4b0e9b26560455e80a61c6', 'd35b9ed3476121d2274673a81f2cc2ad', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_293.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_293.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_293.json 2010-03-20 15:04:22.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_293.json 2012-12-08 01:04:33.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '0c7037479f1753e58ec57417dc3f7fce', '6c9bc951ff14822dd3a217648f470448', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_294.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_294.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_294.json 2010-03-22 22:48:20.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_294.json 2012-12-10 16:30:05.000000000 +0000 @@ -5,6 +5,8 @@ ] good_md5 = [ + '18ece42853c0cdc21266c7bb5aaeb5ae', + '6f4ad9fb9d65cf6e1b70ecde3d6cd7b0', '775e3ca7a907131ae30d3736e3441f95', 'f3af9f42a0722e58f9eae27148171bb1', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_295.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_295.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_295.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_295.json 2012-12-08 01:06:11.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '4d005c274e56ac0321c7cdf4a27102e6', + '7b2294c434a6486f2d84d15afd107053', '82e1e4bbb5bcd7098dab5037e8201fe0', '83bf367dc068c42c2c28421dd6151fee', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_297.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_297.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_297.json 2010-03-22 14:45:13.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_297.json 2012-12-08 01:06:11.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '215fe3bc0382a0447236ca820c45c26c', '6d93849206731058d33896c8c363d9f5', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_298.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_298.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_298.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_298.json 2012-12-08 01:06:11.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '0986bfc21caa214ebc64335a5ecf6fa5', '85c999d90fd517fff2c622ac5375e53b', + '8bc64fad6950c829531a3540c645a48c', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_299.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_299.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_299.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_299.json 2012-12-08 01:09:57.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '2b7d6c7489bc27540abf5d2c088f2eb4', + '436696cb1ad9d7a5efbaa2516aa9eceb', '92c2318a225ba18dbb1c1a42d7e34d25', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_301.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_301.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_301.json 2010-06-22 18:10:38.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_301.json 2012-12-08 01:09:57.000000000 +0000 @@ -7,6 +7,7 @@ '56d6f26233902c7f3be26c4697dc0de9', '99188b7dee69c3ffb152547a3b08d4fc', 'a3ed079f415fe09e5aa7060cafa6cb5d', + 'd2a56011bebdf2266767d825074b010c', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_302.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_302.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_302.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_302.json 2012-12-08 01:09:57.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '0217a765b78f50628abc1621c528cc23', '0ee9b6bf1ec9db392c65495f115759f7', '29d31fac86895bf4676fffed2b3fbba2', '549df30e21f2183101b373992131fb66', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_303.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_303.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_303.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_303.json 2012-12-08 01:09:57.000000000 +0000 @@ -1,4 +1,5 @@ bad_md5 = [ + '0075e0758f17c038bb111fe5c24110ff', 'dccab04533f7cfe14aab0e5f954effae', 'eaff73fcfcfb1bca2ba9ed7ffd60a54a', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_304.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_304.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_304.json 2010-03-25 22:45:05.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_304.json 2012-12-08 01:09:57.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '824628dd2c629dab0fbec3b1ee98abd3', + 'c3ac5d708b286dd12288710a7b4f6c8a', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_305.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_305.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_305.json 2010-03-29 15:25:11.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_305.json 2012-12-08 14:47:39.000000000 +0000 @@ -5,6 +5,7 @@ ] good_md5 = [ + '418e6974876d9a76f60e85343c77378a', 'c91b08fdeeb5f55e2599d656c34b3a34', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_307.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_307.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_307.json 2010-06-09 21:59:08.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_307.json 2012-12-08 14:47:39.000000000 +0000 @@ -6,6 +6,7 @@ ] good_md5 = [ + '6754e965bab1860e8bbab7300deff75d', 'c901fcf3e609421368e92cdcbd4124a7', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_309.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_309.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_309.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_309.json 2012-12-08 14:47:39.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '8292d12740530ab085118ab48ddf07ed', '9d3b8e2325a2b4f3cd9e76d0823714fe', 'f2226634cbaba5a7a9c6933691691143', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_310.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_310.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_310.json 2010-04-14 09:56:16.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_310.json 2012-12-10 16:30:05.000000000 +0000 @@ -1,4 +1,6 @@ bad_md5 = [ + '79307b17d2301ad69bba2b6d29d24168', + '8830746f5d2f6a900d4d60fbc82264c4', 'c67d411560cb9e226df5029417089368', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_310_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_310_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_310_2.json 2010-04-14 02:21:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_310_2.json 2012-12-08 14:47:39.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '695db00f6942d31d888f2d978db50a15', + '7b64f87cdb240e673bdbfc7582bf8b55', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_311.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_311.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_311.json 2010-04-21 13:46:02.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_311.json 2012-12-08 14:47:39.000000000 +0000 @@ -8,6 +8,7 @@ '50a5ae0f9ed172cc9773e809749fb2bc', '748f66b9b27c2ce8803c3886eeca46fe', 'b8f4b77f0198336834ecf6bf40718960', + 'e36637fc041e0ee7a0f6a243d334490e', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_312.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_312.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_312.json 2010-06-22 20:41:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_312.json 2012-12-10 16:25:23.000000000 +0000 @@ -3,7 +3,9 @@ ] good_md5 = [ + '4e0304714cea9532306c94960a94a6ac', '6cfa2049debe325e7558c901f3fd909e', + '778ae18b823c7193b88e2baf5e112067', '9a1882af4794be8ec1c8cdb5b579e790', 'e5f806a05752e7f2e1258d1567c1f072', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_313.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_313.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_313.json 2010-04-20 03:55:22.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_313.json 2012-12-08 14:47:39.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '053cd7d15cd0072880177ab14b75ddf4', + 'da2163a30fb5aeebf9faf730d271241d', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_315.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_315.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_315.json 2010-06-22 20:42:03.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_315.json 2012-12-08 14:47:39.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '08e34654dfc51ad18ada4d610de0024e', '5076802214a82a6385ccd7fbf87d1361', + '6de8ec59190338e1fcf3355a5c635e87', 'd4c1daef6f239c6aaf61b4388f68ac16', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_320.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_320.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_320.json 2010-05-31 19:49:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_320.json 2012-12-08 14:47:39.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '4542fab3fac2e16c23cef40bda899b7f', + '8cdc0c9f3270163ee339659c4d628987', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_321.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_321.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_321.json 2010-05-31 20:26:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_321.json 2012-12-08 14:47:39.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '1cf4da651c6bbeb8c62eafe986ae17eb', + 'ce7ab98896d28dc739afbb4523bfc486', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_322.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_322.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_322.json 2010-06-07 02:33:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_322.json 2012-12-08 14:47:39.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ 'c8b6075e5429f6e568c1aa483cfc6a33', + 'e939229ce80f5b582e34fa28bc425e14', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_327.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_327.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_327.json 2010-06-17 09:44:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_327.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -bad_md5 = [ - '6c5fbacae4a62d006c9c6be08d4c73ed', - 'sentinel' -] - -good_md5 = [ - 'sentinel' -] - diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_328.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_328.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_328.json 2010-06-22 18:13:07.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_328.json 2012-12-08 14:58:21.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '511710993e03c55825635054cb0dd592', 'cba4706cb25807e9a80edcc3673016a2', + 'd2593f51466c33fe9f0f847d715da9e6', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_328_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_328_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_328_2.json 2010-06-22 18:13:47.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_328_2.json 2012-12-08 14:58:21.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '3435bc6a26f39f41e5fbe7427545362c', + '6c37d4e21d514f4b9ddcc4f548b90b6d', '8dd639567738e695c7cdae4f14ac83fd', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_330.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_330.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_330.json 2010-06-22 16:57:40.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_330.json 2012-12-08 14:58:21.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '06b2878428d2ba1ada53400186f4e2ca', '6006416f8daa0b5860296a8da4923b3a', + 'f5f58ea3cdcc5113d654ac2ed3d8df60', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_331.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_331.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_331.json 2010-06-22 19:40:09.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_331.json 2012-12-10 16:25:23.000000000 +0000 @@ -5,6 +5,8 @@ ] good_md5 = [ + '7b210259e4bccbfd12adb9e9525856dd', + '7b29a9838ec49713152a4ceaf7e16108', 'd1cf2ce10b05ca12eda1b810b7dd2886', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_335.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_335.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_335.json 2010-07-01 14:47:43.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_335.json 2012-12-08 14:58:21.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '2caf157e394b9049d1eca7ce31995d25', + '832b03100976d9e1d6bb43e63fecd314', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_337.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_337.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_337.json 2010-07-13 04:07:10.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_337.json 2012-12-08 14:58:21.000000000 +0000 @@ -1,4 +1,5 @@ bad_md5 = [ + '0d709b205f6557b10ab52689f85ba010', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_339.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_339.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_339.json 2010-07-27 13:35:25.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_339.json 2012-12-08 15:03:03.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '75e08bdee0a0f951e780820228e7a052', 'a4c0c9f71892b584e87f8858ccd080aa', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_340.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_340.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_340.json 2010-09-29 02:35:18.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_340.json 2012-12-08 15:03:03.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '1149aeb982553dd6274433b9772ad975', '1b4c10cc3726441dc565726355d0df99', + '8f02c93573a4bbc38dc99ebb90859115', 'b3a4cb510fc75d02bfb3aef2dae967f6', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_345.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_345.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_345.json 2010-08-24 04:31:54.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_345.json 2012-12-08 15:03:03.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '70cb2f31c0746bbec2c8de5415d8358b', 'ec03efa4bb45890424ac9a120723195c', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_349.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_349.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_349.json 2010-08-27 16:55:28.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_349.json 2012-12-08 15:03:03.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '72f6ab14d026be3d00e0a219c9d4b053', 'b737c0ed22e6ec12a78035bbc0169722', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_351.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_351.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_351.json 2010-09-29 02:34:30.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_351.json 2012-12-08 15:03:03.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '170b27f90a4a972f55ba876193204a3c', + '6f64d4b64aa268518b11eccee54e70cd', '82d22fe37b77288863b7661bfd01b832', 'fb6943943679a6507c5df51c9f1ba582', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_356.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_356.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_356.json 2010-08-30 21:03:55.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_356.json 2012-12-08 15:05:32.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '121dd59a253292e91cd7b252adfea6c0', '4610ca8411897918d31cb2a7e5260023', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_358.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_358.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_358.json 2010-09-29 02:33:02.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_358.json 2012-12-08 15:05:50.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '3abfeda63ad1efdd9a162786e1376265', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_361.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_361.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_361.json 2010-09-29 02:44:22.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_361.json 2012-12-14 00:39:59.000000000 +0000 @@ -1,10 +1,12 @@ bad_md5 = [ + '62f0b7a2f9183b065a122c37d27bbad3', 'c8cb5f7e5528c4f6b976f06ef89ed130', 'sentinel' ] good_md5 = [ '0cfd186968102d9e3860502d20f3e4c5', + 'b5cd5b9426c463971320ee426abe1065', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_363.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_363.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_363.json 2010-09-07 20:00:16.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_363.json 2012-12-08 15:11:58.000000000 +0000 @@ -4,6 +4,7 @@ ] good_md5 = [ + '2918b07c99140d47ff08dbb0727a2161', '2ceb29ab15d761b8b8036514e0917ef0', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_366.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_366.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_366.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_366.json 2012-12-08 15:11:58.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '15ce83bf3fac05dcbfcb55343f962960', '47f5ab541b08d61cce8d96e9fbe414b3', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_374.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_374.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_374.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_374.json 2012-12-08 15:11:58.000000000 +0000 @@ -0,0 +1,12 @@ +bad_md5 = [ + '7278298f75b48439fb2f0e44cc9f3db2', + '8878833c458afb88576588fb24808d68', + 'a07af1428599c12a74e4c52073ac1b57', + 'sentinel' +] + +good_md5 = [ + 'bd4ab34bc77e630ca22fe14c14e2c73f', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_378.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_378.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_378.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_378.json 2010-11-16 12:57:11.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + 'a0e93916cbc2634a0f3e1ec81c4e4750', + 'sentinel' +] + +good_md5 = [ + '68072c43c25ee62e993f172bb3f984c8', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_379.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_379.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_379.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_379.json 2012-12-08 15:11:58.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + 'e7d45a710431227ee1145197fc9bee08', + 'sentinel' +] + +good_md5 = [ + '946ba911ece5c39066b00a1ada24ab72', + 'e44141dae43093a621cebb58004d9205', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_383.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_383.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_383.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_383.json 2012-03-04 03:56:49.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '7c83eb3cb2817fd34b0f6c6184ebca78', + 'df2128b6559013de2f0cc4924091c11b', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_391.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_391.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_391.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_391.json 2012-12-08 15:17:31.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + '0699f4ce18e9e23f8103c04b419bd8fd', + 'sentinel' +] + +good_md5 = [ + '67f12c6cbe25e70aa77a66bdf9f9ec60', + 'b421019932258a86a588d6fc5b0dec64', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_394.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_394.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_394.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_394.json 2012-12-08 15:17:31.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '4b9501be31c0c060322168cab432bdeb', + '895648f5144e105d7aac5c109c8e91e3', + 'e6718567b1eabb990f3473bf7f4d8526', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_394_png.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_394_png.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_394_png.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_394_png.json 2012-05-26 02:37:54.000000000 +0000 @@ -0,0 +1,9 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '952066b4a9cda16bbb872c0de763dd87', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_410.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_410.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_410.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_410.json 2012-12-08 15:17:31.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + 'a7f00dc98808f6d832c41753caf50b15', + 'sentinel' +] + +good_md5 = [ + 'b5c09e189dac6a35f298ec447da0dc2e', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_419.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_419.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_419.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_419.json 2012-12-08 15:19:32.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + '194a3ca345fae65727ce0eec0efc9432', + 'ba9909d3bf5807ab3826283d7b2d1331', + 'sentinel' +] + +good_md5 = [ + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_427.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_427.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_427.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_427.json 2012-12-08 15:19:32.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + '5de954dac61d3111b272254a1147df98', + 'sentinel' +] + +good_md5 = [ + 'ad196a4f3b84ded67530693e4ae2bf23', + 'b92299d87fd1a9081549b5183929e365', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_450.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_450.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_450.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_450.json 2012-05-26 01:46:23.000000000 +0000 @@ -0,0 +1,9 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '2dcc106f379fc77d33d92e542bda9b25', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_452.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_452.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_452.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_452.json 2012-12-08 15:27:10.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '20d9d0d408cbea6c046fbb737310c933', + 'e17633a2d8d88a8c9d815688290259c7', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_46.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_46.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_46.json 2010-01-26 19:14:01.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_46.json 2012-12-08 15:27:10.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '75b8bfcc21d6a35428642381d4b56997', '89bc644e1fa77400a1dd8530b8968b99', + '8e387667bca1036de5c652a855cc04dc', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_461.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_461.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_461.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_461.json 2012-12-14 20:25:13.000000000 +0000 @@ -0,0 +1,9 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '403b2e4569c6ca65918e04be71172221', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_463.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_463.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_463.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_463.json 2012-12-10 16:25:23.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '3332a769c2808a47a23b7d65b6cca95d', + 'ba2c3560f1f3329dbc48b39c47f07711', + 'e86bb8dc746ffe432b8bae6955621785', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_464.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_464.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_464.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_464.json 2012-12-14 16:41:35.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + 'e49696f79153aedfe9a3ef86b0b97d2b', + 'sentinel' +] + +good_md5 = [ + 'b823c29d60c2d37e2e0b1526d7523f9e', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_467.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_467.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_467.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_467.json 2012-12-14 20:20:50.000000000 +0000 @@ -0,0 +1,9 @@ +bad_md5 = [ + '81c0a90c03c76b6b06d939042cb4583d', + 'sentinel' +] + +good_md5 = [ + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_468.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_468.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_468.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_468.json 2012-12-10 16:25:23.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '02fc5385c72dce0d3e389d5ad611c256', + '098dafddff2106e50bf843c6977f1135', + '613c82dcfba152913471f798d55f0e9b', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_470.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_470.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_470.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_470.json 2012-12-14 00:05:53.000000000 +0000 @@ -0,0 +1,12 @@ +bad_md5 = [ + '9b41cb6f49cd95a10eaae8025823c84b', + 'cf202effc8bc13cf61a566c255c072a1', + 'fac01e8e18d40fb2590ba0585c019efd', + 'sentinel' +] + +good_md5 = [ + 'eed5fc787ce6a45afb23e9f7b84175cf', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_471.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_471.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_471.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_471.json 2012-12-14 00:39:59.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + '71541c45deb04039253591bbed657b6e', + 'e9b837d06e518d9baf13405ff50d7ea7', + 'sentinel' +] + +good_md5 = [ + '55a49b05c94d26ef9ba01b40902fc933', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_473.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_473.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_473.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_473.json 2012-12-08 15:31:04.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + '5b0d2e5f9feff00e00147d911b8258a5', + 'sentinel' +] + +good_md5 = [ + '146b5e96ece57a46bf57be4c24f61d57', + '5abb59c842f95ceecf1e478f36162ae6', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_48.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_48.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_48.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_48.json 2012-12-08 15:31:04.000000000 +0000 @@ -7,6 +7,7 @@ '58c81d51ebae84517190ddac2b67746e', '6891e26ad80c2a82fb131d95c5f836fb', 'ae474ce5d7c8c85dac9bbf2fecf1dc99', + 'f02fed58d49ab4099633fb42bbc76143', 'ff58730d6596eadc771a58afb660067a', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_485.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_485.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_485.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_485.json 2012-12-10 16:25:23.000000000 +0000 @@ -0,0 +1,11 @@ +bad_md5 = [ + 'afe87d693c90bb7596a18ecff9f25d07', + 'sentinel' +] + +good_md5 = [ + '47fe9d498588f853378a77125804a963', + '5da26704ddcf3dc36a1c9644add5e8fe', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_485_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_485_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_485_2.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_485_2.json 2012-12-09 13:34:58.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + '0ea8ccf08c5afa94f127c0d940048f53', + 'sentinel' +] + +good_md5 = [ + '92e29501bb921415a9427c784048c4ed', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_50.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_50.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_50.json 2010-03-09 22:08:29.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_50.json 2012-12-08 15:31:04.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '078123f9425cce65a54e5f3548081b23', '4074114c94bd385989c791731991b9e3', '47f8298b4b0f86e260b28de575318f13', '50f774fd728df5e97b1b00181f6bd2ae', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_64.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_64.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_64.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_64.json 2012-12-08 15:31:04.000000000 +0000 @@ -6,6 +6,7 @@ '128a3f914b8f2a592a0e2e464604d60f', '3cceb49b212a495257cef19406c87c84', '6ad02985de3ed36672e7eb5731a5ec15', + '8dd75f46de808960f0cc9847e52becbc', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_64_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_64_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_64_2.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_64_2.json 2012-12-08 15:31:04.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '11328258308a15fa896acbbbba64ebfc', '87421a264d32477d67a5c9526d430852', + '97b2a45af6cbcd137f6036addc5da898', '99e52f8ff0c0a1b8c55b136a32458ac6', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_65.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_65.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_65.json 2010-04-14 09:58:10.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_65.json 2012-12-08 15:34:02.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '2760a50bce2a083772a3d0458d35eee9', + '8a9026a3fd1c48460bbac8d4a42de9c9', 'e581114aa5d51c08cd3f629777d76840', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_65_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_65_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_65_2.json 2010-06-22 18:14:38.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_65_2.json 2012-12-08 15:34:02.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ '1a6c6e9a1bf03517342c4dfec278b356', + '22fc42a514dd5f3b9e0f05441413fce7', 'e52b5119fc8fea521cac90b3f839aa36', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_67.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_67.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_67.json 2010-06-22 16:57:40.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_67.json 2012-12-08 15:34:02.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '0ad8829148f1da69029788a54d558316', '3c71362eac14e482a326d584283c7f9f', + '597a9e81b4e10e3bee2edd7bb0fa2ed6', '818b827d34d7ca459bcccb50272b820c', '9dbf90c5601cb20f01acbdda0293852a', 'cc9396dafc7075940e78cf94921542a7', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_68_1.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_68_1.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_68_1.json 2010-01-26 19:17:33.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_68_1.json 2012-12-08 15:34:02.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '30b631e67d901963e15764820af4c79a', '49f107c92a485ce7fad5291b6e4aa5a1', + '7981260a1267db1fb29ca59fe0334e8e', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_68_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_68_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_68_2.json 2010-01-26 19:17:33.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_68_2.json 2012-12-08 15:34:02.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '2b7295005cc747851393cebbb8bb23e5', + '3eb3abe1ca3fcf272c6e84cd5dfaadba', 'da5be53e10b8d91a206666acda995906', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_69.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_69.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_69.json 2010-06-22 18:15:23.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_69.json 2012-12-08 15:34:02.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '07a3842236336492a8a55c7299f82823', '0c3211aad9b9b31f0d8dc87241b1766b', + '7bfdf5c3be3ea3f08474a768d5360077', 'a94a39ab5ad11fffe2f1ad56eb7105fb', 'ca7b0191c6bfedd7b305499d443b525c', 'df838aae004694c838a0c50820fc3397', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_70.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_70.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_70.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_70.json 2012-12-08 15:34:02.000000000 +0000 @@ -7,6 +7,7 @@ '1493eacce95ca79cfe1196ef4e3d99dc', '24ba6b04c78a41cf08337e166597ab4a', '5e534f3c12a3d8becec04b2659a23fad', + 'be17b9db5fab0c94808aca3ec9f58aa0', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_70_2.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_70_2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_70_2.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_70_2.json 2012-12-08 15:36:15.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '4029d7be653cac05ca9076bdba93c629', '7373b2465d64162897829d092361f369', + 'b46f525eea5275f5ddaff7e494c5c9ae', 'ec2015f109152640cafeafcaf2889c29', 'f1299252ed2fda9692a920e7be71fa48', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_72.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_72.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_72.json 2010-06-22 18:15:46.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_72.json 2012-12-08 15:36:15.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '03606f67ed56f67665c20f108e9cf5f0', + '1cccf3758290b29a44690a9dbfcdd111', '457a7fb72840384d3863509af376107d', '93d3fd1d286f913ce51d2f2af3ffef3b', 'd6d2a9f78765b9284616db24474ff95b', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_73.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_73.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_73.json 2010-01-26 19:23:19.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_73.json 2012-12-08 15:36:15.000000000 +0000 @@ -4,6 +4,8 @@ good_md5 = [ '9094a706f2544da23e53cab5b5a2e334', + '9a5889d3978c23903ce22d941c89077c', + 'f0cc330456a7d40ddf4d699245d24915', 'fb53e256d4a07ab01d077a7effba91a5', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_74.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_74.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_74.json 2010-10-06 20:17:48.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_74.json 2012-12-08 15:36:15.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '38a79d8b753e10674f5d549fbb883987', '5cf5f36c1e4a27029371829f99e1958f', + '5feed884a7c3c1c1877ad9cae67bc365', '801c8bc8e34db29ab1348fc3043ab936', 'ad882eba6fff3dbe765f479b3cbbbf18', 'f6a5257ac1ab3a0f5c45a95a6c72d1b5', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_83.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_83.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_83.json 2010-01-26 19:23:19.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_83.json 2012-12-08 15:39:26.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '6241dd76ef875655fa95969036011955', 'ebba39ed8c64bdcd85967b897892b670', + 'f4681efb6259445bcdb5f49cba34da3f', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_84.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_84.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_84.json 2010-01-26 19:23:19.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_84.json 2012-12-08 15:39:26.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ 'd538d7d5585bcba0520a0acc15554300', 'f7ea8d7ce5f614c2601aecb1723c7253', + 'fd01e118ad902d780600f04ca1bb9c6b', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_91.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_91.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_91.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_91.json 2012-12-08 15:39:26.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '1ae76e9d28fe94ceece6454f5bb28489', '6f291a93ceb9fce7a0f835be5b2b54f3', + '7a51e58650b80e9e123e378f08f13b8d', 'f09dd70741b77dd428702da598b19a19', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_95.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_95.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_95.json 2010-06-22 18:16:27.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_95.json 2012-12-08 15:39:26.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '0adccfd91d1cf09fcfc3e114518e9799', '386eec37979b10fd6fae48c5426ccf34', + '54c6aafc3ab110dbe5ef392505d692d8', '59f286219f13979a7f512d96a0ff7daa', '703f87ab9de3a02464a39c0a2ba82d13', 'e5a1aed6ec90750edc7e727627fc3d87', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_issue_99.json rst2pdf-0.93/rst2pdf/tests/md5/test_issue_99.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_issue_99.json 2010-01-26 19:25:57.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_issue_99.json 2012-12-08 15:39:26.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '2c197b518366f077f9e8c79d33a3fc78', '5aa18ca9503af072f157a25d0db434ee', + 'ef0aca7de9b6e1e646ce2d851d46082a', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_kerning.json rst2pdf-0.93/rst2pdf/tests/md5/test_kerning.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_kerning.json 2010-04-14 10:11:52.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_kerning.json 2012-12-09 00:29:41.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '32d0163fa9fe5d62bdeb1a9f045c5422', + '6981170c03fe57a813cb7191e6d290ae', '8363acd847d323ad49cefb3876d2464c', 'cb4b21bd8a9a8e1cbaf200d311646559', 'sentinel' @@ -11,6 +12,7 @@ incomplete_md5 = [ '638a96a615203f5417f7ef54fe17e190', + '7af31898f4695a5abebbe19b2b77edd3', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_landscape.json rst2pdf-0.93/rst2pdf/tests/md5/test_landscape.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_landscape.json 2010-09-29 02:31:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_landscape.json 2012-12-09 00:29:41.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '83b71b38adf53232b8cb9aef41511ada', + '8a01506fffdab10940224ce7133e5e58', '8c398761294bdf39590240105bc60a70', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_lineno.json rst2pdf-0.93/rst2pdf/tests/md5/test_lineno.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_lineno.json 2010-03-20 15:00:11.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_lineno.json 2012-12-09 00:29:41.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '3895aada824383084a53955a5107a9e9', '404484d79853e0333aaa847846e4fc07', + '7c1713677676f715ee654c095aef2864', 'b10434da6c6f28062503e5c0924ac805', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_list_table.json rst2pdf-0.93/rst2pdf/tests/md5/test_list_table.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_list_table.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_list_table.json 2012-12-09 00:29:41.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '37e7160a1d64cc9d922ae78dbe59e9c4', '7c74c8cd6be77543ca95a6bfd4895974', '8bfa11ffc6848be81f9f861f41281aea', 'c907e376be790801e662ac3977eafd75', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_lists.json rst2pdf-0.93/rst2pdf/tests/md5/test_lists.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_lists.json 2010-06-22 18:18:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_lists.json 2012-12-09 00:29:41.000000000 +0000 @@ -1,4 +1,5 @@ bad_md5 = [ + 'c558dc2646c647f1d0aac375b098b25a', 'e8a16287b2e57600ddaebd7839818e0b', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_math.json rst2pdf-0.93/rst2pdf/tests/md5/test_math.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_math.json 2010-07-27 14:04:41.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_math.json 2012-12-09 00:29:41.000000000 +0000 @@ -3,11 +3,13 @@ ] good_md5 = [ + '0e0bbe2a00634055ffc9d1f1c11d1ec0', '17be6dd4fc33477203480023b516e872', '454b897b6a3671b2efba6a8e053ce38d', '48dc2e0e80c875b8117e8210598d75bc', '61b78f9333f3629d1fb74246e398afea', '8748ca044bde38ea86825079135b4ca9', + 'd0c8cd54f4db431b52b57386bfe5fa7f', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_math2.json rst2pdf-0.93/rst2pdf/tests/md5/test_math2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_math2.json 2010-03-17 16:07:07.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_math2.json 2012-12-09 00:29:41.000000000 +0000 @@ -1,5 +1,6 @@ bad_md5 = [ '6f893e99868b27501cc9e2e447787a45', + 'cb79f95f901e6692bd04e3a131951033', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_math_default_role.json rst2pdf-0.93/rst2pdf/tests/md5/test_math_default_role.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_math_default_role.json 2010-05-31 20:26:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_math_default_role.json 2012-12-09 00:29:41.000000000 +0000 @@ -5,6 +5,8 @@ good_md5 = [ '0e78bfb65ca1791b2dd5a33e55ae10f3', '614de5c150bc91da2667df9956a98629', + 'df0da088eec7ed9d09b2c29ae2c4a66b', + 'f5f19401b655a15dc06d20bc5963c02f', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_multiline_header.json rst2pdf-0.93/rst2pdf/tests/md5/test_multiline_header.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_multiline_header.json 2010-08-17 02:00:19.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_multiline_header.json 2012-12-09 00:29:41.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '328eddc5118681d457525344b84a45b5', + '51d74bf74d7ebd85e4774546d20ad1be', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_nested_lists_page_layout.json rst2pdf-0.93/rst2pdf/tests/md5/test_nested_lists_page_layout.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_nested_lists_page_layout.json 2010-08-17 02:00:19.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_nested_lists_page_layout.json 2012-12-09 00:29:41.000000000 +0000 @@ -6,6 +6,7 @@ good_md5 = [ 'd2ccf5a85e34cfa2eac1eaf5536fb26f', + 'f80f83c0811d1eaee467b966871bc2d5', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_no_raw_html.json rst2pdf-0.93/rst2pdf/tests/md5/test_no_raw_html.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_no_raw_html.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_no_raw_html.json 2012-12-09 00:29:41.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '03d4ab97c205d1659e142e6f5f176a20', + '6866215f46599ef9d19c01f9aa15677c', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_oddeven.json rst2pdf-0.93/rst2pdf/tests/md5/test_oddeven.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_oddeven.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_oddeven.json 2012-12-09 00:29:41.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '1b25580f6bfa12cea96ecf62f0c56775', + '5dd1deb51e2ec7fdd87fcee9c5e99ad0', 'c300e35c1a0aa8598afb6a62dc49a675', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_option_list.json rst2pdf-0.93/rst2pdf/tests/md5/test_option_list.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_option_list.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_option_list.json 2012-12-09 00:29:41.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '089acaf4b1c85d0d9c3d17742355b220', '203658f549a98b6ad31169963748189e', + '838cc6941c808ac30675fa8cd04b07bf', 'f2c03d7431d319b1aa5b2e79cbd1ac7f', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_page_counter.json rst2pdf-0.93/rst2pdf/tests/md5/test_page_counter.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_page_counter.json 2010-01-26 19:30:37.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_page_counter.json 2012-12-09 00:29:41.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '43b1b7aefeecfc5a658b380d90b9e2b0', '5041293889011e905ac80ede65d1446f', '841717f280660166aeb79ec9cc332b77', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_page_labels.json rst2pdf-0.93/rst2pdf/tests/md5/test_page_labels.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_page_labels.json 2010-01-26 19:30:37.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_page_labels.json 2012-12-09 00:29:41.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '40a5eea23f322a7d2e34a4f7d470d827', '7dcda895a3040d6dd3df101cd9403dc6', + 'feb68cbb199f9294845b4a226793cb84', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_png_dpi.json rst2pdf-0.93/rst2pdf/tests/md5/test_png_dpi.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_png_dpi.json 2010-03-09 22:08:29.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_png_dpi.json 2012-12-10 16:25:23.000000000 +0000 @@ -3,7 +3,9 @@ ] good_md5 = [ + '1a49c27ef3f791592364cba0853a6e27', '48f535b4c6c47b5129a92026d6fe1a48', + '864cb8702d62e63e0363f7924d02cc41', 'ab0ca73ecae064926c73cf39714a3c57', 'f3cf4efa84fc2d94776449a03ede7539', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_preprocessor.json rst2pdf-0.93/rst2pdf/tests/md5/test_preprocessor.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_preprocessor.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_preprocessor.json 2012-12-09 00:29:41.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '02a7c5dca3bb255b01c779d0076ea9e8', '34df4d0aad0828318aac97e785175050', '4bb9587e2798ea4b498926dda5a5093b', '68fcffc2dac5c560cceebb0043594679', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_raw.json rst2pdf-0.93/rst2pdf/tests/md5/test_raw.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_raw.json 2010-01-26 19:30:37.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_raw.json 2012-12-09 00:29:41.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '3d76deda442946dd86d65b5d47d34c3e', + '5eba381e90fbb1495bb5fd47677219b5', 'a419162a0a904ae0688aed9f21459835', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_raw_html.json rst2pdf-0.93/rst2pdf/tests/md5/test_raw_html.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_raw_html.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_raw_html.json 2012-12-09 00:29:41.000000000 +0000 @@ -0,0 +1,15 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + '6aca0c4b66b1be17c177a7e3983e31c2', + 'bf103e38f2933f65c7fa79811a755c8e', + 'sentinel' +] + +incomplete_md5 = [ + '03d4ab97c205d1659e142e6f5f176a20', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_replacement_text.json rst2pdf-0.93/rst2pdf/tests/md5/test_replacement_text.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_replacement_text.json 2010-01-26 19:34:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_replacement_text.json 2012-12-09 00:29:41.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + 'a49cdd33bb5dda4ede57c1e27289e376', 'd65fb63df1c0c17a5dc19c1dae2c4770', 'e65f6047db5983f4222c7bd613c718e6', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_sidebar.json rst2pdf-0.93/rst2pdf/tests/md5/test_sidebar.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_sidebar.json 2010-03-20 13:12:27.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_sidebar.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -bad_md5 = [ - 'sentinel' -] - -good_md5 = [ - '53831751050cf3bf83f93eab5c8b52e7', - '82893568ccfbde0236e5fac4882bdf5f', - '8b4c9deab7e8f2fc0ee76f69e55dbb00', - 'sentinel' -] - -unknown_md5 = [ - 'sentinel' -] - diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_sidebar_literal.json rst2pdf-0.93/rst2pdf/tests/md5/test_sidebar_literal.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_sidebar_literal.json 2010-01-26 19:34:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_sidebar_literal.json 2012-12-09 00:29:41.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + 'bde4467c8a36ef93a3bd4a783b1d759b', 'f4ab727f7afaf654c9ca91d18f88b7da', 'fc336aa409a8c5ff35e20d4c7952f551', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_sidebar_literal2.json rst2pdf-0.93/rst2pdf/tests/md5/test_sidebar_literal2.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_sidebar_literal2.json 2010-06-22 18:19:27.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_sidebar_literal2.json 2012-12-09 00:29:41.000000000 +0000 @@ -8,6 +8,7 @@ '982ee132c2160fc2fb17ee277c0e9ba1', 'a78e2f68d8a4547ada5269368a325575', 'd66fd599caddf1d76488081aa477bac1', + 'dee3d3c4d090ff511ea0789da044a26d', 'f30d87725b53d92a3c80054b68425a0a', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_slides.json rst2pdf-0.93/rst2pdf/tests/md5/test_slides.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_slides.json 2010-07-27 14:13:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_slides.json 2012-12-08 15:51:03.000000000 +0000 @@ -6,12 +6,14 @@ good_md5 = [ '0465a6c12ff865ea483be0e1d2940170', '0b6bb07229e261aab26734c15bca5dca', + '225a7b3ba0c1160487e51ab7f092e2f7', '468859c6356396a0a62447b77ba41826', '5432990d8c87443d90967acf4f41d27c', '6000904fce1cfafb271bcc13877a61a9', '6a791e9aceaf659e64202fc5022dc20e', '6d078f6e9c404d9cf2f9e323d5a3ac23', '8745d7019003688abc3a0cfaaf05616e', + '9935b55c17c9d43a9fdb7ef3984bb5c6', '9cca0a12669a5f8962032667a5c9a2ed', 'a1484e969a9a6acd60a1a59d533ea925', 'abf9c719b5390fab69a04a5703cb4290', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_smarty.json rst2pdf-0.93/rst2pdf/tests/md5/test_smarty.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_smarty.json 2010-01-26 19:34:14.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_smarty.json 2012-12-08 15:51:03.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '07063ceaba4432670a0e9a6a7d6db999', + '0d722f4d2bc1cffdf6860d0de9a5c912', 'cef433d78a398c74300de324793a3786', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_span_cells.json rst2pdf-0.93/rst2pdf/tests/md5/test_span_cells.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_span_cells.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_span_cells.json 2012-12-14 16:09:32.000000000 +0000 @@ -0,0 +1,9 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + 'd176dd591fb6569718ae4bbe0c16e432', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_split_notes.json rst2pdf-0.93/rst2pdf/tests/md5/test_split_notes.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_split_notes.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_split_notes.json 2012-12-08 15:51:03.000000000 +0000 @@ -6,6 +6,7 @@ '0049f0bb110beb07d130dfde91d43ff6', '8e43a3589a7f622d8ad63c7ec4dbd52b', '93afa08e70f2d3bb31910b397f3d2f78', + 'f1a655f963804057941b8783ea3c8485', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_strip_elements.json rst2pdf-0.93/rst2pdf/tests/md5/test_strip_elements.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_strip_elements.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_strip_elements.json 2012-12-08 15:51:03.000000000 +0000 @@ -0,0 +1,10 @@ +bad_md5 = [ + '3df1d1bc102012a91122937aa0d9bb59', + 'sentinel' +] + +good_md5 = [ + '7d126c2e2eebce368abf048461519533', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_style_width.json rst2pdf-0.93/rst2pdf/tests/md5/test_style_width.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_style_width.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_style_width.json 2012-12-08 15:49:36.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '69de21f87739db620ad44ec33e2d5cd6', '895412762959a1401b418f9a205dd6ac', + 'a9286cdc3b4dce351e79db3b9c10c09d', 'd3d5c72c4b5846f5d45c20a678ff9cd4', 'f7e50105bfdfb3a8bbfd263f22119c19', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_stylesheet_includes.json rst2pdf-0.93/rst2pdf/tests/md5/test_stylesheet_includes.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_stylesheet_includes.json 2010-01-26 19:34:52.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_stylesheet_includes.json 2012-12-13 13:30:22.000000000 +0000 @@ -1,9 +1,11 @@ bad_md5 = [ + 'dd5deb327f566599e9ca34350a65944a', 'sentinel' ] good_md5 = [ '34acd719336816f04c91ca4c269812c9', + '5a81eb431b3edcdcfd66dc95042f9798', 'abc117894ff21be8afdf61562eebcded', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_svg.json rst2pdf-0.93/rst2pdf/tests/md5/test_svg.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_svg.json 2010-03-25 18:13:01.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_svg.json 2012-12-10 16:25:23.000000000 +0000 @@ -4,12 +4,14 @@ ] good_md5 = [ - '7caa470ed96254f041d8fe0e9968d587', '0d66d57f494504e11d009005c8f235e9', '28c67543843fbc947af83bc15eef9751', + '7431e632bcb1d337e8f25b557b1fadb0', + '7caa470ed96254f041d8fe0e9968d587', + '898507dbe582124ce1cd3a9e030c2e10', + 'cc3c4720f3a9b26aedd24ca63d1523c1', 'd1a9f3894e7d857c82ca73434133542e', 'e697552e5ce85665e109c45115b2334b', - '28c67543843fbc947af83bc15eef9751', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_svg_alignment.json rst2pdf-0.93/rst2pdf/tests/md5/test_svg_alignment.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_svg_alignment.json 2010-03-09 08:29:20.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_svg_alignment.json 2012-12-10 16:25:23.000000000 +0000 @@ -5,11 +5,13 @@ ] good_md5 = [ - 'ce3c440d7cb5a8ecf6f2284405c857fc', '162de236969f148907ae300257585a7d', '330271f43f7f472b813b01d187f11af0', '3ad80477825a36659c7552346aaf3151', + 'ce3c440d7cb5a8ecf6f2284405c857fc', + 'e27c7d952590d5497cf973e1019e4ca1', 'eeb0bf178bc059bff9bfa7d7b801dc7b', + 'fe25516e8e15446fe7eb7fe6c703182a', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_table_1.json rst2pdf-0.93/rst2pdf/tests/md5/test_table_1.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_table_1.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_table_1.json 2012-12-08 15:49:36.000000000 +0000 @@ -6,6 +6,7 @@ '49117e615e3939e3eb3fc3e806398901', '50210f7d91032bfc919920d590b359b7', '8570b9585541206d5e5ce1bf23ac31f4', + '8ac93979d41d4bd9de5831922a5bee7b', 'a02d6773cef8517f744eaca4cbcb515b', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_table_classes.json rst2pdf-0.93/rst2pdf/tests/md5/test_table_classes.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_table_classes.json 2010-04-16 16:43:58.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_table_classes.json 2012-12-08 15:49:36.000000000 +0000 @@ -3,6 +3,7 @@ ] good_md5 = [ + '0e0d0a2d819d481083fd58e1b04b2936', '821be9880f2397d1680b740e628c2655', '84b9249b80ca4f5ebdf47f3cc8799312', 'd4281c08a738928d114564038434258f', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_table_space.json rst2pdf-0.93/rst2pdf/tests/md5/test_table_space.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_table_space.json 2010-04-16 15:51:56.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_table_space.json 2012-12-08 15:49:36.000000000 +0000 @@ -6,6 +6,7 @@ '24314a457a5f2fe057ba30e251c06c35', '338056600db2b475e8dc68590ba52fb2', '5059d196af0d8df343ef34045b426aca', + '509d2fef818a3a5bdf37922ab309627a', '792a0197116e1dc7d16bb76cca3f102e', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_tableofcontents.json rst2pdf-0.93/rst2pdf/tests/md5/test_tableofcontents.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_tableofcontents.json 2010-04-21 13:11:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_tableofcontents.json 2012-12-08 15:49:36.000000000 +0000 @@ -6,6 +6,7 @@ '0a9bf45d8187b9d3fe6fb7c244685f92', '25c1b538f069cecdba6c0cd53ced2f14', '5402272cad5da763602484c5583b5666', + '9282a59a75c0495c6d173635a92d935f', 'b805b6108530e11d3052a4315700ffdc', 'd2e12901a52cad28490efffa5663c969', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_tabwidth.json rst2pdf-0.93/rst2pdf/tests/md5/test_tabwidth.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_tabwidth.json 2010-01-26 16:33:39.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_tabwidth.json 2012-12-08 15:49:36.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '2946f754df45f7c485b9e1518f30fd60', + 'b35d8678c9314dc49f7c576db31d7fd2', 'c1dda33e419ba406582ad1935a50805e', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_title_ref.json rst2pdf-0.93/rst2pdf/tests/md5/test_title_ref.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_title_ref.json 2010-07-27 14:13:24.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_title_ref.json 2012-12-08 15:49:36.000000000 +0000 @@ -4,6 +4,7 @@ good_md5 = [ '0d983339d7fb8f8d933f007381b5b5ca', + '3de9817093d2bd6cbf2518e0d468e8e7', '8793e886402c93572d205d47991df0c3', 'a95b136d8d53cb67d44560cbc837705d', 'acc4ac19ca47019b7b5e45455323c79a', diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_transitions.json rst2pdf-0.93/rst2pdf/tests/md5/test_transitions.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_transitions.json 2010-01-26 19:38:53.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_transitions.json 2012-12-08 15:49:36.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '6abbe3a0761c54dc7bbaed199039bb6a', '701393c4d5aed0577810debd84433c1d', + 'b52ba4ca34df31e424c5a7159c0504a3', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_uml_extension.json rst2pdf-0.93/rst2pdf/tests/md5/test_uml_extension.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_uml_extension.json 1970-01-01 00:00:00.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_uml_extension.json 2012-12-09 01:39:34.000000000 +0000 @@ -0,0 +1,9 @@ +bad_md5 = [ + 'sentinel' +] + +good_md5 = [ + 'd39b9a5def68faaddeeb43e50af04c3e', + 'sentinel' +] + diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_unicode_headings.json rst2pdf-0.93/rst2pdf/tests/md5/test_unicode_headings.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_unicode_headings.json 2010-01-26 19:38:53.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_unicode_headings.json 2012-12-08 15:49:36.000000000 +0000 @@ -5,6 +5,7 @@ good_md5 = [ '9e3d3517a03fcdcf136c54b10223f109', 'a78b7da33d1283819a3263b0deb1887d', + 'caca4f9743412d5b214b6f38d5ed40b7', 'sentinel' ] diff -Nru rst2pdf-0.16/rst2pdf/tests/md5/test_vectorpdf.json rst2pdf-0.93/rst2pdf/tests/md5/test_vectorpdf.json --- rst2pdf-0.16/rst2pdf/tests/md5/test_vectorpdf.json 2010-03-30 18:00:26.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/md5/test_vectorpdf.json 2012-12-10 16:25:23.000000000 +0000 @@ -4,7 +4,9 @@ good_md5 = [ '0bc0cfe37d2bab4ce8bef6ecc268aac9', + '35e0bb01497247f41f23c0750a129599', '35fd3ad15a8ecad9c9b50b16f0118e14', + '9cfb3ed74abc18de8bb3e71bdff9bcab', 'ab5d63118c5cdc948c2876e319dbb2bf', 'd435a6425cf9622d70f78f1c752850b7', 'sentinel' diff -Nru rst2pdf-0.16/rst2pdf/tests/parselogs.py rst2pdf-0.93/rst2pdf/tests/parselogs.py --- rst2pdf-0.16/rst2pdf/tests/parselogs.py 2010-03-08 03:25:16.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/parselogs.py 2012-03-04 03:01:12.000000000 +0000 @@ -1,9 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/tests/parselogs.py $ -#$LastChangedDate: 2010-03-08 00:25:16 -0300 (Mon, 08 Mar 2010) $ -#$LastChangedRevision: 1730 $ +#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/tests/parselogs.py $ +#$LastChangedDate: 2012-03-04 00:01:12 -0300 (Sun, 04 Mar 2012) $ +#$LastChangedRevision: 2459 $ # See LICENSE.txt for licensing terms diff -Nru rst2pdf-0.16/rst2pdf/tests/setmd5.py rst2pdf-0.93/rst2pdf/tests/setmd5.py --- rst2pdf-0.16/rst2pdf/tests/setmd5.py 2009-11-08 17:47:42.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/setmd5.py 2012-03-04 03:01:12.000000000 +0000 @@ -1,9 +1,9 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/tests/setmd5.py $ -#$LastChangedDate: 2009-11-08 14:47:42 -0300 (Sun, 08 Nov 2009) $ -#$LastChangedRevision: 1484 $ +#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/tests/setmd5.py $ +#$LastChangedDate: 2012-03-04 00:01:12 -0300 (Sun, 04 Mar 2012) $ +#$LastChangedRevision: 2459 $ ''' diff -Nru rst2pdf-0.16/rst2pdf/tests/zinspector12.py rst2pdf-0.93/rst2pdf/tests/zinspector12.py --- rst2pdf-0.16/rst2pdf/tests/zinspector12.py 2009-11-05 16:58:39.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/tests/zinspector12.py 2009-11-05 16:58:39.000000000 +0000 @@ -1,7 +1,7 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/tests/zinspector12.py $ +#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/tests/zinspector12.py $ #$LastChangedDate: 2009-11-05 13:58:39 -0300 (Thu, 05 Nov 2009) $ #$LastChangedRevision: 1379 $ diff -Nru rst2pdf-0.16/rst2pdf/utils.py rst2pdf-0.93/rst2pdf/utils.py --- rst2pdf-0.16/rst2pdf/utils.py 2010-09-19 19:25:49.000000000 +0000 +++ rst2pdf-0.93/rst2pdf/utils.py 2012-12-07 19:29:35.000000000 +0000 @@ -1,13 +1,13 @@ # -*- coding: utf-8 -*- # See LICENSE.txt for licensing terms -#$HeadURL: https://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/utils.py $ -#$LastChangedDate: 2010-09-19 16:25:49 -0300 (Sun, 19 Sep 2010) $ -#$LastChangedRevision: 2349 $ +#$URL: https://rst2pdf.googlecode.com/svn/tags/0.93/rst2pdf/utils.py $ +#$Date: 2012-12-07 16:29:35 -0300 (Fri, 07 Dec 2012) $ +#$Revision: 2556 $ import shlex from flowables import * -import flowables +import rst2pdf.flowables from styles import adjustUnits from log import log, nodeid @@ -45,8 +45,13 @@ elements.append(MyPageBreak(breakTo='odd')) else: elements.append(MyPageBreak(tokens[1],breakTo='odd')) + elif command == 'FrameBreak': + if len(tokens) == 1: + elements.append(CondPageBreak(99999)) + else: + elements.append(CondPageBreak(float(tokens[1]))) elif command == 'Spacer': - elements.append(MySpacer(adjustUnits(tokens[1]), + elements.append(MySpacer(adjustUnits(tokens[1]), adjustUnits(tokens[2]))) elif command == 'Transition': elements.append(Transition(*tokens[1:])) @@ -56,10 +61,357 @@ log.error('Unknown command %s in raw pdf directive [%s]'%(command,nodeid(node))) return elements +from reportlab.lib.colors import Color, CMYKColor, getAllNamedColors, toColor, \ + HexColor + +HAS_XHTML2PDF = True +try: + from xhtml2pdf.util import COLOR_BY_NAME + from xhtml2pdf.util import memoized + from xhtml2pdf.context import pisaContext + from xhtml2pdf.default import DEFAULT_CSS + from xhtml2pdf.parser import pisaParser,pisaGetAttributes + from xhtml2pdf.document import pisaStory + from reportlab.platypus.flowables import Spacer + from reportlab.platypus.frames import Frame + from xhtml2pdf.xhtml2pdf_reportlab import PmlBaseDoc, PmlPageTemplate + from xhtml2pdf.util import pisaTempFile, getBox, pyPdf + import xhtml2pdf.parser as pisa_parser +except ImportError: + try: + from sx.pisa3.pisa_util import COLOR_BY_NAME + memoized = lambda *a: a + from sx.pisa3.pisa_context import pisaContext + from sx.pisa3.pisa_default import DEFAULT_CSS + from sx.pisa3.pisa_parser import pisaParser,pisaGetAttributes + from sx.pisa3.pisa_document import pisaStory + from reportlab.platypus.flowables import Spacer + from reportlab.platypus.frames import Frame + from sx.pisa3.pisa_reportlab import PmlBaseDoc, PmlPageTemplate + from sx.pisa3.pisa_util import pisaTempFile, getBox, pyPdf + import sx.pisa3.pisa_parser as pisa_parser + except ImportError: + HAS_XHTML2PDF = False + + +if HAS_XHTML2PDF: + + COLOR_BY_NAME['initial'] = Color(0, 0, 0) + + + @memoized + def getColor2(value, default=None): + """ + Convert to color value. + This returns a Color object instance from a text bit. + """ + + if isinstance(value, Color): + return value + value = str(value).strip().lower() + if value == "transparent" or value == "none": + return default + if value in COLOR_BY_NAME: + return COLOR_BY_NAME[value] + if value.startswith("#") and len(value) == 4: + value = "#" + value[1] + value[1] + value[2] + value[2] + value[3] + value[3] + elif rgb_re.search(value): + # e.g., value = "", go figure: + r, g, b = [int(x) for x in rgb_re.search(value).groups()] + value = "#%02x%02x%02x" % (r, g, b) + else: + # Shrug + pass + return toColor(value, default) # Calling the reportlab function + + #import xhtml2pdf.util + #xhtml2pdf.util.getColor = getColor2 + + import cgi + import logging + from xml.dom import Node + + + + def pisaPreLoop2(node, context, collect=False): + """ + Collect all CSS definitions + """ + + data = u"" + if node.nodeType == Node.TEXT_NODE and collect: + data = node.data + + elif node.nodeType == Node.ELEMENT_NODE: + name = node.tagName.lower() + + # print name, node.attributes.items() + if name in ("style", "link"): + attr = pisaGetAttributes(context, name, node.attributes) + print " ", attr + media = [x.strip() for x in attr.media.lower().split(",") if x.strip()] + # print repr(media) + + if (attr.get("type", "").lower() in ("", "text/css") and ( + not media or + "all" in media or + "print" in media or + "pdf" in media)): + + if name == "style": + for node in node.childNodes: + data += pisaPreLoop2(node, context, collect=True) + #context.addCSS(data) + return u"" + #collect = True + + if name == "link" and attr.href and attr.rel.lower() == "stylesheet": + # print "CSS LINK", attr + context.addCSS('\n@import "%s" %s;' % (attr.href, ",".join(media))) + # context.addCSS(unicode(file(attr.href, "rb").read(), attr.charset)) + #else: + # print node.nodeType + + for node in node.childNodes: + result = pisaPreLoop2(node, context, collect=collect) + if collect: + data += result + + return data + + + pisa_parser.pisaPreLoop = pisaPreLoop2 + + + HTML_CSS = """ + html { + font-family: Helvetica; + font-size: 7px; + font-weight: normal; + color: #000000; + background-color: transparent; + margin: 0; + padding: 0; + line-height: 150%; + border: 1px none; + display: inline; + width: auto; + height: auto; + white-space: normal; + } + + b, + strong { + font-weight: bold; + } + + i, + em { + font-style: italic; + } + + u { + text-decoration: underline; + } + + s, + strike { + text-decoration: line-through; + } + + a { + text-decoration: underline; + color: blue; + } + + ins { + color: green; + text-decoration: underline; + } + del { + color: red; + text-decoration: line-through; + } + + pre, + code, + kbd, + samp, + tt { + font-family: "Courier New"; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-weight:bold; + -pdf-outline: true; + -pdf-outline-open: false; + } + + h1 { + /*18px via YUI Fonts CSS foundation*/ + font-size:138.5%; + -pdf-outline-level: 0; + } + + h2 { + /*16px via YUI Fonts CSS foundation*/ + font-size:123.1%; + -pdf-outline-level: 1; + } + + h3 { + /*14px via YUI Fonts CSS foundation*/ + font-size:108%; + -pdf-outline-level: 2; + } + + h4 { + -pdf-outline-level: 3; + } + + h5 { + -pdf-outline-level: 4; + } + + h6 { + -pdf-outline-level: 5; + } + + h1, + h2, + h3, + h4, + h5, + h6, + p, + pre, + hr { + margin:1em 0; + } + + address, + blockquote, + body, + center, + dl, + dir, + div, + fieldset, + form, + h1, + h2, + h3, + h4, + h5, + h6, + hr, + isindex, + menu, + noframes, + noscript, + ol, + p, + pre, + table, + th, + tr, + td, + ul, + li, + dd, + dt, + pdftoc { + display: block; + } + + table { + } + + tr, + th, + td { + + vertical-align: middle; + width: auto; + } + + th { + text-align: center; + font-weight: bold; + } + + center { + text-align: center; + } + + big { + font-size: 125%; + } + + small { + font-size: 75%; + } + + + ul { + margin-left: 1.5em; + list-style-type: disc; + } + + ul ul { + list-style-type: circle; + } + + ul ul ul { + list-style-type: square; + } + + ol { + list-style-type: decimal; + margin-left: 1.5em; + } + + pre { + white-space: pre; + } + + blockquote { + margin-left: 1.5em; + margin-right: 1.5em; + } + + noscript { + display: none; + } + """ + + def parseHTML(data, node): + dest=None + path=None + link_callback=None + debug=0 + default_css=HTML_CSS + xhtml=False + encoding=None + xml_output=None + raise_exception=True + capacity=100*1024 + + # Prepare simple context + context = pisaContext(path, debug=debug, capacity=capacity) + context.pathCallback = link_callback + + # Build story + context = pisaStory(data, path, link_callback, debug, default_css, xhtml, + encoding, context=context, xml_output=xml_output) + return context.story -# Looks like this is not used anywhere now: -# def depth(node): -# if node.parent == None: -# return 0 -# else: -# return 1 + depth(node.parent) +else: # no xhtml2pdf + def parseHTML(data, none): + log.error("You need xhtml2pdf installed to use the raw HTML directive.") + return [] diff -Nru rst2pdf-0.16/setup.cfg rst2pdf-0.93/setup.cfg --- rst2pdf-0.16/setup.cfg 2010-10-06 21:12:39.000000000 +0000 +++ rst2pdf-0.93/setup.cfg 2009-01-23 01:47:44.000000000 +0000 @@ -1 +1,3 @@ [egg_info] +tag_build = .dev +tag_svn_revision = true diff -Nru rst2pdf-0.16/setup.py rst2pdf-0.93/setup.py --- rst2pdf-0.16/setup.py 2010-05-05 13:30:00.000000000 +0000 +++ rst2pdf-0.93/setup.py 2012-12-18 19:39:21.000000000 +0000 @@ -6,7 +6,7 @@ import os from setuptools import setup, find_packages -version = '0.16' +version = '0.93' def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read() @@ -38,8 +38,9 @@ install_requires = [ 'setuptools', 'docutils', - 'reportlab>=2.1', - 'Pygments' + 'reportlab>=2.4', + 'Pygments', + 'pdfrw', ] try: @@ -53,10 +54,11 @@ images_require = ['PIL'] pdfimages_require = ['pyPdf','PythonMagick'] pdfimages2_require = ['pyPdf','SWFTools'] -svgsupport_require = ['svglib'] +svgsupport_require = ['svg2rlg'] sk1support_require = ['uniconvertor'] aafiguresupport_require = ['aafigure>=0.4'] mathsupport_require = ['matplotlib'] +rawhtmlsupport_require = ['xhtml2pdf'] setup( name="rst2pdf", @@ -90,6 +92,7 @@ sk1support=sk1support_require, aafiguresupport=aafiguresupport_require, mathsupport=mathsupport_require, + rawhtmlsupport=rawhtmlsupport_require, ), # metadata for upload to PyPI # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers