annotate sites/all/libraries/ARC2/arc/serializers/ARC2_LegacyHTMLSerializer.php @ 4:ce11bbd8f642

added modules
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:38:44 +0100
parents
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2 /*
danielebarchiesi@4 3 homepage: http://arc.semsol.org/
danielebarchiesi@4 4 license: http://arc.semsol.org/license
danielebarchiesi@4 5
danielebarchiesi@4 6 class: ARC2 Legacy XML Serializer
danielebarchiesi@4 7 author: Benjamin Nowack
danielebarchiesi@4 8 version: 2010-11-16
danielebarchiesi@4 9 */
danielebarchiesi@4 10
danielebarchiesi@4 11 ARC2::inc('Class');
danielebarchiesi@4 12
danielebarchiesi@4 13 class ARC2_LegacyHTMLSerializer extends ARC2_Class {
danielebarchiesi@4 14
danielebarchiesi@4 15 function __construct($a, &$caller) {
danielebarchiesi@4 16 parent::__construct($a, $caller);
danielebarchiesi@4 17 }
danielebarchiesi@4 18
danielebarchiesi@4 19 function __init() {
danielebarchiesi@4 20 parent::__init();
danielebarchiesi@4 21 $this->content_header = 'text/html';
danielebarchiesi@4 22 }
danielebarchiesi@4 23
danielebarchiesi@4 24 /* */
danielebarchiesi@4 25
danielebarchiesi@4 26 function getSerializedArray($struct, $root = 1, $ind = ' ') {
danielebarchiesi@4 27 $n = "\n";
danielebarchiesi@4 28 $r = '';
danielebarchiesi@4 29 $is_flat = $this->isAssociativeArray($struct) ? 0 : 1;
danielebarchiesi@4 30 foreach ($struct as $k => $v) {
danielebarchiesi@4 31 if (!$is_flat) $r .= $n . $ind . $ind . '<dt>' . $k . '</dt>';
danielebarchiesi@4 32 $r .= $n . $ind . $ind . '<dd>' . (is_array($v) ? $this->getSerializedArray($v, 0, $ind . $ind . $ind) . $n . $ind . $ind : htmlspecialchars($v)) . '</dd>';
danielebarchiesi@4 33 }
danielebarchiesi@4 34 return $n . $ind . '<dl>' . $r . $n . $ind . '</dl>';
danielebarchiesi@4 35 }
danielebarchiesi@4 36
danielebarchiesi@4 37 /* */
danielebarchiesi@4 38
danielebarchiesi@4 39 function isAssociativeArray($v) {
danielebarchiesi@4 40 foreach (array_keys($v) as $k => $val) {
danielebarchiesi@4 41 if ($k !== $val) return 1;
danielebarchiesi@4 42 }
danielebarchiesi@4 43 return 0;
danielebarchiesi@4 44 }
danielebarchiesi@4 45
danielebarchiesi@4 46 /* */
danielebarchiesi@4 47
danielebarchiesi@4 48 function getSerializedNode($index, $node, $level = 0, $raw = 0) {
danielebarchiesi@4 49 $r = '';
danielebarchiesi@4 50 $tag = $this->v('tag', '', $node);
danielebarchiesi@4 51 if (preg_match('/^(comment|script)$/', $tag)) {
danielebarchiesi@4 52 }
danielebarchiesi@4 53 elseif ($tag == 'cdata') {
danielebarchiesi@4 54 $r .= $this->v('cdata', '', $node);
danielebarchiesi@4 55 $r .= $this->v('value', '', $node['a']);
danielebarchiesi@4 56 }
danielebarchiesi@4 57 else {
danielebarchiesi@4 58 /* open tag */
danielebarchiesi@4 59 if (preg_match('/^(div|form|p|section)$/', $tag)) {
danielebarchiesi@4 60 $r .= str_pad("\n", $level + 1, " ");
danielebarchiesi@4 61 }
danielebarchiesi@4 62 $r .= '<' . $tag;
danielebarchiesi@4 63 $attrs = $this->v('a', array(), $node);
danielebarchiesi@4 64 foreach ($attrs as $k => $v) {
danielebarchiesi@4 65 /* use uri, if detected */
danielebarchiesi@4 66 if ($k != 'id') {
danielebarchiesi@4 67 $v = $this->v($k . ' uri', $v, $attrs);
danielebarchiesi@4 68 }
danielebarchiesi@4 69 /* skip arrays and other derived attrs */
danielebarchiesi@4 70 if (preg_match('/\s/s', $k)) continue;
danielebarchiesi@4 71 $r .= ' ' . $k . '="' . $v . '"';
danielebarchiesi@4 72 }
danielebarchiesi@4 73 if ($node['empty']) {
danielebarchiesi@4 74 $r .= '/>';
danielebarchiesi@4 75 }
danielebarchiesi@4 76 else {
danielebarchiesi@4 77 $r .= '>';
danielebarchiesi@4 78 /* cdata */
danielebarchiesi@4 79 $r .= $this->v('cdata', '', $node);
danielebarchiesi@4 80 /* sub-nodes */
danielebarchiesi@4 81 $sub_nodes = $this->v($node['id'], array(), $index);
danielebarchiesi@4 82 foreach ($sub_nodes as $sub_node) {
danielebarchiesi@4 83 $r .= $this->getSerializedNode($index, $sub_node, $level + 1, 1);
danielebarchiesi@4 84 }
danielebarchiesi@4 85 /* close tag */
danielebarchiesi@4 86 //$r .= str_pad("\n", $level + 1, " ") . '</' . $tag . '>';
danielebarchiesi@4 87 $r .= '</' . $tag . '>';
danielebarchiesi@4 88 if (preg_match('/^(div|form|p|section)$/', $tag)) {
danielebarchiesi@4 89 $r .= str_pad("\n", $level + 1, " ");
danielebarchiesi@4 90 }
danielebarchiesi@4 91 }
danielebarchiesi@4 92 }
danielebarchiesi@4 93 /* doc envelope, in case of sub-structure serializing */
danielebarchiesi@4 94 if (!$raw && ($level == 0) && ($node['level'] > 1)) {
danielebarchiesi@4 95 $r = '<!DOCTYPE html>
danielebarchiesi@4 96 <html xmlns="http://www.w3.org/1999/xhtml">
danielebarchiesi@4 97 <head>
danielebarchiesi@4 98 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
danielebarchiesi@4 99 <head>
danielebarchiesi@4 100 <body>
danielebarchiesi@4 101 ' . $r . '
danielebarchiesi@4 102 </body>
danielebarchiesi@4 103 </html>
danielebarchiesi@4 104 ';
danielebarchiesi@4 105 }
danielebarchiesi@4 106 return $r;
danielebarchiesi@4 107 }
danielebarchiesi@4 108
danielebarchiesi@4 109 /* */
danielebarchiesi@4 110 }
danielebarchiesi@4 111