/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/rst2pdf.py

  • Committer: Martin Pool
  • Date: 2005-06-28 03:02:31 UTC
  • Revision ID: mbp@sourcefrog.net-20050628030231-d311e4ebcd467ef4
Merge John's import-speedup branch:

                                                                                         
  777 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:20:32 -0500
      revision-id: john@arbash-meinel.com-20050627032031-e82a50db3863b18e
      bzr selftest was not using the correct bzr

  776 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:20:22 -0500
      revision-id: john@arbash-meinel.com-20050627032021-c9f21fde989ddaee
      Add was using an old mutter

  775 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:02:33 -0500
      revision-id: john@arbash-meinel.com-20050627030233-9165cfe98fc63298
      Cleaned up to be less different

  774 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:54:53 -0500
      revision-id: john@arbash-meinel.com-20050627025452-4260d0e744edef43
      Allow BZR_PLUGIN_PATH='' to negate plugin loading.

  773 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:49:34 -0500
      revision-id: john@arbash-meinel.com-20050627024933-b7158f67b7b9eae5
      Finished the previous cleanup (allowing load_plugins to be called twice)

  772 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:45:08 -0500
      revision-id: john@arbash-meinel.com-20050627024508-723b1df510d196fc
      Work on making the tests pass. versioning.py is calling run_cmd directly, but plugins have been loaded.

  771 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:32:29 -0500
      revision-id: john@arbash-meinel.com-20050627023228-79972744d7c53e15
      Got it down a little bit more by removing import of tree and inventory.

  770 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:26:05 -0500
      revision-id: john@arbash-meinel.com-20050627022604-350b9773ef622f95
      Reducing the number of import from bzrlib/__init__.py and bzrlib/branch.py

  769 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:32:25 -0500
      revision-id: john@arbash-meinel.com-20050627013225-32dd044f10d23948
      Updated revision.py and xml.py to include SubElement.

  768 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:03:56 -0500
      revision-id: john@arbash-meinel.com-20050627010356-ee66919e1c377faf
      Minor typo

  767 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:03:13 -0500
      revision-id: john@arbash-meinel.com-20050627010312-40d024007eb85051
      Caching the import

  766 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:51:47 -0500
      revision-id: john@arbash-meinel.com-20050627005147-5281c99e48ed1834
      Created wrapper functions for lazy import of ElementTree

  765 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:46:37 -0500
      revision-id: john@arbash-meinel.com-20050627004636-bf432902004a94c5
      Removed all of the test imports of cElementTree

  764 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:43:59 -0500
      revision-id: john@arbash-meinel.com-20050627004358-d137fbe9570dd71b
      Trying to make bzr startup faster.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
# -*- coding: utf8 -*-
3
 
# $Id: rst2pdf.py 5560 2008-05-20 13:00:31Z milde $
4
 
 
5
 
# rst2pdf.py
6
 
# ==========
7
 
# ::
8
 
 
9
 
"""
10
 
A front end to the Docutils Publisher, producing PDF.
11
 
 
12
 
Produces a latex file with the "latex" writer and converts
13
 
it to PDF with the "rubber" building system for LaTeX documents. 
14
 
"""
15
 
 
16
 
# ``rst2pdf.py`` is a PDF front-end for docutils that is compatible
17
 
# with the ``rst2*.py`` front ends of the docutils_ suite.
18
 
# It enables the generation of PDF documents from a reStructuredText source in
19
 
# one step.
20
 
21
 
# It is implemented as a combination of docutils' ``rst2latex.py`` 
22
 
# by David Goodger and rubber_ by Emmanuel Beffara.
23
 
24
 
# Copyright: © 2008 Günter Milde
25
 
#            Licensed under the `Apache License, Version 2.0`_
26
 
#            Provided WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND
27
 
28
 
# Changelog
29
 
# ---------
30
 
31
 
# =====  ==========  =======================================================
32
 
# 0.1    2008-05-20  first attempt
33
 
# =====  ==========  =======================================================
34
 
35
 
# :: 
36
 
 
37
 
_version = 0.1
38
 
 
39
 
 
40
 
# Imports
41
 
# =======
42
 
# ::
43
 
 
44
 
#from pprint import pprint # for debugging
45
 
import os
46
 
 
47
 
# Docutils::
48
 
 
49
 
try:
50
 
    import locale
51
 
    locale.setlocale(locale.LC_ALL, '')
52
 
except:
53
 
    pass
54
 
 
55
 
from docutils.core import default_usage, default_description, Publisher
56
 
 
57
 
