Home | History | Annotate | Download | only in front_end
      1 /* Generated by re2c 0.13.5 on Fri May  6 13:47:06 2011 */
      2 /*
      3  * Copyright (C) 2009 Google Inc. All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions are
      7  * met:
      8  *
      9  *     * Redistributions of source code must retain the above copyright
     10  * notice, this list of conditions and the following disclaimer.
     11  *     * Redistributions in binary form must reproduce the above
     12  * copyright notice, this list of conditions and the following disclaimer
     13  * in the documentation and/or other materials provided with the
     14  * distribution.
     15  *     * Neither the name of Google Inc. nor the names of its
     16  * contributors may be used to endorse or promote products derived from
     17  * this software without specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 // Generate js file as follows:
     33 //
     34 // re2c -isc devtools/front_end/SourceHTMLTokenizer.re2js \
     35 // | sed 's|^yy\([^:]*\)*\:|case \1:|' \
     36 // | sed 's|[*]cursor[+][+]|this._charAt(cursor++)|' \
     37 // | sed 's|[[*][+][+]cursor|this._charAt(++cursor)|' \
     38 // | sed 's|[*]cursor|this._charAt(cursor)|' \
     39 // | sed 's|yych = \*\([^;]*\)|yych = this._charAt\1|' \
     40 // | sed 's|{ gotoCase = \([^; continue; };]*\)|{ gotoCase = \1; continue; }|' \
     41 // | sed 's|unsigned\ int|var|' \
     42 // | sed 's|var\ yych|case 1: case 1: var yych|' > devtools/front_end/SourceHTMLTokenizer.js
     43 
     44 /**
     45  * @constructor
     46  * @extends {WebInspector.SourceTokenizer}
     47  */
     48 WebInspector.SourceHTMLTokenizer = function()
     49 {
     50     WebInspector.SourceTokenizer.call(this);
     51 
     52     // The order is determined by the generated code.
     53     this._lexConditions = {
     54         INITIAL: 0,
     55         COMMENT: 1,
     56         DOCTYPE: 2,
     57         TAG: 3,
     58         DSTRING: 4,
     59         SSTRING: 5
     60     };
     61     this.case_INITIAL = 1000;
     62     this.case_COMMENT = 1001;
     63     this.case_DOCTYPE = 1002;
     64     this.case_TAG = 1003;
     65     this.case_DSTRING = 1004;
     66     this.case_SSTRING = 1005;
     67 
     68     this._parseConditions = {
     69         INITIAL: 0,
     70         ATTRIBUTE: 1,
     71         ATTRIBUTE_VALUE: 2,
     72         LINKIFY: 4,
     73         A_NODE: 8,
     74         SCRIPT: 16,
     75         STYLE: 32
     76     };
     77 
     78     this.condition = this.createInitialCondition();
     79 }
     80 
     81 WebInspector.SourceHTMLTokenizer.prototype = {
     82     createInitialCondition: function()
     83     {
     84         return { lexCondition: this._lexConditions.INITIAL, parseCondition: this._parseConditions.INITIAL };
     85     },
     86 
     87     set line(line) {
     88         if (this._condition.internalJavaScriptTokenizerCondition) {
     89             var match = /<\/script/i.exec(line);
     90             if (match) {
     91                 this._internalJavaScriptTokenizer.line = line.substring(0, match.index);
     92             } else
     93                 this._internalJavaScriptTokenizer.line = line;
     94         } else if (this._condition.internalCSSTokenizerCondition) {
     95             var match = /<\/style/i.exec(line);
     96             if (match) {
     97                 this._internalCSSTokenizer.line = line.substring(0, match.index);
     98             } else
     99                 this._internalCSSTokenizer.line = line;
    100         }
    101         this._line = line;
    102     },
    103 
    104     _isExpectingAttribute: function()
    105     {
    106         return this._condition.parseCondition & this._parseConditions.ATTRIBUTE;
    107     },
    108 
    109     _isExpectingAttributeValue: function()
    110     {
    111         return this._condition.parseCondition & this._parseConditions.ATTRIBUTE_VALUE;
    112     },
    113 
    114     _setExpectingAttribute: function()
    115     {
    116         if (this._isExpectingAttributeValue())
    117             this._condition.parseCondition ^= this._parseConditions.ATTRIBUTE_VALUE;
    118         this._condition.parseCondition |= this._parseConditions.ATTRIBUTE;
    119     },
    120 
    121     _setExpectingAttributeValue: function()
    122     {
    123         if (this._isExpectingAttribute())
    124             this._condition.parseCondition ^= this._parseConditions.ATTRIBUTE;
    125         this._condition.parseCondition |= this._parseConditions.ATTRIBUTE_VALUE;
    126     },
    127 
    128     /**
    129      * @param {boolean=} stringEnds
    130      */
    131     _stringToken: function(cursor, stringEnds)
    132     {
    133         if (!this._isExpectingAttributeValue()) {
    134             this.tokenType = null;
    135             return cursor;
    136         }
    137         this.tokenType = this._attrValueTokenType();
    138         if (stringEnds)
    139             this._setExpectingAttribute();
    140         return cursor;
    141     },
    142 
    143     _attrValueTokenType: function()
    144     {
    145         if (this._condition.parseCondition & this._parseConditions.LINKIFY) {
    146             if (this._condition.parseCondition & this._parseConditions.A_NODE)
    147                 return "html-external-link";
    148             return "html-resource-link";
    149         }
    150         return "html-attribute-value";
    151     },
    152 
    153     get _internalJavaScriptTokenizer()
    154     {
    155         return WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer("text/javascript");
    156     },
    157 
    158     get _internalCSSTokenizer()
    159     {
    160         return WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer("text/css");
    161     },
    162 
    163     scriptStarted: function(cursor)
    164     {
    165         this._condition.internalJavaScriptTokenizerCondition = this._internalJavaScriptTokenizer.createInitialCondition();
    166     },
    167 
    168     scriptEnded: function(cursor)
    169     {
    170     },
    171 
    172     styleSheetStarted: function(cursor)
    173     {
    174         this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.createInitialCondition();
    175     },
    176 
    177     styleSheetEnded: function(cursor)
    178     {
    179     },
    180 
    181     nextToken: function(cursor)
    182     {
    183         if (this._condition.internalJavaScriptTokenizerCondition) {
    184             // Re-set line to force </script> detection first.
    185             this.line = this._line;
    186             if (cursor !== this._internalJavaScriptTokenizer._line.length) {
    187                 // Tokenizer is stateless, so restore its condition before tokenizing and save it after.
    188                 this._internalJavaScriptTokenizer.condition = this._condition.internalJavaScriptTokenizerCondition;
    189                 var result = this._internalJavaScriptTokenizer.nextToken(cursor);
    190                 this.tokenType = this._internalJavaScriptTokenizer.tokenType;
    191                 this._condition.internalJavaScriptTokenizerCondition = this._internalJavaScriptTokenizer.condition;
    192                 return result;
    193             } else if (cursor !== this._line.length)
    194                 delete this._condition.internalJavaScriptTokenizerCondition;
    195         } else if (this._condition.internalCSSTokenizerCondition) {
    196             // Re-set line to force </style> detection first.
    197             this.line = this._line;
    198             if (cursor !== this._internalCSSTokenizer._line.length) {
    199                 // Tokenizer is stateless, so restore its condition before tokenizing and save it after.
    200                 this._internalCSSTokenizer.condition = this._condition.internalCSSTokenizerCondition;
    201                 var result = this._internalCSSTokenizer.nextToken(cursor);
    202                 this.tokenType = this._internalCSSTokenizer.tokenType;
    203                 this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.condition;
    204                 return result;
    205             } else if (cursor !== this._line.length)
    206                 delete this._condition.internalCSSTokenizerCondition;
    207         }
    208 
    209         var cursorOnEnter = cursor;
    210         var gotoCase = 1;
    211         var YYMARKER;
    212         while (1) {
    213             switch (gotoCase)
    214             // Following comment is replaced with generated state machine.
    215 
    216         {
    217             case 1: var yych;
    218             var yyaccept = 0;
    219             if (this.getLexCondition() < 3) {
    220                 if (this.getLexCondition() < 1) {
    221                     { gotoCase = this.case_INITIAL; continue; };
    222                 } else {
    223                     if (this.getLexCondition() < 2) {
    224                         { gotoCase = this.case_COMMENT; continue; };
    225                     } else {
    226                         { gotoCase = this.case_DOCTYPE; continue; };
    227                     }
    228                 }
    229             } else {
    230                 if (this.getLexCondition() < 4) {
    231                     { gotoCase = this.case_TAG; continue; };
    232                 } else {
    233                     if (this.getLexCondition() < 5) {
    234                         { gotoCase = this.case_DSTRING; continue; };
    235                     } else {
    236                         { gotoCase = this.case_SSTRING; continue; };
    237                     }
    238                 }
    239             }
    240 /* *********************************** */
    241 case this.case_COMMENT:
    242 
    243             yych = this._charAt(cursor);
    244             if (yych <= '\f') {
    245                 if (yych == '\n') { gotoCase = 4; continue; };
    246                 { gotoCase = 3; continue; };
    247             } else {
    248                 if (yych <= '\r') { gotoCase = 4; continue; };
    249                 if (yych == '-') { gotoCase = 6; continue; };
    250                 { gotoCase = 3; continue; };
    251             }
    252 case 2:
    253             { this.tokenType = "html-comment"; return cursor; }
    254 case 3:
    255             yyaccept = 0;
    256             yych = this._charAt(YYMARKER = ++cursor);
    257             { gotoCase = 9; continue; };
    258 case 4:
    259             ++cursor;
    260 case 5:
    261             { this.tokenType = null; return cursor; }
    262 case 6:
    263             yyaccept = 1;
    264             yych = this._charAt(YYMARKER = ++cursor);
    265             if (yych != '-') { gotoCase = 5; continue; };
    266 case 7:
    267             ++cursor;
    268             yych = this._charAt(cursor);
    269             if (yych == '>') { gotoCase = 10; continue; };
    270 case 8:
    271             yyaccept = 0;
    272             YYMARKER = ++cursor;
    273             yych = this._charAt(cursor);
    274 case 9:
    275             if (yych <= '\f') {
    276                 if (yych == '\n') { gotoCase = 2; continue; };
    277                 { gotoCase = 8; continue; };
    278             } else {
    279                 if (yych <= '\r') { gotoCase = 2; continue; };
    280                 if (yych == '-') { gotoCase = 12; continue; };
    281                 { gotoCase = 8; continue; };
    282             }
    283 case 10:
    284             ++cursor;
    285             this.setLexCondition(this._lexConditions.INITIAL);
    286             { this.tokenType = "html-comment"; return cursor; }
    287 case 12:
    288             ++cursor;
    289             yych = this._charAt(cursor);
    290             if (yych == '-') { gotoCase = 7; continue; };
    291             cursor = YYMARKER;
    292             if (yyaccept <= 0) {
    293                 { gotoCase = 2; continue; };
    294             } else {
    295                 { gotoCase = 5; continue; };
    296             }
    297 /* *********************************** */
    298 case this.case_DOCTYPE:
    299             yych = this._charAt(cursor);
    300             if (yych <= '\f') {
    301                 if (yych == '\n') { gotoCase = 18; continue; };
    302                 { gotoCase = 17; continue; };
    303             } else {
    304                 if (yych <= '\r') { gotoCase = 18; continue; };
    305                 if (yych == '>') { gotoCase = 20; continue; };
    306                 { gotoCase = 17; continue; };
    307             }
    308 case 16:
    309             { this.tokenType = "html-doctype"; return cursor; }
    310 case 17:
    311             yych = this._charAt(++cursor);
    312             { gotoCase = 23; continue; };
    313 case 18:
    314             ++cursor;
    315             { this.tokenType = null; return cursor; }
    316 case 20:
    317             ++cursor;
    318             this.setLexCondition(this._lexConditions.INITIAL);
    319             { this.tokenType = "html-doctype"; return cursor; }
    320 case 22:
    321             ++cursor;
    322             yych = this._charAt(cursor);
    323 case 23:
    324             if (yych <= '\f') {
    325                 if (yych == '\n') { gotoCase = 16; continue; };
    326                 { gotoCase = 22; continue; };
    327             } else {
    328                 if (yych <= '\r') { gotoCase = 16; continue; };
    329                 if (yych == '>') { gotoCase = 16; continue; };
    330                 { gotoCase = 22; continue; };
    331             }
    332 /* *********************************** */
    333 case this.case_DSTRING:
    334             yych = this._charAt(cursor);
    335             if (yych <= '\f') {
    336                 if (yych == '\n') { gotoCase = 28; continue; };
    337                 { gotoCase = 27; continue; };
    338             } else {
    339                 if (yych <= '\r') { gotoCase = 28; continue; };
    340                 if (yych == '"') { gotoCase = 30; continue; };
    341                 { gotoCase = 27; continue; };
    342             }
    343 case 26:
    344             { return this._stringToken(cursor); }
    345 case 27:
    346             yych = this._charAt(++cursor);
    347             { gotoCase = 34; continue; };
    348 case 28:
    349             ++cursor;
    350             { this.tokenType = null; return cursor; }
    351 case 30:
    352             ++cursor;
    353 case 31:
    354             this.setLexCondition(this._lexConditions.TAG);
    355             { return this._stringToken(cursor, true); }
    356 case 32:
    357             yych = this._charAt(++cursor);
    358             { gotoCase = 31; continue; };
    359 case 33:
    360             ++cursor;
    361             yych = this._charAt(cursor);
    362 case 34:
    363             if (yych <= '\f') {
    364                 if (yych == '\n') { gotoCase = 26; continue; };
    365                 { gotoCase = 33; continue; };
    366             } else {
    367                 if (yych <= '\r') { gotoCase = 26; continue; };
    368                 if (yych == '"') { gotoCase = 32; continue; };
    369                 { gotoCase = 33; continue; };
    370             }
    371 /* *********************************** */
    372 case this.case_INITIAL:
    373             yych = this._charAt(cursor);
    374             if (yych == '<') { gotoCase = 39; continue; };
    375             ++cursor;
    376             { this.tokenType = null; return cursor; }
    377 case 39:
    378             yyaccept = 0;
    379             yych = this._charAt(YYMARKER = ++cursor);
    380             if (yych <= '/') {
    381                 if (yych == '!') { gotoCase = 44; continue; };
    382                 if (yych >= '/') { gotoCase = 41; continue; };
    383             } else {
    384                 if (yych <= 'S') {
    385                     if (yych >= 'S') { gotoCase = 42; continue; };
    386                 } else {
    387                     if (yych == 's') { gotoCase = 42; continue; };
    388                 }
    389             }
    390 case 40:
    391             this.setLexCondition(this._lexConditions.TAG);
    392             {
    393                     if (this._condition.parseCondition & (this._parseConditions.SCRIPT | this._parseConditions.STYLE)) {
    394                         // Do not tokenize script and style tag contents, keep lexer state, even though processing "<".
    395                         this.setLexCondition(this._lexConditions.INITIAL);
    396                         this.tokenType = null;
    397                         return cursor;
    398                     }
    399 
    400                     this._condition.parseCondition = this._parseConditions.INITIAL;
    401                     this.tokenType = "html-tag";
    402                     return cursor;
    403                 }
    404 case 41:
    405             yyaccept = 0;
    406             yych = this._charAt(YYMARKER = ++cursor);
    407             if (yych == 'S') { gotoCase = 73; continue; };
    408             if (yych == 's') { gotoCase = 73; continue; };
    409             { gotoCase = 40; continue; };
    410 case 42:
    411             yych = this._charAt(++cursor);
    412             if (yych <= 'T') {
    413                 if (yych == 'C') { gotoCase = 62; continue; };
    414                 if (yych >= 'T') { gotoCase = 63; continue; };
    415             } else {
    416                 if (yych <= 'c') {
    417                     if (yych >= 'c') { gotoCase = 62; continue; };
    418                 } else {
    419                     if (yych == 't') { gotoCase = 63; continue; };
    420                 }
    421             }
    422 case 43:
    423             cursor = YYMARKER;
    424             { gotoCase = 40; continue; };
    425 case 44:
    426             yych = this._charAt(++cursor);
    427             if (yych <= 'C') {
    428                 if (yych != '-') { gotoCase = 43; continue; };
    429             } else {
    430                 if (yych <= 'D') { gotoCase = 46; continue; };
    431                 if (yych == 'd') { gotoCase = 46; continue; };
    432                 { gotoCase = 43; continue; };
    433             }
    434             yych = this._charAt(++cursor);
    435             if (yych == '-') { gotoCase = 54; continue; };
    436             { gotoCase = 43; continue; };
    437 case 46:
    438             yych = this._charAt(++cursor);
    439             if (yych == 'O') { gotoCase = 47; continue; };
    440             if (yych != 'o') { gotoCase = 43; continue; };
    441 case 47:
    442             yych = this._charAt(++cursor);
    443             if (yych == 'C') { gotoCase = 48; continue; };
    444             if (yych != 'c') { gotoCase = 43; continue; };
    445 case 48:
    446             yych = this._charAt(++cursor);
    447             if (yych == 'T') { gotoCase = 49; continue; };
    448             if (yych != 't') { gotoCase = 43; continue; };
    449 case 49:
    450             yych = this._charAt(++cursor);
    451             if (yych == 'Y') { gotoCase = 50; continue; };
    452             if (yych != 'y') { gotoCase = 43; continue; };
    453 case 50:
    454             yych = this._charAt(++cursor);
    455             if (yych == 'P') { gotoCase = 51; continue; };
    456             if (yych != 'p') { gotoCase = 43; continue; };
    457 case 51:
    458             yych = this._charAt(++cursor);
    459             if (yych == 'E') { gotoCase = 52; continue; };
    460             if (yych != 'e') { gotoCase = 43; continue; };
    461 case 52:
    462             ++cursor;
    463             this.setLexCondition(this._lexConditions.DOCTYPE);
    464             { this.tokenType = "html-doctype"; return cursor; }
    465 case 54:
    466             ++cursor;
    467             yych = this._charAt(cursor);
    468             if (yych <= '\f') {
    469                 if (yych == '\n') { gotoCase = 57; continue; };
    470                 { gotoCase = 54; continue; };
    471             } else {
    472                 if (yych <= '\r') { gotoCase = 57; continue; };
    473                 if (yych != '-') { gotoCase = 54; continue; };
    474             }
    475             ++cursor;
    476             yych = this._charAt(cursor);
    477             if (yych == '-') { gotoCase = 59; continue; };
    478             { gotoCase = 43; continue; };
    479 case 57:
    480             ++cursor;
    481             this.setLexCondition(this._lexConditions.COMMENT);
    482             { this.tokenType = "html-comment"; return cursor; }
    483 case 59:
    484             ++cursor;
    485             yych = this._charAt(cursor);
    486             if (yych != '>') { gotoCase = 54; continue; };
    487             ++cursor;
    488             { this.tokenType = "html-comment"; return cursor; }
    489 case 62:
    490             yych = this._charAt(++cursor);
    491             if (yych == 'R') { gotoCase = 68; continue; };
    492             if (yych == 'r') { gotoCase = 68; continue; };
    493             { gotoCase = 43; continue; };
    494 case 63:
    495             yych = this._charAt(++cursor);
    496             if (yych == 'Y') { gotoCase = 64; continue; };
    497             if (yych != 'y') { gotoCase = 43; continue; };
    498 case 64:
    499             yych = this._charAt(++cursor);
    500             if (yych == 'L') { gotoCase = 65; continue; };
    501             if (yych != 'l') { gotoCase = 43; continue; };
    502 case 65:
    503             yych = this._charAt(++cursor);
    504             if (yych == 'E') { gotoCase = 66; continue; };
    505             if (yych != 'e') { gotoCase = 43; continue; };
    506 case 66:
    507             ++cursor;
    508             this.setLexCondition(this._lexConditions.TAG);
    509             {
    510                     if (this._condition.parseCondition & this._parseConditions.STYLE) {
    511                         // Do not tokenize style tag contents, keep lexer state, even though processing "<".
    512                         this.setLexCondition(this._lexConditions.INITIAL);
    513                         this.tokenType = null;
    514                         return cursor;
    515                     }
    516                     this.tokenType = "html-tag";
    517                     this._condition.parseCondition = this._parseConditions.STYLE;
    518                     this._setExpectingAttribute();
    519                     return cursor;
    520                 }
    521 case 68:
    522             yych = this._charAt(++cursor);
    523             if (yych == 'I') { gotoCase = 69; continue; };
    524             if (yych != 'i') { gotoCase = 43; continue; };
    525 case 69:
    526             yych = this._charAt(++cursor);
    527             if (yych == 'P') { gotoCase = 70; continue; };
    528             if (yych != 'p') { gotoCase = 43; continue; };
    529 case 70:
    530             yych = this._charAt(++cursor);
    531             if (yych == 'T') { gotoCase = 71; continue; };
    532             if (yych != 't') { gotoCase = 43; continue; };
    533 case 71:
    534             ++cursor;
    535             this.setLexCondition(this._lexConditions.TAG);
    536             {
    537                     if (this._condition.parseCondition & this._parseConditions.SCRIPT) {
    538                         // Do not tokenize script tag contents, keep lexer state, even though processing "<".
    539                         this.setLexCondition(this._lexConditions.INITIAL);
    540                         this.tokenType = null;
    541                         return cursor;
    542                     }
    543                     this.tokenType = "html-tag";
    544                     this._condition.parseCondition = this._parseConditions.SCRIPT;
    545                     this._setExpectingAttribute();
    546                     return cursor;
    547                 }
    548 case 73:
    549             yych = this._charAt(++cursor);
    550             if (yych <= 'T') {
    551                 if (yych == 'C') { gotoCase = 75; continue; };
    552                 if (yych <= 'S') { gotoCase = 43; continue; };
    553             } else {
    554                 if (yych <= 'c') {
    555                     if (yych <= 'b') { gotoCase = 43; continue; };
    556                     { gotoCase = 75; continue; };
    557                 } else {
    558                     if (yych != 't') { gotoCase = 43; continue; };
    559                 }
    560             }
    561             yych = this._charAt(++cursor);
    562             if (yych == 'Y') { gotoCase = 81; continue; };
    563             if (yych == 'y') { gotoCase = 81; continue; };
    564             { gotoCase = 43; continue; };
    565 case 75:
    566             yych = this._charAt(++cursor);
    567             if (yych == 'R') { gotoCase = 76; continue; };
    568             if (yych != 'r') { gotoCase = 43; continue; };
    569 case 76:
    570             yych = this._charAt(++cursor);
    571             if (yych == 'I') { gotoCase = 77; continue; };
    572             if (yych != 'i') { gotoCase = 43; continue; };
    573 case 77:
    574             yych = this._charAt(++cursor);
    575             if (yych == 'P') { gotoCase = 78; continue; };
    576             if (yych != 'p') { gotoCase = 43; continue; };
    577 case 78:
    578             yych = this._charAt(++cursor);
    579             if (yych == 'T') { gotoCase = 79; continue; };
    580             if (yych != 't') { gotoCase = 43; continue; };
    581 case 79:
    582             ++cursor;
    583             this.setLexCondition(this._lexConditions.TAG);
    584             {
    585                     this.tokenType = "html-tag";
    586                     this._condition.parseCondition = this._parseConditions.INITIAL;
    587                     this.scriptEnded(cursor - 8);
    588                     return cursor;
    589                 }
    590 case 81:
    591             yych = this._charAt(++cursor);
    592             if (yych == 'L') { gotoCase = 82; continue; };
    593             if (yych != 'l') { gotoCase = 43; continue; };
    594 case 82:
    595             yych = this._charAt(++cursor);
    596             if (yych == 'E') { gotoCase = 83; continue; };
    597             if (yych != 'e') { gotoCase = 43; continue; };
    598 case 83:
    599             ++cursor;
    600             this.setLexCondition(this._lexConditions.TAG);
    601             {
    602                     this.tokenType = "html-tag";
    603                     this._condition.parseCondition = this._parseConditions.INITIAL;
    604                     this.styleSheetEnded(cursor - 7);
    605                     return cursor;
    606                 }
    607 /* *********************************** */
    608 case this.case_SSTRING:
    609             yych = this._charAt(cursor);
    610             if (yych <= '\f') {
    611                 if (yych == '\n') { gotoCase = 89; continue; };
    612                 { gotoCase = 88; continue; };
    613             } else {
    614                 if (yych <= '\r') { gotoCase = 89; continue; };
    615                 if (yych == '\'') { gotoCase = 91; continue; };
    616                 { gotoCase = 88; continue; };
    617             }
    618 case 87:
    619             { return this._stringToken(cursor); }
    620 case 88:
    621             yych = this._charAt(++cursor);
    622             { gotoCase = 95; continue; };
    623 case 89:
    624             ++cursor;
    625             { this.tokenType = null; return cursor; }
    626 case 91:
    627             ++cursor;
    628 case 92:
    629             this.setLexCondition(this._lexConditions.TAG);
    630             { return this._stringToken(cursor, true); }
    631 case 93:
    632             yych = this._charAt(++cursor);
    633             { gotoCase = 92; continue; };
    634 case 94:
    635             ++cursor;
    636             yych = this._charAt(cursor);
    637 case 95:
    638             if (yych <= '\f') {
    639                 if (yych == '\n') { gotoCase = 87; continue; };
    640                 { gotoCase = 94; continue; };
    641             } else {
    642                 if (yych <= '\r') { gotoCase = 87; continue; };
    643                 if (yych == '\'') { gotoCase = 93; continue; };
    644                 { gotoCase = 94; continue; };
    645             }
    646 /* *********************************** */
    647 case this.case_TAG:
    648             yych = this._charAt(cursor);
    649             if (yych <= '&') {
    650                 if (yych <= '\r') {
    651                     if (yych == '\n') { gotoCase = 100; continue; };
    652                     if (yych >= '\r') { gotoCase = 100; continue; };
    653                 } else {
    654                     if (yych <= ' ') {
    655                         if (yych >= ' ') { gotoCase = 100; continue; };
    656                     } else {
    657                         if (yych == '"') { gotoCase = 102; continue; };
    658                     }
    659                 }
    660             } else {
    661                 if (yych <= '>') {
    662                     if (yych <= ';') {
    663                         if (yych <= '\'') { gotoCase = 103; continue; };
    664                     } else {
    665                         if (yych <= '<') { gotoCase = 100; continue; };
    666                         if (yych <= '=') { gotoCase = 104; continue; };
    667                         { gotoCase = 106; continue; };
    668                     }
    669                 } else {
    670                     if (yych <= '[') {
    671                         if (yych >= '[') { gotoCase = 100; continue; };
    672                     } else {
    673                         if (yych == ']') { gotoCase = 100; continue; };
    674                     }
    675                 }
    676             }
    677             ++cursor;
    678             yych = this._charAt(cursor);
    679             { gotoCase = 119; continue; };
    680 case 99:
    681             {
    682                     if (this._condition.parseCondition === this._parseConditions.SCRIPT || this._condition.parseCondition === this._parseConditions.STYLE) {
    683                         // Fall through if expecting attributes.
    684                         this.tokenType = null;
    685                         return cursor;
    686                     }
    687 
    688                     if (this._condition.parseCondition === this._parseConditions.INITIAL) {
    689                         this.tokenType = "html-tag";
    690                         this._setExpectingAttribute();
    691                         var token = this._line.substring(cursorOnEnter, cursor);
    692                         if (token === "a")
    693                             this._condition.parseCondition |= this._parseConditions.A_NODE;
    694                         else if (this._condition.parseCondition & this._parseConditions.A_NODE)
    695                             this._condition.parseCondition ^= this._parseConditions.A_NODE;
    696                     } else if (this._isExpectingAttribute()) {
    697                         var token = this._line.substring(cursorOnEnter, cursor);
    698                         if (token === "href" || token === "src")
    699                             this._condition.parseCondition |= this._parseConditions.LINKIFY;
    700                         else if (this._condition.parseCondition |= this._parseConditions.LINKIFY)
    701                             this._condition.parseCondition ^= this._parseConditions.LINKIFY;
    702                         this.tokenType = "html-attribute-name";
    703                     } else if (this._isExpectingAttributeValue())
    704                         this.tokenType = this._attrValueTokenType();
    705                     else
    706                         this.tokenType = null;
    707                     return cursor;
    708                 }
    709 case 100:
    710             ++cursor;
    711             { this.tokenType = null; return cursor; }
    712 case 102:
    713             yyaccept = 0;
    714             yych = this._charAt(YYMARKER = ++cursor);
    715             { gotoCase = 115; continue; };
    716 case 103:
    717             yyaccept = 0;
    718             yych = this._charAt(YYMARKER = ++cursor);
    719             { gotoCase = 109; continue; };
    720 case 104:
    721             ++cursor;
    722             {
    723                     if (this._isExpectingAttribute())
    724                         this._setExpectingAttributeValue();
    725                     this.tokenType = null;
    726                     return cursor;
    727                 }
    728 case 106:
    729             ++cursor;
    730             this.setLexCondition(this._lexConditions.INITIAL);
    731             {
    732                     this.tokenType = "html-tag";
    733                     if (this._condition.parseCondition & this._parseConditions.SCRIPT) {
    734                         this.scriptStarted(cursor);
    735                         // Do not tokenize script tag contents.
    736                         return cursor;
    737                     }
    738 
    739                     if (this._condition.parseCondition & this._parseConditions.STYLE) {
    740                         this.styleSheetStarted(cursor);
    741                         // Do not tokenize style tag contents.
    742                         return cursor;
    743                     }
    744 
    745                     this._condition.parseCondition = this._parseConditions.INITIAL;
    746                     return cursor;
    747                 }
    748 case 108:
    749             ++cursor;
    750             yych = this._charAt(cursor);
    751 case 109:
    752             if (yych <= '\f') {
    753                 if (yych != '\n') { gotoCase = 108; continue; };
    754             } else {
    755                 if (yych <= '\r') { gotoCase = 110; continue; };
    756                 if (yych == '\'') { gotoCase = 112; continue; };
    757                 { gotoCase = 108; continue; };
    758             }
    759 case 110:
    760             ++cursor;
    761             this.setLexCondition(this._lexConditions.SSTRING);
    762             { return this._stringToken(cursor); }
    763 case 112:
    764             ++cursor;
    765             { return this._stringToken(cursor, true); }
    766 case 114:
    767             ++cursor;
    768             yych = this._charAt(cursor);
    769 case 115:
    770             if (yych <= '\f') {
    771                 if (yych != '\n') { gotoCase = 114; continue; };
    772             } else {
    773                 if (yych <= '\r') { gotoCase = 116; continue; };
    774                 if (yych == '"') { gotoCase = 112; continue; };
    775                 { gotoCase = 114; continue; };
    776             }
    777 case 116:
    778             ++cursor;
    779             this.setLexCondition(this._lexConditions.DSTRING);
    780             { return this._stringToken(cursor); }
    781 case 118:
    782             ++cursor;
    783             yych = this._charAt(cursor);
    784 case 119:
    785             if (yych <= '"') {
    786                 if (yych <= '\r') {
    787                     if (yych == '\n') { gotoCase = 99; continue; };
    788                     if (yych <= '\f') { gotoCase = 118; continue; };
    789                     { gotoCase = 99; continue; };
    790                 } else {
    791                     if (yych == ' ') { gotoCase = 99; continue; };
    792                     if (yych <= '!') { gotoCase = 118; continue; };
    793                     { gotoCase = 99; continue; };
    794                 }
    795             } else {
    796                 if (yych <= '>') {
    797                     if (yych == '\'') { gotoCase = 99; continue; };
    798                     if (yych <= ';') { gotoCase = 118; continue; };
    799                     { gotoCase = 99; continue; };
    800                 } else {
    801                     if (yych <= '[') {
    802                         if (yych <= 'Z') { gotoCase = 118; continue; };
    803                         { gotoCase = 99; continue; };
    804                     } else {
    805                         if (yych == ']') { gotoCase = 99; continue; };
    806                         { gotoCase = 118; continue; };
    807                     }
    808                 }
    809             }
    810         }
    811 
    812         }
    813     },
    814 
    815     __proto__: WebInspector.SourceTokenizer.prototype
    816 }
    817