From 81b7d150b1c815cdd032c2b5795b6c4244e56ace Mon Sep 17 00:00:00 2001 From: xue <> Date: Tue, 22 Nov 2005 22:23:25 +0000 Subject: --- framework/Web/UI/THtmlWriter.php | 235 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 framework/Web/UI/THtmlWriter.php (limited to 'framework/Web/UI/THtmlWriter.php') diff --git a/framework/Web/UI/THtmlWriter.php b/framework/Web/UI/THtmlWriter.php new file mode 100644 index 00000000..75926d55 --- /dev/null +++ b/framework/Web/UI/THtmlWriter.php @@ -0,0 +1,235 @@ +2, + 'a'=>0, + 'acronym'=>0, + 'address'=>2, + 'area'=>1, + 'b'=>0, + 'base'=>1, + 'basefont'=>1, + 'bdo'=>0, + 'bgsound'=>1, + 'big'=>0, + 'blockquote'=>2, + 'body'=>2, + 'br'=>2, + 'button'=>0, + 'caption'=>2, + 'center'=>2, + 'cite'=>0, + 'code'=>0, + 'col'=>1, + 'colgroup'=>2, + 'del'=>0, + 'dd'=>0, + 'dfn'=>0, + 'dir'=>2, + 'div'=>2, + 'dl'=>2, + 'dt'=>0, + 'em'=>0, + 'embed'=>1, + 'fieldset'=>2, + 'font'=>0, + 'form'=>2, + 'frame'=>1, + 'frameset'=>2, + 'h1'=>2, + 'h2'=>2, + 'h3'=>2, + 'h4'=>2, + 'h5'=>2, + 'h6'=>2, + 'head'=>2, + 'hr'=>1, + 'html'=>2, + 'i'=>0, + 'iframe'=>2, + 'img'=>1, + 'input'=>1, + 'ins'=>0, + 'isindex'=>1, + 'kbd'=>0, + 'label'=>0, + 'legend'=>2, + 'li'=>0, + 'link'=>1, + 'map'=>2, + 'marquee'=>2, + 'menu'=>2, + 'meta'=>1, + 'nobr'=>0, + 'noframes'=>2, + 'noscript'=>2, + 'object'=>2, + 'ol'=>2, + 'option'=>2, + 'p'=>0, + 'param'=>2, + 'pre'=>2, + 'ruby'=>2, + 'rt'=>2, + 'q'=>0, + 's'=>0, + 'samp'=>0, + 'script'=>2, + 'select'=>2, + 'small'=>2, + 'span'=>0, + 'strike'=>0, + 'strong'=>0, + 'style'=>2, + 'sub'=>0, + 'sup'=>0, + 'table'=>2, + 'tbody'=>2, + 'td'=>0, + 'textarea'=>0, + 'tfoot'=>2, + 'th'=>0, + 'thead'=>2, + 'title'=>2, + 'tr'=>2, + 'tt'=>0, + 'u'=>0, + 'ul'=>2, + 'var'=>0, + 'wbr'=>1, + 'xml'=>2 + ); + private static $_attrEncode=array( + 'abbr'=>true, + 'accesskey'=>true, + 'align'=>false, + 'alt'=>true, + 'autocomplete'=>false, + 'axis'=>true, + 'background'=>true, + 'bgcolor'=>false, + 'border'=>false, + 'bordercolor'=>false, + 'cellpadding'=>false, + 'cellspacing'=>false, + 'checked'=>false, + 'class'=>true, + 'cols'=>false, + 'colspan'=>false, + 'content'=>true, + 'coords'=>false, + 'dir'=>false, + 'disabled'=>false, + 'for'=>false, + 'headers'=>true, + 'height'=>false, + 'href'=>true, + 'id'=>false, + 'longdesc'=>true, + 'maxlength'=>false, + 'multiple'=>false, + 'name'=>false, + 'nowrap'=>false, + 'onclick'=>true, + 'onchange'=>true, + 'readonly'=>false, + 'rel'=>false, + 'rows'=>false, + 'rowspan'=>false, + 'rules'=>false, + 'scope'=>false, + 'selected'=>false, + 'shape'=>false, + 'size'=>false, + 'src'=>true, + 'style'=>false, + 'tabindex'=>false, + 'target'=>false, + 'title'=>true, + 'type'=>false, + 'usemap'=>false, + 'valign'=>false, + 'value'=>true, + 'vcard_name'=>false, + 'width'=>false, + 'wrap'=>false + ); + + private $_attributes=array(); + private $_openTags=array(); + private $_writer=null; + + public function __construct($writer) + { + $this->_writer=$writer; + } + + public function isValidFormAttribute($name) + { + return true; + } + + public function addAttribute($name,$value) + { + $this->_attributes[$name]=isset(self::$_attrEncode[$name])?THttpUtility::htmlEncode($value):$value; + } + + public function flush() + { + $this->_writer->flush(); + } + + public function write($str) + { + $this->_writer->write($str); + } + + public function writeLine($str='') + { + $this->_writer->write($str.self::CHAR_NEWLINE); + } + + public function writeAttribute($name,$value,$encode=false) + { + $this->_writer->write(' '.$name.='"'.($encode?THttpUtility::htmlEncode($value):$value).'"'); + } + + public function renderBeginTag($tagName) + { + $tagType=isset(self::$_tagTypes[$tagName])?self::$_tagTypes[$tagName]:self::TAG_OTHER; + $str='<'.$tagName; + foreach($this->_attributes as $name=>$value) + $str.=' '.$name.'="'.$value.'"'; + if($tagType===self::TAG_NONCLOSING) + { + $str.=' />'; + array_push($this->_openTags,''); + } + else + { + $str.='>'; + array_push($this->_openTags,$tagName); + } + $this->_writer->write($str); + $this->_attributes=array(); + } + + public function renderEndTag() + { + if(!empty($this->_openTags) && ($tagName=array_pop($this->_openTags))!=='') + $this->_writer->write(''); + } +} + +?> \ No newline at end of file -- cgit v1.2.3