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

 

 

转载于:https://my.oschina.net/u/158589/blog/77159

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值