cpython/Doc/text2latex.py

56 lines
1.3 KiB
Python
Raw Normal View History

import os
import sys
import regex
import regsub
import string
import getopt
def main():
process(sys.stdin, sys.stdout)
dashes = regex.compile('^-+[ \t]*$')
equals = regex.compile('^=+[ \t]*$')
stars = regex.compile('^\*+[ \t]*$')
blank = regex.compile('^[ \t]*$')
indented = regex.compile('^\( *\t\| \)[ \t]*[^ \t]')
def process(fi, fo):
inverbatim = 0
line = '\n'
nextline = fi.readline()
while nextline:
prevline = line
line = nextline
nextline = fi.readline()
fmt = None
if dashes.match(nextline) >= 0:
fmt = '\\subsection{%s}\n'
elif equals.match(nextline) >= 0:
fmt = '\\section{%s}\n'
elif stars.match(nextline) >= 0:
fmt = '\\chapter{%s}\n'
if fmt:
nextline = '\n'
line = fmt % string.strip(line)
if '(' in line:
line = regsub.gsub('[a-zA-Z0-9_]+()',
'{\\\\tt \\0}', line)
elif inverbatim:
if blank.match(line) >= 0 and \
indented.match(nextline) < 0:
inverbatim = 0
fo.write('\\end{verbatim}\n')
else:
if indented.match(line) >= 0 and \
blank.match(prevline) >= 0:
inverbatim = 1
fo.write('\\begin{verbatim}\n')
if inverbatim:
line = string.expandtabs(line, 4)
elif not fmt and '(' in line:
line = regsub.gsub('[a-zA-Z0-9_]+()',
'\\\\code{\\0}', line)
fo.write(line)
main()