111 lines
2.6 KiB
Python
Executable File
111 lines
2.6 KiB
Python
Executable File
#! /usr/bin/env 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()
|