mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
Teach format_changelog.py to emit HTML.
This commit is contained in:
parent
f5fc7e3306
commit
4e7046cfb2
@ -235,7 +235,7 @@ def head_score(s):
|
||||
return score
|
||||
|
||||
class ChangeLog(object):
|
||||
def __init__(self, wrapText=True):
|
||||
def __init__(self, wrapText=True, blogOrder=True):
|
||||
self.prehead = []
|
||||
self.mainhead = None
|
||||
self.headtext = []
|
||||
@ -244,6 +244,7 @@ class ChangeLog(object):
|
||||
self.cursection = None
|
||||
self.lineno = 0
|
||||
self.wrapText = wrapText
|
||||
self.blogOrder = blogOrder
|
||||
|
||||
def addLine(self, tp, line):
|
||||
self.lineno += 1
|
||||
@ -312,6 +313,38 @@ class ChangeLog(object):
|
||||
initial_indent=" "*indent1,
|
||||
subsequent_indent=" "*indent2))
|
||||
|
||||
def dumpPreheader(self, graf):
|
||||
self.dumpGraf(graf, 0)
|
||||
print
|
||||
|
||||
def dumpMainhead(self, head):
|
||||
print head
|
||||
|
||||
def dumpHeadGraf(self, graf):
|
||||
self.dumpGraf(graf, 2)
|
||||
print
|
||||
|
||||
def dumpSectionHeader(self, header):
|
||||
print header
|
||||
|
||||
def dumpStartOfSections(self):
|
||||
pass
|
||||
|
||||
def dumpEndOfSections(self):
|
||||
pass
|
||||
|
||||
def dumpEndOfSection(self):
|
||||
print
|
||||
|
||||
def dumpEndOfChangelog(self):
|
||||
print
|
||||
|
||||
def dumpItem(self, grafs):
|
||||
self.dumpGraf(grafs[0],4,6)
|
||||
for par in grafs[1:]:
|
||||
print
|
||||
self.dumpGraf(par,6,6)
|
||||
|
||||
def collateAndSortSections(self):
|
||||
heads = []
|
||||
sectionsByHead = { }
|
||||
@ -330,23 +363,79 @@ class ChangeLog(object):
|
||||
|
||||
def dump(self):
|
||||
if self.prehead:
|
||||
self.dumpGraf(self.prehead, 0)
|
||||
print
|
||||
print self.mainhead
|
||||
self.dumpPreheader(self.prehead)
|
||||
|
||||
if not self.blogOrder:
|
||||
self.dumpMainhead(self.mainhead)
|
||||
|
||||
for par in self.headtext:
|
||||
self.dumpGraf(par, 2)
|
||||
print
|
||||
self.dumpHeadGraf(par)
|
||||
|
||||
if self.blogOrder:
|
||||
self.dumpMainhead(self.mainhead)
|
||||
|
||||
self.dumpStartOfSections()
|
||||
for _,head,items in self.sections:
|
||||
if not head.endswith(':'):
|
||||
print >>sys.stderr, "adding : to %r"%head
|
||||
head = head + ":"
|
||||
print head
|
||||
self.dumpSectionHeader(head)
|
||||
for _,grafs in items:
|
||||
self.dumpGraf(grafs[0],4,6)
|
||||
for par in grafs[1:]:
|
||||
print
|
||||
self.dumpGraf(par,6,6)
|
||||
print
|
||||
self.dumpItem(grafs)
|
||||
self.dumpEndOfSection()
|
||||
self.dumpEndOfSections()
|
||||
self.dumpEndOfChangelog()
|
||||
|
||||
class HTMLChangeLog(ChangeLog):
|
||||
def __init__(self, *args, **kwargs):
|
||||
ChangeLog.__init__(self, *args, **kwargs)
|
||||
|
||||
def htmlText(self, graf):
|
||||
for line in graf:
|
||||
line = line.rstrip().replace("&","&")
|
||||
line = line.rstrip().replace("<","<").replace(">",">")
|
||||
sys.stdout.write(line.strip())
|
||||
sys.stdout.write(" ")
|
||||
|
||||
def htmlPar(self, graf):
|
||||
sys.stdout.write("<p>")
|
||||
self.htmlText(graf)
|
||||
sys.stdout.write("</p>\n")
|
||||
|
||||
def dumpPreheader(self, graf):
|
||||
self.htmlPar(graf)
|
||||
|
||||
def dumpMainhead(self, head):
|
||||
sys.stdout.write("<h2>%s</h2>"%head)
|
||||
|
||||
def dumpHeadGraf(self, graf):
|
||||
self.htmlPar(graf)
|
||||
|
||||
def dumpSectionHeader(self, header):
|
||||
header = header.replace(" o ", "", 1).lstrip()
|
||||
sys.stdout.write(" <li>%s\n"%header)
|
||||
sys.stdout.write(" <ul>\n")
|
||||
|
||||
def dumpEndOfSection(self):
|
||||
sys.stdout.write(" </ul>\n\n")
|
||||
|
||||
def dumpEndOfChangelog(self):
|
||||
pass
|
||||
|
||||
def dumpStartOfSections(self):
|
||||
print "<ul>\n"
|
||||
|
||||
def dumpEndOfSections(self):
|
||||
print "</ul>\n"
|
||||
|
||||
def dumpItem(self, grafs):
|
||||
grafs[0][0] = grafs[0][0].replace(" - ", "", 1).lstrip()
|
||||
sys.stdout.write(" <li>")
|
||||
if len(grafs) > 1:
|
||||
for par in grafs:
|
||||
self.htmlPar(par)
|
||||
else:
|
||||
self.htmlText(grafs[0])
|
||||
print
|
||||
|
||||
op = optparse.OptionParser(usage="usage: %prog [options] [filename]")
|
||||
@ -358,6 +447,15 @@ op.add_option('-S', '--no-sort', action='store_false',
|
||||
help='Do not sort or collate sections')
|
||||
op.add_option('-o', '--output', dest='output',
|
||||
default=None, metavar='FILE', help="write output to FILE")
|
||||
op.add_option('-H', '--html', action='store_true',
|
||||
dest='html', default=False,
|
||||
help="generate an HTML fragment")
|
||||
op.add_option('-1', '--first', action='store_true',
|
||||
dest='firstOnly', default=False,
|
||||
help="write only the first section")
|
||||
op.add_option('-b', '--blog-format', action='store_true',
|
||||
dest='blogOrder', default=False,
|
||||
help="Write the header in blog order")
|
||||
|
||||
options,args = op.parse_args()
|
||||
|
||||
@ -376,7 +474,12 @@ if fname != '-':
|
||||
|
||||
nextline = None
|
||||
|
||||
CL = ChangeLog(wrapText=options.wrapText)
|
||||
if options.html:
|
||||
ChangeLogClass = HTMLChangeLog
|
||||
else:
|
||||
ChangeLogClass = ChangeLog
|
||||
|
||||
CL = ChangeLogClass(wrapText=options.wrapText, blogOrder=options.blogOrder)
|
||||
parser = head_parser
|
||||
|
||||
for line in sys.stdin:
|
||||
@ -405,6 +508,9 @@ if options.sort:
|
||||
|
||||
CL.dump()
|
||||
|
||||
if options.firstOnly:
|
||||
sys.exit(0)
|
||||
|
||||
if nextline is not None:
|
||||
print nextline
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user