当前位置: 首页 > 工具软件 > PyH > 使用案例 >

python pyh_可以在python3下面用的pyh

何星鹏
2023-12-01

#@file: pyh.py#@purpose: a HTML tag generator#@author: Emmanuel Turlay

__doc__ = """The pyh.py module is the core of the PyH package. PyH lets you

generate HTML tags from within your python code.

See http://code.google.com/p/pyh/ for documentation."""

__author__ = "Emmanuel Turlay "

__version__ = '$Revision: 43 $'

__date__ = '$Date$'

from sys import_getframe, stdout, modules, version

nOpen={}

nl= '\n'doctype= '\n'charset= '\n'tags= ['html', 'body', 'head', 'link', 'meta', 'div', 'p', 'form', 'legend','input', 'select', 'span', 'b', 'i', 'option', 'img', 'script','table', 'tr', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','fieldset', 'a', 'title', 'body', 'head', 'title', 'script', 'br', 'table']

selfClose= ['input', 'img', 'link', 'br']classTag(list):

tagname= ''

def __init__(self, *arg, **kw):

self.attributes=kwifself.tagname :

name=self.tagname

self.isSeq=Falseelse:

name= 'sequence'self.isSeq=True

self.id= kw.get('id', name)#self.extend(arg)

for a inarg: self.addObj(a)def __iadd__(self, obj):if isinstance(obj, Tag) andobj.isSeq:for o inobj: self.addObj(o)else: self.addObj(obj)returnselfdefaddObj(self, obj):if not isinstance(obj, Tag): obj =str(obj)

id=self.setID(obj)

setattr(self, id, obj)

self.append(obj)defsetID(self, obj):ifisinstance(obj, Tag):

id=obj.id

n= len([t for t in self if isinstance(t, Tag) andt.id.startswith(id)])else:

id= 'content'n= len([t for t in self if notisinstance(t, Tag)])if n: id = '%s_%03i' %(id, n)if isinstance(obj, Tag): obj.id =idreturniddef __add__(self, obj):if self.tagname: returnTag(self, obj)

self.addObj(obj)returnselfdef __lshift__(self, obj):

self+=objreturnobjdefrender(self):

result= ''

ifself.tagname:

result= '' % (self.tagname, self.renderAtt(), self.selfClose()*'/')if notself.selfClose():for c inself:ifisinstance(c, Tag):

result+=c.render()else: result +=cifself.tagname:

result+= '%s>' %self.tagname

result+= '\n'

returnresultdefrenderAtt(self):

result= ''

for n, v inself.attributes.items():if n != 'txt' and n != 'open':if n == 'cl': n = 'class'result+= '%s="%s"' %(n, v)returnresultdefselfClose(self):return self.tagname inselfClosedefTagFactory(name):classf(Tag):

tagname=name

f.__name__ =namereturnf

thisModule= modules[__name__]for t intags: setattr(thisModule, t, TagFactory(t))defValidW3C():

out= a(img(src='http://www.w3.org/Icons/valid-xhtml10', alt='Valid XHTML 1.0 Strict'), href='http://validator.w3.org/check?uri=referer')returnoutclassPyH(Tag):

tagname= 'html'

def __init__(self, name='MyPyHPage'):

self+=head()

self+=body()

self.attributes= dict(xmlns='http://www.w3.org/1999/xhtml', lang='en')

self.head+=title(name)def __iadd__(self, obj):if isinstance(obj, head) orisinstance(obj, body): self.addObj(obj)elif isinstance(obj, meta) or isinstance(obj, link): self.head +=objelse:

self.body+=obj

id=self.setID(obj)

setattr(self, id, obj)returnselfdef addJS(self, *arg):for f in arg: self.head += script(type='text/javascript', src=f)def addCSS(self, *arg):for f in arg: self.head += link(rel='stylesheet', type='text/css', href=f)def printOut(self,file=''):if file: f = open(file, 'w')else: f =stdout

f.write(doctype)

f.write(self.render())

f.flush()iffile: f.close()classTagCounter:

_count={}

_lastOpen=[]for t in tags: _count[t] =0def __init__(self, name):

self._name=namedefopen(self, tag):ifisLegal(tag):

self._count[tag]+= 1self._lastOpen+=[tag]defclose(self, tag):if isLegal(tag) and self._lastOpen[-1] ==tag:

self._count[tag]-= 1self._lastOpen.pop()else:print('Cross tagging is wrong')defisAllowed(self, tag, open):if not open andself.isClosed(tag):print('TRYING TO CLOSE NON-OPEN TAG: %s' %tag)returnFalsereturnTruedefisOpen(self, tag):if isLegal(tag): returnself._count[tag]defisClosed(self, tag):if isLegal(tag): return notself._count[tag]defisLegal(tag):if tag in tags: returnTrueelse:print('ILLEGAL TAG: %s' %tag)return False

 类似资料: