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

Add support for some combining characters.

Remove unnecessary imports and dependencies on PyXML and esistools.
This commit is contained in:
Fred Drake 2000-11-22 17:56:43 +00:00
parent 382a75d0e9
commit 691a5a7c09
1 changed files with 40 additions and 4 deletions

View File

@ -16,17 +16,15 @@ to load an alternate table from an external file.
"""
__version__ = '$Revision$'
import copy
import errno
import getopt
import os
import re
import string
import StringIO
import sys
import UserList
import xml.sax.saxutils
from esistools import encode
from types import ListType, StringType, TupleType
try:
@ -50,12 +48,16 @@ class LaTeXStackError(LaTeXFormatError):
self.stack = stack[:]
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{([^}]*)}")
_end_env_rx = re.compile(r"[\\]end{([^}]*)}")
_begin_macro_rx = re.compile(r"[\\]([a-zA-Z]+[*]?) ?({|\s*\n?)")
_comment_rx = re.compile("%+ ?(.*)\n[ \t]*")
_text_rx = re.compile(r"[^]%\\{}]+")
_text_rx = re.compile(r"[^]~%\\{}]+")
_optional_rx = re.compile(r"\s*[[]([^]]*)[]]")
# _parameter_rx is this complicated to allow {...} inside a parameter;
# this is useful to match tabular layout specifications like {c|p{24pt}}
@ -112,6 +114,9 @@ class Conversion:
self.line = string.join(map(string.rstrip, ifp.readlines()), "\n")
self.preamble = 1
def write_ordinal(self, ordinal):
self.write("-\\%%%d;\n" % ordinal)
def err_write(self, msg):
if DEBUG:
sys.stderr.write(str(msg) + "\n")
@ -165,6 +170,12 @@ class Conversion:
if m:
# start of macro
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)
if entry.verbatim:
# magic case!
@ -290,6 +301,11 @@ class Conversion:
del stack[-1]
line = line[1:]
continue
if line[0] == "~":
# don't worry about the "tie" aspect of this command
line = line[1:]
self.write("- \n")
continue
if line[0] == "{":
stack.append("")
line = line[1:]
@ -302,6 +318,14 @@ class Conversion:
self.write("(BREAK\n)BREAK\n")
line = line[2:]
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)
if m:
text = encode(m.group())
@ -332,6 +356,18 @@ class Conversion:
+ string.join(stack, ", "))
# 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):
conversion = self.get_entry(name)
parameters = conversion.parameters