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