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