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:
30: /**
31: * XML 形式の文書を書式化するための Renderer です.
32: *
33: * XHTML や RSS などを整形する場合はこちらを使用します.
34: */
35: class XmlRenderer extends AbstractRenderer
36: {
37: /**
38: * 最も単純なXML宣言です.
39: * @var string
40: */
41: public static $XMLDEC = '<?xml version="1.0"?>';
42:
43: /**
44: * このクラスを直接インスタンス化することはできません.
45: */
46: private function __construct() {}
47:
48: /**
49: * このクラスのインスタンスを取得します.
50: *
51: * @return XmlRenderer このクラスの唯一のインスタンス
52: * @codeCoverageIgnore
53: */
54: public static function getInstance()
55: {
56: static $instance = null;
57: if ($instance === null) {
58: $instance = new self();
59: }
60: return $instance;
61: }
62:
63: /**
64: * 値の省略された属性値を書式化します.
65: * attr="attr" 形式の文字列を返します.
66: *
67: * @see AbstractRenderer::formatBooleanAttribute()
68: * @param string $name 属性名
69: * @return string attr="attr" 形式の文字列
70: */
71: protected function formatBooleanAttribute($name)
72: {
73: return $this->formatAttribute($name, $name);
74: }
75:
76: /**
77: * 指定された属性を書式化します. name="attr" 形式の文字列を返します.
78: *
79: * @see AbstractRenderer::formatAttribute()
80: * @param string $name 属性名
81: * @param string $value 属性値
82: * @return string name="value" 形式の文字列
83: */
84: protected function formatAttribute($name, $value)
85: {
86: return $name . '="' . htmlspecialchars($value) . '"';
87: }
88:
89: /**
90: * 空要素タグの末尾を書式化します. 文字列 " />" を返します.
91: *
92: * @see AbstractRenderer::formatEmptyTagSuffix()
93: * @return string 文字列 " />"
94: */
95: protected function formatEmptyTagSuffix()
96: {
97: return " />";
98: }
99: }
100: