/** * * 压缩开始标签 */ 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; }
/** * * 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)); }