c10e-html: strip more stuff
[gtk-doc.git] / gtkdoc / mkpdf.py
blob6a034dae3204e4ffbd4cfdae70735469c19b0d24
1 # -*- python; coding: utf-8 -*-
3 # gtk-doc - GTK DocBook documentation generator.
4 # Copyright (C) 2009-2017 Stefan Sauer
5 # 2017 Jussi Pakkanen
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 # Support both Python 2 and 3
23 from __future__ import print_function
25 import logging
26 import os
27 import sys
28 import subprocess
30 from . import config
33 def run_xsltproc(options, args):
34 command = [config.xsltproc]
35 # we could do "--path $PWD " to avoid needing rewriting entities that are
36 # copied from the header into docs under xml
37 if len(options.path):
38 command += ['--path', ':'.join(options.path)]
39 logging.info('running "%s"', ' '.join(command + args))
40 pc = subprocess.Popen(command + args, stderr=subprocess.PIPE)
41 (o, stde) = pc.communicate()
42 with open('profile.txt', 'wb') as h:
43 h.write(stde)
44 return pc.returncode
47 def run(options):
48 logging.info('options: %s', str(options.__dict__))
50 module = options.args[0]
51 document = options.args[1]
53 if options.uninstalled:
54 # this does not work from buiddir!=srcdir
55 # we could try this
56 # MAKE_SCRDIR=$(abs_srcdir) MAKE_BUILDDIR=$(abs_builddir) gtkdoc-mkpdf ...
57 gtkdocdir = os.path.split(sys.argv[0])[0]
58 else:
59 gtkdocdir = os.path.join(config.datadir, 'gtk-doc/data')
61 if config.dblatex != '':
62 # extra options to consider
63 # -I FIG_PATH
64 # -V is useful for debugging
65 # -T db2latex : different style
66 # -d : keep transient files (for debugging)
67 # -P abc.def=$quiet : once the stylesheets have a quiet mode
68 # -x "--path /path/to/more/files"
69 # xsltproc is already called with --xinclude
70 # does not work: --xslt-opts "--path $searchpath --nonet $@"
71 dblatex_options = ['-o', module + '.pdf']
72 for i in options.imgdir:
73 dblatex_options += ['-I', i]
74 if len(options.path):
75 dblatex_options += ['-x', '--path ' + ':'.join(options.path)]
76 dblatex_options.append(document)
77 if not options.verbose:
78 pc = subprocess.Popen([config.dblatex, '--help'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
79 (stdo, stde) = pc.communicate()
80 if b'--quiet' in stdo or b'--quiet' in stde:
81 dblatex_options = ['--quiet'] + dblatex_options
82 dbcmd = [config.dblatex] + dblatex_options
83 pc = subprocess.Popen(dbcmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
84 (stde, _) = pc.communicate()
85 for line in stde.decode('utf-8').split('\n'):
86 if not line.strip():
87 continue
88 if 'programlisting or screen' in line:
89 continue
90 # This happens when dblatex has no support for some special chars
91 if 'Missing character' in line:
92 continue
93 print(line)
94 res = pc.returncode
95 elif config.fop != '':
96 if options.verbose:
97 quiet = '0'
98 else:
99 quiet = '1'
100 res = run_xsltproc(options, ['--nonet',
101 '--xinclude',
102 '--stringparam',
103 'gtkdoc.bookname',
104 module,
105 '--stringparam',
106 'gtkdoc.version',
107 config.version,
108 '--stringparam',
109 'chunk.quietly',
110 quiet,
111 '--stringparam',
112 'chunker.output.quiet',
113 quiet,
114 module,
115 document,
116 '-o',
117 module + '.fo',
118 gtkdocdir + '/gtk-doc-fo.xsl',
119 document])
120 # TODO: fop dies too easily :(
121 # res = subprocess.call([config.fop, module + '.fo', module + '.pdf'))
122 fname = module + '.fo'
123 if os.path.exists(fname):
124 os.unlink(fname)
125 else:
126 print("dblatex or fop must be installed to use gtkdoc-mkpdf.")
127 res = 1
129 with open('pdf.stamp', 'w') as h:
130 h.write('timestamp')
131 return res