#----------------------------------------------------------------------
# marksub.py JJS 3/25/97
#
# This module translates markup tags in a variety of ways.
#----------------------------------------------------------------------
from regsub import gsub
import string
gMarkupCodes = [
'<b>', # bold on
'<i>', # italic or underline on
'<u>', # underline on
'<l>', # blink on
'<t>'] # plain (normal) text
#----------------------------------------------------------------------
# FUNCTION: marksub
# Given a string s and a translation dictionary trans,
# replace each markup tag with its translated version.
#
# This function also splits the lines if linelen > 0.
# It returns a list of strings to output.
#----------------------------------------------------------------------
def marksub( s, trans, linelen=0 ):
if linelen > 0:
lines = splitLines(s,linelen)
else:
lines = [s]
for i in range(0,len(lines)):
for pat in trans.keys():
lines[i] = gsub( pat, trans[pat], lines[i])
return lines
#----------------------------------------------------------------------
# FUNCTION: splitLines
# This function splits the given string into lines.
# Ideally, it takes into account markup tags which are invisible.
# (Currently, it just ignores them, which may cause lines to
# come out a little shorter when lots of markups are present.)
#----------------------------------------------------------------------
def splitLines(s, linelen):
lines = string.split(s, "\n")
outlines = []
for line in lines:
while len(line) > linelen:
pos = string.rfind(line[:linelen],' ')
if pos < 0: break
outlines.append(line[:pos])
line = line[pos+1:]
outlines.append(line)
return outlines
#----------------------------------------------------------------------
# TRANSLATION SET: plain()
# This set strips all markups.
#----------------------------------------------------------------------
def plain():
out = {}
for c in gMarkupCodes: out[c] = ''
return out
#----------------------------------------------------------------------
# TRANSLATION SET: showcodes()
# This set leaves all codes visible and untranslated.
#----------------------------------------------------------------------
def showcodes():
out = {}
for c in gMarkupCodes: out[c] = c
return out
#----------------------------------------------------------------------
# TRANSLATION SET: html()
# This generates mostly standard HTML.
#----------------------------------------------------------------------
def html():
out = {}
for c in gMarkupCodes: out[c] = c
out['<u>'] = ''
out['<t>'] = '</i></b>'
return out
#----------------------------------------------------------------------
# TRANSLATION SET: vt100()
# This set generates VT100 escape sequences.
#----------------------------------------------------------------------
def vt100():
out = {}
for c in gMarkupCodes: out[c] = ''
ATT = chr(27)+'['
out['<b>'] = ATT + '1m'
out['<l>'] = ATT + '5m'
out['<u>'] = ATT + '4m'
out['<i>'] = ATT + '7m'
out['<t>'] = ATT + '0m'
return out
#----------------------------------------------------------------------
# FUNCTION: test() -- tests the module
#----------------------------------------------------------------------
#def test():
# msg = 'This is <b>bold, <i>italic<t>, <u>underlined<t> text.'
# print msg
# print marksub( msg, plain() )
# print marksub( msg, showcodes() )
# print marksub( msg, html() )
# print marksub( msg, vt100(), 40 )
# print
# raw_input()