X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ftemplate%2Fimage%2Fclass_ImageTemplateEngine.php;h=b47c706e9f60a9ef9ca649ee4d3d09484d30f63b;hb=d527a312ec4b2983fc0ecda2179ce335c1a5a1f9;hp=6e80fd1a15b4b7598dc700a1135b57d075c2e06f;hpb=835d890d25d67c76e40ffdf3ba525b8b18c5d007;p=shipsimu.git diff --git a/inc/classes/main/template/image/class_ImageTemplateEngine.php b/inc/classes/main/template/image/class_ImageTemplateEngine.php index 6e80fd1..b47c706 100644 --- a/inc/classes/main/template/image/class_ImageTemplateEngine.php +++ b/inc/classes/main/template/image/class_ImageTemplateEngine.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -23,20 +23,25 @@ */ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTemplate { /** - * Main nodes in the XML tree ("image" is ignored) + * Main nodes in the XML tree ('image' is ignored) */ - private $mainNodes = array("type", "resolution", "background-color", "foreground-color", "image-string"); + private $mainNodes = array("base", "type", "resolution", "background-color", "foreground-color", "image-string"); /** * Sub nodes in the XML tree */ - private $subNodes = array("width", "height", "red", "green", "blue", "text"); + private $subNodes = array("name", "string-name", "x", "y", "font-size", "width", "height", "red", "green", "blue", "text"); /** * Image instance */ private $imageInstance = null; + /** + * Current main node + */ + private $currMainNode = ""; + /** * Protected constructor * @@ -51,10 +56,6 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl // Create unique ID number $this->generateUniqueId(); - - // Clean up a little - $this->removeNumberFormaters(); - $this->removeSystemArray(); } /** @@ -96,9 +97,6 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl // Set the base path $tplInstance->setBasePath($basePath); - // Initialize the variable stack - $tplInstance->initVariableStack(); - // Set the language and IO instances $tplInstance->setLanguageInstance($langInstance); $tplInstance->setFileIoInstance($ioInstance); @@ -132,8 +130,8 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl xml_set_object($xmlParser, $this); // Set handler call-backs - xml_set_element_handler($xmlParser, "startElement", "endElement"); - xml_set_character_data_handler($xmlParser, "characterHandler"); + xml_set_element_handler($xmlParser, 'startElement', 'endElement'); + xml_set_character_data_handler($xmlParser, 'characterHandler'); // Now parse the XML tree if (!xml_parse($xmlParser, $imageContent)) { @@ -148,7 +146,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl /** * Handles the start element of an XML resource * - * @param $resource XML parser resource + * @param $resource XML parser resource (currently ignored) * @param $element The element we shall handle * @param $attributes All attributes * @return void @@ -156,21 +154,22 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl */ public function startElement ($resource, $element, array $attributes) { // Initial method name which will never be called... - $methodName = "initImage"; + $methodName = 'initImage'; // Make the element name lower-case $element = strtolower($element); // Is the element a main node? + //* DEBUG: */ echo "START: >".$element."<
\n"; if (in_array($element, $this->mainNodes)) { // Okay, main node found! - $methodName = "setImage" . $this->convertToClassName($element); + $methodName = 'setImage' . $this->convertToClassName($element); } elseif (in_array($element, $this->subNodes)) { // Sub node found - $methodName = "setImageProperty" . $this->convertToClassName($element); - } elseif ($element != "image") { + $methodName = 'setImageProperty' . $this->convertToClassName($element); + } elseif ($element != 'image') { // Invalid node name found - throw new InvalidXmlNodeException(array($this, $element, $attributes), self::EXCEPTION_XML_NODE_UNKNOWN); + throw new InvalidXmlNodeException(array($this, $element, $attributes), BaseHelper::EXCEPTION_XML_NODE_UNKNOWN); } // Call method @@ -178,6 +177,57 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl call_user_func_array(array($this, $methodName), $attributes); } + /** + * Ends the main or sub node by sending out the gathered data + * + * @param $resource An XML resource pointer (currently ignored) + * @param $nodeName Name of the node we want to finish + * @return void + * @throws XmlNodeMismatchException If current main node mismatches the closing one + */ + public function endElement ($resource, $nodeName) { + // Make all lower-case + $nodeName = strtolower($nodeName); + + // Does this match with current main node? + //* DEBUG: */ echo "END: >".$nodeName."<
\n"; + if (($nodeName != $this->currMainNode) && (in_array($nodeName, $this->mainNodes))) { + // Did not match! + throw new XmlNodeMismatchException (array($this, $nodeName, $this->currMainNode), BaseHelper::EXCEPTION_XML_NODE_MISMATCH); + } elseif (in_array($nodeName, $this->subNodes)) { + // Silently ignore sub nodes + return; + } + + // Construct method name + $methodName = 'finish' . $this->convertToClassName($nodeName); + + // Call the corresponding method + call_user_func_array(array($this->imageInstance, $methodName), array()); + } + + /** + * Currently not used + * + * @param $resource XML parser resource (currently ignored) + * @param $characters Characters to handle + * @return void + * @todo Find something usefull with this! + */ + public function characterHandler ($resource, $characters) { + // Trim all spaces away + $characters = trim($characters); + + // Is this string empty? + if (empty($characters)) { + // Then skip it silently + return false; + } // END - if + + // Unfinished work! + $this->partialStub("Handling extra characters is not yet supported!"); + } + /** * Intializes the image * @@ -195,14 +245,236 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl * @return void */ private function setImageType ($imageType) { + // Set group to general + $this->setVariableGroup('general'); + // Try to compile it first to get the value from variable stack $imageType = $this->compileRawCode($imageType); // Now make a class name of it - $className = $this->convertToClassName($imageType."_image"); + $className = $this->convertToClassName($imageType.'_image'); // And try to initiate it - $this->imageInstance = ObjectFactory::createObjectByName($className); + $this->imageInstance = ObjectFactory::createObjectByName($className, array($this)); + + // Set current main node to type + $this->currMainNode = 'type'; + } + + /** + * "Setter" for resolution, we first need to collect the resolution from the + * sub-nodes. So first, this method will prepare an array for it + * + * @return void + */ + private function setImageResolution () { + // Call the image class + $this->imageInstance->initResolution(); + + // Current main node is resolution + $this->currMainNode = 'resolution'; + } + + /** + * "Setter" for base information. For more details see above method! + * + * @return void + * @see ImageTemplateEngine::setImageResolution + */ + private function setImageBase () { + // Call the image class + $this->imageInstance->initBase(); + + // Current main node is resolution + $this->currMainNode = 'base'; + } + + /** + * "Setter" for background-color. For more details see above method! + * + * @return void + * @see ImageTemplateEngine::setImageResolution + */ + private function setImageBackgroundColor () { + // Call the image class + $this->imageInstance->initBackgroundColor(); + + // Current main node is background-color + $this->currMainNode = 'background-color'; + } + + /** + * "Setter" for foreground-color. For more details see above method! + * + * @return void + * @see ImageTemplateEngine::setImageResolution + */ + private function setImageForegroundColor () { + // Call the image class + $this->imageInstance->initForegroundColor(); + + // Current main node is foreground-color + $this->currMainNode = 'foreground-color'; + } + + /** + * "Setter" for image-string. For more details see above method! + * + * @param $groupable Wether this image string is groupable + * @return void + * @see ImageTemplateEngine::setImageResolution + */ + private function setImageImageString ($groupable = 'single') { + // Call the image class + $this->imageInstance->initImageString($groupable); + + // Current main node is foreground-color + $this->currMainNode = 'image-string'; + } + + /** + * Setter for image name + * + * @param $imageName Name of the image + * @return void + */ + private function setImagePropertyName ($imageName) { + // Call the image class + $this->imageInstance->setImageName($imageName); + } + + /** + * Setter for image width + * + * @param $width Width of the image or variable + * @return void + */ + private function setImagePropertyWidth ($width) { + // Call the image class + $this->imageInstance->setWidth($width); + } + + /** + * Setter for image height + * + * @param $height Height of the image or variable + * @return void + */ + private function setImagePropertyHeight ($height) { + // Call the image class + $this->imageInstance->setHeight($height); + } + + /** + * Setter for image red color + * + * @param $red Red color value + * @return void + */ + private function setImagePropertyRed ($red) { + // Call the image class + $this->imageInstance->setRed($red); + } + + /** + * Setter for image green color + * + * @param $green Green color value + * @return void + */ + private function setImagePropertyGreen ($green) { + // Call the image class + $this->imageInstance->setGreen($green); + } + + /** + * Setter for image blue color + * + * @param $blue Blue color value + * @return void + */ + private function setImagePropertyBlue ($blue) { + // Call the image class + $this->imageInstance->setBlue($blue); + } + + /** + * Setter for string name (identifier) + * + * @param $stringName String name (identifier) + * @return void + */ + private function setImagePropertyStringName ($stringName) { + // Call the image class + $this->imageInstance->setStringName($stringName); + } + + /** + * Setter for font size + * + * @param $fontSize Size of the font + * @return void + */ + private function setImagePropertyFontSize ($fontSize) { + // Call the image class + $this->imageInstance->setFontSize($fontSize); + } + + /** + * Setter for image string + * + * @param $imageString Image string to set + * @return void + */ + private function setImagePropertyText ($imageString) { + // Call the image class + $this->imageInstance->setString($imageString); + } + + /** + * Setter for X coordinate + * + * @param $x X coordinate + * @return void + */ + private function setImagePropertyX ($x) { + // Call the image class + $this->imageInstance->setX($x); + } + + /** + * Setter for Y coordinate + * + * @param $y Y coordinate + * @return void + */ + private function setImagePropertyY ($y) { + // Call the image class + $this->imageInstance->setY($y); + } + + /** + * Getter for image cache file (FQFN) + * + * @return $fqfn Full-qualified file name of the image cache + */ + public function getImageCacheFqfn () { + // Get the FQFN ready + $fqfn = $this->getBasePath().'_cache/' . md5($this->imageInstance->getImageName().":".$this->__toString().":".$this->imageInstance->__toString()) . "." . $this->imageInstance->getImageType(); + + // Return it + return $fqfn; + } + + /** + * Outputs the image to the world + * + * @param $responseInstance An instance of a Responseable class + * @return void + */ + public function transferToResponse (Responseable $responseInstance) { + // Set the image instance + $responseInstance->setImageInstance($this->imageInstance); } }