home *** CD-ROM | disk | FTP | other *** search
- #! /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
- number = '%d.%d. '%(chapter, question)
- line = number + line[n:]
- lines[i] = line
- questions.append(' ' + line)
- # Add up to 4 continuations of the question
- n = len(number)
- 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()
-