1 |
bareface |
1.1 |
<?php |
2 |
|
|
|
3 |
|
|
require_once("YakkaXml.php"); |
4 |
|
|
|
5 |
|
|
define("YAKKA_NAMESPACE_PREPROCESS", "http://www.ilker.de/yakka/yakka-template-preprocessor/0.1"); |
6 |
|
|
define("YAKKA_NAMESPACE_POSTPROCESS", "http://www.ilker.de/yakka/yakka-template-postprocessor/0.1"); |
7 |
|
|
define("YAKKA_NAMESPACE_XSL", "http://www.w3.org/1999/XSL/Transform"); |
8 |
|
|
|
9 |
|
|
class YakkaTemplateCommandProcessor { |
10 |
|
|
var $textProcessor; |
11 |
|
|
|
12 |
|
|
var $preProcessCommands; |
13 |
|
|
var $postProcessCommands; |
14 |
|
|
|
15 |
|
|
function YakkaTemplateCommandProcessor(&$textProcessor) { |
16 |
|
|
$this->textProcessor = &$textProcessor; |
17 |
|
|
|
18 |
|
|
$this->preProcessCommands = array( |
19 |
|
|
"include-template" => "includeTemplate" |
20 |
|
|
); |
21 |
|
|
|
22 |
|
|
$this->postProcessCommands = array( |
23 |
|
|
"process-text" => "processText", |
24 |
|
|
"pagelink" => "pageLink" |
25 |
|
|
); |
26 |
|
|
} |
27 |
|
|
|
28 |
|
|
function preProcess(&$xmlDocument, $templateLocation, $templateId, $filePath) { |
29 |
|
|
if (is_object($xmlDocument) && $xmlDocument->is("YakkaXml")) { |
30 |
|
|
$xmlDocument->declareNamespace("pre", YAKKA_NAMESPACE_PREPROCESS); |
31 |
|
|
|
32 |
|
|
while(list($commandName, $command) = each($this->preProcessCommands)) |
33 |
|
|
if ($elements = $xmlDocument->selectNodes("//pre:$commandName")) |
34 |
|
|
while(list($index, $element) = each($elements)) |
35 |
|
|
$this->$command($xmlDocument, $elements[$index], $templateLocation, $templateId, $filePath); |
36 |
|
|
} |
37 |
|
|
} |
38 |
|
|
|
39 |
|
|
function postProcess(&$xmlDocument) { |
40 |
|
|
if (is_object($xmlDocument) && $xmlDocument->is("YakkaXml")) { |
41 |
|
|
$xmlDocument->declareNamespace("post", YAKKA_NAMESPACE_POSTPROCESS); |
42 |
|
|
|
43 |
|
|
while(list($commandName, $command) = each($this->postProcessCommands)) |
44 |
|
|
if ($elements = $xmlDocument->selectNodes("//post:$commandName")) |
45 |
|
|
while(list($index, $element) = each($elements)) |
46 |
|
|
$this->$command($xmlDocument, $elements[$index]); |
47 |
|
|
} |
48 |
|
|
} |
49 |
|
|
|
50 |
|
|
function includeTemplate(&$domDocument, &$element, $templateLocation, $templateId, $filePath) { |
51 |
|
|
$parent = &$element->parent_node(); |
52 |
|
|
|
53 |
|
|
$template = $element->get_attribute("name").".xsl"; |
54 |
|
|
$xslInclude = $domDocument->dom->create_element("xsl:include"); |
55 |
|
|
$xslInclude->set_attribute("href", $template); |
56 |
|
|
|
57 |
|
|
$this->replaceElement($element, $xslInclude); |
58 |
|
|
} |
59 |
|
|
|
60 |
|
|
function processText(&$domDocument, &$element) { |
61 |
|
|
$processedText = "<div>".$this->textProcessor->process($element->get_content())."</div>"; |
62 |
|
|
$processedXml = new YakkaXml($processedText); |
63 |
|
|
|
64 |
|
|
$this->replaceElement($element, $processedXml->toDomElement()); |
65 |
|
|
} |
66 |
|
|
|
67 |
|
|
function pageLink(&$xmlDocument, &$element) { |
68 |
|
|
$dom = $xmlDocument->ToDom(); |
69 |
|
|
|
70 |
|
|
$page = $element->get_attribute("page"); |
71 |
|
|
$method = $element->get_attribute("method") ? $element->get_attribute("method") : null; |
72 |
|
|
if (($child = $element->first_child()) && $child->node_type() == XML_TEXT_NODE) |
73 |
|
|
$text = $child->node_value(); |
74 |
|
|
else |
75 |
|
|
$text = $page; |
76 |
|
|
|
77 |
|
|
$link = $this->textProcessor->CreateLink($page, $method, $text); |
78 |
|
|
$linkXml = new YakkaXml($link); |
79 |
|
|
|
80 |
|
|
$this->replaceElement($element, $linkXml->ToDomElement()); |
81 |
|
|
} |
82 |
|
|
|
83 |
|
|
function replaceElement(&$oldElement, &$newElement) { |
84 |
|
|
$parentElement = &$oldElement->parent_node(); |
85 |
|
|
$parentElement->insert_before($newElement, $oldElement); |
86 |
|
|
$parentElement->remove_child($oldElement); |
87 |
|
|
} |
88 |
|
|
} |
89 |
|
|
|
90 |
|
|
?> |