/** * * * @param string $tag * @param array $nextToken */ public static function optionalTagUntil($tag, $nextToken = array(), $instance) { $nextTag = strtolower(Fl_Html_Static::getTagName($nextToken['value'], $instance)); switch ($nextToken['type']) { case FL_TOKEN_HTML_TAG_END: if ($tag === $nextTag) { return true; } break; case FL_TOKEN_HTML_TAG_START: if (isset(Fl_Html_Static::$optionalEndTag[$tag])) { if ($tag === $nextTag) { return true; } } } if (isset(Fl_Html_Static::$optionalEndTagUntil[$tag])) { $nextUtilTags = Fl_Html_Static::$optionalEndTagUntil[$tag]; foreach ($nextUtilTags as $item) { if ($nextTag === $item) { return true; } if ($item === "BLOCK") { $item = Fl_Html_Static::$blockTag; } elseif ($item === "NORMAL") { $item = Fl_Html_Static::$optionalEndTagNormalUntil; } if (is_array($item) && isset($item[$nextTag])) { return true; } } } return false; }
/** * * 获取下一个token */ public function getNextToken() { $nextToken = $this->tokenInstance->getNextToken(); if (!$nextToken) { return false; } if ($this->options['compress_tag']) { if ($nextToken['type'] === FL_TOKEN_HTML_TAG_START) { $result = $this->getInstance("Fl_Html_TagToken", $nextToken['value'])->run(); $nextToken['tag'] = $result['tag']; $nextToken['attrs'] = $result['attrs']; } elseif ($nextToken['type'] === FL_TOKEN_HTML_TAG_END) { $nextToken['tag'] = Fl_Html_Static::getTagName($nextToken['value'], $this); } } else { if (Fl_Html_Static::isTag($nextToken)) { $nextToken['tag'] = Fl_Html_Static::getTagName($nextToken['value'], $this); } } if ($nextToken['tag']) { $nextToken['lowerTag'] = strtolower($nextToken['tag']); } return $nextToken; }
/** * * special */ public function specialStatement() { $tag = strtolower(Fl_Html_Static::getTagName($this->currentToken['value'], $this)); $special = Fl_Html_Static::splitSpecialValue($this->currentToken['value'], $tag, $this); $this->currentToken['value'] = $special['tag_start']; return array("type" => $this->currentToken['type'], "tag" => $tag, "value" => $this->getValue($this->currentToken), "children" => array(array("type" => FL_TOKEN_HTML_TEXT, "value" => $this->getValue(array_merge($this->currentToken, array("value" => $special["content"])))))); }