]*\)>')
+ampprog = regex.compile('&')
+aprog = regex.compile('^A\. +')
+qprog = regex.compile('>Q\. +')
+qrefprog = regex.compile('question +\([0-9]\.[0-9]+\)')
+versionprog = regex.compile('^Version: ')
+emailprog = regex.compile('<\([^>@:]+@[^>@:]+\)>')
+
+def main():
+ print 'Reading lines...'
+ lines = open(FAQ, 'r').readlines()
+ print 'Renumbering in memory...'
+ oldlines = lines[:]
+ after_blank = 1
+ chapter = 0
+ question = 0
+ chapters = ['']
+ questions = ['']
+ for i in range(len(lines)):
+ line = lines[i]
+ if after_blank:
+ n = chapterprog.match(line)
+ if n >= 0:
+ chapter = chapter + 1
+ if chapter != 1:
+ questions.append('\n')
+ question = 0
+ lines[i] = '' + line[n:-1] + '
\n'
+ chapters.append('- ' + line[n:])
+ questions.append('
- ' + line[n:])
+ questions.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,
+ # final cleanup
+ print "Final cleanup..."
+ doingpre = 0
+ for i in range(len(lines)):
+ # set lines indented by >= 8 spaces using PRE
+ # blank lines either terminate PRE or separate paragraphs
+ n = eightblanksprog.match(lines[i])
+ if n < 0: n = mailheaderprog.match(lines[i])
+ if n >= 0:
+ if versionprog.match(lines[i]) > 0:
+ version = string.split(lines[i])[1]
+ if doingpre == 0:
+ lines[i] = '\n' + lines[i]
+ doingpre = 1
+ continue
+ n = blankprog.match(lines[i])
+ if n >= 0:
+ # print '*** ', lines[i-1], doingpre
+ if doingpre == 1:
+ lines[i] = '
\n'
+ doingpre = 0
+ else:
+ lines[i] = '
\n'
+ continue
+
+ # & -> &
+ n = ampprog.search(lines[i])
+ if n >= 0:
+ lines[i] = regsub.gsub(ampprog, '&', lines[i])
+ # no continue - there might be other changes to the line...
+
+ # zap all the 'Q.' and 'A.' leaders - what happened to the
+ # last couple?
+ n = qprog.search(lines[i])
+ if n >= 0:
+ lines[i] = regsub.sub(qprog, '>', lines[i])
+ # no continue - there might be other changes to the line...
+
+ n = aprog.search(lines[i])
+ if n >= 0:
+ lines[i] = regsub.sub(aprog, '', lines[i])
+ # no continue - there might be other changes to the line...
+
+ # patch up hard refs to questions
+ n = qrefprog.search(lines[i])
+ if n >= 0:
+ lines[i] = regsub.sub(qrefprog,
+ 'question \\1', lines[i])
+ # no continue - there might be other changes to the line...
+
+ # make into actual links
+ n = urlprog.search(lines[i])
+ if n >= 0:
+ lines[i] = regsub.gsub(urlprog, '\\1', lines[i])
+ # no continue - there might be other changes to the line...
+
+ # make into links
+ n = emailprog.search(lines[i])
+ if n >= 0:
+ lines[i] = regsub.gsub(emailprog,
+ '\\1', lines[i])
+ # no continue - there might be other changes to the line...
+
+ lines[0:0] = ['Python Frequently Asked Questions v',
+ version,
+ '\n',
+ '\n',
+ '(This file was generated using',
+ 'faq2html.py.)\n']
+ lines.append('
\n')
+
+ print 'Writing html file...'
+ f = open(FAQ + '.html', 'w')
+ for line in lines:
+ f.write(line)
+ f.close()
+ print 'Done.'
+
+main()