1: <?php
  2: /*
  3:  * Copyright (c) 2016 @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.2.0
 27:  */
 28: namespace Peach\Markup;
 29: 
 30: /**
 31:  * HTML や RSS など, 特定のマークアップ言語に特化した Helper
 32:  * クラスを新たに実装する際に利用するスケルトン実装です.
 33:  * 
 34:  * このクラスおよびその具象クラスは Decorator パターンで実装されています.
 35:  */
 36: abstract class AbstractHelper implements Helper
 37: {
 38:     /**
 39:      * このオブジェクトに設定されているベースの Helper オブジェクトです.
 40:      * Helper インタフェースで定義されている各種メソッドの実際の処理をこのメンバ変数に移譲しています.
 41:      * 
 42:      * @var Helper
 43:      */
 44:     private $parent;
 45:     
 46:     /**
 47:      * 指定された Helper オブジェクトをベースとして, 新しいインスタンスを生成します.
 48:      * 
 49:      * @param Helper $parent ベースの Helper オブジェクト
 50:      */
 51:     public function __construct(Helper $parent)
 52:     {
 53:         $this->parent = $parent;
 54:     }
 55:     
 56:     /**
 57:      * このオブジェクトに設定されているベースの Helper オブジェクトを返します.
 58:      * 
 59:      * @return Helper ベースの Helper オブジェクト
 60:      */
 61:     public function getParentHelper()
 62:     {
 63:         return $this->parent;
 64:     }
 65:     
 66:     /**
 67:      * ベースの Helper オブジェクトの createElement() を実行します.
 68:      * 
 69:      * @param  string  $name 要素名
 70:      * @return Element       指定された要素名を持つ Element
 71:      */
 72:     public function createElement($name)
 73:     {
 74:         return $this->parent->createElement($name);
 75:     }
 76:     
 77:     /**
 78:      * ベースの Helper オブジェクトの tag() メソッドの結果をそのまま返します.
 79:      * 
 80:      * @param  string|Component $var
 81:      * @param  array $attr
 82:      * @return HelperObject
 83:      */
 84:     public function tag($var, $attr = array())
 85:     {
 86:         return $this->parent->tag($var, $attr);
 87:     }
 88:     
 89:     /**
 90:      * ベースの Helper オブジェクトの write() メソッドの結果をそのまま返します.
 91:      * 
 92:      * @param  HelperObject $object
 93:      * @return mixed
 94:      */
 95:     public function write(HelperObject $object)
 96:     {
 97:         return $this->parent->write($object);
 98:     }
 99: }
100: