A naive implementation of instant markup, from <Beginning Python: From Novice to Professional>html
#!/usr/bin/env python import sys def lines(f): for line in f: yield line yield '\n' def blocks(f): block = [] for line in lines(f): if line.strip(): block.append(line) elif block: yield ''.join(block).strip() block = [] def test(): if len(sys.argv) <= 1: print 'argument not correct' else: # print blocks in the file with open(sys.argv[1]) as f: i = 1 for block in blocks(f): print '[block#%d]' % i print block i += 1 if __name__ == '__main__': test()
#!/usr/bin/env python ''' a naive markup program ''' import sys, re from util import * def markup_simple(finput): ''' simple markup strategy seperate text into blocks apply a filter on *XXX* string ''' print '<html><head><title>...</title><body>' title = True for block in blocks(finput): block = re.sub(r'\*(.+?)\*', r'<em><b>\1</b></em>', block) block = re.sub(r'(http://[\.a-zA-Z0-9/]+)', r'<a href="\1"> \1 </a>', block) block = re.sub(r'([\.a-zA-Z0-9]+@[\.a-zA-Z0-9]+[a-zA-Z0-9]+)', r'<a href="mailto:\1"> \1 </a>', block) if title: print '<h1>' print block print '</h1>' title = False else: print '<p>' print block print '</p>' print '</body></html>' return None def markup_normal(finput): ''' detect the type of the block (heading, text body, a list item), and appy different filters on it apply a filter on *XXX* string ''' pass def main(): # init if len(sys.argv) == 1: finput = sys.stdin else: finput = open(sys.argv[1], "r") # apply markup strategy markup_simple(finput) # cleanup if finput != sys.stdin: finput.close() if __name__ == '__main__': main()