Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
f97ffcfe
Commit
f97ffcfe
authored
Jul 29, 1999
by
Fred Drake
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ripped out the old conversion.
parent
6c8bb9f0
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
7 additions
and
367 deletions
+7
-367
Doc/tools/sgmlconv/latex2esis.py
Doc/tools/sgmlconv/latex2esis.py
+7
-367
No files found.
Doc/tools/sgmlconv/latex2esis.py
View file @
f97ffcfe
...
...
@@ -135,239 +135,6 @@ class BaseConversion:
class
Conversion
(
BaseConversion
):
def
subconvert
(
self
,
endchar
=
None
,
depth
=
0
):
stack
=
self
.
stack
line
=
self
.
line
while
line
:
if
line
[
0
]
==
endchar
and
not
stack
:
self
.
line
=
line
return
line
m
=
_comment_rx
.
match
(
line
)
if
m
:
text
=
m
.
group
(
1
)
if
text
:
self
.
write
(
"(COMMENT
\
n
- %s
\
n
)COMMENT
\
n
-
\
\
n
\
n
"
%
encode
(
text
))
line
=
line
[
m
.
end
():]
continue
m
=
_begin_env_rx
.
match
(
line
)
if
m
:
# re-write to use the macro handler
line
=
r"\
%s %s
" % (m.group(1), line[m.end():])
continue
m = _end_env_rx.match(line)
if m:
# end of environment
envname = m.group(1)
if envname == "
document
":
# special magic
for n in stack[1:]:
if n not in self.autoclosing:
self.err_write(stack)
raise LaTeXFormatError(
"
open
element
on
stack
:
" + `n`)
self.write("
)
document
\
n
")
elif stack and envname == stack[-1]:
self.write("
)
%
s
\
n
" % envname)
del stack[-1]
popping(envname, "
a
", len(stack) + depth)
else:
raise LaTeXStackError(envname, stack)
line = line[m.end():]
continue
m = _begin_macro_rx.match(line)
if m:
# start of macro
macroname = m.group(1)
if macroname == "
verbatim
":
# really magic case!
pos = string.find(line, "
\\
end
{
verbatim
}
")
text = line[m.end(1):pos]
self.write("
(
verbatim
\
n
")
self.write("
-%
s
\
n
" % encode(text))
self.write("
)
verbatim
\
n
")
line = line[pos + len("
\\
end
{
verbatim
}
"):]
continue
numbered = 1
opened = 0
if macroname[-1] == "
*
":
macroname = macroname[:-1]
numbered = 0
if macroname in self.autoclosing and macroname in stack:
while stack[-1] != macroname:
top = stack.pop()
if top and top not in self.discards:
self.write("
)
%
s
\
n
-
\\
n
\
n
" % top)
popping(top, "b", len(stack) + depth)
if macroname not in self.discards:
self.write("
-
\\
n
\
n
)
%
s
\
n
-
\\
n
\
n
" % macroname)
popping(macroname, "
c
", len(stack) + depth - 1)
del stack[-1]
#
if macroname in self.discards:
self.push_output(StringIO.StringIO())
else:
self.push_output(self.ofp)
#
params, optional, empty, environ = self.start_macro(macroname)
if not numbered:
self.write("
Anumbered
TOKEN
no
\
n
")
# rip off the macroname
if params:
line = line[m.end(1):]
elif empty:
line = line[m.end(1):]
else:
line = line[m.end():]
#
# Very ugly special case to deal with
\
i
t
em[]. The catch
# is that this needs to occur outside the for loop that
# handles attribute parsing so we can 'continue' the outer
# loop.
#
if optional and type(params[0]) is TupleType:
# the attribute name isn't used in this special case
stack.append(macroname)
self.write("
(
%
s
\
n
" % macroname)
m = _start_optional_rx.match(line)
if m:
self.line = line[m.end():]
line = self.subconvert("
]
", depth + len(stack))
line = "
}
" + line
continue
# handle attribute mappings here:
for attrname in params:
if optional:
optional = 0
if type(attrname) is StringType:
m = _optional_rx.match(line)
if m:
line = line[m.end():]
self.write("
A
%
s
TOKEN
%
s
\
n
"
% (attrname, encode(m.group(1))))
elif type(attrname) is TupleType:
# This is a sub-element; but place the and attribute
# we found on the stack (
\
sec
t
ion-like); the
# content of the macro will become the content
# of the attribute element, and the macro will
# have to be closed some other way (such as
# auto-closing).
stack.append(macroname)
self.write("
(
%
s
\
n
" % macroname)
macroname = attrname[0]
m = _start_group_rx.match(line)
if m:
line = line[m.end():]
elif type(attrname) is ListType:
# A normal subelement: <macroname><attrname>...</>...
attrname = attrname[0]
if not opened:
opened = 1
self.write("
(
%
s
\
n
" % macroname)
pushing(macroname, "
c
", len(stack) + depth)
self.write("
(
%
s
\
n
" % attrname)
pushing(attrname, "
sub
-
elem
", len(stack) + depth + 1)
self.line = skip_white(line)[1:]
line = self.subconvert("
}
", len(stack) + depth + 1)[1:]
popping(attrname, "
sub
-
elem
", len(stack) + depth + 1)
self.write("
)
%
s
\
n
" % attrname)
else:
m = _parameter_rx.match(line)
if not m:
raise LaTeXFormatError(
"
could
not
extract
parameter
%
s
for
%
s
:
%
s
"
% (attrname, macroname, `line[:100]`))
value = m.group(1)
if _token_rx.match(value):
dtype = "
TOKEN
"
else:
dtype = "
CDATA
"
self.write("
A
%
s
%
s
%
s
\
n
"
% (attrname, dtype, encode(value)))
line = line[m.end():]
if params and type(params[-1]) is StringType
\
and (not empty) and not environ:
# attempt to strip off next '{'
m = _start_group_rx.match(line)
if not m:
raise LaTeXFormatError(
"
non
-
empty
element
'%s'
has
no
content
:
%
s
"
% (macroname, line[:12]))
line = line[m.end():]
if not opened:
self.write("
(
%
s
\
n
" % macroname)
pushing(macroname, "
d
", len(stack) + depth)
if empty:
line = "
}
" + line
stack.append(macroname)
self.pop_output()
continue
if line[0] == endchar and not stack:
self.line = line[1:]
return self.line
if line[0] == "
}
":
# end of macro or group
macroname = stack[-1]
conversion = self.table.get(macroname)
if macroname
\
and macroname not in self.discards
\
and type(conversion) is not StringType:
# otherwise, it was just a bare group
self.write("
)
%
s
\
n
" % stack[-1])
popping(macroname, "
d
", len(stack) + depth - 1)
del stack[-1]
line = line[1:]
continue
if line[0] == "
{
":
pushing("", "
e
", len(stack) + depth)
stack.append("")
line = line[1:]
continue
if line[0] == "
\\
" and line[1] in ESCAPED_CHARS:
self.write("
-%
s
\
n
" % encode(line[1]))
line = line[2:]
continue
if line[:2] == r"
\\
":
self.write("
(
BREAK
\
n
)
BREAK
\
n
")
line = line[2:]
continue
m = _text_rx.match(line)
if m:
text = encode(m.group())
self.write("
-%
s
\
n
" % text)
line = line[m.end():]
continue
# special case because of
\
i
t
em[]
if line[0] == "
]
":
self.write("
-
]
\
n
")
line = line[1:]
continue
# avoid infinite loops
extra = ""
if len(line) > 100:
extra = "
...
"
raise LaTeXFormatError("
could
not
identify
markup
:
%
s
%
s
"
% (`line[:100]`, extra))
while stack and stack[-1] in self.autoclosing:
self.write("
-
\\
n
\
n
")
self.write("
)
%
s
\
n
" % stack[-1])
popping(stack.pop(), "
e
", len(stack) + depth - 1)
if stack:
raise LaTeXFormatError("
elements
remain
on
stack
:
"
+ string.join(stack, "
,
"))
# otherwise we just ran out of input here...
def start_macro(self, name):
conversion = self.table.get(name, ([], 0, 0, 0, 0))
params, optional, empty, environ, nocontent = conversion
if empty:
self.write("
e
\
n
")
elif nocontent:
empty = 1
return params, optional, empty, environ
class NewConversion(BaseConversion):
def
__init__
(
self
,
ifp
,
ofp
,
table
=
{}):
BaseConversion
.
__init__
(
self
,
ifp
,
ofp
,
table
)
self
.
discards
=
[]
...
...
@@ -635,17 +402,8 @@ class NewConversion(BaseConversion):
self.write("
A
%
s
%
s
%
s
\
n
" % (pentry.name, dtype, encode(value)))
def old_convert(ifp, ofp, table={}, discards=(), autoclosing=()):
c = Conversion(ifp, ofp, table, discards, autoclosing)
try:
c.convert()
except IOError, (err, msg):
if err != errno.EPIPE:
raise
def new_convert(ifp, ofp, table={}, discards=(), autoclosing=()):
c = NewConversion(ifp, ofp, table)
def convert(ifp, ofp, table):
c = Conversion(ifp, ofp, table)
try:
c.convert()
except IOError, (err, msg):
...
...
@@ -768,17 +526,9 @@ def load_table(fp):
def main():
global DEBUG
#
convert = new_convert
newstyle = 1
opts, args = getopt.getopt(sys.argv[1:], "
Dn
", ["
debug
", "
new
"])
opts, args = getopt.getopt(sys.argv[1:], "
D
", ["
debug
"])
for opt, arg in opts:
if opt in ("
-
n
", "
--
new
"):
convert = new_convert
newstyle = 1
elif opt in ("
-
o
", "
--
old
"):
convert = old_convert
newstyle = 0
elif opt in ("
-
D
", "
--
debug
"):
if opt in ("
-
D
", "
--
debug
"):
DEBUG = DEBUG + 1
if len(args) == 0:
ifp = sys.stdin
...
...
@@ -792,119 +542,9 @@ def main():
else:
usage()
sys.exit(2)
table = {
# entries have the form:
# name: ([attribute names], is1stOptional, isEmpty, isEnv, nocontent)
# attribute names can be:
# "
string
" -- normal attribute
# ("
string
",) -- sub-element with content of macro; like for
\
sec
t
ion
# ["
string
"] -- sub-element
"
bifuncindex
": (["
name
"], 0, 1, 0, 0),
"
cfuncdesc
": (["
type
", "
name
", ("
args
",)], 0, 0, 1, 0),
"
chapter
": ([("
title
",)], 0, 0, 0, 0),
"
chapter
*
": ([("
title
",)], 0, 0, 0, 0),
"
classdesc
": (["
name
", ("
args
",)], 0, 0, 1, 0),
"
ctypedesc
": (["
name
"], 0, 0, 1, 0),
"
cvardesc
": (["
type
", "
name
"], 0, 0, 1, 0),
"
datadesc
": (["
name
"], 0, 0, 1, 0),
"
declaremodule
": (["
id
", "
type
", "
name
"], 1, 1, 0, 0),
"
deprecated
": (["
release
"], 0, 0, 0, 0),
"
documentclass
": (["
classname
"], 0, 1, 0, 0),
"
excdesc
": (["
name
"], 0, 0, 1, 0),
"
funcdesc
": (["
name
", ("
args
",)], 0, 0, 1, 0),
"
funcdescni
": (["
name
", ("
args
",)], 0, 0, 1, 0),
"
funcline
": (["
name
"], 0, 0, 0, 0),
"
funclineni
": (["
name
"], 0, 0, 0, 0),
"
geq
": ([], 0, 1, 0, 0),
"
hline
": ([], 0, 1, 0, 0),
"
include
": (["
source
"], 0, 1, 0, 0),
"
indexii
": (["
ie1
", "
ie2
"], 0, 1, 0, 0),
"
indexiii
": (["
ie1
", "
ie2
", "
ie3
"], 0, 1, 0, 0),
"
indexiv
": (["
ie1
", "
ie2
", "
ie3
", "
ie4
"], 0, 1, 0, 0),
"
indexname
": ([], 0, 0, 0, 0),
"
input
": (["
source
"], 0, 1, 0, 0),
"
item
": ([("
leader
",)], 1, 0, 0, 0),
"
label
": (["
id
"], 0, 1, 0, 0),
"
labelwidth
": ([], 0, 1, 0, 0),
"
large
": ([], 0, 1, 0, 0),
"
LaTeX
": ([], 0, 1, 0, 0),
"
leftmargin
": ([], 0, 1, 0, 0),
"
leq
": ([], 0, 1, 0, 0),
"
lineii
": ([["
entry
"], ["
entry
"]], 0, 0, 0, 1),
"
lineiii
": ([["
entry
"], ["
entry
"], ["
entry
"]], 0, 0, 0, 1),
"
lineiv
": ([["
entry
"], ["
entry
"], ["
entry
"], ["
entry
"]], 0, 0, 0, 1),
"
localmoduletable
": ([], 0, 1, 0, 0),
"
makeindex
": ([], 0, 1, 0, 0),
"
makemodindex
": ([], 0, 1, 0, 0),
"
maketitle
": ([], 0, 1, 0, 0),
"
manpage
": (["
name
", "
section
"], 0, 1, 0, 0),
"
memberdesc
": (["
class
", "
name
"], 1, 0, 1, 0),
"
memberdescni
": (["
class
", "
name
"], 1, 0, 1, 0),
"
methoddesc
": (["
class
", "
name
", ("
args
",)], 1, 0, 1, 0),
"
methoddescni
": (["
class
", "
name
", ("
args
",)], 1, 0, 1, 0),
"
methodline
": (["
class
", "
name
"], 1, 0, 0, 0),
"
methodlineni
": (["
class
", "
name
"], 1, 0, 0, 0),
"
moduleauthor
": (["
name
", "
email
"], 0, 1, 0, 0),
"
opcodedesc
": (["
name
", "
var
"], 0, 0, 1, 0),
"
par
": ([], 0, 1, 0, 0),
"
paragraph
": ([("
title
",)], 0, 0, 0, 0),
"
refbimodindex
": (["
name
"], 0, 1, 0, 0),
"
refexmodindex
": (["
name
"], 0, 1, 0, 0),
"
refmodindex
": (["
name
"], 0, 1, 0, 0),
"
refstmodindex
": (["
name
"], 0, 1, 0, 0),
"
refmodule
": (["
ref
"], 1, 0, 0, 0),
"
renewcommand
": (["
macro
"], 0, 0, 0, 0),
"
rfc
": (["
num
"], 0, 1, 0, 0),
"
section
": ([("
title
",)], 0, 0, 0, 0),
"
sectionauthor
": (["
name
", "
email
"], 0, 1, 0, 0),
"
seemodule
": (["
ref
", "
name
"], 1, 0, 0, 0),
"
stindex
": (["
type
"], 0, 1, 0, 0),
"
subparagraph
": ([("
title
",)], 0, 0, 0, 0),
"
subsection
": ([("
title
",)], 0, 0, 0, 0),
"
subsubsection
": ([("
title
",)], 0, 0, 0, 0),
"
list
": (["
bullet
", "
init
"], 0, 0, 1, 0),
"
tableii
": (["
colspec
", "
style
",
["
entry
"], ["
entry
"]], 0, 0, 1, 0),
"
tableiii
": (["
colspec
", "
style
",
["
entry
"], ["
entry
"], ["
entry
"]], 0, 0, 1, 0),
"
tableiv
": (["
colspec
", "
style
",
["
entry
"], ["
entry
"], ["
entry
"], ["
entry
"]], 0, 0, 1, 0),
"
version
": ([], 0, 1, 0, 0),
"
versionadded
": (["
version
"], 0, 1, 0, 0),
"
versionchanged
": (["
version
"], 0, 1, 0, 0),
"
withsubitem
": (["
text
"], 0, 0, 0, 0),
#
"
ABC
": ([], 0, 1, 0, 0),
"
ASCII
": ([], 0, 1, 0, 0),
"
C
": ([], 0, 1, 0, 0),
"
Cpp
": ([], 0, 1, 0, 0),
"
EOF
": ([], 0, 1, 0, 0),
"
e
": ([], 0, 1, 0, 0),
"
ldots
": ([], 0, 1, 0, 0),
"
NULL
": ([], 0, 1, 0, 0),
"
POSIX
": ([], 0, 1, 0, 0),
"
UNIX
": ([], 0, 1, 0, 0),
#
# Things that will actually be going away!
#
"
appendix
": ([], 0, 1, 0, 0),
"
catcode
": ([], 0, 1, 0, 0),
"
fi
": ([], 0, 1, 0, 0),
"
ifhtml
": ([], 0, 1, 0, 0),
"
makeindex
": ([], 0, 1, 0, 0),
"
makemodindex
": ([], 0, 1, 0, 0),
"
maketitle
": ([], 0, 1, 0, 0),
"
noindent
": ([], 0, 1, 0, 0),
"
protect
": ([], 0, 1, 0, 0),
"
tableofcontents
": ([], 0, 1, 0, 0),
}
if newstyle:
table = load_table(open(os.path.join(sys.path[0], 'conversion.xml')))
convert(ifp, ofp, table,
discards=["
fi
", "
ifhtml
", "
makeindex
", "
makemodindex
", "
maketitle
",
"
noindent
", "
tableofcontents
"],
autoclosing=["
chapter
", "
section
", "
subsection
", "
subsubsection
",
"
paragraph
", "
subparagraph
", ])
table = load_table(open(os.path.join(sys.path[0], 'conversion.xml')))
convert(ifp, ofp, table)
if __name__ == "
__main__
":
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment