Changeset 1603 for lang

Show
Ignore:
Timestamp:
11/16/07 02:20:55 (6 years ago)
Author:
gyuque
Message:

lang/javascript/javascript-xpath: updated analyzer.

Location:
lang/javascript/javascript-xpath/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/javascript-xpath/trunk/src/jxanalyzer.js

    r1588 r1603  
    66JXAnalyzer.nextObjId = 0; 
    77JXAnalyzer.IndentDeck = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "; 
     8 
     9JXAnalyzer.rxStep = /^Step\[/; 
     10JXAnalyzer.rxXPathExpression = /^XPathExpression\[/; 
     11JXAnalyzer.rxXPathResult = /^XPathResult\[/; 
     12 
     13JXAnalyzer.NodeTypeNames = [ 
     14        '', 
     15        'ELEM', 
     16        'ATTR', 
     17        'TEXT', 
     18        'CDATA', 
     19        '', 
     20        '', 
     21        '', 
     22        '', 
     23        'DOCUMENT' 
     24] 
     25 
    826JXAnalyzer.makeIndent = function(i) { 
    927        return JXAnalyzer.IndentDeck.substring(0, i*2); 
     
    2139        } 
    2240        return destination; 
     41} 
     42 
     43JXAnalyzer.escapeHTML = function(t) { 
     44        var div = document.createElement('div'); 
     45        var text = document.createTextNode(t); 
     46        div.appendChild(text); 
     47        return div.innerHTML; 
    2348} 
    2449 
     
    4772                        e.stepObj = e.args[1]; 
    4873                } 
     74                else if (e.name == "push") 
     75                { 
     76                        e.node = e.args[0]; 
     77                } 
    4978                 
    5079                ctx.events.push(e); 
     
    6998                        var e = this.ctx.events[i]; 
    7099                        var row; 
     100 
     101                        if (e.time) 
     102                                e.ET = e.time - this.ctx.tmStart; 
     103 
    71104                        if (e.name == "parse") 
    72105                                row = this.makeParseEventLog(e); 
     
    77110                        else if (e.name == "step") 
    78111                                row = this.makeStepEventLog(e); 
     112                        else if (e.name == "push") 
     113                                row = this.makePushEventLog(e); 
    79114                         
     115                        if (row && e.ET>=50) 
     116                                row.className = (e.ET<100) ? "heavy-1" : "heavy-2"; 
     117 
    80118                        if (row) 
    81119                                container.appendChild(row); 
     
    87125        makeParseEventLog: function(e) { 
    88126                var P = document.createElement("p"); 
    89                 P.innerHTML = JXAnalyzer.makeIndent(e.pnest)+"<em class=\"az-parse-call\">"+e.parserName +".parse</em> &nbsp; next token: '"+e.nextToken+ "' &nbsp; at start + "+(e.time-this.ctx.tmStart); 
     127                P.innerHTML = JXAnalyzer.makeIndent(e.pnest)+"<em class=\"az-parse-call\">"+e.parserName +".parse</em> &nbsp; next token: '"+e.nextToken+ "' &nbsp; at start + "+e.ET; 
    90128                 
    91129                return P; 
     
    94132        makeEvaluateEventLog: function(e) { 
    95133                var P = document.createElement("p"); 
    96                 P.innerHTML = JXAnalyzer.makeIndent(e.pnest)+"<em class=\"az-eval-call\">"+e.parserName +".evaluate</em> &nbsp; at start + "+(e.time-this.ctx.tmStart); 
     134                P.innerHTML = JXAnalyzer.makeIndent(e.pnest)+"<em class=\"az-eval-call\">"+e.parserName +".evaluate</em> &nbsp; at start + "+e.ET; 
    97135                 
    98136                return P; 
     
    101139        makeCtorEventLog: function(e) { 
    102140                var P = document.createElement("p"); 
     141 
     142                var additionalClass = ""; 
     143                if (e.parserName.match(JXAnalyzer.rxXPathExpression) || e.parserName.match(JXAnalyzer.rxXPathResult)) 
     144                        additionalClass = " important"; 
    103145                 
    104146                var flds = [ 
    105147                        JXAnalyzer.makeIndent(e.pnest), 
    106                         "<em class=\"az-ctor-call\">ctor ", 
     148                        "<em class=\"az-ctor-call"+additionalClass+"\">ctor ", 
    107149                        e.parserName, 
    108150                        "</em>" 
    109151                ]; 
    110152                 
    111                 if (e.parserName.match(/^Step\[/)) 
     153                if (e.parserName.match(JXAnalyzer.rxStep)) 
    112154                        flds.push(" axis='"+e.obj.axis+"'"); 
    113155                 
    114                 flds.push(" &nbsp; at start + " + (e.time-this.ctx.tmStart)); 
     156                flds.push(" &nbsp; at start + " + e.ET); 
    115157                         
    116158                P.innerHTML = flds.join(''); 
     
    131173                        e.stepObj._parser_name, 
    132174                        " &nbsp; at start + ", 
    133                         e.time-this.ctx.tmStart 
     175                        e.ET 
    134176                ]; 
    135177                 
    136178                P.innerHTML = flds.join(''); 
     179                 
     180                return P; 
     181        }, 
     182 
     183        dumpNode: function(nd) { 
     184                var datas = []; 
     185 
     186                if (nd.nodeType != void(0)) 
     187                        datas.push("<em class=\"nodetype-"+JXAnalyzer.NodeTypeNames[nd.nodeType]+"\">"+JXAnalyzer.NodeTypeNames[nd.nodeType]+"</em>"); 
     188 
     189                if (nd.tagName) 
     190                        datas.push("tagName='"+nd.tagName+"'"); 
     191 
     192                if (nd.className) 
     193                        datas.push("className='"+nd.className+"'"); 
     194 
     195                if (nd.nodeType == 3) 
     196                        datas.push("'"+JXAnalyzer.escapeHTML(nd.nodeValue)+"'"); 
     197 
     198                return datas.join(" "); 
     199        }, 
     200 
     201        makePushEventLog: function(e) { 
     202                var P = document.createElement("p"); 
     203                P.innerHTML = JXAnalyzer.makeIndent(e.pnest)+"<em class=\"az-push-call\">"+e.parserName +".push</em> "+this.dumpNode(e.node)+" &nbsp; at start + "+e.ET; 
    137204                 
    138205                return P; 
     
    148215        "BinaryExpr", "FilterExpr", "FunctionCall", "Literal", 
    149216        "NameTest", "NodeType", "Number", "PathExpr", 
    150         "Step", "UnaryExpr", "UnionExpr", "VariableReference"]; 
     217        "Step", "UnaryExpr", "UnionExpr", "VariableReference", 
     218        "XPathExpression"]; 
    151219 
    152220JXAnalyzer.HOOK_NODEOBJS = [ 
     
    155223        "Step", "UnaryExpr", "UnionExpr", "VariableReference", 
    156224         
    157         "NodeSet"]; 
     225        "NodeSet", "XPathExpression", "XPathResult"]; 
    158226 
    159227JXAnalyzer.hookMethod = function(obj, name, tracer) { 
     
    187255                if (parser) 
    188256                { 
    189                         if (parser.parse) 
    190                         { 
    191                                 parser._parser_name = objName; 
    192                                 JXAnalyzer.hookMethod(parser, "parse", Azr); 
    193                                 JXAnalyzer.hookMethod(parser.prototype, "evaluate", Azr); 
    194                         } 
     257                        parser._parser_name = objName; 
     258                        JXAnalyzer.hookMethod(parser, "parse", Azr); 
     259                        JXAnalyzer.hookMethod(parser.prototype, "evaluate", Azr); 
    195260                } 
    196261        } 
    197262         
    198263        JXAnalyzer.hookMethod(PathExpr.prototype, "step", Azr); 
     264        JXAnalyzer.hookMethod(NodeSet.prototype, "push", Azr); 
    199265 
    200266        var len = JXAnalyzer.HOOK_NODEOBJS.length; 
  • lang/javascript/javascript-xpath/trunk/test/functional/analyzer.css

    r1588 r1603  
    22    background: #fff; 
    33    color: #333; 
     4        margin: 0; 
     5        padding: 0; 
     6        font-weight: 400; 
     7        font-family: Arial, sans-serif; 
     8} 
     9 
     10.analyzer-out p { 
     11        margin: 0; 
     12        padding: 0.3em; 
     13        border-bottom: 1px dotted #ddd; 
     14        border-left: 8px solid #fff; 
     15} 
     16 
     17.analyzer-out p em { 
     18    font-style: normal; 
     19} 
     20 
     21.analyzer-out .heavy-1 { 
     22        border-left-color: #fe9; 
     23} 
     24 
     25.analyzer-out .heavy-2 { 
     26        border-left-color: #f94; 
    427} 
    528 
    629.az-parse-call { 
    7     font-style: normal; 
    830    color: #008; 
    931} 
    1032 
    1133.az-step-call { 
    12     font-style: normal; 
    1334    color: #28c; 
    1435} 
    1536 
    1637.az-ctor-call { 
    17     font-style: normal; 
    1838    color: #850; 
    1939} 
    2040 
     41.az-ctor-call.important { 
     42        font-size: 160%; 
     43} 
     44 
    2145.az-eval-call { 
    22     font-style: normal; 
    2346    color: #290; 
    2447} 
     48 
     49.az-push-call { 
     50    color: #578; 
     51} 
     52 
     53.nodetype-ELEM, 
     54.nodetype-ATTR, 
     55.nodetype-TEXT, 
     56.nodetype-DOCUMENT { 
     57        padding: 2px; 
     58} 
     59 
     60.nodetype-ELEM { 
     61        color: #fff; 
     62        background: #469; 
     63} 
     64 
     65.nodetype-ATTR { 
     66        color: #fff; 
     67        background: #a56; 
     68} 
     69 
     70.nodetype-TEXT { 
     71        color: #fff; 
     72        background: #9ba; 
     73} 
     74 
     75.nodetype-DOCUMENT { 
     76        color: #fff; 
     77        background: #963; 
     78} 
     79 
     80td.fullspan { 
     81        padding-top: 0; 
     82        border-top-width: 0; 
     83} 
     84 
  • lang/javascript/javascript-xpath/trunk/test/functional/logger.js

    r1580 r1603  
    143143        tr.appendChild(td); 
    144144        td.setAttribute("colSpan", this.countCols); 
     145                td.className = "fullspan"; 
    145146    } 
    146147};