Пример #1
0
 /**
  * 
  * 压缩开始标签
  */
 public function compressStartTag($token)
 {
     if ($this->isXML) {
         return $token['value'];
     }
     $tag = $token['tag'];
     $lowerTag = $token['lowerTag'];
     $attrs = $token['attrs'];
     $resultAttrs = array();
     foreach ($attrs as $item) {
         if ($item[1] === '=') {
             $valueDetail = Fl_Html_Static::getUnquoteText($item[2]);
             if ($this->options['removeAttrDefaultValue'] && Fl_Html_Static::isTagAttrDefaultValue($item[0], $valueDetail['text'], $lowerTag)) {
                 continue;
             }
             if ($this->options['attrOnlyName'] && Fl_Html_Static::isTagOnlyNameAttr($item[0])) {
                 $item = array($item[0]);
             } else {
                 if ($this->options['removeAttrQuote'] && Fl_Html_Static::isAttrValueNoQuote($valueDetail['text'], $this)) {
                     $item[2] = $valueDetail['text'];
                 }
             }
         }
         $resultAttrs[] = $item;
     }
     $return = Fl_Html_Static::LEFT;
     if ($this->options['tagToLower']) {
         $return .= $lowerTag;
     } else {
         $return .= $tag;
     }
     $blankChar = ' ';
     $return .= $blankChar;
     foreach ($resultAttrs as $item) {
         $itemText = join('', $item);
         $lastChar = substr($return, strlen($return) - 1);
         if ($lastChar !== '"' && $lastChar !== "'" && $lastChar !== $blankChar) {
             if ($item[1] !== '=' && $this->isTpl($item[0]) && !$this->checkTplHasOutput($item[0])) {
                 //do nothing
             } else {
                 $return .= $blankChar;
             }
         }
         $return .= $itemText;
     }
     if ($this->options['endSingleTag'] && Fl_Html_Static::isSingleTag($lowerTag)) {
         $lastChar = substr($return, strlen($return) - 1);
         if ($lastChar !== '"' && $lastChar !== "'" && $lastChar !== $blankChar) {
             $return .= $blankChar;
         }
         $return .= '/';
     }
     $return = rtrim($return);
     $return .= Fl_Html_Static::RIGHT;
     return $return;
 }
Пример #2
0
 /**
  * 
  * tag start statement
  */
 public function tagStartStatement()
 {
     $token = $this->currentToken;
     $tag = strtolower(Fl_Html_Static::getTagName($token['value'], $this));
     if (Fl_Html_Static::isSingleTag($tag)) {
         return array("type" => FL_TOKEN_HTML_SINGLE_TAG, "value" => $this->getValue($token));
     }
     $result = array();
     $this->inTags[] = $tag;
     $comment = array();
     while ($this->currentToken) {
         $this->getNextToken();
         if (Fl_Html_Static::isTag($this->currentToken)) {
             if (Fl_Html_Static::optionalTagUntil($tag, $this->currentToken, $this)) {
                 $this->peekToken = $this->currentToken;
                 if ($this->currentToken['type'] === FL_TOKEN_HTML_TAG_END) {
                     $tagEnd = $this->currentToken;
                     if ($tag === Fl_Html_Static::getTagName($this->currentToken['value'], $this)) {
                         $this->getNextToken();
                     }
                 }
                 break;
             }
         }
         $re = $this->statement();
         if ($re) {
             $result[] = $re;
         }
     }
     array_pop($this->inTags);
     return array("type" => FL_TOKEN_HTML_TAG, "tag" => $tag, "value" => $this->getValue($token), "children" => $result, "end" => $this->getValue($tagEnd));
 }