Initial revision
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()