Commit 691a5a7c authored by Fred Drake's avatar Fred Drake

Convert the LaTeX "tie" (~) to a simple space.

Add support for some combining characters.

Remove unnecessary imports and dependencies on PyXML and esistools.
parent 382a75d0
...@@ -16,17 +16,15 @@ to load an alternate table from an external file. ...@@ -16,17 +16,15 @@ to load an alternate table from an external file.
""" """
__version__ = '$Revision$' __version__ = '$Revision$'
import copy
import errno import errno
import getopt import getopt
import os import os
import re import re
import string import string
import StringIO
import sys import sys
import UserList import UserList
import xml.sax.saxutils
from esistools import encode
from types import ListType, StringType, TupleType from types import ListType, StringType, TupleType
try: try:
...@@ -50,12 +48,16 @@ class LaTeXStackError(LaTeXFormatError): ...@@ -50,12 +48,16 @@ class LaTeXStackError(LaTeXFormatError):
self.stack = stack[:] self.stack = stack[:]
LaTeXFormatError.__init__(self, msg) LaTeXFormatError.__init__(self, msg)
def encode(s):
s = xml.sax.saxutils.escape(s)
return s.replace("\n", "\\n\n-")
_begin_env_rx = re.compile(r"[\\]begin{([^}]*)}") _begin_env_rx = re.compile(r"[\\]begin{([^}]*)}")
_end_env_rx = re.compile(r"[\\]end{([^}]*)}") _end_env_rx = re.compile(r"[\\]end{([^}]*)}")
_begin_macro_rx = re.compile(r"[\\]([a-zA-Z]+[*]?) ?({|\s*\n?)") _begin_macro_rx = re.compile(r"[\\]([a-zA-Z]+[*]?) ?({|\s*\n?)")
_comment_rx = re.compile("%+ ?(.*)\n[ \t]*") _comment_rx = re.compile("%+ ?(.*)\n[ \t]*")
_text_rx = re.compile(r"[^]%\\{}]+") _text_rx = re.compile(r"[^]~%\\{}]+")
_optional_rx = re.compile(r"\s*[[]([^]]*)[]]") _optional_rx = re.compile(r"\s*[[]([^]]*)[]]")
# _parameter_rx is this complicated to allow {...} inside a parameter; # _parameter_rx is this complicated to allow {...} inside a parameter;
# this is useful to match tabular layout specifications like {c|p{24pt}} # this is useful to match tabular layout specifications like {c|p{24pt}}
...@@ -112,6 +114,9 @@ class Conversion: ...@@ -112,6 +114,9 @@ class Conversion:
self.line = string.join(map(string.rstrip, ifp.readlines()), "\n") self.line = string.join(map(string.rstrip, ifp.readlines()), "\n")
self.preamble = 1 self.preamble = 1
def write_ordinal(self, ordinal):
self.write("-\\%%%d;\n" % ordinal)
def err_write(self, msg): def err_write(self, msg):
if DEBUG: if DEBUG:
sys.stderr.write(str(msg) + "\n") sys.stderr.write(str(msg) + "\n")
...@@ -165,6 +170,12 @@ class Conversion: ...@@ -165,6 +170,12 @@ class Conversion:
if m: if m:
# start of macro # start of macro
macroname = m.group(1) macroname = m.group(1)
if macroname == "c":
# Ugh! This is a combining character...
endpos = m.end()
self.combining_char("c", line[endpos])
line = line[endpos + 1:]
continue
entry = self.get_entry(macroname) entry = self.get_entry(macroname)
if entry.verbatim: if entry.verbatim:
# magic case! # magic case!
...@@ -290,6 +301,11 @@ class Conversion: ...@@ -290,6 +301,11 @@ class Conversion:
del stack[-1] del stack[-1]
line = line[1:] line = line[1:]
continue continue
if line[0] == "~":
# don't worry about the "tie" aspect of this command
line = line[1:]
self.write("- \n")
continue
if line[0] == "{": if line[0] == "{":
stack.append("") stack.append("")
line = line[1:] line = line[1:]
...@@ -302,6 +318,14 @@ class Conversion: ...@@ -302,6 +318,14 @@ class Conversion:
self.write("(BREAK\n)BREAK\n") self.write("(BREAK\n)BREAK\n")
line = line[2:] line = line[2:]
continue continue
if line[:2] == r"\_":
line = "_" + line[2:]
continue
if line[:2] in (r"\'", r'\"'):
# combining characters...
self.combining_char(line[1], line[2])
line = line[3:]
continue
m = _text_rx.match(line) m = _text_rx.match(line)
if m: if m:
text = encode(m.group()) text = encode(m.group())
...@@ -332,6 +356,18 @@ class Conversion: ...@@ -332,6 +356,18 @@ class Conversion:
+ string.join(stack, ", ")) + string.join(stack, ", "))
# otherwise we just ran out of input here... # otherwise we just ran out of input here...
# This is a really limited table of combinations, but it will have
# to do for now.
_combinations = {
("c", "c"): 0x00E7,
("'", "e"): 0x00E9,
('"', "o"): 0x00F6,
}
def combining_char(self, prefix, char):
ordinal = self._combinations[(prefix, char)]
self.write("-\\%%%d;\n" % ordinal)
def start_macro(self, name): def start_macro(self, name):
conversion = self.get_entry(name) conversion = self.get_entry(name)
parameters = conversion.parameters parameters = conversion.parameters
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment