Python: instant markup, naive implementation

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()

 

 

你可能感兴趣的:(html,python,RegExp,instant-markup)