# Rubber (rubber is not installed in the PYTHONPATH)::
58
 
 
59
 
import sys
60
 
sys.path.append("/usr/share/rubber")
61
 
 
62
 
try:
63
 
    import rubber.cmdline
64
 
    import rubber.cmd_pipe
65
 
except ImportError:
66
 
    print "Cannot find the rubber modules, rubber not installed correctly."
67
 
    sys.exit(1)
68
 
 
69
 
# Generate the latex file
70
 
# =======================
71
 
72
 
# We need to replace the <destination> by a intermediate latex file path.
73
 
# The most reliable way to get the value of <destination> is to 
74
 
# call the Publisher "by hand", and query its settings. 
75
 
76
 
# Modeled on the publish_cmdline() function of docutils.core
77
 
78
 
# Default values::
79
 
 
80
 
reader=None
81
 
reader_name='standalone'
82
 
parser=None
83
 
parser_name='restructuredtext'
84
 
writer=None
85
 
writer_name='pseudoxml'
86
 
settings=None
87
 
settings_spec=None
88
 
settings_overrides=None
89
 
config_section=None
90
 
enable_exit_status=1
91
 
argv=None
92
 
usage=default_usage
93
 
description=default_description
94
 
 
95
 
# Argument values given to publish_cmdline() in rst2latex.py::
96
 
 
97
 
description = ('Generates PDF documents from standalone reStructuredText '
98
 
               'sources using the "latex" Writer and the "rubber" '
99
 
               'building system for LaTeX documents.  ' + default_description)
100
 
writer_name = 'latex'
101
 
 
102
 
# Set up the publisher::
103
 
 
104
 
pub = Publisher(reader, parser, writer, settings=settings)
105
 
pub.set_components(reader_name, parser_name, writer_name)
106
 
 
107
 
# Parse the command line args 
108
 
# (Publisher.publish does this in a try statement)::
109
 
 
110
 
pub.process_command_line(argv, usage, description, settings_spec, 
111
 
                         config_section, **(settings_overrides or {}))
112
 
# pprint(pub.settings.__dict__)
113
 
 
114
 
# Get source and destination path::
115
 
 
116
 
source = pub.settings._source
117
 
destination = pub.settings._destination
118
 
# print source, destination
119
 
 
120
 
# Generate names for the temporary files and set ``destination`` to temporary
121
 
# latex file:
122
 
123
 
# make_name() from rubber.cmd_pipe checks that no existing file is
124
 
# overwritten. If we are going to support rubbers ``--inplace`` and ``--into``
125
 
# options, the chdir() must occure before this point to have the check in the
126
 
# right directory. ::
127
 
 
128
 
tmppath = rubber.cmd_pipe.make_name()
129
 
texpath = tmppath + ".tex"
130
 
pdfpath = tmppath + ".pdf"
131
 
 
132
 
pub.settings._destination = texpath
133
 
 
134
 
# Now do the rst -> latex conversion::
135
 
 
136
 
pub.publish(argv, usage, description, settings_spec, settings_overrides, 
137
 
            config_section=config_section, enable_exit_status=enable_exit_status)
138
 
 
139
 
 
140
 
# Generating the PDF document with rubber
141
 
# =======================================
142
 
143
 
144
 
# rubber_ has no documentet API for programmatic use. We simualate a command
145
 
# line call and pass command line arguments (see man: rubber-pipe) in an array::
146
 
 
147
 
rubber_argv = ["--pdf",    # use pdflatex to produce PDF
148
 
               "--short",   # Display LaTeX’s error messages one error per line.
149
 
               texpath
150
 
              ]
151
 
 
152
 
# Get a TeX processing class instance and do the latex->pdf conversion::
153
 
 
154
 
tex_processor = rubber.cmdline.Main()
155
 
tex_processor(rubber_argv)
156
 
 
157
 
# Rename output to _destination or print to stdout::
158
 
 
159
 
if destination is None:
160
 
    pdffile = file(pdfpath)
161
 
    print  pdffile.read()
162
 
    pdffile.close()
163
 
else:
164
 
    os.rename(pdfpath, destination)
165
 
 
166
 
# Clean up (remove intermediate files)
167
 
168
 
# ::
169
 
 
170
 
tex_processor(["--clean"] + rubber_argv)
171
 
os.remove(texpath)
172
 
 
173
 
 
174
 
# .. References
175
 
176
 
# .. _docutils: http://docutils.sourceforge.net/
177
 
# .. _rubber: http://www.pps.jussieu.fr/~beffara/soft/rubber/
178
 
# .. _Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
179
 
#