summaryrefslogtreecommitdiff
path: root/ext/tidy/examples/dumpit.php
blob: e77b7b932377cbb31e8943feaf6c287f421bf43d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
    /*
     * dumpit.php
     *
     * a command-line script which dumps the given HTML, PHP, ASP, XHTML, etc.
     * file as it is represented in the document model.
     *
     * By: John Coggeshall <john@php.net>
     *
     * Usage; php dumpit.php <filename>
     */
     
    tidy_parse_file($_SERVER['argv'][1]);
    
    /* Optionally you can do this here if you want to fix up the document */
    
    /* tidy_clean_repair(); */
              
    $tree = tidy_get_root();
    dump_tree($tree);
    echo "\n";
    
    function node_type($type) {
        
        switch($type) {
            
            case TIDY_NODETYPE_ROOT: return "Root Node";
            case TIDY_NODETYPE_DOCTYPE: return "DocType Node";
            case TIDY_NODETYPE_COMMENT: return "Comment Node";
            case TIDY_NODETYPE_PROCINS: return "ProcIns Node";
            case TIDY_NODETYPE_TEXT: return "Text Node";
            case TIDY_NODETYPE_START: return "Start Node";
            case TIDY_NODETYPE_END: return "End Node";
            case TIDY_NODETYPE_STARTEND: return "Start/End Node";
            case TIDY_NODETYPE_CDATA: return "CDATA Node";
            case TIDY_NODETYPE_SECTION: return "Section Node";
            case TIDY_NODETYPE_ASP: return "ASP Source Code Node";
            case TIDY_NODETYPE_PHP: return "PHP Source Code Node";
            case TIDY_NODETYPE_JSTE: return "JSTE Source Code";
            case TIDY_NODETYPE_XMLDECL: return "XML Declaration Node";
            default: return "Unknown Node";
        }
    }
    
    function do_leaf($string, $indent) {
        for($i = 0; $i < $indent; $i++) {
         echo " ";
        }
        echo $string;
    }
    
    function dump_tree($node, $indent = 0) {
        if($node) {
            /* Put something there if the node name is empty */
            $nodename = trim(strtoupper($node->name));
            $nodename = (empty($nodename)) ? "[EMPTY]" : $nodename;
            
            /* Generate the Node, and a pretty name for it */
            do_leaf(" + $nodename (".node_type($node->type).")\n", $indent);
            
            /* Check to see if this node is a text node. Text nodes are
               generated by start/end tags and contain the text in between.
               i.e. <B>foo</B> will create a text node with $node->value
               equal to 'foo' */
            if($node->type == TIDY_NODETYPE_TEXT) {
                do_leaf("     |\n", $indent);
                do_leaf("     +---- Value: '{$node->value}'\n", $indent);
            }
            
            /* Any attributes on this node? */
            if(count($node->attributes())) {
                do_leaf(" |\n", $indent);
                do_leaf(" +---- Attributes\n", $indent);
                
                /* Cycle through the attributes and display them and their values. */
                foreach($node->attributes() as $attrib) {
                    do_leaf("             +--{$attrib->name}\n", $indent);
                    do_leaf("             |    +-- Value: {$attrib->value}\n", $indent);
                }
            }
            
            /* Recurse along the children to generate the remaining nodes */
            if($node->has_children()) {
                foreach($node->children() as $child) {
                    dump_tree($child, $indent + 3);
                }
            }
        }
    }
    
    echo tidy_get_output();

?>