dblatex/dblatex-0.3.11-python3.patch
Michael J Gruber 740bedade2 port to python3
bz #1737967
2019-09-23 10:52:47 +02:00

2875 lines
102 KiB
Diff

From 49b85799a8f0674ac5eb6f2dfc37b23208d9754a Mon Sep 17 00:00:00 2001
Message-Id: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Tue, 10 Sep 2019 14:33:00 +0200
Subject: [PATCH 01/13] script: insert at tip of module path
scripts/dblatex tries to make sure that it calls the dblatex modules
from its own location. Make it insert the base path at the tip of the
path list, not append, because otherwise installed dblatex modules take
precedence.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
scripts/dblatex | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/dblatex b/scripts/dblatex
index aa199d0..963818f 100755
--- a/scripts/dblatex
+++ b/scripts/dblatex
@@ -3,7 +3,7 @@ import sys
import os
package_base = os.path.join(os.path.dirname(sys.argv[0]), "..")
-sys.path.append(os.path.realpath(os.path.join(package_base, "lib")))
+sys.path.insert(0, os.path.realpath(os.path.join(package_base, "lib")))
from dbtexmf.dblatex import dblatex
dblatex.main(base=package_base)
--
2.23.0.369.g5d0cb2d495
From d08e173591e69aaf223df4a5c5ad60c93b44291c Mon Sep 17 00:00:00 2001
Message-Id: <d08e173591e69aaf223df4a5c5ad60c93b44291c.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Tue, 10 Sep 2019 15:40:01 +0200
Subject: [PATCH 02/13] docs: avoid converts's use of uniconvertor
ImageMagick's convert uses uniconvertor to process figs, which is a
python 2 project with unclear future.
Instead, use fig2dev which is used in other places already, although
differently for the two affected figs:
- pagesetup2.fig is converted to pdf by the Makefile already, using
fig2dev
- processus.eps is a conversion of processus.fig using fig2dev; both are
shipped in-tree
We leave this different treatment as is but avoid convert from the pdf
to png instead of from the fig now.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
docs/Makefile | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/docs/Makefile b/docs/Makefile
index 6e406fb..8f4a355 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -44,12 +44,14 @@ manpagegz: version.xml
@$(MAKE) -C manpage -f ../Makefile dblatex.1.gz
# Build the HTML version of the documentation
-$(HTMLDIRUM)/index.html: manual.xml
+FIGURES=pagesetup2.pdf
+
+$(HTMLDIRUM)/index.html: manual.xml $(FIGURES)
@$(XSLTPROC) --xinclude --param base.dir "'$(HTMLDIRUM)'" \
$(HTML_PARAMS) \
$(XSLPROFH) $<
- convert -trim -rotate 90 processus.fig $(HTMLDIRUM)/processus.png
- convert -trim pagesetup2.fig $(HTMLDIRUM)/pagesetup2.png
+ convert -trim -rotate 90 processus.eps $(HTMLDIRUM)/processus.png
+ convert -trim pagesetup2.pdf $(HTMLDIRUM)/pagesetup2.png
$(CP) *.png tables/*.png $(HTMLDIRUM)/.
$(CP) -r math/figures $(HTMLDIRUM)/.
$(CP) -r $(XSLDBK)/images $(HTMLDIRUM)/.
--
2.23.0.369.g5d0cb2d495
From 8686b219a8bde6539b527d3232f3d8d2795b5beb Mon Sep 17 00:00:00 2001
Message-Id: <8686b219a8bde6539b527d3232f3d8d2795b5beb.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Wed, 11 Sep 2019 15:31:54 +0200
Subject: [PATCH 03/13] 2-3: except Exception as Var
python2 -3 warns about python2 constructs which are deprecated for
python2 because they are incompatible with python3. Replace them to get
as close as possible to a python2+python3 codebase.
First step: 2to3 -f except
Turn "except Exception, Var" into "except Exception as Var".
Note that we treat the entire codebase simultaneously in these steps,
even though parts such as lib/contrib/which will not be used with
python3.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/contrib/which/which.py | 2 +-
lib/dbtexmf/core/confparser.py | 4 ++--
lib/dbtexmf/core/dbtex.py | 14 +++++++-------
setup.py | 2 +-
tools/hgtools/push_remote.py | 2 +-
tools/pdfscan.py | 2 +-
6 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/lib/contrib/which/which.py b/lib/contrib/which/which.py
index 4d28ebd..2edb1ed 100644
--- a/lib/contrib/which/which.py
+++ b/lib/contrib/which/which.py
@@ -280,7 +280,7 @@ def main(argv):
try:
optlist, args = getopt.getopt(argv[1:], 'haVvqp:e:',
['help', 'all', 'version', 'verbose', 'quiet', 'path=', 'exts='])
- except getopt.GetoptError, msg:
+ except getopt.GetoptError as msg:
sys.stderr.write("which: error: %s. Your invocation was: %s\n"\
% (msg, argv))
sys.stderr.write("Try 'which --help'.\n")
diff --git a/lib/dbtexmf/core/confparser.py b/lib/dbtexmf/core/confparser.py
index bf0b931..2b2ad0d 100644
--- a/lib/dbtexmf/core/confparser.py
+++ b/lib/dbtexmf/core/confparser.py
@@ -81,11 +81,11 @@ class DbtexConfig:
def fromfile(self, filename):
try:
self.fromxmlfile(filename)
- except ParseError, e:
+ except ParseError as e:
self.warn("Text configuration files are deprecated. "\
"Use the XML format instead")
self.fromtxtfile(filename)
- except Exception, e:
+ except Exception as e:
raise e
def fromxmlfile(self, filename):
diff --git a/lib/dbtexmf/core/dbtex.py b/lib/dbtexmf/core/dbtex.py
index 92b84f2..0454919 100644
--- a/lib/dbtexmf/core/dbtex.py
+++ b/lib/dbtexmf/core/dbtex.py
@@ -544,13 +544,13 @@ class DbTexCommand:
if options.format:
try:
run.set_format(options.format)
- except Exception, e:
+ except Exception as e:
failed_exit("Error: %s" % e)
# Always set the XSLT (default or not)
try:
run.set_xslt(options.xslt)
- except Exception, e:
+ except Exception as e:
failed_exit("Error: %s" % e)
if options.xslopts:
@@ -575,7 +575,7 @@ class DbTexCommand:
if options.texstyle:
try:
xslparam, texpath = texstyle_parse(options.texstyle)
- except Exception, e:
+ except Exception as e:
failed_exit("Error: %s" % e)
run.xslparams.append(xslparam)
if texpath: run.texinputs.append(texpath)
@@ -630,7 +630,7 @@ class DbTexCommand:
if not(os.path.exists(options.tmpdir)):
try:
os.mkdir(options.tmpdir)
- except Exception, e:
+ except Exception as e:
failed_exit("Error: %s" % e)
run.tmpdir_user = os.path.abspath(options.tmpdir)
@@ -682,14 +682,14 @@ class DbTexCommand:
try:
conf.paths = self.get_config_paths()
conf.fromstyle(options.style)
- except Exception, e:
+ except Exception as e:
failed_exit("Error: %s" % e)
if options.config:
try:
for config in options.config:
conf.fromfile(config)
- except Exception, e:
+ except Exception as e:
failed_exit("Error: %s" % e)
if conf.options:
@@ -735,7 +735,7 @@ class DbTexCommand:
# Try to buid the file
try:
run.compile()
- except Exception, e:
+ except Exception as e:
signal_error(self, e)
failed_exit("Error: %s" % e)
diff --git a/setup.py b/setup.py
index 5af4cfb..d9c241b 100644
--- a/setup.py
+++ b/setup.py
@@ -378,7 +378,7 @@ class Install(install):
self.check_xslt_dependencies()
self.check_util_dependencies()
self.check_latex_dependencies()
- except Exception, e:
+ except Exception as e:
print >>sys.stderr, "Error: %s" % e
sys.exit(1)
--
2.23.0.369.g5d0cb2d495
From 37ba3df507c64759ca099335e6389d05407867da Mon Sep 17 00:00:00 2001
Message-Id: <37ba3df507c64759ca099335e6389d05407867da.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Wed, 11 Sep 2019 15:58:27 +0200
Subject: [PATCH 04/13] 2-3: Key in Dict
2to3 -f has_key
Replace the deprecated Dict.has_key(Key) by Key in Dict.
2to3 also replaces calls to the Modules.has_key() method from
lib/dbtexmf/dblatex/grubber/plugins.py which define the old dict
interface. Replace it by a __contains__() method for the new interface.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/dbtexmf/core/dbtex.py | 2 +-
lib/dbtexmf/core/imagedata.py | 2 +-
lib/dbtexmf/core/txtparser.py | 2 +-
lib/dbtexmf/dblatex/grubber/bibtex.py | 8 ++++----
lib/dbtexmf/dblatex/grubber/index.py | 6 +++---
lib/dbtexmf/dblatex/grubber/logparser.py | 2 +-
lib/dbtexmf/dblatex/grubber/msg.py | 14 +++++++-------
lib/dbtexmf/dblatex/grubber/plugins.py | 14 +++++++-------
lib/dbtexmf/dblatex/grubber/texbuilder.py | 2 +-
lib/dbtexmf/dblatex/grubber/xr-hyper.py | 2 +-
lib/dbtexmf/dblatex/texcodec.py | 2 +-
tools/pdfscan.py | 4 ++--
12 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/lib/dbtexmf/core/dbtex.py b/lib/dbtexmf/core/dbtex.py
index 0454919..ace803c 100644
--- a/lib/dbtexmf/core/dbtex.py
+++ b/lib/dbtexmf/core/dbtex.py
@@ -395,7 +395,7 @@ class DbTex:
self.update_texinputs()
# For easy debug
- if self.debug and os.environ.has_key("TEXINPUTS"):
+ if self.debug and "TEXINPUTS" in os.environ:
if os.name != "nt":
f = file("env_tex", "w")
f.write("TEXINPUTS=%s\nexport TEXINPUTS\n" % \
diff --git a/lib/dbtexmf/core/imagedata.py b/lib/dbtexmf/core/imagedata.py
index ebbd5c7..e8bbccd 100644
--- a/lib/dbtexmf/core/imagedata.py
+++ b/lib/dbtexmf/core/imagedata.py
@@ -273,7 +273,7 @@ class Imagedata:
return fig
# Check if this image has been already converted
- if self.converted.has_key(realfig):
+ if realfig in self.converted:
self.log.info("Image '%s' already converted as %s" % \
(fig, self.converted[realfig]))
return self.converted[realfig]
diff --git a/lib/dbtexmf/core/txtparser.py b/lib/dbtexmf/core/txtparser.py
index 709d877..aab291f 100644
--- a/lib/dbtexmf/core/txtparser.py
+++ b/lib/dbtexmf/core/txtparser.py
@@ -96,7 +96,7 @@ class TextConfig:
continue
key = m.group(1)
value = m.group(2).strip()
- if not self.conf_mapping.has_key(key):
+ if key not in self.conf_mapping:
continue
o = self.conf_mapping[key]
diff --git a/lib/dbtexmf/dblatex/grubber/bibtex.py b/lib/dbtexmf/dblatex/grubber/bibtex.py
index 7615cfc..1722d69 100644
--- a/lib/dbtexmf/dblatex/grubber/bibtex.py
+++ b/lib/dbtexmf/dblatex/grubber/bibtex.py
@@ -111,7 +111,7 @@ class BibTex(TexModule):
"""
if self.style:
old_bst = self.style + ".bst"
- if exists(old_bst) and self.doc.sources.has_key(old_bst):
+ if exists(old_bst) and old_bst in self.doc.sources:
del self.doc.sources[old_bst]
self.style = style
@@ -207,7 +207,7 @@ class BibTex(TexModule):
m = re_citation.match(line)
if m:
cite = m.group("cite")
- if not cites.has_key(cite):
+ if cite not in cites:
last = last + 1
cites[cite] = last
continue
@@ -400,9 +400,9 @@ class BibTex(TexModule):
file = d["file"]
if file[-4:] == ".bib":
file = file[:-4]
- if self.db.has_key(file):
+ if file in self.db:
d["file"] = self.db[file]
- elif self.db.has_key(file + ".bib"):
+ elif file + ".bib" in self.db:
d["file"] = self.db[file + ".bib"]
yield d
last_line = line
diff --git a/lib/dbtexmf/dblatex/grubber/index.py b/lib/dbtexmf/dblatex/grubber/index.py
index 2194b02..f444e2f 100644
--- a/lib/dbtexmf/dblatex/grubber/index.py
+++ b/lib/dbtexmf/dblatex/grubber/index.py
@@ -514,7 +514,7 @@ class Module (TexModule):
index = self.indices[name] = Index(self.doc, idx, ind, ilg)
for cmd in self.defaults:
index.command(*cmd)
- if self.commands.has_key(name):
+ if name in self.commands:
for cmd in self.commands[name]:
index.command(*cmd)
@@ -548,9 +548,9 @@ class Module (TexModule):
self.defaults.append([cmd, args])
names = indices.keys()
for index in names:
- if indices.has_key(index):
+ if index in indices:
indices[index].command(cmd, args[1:])
- elif self.commands.has_key(index):
+ elif index in self.commands:
self.commands[index].append([cmd, args])
else:
self.commands[index] = [[cmd, args]]
diff --git a/lib/dbtexmf/dblatex/grubber/logparser.py b/lib/dbtexmf/dblatex/grubber/logparser.py
index d7a00b9..7e296d7 100644
--- a/lib/dbtexmf/dblatex/grubber/logparser.py
+++ b/lib/dbtexmf/dblatex/grubber/logparser.py
@@ -188,7 +188,7 @@ class LogParser:
m = self.re_ignored.search(error)
if m:
d["file"] = last_file
- if d.has_key("code"):
+ if "code" in d:
del d["code"]
d.update( m.groupdict() )
elif pos[-1] is None:
diff --git a/lib/dbtexmf/dblatex/grubber/msg.py b/lib/dbtexmf/dblatex/grubber/msg.py
index 4ebb38f..0f9a9e7 100644
--- a/lib/dbtexmf/dblatex/grubber/msg.py
+++ b/lib/dbtexmf/dblatex/grubber/msg.py
@@ -66,7 +66,7 @@ class Message (object):
if text[0:13] == "LaTeX Error: ":
text = text[13:]
self._log.error(self.format_pos(info, text))
- if info.has_key("code") and info["code"] and not self.short:
+ if "code" in info and info["code"] and not self.short:
self._log.error(self.format_pos(info,
_("leading text: ") + info["code"]))
@@ -100,24 +100,24 @@ class Message (object):
the dictionary given as first argument.
"""
if len(self.pos) > 0:
- if where is None or not where.has_key("file"):
+ if where is None or "file" not in where:
where = self.pos[-1]
elif where is None or where == {}:
return text
- if where.has_key("file") and where["file"] is not None:
+ if "file" in where and where["file"] is not None:
pos = self.simplify(where["file"])
- if where.has_key("line") and where["line"]:
+ if "line" in where and where["line"]:
pos = "%s:%d" % (pos, int(where["line"]))
- if where.has_key("last"):
+ if "last" in where:
if where["last"] != where["line"]:
pos = "%s-%d" % (pos, int(where["last"]))
pos = pos + ": "
else:
pos = ""
- if where.has_key("page"):
+ if "page" in where:
text = "%s (page %d)" % (text, int(where["page"]))
- if where.has_key("pkg"):
+ if "pkg" in where:
text = "[%s] %s" % (where["pkg"], text)
return pos + text
diff --git a/lib/dbtexmf/dblatex/grubber/plugins.py b/lib/dbtexmf/dblatex/grubber/plugins.py
index f72bd13..72f986d 100644
--- a/lib/dbtexmf/dblatex/grubber/plugins.py
+++ b/lib/dbtexmf/dblatex/grubber/plugins.py
@@ -106,7 +106,7 @@ class Plugins (object):
dictionary. Return 0 if no module was found, 1 if a module was found
and loaded, and 2 if the module was found but already loaded.
"""
- if self.modules.has_key(name):
+ if name in self.modules:
return 2
try:
file, path, descr = imp.find_module(name, [""])
@@ -151,11 +151,11 @@ class Modules (Plugins):
"""
return self.objects[name]
- def has_key (self, name):
+ def __contains__(self, name):
"""
Check if a given module is loaded.
"""
- return self.objects.has_key(name)
+ return name in self.objects
def register (self, name, dict={}):
"""
@@ -165,7 +165,7 @@ class Modules (Plugins):
delayed commands for this module. The dictionary describes the
command that caused the registration.
"""
- if self.has_key(name):
+ if name in self:
msg.debug(_("module %s already registered") % name)
return 2
@@ -191,7 +191,7 @@ class Modules (Plugins):
# Run any delayed commands.
- if self.commands.has_key(name):
+ if name in self.commands:
for (cmd, args, vars) in self.commands[name]:
msg.push_pos(vars)
try:
@@ -219,10 +219,10 @@ class Modules (Plugins):
Send a command to a particular module. If this module is not loaded,
store the command so that it will be sent when the module is register.
"""
- if self.objects.has_key(mod):
+ if mod in self.objects:
self.objects[mod].command(cmd, args)
else:
- if not self.commands.has_key(mod):
+ if mod not in self.commands:
self.commands[mod] = []
self.commands[mod].append((cmd, args, self.env.vars.copy()))
diff --git a/lib/dbtexmf/dblatex/grubber/texbuilder.py b/lib/dbtexmf/dblatex/grubber/texbuilder.py
index bcb02ba..8d4f35b 100644
--- a/lib/dbtexmf/dblatex/grubber/texbuilder.py
+++ b/lib/dbtexmf/dblatex/grubber/texbuilder.py
@@ -90,7 +90,7 @@ class LatexBuilder:
self.tex.prepare()
# Set the index configuration
- if self.tex.modules.has_key("makeidx"):
+ if "makeidx" in self.tex.modules:
idx = self.tex.modules["makeidx"]
if self.index.style: idx.do_style(self.index.style)
if self.index.tool: idx.do_tool(self.index.tool)
diff --git a/lib/dbtexmf/dblatex/grubber/xr-hyper.py b/lib/dbtexmf/dblatex/grubber/xr-hyper.py
index d7bee5c..f8541bc 100644
--- a/lib/dbtexmf/dblatex/grubber/xr-hyper.py
+++ b/lib/dbtexmf/dblatex/grubber/xr-hyper.py
@@ -23,7 +23,7 @@ class Module(TexModule):
# remember the engine used to build the main latex document
self.texmodules = []
for m in ("pdftex", "xetex"):
- if doc.modules.has_key(m):
+ if m in doc.modules:
self.texmodules.append(m)
# want to track each external document whose .aux is required
diff --git a/lib/dbtexmf/dblatex/texcodec.py b/lib/dbtexmf/dblatex/texcodec.py
index b03e36c..fff8b4d 100644
--- a/lib/dbtexmf/dblatex/texcodec.py
+++ b/lib/dbtexmf/dblatex/texcodec.py
@@ -63,7 +63,7 @@ class TexCodec:
self.charmap = {}
return
- if not(tex_handler_installed.has_key(self._errors)):
+ if not(self._errors in tex_handler_installed):
f = self.build_error_func(pre, post, errors)
codecs.register_error(self._errors, f)
tex_handler_installed[self._errors] = f
--
2.23.0.369.g5d0cb2d495
From 641bdd6a728f158822cee2caa8e71c205d4d9f65 Mon Sep 17 00:00:00 2001
Message-Id: <641bdd6a728f158822cee2caa8e71c205d4d9f65.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Wed, 11 Sep 2019 16:45:29 +0200
Subject: [PATCH 05/13] 2-3: escape (in)sanity
Unnecessary escape like "\i" produce a
DeprecationWarning: bad escape
because they will result in unwanted results once "\c" means "c" for a c
which needs no escape, or once "\c" becomes an actual escape. Even now,
something like "\i\n" is hard to read (one literal slash, one escape
char slash).
Mark those strings as raw strings where necessary.
In fact, regular expressions for the re module should always be raw
strings for readability reasons; I did not do any such pure style fixes.
But note that many occurences of "\n" in regular patterns work
(by chance?) because it makes no difference whether python parses this
control sequence and passes a new line in the string to re, or python
passes this control sequence unaltered to re and re parses it.
Also, passing a raw string to re still means that a bad escape (non-re
escape) needs to be escaped from re to be on the safe side.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/dbtexmf/core/sgmlxml.py | 6 +--
lib/dbtexmf/core/txtparser.py | 2 +-
lib/dbtexmf/dblatex/grubber/index.py | 8 ++--
lib/dbtexmf/dblatex/grubber/logparser.py | 4 +-
lib/dbtexmf/dblatex/grubber/pdftex.py | 2 +-
lib/dbtexmf/dblatex/texcodec.py | 2 +-
setup.py | 2 +-
tools/hgtools/push_remote.py | 12 ++---
tools/pdfscan.py | 58 +++++++++++------------
10 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/lib/dbtexmf/core/sgmlxml.py b/lib/dbtexmf/core/sgmlxml.py
index 30e6b84..54f6f1a 100644
--- a/lib/dbtexmf/core/sgmlxml.py
+++ b/lib/dbtexmf/core/sgmlxml.py
@@ -19,7 +19,7 @@ class Osx:
def replace_entities(self, entfile, mapfile, outfile=None):
# Find out the SDATA entities to replace
- re_ent = re.compile('<!ENTITY +([^\s]+) +"?\[([^\s"]+) *\]"?>')
+ re_ent = re.compile(r'<!ENTITY +([^\s]+) +"?\[([^\s"]+) *\]"?>')
f = open(entfile)
lines = f.readlines()
f.close()
@@ -34,7 +34,7 @@ class Osx:
self.log.debug("Entities to map: %s" % ents)
# Now, get their Unicode mapping
- entpat = "^(%s)\s+[^\s]+\s+0(x[^\s]+)" % "|".join([x for x, y in ents])
+ entpat = r"^(%s)\s+[^\s]+\s+0(x[^\s]+)" % "|".join([x for x, y in ents])
re_map = re.compile(entpat)
entmap = []
f = open(mapfile)
@@ -47,7 +47,7 @@ class Osx:
entdict = {}
for ent, uval in entmap:
entdict[ent] = \
- (re.compile('<!ENTITY\s+%s\s+"?\[[^\]]+\]"?\s*>' % ent),
+ (re.compile(r'<!ENTITY\s+%s\s+"?\[[^\]]+\]"?\s*>' % ent),
'<!ENTITY %s "&#%s;">' % (ent, uval))
nlines = []
diff --git a/lib/dbtexmf/core/txtparser.py b/lib/dbtexmf/core/txtparser.py
index aab291f..d7189cb 100644
--- a/lib/dbtexmf/core/txtparser.py
+++ b/lib/dbtexmf/core/txtparser.py
@@ -79,7 +79,7 @@ class TextConfig:
def __init__(self):
self._options = []
- self.reparam = re.compile("^\s*([^:=\s]+)\s*:\s*(.*)")
+ self.reparam = re.compile(r"^\s*([^:=\s]+)\s*:\s*(.*)")
def options(self):
return self._options
diff --git a/lib/dbtexmf/dblatex/grubber/index.py b/lib/dbtexmf/dblatex/grubber/index.py
index f444e2f..221a291 100644
--- a/lib/dbtexmf/dblatex/grubber/index.py
+++ b/lib/dbtexmf/dblatex/grubber/index.py
@@ -218,8 +218,8 @@ class Xindy:
if "WARNING" in block:
check_next_block = True
elif check_next_block:
- m = re.search("Found.*?-range .*"\
- "Location-reference is \d+ in keyword \((.*)\)",
+ m = re.search(r"Found.*?-range .*"\
+ r"Location-reference is \d+ in keyword \((.*)\)",
block, re.M|re.DOTALL)
if m: self.invalid_index_ranges.append(Indexentry(m.group(1)))
check_next_block = False
@@ -264,7 +264,7 @@ class Indexentry:
"""
Index entry wrapper from idxfile. Its role is to detect range anomalies
"""
- _re_entry = re.compile("\indexentry{(.*)\|([\(\)]?).*}{(\d+)}", re.DOTALL)
+ _re_entry = re.compile(r"\\indexentry{(.*)\|([\(\)]?).*}{(\d+)}", re.DOTALL)
def __init__(self, index_key):
self.index_key = index_key
@@ -493,7 +493,7 @@ class Index(TexModule):
os.unlink(file)
re_newindex = re.compile(" *{(?P<idx>[^{}]*)} *{(?P<ind>[^{}]*)}")
-re_optarg = re.compile("\((?P<list>[^()]*)\) *")
+re_optarg = re.compile(r"\((?P<list>[^()]*)\) *")
class Module (TexModule):
def __init__ (self, doc, dict):
diff --git a/lib/dbtexmf/dblatex/grubber/logparser.py b/lib/dbtexmf/dblatex/grubber/logparser.py
index 7e296d7..95b77a2 100644
--- a/lib/dbtexmf/dblatex/grubber/logparser.py
+++ b/lib/dbtexmf/dblatex/grubber/logparser.py
@@ -21,12 +21,12 @@ class LogParser:
re_loghead = re.compile("This is [0-9a-zA-Z-]*(TeX|Omega)")
re_rerun = re.compile(
"(LaTeX|Package longtable|Package bibtopic) Warning:.*Rerun")
- re_rerun2 = re.compile("\(Changebar\).*Rerun")
+ re_rerun2 = re.compile(r"\(Changebar\).*Rerun")
re_file = re.compile("(\\((?P<file>[^ \n\t(){}]*)|\\))")
re_badbox = re.compile(r"(Ov|Und)erfull \\[hv]box ")
re_line = re.compile(r"(l\.(?P<line>[0-9]+)( (?P<code>.*))?$|<\*>)")
re_cseq = re.compile(r".*(?P<seq>\\[^ ]*) ?$")
- re_page = re.compile("\[(?P<num>[0-9]+)\]")
+ re_page = re.compile(r"\[(?P<num>[0-9]+)\]")
re_atline = re.compile(
"( detected| in paragraph)? at lines? (?P<line>[0-9]*)(--(?P<last>[0-9]*))?")
re_reference = re.compile("LaTeX Warning: Reference `(?P<ref>.*)' \
diff --git a/lib/dbtexmf/dblatex/grubber/pdftex.py b/lib/dbtexmf/dblatex/grubber/pdftex.py
index b10b2e2..73e3785 100644
--- a/lib/dbtexmf/dblatex/grubber/pdftex.py
+++ b/lib/dbtexmf/dblatex/grubber/pdftex.py
@@ -73,7 +73,7 @@ class Module (TexModule):
# Grab the major version number
p = Popen("pdflatex -version", shell=True, stdout=PIPE)
data = p.communicate()[0]
- m = re.search("pdfTeX.*3.14[^-]*-(\d*.\d*)", data, re.M)
+ m = re.search(r"pdfTeX.*3.14[^-]*-(\d*.\d*)", data, re.M)
if not(m):
return ""
else:
diff --git a/lib/dbtexmf/dblatex/texcodec.py b/lib/dbtexmf/dblatex/texcodec.py
index fff8b4d..915efd2 100644
--- a/lib/dbtexmf/dblatex/texcodec.py
+++ b/lib/dbtexmf/dblatex/texcodec.py
@@ -94,7 +94,7 @@ class LatexCodec(TexCodec):
self.texres = (
# Kind of normalize
- (re.compile("^[\s\n]*$"), r" "),
+ (re.compile(r"^[\s\n]*$"), r" "),
# TeX escapes (the order is important)
(re.compile(r"([{}%_^$&#])"), r"\\\1"),
# '<' and '>' in the list to avoid french quotation mark symptoms
diff --git a/setup.py b/setup.py
index d9c241b..e83dcc2 100644
--- a/setup.py
+++ b/setup.py
@@ -451,7 +451,7 @@ class InstallData(install_data):
# Grab the value from package version
d = open(hyper_sty).read()
- m = re.search("\\ProvidesPackage{hyperref}\s+\[(\d+)", d, re.M)
+ m = re.search(r"\\ProvidesPackage{hyperref}\s+\[(\d+)", d, re.M)
if not(m):
return
year = m.group(1)
--
2.23.0.369.g5d0cb2d495
From 910d5c7eb9dcb82fc981ccba9a9c723b4da4dfc4 Mon Sep 17 00:00:00 2001
Message-Id: <910d5c7eb9dcb82fc981ccba9a9c723b4da4dfc4.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Thu, 12 Sep 2019 16:34:38 +0200
Subject: [PATCH 06/13] 2-3: print as a function
2to3 -f print
This converts all print statements to use the function form. Python 2
can use this with the help of a __future__ import.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/contrib/debian/errorhandler.py | 28 ++++----
lib/contrib/which/which.py | 10 +--
lib/dbtexmf/core/confparser.py | 4 +-
lib/dbtexmf/core/dbtex.py | 4 +-
lib/dbtexmf/core/error.py | 4 +-
lib/dbtexmf/dblatex/grubber/maker.py | 4 +-
lib/dbtexmf/dblatex/grubber/msg.py | 6 +-
lib/dbtexmf/dblatex/texcodec.py | 4 +-
lib/dbtexmf/dblatex/texhyphen.py | 6 +-
lib/dbtexmf/dblatex/xetex/fcfallback.py | 6 +-
lib/dbtexmf/dblatex/xetex/fsencoder.py | 4 +-
lib/dbtexmf/dblatex/xetex/test1.py | 4 +-
setup.py | 30 ++++----
tools/cvstools/cvsext.py | 10 +--
tools/cvstools/cvsgrab | 12 ++--
tools/cvstools/cvssynch | 14 ++--
tools/dblatex_config.py | 4 +-
tools/hgtools/hgpatch.py | 4 +-
tools/hgtools/hgset_fix.py | 25 +++----
tools/hgtools/push_remote.py | 20 +++---
tools/hgtools/run_command.py | 8 ++-
tools/paramcheck.py | 14 ++--
tools/pdfscan.py | 92 +++++++++++++------------
tools/utfdump.py | 6 +-
24 files changed, 185 insertions(+), 138 deletions(-)
diff --git a/lib/contrib/debian/errorhandler.py b/lib/contrib/debian/errorhandler.py
index 4faee90..82093a2 100644
--- a/lib/contrib/debian/errorhandler.py
+++ b/lib/contrib/debian/errorhandler.py
@@ -3,6 +3,8 @@
#
# Author: Andreas Hoenen
#
+from __future__ import print_function
+
import subprocess
import sys
import apt
@@ -88,7 +90,7 @@ class DebianHandler(ErrorHandler):
warn_msgs.append('For image conversion Debian package inkscape is'
+ ' needed')
if warn_msgs:
- print >> sys.stderr, "\n" + "\n".join(warn_msgs) + "\n"
+ print("\n" + "\n".join(warn_msgs) + "\n", file=sys.stderr)
return True
else:
return False
@@ -119,11 +121,11 @@ class DebianHandler(ErrorHandler):
nulldev1.close()
if rc == 3 or rc == 4:
- print >> sys.stderr
- print >> sys.stderr, 'A possible reason for transformation',
- print >> sys.stderr, 'failure is invalid DocBook'
- print >> sys.stderr, '(as reported by xmllint)'
- print >> sys.stderr
+ print(file=sys.stderr)
+ print('A possible reason for transformation', end=' ', file=sys.stderr)
+ print('failure is invalid DocBook', file=sys.stderr)
+ print('(as reported by xmllint)', file=sys.stderr)
+ print(file=sys.stderr)
return True
else:
return False
@@ -157,7 +159,7 @@ class DebianHandler(ErrorHandler):
warn_msgs.append('For utf8 encoding Debian package '
+ debian_pkg + ' is needed')
if warn_msgs:
- print >> sys.stderr, "\n" + "\n".join(warn_msgs) + "\n"
+ print("\n" + "\n".join(warn_msgs) + "\n", file=sys.stderr)
return True
else:
return False
@@ -182,12 +184,12 @@ class DebianHandler(ErrorHandler):
for log_entry in obj.runtex.texer.tex.log.get_errors():
if (log_entry['text']
== r'Undefined control sequence \cyrchar.'):
- print >> sys.stderr
- print >> sys.stderr, 'Transformation failure',
- print >> sys.stderr, 'might be caused by handling a',
- print >> sys.stderr, 'cyrillic document'
- print >> sys.stderr, 'without the XeTeX backend'
- print >> sys.stderr
+ print(file=sys.stderr)
+ print('Transformation failure', end=' ', file=sys.stderr)
+ print('might be caused by handling a', end=' ', file=sys.stderr)
+ print('cyrillic document', file=sys.stderr)
+ print('without the XeTeX backend', file=sys.stderr)
+ print(file=sys.stderr)
return True
except:
pass
diff --git a/lib/contrib/which/which.py b/lib/contrib/which/which.py
index 2edb1ed..3b98f9e 100644
--- a/lib/contrib/which/which.py
+++ b/lib/contrib/which/which.py
@@ -5,6 +5,8 @@
# Trent Mick (TrentM@ActiveState.com)
# Home:
# http://trentm.com/projects/which/
+from __future__ import print_function
+
r"""Find the full path to commands.
@@ -287,10 +289,10 @@ def main(argv):
return 1
for opt, optarg in optlist:
if opt in ('-h', '--help'):
- print _cmdlnUsage
+ print(_cmdlnUsage)
return 0
elif opt in ('-V', '--version'):
- print "which %s" % __version__
+ print("which %s" % __version__)
return 0
elif opt in ('-a', '--all'):
all = 1
@@ -318,9 +320,9 @@ def main(argv):
nmatches = 0
for match in whichgen(arg, path=altpath, verbose=verbose, exts=exts):
if verbose:
- print "%s (%s)" % match
+ print("%s (%s)" % match)
else:
- print match
+ print(match)
nmatches += 1
if not all:
break
diff --git a/lib/dbtexmf/core/confparser.py b/lib/dbtexmf/core/confparser.py
index 2b2ad0d..cf3475a 100644
--- a/lib/dbtexmf/core/confparser.py
+++ b/lib/dbtexmf/core/confparser.py
@@ -1,3 +1,5 @@
+from __future__ import print_function
+
import os
import sys
from xml.etree.ElementTree import ParseError
@@ -76,7 +78,7 @@ class DbtexConfig:
self.style_exts = ["", ".xml", ".specs", ".conf"]
def warn(self, text):
- print >>sys.stderr, text
+ print(text, file=sys.stderr)
def fromfile(self, filename):
try:
diff --git a/lib/dbtexmf/core/dbtex.py b/lib/dbtexmf/core/dbtex.py
index ace803c..a2b5c04 100644
--- a/lib/dbtexmf/core/dbtex.py
+++ b/lib/dbtexmf/core/dbtex.py
@@ -2,6 +2,8 @@
# DbTex base class handling the compilation of a DocBook file via
# XSL Transformation and some TeX engine compilation.
#
+from __future__ import print_function
+
import sys
import os
import re
@@ -665,7 +667,7 @@ class DbTexCommand:
if options.version:
version = run.get_version()
- print "%s version %s" % (self.prog, version)
+ print("%s version %s" % (self.prog, version))
if not(args):
sys.exit(0)
diff --git a/lib/dbtexmf/core/error.py b/lib/dbtexmf/core/error.py
index 4bf44ee..2d71599 100644
--- a/lib/dbtexmf/core/error.py
+++ b/lib/dbtexmf/core/error.py
@@ -4,6 +4,8 @@
# error handler.
# - A general API.
#
+from __future__ import print_function
+
import sys
import traceback
@@ -49,7 +51,7 @@ def signal_error(*args, **kwargs):
def failure_track(msg):
global _dump_stack
- print >>sys.stderr, (msg)
+ print((msg), file=sys.stderr)
if _dump_stack:
traceback.print_exc()
diff --git a/lib/dbtexmf/dblatex/grubber/maker.py b/lib/dbtexmf/dblatex/grubber/maker.py
index 14408f8..8a1faf5 100644
--- a/lib/dbtexmf/dblatex/grubber/maker.py
+++ b/lib/dbtexmf/dblatex/grubber/maker.py
@@ -1,5 +1,7 @@
# This file is part of Rubber and thus covered by the GPL
# (c) Emmanuel Beffara, 2002--2006
+from __future__ import print_function
+
"""
This module contains all the classes used to manage the building
dependencies.
@@ -81,7 +83,7 @@ class Depend (object): #{{{2
on this one have to be remade)
"""
if self.making:
- print "FIXME: cyclic make"
+ print("FIXME: cyclic make")
return 1
self.making = 1
diff --git a/lib/dbtexmf/dblatex/grubber/msg.py b/lib/dbtexmf/dblatex/grubber/msg.py
index 0f9a9e7..6780bda 100644
--- a/lib/dbtexmf/dblatex/grubber/msg.py
+++ b/lib/dbtexmf/dblatex/grubber/msg.py
@@ -1,5 +1,7 @@
# This file is part of Rubber and thus covered by the GPL
# (c) Emmanuel Beffara, 2002--2006
+from __future__ import print_function
+
"""
This module defines the messages diplay class, and creates the application-wide
msg object.
@@ -37,9 +39,9 @@ class Message (object):
self.stdout = None
def write_stdout(self, text, level=0):
- print text
+ print(text)
def write_stderr(self, text, level=0):
- print >>sys.stderr, text
+ print(text, file=sys.stderr)
def push_pos (self, pos):
self.pos.append(pos)
diff --git a/lib/dbtexmf/dblatex/texcodec.py b/lib/dbtexmf/dblatex/texcodec.py
index 915efd2..aa03470 100644
--- a/lib/dbtexmf/dblatex/texcodec.py
+++ b/lib/dbtexmf/dblatex/texcodec.py
@@ -2,6 +2,8 @@
# The Latex Codec handles the encoding from UFT-8 text to latin1
# latex compatible text.
#
+from __future__ import print_function
+
import re
import codecs
import unient
@@ -21,7 +23,7 @@ def latex_char_replace(exc, pre, post, name):
try:
l.append(unient.unicode_map[ord(c)])
except KeyError:
- print "Missing character &#x%x;" % ord(c)
+ print("Missing character &#x%x;" % ord(c))
l.append(u"\&\#x%x;" % ord(c))
if post: l.append(post)
n = n + 1
diff --git a/lib/dbtexmf/dblatex/texhyphen.py b/lib/dbtexmf/dblatex/texhyphen.py
index 3d784d2..953af08 100644
--- a/lib/dbtexmf/dblatex/texhyphen.py
+++ b/lib/dbtexmf/dblatex/texhyphen.py
@@ -2,6 +2,8 @@
# dblatex - Hyphenation classes to provide smart hyphenation of path like
# strings
#
+from __future__ import print_function
+
import re
class Hyphenator:
@@ -96,5 +98,5 @@ if __name__ == "__main__":
url = "http://www.fg/foobar fun#fght/fkkkf.tz?id=123"
h1 = BasicHyphenator()
h2 = UrlHyphenator()
- print h1.hyphenate(url)
- print h2.hyphenate(url)
+ print(h1.hyphenate(url))
+ print(h2.hyphenate(url))
diff --git a/lib/dbtexmf/dblatex/xetex/fcfallback.py b/lib/dbtexmf/dblatex/xetex/fcfallback.py
index dea9ea2..c4c82c8 100644
--- a/lib/dbtexmf/dblatex/xetex/fcfallback.py
+++ b/lib/dbtexmf/dblatex/xetex/fcfallback.py
@@ -1,3 +1,5 @@
+from __future__ import print_function
+
from fontspec import FontSpec
from fcmanager import FcManager
@@ -54,8 +56,8 @@ class FcFallbackFontSpec(DefaultFontSpec):
for fontspec in self.fontspecs:
if fontspec in self.fcmissed:
- print "Specified font '%s' is missing in the system!" % \
- (fontspec.mainfont())
+ print("Specified font '%s' is missing in the system!" % \
+ (fontspec.mainfont()))
continue
fcfont = self.fccache.get(fontspec.mainfont()) or \
diff --git a/lib/dbtexmf/dblatex/xetex/fsencoder.py b/lib/dbtexmf/dblatex/xetex/fsencoder.py
index 9960bbe..633e704 100644
--- a/lib/dbtexmf/dblatex/xetex/fsencoder.py
+++ b/lib/dbtexmf/dblatex/xetex/fsencoder.py
@@ -1,6 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time-stamp: <2008-06-23 22:21:26 ah>
+from __future__ import print_function
+
"""
Provide an encoder for a font specification configuration: the encoder is fed
@@ -68,7 +70,7 @@ class FontSpecEncoder:
"""
fontspec = self._cur_fontspec or self._conf.default_fontspec
- print >>sys.stderr, "Current:", fontspec.id
+ print("Current:", fontspec.id, file=sys.stderr)
fontspec = fontspec.match(char)
while not(fontspec):
leaf = self._ref_stack.pop()
diff --git a/setup.py b/setup.py
index e83dcc2..ad33190 100644
--- a/setup.py
+++ b/setup.py
@@ -3,6 +3,8 @@
#
# dblatex python setup script - See the COPYRIGHT
#
+from __future__ import print_function
+
import os
import sys
import re
@@ -83,7 +85,7 @@ os.environ["SGML_CATALOG_FILES"] = cat
self._catalogs = install.catalogs
self._style = install.style
self._use_py_path = install.use_python_path
- print self._package_base
+ print(self._package_base)
# Build the command line script
self.build_script()
@@ -260,19 +262,19 @@ class Install(install):
# First, check non critical graphic tools
found, missed = find_programs(("epstopdf", "convert", "fig2dev"))
for util in found:
- print "+checking %s... yes" % util
+ print("+checking %s... yes" % util)
for util in missed:
- print "+checking %s... no" % util
+ print("+checking %s... no" % util)
if missed:
- print("warning: not found: %s" % ", ".join(missed))
+ print(("warning: not found: %s" % ", ".join(missed)))
# Now, be serious
found, missed = find_programs(("latex", "makeindex",
"pdflatex", "kpsewhich"))
for util in found:
- print "+checking %s... yes" % util
+ print("+checking %s... yes" % util)
for util in missed:
- print "+checking %s... no" % util
+ print("+checking %s... no" % util)
if missed:
raise OSError("not found: %s" % ", ".join(missed))
@@ -292,21 +294,21 @@ class Install(install):
for (mod, deplist) in deplists:
if not(deplist):
xslt_found.append(mod)
- print "+checking XSLT %s... yes" % mod
+ print("+checking XSLT %s... yes" % mod)
continue
found, missed = find_programs(deplist)
if missed:
xslt_missed.append(mod)
- print "+checking XSLT %s... no (missing %s)" % \
- (mod, ", ".join(missed))
+ print("+checking XSLT %s... no (missing %s)" % \
+ (mod, ", ".join(missed)))
else:
xslt_found.append(mod)
- print "+checking XSLT %s... yes" % mod
+ print("+checking XSLT %s... yes" % mod)
if not(xslt_found):
raise OSError("XSLT not installed: %s" % ", ".join(xslt_missed))
elif xslt_missed:
- print "warning: XSLT not found: %s" % ", ".join(xslt_missed)
+ print("warning: XSLT not found: %s" % ", ".join(xslt_missed))
def check_latex_dependencies(self):
# Find the Latex files from the package
@@ -353,7 +355,7 @@ class Install(install):
if sty in own_stys:
status += "found in package"
found_stys.append(sty)
- print status
+ print(status)
continue
stypath = kpsewhich("%s.sty" % sty)
if stypath:
@@ -362,7 +364,7 @@ class Install(install):
else:
status += "no"
mis_stys.append(sty)
- print status
+ print(status)
if mis_stys:
raise OSError("not found: %s" % ", ".join(mis_stys))
@@ -379,7 +381,7 @@ class Install(install):
self.check_util_dependencies()
self.check_latex_dependencies()
except Exception as e:
- print >>sys.stderr, "Error: %s" % e
+ print("Error: %s" % e, file=sys.stderr)
sys.exit(1)
if db: db.adapt_paths()
--
2.23.0.369.g5d0cb2d495
From 251a3158eb469d4979adffd7fb3b8aea3e8609bb Mon Sep 17 00:00:00 2001
Message-Id: <251a3158eb469d4979adffd7fb3b8aea3e8609bb.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Thu, 12 Sep 2019 22:29:36 +0200
Subject: [PATCH 07/13] 2-3: relative imports
Adjust relative imports so that under python 2 they are declared to be
relative, and under python 3 they are still valid.
We prefer the short form ".module" over the full "package.subdir.module"
because it is closer to the original. Grubber modules need the full form
because of the way they are called.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/dbtexmf/core/confparser.py | 10 +++++-----
lib/dbtexmf/core/imagedata.py | 2 +-
lib/dbtexmf/core/xmlparser.py | 2 +-
lib/dbtexmf/dblatex/dblatex.py | 4 ++--
lib/dbtexmf/dblatex/grubber/bibtex.py | 4 ++--
lib/dbtexmf/dblatex/grubber/bibtopic.py | 4 ++--
lib/dbtexmf/dblatex/grubber/dvips.py | 6 +++---
lib/dbtexmf/dblatex/grubber/index.py | 6 +++---
lib/dbtexmf/dblatex/grubber/latex.py | 12 ++++++------
lib/dbtexmf/dblatex/grubber/logparser.py | 2 +-
lib/dbtexmf/dblatex/grubber/makeidx.py | 2 +-
lib/dbtexmf/dblatex/grubber/maker.py | 2 +-
lib/dbtexmf/dblatex/grubber/pdftex.py | 4 ++--
lib/dbtexmf/dblatex/grubber/plugins.py | 2 +-
lib/dbtexmf/dblatex/grubber/ps2pdf.py | 6 +++---
lib/dbtexmf/dblatex/grubber/texbuilder.py | 6 +++---
lib/dbtexmf/dblatex/grubber/util.py | 2 +-
lib/dbtexmf/dblatex/grubber/xetex.py | 2 +-
lib/dbtexmf/dblatex/grubber/xr-hyper.py | 6 +++---
lib/dbtexmf/dblatex/rawlabel.py | 6 +++---
lib/dbtexmf/dblatex/rawparse.py | 4 ++--
lib/dbtexmf/dblatex/rawtex.py | 8 ++++----
lib/dbtexmf/dblatex/rawverb.py | 6 +++---
lib/dbtexmf/dblatex/runtex.py | 2 +-
lib/dbtexmf/dblatex/texcodec.py | 2 +-
lib/dbtexmf/dblatex/xetex/codec.py | 2 +-
lib/dbtexmf/dblatex/xetex/fcfallback.py | 4 ++--
lib/dbtexmf/dblatex/xetex/fsconfig.py | 4 ++--
lib/dbtexmf/dblatex/xetex/fsencoder.py | 4 ++--
lib/dbtexmf/dblatex/xetex/test1.py | 4 ++--
30 files changed, 65 insertions(+), 65 deletions(-)
diff --git a/lib/dbtexmf/core/confparser.py b/lib/dbtexmf/core/confparser.py
index cf3475a..a957078 100644
--- a/lib/dbtexmf/core/confparser.py
+++ b/lib/dbtexmf/core/confparser.py
@@ -3,11 +3,11 @@ from __future__ import print_function
import os
import sys
from xml.etree.ElementTree import ParseError
-from xmlparser import XmlConfig
-from txtparser import TextConfig
-from imagedata import ImageConverterPool, ImageConverter
-from imagedata import ImageFormatPool, FormatRule
-from imagedata import image_setup
+from .xmlparser import XmlConfig
+from .txtparser import TextConfig
+from .imagedata import ImageConverterPool, ImageConverter
+from .imagedata import ImageFormatPool, FormatRule
+from .imagedata import image_setup
from dbtexmf.xslt.xsltconf import XsltCommandPool, XsltEngine
from dbtexmf.xslt import xslt_setup
diff --git a/lib/dbtexmf/core/imagedata.py b/lib/dbtexmf/core/imagedata.py
index e8bbccd..b200baa 100644
--- a/lib/dbtexmf/core/imagedata.py
+++ b/lib/dbtexmf/core/imagedata.py
@@ -5,7 +5,7 @@ import shutil
import logging
import urllib
from dbtexmf.core.error import signal_error
-from commander import CommandRunner
+from .commander import CommandRunner
class ObjectFilter:
"""
diff --git a/lib/dbtexmf/core/xmlparser.py b/lib/dbtexmf/core/xmlparser.py
index 501b7f7..d3556de 100644
--- a/lib/dbtexmf/core/xmlparser.py
+++ b/lib/dbtexmf/core/xmlparser.py
@@ -1,7 +1,7 @@
import os
import re
import xml.etree.ElementTree as ET
-from txtparser import texinputs_parse
+from .txtparser import texinputs_parse
class BaseOption:
def __init__(self, config, optname):
diff --git a/lib/dbtexmf/dblatex/dblatex.py b/lib/dbtexmf/dblatex/dblatex.py
index 0e9ae71..774aefc 100644
--- a/lib/dbtexmf/dblatex/dblatex.py
+++ b/lib/dbtexmf/dblatex/dblatex.py
@@ -7,8 +7,8 @@ import os
from dbtexmf.core.sgmlxml import Osx
from dbtexmf.core.dbtex import DbTex, DbTexCommand
-from rawtex import RawLatex
-from runtex import RunLatex
+from .rawtex import RawLatex
+from .runtex import RunLatex
class DbLatex(DbTex):
diff --git a/lib/dbtexmf/dblatex/grubber/bibtex.py b/lib/dbtexmf/dblatex/grubber/bibtex.py
index 1722d69..f4af7f6 100644
--- a/lib/dbtexmf/dblatex/grubber/bibtex.py
+++ b/lib/dbtexmf/dblatex/grubber/bibtex.py
@@ -21,8 +21,8 @@ import subprocess
#from grubber import _
#from grubber import *
-from msg import _, msg
-from plugins import TexModule
+from dbtexmf.dblatex.grubber.msg import _, msg
+from dbtexmf.dblatex.grubber.plugins import TexModule
re_bibdata = re.compile(r"\\bibdata{(?P<data>.*)}")
re_citation = re.compile(r"\\citation{(?P<cite>.*)}")
diff --git a/lib/dbtexmf/dblatex/grubber/bibtopic.py b/lib/dbtexmf/dblatex/grubber/bibtopic.py
index 4c1ef9f..af36830 100644
--- a/lib/dbtexmf/dblatex/grubber/bibtopic.py
+++ b/lib/dbtexmf/dblatex/grubber/bibtopic.py
@@ -1,6 +1,6 @@
-from plugins import TexModule
-from bibtex import BibTex
+from dbtexmf.dblatex.grubber.plugins import TexModule
+from dbtexmf.dblatex.grubber.bibtex import BibTex
class BibSect(BibTex):
diff --git a/lib/dbtexmf/dblatex/grubber/dvips.py b/lib/dbtexmf/dblatex/grubber/dvips.py
index 83bafa7..43f9326 100644
--- a/lib/dbtexmf/dblatex/grubber/dvips.py
+++ b/lib/dbtexmf/dblatex/grubber/dvips.py
@@ -13,9 +13,9 @@ import os
from os.path import *
import subprocess
-from msg import _ , msg
-from plugins import TexModule
-from maker import Depend
+from dbtexmf.dblatex.grubber.msg import _ , msg
+from dbtexmf.dblatex.grubber.plugins import TexModule
+from dbtexmf.dblatex.grubber.maker import Depend
class Dep (Depend):
def __init__ (self, doc, target, source, node):
diff --git a/lib/dbtexmf/dblatex/grubber/index.py b/lib/dbtexmf/dblatex/grubber/index.py
index 221a291..1f37479 100644
--- a/lib/dbtexmf/dblatex/grubber/index.py
+++ b/lib/dbtexmf/dblatex/grubber/index.py
@@ -45,9 +45,9 @@ import subprocess
import xml.dom.minidom
from subprocess import Popen, PIPE
-from msg import _, msg
-from plugins import TexModule
-from util import md5_file
+from dbtexmf.dblatex.grubber.msg import _, msg
+from dbtexmf.dblatex.grubber.plugins import TexModule
+from dbtexmf.dblatex.grubber.util import md5_file
class Xindy:
diff --git a/lib/dbtexmf/dblatex/grubber/latex.py b/lib/dbtexmf/dblatex/grubber/latex.py
index 1708cd9..26df91c 100644
--- a/lib/dbtexmf/dblatex/grubber/latex.py
+++ b/lib/dbtexmf/dblatex/grubber/latex.py
@@ -11,12 +11,12 @@ import sys
import time
import subprocess
-from msg import _, msg
-from util import Watcher
-from logparser import LogParser
-from texparser import TexParser
-from plugins import Modules
-from maker import Depend
+from dbtexmf.dblatex.grubber.msg import _, msg
+from dbtexmf.dblatex.grubber.util import Watcher
+from dbtexmf.dblatex.grubber.logparser import LogParser
+from dbtexmf.dblatex.grubber.texparser import TexParser
+from dbtexmf.dblatex.grubber.plugins import Modules
+from dbtexmf.dblatex.grubber.maker import Depend
class Latex(Depend):
diff --git a/lib/dbtexmf/dblatex/grubber/logparser.py b/lib/dbtexmf/dblatex/grubber/logparser.py
index 95b77a2..1784770 100644
--- a/lib/dbtexmf/dblatex/grubber/logparser.py
+++ b/lib/dbtexmf/dblatex/grubber/logparser.py
@@ -9,7 +9,7 @@ from __future__ import generators
import re
-from msg import _, msg
+from dbtexmf.dblatex.grubber.msg import _, msg
class LogParser:
"""
diff --git a/lib/dbtexmf/dblatex/grubber/makeidx.py b/lib/dbtexmf/dblatex/grubber/makeidx.py
index d4c5f18..1157832 100644
--- a/lib/dbtexmf/dblatex/grubber/makeidx.py
+++ b/lib/dbtexmf/dblatex/grubber/makeidx.py
@@ -24,7 +24,7 @@ The following directives are provided to specify options for makeindex:
"""
import sys
-from index import Index
+from dbtexmf.dblatex.grubber.index import Index
class Module (Index):
def __init__ (self, doc, dict):
diff --git a/lib/dbtexmf/dblatex/grubber/maker.py b/lib/dbtexmf/dblatex/grubber/maker.py
index 8a1faf5..281f9d2 100644
--- a/lib/dbtexmf/dblatex/grubber/maker.py
+++ b/lib/dbtexmf/dblatex/grubber/maker.py
@@ -10,7 +10,7 @@ import os
import time
import subprocess
-from msg import _, msg
+from dbtexmf.dblatex.grubber.msg import _, msg
class Depend (object): #{{{2
"""
diff --git a/lib/dbtexmf/dblatex/grubber/pdftex.py b/lib/dbtexmf/dblatex/grubber/pdftex.py
index 73e3785..0f9087b 100644
--- a/lib/dbtexmf/dblatex/grubber/pdftex.py
+++ b/lib/dbtexmf/dblatex/grubber/pdftex.py
@@ -14,8 +14,8 @@ import re
import subprocess
from subprocess import Popen, PIPE
-from msg import _, msg
-from plugins import TexModule
+from dbtexmf.dblatex.grubber.msg import _, msg
+from dbtexmf.dblatex.grubber.plugins import TexModule
class Module (TexModule):
diff --git a/lib/dbtexmf/dblatex/grubber/plugins.py b/lib/dbtexmf/dblatex/grubber/plugins.py
index 72f986d..9e333c9 100644
--- a/lib/dbtexmf/dblatex/grubber/plugins.py
+++ b/lib/dbtexmf/dblatex/grubber/plugins.py
@@ -7,7 +7,7 @@ All the modules must be derived from the TexModule class.
import imp
from os.path import *
-from msg import _, msg
+from dbtexmf.dblatex.grubber.msg import _, msg
import sys
diff --git a/lib/dbtexmf/dblatex/grubber/ps2pdf.py b/lib/dbtexmf/dblatex/grubber/ps2pdf.py
index d7e1f33..02dfa60 100644
--- a/lib/dbtexmf/dblatex/grubber/ps2pdf.py
+++ b/lib/dbtexmf/dblatex/grubber/ps2pdf.py
@@ -7,9 +7,9 @@ PostScript to PDF conversion using GhostScript.
import sys
import os
-from msg import _, msg
-from maker import DependShell
-from plugins import TexModule
+from dbtexmf.dblatex.grubber.msg import _, msg
+from dbtexmf.dblatex.grubber.maker import DependShell
+from dbtexmf.dblatex.grubber.plugins import TexModule
class Module (TexModule):
diff --git a/lib/dbtexmf/dblatex/grubber/texbuilder.py b/lib/dbtexmf/dblatex/grubber/texbuilder.py
index 8d4f35b..adce529 100644
--- a/lib/dbtexmf/dblatex/grubber/texbuilder.py
+++ b/lib/dbtexmf/dblatex/grubber/texbuilder.py
@@ -9,9 +9,9 @@ of the rubber internals.
import subprocess
import os
import shlex
-from msg import _, msg
-from maker import Maker
-from latex import Latex
+from dbtexmf.dblatex.grubber.msg import _, msg
+from dbtexmf.dblatex.grubber.maker import Maker
+from dbtexmf.dblatex.grubber.latex import Latex
class IndexBuilder:
diff --git a/lib/dbtexmf/dblatex/grubber/util.py b/lib/dbtexmf/dblatex/grubber/util.py
index fa3bda6..d10dfcf 100644
--- a/lib/dbtexmf/dblatex/grubber/util.py
+++ b/lib/dbtexmf/dblatex/grubber/util.py
@@ -11,7 +11,7 @@ except ImportError:
# Fallback for python 2.4:
import md5 as hashlib
import os
-from msg import _, msg
+from dbtexmf.dblatex.grubber.msg import _, msg
def md5_file(fname):
diff --git a/lib/dbtexmf/dblatex/grubber/xetex.py b/lib/dbtexmf/dblatex/grubber/xetex.py
index f39a941..63bfe9d 100644
--- a/lib/dbtexmf/dblatex/grubber/xetex.py
+++ b/lib/dbtexmf/dblatex/grubber/xetex.py
@@ -2,7 +2,7 @@
XeTeX support for Rubber.
"""
-from plugins import TexModule
+from dbtexmf.dblatex.grubber.plugins import TexModule
class Module (TexModule):
def __init__ (self, doc, dict):
diff --git a/lib/dbtexmf/dblatex/grubber/xr-hyper.py b/lib/dbtexmf/dblatex/grubber/xr-hyper.py
index f8541bc..36f4761 100644
--- a/lib/dbtexmf/dblatex/grubber/xr-hyper.py
+++ b/lib/dbtexmf/dblatex/grubber/xr-hyper.py
@@ -9,9 +9,9 @@ file, so this support package registers these files as dependencies.
"""
import os
-from msg import _, msg
-from plugins import TexModule
-from latex import Latex
+from dbtexmf.dblatex.grubber.msg import _, msg
+from dbtexmf.dblatex.grubber.plugins import TexModule
+from dbtexmf.dblatex.grubber.latex import Latex
class Module(TexModule):
def __init__ (self, doc, dict):
diff --git a/lib/dbtexmf/dblatex/rawlabel.py b/lib/dbtexmf/dblatex/rawlabel.py
index d78f189..322fcaa 100644
--- a/lib/dbtexmf/dblatex/rawlabel.py
+++ b/lib/dbtexmf/dblatex/rawlabel.py
@@ -1,6 +1,6 @@
-from texcodec import TexCodec
-from texcodec import tex_handler_counter
-from rawparse import RawLatexParser, utf8
+from .texcodec import TexCodec
+from .texcodec import tex_handler_counter
+from .rawparse import RawLatexParser, utf8
def label_char_replace(exc, pre, post, errors):
diff --git a/lib/dbtexmf/dblatex/rawparse.py b/lib/dbtexmf/dblatex/rawparse.py
index a06a61d..67bba67 100644
--- a/lib/dbtexmf/dblatex/rawparse.py
+++ b/lib/dbtexmf/dblatex/rawparse.py
@@ -1,7 +1,7 @@
import re
-from texcodec import LatexCodec, TexCodec
-from texhyphen import BasicHyphenator, UrlHyphenator
+from .texcodec import LatexCodec, TexCodec
+from .texhyphen import BasicHyphenator, UrlHyphenator
def utf8(u):
diff --git a/lib/dbtexmf/dblatex/rawtex.py b/lib/dbtexmf/dblatex/rawtex.py
index 7ca258f..59880b6 100644
--- a/lib/dbtexmf/dblatex/rawtex.py
+++ b/lib/dbtexmf/dblatex/rawtex.py
@@ -8,10 +8,10 @@ import sys
import os
import re
-from rawparse import RawLatexParser, RawUtfParser
-from rawverb import VerbParser
-from rawlabel import RawLabelParser
-from xetex.codec import XetexCodec
+from .rawparse import RawLatexParser, RawUtfParser
+from .rawverb import VerbParser
+from .rawlabel import RawLabelParser
+from .xetex.codec import XetexCodec
from dbtexmf.core.imagedata import *
diff --git a/lib/dbtexmf/dblatex/rawverb.py b/lib/dbtexmf/dblatex/rawverb.py
index d5abb86..e78aabb 100644
--- a/lib/dbtexmf/dblatex/rawverb.py
+++ b/lib/dbtexmf/dblatex/rawverb.py
@@ -11,9 +11,9 @@
#
import re
-from texcodec import TexCodec
-from texcodec import tex_handler_counter
-from rawparse import RawUtfParser
+from .texcodec import TexCodec
+from .texcodec import tex_handler_counter
+from .rawparse import RawUtfParser
class VerbCodec(TexCodec):
diff --git a/lib/dbtexmf/dblatex/runtex.py b/lib/dbtexmf/dblatex/runtex.py
index c89e43d..ab981d5 100644
--- a/lib/dbtexmf/dblatex/runtex.py
+++ b/lib/dbtexmf/dblatex/runtex.py
@@ -5,7 +5,7 @@ import os
import re
import shutil
-from grubber.texbuilder import LatexBuilder
+from .grubber.texbuilder import LatexBuilder
class RunLatex:
diff --git a/lib/dbtexmf/dblatex/texcodec.py b/lib/dbtexmf/dblatex/texcodec.py
index aa03470..94ff922 100644
--- a/lib/dbtexmf/dblatex/texcodec.py
+++ b/lib/dbtexmf/dblatex/texcodec.py
@@ -6,7 +6,7 @@ from __future__ import print_function
import re
import codecs
-import unient
+from . import unient
# Dictionnary of the handlers installed
tex_handler_installed = {}
diff --git a/lib/dbtexmf/dblatex/xetex/codec.py b/lib/dbtexmf/dblatex/xetex/codec.py
index 9ef35b9..56b8f78 100644
--- a/lib/dbtexmf/dblatex/xetex/codec.py
+++ b/lib/dbtexmf/dblatex/xetex/codec.py
@@ -3,7 +3,7 @@ import os
import codecs
from dbtexmf.dblatex.texcodec import LatexCodec
-from fsencoder import FontSpecEncoder
+from .fsencoder import FontSpecEncoder
class XetexCodec(LatexCodec):
diff --git a/lib/dbtexmf/dblatex/xetex/fcfallback.py b/lib/dbtexmf/dblatex/xetex/fcfallback.py
index c4c82c8..1d28c9f 100644
--- a/lib/dbtexmf/dblatex/xetex/fcfallback.py
+++ b/lib/dbtexmf/dblatex/xetex/fcfallback.py
@@ -1,7 +1,7 @@
from __future__ import print_function
-from fontspec import FontSpec
-from fcmanager import FcManager
+from .fontspec import FontSpec
+from .fcmanager import FcManager
class DefaultFontSpec(FontSpec):
diff --git a/lib/dbtexmf/dblatex/xetex/fsconfig.py b/lib/dbtexmf/dblatex/xetex/fsconfig.py
index f62e51e..2b9fa7d 100644
--- a/lib/dbtexmf/dblatex/xetex/fsconfig.py
+++ b/lib/dbtexmf/dblatex/xetex/fsconfig.py
@@ -12,8 +12,8 @@ import re
import xml.dom.minidom
import logging
-from fcfallback import FcFallbackFontSpec, DefaultFontSpec
-from fontspec import FontSpec, _indent
+from .fcfallback import FcFallbackFontSpec, DefaultFontSpec
+from .fontspec import FontSpec, _indent
class FontSpecConfig:
diff --git a/lib/dbtexmf/dblatex/xetex/fsencoder.py b/lib/dbtexmf/dblatex/xetex/fsencoder.py
index 633e704..b22e59b 100644
--- a/lib/dbtexmf/dblatex/xetex/fsencoder.py
+++ b/lib/dbtexmf/dblatex/xetex/fsencoder.py
@@ -13,8 +13,8 @@ import sys
import re
import xml.dom.minidom
-from fontspec import UnicodeInterval
-from fsconfig import FontSpecConfig
+from .fontspec import UnicodeInterval
+from .fsconfig import FontSpecConfig
class FontSpecEncoder:
--
2.23.0.369.g5d0cb2d495
From 66eca68cef43dd7795ff24ee1778963df3e84475 Mon Sep 17 00:00:00 2001
Message-Id: <66eca68cef43dd7795ff24ee1778963df3e84475.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Fri, 20 Sep 2019 16:33:15 +0200
Subject: [PATCH 08/13] 2-3: raise Exception(message)
Transform the py2-only construct
raise Exception, message
into
raise Exception(message)
which is compatible with both py2 and py3.
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/dbtexmf/dblatex/xetex/fontspec.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/dbtexmf/dblatex/xetex/fontspec.py b/lib/dbtexmf/dblatex/xetex/fontspec.py
index cd93cde..767d003 100644
--- a/lib/dbtexmf/dblatex/xetex/fontspec.py
+++ b/lib/dbtexmf/dblatex/xetex/fontspec.py
@@ -49,7 +49,7 @@ class UnicodeInterval:
if m:
return int(m.group(1), 16)
else:
- raise RuntimeError, 'Not a unicode codepoint: ' + codepoint
+ raise RuntimeError('Not a unicode codepoint: ' + codepoint)
def from_char(self, char):
"""Interval for a single character"""
@@ -167,7 +167,7 @@ class FontSpec:
intervals.append(
UnicodeInterval().from_codepoint(m.group(1)))
else:
- raise RuntimeError, 'Unable to parse range: "' + range + '"'
+ raise RuntimeError('Unable to parse range: "' + range + '"')
return intervals
def _parse_transitions(self, node, transition_type):
--
2.23.0.369.g5d0cb2d495
From 8335f51d1b79e02ba80c6fa870d1b06469ccc4d3 Mon Sep 17 00:00:00 2001
Message-Id: <8335f51d1b79e02ba80c6fa870d1b06469ccc4d3.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Fri, 20 Sep 2019 21:53:16 +0200
Subject: [PATCH 09/13] 2-3: standard library reorg
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/dbtexmf/core/dbtex.py | 9 ++++++---
lib/dbtexmf/core/imagedata.py | 7 +++++--
lib/dbtexmf/dblatex/xetex/test1.py | 9 ++++++---
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/lib/dbtexmf/core/dbtex.py b/lib/dbtexmf/core/dbtex.py
index a2b5c04..8d82a7b 100644
--- a/lib/dbtexmf/core/dbtex.py
+++ b/lib/dbtexmf/core/dbtex.py
@@ -10,7 +10,10 @@ import re
import shlex
import tempfile
import shutil
-import urllib
+try:
+ from urllib import pathname2url
+except ImportError:
+ from urllib.request import pathname2url
import glob
import imp
from optparse import OptionParser
@@ -31,9 +34,9 @@ def suffix_replace(path, oldext, newext=""):
def path_to_uri(path):
if os.name == 'nt':
- return 'file:' + urllib.pathname2url(path).replace('|', ':', 1)
+ return 'file:' + pathname2url(path).replace('|', ':', 1)
else:
- return urllib.pathname2url(path)
+ return pathname2url(path)
class Document:
diff --git a/lib/dbtexmf/core/imagedata.py b/lib/dbtexmf/core/imagedata.py
index b200baa..92f3ab1 100644
--- a/lib/dbtexmf/core/imagedata.py
+++ b/lib/dbtexmf/core/imagedata.py
@@ -3,7 +3,10 @@ import os
import re
import shutil
import logging
-import urllib
+try:
+ from urllib import url2pathname
+except ImportError:
+ from urllib.request import url2pathname
from dbtexmf.core.error import signal_error
from .commander import CommandRunner
@@ -259,7 +262,7 @@ class Imagedata:
def convert(self, fig):
# Translate the URL to an actual local path
- fig = urllib.url2pathname(fig)
+ fig = url2pathname(fig)
# Always use '/' in path: work even on windows and is required by tex
if os.path.sep != '/': fig = fig.replace(os.path.sep, '/')
--
2.23.0.369.g5d0cb2d495
From eb3b71ed51104559e268c72d5f73500fa4131b74 Mon Sep 17 00:00:00 2001
Message-Id: <eb3b71ed51104559e268c72d5f73500fa4131b74.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: =?UTF-8?q?Nikola=20Forr=C3=B3?= <nforro@redhat.com>
Date: Tue, 26 Jun 2018 19:12:18 +0200
Subject: [PATCH 10/13] 2-3: Strings and bytes
Original title: Make dblatex compatible with Python 3
MJG: These are the original changes by BF to make dblatex work with the
different string handling in py2 and py3. Possibly missing:
- adjustments to rawlabel.sty (which post-dates these changes)
- fixes to some of the "latin1" encoding choices
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/dbtexmf/core/commander.py | 3 +-
lib/dbtexmf/core/dbtex.py | 69 ++++++++++++++----------
lib/dbtexmf/core/imagedata.py | 18 ++++---
lib/dbtexmf/core/sgmlxml.py | 11 ++--
lib/dbtexmf/core/txtparser.py | 3 +-
lib/dbtexmf/dblatex/grubber/bibtex.py | 9 ++--
lib/dbtexmf/dblatex/grubber/index.py | 21 +++++---
lib/dbtexmf/dblatex/grubber/latex.py | 3 +-
lib/dbtexmf/dblatex/grubber/logparser.py | 3 +-
lib/dbtexmf/dblatex/grubber/msg.py | 3 +-
lib/dbtexmf/dblatex/grubber/pdftex.py | 3 ++
lib/dbtexmf/dblatex/grubber/util.py | 4 +-
lib/dbtexmf/dblatex/rawparse.py | 8 +--
lib/dbtexmf/dblatex/rawtex.py | 15 +++---
lib/dbtexmf/dblatex/rawverb.py | 44 +++++++--------
lib/dbtexmf/dblatex/runtex.py | 11 ++--
lib/dbtexmf/dblatex/texcodec.py | 39 +++++++-------
lib/dbtexmf/dblatex/texhyphen.py | 16 +++---
lib/dbtexmf/dblatex/xetex/fcmanager.py | 3 ++
lib/dbtexmf/xslt/4xslt.py | 3 +-
lib/dbtexmf/xslt/xsltproc.py | 3 ++
setup.py | 19 ++++---
22 files changed, 179 insertions(+), 132 deletions(-)
diff --git a/lib/dbtexmf/core/commander.py b/lib/dbtexmf/core/commander.py
index 6319200..5efa074 100644
--- a/lib/dbtexmf/core/commander.py
+++ b/lib/dbtexmf/core/commander.py
@@ -1,5 +1,6 @@
import os
from subprocess import Popen, PIPE
+from io import open
class Command:
"""Contains the needed data to run a command"""
@@ -59,7 +60,7 @@ class CommandRunner:
if cmd.stdout == "PIPE":
stdout = PIPE
elif cmd.stdout:
- stdout = open(cmd.stdout % kw, "w")
+ stdout = open(cmd.stdout % kw, "wb")
if kw: args = [a % kw for a in cmd.arguments]
else: args = cmd.arguments
diff --git a/lib/dbtexmf/core/dbtex.py b/lib/dbtexmf/core/dbtex.py
index 8d82a7b..cace0f6 100644
--- a/lib/dbtexmf/core/dbtex.py
+++ b/lib/dbtexmf/core/dbtex.py
@@ -17,6 +17,7 @@ except ImportError:
import glob
import imp
from optparse import OptionParser
+from io import open
from dbtexmf.core.txtparser import texinputs_parse, texstyle_parse
from dbtexmf.core.confparser import DbtexConfig
@@ -53,24 +54,36 @@ class Document:
def has_subext(self, ext):
return (os.path.splitext(self.basename)[1] == ext)
- def __cmp__(self, other):
- """
- Comparaison method mainly to check if the document is in a list
- """
- if cmp(self.rawfile, other) == 0:
- return 0
- if cmp(self.texfile, other) == 0:
- return 0
- if cmp(self.binfile, other) == 0:
- return 0
- return -1
+ def __eq__(self, other):
+ if self.rawfile == other:
+ return True
+ if self.texfile == other:
+ return True
+ if self.binfile == other:
+ return True
+ return False
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __lt__(self, other):
+ return self.__ne__(other)
+
+ def __le__(self, other):
+ return False
+
+ def __gt__(self, other):
+ return False
+
+ def __ge__(self, other):
+ return False
class DbTex:
USE_MKLISTINGS = 1
xsl_header = \
-"""<?xml version="1.0"?>
+u"""<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:m="http://www.w3.org/1998/Math/MathML"
version="1.0">
@@ -188,7 +201,7 @@ class DbTex:
self.flags &= ~what
def get_version(self):
- f = file(os.path.join(self.topdir, "xsl", "version.xsl"))
+ f = open(os.path.join(self.topdir, "xsl", "version.xsl"), "rt", encoding="latin-1")
versions = re.findall("<xsl:variable[^>]*>([^<]*)<", f.read())
f.close()
if versions:
@@ -201,11 +214,11 @@ class DbTex:
self.xslbuild = self.xslmain
return
- f = file(wrapper, "w")
+ f = open(wrapper, "wt", encoding="latin-1")
f.write(self.xsl_header)
- f.write('<xsl:import href="%s"/>\n' % path_to_uri(self.xslmain))
+ f.write(u'<xsl:import href="%s"/>\n' % path_to_uri(self.xslmain))
for xsluser in self.xslusers:
- f.write('<xsl:import href="%s"/>\n' % path_to_uri(xsluser))
+ f.write(u'<xsl:import href="%s"/>\n' % path_to_uri(xsluser))
# Reverse to set the latest parameter first (case of overriding)
self.xslparams.reverse()
@@ -236,8 +249,8 @@ class DbTex:
self.listings, opts=self.xslopts, params=param)
else:
self.log.info("No external file support")
- f = file(self.listings, "w")
- f.write("<listings/>\n")
+ f = open(self.listings, "wt", encoding="latin-1")
+ f.write(u"<listings/>\n")
f.close()
def _single_setup(self):
@@ -259,7 +272,7 @@ class DbTex:
"Use the working directory")
self.outputdir = self.cwdir
- f = open(doclist)
+ f = open(doclist, "rt", encoding="latin-1")
books = f.readlines()
f.close()
@@ -273,11 +286,11 @@ class DbTex:
# set list
self.log.info("Build the book set list...")
xslset = "doclist.xsl"
- f = file(xslset, "w")
+ f = open(xslset, "wt", encoding="latin-1")
f.write(self.xsl_header)
- f.write('<xsl:import href="%s"/>\n' % path_to_uri(self.xslbuild))
- f.write('<xsl:import href="%s"/>\n' % path_to_uri(self.xslset))
- f.write('</xsl:stylesheet>\n')
+ f.write(u'<xsl:import href="%s"/>\n' % path_to_uri(self.xslbuild))
+ f.write(u'<xsl:import href="%s"/>\n' % path_to_uri(self.xslset))
+ f.write(u'</xsl:stylesheet>\n')
f.close()
doclist = os.path.join(self.tmpdir, "doclist.txt")
@@ -374,7 +387,7 @@ class DbTex:
# Need to dump the stdin input, because of the two passes
self.input = os.path.join(self.tmpdir, "stdin.xml")
- f = open(self.input, "w")
+ f = open(self.input, "wt", encoding="latin-1")
for line in sys.stdin:
f.write(line)
f.close()
@@ -402,13 +415,13 @@ class DbTex:
# For easy debug
if self.debug and "TEXINPUTS" in os.environ:
if os.name != "nt":
- f = file("env_tex", "w")
- f.write("TEXINPUTS=%s\nexport TEXINPUTS\n" % \
+ f = open("env_tex", "wt")
+ f.write(u"TEXINPUTS=%s\nexport TEXINPUTS\n" % \
os.environ["TEXINPUTS"])
f.close()
else:
- f = file("env_tex.bat", "w")
- f.write("set TEXINPUTS=%s\n" % os.environ["TEXINPUTS"])
+ f = open("env_tex.bat", "wt")
+ f.write(u"set TEXINPUTS=%s\n" % os.environ["TEXINPUTS"])
f.close()
# Build the tex file(s), and compile it(them)
diff --git a/lib/dbtexmf/core/imagedata.py b/lib/dbtexmf/core/imagedata.py
index 92f3ab1..32b7746 100644
--- a/lib/dbtexmf/core/imagedata.py
+++ b/lib/dbtexmf/core/imagedata.py
@@ -261,6 +261,8 @@ class Imagedata:
backend=backend)
def convert(self, fig):
+ fig = fig.decode("utf-8")
+
# Translate the URL to an actual local path
fig = url2pathname(fig)
@@ -273,7 +275,7 @@ class Imagedata:
# No real file found, give up
if not(realfig):
self.log.warning("Image '%s' not found" % fig)
- return fig
+ return fig.encode("ascii")
# Check if this image has been already converted
if realfig in self.converted:
@@ -309,7 +311,7 @@ class Imagedata:
conv.log = self.log
conv.convert(realfig, newfig, self.output_format)
self.converted[realfig] = newfig
- return newfig
+ return self._path_encode(newfig)
def _safe_file(self, fig, realfig, ext):
"""
@@ -319,7 +321,7 @@ class Imagedata:
# Encode to expected output format. If encoding is OK and
# supported by tex, just return the encoded path
newfig = self._path_encode(fig)
- if newfig and newfig.find(" ") == -1:
+ if newfig and newfig.find(b" ") == -1:
return newfig
# Added to the converted list
@@ -329,17 +331,17 @@ class Imagedata:
# Do the copy
shutil.copyfile(realfig, newfig)
- return newfig
+ return self._path_encode(newfig)
def _path_encode(self, fig):
# Actually, only ASCII characters are sure to match filesystem encoding
# so let's be conservative
- if self.output_encoding == "utf8":
- return fig
+ if self.output_encoding == "utf-8":
+ return fig.encode("utf-8")
try:
- newfig = fig.decode("utf8").encode("ascii")
+ newfig = fig.encode("ascii")
except:
- newfig = ""
+ newfig = b""
return newfig
def scanformat(self, fig):
diff --git a/lib/dbtexmf/core/sgmlxml.py b/lib/dbtexmf/core/sgmlxml.py
index 54f6f1a..dc80e36 100644
--- a/lib/dbtexmf/core/sgmlxml.py
+++ b/lib/dbtexmf/core/sgmlxml.py
@@ -7,6 +7,7 @@ import sys
import re
import logging
from subprocess import call
+from io import open
class Osx:
def __init__(self):
@@ -20,7 +21,7 @@ class Osx:
def replace_entities(self, entfile, mapfile, outfile=None):
# Find out the SDATA entities to replace
re_ent = re.compile(r'<!ENTITY +([^\s]+) +"?\[([^\s"]+) *\]"?>')
- f = open(entfile)
+ f = open(entfile, "rt", encoding="latin-1")
lines = f.readlines()
f.close()
@@ -37,7 +38,7 @@ class Osx:
entpat = r"^(%s)\s+[^\s]+\s+0(x[^\s]+)" % "|".join([x for x, y in ents])
re_map = re.compile(entpat)
entmap = []
- f = open(mapfile)
+ f = open(mapfile, "rt", encoding="latin-1")
for line in f:
entmap += re_map.findall(line.split("#")[0])
f.close()
@@ -63,18 +64,18 @@ class Osx:
del entdict[ent]
if not(outfile): outfile = entfile
- f = open(outfile, "w")
+ f = open(outfile, "wt", encoding="latin-1")
f.writelines(nlines)
f.close()
def run(self, sgmlfile, xmlfile):
errfile = "errors.osx"
- f = open(xmlfile, "w")
+ f = open(xmlfile, "wb")
rc = call(["osx"] + self.opts + ["-f", errfile, sgmlfile], stdout=f)
f.close()
if rc != 0:
i = 0
- f = open(errfile)
+ f = open(errfile, "rt")
for line in f:
sys.stderr.write(line)
i += 1
diff --git a/lib/dbtexmf/core/txtparser.py b/lib/dbtexmf/core/txtparser.py
index d7189cb..940bf86 100644
--- a/lib/dbtexmf/core/txtparser.py
+++ b/lib/dbtexmf/core/txtparser.py
@@ -3,6 +3,7 @@
#
import os
import re
+from io import open
#
# Functions used by the config parsers and by the dbtex command parser
@@ -86,7 +87,7 @@ class TextConfig:
def fromfile(self, file):
dir = os.path.dirname(os.path.realpath(file))
- f = open(file)
+ f = open(file, "rt")
for line in f:
# Remove the comment
diff --git a/lib/dbtexmf/dblatex/grubber/bibtex.py b/lib/dbtexmf/dblatex/grubber/bibtex.py
index f4af7f6..296a992 100644
--- a/lib/dbtexmf/dblatex/grubber/bibtex.py
+++ b/lib/dbtexmf/dblatex/grubber/bibtex.py
@@ -18,6 +18,7 @@ import os, sys
from os.path import *
import re, string
import subprocess
+from io import open
#from grubber import _
#from grubber import *
@@ -174,7 +175,7 @@ class BibTex(TexModule):
pkg="bibtex")
return 1
- blg = open(self.blgfile)
+ blg = open(self.blgfile, "rt", encoding="latin-1")
for line in blg.readlines():
if re_error.search(line):
blg.close()
@@ -202,7 +203,7 @@ class BibTex(TexModule):
auxfiles.append(self.auxfile)
for auxname in auxfiles:
- aux = open(auxname)
+ aux = open(auxname, "rt", encoding="latin-1")
for line in aux:
m = re_citation.match(line)
if m:
@@ -358,7 +359,7 @@ class BibTex(TexModule):
"""
if not exists(self.blgfile):
return 0
- log = open(self.blgfile)
+ log = open(self.blgfile, "rt", encoding="latin-1")
line = log.readline()
while line != "":
if line.startswith("The style file: "):
@@ -376,7 +377,7 @@ class BibTex(TexModule):
"""
if not exists(self.blgfile):
return
- log = open(self.blgfile)
+ log = open(self.blgfile, "rt", encoding="latin-1")
last_line = ""
for line in log:
m = re_error.search(line)
diff --git a/lib/dbtexmf/dblatex/grubber/index.py b/lib/dbtexmf/dblatex/grubber/index.py
index 1f37479..c65da27 100644
--- a/lib/dbtexmf/dblatex/grubber/index.py
+++ b/lib/dbtexmf/dblatex/grubber/index.py
@@ -38,6 +38,7 @@ this argument, they apply to all indices declared at the point where they
occur.
"""
+import sys
import os
from os.path import *
import re, string
@@ -45,6 +46,8 @@ import subprocess
import xml.dom.minidom
from subprocess import Popen, PIPE
+from io import open
+
from dbtexmf.dblatex.grubber.msg import _, msg
from dbtexmf.dblatex.grubber.plugins import TexModule
from dbtexmf.dblatex.grubber.util import md5_file
@@ -133,7 +136,7 @@ class Xindy:
# Texindy produces latin-* indexes. Try to find out which one from
# the modules loaded by the script (language dependent)
re_lang = re.compile("loading module \"lang/.*/(latin[^.-]*)")
- logfile = open(logname)
+ logfile = open(logname, "rt", encoding="latin-1")
encoding = ""
for line in logfile:
m = re_lang.search(line)
@@ -145,7 +148,7 @@ class Xindy:
return encoding
def _index_is_unicode(self):
- f = file(self.target, "r")
+ f = open(self.target, "rb")
is_unicode = True
for line in f:
try:
@@ -162,20 +165,20 @@ class Xindy:
# with Xindy. If not, the following error is raised by Xindy:
# "WARNING: unknown cross-reference-class `hyperindexformat'! (ignored)"
#
- f = file(self.idxfile, "r")
+ f = open(self.idxfile, "rt", encoding="latin-1")
data = f.read()
f.close()
data, nsub = self._re_hyperindex.subn(r"\1}{", data)
if not(nsub):
return
msg.debug("Remove %d unsupported 'hyperindexformat' calls" % nsub)
- f = file(self.idxfile, "w")
+ f = open(self.idxfile, "wt", encoding="latin-1")
f.write(data)
f.close()
def _fix_invalid_ranges(self):
if not(self.invalid_index_ranges): return
- f = open(self.idxfile)
+ f = open(self.idxfile, "rt", encoding="latin-1")
lines = f.readlines()
f.close()
@@ -199,7 +202,7 @@ class Xindy:
skip_lines.reverse()
for line_num in skip_lines:
del lines[line_num]
- f = open(self.idxfile, "w")
+ f = open(self.idxfile, "wt", encoding="latin-1")
f.writelines(lines)
f.close()
@@ -232,9 +235,11 @@ class Xindy:
# Collect the script output, and errors
logname = join(dirname(self.target), "xindy.log")
- logfile = open(logname, "w")
+ logfile = open(logname, "wb")
p = Popen(cmd, stdout=logfile, stderr=PIPE)
errdata = p.communicate()[1]
+ if isinstance(errdata, bytes):
+ errdata = errdata.decode(sys.getdefaultencoding())
rc = p.wait()
if msg.stdout:
msg.stdout.write(errdata)
@@ -330,7 +335,7 @@ class Makeindex:
return cmd
def _index_is_unicode(self):
- f = file(self.target, "r")
+ f = open(self.target, "rb")
is_unicode = True
for line in f:
try:
diff --git a/lib/dbtexmf/dblatex/grubber/latex.py b/lib/dbtexmf/dblatex/grubber/latex.py
index 26df91c..8524fd8 100644
--- a/lib/dbtexmf/dblatex/grubber/latex.py
+++ b/lib/dbtexmf/dblatex/grubber/latex.py
@@ -10,6 +10,7 @@ import os
import sys
import time
import subprocess
+from io import open
from dbtexmf.dblatex.grubber.msg import _, msg
from dbtexmf.dblatex.grubber.util import Watcher
@@ -122,7 +123,7 @@ class Latex(Depend):
Prepare the compilation by parsing the source file. The parsing
loads all the necessary modules required by the packages used, etc.
"""
- f = open(self.srcfile)
+ f = open(self.srcfile, "rt", encoding="latin-1")
self.parser.parse(f, exclude_mods=exclude_mods)
f.close()
diff --git a/lib/dbtexmf/dblatex/grubber/logparser.py b/lib/dbtexmf/dblatex/grubber/logparser.py
index 1784770..b2d668d 100644
--- a/lib/dbtexmf/dblatex/grubber/logparser.py
+++ b/lib/dbtexmf/dblatex/grubber/logparser.py
@@ -8,6 +8,7 @@ This module defines the class that parses the LaTeX log files.
from __future__ import generators
import re
+from io import open
from dbtexmf.dblatex.grubber.msg import _, msg
@@ -51,7 +52,7 @@ class LogParser:
"""
self.lines = []
try:
- file = open(name)
+ file = open(name, "rt")
except IOError:
return 2
line = file.readline()
diff --git a/lib/dbtexmf/dblatex/grubber/msg.py b/lib/dbtexmf/dblatex/grubber/msg.py
index 6780bda..94a47e3 100644
--- a/lib/dbtexmf/dblatex/grubber/msg.py
+++ b/lib/dbtexmf/dblatex/grubber/msg.py
@@ -9,6 +9,7 @@ msg object.
import os, os.path
import sys
import logging
+from io import open
def _(txt): return txt
@@ -34,7 +35,7 @@ class Message (object):
self._log = logging.getLogger("dblatex")
level = self._log.getEffectiveLevel()
if level >= logging.WARNING:
- self.stdout = open(os.devnull, "w")
+ self.stdout = open(os.devnull, "wb")
else:
self.stdout = None
diff --git a/lib/dbtexmf/dblatex/grubber/pdftex.py b/lib/dbtexmf/dblatex/grubber/pdftex.py
index 0f9087b..7d8fb90 100644
--- a/lib/dbtexmf/dblatex/grubber/pdftex.py
+++ b/lib/dbtexmf/dblatex/grubber/pdftex.py
@@ -9,6 +9,7 @@ using pdfTeX.
The module optimizes the pdflatex calls by setting -draftmode and apply a last
call to build the final PDF output.
"""
+import sys
import os
import re
import subprocess
@@ -73,6 +74,8 @@ class Module (TexModule):
# Grab the major version number
p = Popen("pdflatex -version", shell=True, stdout=PIPE)
data = p.communicate()[0]
+ if isinstance(data, bytes):
+ data = data.decode(sys.getdefaultencoding())
m = re.search(r"pdfTeX.*3.14[^-]*-(\d*.\d*)", data, re.M)
if not(m):
return ""
diff --git a/lib/dbtexmf/dblatex/grubber/util.py b/lib/dbtexmf/dblatex/grubber/util.py
index d10dfcf..289acaf 100644
--- a/lib/dbtexmf/dblatex/grubber/util.py
+++ b/lib/dbtexmf/dblatex/grubber/util.py
@@ -11,6 +11,8 @@ except ImportError:
# Fallback for python 2.4:
import md5 as hashlib
import os
+from io import open
+
from dbtexmf.dblatex.grubber.msg import _, msg
@@ -19,7 +21,7 @@ def md5_file(fname):
Compute the MD5 sum of a given file.
"""
m = hashlib.md5()
- file = open(fname)
+ file = open(fname, "rb")
for line in file.readlines():
m.update(line)
file.close()
diff --git a/lib/dbtexmf/dblatex/rawparse.py b/lib/dbtexmf/dblatex/rawparse.py
index 67bba67..189cd63 100644
--- a/lib/dbtexmf/dblatex/rawparse.py
+++ b/lib/dbtexmf/dblatex/rawparse.py
@@ -31,7 +31,7 @@ class RawLatexParser:
self.hypof = re.compile(utf8(u"\u0371h"))
def parse(self, line):
- lout = ""
+ lout = b""
while (line):
self.key_in.pos = line.find(self.key_in.key)
self.key_out.pos = line.find(self.key_out.key)
@@ -48,14 +48,14 @@ class RawLatexParser:
line = line[key.pos + key.len:]
else:
text = line
- line = ""
+ line = b""
if (text):
if self.depth > 0:
lout += self.translate(text)
else:
- text, hon = self.hypon.subn("", text)
- text, hof = self.hypof.subn("", text)
+ text, hon = self.hypon.subn(b"", text)
+ text, hof = self.hypof.subn(b"", text)
self.hyphenate += (hon - hof)
lout += text
diff --git a/lib/dbtexmf/dblatex/rawtex.py b/lib/dbtexmf/dblatex/rawtex.py
index 59880b6..f4310bb 100644
--- a/lib/dbtexmf/dblatex/rawtex.py
+++ b/lib/dbtexmf/dblatex/rawtex.py
@@ -7,6 +7,7 @@
import sys
import os
import re
+from io import open
from .rawparse import RawLatexParser, RawUtfParser
from .rawverb import VerbParser
@@ -19,9 +20,9 @@ class RawLatex:
"Main latex file parser"
def __init__(self):
self.figre = \
- re.compile(r"(\\includegraphics[\[]?|"\
- r"\\begin{overpic}|"\
- r"\\imgexits)[^{]*{([^}]*)}")
+ re.compile(br"(\\includegraphics[\[]?|"\
+ br"\\begin{overpic}|"\
+ br"\\imgexits)[^{]*{([^}]*)}")
self.image = Imagedata()
self.parsers = []
self.format = None
@@ -36,7 +37,7 @@ class RawLatex:
output_encoding = "utf8"
codec = XetexCodec()
elif not(output_encoding):
- f = file(input)
+ f = open(input, "rt", encoding="latin-1")
params = {}
started = 0
for line in f:
@@ -73,8 +74,8 @@ class RawLatex:
def parse(self, input, output):
self.set_parsers(input)
- f = file(input)
- o = file(output, "w")
+ f = open(input, "rb")
+ o = open(output, "wb")
for line in f:
if self.format:
line = self.figconvert(line)
@@ -100,7 +101,7 @@ class RawLatex:
# If something done, replace the figure in the tex file
if newfig != fig:
- line = re.sub(r"{%s}" % fig, r"{%s}" % newfig, line)
+ line = re.sub(br"{%s}" % fig, br"{%s}" % newfig, line)
return line
diff --git a/lib/dbtexmf/dblatex/rawverb.py b/lib/dbtexmf/dblatex/rawverb.py
index e78aabb..9743ffa 100644
--- a/lib/dbtexmf/dblatex/rawverb.py
+++ b/lib/dbtexmf/dblatex/rawverb.py
@@ -10,6 +10,7 @@
# if necessary.
#
import re
+from io import open
from .texcodec import TexCodec
from .texcodec import tex_handler_counter
@@ -46,13 +47,13 @@ class VerbParser:
def __init__(self, output_encoding="latin-1"):
# The listing environment can be different from 'lstlisting'
# but the rule is that it must begin with 'lst'
- self.start_re = re.compile(r"\\begin{lst[^}]*}")
- self.stop_re = re.compile(r"\\end{lst[^}]*}")
- self.esc_re = re.compile(r"escapeinside={([^}]*)}{([^}]*)}")
- self.block = ""
+ self.start_re = re.compile(br"\\begin{lst[^}]*}")
+ self.stop_re = re.compile(br"\\end{lst[^}]*}")
+ self.esc_re = re.compile(br"escapeinside={([^}]*)}{([^}]*)}")
+ self.block = b""
self.encoding = output_encoding
- self.default_esc_start = "<:"
- self.default_esc_stop = ":>"
+ self.default_esc_start = b"<:"
+ self.default_esc_stop = b":>"
self.default_codec = VerbCodec(self.default_esc_start,
self.default_esc_stop,
output_encoding=output_encoding)
@@ -76,13 +77,13 @@ class VerbParser:
self.command = line[m.start():m.end()]
line = line[m.end():]
# By default, no escape sequence defined yet
- self.esc_start = ""
- self.esc_stop = ""
- self.options = ""
+ self.esc_start = b""
+ self.esc_stop = b""
+ self.options = b""
# If there are some options, look for escape specs
- if line[0] == "[":
- e = line.find("]")+1
+ if line[0] == b"[":
+ e = line.find(b"]")+1
self.options = line[:e]
line = line[e:]
m = self.esc_re.search(self.options)
@@ -106,28 +107,28 @@ class VerbParser:
# Add the escape option if necessary
if not(self.esc_start) and c.get_errors() != 0:
- escopt = "escapeinside={%s}{%s}" % (c.pre, c.post)
+ escopt = b"escapeinside={%s}{%s}" % (c.pre, c.post)
if self.options:
if self.options[-2] != ",":
- escopt = "," + escopt
+ escopt = b"," + escopt
self.options = self.options[:-1] + escopt + "]"
else:
- self.options = "[" + escopt + "]"
+ self.options = b"[" + escopt + b"]"
block = self.command + self.options + text + line[m.start():]
- self.block = ""
+ self.block = b""
return block
def block_grow(self, line):
self.block += line
- return ""
+ return b""
def get_codec(self):
# Something already specified
if (self.esc_start):
if self.esc_start != self.default_esc_start:
return VerbCodec(self.esc_start, self.esc_stop,
- "verbtex" + self.esc_start,
+ b"verbtex" + self.esc_start,
output_encoding=self.encoding)
else:
return self.default_codec
@@ -137,7 +138,7 @@ class VerbParser:
iter = 0
i = self.block.find(s)
while (i != -1):
- s = "<" + str(iter) + ":"
+ s = b"<" + bytes(iter) + b":"
i = self.block.find(s)
iter += 1
@@ -145,16 +146,17 @@ class VerbParser:
if (s == self.default_esc_start):
return self.default_codec
- return VerbCodec(s, self.default_esc_stop, "verbtex" + s,
+ return VerbCodec(s, self.default_esc_stop, b"verbtex" + s,
output_encoding=self.encoding)
if __name__ == "__main__":
import sys
v = VerbParser()
- f = open(sys.argv[1])
+ buf = getattr(sys.stdout, "buffer", sys.stdout)
+ f = open(sys.argv[1], "rb")
for line in f:
text = v.parse(line)
if text:
- sys.stdout.write(text)
+ buf.write(text)
diff --git a/lib/dbtexmf/dblatex/runtex.py b/lib/dbtexmf/dblatex/runtex.py
index ab981d5..0af790b 100644
--- a/lib/dbtexmf/dblatex/runtex.py
+++ b/lib/dbtexmf/dblatex/runtex.py
@@ -4,6 +4,7 @@
import os
import re
import shutil
+from io import open
from .grubber.texbuilder import LatexBuilder
@@ -86,16 +87,16 @@ class RunLatex:
texout = root + "." + format
# The temporary file contains the extra paths
- f = file(tmptex, "w")
+ f = open(tmptex, "wt", encoding="latin-1")
if self.fig_paths:
paths = "{" + "//}{".join(self.fig_paths) + "//}"
- f.write("\\makeatletter\n")
- f.write("\\def\\input@path{%s}\n" % paths)
- f.write("\\makeatother\n")
+ f.write(u"\\makeatletter\n")
+ f.write(u"\\def\\input@path{%s}\n" % paths)
+ f.write(u"\\makeatother\n")
# Copy the original file and collect parameters embedded in the tex file
self._clear_params()
- input = file(texfile)
+ input = open(texfile, "rt", encoding="latin-1")
for line in input:
self._set_params(line)
f.write(line)
diff --git a/lib/dbtexmf/dblatex/texcodec.py b/lib/dbtexmf/dblatex/texcodec.py
index 94ff922..2963385 100644
--- a/lib/dbtexmf/dblatex/texcodec.py
+++ b/lib/dbtexmf/dblatex/texcodec.py
@@ -34,21 +34,21 @@ def latex_char_replace(exc, pre, post, name):
class TexCodec:
# This mapping for characters < 256 seems enough for latin1 output
charmap = {
- "\xa0": r"~",
- # "\xa2": r"\textcent{}",
- # "\xa4": r"\textcurrency{}",
- "\xa5": r"$\yen$",
- # "\xa6": r"\textbrokenbar{}",
- "\xac": r"\ensuremath{\lnot}",
- # "\xad": r"", # FIXME: bug around soft hyphen...
- "\xb0": r"\textdegree{}",
- "\xb1": r"\ensuremath{\pm}",
- "\xb2": r"$^2$",
- "\xb3": r"$^3$",
- "\xb5": r"$\mathrm{\mu}$",
- "\xb9": r"$^1$",
- "\xd7": r"$\times$",
- "\xf7": r"$\div$"
+ b"\xa0": br"~",
+ # b"\xa2": br"\textcent{}",
+ # b"\xa4": br"\textcurrency{}",
+ b"\xa5": br"$\yen$",
+ # b"\xa6": br"\textbrokenbar{}",
+ b"\xac": br"\ensuremath{\lnot}",
+ # "\xad": br"", # FIXME: bug around soft hyphen...
+ b"\xb0": br"\textdegree{}",
+ b"\xb1": br"\ensuremath{\pm}",
+ b"\xb2": br"$^2$",
+ b"\xb3": br"$^3$",
+ b"\xb5": br"$\mathrm{\mu}$",
+ b"\xb9": br"$^1$",
+ b"\xd7": br"$\times$",
+ b"\xf7": br"$\div$"
}
def __init__(self, input_encoding="utf8", output_encoding="latin-1",
@@ -126,19 +126,20 @@ class LatexCodec(TexCodec):
text = text.replace(c, v)
# Things are done, complete with {}
- text = text.replace(r"\textbackslash", r"\textbackslash{}")
+ text = text.replace(br"\textbackslash", br"\textbackslash{}")
return text
def main():
import sys
c = LatexCodec()
- f = open(sys.argv[1])
- text = ""
+ buf = getattr(sys.stdout, "buffer", sys.stdout)
+ f = open(sys.argv[1], "rb")
+ text = "" if buf == sys.stdout else b""
for line in f:
text += c.encode(c.decode(line))
if text:
- sys.stdout.write(text)
+ buf.write(text)
if __name__ == "__main__":
diff --git a/lib/dbtexmf/dblatex/texhyphen.py b/lib/dbtexmf/dblatex/texhyphen.py
index 953af08..0b16a56 100644
--- a/lib/dbtexmf/dblatex/texhyphen.py
+++ b/lib/dbtexmf/dblatex/texhyphen.py
@@ -20,14 +20,14 @@ class BasicHyphenator(Hyphenator):
"""
def __init__(self, codec=None):
self.codec = codec
- self.hyphenchar = "\-"
+ self.hyphenchar = b"\-"
def hyphenate(self, text):
if self.codec: text = self.codec.decode(text)
ntext = "\1".join(list(text))
if self.codec: ntext = self.codec.encode(ntext)
- ntext = re.sub("\1? \1?", " ", ntext)
- ntext = ntext.replace("\1", self.hyphenchar)
+ ntext = re.sub(b"\1? \1?", b" ", ntext)
+ ntext = ntext.replace(b"\1", self.hyphenchar)
return ntext
@@ -51,7 +51,7 @@ class UrlHyphenator(Hyphenator):
existing latex styles.
"""
def __init__(self, codec=None,
- h_sep="\penalty0{}", h_char="\penalty5000{}",
+ h_sep=b"\penalty0{}", h_char=b"\penalty5000{}",
h_start=3, h_stop=3):
self.codec = codec
self.seps = r":/\@=?#;-."
@@ -86,16 +86,16 @@ class UrlHyphenator(Hyphenator):
nw += "\1".join(list(hword))
nw += w[-self.h_stop:]
nw = self._translate(nw)
- nw = re.sub("\1? \1?", " ", nw)
- nw = nw.replace("\1", self.h_char)
+ nw = re.sub(b"\1? \1?", b" ", nw)
+ nw = nw.replace(b"\1", self.h_char)
vtext.append(nw)
- ntext = "".join(vtext)
+ ntext = b"".join(vtext)
return ntext
if __name__ == "__main__":
- url = "http://www.fg/foobar fun#fght/fkkkf.tz?id=123"
+ url = b"http://www.fg/foobar fun#fght/fkkkf.tz?id=123"
h1 = BasicHyphenator()
h2 = UrlHyphenator()
print(h1.hyphenate(url))
diff --git a/lib/dbtexmf/dblatex/xetex/fcmanager.py b/lib/dbtexmf/dblatex/xetex/fcmanager.py
index b972270..91ed6da 100644
--- a/lib/dbtexmf/dblatex/xetex/fcmanager.py
+++ b/lib/dbtexmf/dblatex/xetex/fcmanager.py
@@ -5,12 +5,15 @@
# An efficient solution should use some python bindings to directly call the
# C fontconfig library.
#
+import sys
import logging
from subprocess import Popen, PIPE
def execute(cmd):
p = Popen(cmd, stdout=PIPE)
data = p.communicate()[0]
+ if isinstance(data, bytes):
+ data = data.decode(sys.getdefaultencoding())
rc = p.wait()
if rc != 0:
raise OSError("'%s' failed (%d)" % (" ".join(cmd), rc))
diff --git a/lib/dbtexmf/xslt/4xslt.py b/lib/dbtexmf/xslt/4xslt.py
index 4af729f..3746fce 100644
--- a/lib/dbtexmf/xslt/4xslt.py
+++ b/lib/dbtexmf/xslt/4xslt.py
@@ -3,6 +3,7 @@
#
import sys
import os
+from io import open
from Ft.Xml.Xslt import Processor
from Ft.Lib.Uri import OsPathToUri
@@ -49,7 +50,7 @@ class FourXslt:
uri = OsPathToUri(xslfile)
xslt = factory.fromUri(uri, processIncludes=False)
- o = open(outfile, "w")
+ o = open(outfile, "wb")
proc.appendStylesheet(xslt)
if params:
rc = proc.run(xml, outputStream=o, topLevelParams=params)
diff --git a/lib/dbtexmf/xslt/xsltproc.py b/lib/dbtexmf/xslt/xsltproc.py
index 38f1d2b..db72a87 100644
--- a/lib/dbtexmf/xslt/xsltproc.py
+++ b/lib/dbtexmf/xslt/xsltproc.py
@@ -2,6 +2,7 @@
# Basic wrapper for xsltproc. Maybe we should directly use the lixslt Python
# API.
#
+import sys
import os
import logging
import re
@@ -43,6 +44,8 @@ class XsltProc:
# check that with help output the option is there
p = Popen(["xsltproc"], stdout=PIPE)
data = p.communicate()[0]
+ if isinstance(data, bytes):
+ data = data.decode(sys.getdefaultencoding())
m = re.search("--xincludestyle", data, re.M)
if not(m):
return False
diff --git a/setup.py b/setup.py
index ad33190..379323b 100644
--- a/setup.py
+++ b/setup.py
@@ -10,6 +10,7 @@ import sys
import re
import glob
import subprocess
+from io import open
try:
from setuptools import setup
@@ -164,8 +165,8 @@ os.environ["SGML_CATALOG_FILES"] = cat
script = self.SHELL_SCRIPT % script_args
script_name = os.path.basename(script_name)
outfile = os.path.join(self.build_dir, script_name)
- fd = os.open(outfile, os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0755)
- os.write(fd, script)
+ fd = os.open(outfile, os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0o755)
+ os.write(fd, script.encode('ascii'))
os.close(fd)
@@ -227,8 +228,10 @@ def kpsewhich(tex_file):
close_fds = True
p = Popen("kpsewhich %s" % tex_file, shell=True,
stdin=PIPE, stdout=PIPE, close_fds=close_fds)
- out = "".join(p.stdout.readlines()).strip()
- return out
+ data = p.communicate()[0]
+ if isinstance(data, bytes):
+ data = data.decode(sys.getdefaultencoding())
+ return data.strip()
class Sdist(sdist):
@@ -324,7 +327,7 @@ class Install(install):
used_stys = []
re_sty = re.compile(r"\\usepackage\s*\[?.*\]?{(\w+)}")
for sty in stys:
- f = open(sty)
+ f = open(sty, "rt", encoding="latin-1")
for line in f:
line = line.split("%")[0]
m = re_sty.search(line)
@@ -452,17 +455,17 @@ class InstallData(install_data):
return
# Grab the value from package version
- d = open(hyper_sty).read()
+ d = open(hyper_sty, "rt", encoding="latin-1").read()
m = re.search(r"\\ProvidesPackage{hyperref}\s+\[(\d+)", d, re.M)
if not(m):
return
year = m.group(1)
# Patch the parameter with the found value
- p = open(param_file).read()
+ p = open(param_file, "rt", encoding="latin-1").read()
p2 = re.sub('name="texlive.version">.*<',
'name="texlive.version">%s<' % year, p)
- f = open(param_file, "w")
+ f = open(param_file, "wt", encoding="latin-1")
f.write(p2)
f.close()
--
2.23.0.369.g5d0cb2d495
From 660501171db7aa9a41cc1e9896e063b6837e1179 Mon Sep 17 00:00:00 2001
Message-Id: <660501171db7aa9a41cc1e9896e063b6837e1179.1569226914.git.github@grubix.eu>
In-Reply-To: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
References: <49b85799a8f0674ac5eb6f2dfc37b23208d9754a.1569226914.git.github@grubix.eu>
From: Michael J Gruber <github@grubix.eu>
Date: Sun, 22 Sep 2019 17:34:45 +0200
Subject: [PATCH 11/13] 2-3: fix up remaining string/bytes issues
io.open() and write() behave somewhat differently in PY2 and PY3,
especially when used for sys.stdin in a pipe. Make these work, too.
With this commit, dblatex is able to produce its own docs under py2 as
well as py3!
Signed-off-by: Michael J Gruber <github@grubix.eu>
---
lib/dbtexmf/core/dbtex.py | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/lib/dbtexmf/core/dbtex.py b/lib/dbtexmf/core/dbtex.py
index cace0f6..8316c68 100644
--- a/lib/dbtexmf/core/dbtex.py
+++ b/lib/dbtexmf/core/dbtex.py
@@ -224,12 +224,12 @@ u"""<?xml version="1.0"?>
self.xslparams.reverse()
for param in self.xslparams:
v = param.split("=", 1)
- f.write('<xsl:param name="%s">' % v[0])
+ f.write(u'<xsl:param name="%s">' % v[0])
if len(v) == 2:
- f.write('%s' % v[1])
- f.write('</xsl:param>\n')
+ f.write(u'%s' % v[1])
+ f.write(u'</xsl:param>\n')
- f.write('</xsl:stylesheet>\n')
+ f.write(u'</xsl:stylesheet>\n')
f.close()
self.xslbuild = os.path.realpath(wrapper)
@@ -387,7 +387,10 @@ u"""<?xml version="1.0"?>
# Need to dump the stdin input, because of the two passes
self.input = os.path.join(self.tmpdir, "stdin.xml")
- f = open(self.input, "wt", encoding="latin-1")
+ if sys.stdin.encoding is None:
+ f = open(self.input, "wb")
+ else:
+ f = open(self.input, "wt", encoding=sys.stdin.encoding)
for line in sys.stdin:
f.write(line)
f.close()
--
2.23.0.369.g5d0cb2d495