mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
* Added separate checks for matching braces.
* Added more LaTex cmds from the docs. * Blocked forward-slash warnings with delimiters-only option. * Put help message on shorter line to fit an 80 char screen.
This commit is contained in:
parent
b539d05cbe
commit
62aa994633
1 changed files with 27 additions and 6 deletions
|
@ -52,6 +52,11 @@ cmdstr = r"""
|
||||||
\refmodindex \seerfc \makeindex \makemodindex \renewcommand
|
\refmodindex \seerfc \makeindex \makemodindex \renewcommand
|
||||||
\indexname \appendix \protect \indexiv \mbox \textasciitilde
|
\indexname \appendix \protect \indexiv \mbox \textasciitilde
|
||||||
\platform \seeurl \leftmargin \labelwidth \localmoduletable
|
\platform \seeurl \leftmargin \labelwidth \localmoduletable
|
||||||
|
\LaTeX \copyright \memberline \backslash \pi \centerline
|
||||||
|
\caption \vspace \textwidth \menuselection \textless
|
||||||
|
\makevar \csimplemacro \menuselection \bfcode \sub \release
|
||||||
|
\email \kwindex \refexmodindex \filenq \e \menuselection
|
||||||
|
\exindex \linev \newsgroup \verbatim \setshortversion
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def matchclose(c_lineno, c_symbol, openers, pairmap):
|
def matchclose(c_lineno, c_symbol, openers, pairmap):
|
||||||
|
@ -85,8 +90,6 @@ def checkit(source, opts, morecmds=[]):
|
||||||
for cmd in morecmds:
|
for cmd in morecmds:
|
||||||
validcmds.add('\\' + cmd)
|
validcmds.add('\\' + cmd)
|
||||||
|
|
||||||
openers = [] # Stack of pending open delimiters
|
|
||||||
|
|
||||||
if '-m' in opts:
|
if '-m' in opts:
|
||||||
pairmap = {']':'[(', ')':'(['} # Munged openers
|
pairmap = {']':'[(', ')':'(['} # Munged openers
|
||||||
else:
|
else:
|
||||||
|
@ -94,6 +97,10 @@ def checkit(source, opts, morecmds=[]):
|
||||||
openpunct = sets.Set('([') # Set of valid openers
|
openpunct = sets.Set('([') # Set of valid openers
|
||||||
|
|
||||||
delimiters = re.compile(r'\\(begin|end){([_a-zA-Z]+)}|([()\[\]])')
|
delimiters = re.compile(r'\\(begin|end){([_a-zA-Z]+)}|([()\[\]])')
|
||||||
|
braces = re.compile(r'({)|(})')
|
||||||
|
|
||||||
|
openers = [] # Stack of pending open delimiters
|
||||||
|
bracestack = [] # Stack of pending open braces
|
||||||
|
|
||||||
tablestart = re.compile(r'\\begin{(?:long)?table([iv]+)}')
|
tablestart = re.compile(r'\\begin{(?:long)?table([iv]+)}')
|
||||||
tableline = re.compile(r'\\line([iv]+){')
|
tableline = re.compile(r'\\line([iv]+){')
|
||||||
|
@ -107,7 +114,7 @@ def checkit(source, opts, morecmds=[]):
|
||||||
for lineno, line in izip(count(startline), islice(source, startline-1, None)):
|
for lineno, line in izip(count(startline), islice(source, startline-1, None)):
|
||||||
line = line.rstrip()
|
line = line.rstrip()
|
||||||
|
|
||||||
if '-f' not in opts and '/' in line:
|
if '/' in line and '-f' not in opts and '-d' not in opts:
|
||||||
# Warn whenever forward slashes encountered
|
# Warn whenever forward slashes encountered
|
||||||
line = line.rstrip()
|
line = line.rstrip()
|
||||||
print 'Warning, forward slash on line %d: %s' % (lineno, line)
|
print 'Warning, forward slash on line %d: %s' % (lineno, line)
|
||||||
|
@ -123,7 +130,7 @@ def checkit(source, opts, morecmds=[]):
|
||||||
if cmd not in validcmds:
|
if cmd not in validcmds:
|
||||||
print r'Warning, unknown tex cmd on line %d: \%s' % (lineno, cmd)
|
print r'Warning, unknown tex cmd on line %d: \%s' % (lineno, cmd)
|
||||||
|
|
||||||
# Check balancing of open/close markers (parens, brackets, etc)
|
# Check balancing of open/close parenthesis and brackets
|
||||||
for begend, name, punct in delimiters.findall(line):
|
for begend, name, punct in delimiters.findall(line):
|
||||||
if '-v' in opts:
|
if '-v' in opts:
|
||||||
print lineno, '|', begend, name, punct,
|
print lineno, '|', begend, name, punct,
|
||||||
|
@ -138,6 +145,18 @@ def checkit(source, opts, morecmds=[]):
|
||||||
if '-v' in opts:
|
if '-v' in opts:
|
||||||
print ' --> ', openers
|
print ' --> ', openers
|
||||||
|
|
||||||
|
# Balance opening and closing braces
|
||||||
|
for open, close in braces.findall(line):
|
||||||
|
if open == '{':
|
||||||
|
bracestack.append(lineno)
|
||||||
|
if close == '}':
|
||||||
|
try:
|
||||||
|
bracestack.pop()
|
||||||
|
except IndexError:
|
||||||
|
print r'Warning, unmatched } on line %s.' % (lineno,)
|
||||||
|
if '-v' in opts:
|
||||||
|
print ' --> ', bracestack
|
||||||
|
|
||||||
# Check table levels (make sure lineii only inside tableii)
|
# Check table levels (make sure lineii only inside tableii)
|
||||||
m = tablestart.search(line)
|
m = tablestart.search(line)
|
||||||
if m:
|
if m:
|
||||||
|
@ -152,6 +171,8 @@ def checkit(source, opts, morecmds=[]):
|
||||||
lastline = lineno
|
lastline = lineno
|
||||||
for lineno, symbol in openers:
|
for lineno, symbol in openers:
|
||||||
print "Unmatched open delimiter '%s' on line %d" % (symbol, lineno)
|
print "Unmatched open delimiter '%s' on line %d" % (symbol, lineno)
|
||||||
|
for lineno in bracestack:
|
||||||
|
print "Unmatched { on line %d" % (lineno,)
|
||||||
print 'Done checking %d lines.' % (lastline,)
|
print 'Done checking %d lines.' % (lastline,)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue