Overview

Namespaces

  • Peach
    • DF
    • DT
    • Http
      • Body
      • Header
    • Markup
    • Util

Classes

  • Peach\DF\Base64Codec
  • Peach\DF\CodecChain
  • Peach\DF\JsonCodec
  • Peach\DF\SerializationCodec
  • Peach\DF\Utf8Codec
  • Peach\DT\AbstractTime
  • Peach\DT\Clock
  • Peach\DT\Date
  • Peach\DT\Datetime
  • Peach\DT\DefaultClock
  • Peach\DT\FixedClock
  • Peach\DT\FormatWrapper
  • Peach\DT\HttpDateFormat
  • Peach\DT\OffsetClock
  • Peach\DT\ShiftFormat
  • Peach\DT\SimpleFormat
  • Peach\DT\TimeEquator
  • Peach\DT\Timestamp
  • Peach\DT\TimeWrapper
  • Peach\DT\UnixTimeFormat
  • Peach\DT\Util
  • Peach\DT\W3cDatetimeFormat
  • Peach\Http\Body
  • Peach\Http\Body\CodecRenderer
  • Peach\Http\Body\StringRenderer
  • Peach\Http\DefaultEndpoint
  • Peach\Http\Header\CookieItem
  • Peach\Http\Header\CookieOptions
  • Peach\Http\Header\HttpDate
  • Peach\Http\Header\NoField
  • Peach\Http\Header\QualityValues
  • Peach\Http\Header\Raw
  • Peach\Http\Header\SetCookie
  • Peach\Http\Header\Status
  • Peach\Http\Request
  • Peach\Http\Response
  • Peach\Http\Util
  • Peach\Markup\AbstractHelper
  • Peach\Markup\AbstractRenderer
  • Peach\Markup\BaseHelper
  • Peach\Markup\BreakControlWrapper
  • Peach\Markup\Builder
  • Peach\Markup\Code
  • Peach\Markup\Comment
  • Peach\Markup\ContainerElement
  • Peach\Markup\Context
  • Peach\Markup\DebugBuilder
  • Peach\Markup\DebugContext
  • Peach\Markup\DefaultBreakControl
  • Peach\Markup\DefaultBuilder
  • Peach\Markup\DefaultContext
  • Peach\Markup\Element
  • Peach\Markup\EmptyElement
  • Peach\Markup\HelperObject
  • Peach\Markup\HtmlHelper
  • Peach\Markup\Indent
  • Peach\Markup\MinimalBreakControl
  • Peach\Markup\NameBreakControl
  • Peach\Markup\NameValidator
  • Peach\Markup\NodeList
  • Peach\Markup\None
  • Peach\Markup\SgmlRenderer
  • Peach\Markup\Text
  • Peach\Markup\XmlRenderer
  • Peach\Util\AbstractMapEntry
  • Peach\Util\ArrayMap
  • Peach\Util\ArrayMapEntry
  • Peach\Util\Arrays
  • Peach\Util\DefaultComparator
  • Peach\Util\DefaultEquator
  • Peach\Util\HashMap
  • Peach\Util\HashMapEntry
  • Peach\Util\Strings
  • Peach\Util\Values

