diff options
Diffstat (limited to 'inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder')
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php | 48 | ||||
-rw-r--r-- | inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php | 144 |
2 files changed, 192 insertions, 0 deletions
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php new file mode 100644 index 00000000..1174575e --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php | |||
@@ -0,0 +1,48 @@ | |||
1 | <?php | ||
2 | |||
3 | /** | ||
4 | * Converts HTMLPurifier_ConfigSchema_Interchange to our runtime | ||
5 | * representation used to perform checks on user configuration. | ||
6 | */ | ||
7 | class HTMLPurifier_ConfigSchema_Builder_ConfigSchema | ||
8 | { | ||
9 | |||
10 | /** | ||
11 | * @param HTMLPurifier_ConfigSchema_Interchange $interchange | ||
12 | * @return HTMLPurifier_ConfigSchema | ||
13 | */ | ||
14 | public function build($interchange) | ||
15 | { | ||
16 | $schema = new HTMLPurifier_ConfigSchema(); | ||
17 | foreach ($interchange->directives as $d) { | ||
18 | $schema->add( | ||
19 | $d->id->key, | ||
20 | $d->default, | ||
21 | $d->type, | ||
22 | $d->typeAllowsNull | ||
23 | ); | ||
24 | if ($d->allowed !== null) { | ||
25 | $schema->addAllowedValues( | ||
26 | $d->id->key, | ||
27 | $d->allowed | ||
28 | ); | ||
29 | } | ||
30 | foreach ($d->aliases as $alias) { | ||
31 | $schema->addAlias( | ||
32 | $alias->key, | ||
33 | $d->id->key | ||
34 | ); | ||
35 | } | ||
36 | if ($d->valueAliases !== null) { | ||
37 | $schema->addValueAliases( | ||
38 | $d->id->key, | ||
39 | $d->valueAliases | ||
40 | ); | ||
41 | } | ||
42 | } | ||
43 | $schema->postProcess(); | ||
44 | return $schema; | ||
45 | } | ||
46 | } | ||
47 | |||
48 | // vim: et sw=4 sts=4 | ||
diff --git a/inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php b/inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php new file mode 100644 index 00000000..0d00bf1d --- /dev/null +++ b/inc/3rdparty/htmlpurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php | |||
@@ -0,0 +1,144 @@ | |||
1 | <?php | ||
2 | |||
3 | /** | ||
4 | * Converts HTMLPurifier_ConfigSchema_Interchange to an XML format, | ||
5 | * which can be further processed to generate documentation. | ||
6 | */ | ||
7 | class HTMLPurifier_ConfigSchema_Builder_Xml extends XMLWriter | ||
8 | { | ||
9 | |||
10 | /** | ||
11 | * @type HTMLPurifier_ConfigSchema_Interchange | ||
12 | */ | ||
13 | protected $interchange; | ||
14 | |||
15 | /** | ||
16 | * @type string | ||
17 | */ | ||
18 | private $namespace; | ||
19 | |||
20 | /** | ||
21 | * @param string $html | ||
22 | */ | ||
23 | protected function writeHTMLDiv($html) | ||
24 | { | ||
25 | $this->startElement('div'); | ||
26 | |||
27 | $purifier = HTMLPurifier::getInstance(); | ||
28 | $html = $purifier->purify($html); | ||
29 | $this->writeAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); | ||
30 | $this->writeRaw($html); | ||
31 | |||
32 | $this->endElement(); // div | ||
33 | } | ||
34 | |||
35 | /** | ||
36 | * @param mixed $var | ||
37 | * @return string | ||
38 | */ | ||
39 | protected function export($var) | ||
40 | { | ||
41 | if ($var === array()) { | ||
42 | return 'array()'; | ||
43 | } | ||
44 | return var_export($var, true); | ||
45 | } | ||
46 | |||
47 | /** | ||
48 | * @param HTMLPurifier_ConfigSchema_Interchange $interchange | ||
49 | */ | ||
50 | public function build($interchange) | ||
51 | { | ||
52 | // global access, only use as last resort | ||
53 | $this->interchange = $interchange; | ||
54 | |||
55 | $this->setIndent(true); | ||
56 | $this->startDocument('1.0', 'UTF-8'); | ||
57 | $this->startElement('configdoc'); | ||
58 | $this->writeElement('title', $interchange->name); | ||
59 | |||
60 | foreach ($interchange->directives as $directive) { | ||
61 | $this->buildDirective($directive); | ||
62 | } | ||
63 | |||
64 | if ($this->namespace) { | ||
65 | $this->endElement(); | ||
66 | } // namespace | ||
67 | |||
68 | $this->endElement(); // configdoc | ||
69 | $this->flush(); | ||
70 | } | ||
71 | |||
72 | /** | ||
73 | * @param HTMLPurifier_ConfigSchema_Interchange_Directive $directive | ||
74 | */ | ||
75 | public function buildDirective($directive) | ||
76 | { | ||
77 | // Kludge, although I suppose having a notion of a "root namespace" | ||
78 | // certainly makes things look nicer when documentation is built. | ||
79 | // Depends on things being sorted. | ||
80 | if (!$this->namespace || $this->namespace !== $directive->id->getRootNamespace()) { | ||
81 | if ($this->namespace) { | ||
82 | $this->endElement(); | ||
83 | } // namespace | ||
84 | $this->namespace = $directive->id->getRootNamespace(); | ||
85 | $this->startElement('namespace'); | ||
86 | $this->writeAttribute('id', $this->namespace); | ||
87 | $this->writeElement('name', $this->namespace); | ||
88 | } | ||
89 | |||
90 | $this->startElement('directive'); | ||
91 | $this->writeAttribute('id', $directive->id->toString()); | ||
92 | |||
93 | $this->writeElement('name', $directive->id->getDirective()); | ||
94 | |||
95 | $this->startElement('aliases'); | ||
96 | foreach ($directive->aliases as $alias) { | ||
97 | $this->writeElement('alias', $alias->toString()); | ||
98 | } | ||
99 | $this->endElement(); // aliases | ||
100 | |||
101 | $this->startElement('constraints'); | ||
102 | if ($directive->version) { | ||
103 | $this->writeElement('version', $directive->version); | ||
104 | } | ||
105 | $this->startElement('type'); | ||
106 | if ($directive->typeAllowsNull) { | ||
107 | $this->writeAttribute('allow-null', 'yes'); | ||
108 | } | ||
109 | $this->text($directive->type); | ||
110 | $this->endElement(); // type | ||
111 | if ($directive->allowed) { | ||
112 | $this->startElement('allowed'); | ||
113 | foreach ($directive->allowed as $value => $x) { | ||
114 | $this->writeElement('value', $value); | ||
115 | } | ||
116 | $this->endElement(); // allowed | ||
117 | } | ||
118 | $this->writeElement('default', $this->export($directive->default)); | ||
119 | $this->writeAttribute('xml:space', 'preserve'); | ||
120 | if ($directive->external) { | ||
121 | $this->startElement('external'); | ||
122 | foreach ($directive->external as $project) { | ||
123 | $this->writeElement('project', $project); | ||
124 | } | ||
125 | $this->endElement(); | ||
126 | } | ||
127 | $this->endElement(); // constraints | ||
128 | |||
129 | if ($directive->deprecatedVersion) { | ||
130 | $this->startElement('deprecated'); | ||
131 | $this->writeElement('version', $directive->deprecatedVersion); | ||
132 | $this->writeElement('use', $directive->deprecatedUse->toString()); | ||
133 | $this->endElement(); // deprecated | ||
134 | } | ||
135 | |||
136 | $this->startElement('description'); | ||
137 | $this->writeHTMLDiv($directive->description); | ||
138 | $this->endElement(); // description | ||
139 | |||
140 | $this->endElement(); // directive | ||
141 | } | ||
142 | } | ||
143 | |||
144 | // vim: et sw=4 sts=4 | ||