#!/usr/bin/env python
from __future__ import generators
import sys
import os
if not hasattr(__builtins__, "enumerate"):
def enumerate(sequence):
n = 0
for item in sequence:
yield n, item
n += 1
def findtitles(lines):
titles = []
subtitles = []
for linenum, line in enumerate(lines):
if line.strip().startswith("===="):
titles.append(linenum-1)
if line.strip().startswith("----"):
subtitles.append(linenum-1)
return titles, subtitles
def outputtitle(lines, titles):
if len(titles) == 1:
title = lines[titles[0]].strip()
else:
title = " / ".join([lines[titleline].strip() for titleline in titles])
yield """"""
yield """
%s
""" % title
def outputnavbar(lines, filename):
yield """
ContentsHistorySourceEmail Feedback
""" % (filename, filename, filename)
def substlinks(line):
for protocol in ["http", "ftp", "https"]:
lineparts = line.split()
for part in lineparts:
if part.startswith(protocol + "://"):
line = line.replace(part, '%s' % (part, part), 1)
return line
def substvars(line, mikivars):
mikistartmark = ""
if line.find(mikistartmark) != -1:
mikistart = line.find(mikistartmark)+len(mikistartmark)
mikicommand = line[mikistart:line.find(mikiendmark, mikistart)]
line = line.replace(mikistartmark + mikicommand + mikiendmark, "", 1)
mikicommand = mikicommand.strip()
if mikicommand.count("=") == 1:
varname, value = mikicommand.split("=")
if value.isdigit(): value = int(value)
mikivars[varname] = value
# if the line just contained the mikicommand, don't print it out
if not line.strip():
return ""
return line
def processline(line, mikivars, style):
if mikivars.get("showmarkup", 0):
line = line.replace("&", "&").replace("<", "<").replace(">", ">")
if style == "title":
if mikivars["inpre"]:
yield "
" % line.strip()
mikivars["inpre"] = 0
elif style == "blank":
pass
else:
if not mikivars["inpre"]:
yield "
"
mikivars["inpre"] = 1
yield line
def processlines(lines, inputfile):
titles, subtitles = findtitles(lines)
for outputline in outputtitle(lines, titles):
yield outputline
for outputline in outputnavbar(lines, inputfile):
yield outputline
mikivars = {}
mikivars["inpre"] = 0
for linenum, line in enumerate(lines):
line = substlinks(line)
line = substvars(line, mikivars)
if linenum in titles:
style = "title"
elif linenum in subtitles:
style = "subtitle"
elif linenum-1 in subtitles+titles:
style = "blank"
else:
style = ""
for outputline in processline(line, mikivars, style):
yield outputline
if mikivars["inpre"]:
yield "
"
yield """
"""
def converttxt(inputfile, outputfile, templates):
"""reads in stdin using fromfileclass, converts using convertorclass, writes to stdout"""
inputlines = inputfile.readlines()
outputlines = processlines(inputlines, inputfile.name)
for outputline in outputlines:
outputfile.write(outputline)
return 1
def main():
from translate.convert import convert
formats = {"":("html", converttxt), "html":("html", convert.copyinput), "css":("css", convert.copyinput)}
parser = convert.ConvertOptionParser(formats, usepots=True, description=__doc__)
parser.run()
if __name__ == "__main__":
main()
if __name__ == "__fred__":
processfile = 1
if len(sys.argv) == 1:
inputfile = sys.stdin
outputfile = sys.stdout
if len(sys.argv) > 1:
inputfilename = sys.argv[1]
print inputfilename
if os.path.isdir(inputfilename):
sys.exit()
if inputfilename.endswith(".css") or inputfilename.endswith(".html"):
processfile = 0
inputfile = open(inputfilename , 'r')
if len(sys.argv) > 2:
outputfilename = sys.argv[2]
outputfile = open(outputfilename, 'w')
else:
outputfile = sys.stdout
sys.stdout = outputfile
lines = inputfile.readlines()
if "" in "".join(lines).lower():
processfile = 0
if not processfile:
outputfile.writelines(lines)
sys.exit()
processlines(lines)