Interfaces

  • Peach\DF\Codec
  • Peach\DT\Format
  • Peach\DT\Time
  • Peach\Http\BodyRenderer
  • Peach\Http\Endpoint
  • Peach\Http\HeaderField
  • Peach\Http\MultiHeaderField
  • Peach\Http\SingleHeaderField
  • Peach\Markup\BreakControl
  • Peach\Markup\Component
  • Peach\Markup\Container
  • Peach\Markup\Helper
  • Peach\Markup\Node
  • Peach\Markup\Renderer
  • Peach\Util\Comparable
  • Peach\Util\Comparator
  • Peach\Util\Equator
  • Peach\Util\Map
  • Peach\Util\MapEntry
  • Overview
  • Namespace
  • Class
  1: <?php
  2: /*
  3:  * Copyright (c) 2014 @trashtoy
  4:  * https://github.com/trashtoy/
  5:  * 
  6:  * Permission is hereby granted, free of charge, to any person obtaining a copy of
  7:  * this software and associated documentation files (the "Software"), to deal in
  8:  * the Software without restriction, including without limitation the rights to use,
  9:  * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
 10:  * Software, and to permit persons to whom the Software is furnished to do so,
 11:  * subject to the following conditions:
 12:  * 
 13:  * The above copyright notice and this permission notice shall be included in all
 14:  * copies or substantial portions of the Software.
 15:  * 
 16:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 17:  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 18:  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 19:  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 20:  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 21:  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 22:  */
 23: /**
 24:  * PHP class file.
 25:  * @auhtor trashtoy
 26:  * @since  2.0.0
 27:  */
 28: namespace Peach\Markup;
 29: use Peach\Util\Values;
 30: 
 31: /**
 32:  * HTML や XML などを出力する際に使う, デフォルトの Builder です.
 33:  * このクラスは, 以下の条件をカスタマイズすることが出来ます.
 34:  * 
 35:  * - インデントの文字列 (半角スペース, タブ文字)
 36:  * - 改行コードの種類 (LF, CRLF, CR)
 37:  * - 空要素タグや boolean 属性の出力方法 (SGML, XML)
 38:  */
 39: class DefaultBuilder extends Builder
 40: {
 41:     /**
 42:      * DefaultContext のコンストラクタに渡される Indent オブジェクトです.
 43:      * @var Indent
 44:      */
 45:     private $indent;
 46:     
 47:     /**
 48:      * DefaultContext のコンストラクタに渡される Renderer オブジェクトです.
 49:      * @var Renderer
 50:      */
 51:     private $renderer;
 52:     
 53:     /**
 54:      * DefaultContext のコンストラクタに渡される BreakControl オブジェクトです.
 55:      * @var BreakControl
 56:      */
 57:     private $breakControl;
 58:     
 59:     /**
 60:      * デフォルトの設定を持つ DefaultBuilder インスタンスを生成します.
 61:      */
 62:     public function __construct()
 63:     {
 64:         $this->indent       = null;
 65:         $this->renderer     = null;
 66:         $this->breakControl = null;
 67:     }
 68:     
 69:     /**
 70:      * この Builder にセットされている Indent オブジェクトを返します.
 71:      * もしも Indent オブジェクトがセットされていない場合は null を返します.
 72:      * 
 73:      * @return Indent Indent オブジェクト (セットされていない場合は null)
 74:      */
 75:     public function getIndent()
 76:     {
 77:         return $this->indent;
 78:     }
 79:     
 80:     /**
 81:      * この Builder に指定された Indent オブジェクトをセットします.
 82:      * null を指定した場合は設定を解除します.
 83:      * 
 84:      * @param  Indent $indent セットする Indent オブジェクト
 85:      */
 86:     public function setIndent(Indent $indent = null)
 87:     {
 88:         $this->indent = $indent;
 89:     }
 90:     
 91:     /**
 92:      * この Builder にセットされている Renderer オブジェクトを返します.
 93:      * もしも Renderer オブジェクトがセットされていない場合は null を返します.
 94:      * 
 95:      * @return Renderer Renderer オブジェクト (セットされていない場合は null)
 96:      */
 97:     public function getRenderer()
 98:     {
 99:         return $this->renderer;
100:     }
101:     
102:     /**
103:      * この Builder に指定された Renderer オブジェクトをセットします.
104:      * 引数によって以下のように動作します.
105:      * 
106:      * - Renderer オブジェクトを指定した場合: そのオブジェクトをセットします
107:      * - 文字列 "xml" または "xhtml" を指定した場合 (大小問わず) : {@link XmlRenderer} オブジェクトをセットします
108:      * - 文字列 "sgml" または "html" を指定した場合 (大小問わず) : {@link SgmlRenderer} オブジェクトをセットします
109:      * - null を指定した場合 : 現在セットされている Renderer を解除します
110:      * - それ以外: InvalidArgumentException をスローします
111:      * 
112:      * @param  Renderer|string $renderer セットする Renderer または対応する文字列
113:      * @throws \InvalidArgumentException 不正な引数をセットした場合
114:      */
115:     public function setRenderer($renderer = null)
116:     {
117:         $this->renderer = $this->initRenderer($renderer);
118:     }
119:     
120:     /**
121:      * 指定された引数で Renderer オブジェクトを初期化します.
122:      * 
123:      * @see    Renderer::setRenderer()
124:      * @param  Renderer|string $var
125:      * @return Renderer
126:      * @throws \InvalidArgumentException
127:      */
128:     private function initRenderer($var)
129:     {
130:         if ($var instanceof Renderer) {
131:             return $var;
132:         }
133:         if ($var === null) {
134:             return null;
135:         }
136:         
137:         $type     = strtolower(Values::stringValue($var));
138:         $xmlList  = array("xml", "xhtml");
139:         if (in_array($type, $xmlList)) {
140:             return XmlRenderer::getInstance();
141:         }
142:         $sgmlList = array("sgml", "html");
143:         if (in_array($type, $sgmlList)) {
144:             return SgmlRenderer::getInstance();
145:         }
146:         
147:         throw new \InvalidArgumentException("Invalid type name: {$type}.");
148:     }
149:     
150:     /**
151:      * この Builder にセットされている BreakControl オブジェクトを返します.
152:      * もしも BreakControl オブジェクトがセットされていない場合は null を返します.
153:      * 
154:      * @return BreakControl BreakControl オブジェクト (セットされていない場合は null)
155:      */
156:     public function getBreakControl()
157:     {
158:         return $this->breakControl;
159:     }
160:     
161:     /**
162:      * この Builder に指定された BreakControl をセットします.
163:      * null を指定した場合は設定を解除します.
164:      * 
165:      * @param  BreakControl $breakControl セットする BreakControl
166:      */
167:     public function setBreakControl(BreakControl $breakControl = null)
168:     {
169:         $this->breakControl = $breakControl;
170:     }
171:     
172:     /**
173:      * この Builder にセットされている Indent, Renderer, BreakControl
174:      * を使って新しい DefaultContext を生成します.
175:      * 
176:      * @return DefaultContext 新しい DefaultContext
177:      */
178:     protected function createContext()
179:     {
180:         $indent        = isset($this->indent)        ? clone($this->indent) : new Indent();
181:         $renderer      = isset($this->renderer)      ? $this->renderer      : XmlRenderer::getInstance();
182:         $breakControl  = isset($this->breakControl)  ? $this->breakControl  : DefaultBreakControl::getInstance();
183:         return new DefaultContext($renderer, $indent, $breakControl);
184:     }
185: }
186: 
PEACH2 API documentation generated by ApiGen