A naive implementation of instant markup, from <Beginning Python: From Novice to Professional>
#!/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()