mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			110 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()
 |