/** * 指定された引数で Renderer オブジェクトを初期化します. * * @see Renderer::setRenderer() * @param Renderer|string $var * @return Renderer * @throws \InvalidArgumentException */ private function initRenderer($var) { if ($var instanceof Renderer) { return $var; } if ($var === null) { return null; } $type = strtolower(Values::stringValue($var)); $xmlList = array("xml", "xhtml"); if (in_array($type, $xmlList)) { return XmlRenderer::getInstance(); } $sgmlList = array("sgml", "html"); if (in_array($type, $sgmlList)) { return SgmlRenderer::getInstance(); } throw new \InvalidArgumentException("Invalid type name: {$type}."); }
/** * この NodeList に実際に追加される値を返します. * * @param mixed $var * @return Component|array 追加されるノード (またはノードの配列) */ private function getAppendee($var) { if ($var instanceof None) { return null; } if ($var instanceof Node) { return $var; } if ($var instanceof Container) { return $var->getChildNodes(); } if (is_array($var)) { $result = array(); foreach ($var as $i) { $appendee = $this->getAppendee($i); if (is_array($appendee)) { $result = array_merge($result, $appendee); } else { $result[] = $appendee; } } return $result; } if (!isset($var)) { return null; } return new Text(Values::stringValue($var)); }
/** * 引数の値をノードに変換します. このメソッドは {@link HelperObject} * から参照されます. エンドユーザーが直接使う機会はありません. * 返り値は, 引数によって以下のようになります. * * - {@link Node} 型オブジェクトの場合: 引数自身 * - {@link NodeList} 型オブジェクトの場合: 引数自身 * - {@link HelperObject} 型オブジェクトの場合: 引数のオブジェクトがラップしているノード * - 文字列の場合: 引数の文字列を要素名に持つ新しい {@link Element} * - null または空文字列の場合: 空の {@link NodeList} * - 上記に当てはまらない場合: 引数の文字列表現をあらわす {@link Text} ノード * * @param mixed $var 変換対象の値 * @return Component 変換後のノード * @ignore */ public function createNode($var) { if ($var instanceof Node) { return $var; } if ($var instanceof NodeList) { return $var; } if ($var instanceof HelperObject) { return $var->getNode(); } if (is_string($var) && strlen($var)) { return $this->createElement($var); } $nodeName = Values::stringValue($var); return strlen($nodeName) ? new Text($nodeName) : new NodeList(); }
/** * 引数の文字列から UTF-8 として不適切なシーケンスを除去します. * * @param string $var 文字列 * @return string 不正なシーケンスを除去した結果 */ private static function cleanString($var) { // @codeCoverageIgnoreStart static $utf8Codec = null; if ($utf8Codec === null) { $utf8Codec = new Utf8Codec(); } // @codeCoverageIgnoreEnd $str = Values::stringValue($var); return $utf8Codec->encode($utf8Codec->decode($str)); }
/** * 引数の文字列を整形済テキストとする Code オブジェクトを生成します. * @param string $text 整形済テキスト */ public function __construct($text) { $this->text = Values::stringValue($text); }
/** * 指定された prefix と suffix を持つ Comment オブジェクトを構築します. * prefix と suffix は, 主に条件付きコメントの先頭 ("[if IE 6]>" など) と * 末尾 ("<![endif]" など) に使用されます. * 引数を指定しない場合は通常のコメントノードを生成します. * * @param string $prefix コメントの冒頭 ("[if IE 6]>" など) * @param string $suffix コメントの末尾 ("<![endif]" など) */ public function __construct($prefix = "", $suffix = "") { $this->nodeList = new NodeList(null, $this); $this->prefix = Values::stringValue($prefix); $this->suffix = Values::stringValue($suffix); }
/** * encode() の本体の処理です. * 指定された値がスカラー型 (null, 真偽値, 数値, 文字列), 配列, オブジェクトのいずれかにも該当しない場合, * 文字列にキャストした結果をエンコードします. * * @param mixed $var 変換対象の値 * @return string JSON 文字列 * @ignore */ public function encodeValue($var) { if ($var === null) { return "null"; } if ($var === true) { return "true"; } if ($var === false) { return "false"; } if (is_float($var)) { return $this->encodeFloat($var); } if (is_integer($var)) { return strval($var); } if (is_string($var)) { return is_numeric($var) ? $this->encodeNumeric($var) : $this->encodeString($var); } if (is_array($var)) { return $this->checkKeySequence($var) ? $this->encodeArray($var) : $this->encodeObject($var); } if (is_object($var)) { $arr = (array) $var; return $this->encodeValue($arr); } return $this->encodeValue(Values::stringValue($var)); }