<?php

class SHGen {

    public function 
__construct($name) {
        
$this->name $name;
        
$this->attr = array();
        
$this->node = array();
    }

    public function 
attr($name$value) {
        
$this->attr[$name] = $value;
        return 
$this;
    }

    public function 
add($name) {
        if (
is_array($name)) {
            foreach (
$name as $node)
                
$ret $this->add($node);
        } else if (
count(func_get_args()) > 1) {
            
$this->add(func_get_args());
        } else {
            
$ret $this->node[] = $name;
        }
        return 
$this;
    }

    public function 
__toString() {
        
$string '';
        
$string .= '<';
        
$string .= $this->name;
        foreach (
$this->attr as $name => $value) {
            
$string .= ' ';
            
$string .= $name;
            
$string .= '="';
            
$string .= htmlspecialchars($value);
            
$string .= '"';
        }
        
$string .= '>';

        foreach (
$this->node as $node) {
            if (
gettype($node) == 'string')
                
$node htmlspecialchars($node);
            
$string .= $node;
        }

        
$string .= '</';
        
$string .= $this->name;
        
$string .= '>';
        return 
$string;
    }
}

?>