diff options
Diffstat (limited to 'Misc/renumber.py')
-rwxr-xr-x | Misc/renumber.py | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/Misc/renumber.py b/Misc/renumber.py new file mode 100755 index 0000000..a62257c --- /dev/null +++ b/Misc/renumber.py @@ -0,0 +1,108 @@ +#! /usr/local/bin/python + +# Renumber the Python FAQ + +import string +import regex +import sys +import os + +FAQ = 'FAQ' + +chapterprog = regex.compile('^\([1-9][0-9]*\)\. ') +questionprog = regex.compile('^\([1-9][0-9]*\)\.\([1-9][0-9]*\)\. ') +newquestionprog = regex.compile('^Q\. ') +blankprog = regex.compile('^[ \t]*$') +indentedorblankprog = regex.compile('^\([ \t]+\|[ \t]*$\)') + +def main(): + print 'Reading lines...' + lines = open(FAQ, 'r').readlines() + print 'Renumbering in memory...' + oldlines = lines[:] + after_blank = 1 + chapter = 0 + question = 0 + chapters = ['\n'] + questions = [] + for i in range(len(lines)): + line = lines[i] + if after_blank: + n = chapterprog.match(line) + if n >= 0: + chapter = chapter + 1 + question = 0 + line = `chapter` + '. ' + line[n:] + lines[i] = line + chapters.append(' ' + line) + questions.append('\n') + questions.append(' ' + line) + afterblank = 0 + continue + n = questionprog.match(line) + if n < 0: n = newquestionprog.match(line) - 3 + if n >= 0: + question = question + 1 + line = '%d.%d. '%(chapter, question) + line[n:] + lines[i] = line + questions.append(' ' + line) + # Add up to 4 continuations of the question + for j in range(i+1, i+5): + if blankprog.match(lines[j]) >= 0: + break + questions.append(' '*(n+2) + lines[j]) + afterblank = 0 + continue + afterblank = (blankprog.match(line) >= 0) + print 'Inserting list of chapters...' + chapters.append('\n') + for i in range(len(lines)): + line = lines[i] + if regex.match( + '^This FAQ is divided in the following chapters', + line) >= 0: + i = i+1 + while 1: + line = lines[i] + if indentedorblankprog.match(line) < 0: + break + del lines[i] + lines[i:i] = chapters + break + else: + print '*** Can\'t find header for list of chapters' + print '*** Chapters found:' + for line in chapters: print line, + print 'Inserting list of questions...' + questions.append('\n') + for i in range(len(lines)): + line = lines[i] + if regex.match('^Here.s an overview of the questions', + line) >= 0: + i = i+1 + while 1: + line = lines[i] + if indentedorblankprog.match(line) < 0: + break + del lines[i] + lines[i:i] = questions + break + else: + print '*** Can\'t find header for list of questions' + print '*** Questions found:' + for line in questions: print line, + if lines == oldlines: + print 'No changes.' + return + print 'Writing new file...' + f = open(FAQ + '.new', 'w') + for line in lines: + f.write(line) + f.close() + print 'Making backup...' + os.rename(FAQ, FAQ + '~') + print 'Moving new file...' + os.rename(FAQ + '.new', FAQ) + print 'Done.' + +main() |