芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp5/includes/XML/SVG.php
* * See the enclosed file COPYING for license information (LGPL). If you * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. * * @package XML_SVG */ class XML_SVG { function example() { // Create an instance of XML_SVG_Document. All other objects // will be added to this instance for printing. Set the height // and width of the viewport. $svg = &new XML_SVG_Document(array('width' => 400, 'height' => 200)); // Create an instance of XML_SVG_Group. Set the style, // transforms for child objects. $g = &new XML_SVG_Group(array('style' => 'stroke:black', 'transform' => 'translate(200 100)')); // Add a parent to the g instance. $g->addParent($svg); // The same results can be accomplished by making g a child of the svg. // $svg->addChild($g); // Create and animate a circle. $circle = &new XML_SVG_Circle(array('cx' => 0, 'cy' => 0, 'r' => 100, 'style' => 'stroke-width:3')); $circle->addChild(new XML_SVG_Animate(array('attributeName' => 'r', 'attributeType' => 'XML', 'from' => 0, 'to' => 75, 'dur' => '3s', 'fill' => 'freeze'))); $circle->addChild(new XML_SVG_Animate(array('attributeName' => 'fill', 'attributeType' => 'CSS', 'from' => 'green', 'to' => 'red', 'dur' => '3s', 'fill' => 'freeze'))); // Make the circle a child of g. $g->addChild($circle); // Create and animate some text. $text = &new XML_SVG_Text(array('text' => 'SVG chart!', 'x' => 0, 'y' => 0, 'style' => 'font-size:20;text-anchor:middle;')); $text->addChild(new XML_SVG_Animate(array('attributeName' => 'font-size', 'attributeType' => 'auto', 'from' => 0, 'to' => 20, 'dur' => '3s', 'fill' => 'freeze'))); // Make the text a child of g. $g->addChild($text); // Send a message to the svg instance to start printing. $svg->printElement(); } } /** * XML_SVG_Element * * This is the base class for the different SVG Element * Objects. Extend this class to create a new SVG Element. * * @package XML_SVG */ class XML_SVG_Element { var $_elements = null; var $_style = null; var $_transform = null; var $_id = null; function XML_SVG_Element($params = array()) { foreach ($params as $p => $v) { $param = '_' . $p; $this->$param = $v; } } /** * Most SVG elements can contain child elements. This method calls * the printElement method of any child element added to this * object by use of the addChild method. */ function printElement() { // Loop and call. if (is_array($this->_elements)) { foreach ($this->_elements as $child) { $child->printElement(); } } } /** * This method adds an object reference (or value, if $copy is * true) to the _elements array. */ function addChild(&$element, $copy = false) { if ($copy) { $this->_elements[] = &$element->copy(); } else { $this->_elements[] = &$element; } } /** * This method sends a message to the passed element requesting to * be added as a child. */ function addParent(&$parent) { if (is_subclass_of($parent, 'XML_SVG_Element')) { $parent->addChild($this); } } function copy() { if (version_compare(zend_version(), '2', '>')) { return clone($this); } else { $xml_svg = $this; return $xml_svg; } } /** * Print each of the passed parameters, if they are set. */ function printParams() { foreach (func_get_args() as $param) { $_param = '_' . $param; if (isset($this->$_param)) { switch ($param) { case 'filter': echo ' filter="url(#' . $this->$_param . ')"'; break; default: echo ' ' . str_replace('_', '-', $param) . '="' . $this->$_param . '"'; break; } } } } // Set any named attribute of an element to a value. function setParam($param, $value) { $attr = '_' . $param; $this->$attr = $value; } // Get any named attribute of an element. function getParam($param) { $attr = '_' . $param; if (isset($this->$attr)) { return $this->$attr; } else { return null; } } // Print out the object for debugging. function debug() { echo '
'; var_dump($this); echo '
'; } } /** * XML_SVG_Fragment * * @package XML_SVG */ class XML_SVG_Fragment extends XML_SVG_Element { var $_width; var $_height; var $_viewBox; var $_x; var $_y; function printElement() { echo '
printParams('id', 'width', 'height', 'x', 'y', 'viewBox', 'style'); echo ' xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">' . "\n"; parent::printElement(); echo "
\n"; } function bufferObject() { ob_start(); $this->printElement(); $output = ob_get_contents(); ob_end_clean(); return $output; } } /** * XML_SVG_Document * * This extends the XML_SVG_Fragment class. It wraps the XML_SVG_Frament output * with a content header, xml definition and doctype. * * @package XML_SVG */ class XML_SVG_Document extends XML_SVG_Fragment { function printElement() { header('Content-Type: image/svg+xml'); print(''."\n"); print('' . "\n"); parent::printElement(); } } /** * XML_SVG_Group * * @package XML_SVG */ class XML_SVG_Group extends XML_SVG_Element { function printElement() { echo '
printParams('id', 'style', 'transform', 'filter'); print(">\n"); parent::printElement(); print("
\n"); } } /** * XML_SVG_Textpath * * @package XML_SVG */ class XML_SVG_Textpath extends XML_SVG_Element { var $_text; var $_x; var $_y; var $_dx; var $_dy; var $_rotate; var $_textLength; var $_lengthAdjust; var $_charset; function printElement($element = 'textpath') { echo '<' . $element; $this->printParams('id', 'x', 'y', 'dx', 'dy', 'rotate', 'textLength', 'lengthAdjust', 'style', 'transform'); echo '>'; if (isset($this->_charset)) { echo @htmlspecialchars($this->_text, ENT_COMPAT, $this->_charset); } else { echo htmlspecialchars($this->_text); } parent::printElement(); echo "$element>\n"; } function setShape($x, $y, $text) { $this->_x = $x; $this->_y = $y; $this->_text = $text; } } /** * XML_SVG_Text * * @package XML_SVG */ class XML_SVG_Text extends XML_SVG_Textpath { function printElement() { parent::printElement('text'); } function setShape($x, $y, $text) { $this->_x = $x; $this->_y = $y; $this->_text = $text; } } /** * XML_SVG_Tspan * * @package XML_SVG */ class XML_SVG_Tspan extends XML_SVG_Element { var $_text; var $_x; var $_y; var $_dx; var $_dy; var $_rotate; var $_textLength; var $_lengthAdjust; function printElement() { echo '
printParams('id', 'x', 'y', 'dx', 'dy', 'rotate', 'textLength', 'lengthAdjust', 'style', 'transform'); echo '>' . $this->_text; if (is_array($this->_elements)) { parent::printElement(); } echo "
\n"; } function setShape($x, $y, $text) { $this->_x = $x; $this->_y = $y; $this->_text = $text; } } /** * XML_SVG_Circle * * @package XML_SVG */ class XML_SVG_Circle extends XML_SVG_Element { var $_cx; var $_cy; var $_r; function printElement() { echo '
printParams('id', 'cx', 'cy', 'r', 'style', 'transform'); if (is_array($this->_elements)) { // Print children, start and end tag. echo ">\n"; parent::printElement(); echo "
\n"; } else { // Print short tag. echo "/>\n"; } } function setShape($cx, $cy, $r) { $this->_cx = $cx; $this->_cy = $cy; $this->_r = $r; } } /** * XML_SVG_Line * * @package XML_SVG */ class XML_SVG_Line extends XML_SVG_Element { var $_x1; var $_y1; var $_x2; var $_y2; function printElement() { echo '
printParams('id', 'x1', 'y1', 'x2', 'y2', 'style'); if (is_array($this->_elements)) { // Print children, start and end tag. print(">\n"); parent::printElement(); print("
\n"); } else { // Print short tag. print("/>\n"); } } function setShape($x1, $y1, $x2, $y2) { $this->_x1 = $x1; $this->_y1 = $y1; $this->_x2 = $x2; $this->_y2 = $y2; } } /** * XML_SVG_Rect * * @package XML_SVG */ class XML_SVG_Rect extends XML_SVG_Element { var $_x; var $_y; var $_width; var $_height; var $_rx; var $_ry; function printElement() { echo '
printParams('id', 'x', 'y', 'width', 'height', 'rx', 'ry', 'style'); if (is_array($this->_elements)) { // Print children, start and end tag. print(">\n"); parent::printElement(); print("
\n"); } else { // Print short tag. print("/>\n"); } } function setShape($x, $y, $width, $height) { $this->_x = $x; $this->_y = $y; $this->_width = $width; $this->_height = $height; } } /** * XML_SVG_Ellipse * * @package XML_SVG */ class XML_SVG_Ellipse extends XML_SVG_Element { var $_cx; var $_cy; var $_rx; var $_ry; function printElement() { echo '
printParams('id', 'cx', 'cy', 'rx', 'ry', 'style', 'transform'); if (is_array($this->_elements)) { // Print children, start and end tag. print(">\n"); parent::printElement(); print("
\n"); } else { // Print short tag. print(" />\n"); } } function setShape($cx, $cy, $rx, $ry) { $this->_cx = $cx; $this->_cy = $cy; $this->_rx = $rx; $this->_ry = $ry; } } /** * XML_SVG_Polyline * * @package XML_SVG */ class XML_SVG_Polyline extends XML_SVG_Element { var $_points; function printElement() { echo '
printParams('id', 'points', 'style', 'transform'); if (is_array($this->_elements)) { // Print children, start and end tag. print(">\n"); parent::printElement(); print("
\n"); } else { // Print short tag. print("/>\n"); } } function setShape($points) { $this->_points = $points; } } /** * XML_SVG_Polygon * * @package XML_SVG */ class XML_SVG_Polygon extends XML_SVG_Element { var $_points; function printElement() { echo '
printParams('id', 'points', 'style', 'transform'); if (is_array($this->_elements)) { // Print children, start and end tag. print(">\n"); parent::printElement(); print("
\n"); } else { // Print short tag. print("/>\n"); } } function setShape($points) { $this->_points = $points; } } /** * XML_SVG_Path * * @package XML_SVG */ class XML_SVG_Path extends XML_SVG_Element { var $_d; function printElement() { echo '
printParams('id', 'd', 'style', 'transform'); if (is_array($this->_elements)) { // Print children, start and end tag. print(">\n"); parent::printElement(); print("
\n"); } else { // Print short tag. print("/>\n"); } } function setShape($d) { $this->_d = $d; } } /** * XML_SVG_Image * * @package XML_SVG */ class XML_SVG_Image extends XML_SVG_Element { var $_x; var $_y; var $_width; var $_height; var $_href; function printElement() { echo '
printParams('id', 'x', 'y', 'width', 'height', 'style'); if (!empty($this->_href)) { echo ' xlink:href="' . $this->_href . '"'; } if (is_array($this->_elements)) { // Print children, start and end tag. echo ">\n"; parent::printElement(); echo "
\n"; } else { // Print short tag. echo " />\n"; } } function setShape($x, $y, $width, $height) { $this->_x = $x; $this->_y = $y; $this->_width = $width; $this->_height = $height; } } /** * XML_SVG_Animate * * @package XML_SVG */ class XML_SVG_Animate extends XML_SVG_Element { var $_attributeName; var $_attributeType; var $_from; var $_to; var $_begin; var $_dur; var $_fill; function printElement() { echo '
printParams('id', 'attributeName', 'attributeType', 'from', 'to', 'begin', 'dur', 'fill'); if (is_array($this->_elements)) { // Print children, start and end tag. echo ">\n"; parent::printElement(); echo "
\n"; } else { echo " />\n"; } } function setShape($attributeName, $attributeType = '', $from = '', $to = '', $begin = '', $dur = '', $fill = '') { $this->_attributeName = $attributeName; $this->_attributeType = $attributeType; $this->_from = $from; $this->_to = $to; $this->_begin = $begin; $this->_dur = $dur; $this->_fill = $fill; } } /** * XML_SVG_Filter * * @package XML_SVG */ class XML_SVG_Filter extends XML_SVG_Element { function printElement() { echo '
printParams('id'); if (is_array($this->_elements)) { // Print children, start and end tag. echo ">\n"; parent::printElement(); echo "
\n"; } else { echo " />\n"; } } function addPrimitive($primitive, $params) { $this->addChild(new XML_SVG_FilterPrimitive($primitive, $params)); } } /** * XML_SVG_FilterPrimitive * * @package XML_SVG */ class XML_SVG_FilterPrimitive extends XML_SVG_Element { var $_primitives = array('Blend', 'ColorMatrix', 'ComponentTransfer', 'Composite', 'ConvolveMatrix', 'DiffuseLighting', 'DisplacementMap', 'Flood', 'GaussianBlur', 'Image', 'Merge', 'Morphology', 'Offset', 'SpecularLighting', 'Tile', 'Turbulence'); var $_primitive; var $_in; var $_in2; var $_result; var $_x; var $_y; var $_dx; var $_dy; var $_width; var $_height; var $_mode; var $_type; var $_values; var $_operator; var $_k1; var $_k2; var $_k3; var $_k4; var $_surfaceScale; var $_diffuseConstant; var $_kernelUnitLength; var $_floor_color; var $_flood_opacity; function XML_SVG_FilterPrimitive($primitive, $params = array()) { parent::XML_SVG_Element($params); $this->_primitive = $primitive; } function printElement() { $name = 'fe' . $this->_primitive; echo '<' . $name; $this->printParams('id', 'x', 'y', 'dx', 'dy', 'width', 'height', 'in', 'in2', 'result', 'mode', 'type', 'values', 'operator', 'k1', 'k2', 'k3', 'k4', 'surfaceScale', 'stdDeviation', 'diffuseConstant', 'kernelUnitLength', 'flood_color', 'flood_opacity'); if (is_array($this->_elements)) { // Print children, start and end tag. echo ">\n"; parent::printElement(); echo '' . $name . '>'; } else { echo '/>'; } } /** * For feMerge elements. */ function addMergeNode($in) { $this->addChild(new XML_SVG_FilterMergeNode(array('in' => $in))); } } /** * XML_SVG_FilterMergeNode * * @package XML_SVG */ class XML_SVG_FilterMergeNode extends XML_SVG_Element { var $_in; function printElement() { echo '
printParams('in'); echo '/>'; } } /** * XML_SVG_Use * * @package XML_SVG */ class XML_SVG_Use extends XML_SVG_Element { var $_symbol; function XML_SVG_Use($symbol, $params = array()) { parent::XML_SVG_Element($params); $this->_symbol = $symbol; } function printElement() { echo '
'; } } /** * XML_SVG_Defs * * @package XML_SVG */ class XML_SVG_Defs extends XML_SVG_Element { function printElement() { echo '
printParams('id', 'style', 'transform'); echo ">\n"; parent::printElement(); echo "
\n"; } } /** * XML_SVG_Marker * * @package XML_SVG */ class XML_SVG_Marker extends XML_SVG_Element { var $_refX; var $_refY; var $_markerUnits; var $_markerWidth; var $_markerHeight; var $_orient; function printElement() { echo '
printParams('id', 'refX', 'refY', 'markerUnits', 'markerWidth', 'markerHeight', 'orient'); if (is_array($this->_elements)) { // Print children, start and end tag. print(">\n"); parent::printElement(); print("
\n"); } else { print("/>\n"); } } function setShape($refX = '', $refY = '', $markerUnits = '', $markerWidth = '', $markerHeight = '', $orient = '') { $this->_refX = $refX; $this->_refY = $refY; $this->_markerUnits = $markerUnits; $this->_markerWidth = $markerWidth; $this->_markerHeight = $markerHeight; $this->_orient = $orient; } } /** * XML_SVG_Title * * @package XML_SVG */ class XML_SVG_Title extends XML_SVG_Element { var $_title; function printElement() { echo '
printParams('id', 'style'); print(">\n"); print($this->_title); parent::printElement(); print("
\n"); } } /** * XML_SVG_Desc * * @package XML_SVG */ class XML_SVG_Desc extends XML_SVG_Element { var $_desc; function printElement() { echo '
printParams('id', 'style'); echo '>' . $this->_desc; parent::printElement(); echo "
\n"; } } /** * XML_SVG_Tref * * @package XML_SVG */ class XML_SVG_Tref extends XML_SVG_Element { var $_text; var $_x; var $_y; var $_dx; var $_dy; var $_rotate; var $_textLength; var $_lengthAdjust; function printElement() { echo '
printParams('id', 'x', 'y', 'dx', 'dy', 'rotate', 'textLength', 'lengthAdjust', 'style'); echo '>' . $this->_text; parent::printElement(); echo "
\n"; } }