PyH源码解析(6)——完结篇steemCreated with Sketch.

in #cn6 years ago

这一篇是精华,基本上不用阅读之前的5篇,只看这一篇就足够了。

Tag对象

PyH的核心就是Tag对象,Tag对象属性有:

  • str tagname:这个就是tag对象的tag名字。比如<div>对象,其名字就div。但是有一些Tag对象没有名字,当然真实的HTML是没有的,在实现代码中,没有Tag名字的对象表示它是一个容器对象,存放的是子Tag的序列,表示若干兄弟Tag的列表。
  • bool isSeq:这个就是表示在tagname中提到的容器对象,也就是tagname为空的对象,它存放的Tag的序列。
  • str id:表示Tag对象的索引id。特别注意的是,它不同于Tag元素的id属性。如果有ID属性,则它的值就是ID属性,如果没ID属性,它的值为Tag的名字,如果有多个相同的id,则在其后增加001等类似的序列区分。
    -dict attr:这是属性字典,存放的是Tag对象的属性,key为属性名称,value是内容。需要注意的是class名称替换为cl表示。
    -list self:Tag对象继承自list,list中存放的是它包括的内容和子Tag对象。

Tag对象的方法:

  • bool IsSelfClose():有些Tag对象是没有内容的,比如img xxxx,这个属性就是表示这个的,它在生成HTML字符串时与普通的Tag是不同的。
  • str render():返回Tag对象表示的html字符串。
  • Tag add(Tag obj):+操作符重载,表示两个兄弟Tag对象,返回的是一个容器对象。
  • Tag iadd(Tag obj):+=操作符重载,表示给当前Tag对象增加内容或者子Tag对象,如果obj为容器对象,则会展开分别作为子Tag加入。
  • Tag lshift(Tag obj):<<操作符重载,同+=类似,只是返回的是obj对象,以便<<可以多个连接起来。
  • str str():表示Tag对象的字符串表达形式。

PyH对象

PyH用于生成整个HTML对象,它继承自Tag对象,只不过增加了一些便捷的操作。如下:

  • iadd():当向PyH对象添加内容或者子Tag时,相当于给其Body对象增加。
  • addJS():增加JS脚本。
  • addCSS():增加CSS。