154 lines
3.6 KiB
PHP
154 lines
3.6 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
SVG to dojox.gfx Parser
|
||
|
Copyright (C) 2009 Aaron Lindsay <aclindsay@aclindsay.com>
|
||
|
|
||
|
This program is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU General Public License
|
||
|
as published by the Free Software Foundation; either version 2
|
||
|
of the License, or (at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program; if not, write to the Free Software
|
||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
|
||
|
class SVG {
|
||
|
private $paths;
|
||
|
private $rects;
|
||
|
private $circles;
|
||
|
private $ellipses;
|
||
|
private $lines;
|
||
|
private $polylines;
|
||
|
private $texts;
|
||
|
private $linearGradients;
|
||
|
private $radialGradients;
|
||
|
|
||
|
public function __construct() {
|
||
|
$this->paths = array();
|
||
|
$this->rects = array();
|
||
|
$this->circles = array();
|
||
|
$this->ellipses = array();
|
||
|
$this->lines = array();
|
||
|
$this->polylines = array();
|
||
|
$this->texts = array();
|
||
|
|
||
|
$this->linearGradients = array();
|
||
|
$this->radialGradients = array();
|
||
|
}
|
||
|
|
||
|
public function addPath($path) {
|
||
|
$this->paths[] = $path;
|
||
|
}
|
||
|
public function getPaths() {
|
||
|
return $this->paths;
|
||
|
}
|
||
|
|
||
|
public function addRectangle($rect) {
|
||
|
$this->rects[] = $rect;
|
||
|
}
|
||
|
public function getRectangles() {
|
||
|
return $this->rects;
|
||
|
}
|
||
|
|
||
|
public function addCircle($circle) {
|
||
|
$this->circles[] = $circle;
|
||
|
}
|
||
|
public function getCircles() {
|
||
|
return $this->circles;
|
||
|
}
|
||
|
|
||
|
public function addEllipse($ellipse) {
|
||
|
$this->ellipses[] = $ellipse;
|
||
|
}
|
||
|
public function getEllipses() {
|
||
|
return $this->ellipses;
|
||
|
}
|
||
|
|
||
|
public function addLine($line) {
|
||
|
$this->lines[] = $line;
|
||
|
}
|
||
|
public function getLines() {
|
||
|
return $this->lines;
|
||
|
}
|
||
|
|
||
|
public function addPolyline($polyline) {
|
||
|
$this->polylines[] = $polyline;
|
||
|
}
|
||
|
public function getPolylines() {
|
||
|
return $this->polylines;
|
||
|
}
|
||
|
|
||
|
public function addText($text) {
|
||
|
$this->texts[] = $text;
|
||
|
}
|
||
|
public function getTexts() {
|
||
|
return $this->texts;
|
||
|
}
|
||
|
|
||
|
public function addLinearGradient($gradient) {
|
||
|
$this->linearGradients[] = $gradient;
|
||
|
}
|
||
|
public function getLinearGradients() {
|
||
|
return $this->linearGradients;
|
||
|
}
|
||
|
|
||
|
public function addRadialGradient($gradient) {
|
||
|
$this->radialGradients[] = $gradient;
|
||
|
}
|
||
|
public function getRadialGradients() {
|
||
|
return $this->radialGradients;
|
||
|
}
|
||
|
|
||
|
public function getCompleteLinearGradients() {
|
||
|
$validGradients = array();
|
||
|
foreach($this->linearGradients as $gradient) {
|
||
|
if ($gradient->isValid()) {
|
||
|
$validGradients[] = $gradient;
|
||
|
} else if ($gradient->getLink() != null) {
|
||
|
$newGradient = $this->linkGradient($gradient);
|
||
|
if ($newGradient->isValid()) {
|
||
|
$validGradients[] = $newGradient;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return $validGradients;
|
||
|
}
|
||
|
|
||
|
public function getCompleteRadialGradients() {
|
||
|
$validGradients = array();
|
||
|
foreach($this->radialGradients as $gradient) {
|
||
|
if ($gradient->isValid()) {
|
||
|
$validGradients[] = $gradient;
|
||
|
} else if ($gradient->getLink() != null) {
|
||
|
$newGradient = $this->linkGradient($gradient);
|
||
|
if ($newGradient->isValid())
|
||
|
$validGradients[] = $gradient;
|
||
|
}
|
||
|
}
|
||
|
return $validGradients;
|
||
|
}
|
||
|
|
||
|
private function linkGradient($gradient) {
|
||
|
//search through all gradients for one with an id matching the link field
|
||
|
$link = $gradient->getLink();
|
||
|
$toLink = null;
|
||
|
foreach($this->linearGradients as $match) {
|
||
|
if ($match->getId() == $link) {
|
||
|
$toLink = $match;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if ($toLink != null) {
|
||
|
$gradient->setStops($toLink->getStops());
|
||
|
}
|
||
|
return $gradient;
|
||
|
}
|
||
|
}
|
||
|
?>
|