示例#1
0
 /**
  * この 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));
 }
示例#2
0
 /**
  * 引数の値をノードに変換します. このメソッドは {@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();
 }
示例#3
0
 /**
  * 指定された引数で 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}.");
 }
示例#4
0
 /**
  * 年・月・日・時・分・秒の各フィールドからハッシュ値を算出します.
  * 
  * @param  mixed $var
  * @return int        ハッシュ値
  * @throws \InvalidArgumentException 引数が Time インスタンスでなかった場合
  */
 public function hashCode($var)
 {
     if (!$var instanceof Time) {
         $type = Values::getType($var);
         throw new \InvalidArgumentException("The value must be Time instance.({$type})");
     }
     return $var->get("year") + $var->get("month") * 31 + $var->get("date") * 961 + $var->get("hour") * 29791 + $var->get("minute") * 923521 + $var->get("second") * 28629151;
     // 31^5
 }
示例#5
0
 /**
  * 引数の文字列から 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));
 }
示例#6
0
文件: Code.php 项目: trashtoy/peach2
 /**
  * 引数の文字列を整形済テキストとする Code オブジェクトを生成します.
  * @param string $text 整形済テキスト
  */
 public function __construct($text)
 {
     $this->text = Values::stringValue($text);
 }
示例#7
0
文件: Util.php 项目: trashtoy/peach2
 /**
  * 指定された時差 (分単位) の値が妥当かどうかを調べ, 必要に応じて値を丸めた結果を返します.
  * 世界で実際に使用されているタイムゾーンは UTC-12 から UTC+14 ですが,
  * このメソッドでは -23:45 から +23:45 を妥当なタイムゾーンとみなします.
  * もしも -23:45 以前の時差が指定された場合は -23:45 (1425),
  * +23:45 以降の時差が指定された場合は +23:45 (-1425) に丸めた結果を返します.
  * 
  * もしも NULL が指定された場合は {@link Util::getTimeZoneOffset} の結果を返します.
  * それ以外の数値以外の値が指定された場合は, 整数にキャストした値を使用します.
  * 
  * @param  int $offset
  * @return int 引数を -1425 以上 1425 以下に丸めた値
  */
 public static function cleanTimeZoneOffset($offset)
 {
     return isset($offset) ? Values::intValue($offset, -1425, 1425) : Util::getTimeZoneOffset();
 }
示例#8
0
 /**
  * 指定された 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);
 }
示例#9
0
 /**
  * この時間オブジェクトの複数のフィールドを一度に上書きします.
  * 引数には,
  * <code>
  * array("year" => 2010, "month" => 8, "date" => 31)
  * </code>
  * などの配列か, または同様の Map オブジェクトを指定してください.
  * 
  * @param  Map|array $subject フィールドと値の一覧
  * @return Time               設定後の時間オブジェクト
  * @throws \InvalidArgumentException 引数の型が不正な場合
  */
 public final function setAll($subject)
 {
     if (is_array($subject)) {
         $subject = new ArrayMap($subject);
     }
     if (!$subject instanceof Map) {
         throw new \InvalidArgumentException("Argument (" . Values::getType($subject) . ") must be array or \\Peach\\Util\\Map");
     }
     $newFields = new ArrayMap($this->fields);
     $entryList = $subject->entryList();
     foreach ($entryList as $entry) {
         $index = $this->getFieldIndex($entry->getKey());
         $newFields->put($index, $entry->getValue());
     }
     return $this->newInstance($newFields);
 }
示例#10
0
 /**
  * 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));
 }