protected function Element($name, $attribs = NULL, $styles = NULL, $content = NULL)
{
// these properties require units to work well
$require_units = array('stroke-width', 'stroke-dashoffset', 'font-size', 'baseline-shift', 'kerning', 'letter-spacing', 'word-spacing');
if ($this->namespace && strpos($name, ':') === FALSE) {
$name = 'svg:' . $name;
}
$element = '<' . $name;
if (is_array($attribs)) {
foreach ($attribs as $attr => $val) {
// if units required, add px
if (is_numeric($val)) {
if (array_search($attr, $require_units) !== FALSE) {
$val .= 'px';
}
} else {
$val = htmlspecialchars($val);
}
$element .= ' ' . $attr . '="' . $val . '"';
}
}
if (is_array($styles)) {
$element .= ' style="';
foreach ($styles as $attr => $val) {
// check units again
if (is_numeric($val)) {
if (array_search($attr, $require_units) !== FALSE) {
$val .= 'px';
}
} else {
$val = htmlspecialchars($val);
}
$element .= $attr . ':' . $val . ';';
}
$element .= '"';
}
if (is_null($content)) {
$element .= "/>\n";
} else {
$element .= '>' . $content . '</' . $name . ">\n";
}
return $element;
}