Contents  History  Source  Email Feedback
#!/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 """
  Contents 
  History 
  Source 
  Email 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 "
" yield "

%s

" % line.strip() mikivars["inpre"] = 0 elif style == "subtitle": if mikivars["inpre"]: yield "" yield "

%s

" % 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)