danielebarchiesi@4: content_header = 'text/html';
danielebarchiesi@4: }
danielebarchiesi@4:
danielebarchiesi@4: /* */
danielebarchiesi@4:
danielebarchiesi@4: function getSerializedArray($struct, $root = 1, $ind = ' ') {
danielebarchiesi@4: $n = "\n";
danielebarchiesi@4: $r = '';
danielebarchiesi@4: $is_flat = $this->isAssociativeArray($struct) ? 0 : 1;
danielebarchiesi@4: foreach ($struct as $k => $v) {
danielebarchiesi@4: if (!$is_flat) $r .= $n . $ind . $ind . '
' . $k . '';
danielebarchiesi@4: $r .= $n . $ind . $ind . '' . (is_array($v) ? $this->getSerializedArray($v, 0, $ind . $ind . $ind) . $n . $ind . $ind : htmlspecialchars($v)) . '';
danielebarchiesi@4: }
danielebarchiesi@4: return $n . $ind . '' . $r . $n . $ind . '
';
danielebarchiesi@4: }
danielebarchiesi@4:
danielebarchiesi@4: /* */
danielebarchiesi@4:
danielebarchiesi@4: function isAssociativeArray($v) {
danielebarchiesi@4: foreach (array_keys($v) as $k => $val) {
danielebarchiesi@4: if ($k !== $val) return 1;
danielebarchiesi@4: }
danielebarchiesi@4: return 0;
danielebarchiesi@4: }
danielebarchiesi@4:
danielebarchiesi@4: /* */
danielebarchiesi@4:
danielebarchiesi@4: function getSerializedNode($index, $node, $level = 0, $raw = 0) {
danielebarchiesi@4: $r = '';
danielebarchiesi@4: $tag = $this->v('tag', '', $node);
danielebarchiesi@4: if (preg_match('/^(comment|script)$/', $tag)) {
danielebarchiesi@4: }
danielebarchiesi@4: elseif ($tag == 'cdata') {
danielebarchiesi@4: $r .= $this->v('cdata', '', $node);
danielebarchiesi@4: $r .= $this->v('value', '', $node['a']);
danielebarchiesi@4: }
danielebarchiesi@4: else {
danielebarchiesi@4: /* open tag */
danielebarchiesi@4: if (preg_match('/^(div|form|p|section)$/', $tag)) {
danielebarchiesi@4: $r .= str_pad("\n", $level + 1, " ");
danielebarchiesi@4: }
danielebarchiesi@4: $r .= '<' . $tag;
danielebarchiesi@4: $attrs = $this->v('a', array(), $node);
danielebarchiesi@4: foreach ($attrs as $k => $v) {
danielebarchiesi@4: /* use uri, if detected */
danielebarchiesi@4: if ($k != 'id') {
danielebarchiesi@4: $v = $this->v($k . ' uri', $v, $attrs);
danielebarchiesi@4: }
danielebarchiesi@4: /* skip arrays and other derived attrs */
danielebarchiesi@4: if (preg_match('/\s/s', $k)) continue;
danielebarchiesi@4: $r .= ' ' . $k . '="' . $v . '"';
danielebarchiesi@4: }
danielebarchiesi@4: if ($node['empty']) {
danielebarchiesi@4: $r .= '/>';
danielebarchiesi@4: }
danielebarchiesi@4: else {
danielebarchiesi@4: $r .= '>';
danielebarchiesi@4: /* cdata */
danielebarchiesi@4: $r .= $this->v('cdata', '', $node);
danielebarchiesi@4: /* sub-nodes */
danielebarchiesi@4: $sub_nodes = $this->v($node['id'], array(), $index);
danielebarchiesi@4: foreach ($sub_nodes as $sub_node) {
danielebarchiesi@4: $r .= $this->getSerializedNode($index, $sub_node, $level + 1, 1);
danielebarchiesi@4: }
danielebarchiesi@4: /* close tag */
danielebarchiesi@4: //$r .= str_pad("\n", $level + 1, " ") . '' . $tag . '>';
danielebarchiesi@4: $r .= '' . $tag . '>';
danielebarchiesi@4: if (preg_match('/^(div|form|p|section)$/', $tag)) {
danielebarchiesi@4: $r .= str_pad("\n", $level + 1, " ");
danielebarchiesi@4: }
danielebarchiesi@4: }
danielebarchiesi@4: }
danielebarchiesi@4: /* doc envelope, in case of sub-structure serializing */
danielebarchiesi@4: if (!$raw && ($level == 0) && ($node['level'] > 1)) {
danielebarchiesi@4: $r = '
danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4: ' . $r . '
danielebarchiesi@4:
danielebarchiesi@4:
danielebarchiesi@4: ';
danielebarchiesi@4: }
danielebarchiesi@4: return $r;
danielebarchiesi@4: }
danielebarchiesi@4:
danielebarchiesi@4: /* */
danielebarchiesi@4: }
danielebarchiesi@4: