Best JavaScript code snippet using playwright-internal
vimtokenizer.js
Source:vimtokenizer.js  
...62        }63        function whitespace(code) {64            return newline(code) || code == 9 || code == 0x20;65        }66        function badescape(code) {67            return newline(code) || isNaN(code);68        }69        // Note: I'm not yet acting smart enough to actually handle astral characters.70        var maximumallowedcodepoint = 0x10ffff;71        function tokenize(str, options) {72            if (options == undefined)73                options = {74                    transformFunctionWhitespace : false,75                    scientificNotation : false76                };77            var i = -1;78            var tokens = [];79            var state = "data";80            var code;81            var currtoken;82            // Line number information.83            var line = 0;84            var column = 0;85            // The only use of lastLineLength is in reconsume().86            var lastLineLength = 0;87            var incrLineno = function() {88                line += 1;89                lastLineLength = column;90                column = 0;91            };92            var locStart = {93                line : line,94                column : column95            };96            var next = function(num) {97                if (num === undefined)98                    num = 1;99                return str.charCodeAt(i + num);100            };101            var consume = function(num) {102                if (num === undefined)103                    num = 1;104                i += num;105                code = str.charCodeAt(i);106                if (newline(code))107                    incrLineno();108                else109                    column += num;110                //console.log('Consume '+i+' '+String.fromCharCode(code) + ' 0x' + code.toString(16));111                return true;112            };113            var reconsume = function() {114                i -= 1;115                if (newline(code)) {116                    line -= 1;117                    column = lastLineLength;118                } else {119                    column -= 1;120                }121                locStart.line = line;122                locStart.column = column;123                return true;124            };125            var eof = function() {126                return i >= str.length;127            };128            var donothing = function() {129            };130            var emit = function(token) {131                if (token) {132                    token.finish();133                } else {134                    token = currtoken.finish();135                }136                if (options.loc === true) {137                    token.loc = {};138                    token.loc.start = {139                        line : locStart.line,140                        column : locStart.column141                    };142                    locStart = {143                        line : line,144                        column : column145                    };146                    token.loc.end = locStart;147                }148                tokens.push(token);149                //console.log('Emitting ' + token);150                currtoken = undefined;151                return true;152            };153            var create = function(token) {154                currtoken = token;155                return true;156            };157            var parseerror = function() {158                console.log("Parse error at index " + i + ", processing codepoint 0x" + code.toString(16) + " in state " + state + ".");159                return true;160            };161            var catchfire = function(msg) {162                console.log("MAJOR SPEC ERROR: " + msg);163                return true;164            }165            var switchto = function(newstate) {166                state = newstate;167                //console.log('Switching to ' + state);168                return true;169            };170            var consumeEscape = function() {171                // Assume the the current character is the \172                consume();173                if (hexdigit(code)) {174                    // Consume 1-6 hex digits175                    var digits = [];176                    for (var total = 0; total < 6; total++) {177                        if (hexdigit(code)) {178                            digits.push(code);179                            consume();180                        } else {181                            break;182                        }183                    }184                    var value = parseInt(digits.map(String.fromCharCode).join(''), 16);185                    if (value > maximumallowedcodepoint)186                        value = 0xfffd;187                    // If the current char is whitespace, cool, we'll just eat it.188                    // Otherwise, put it back.189                    if (!whitespace(code))190                        reconsume();191                    return value;192                } else {193                    return code;194                }195            };196            for (; ; ) {197                if (i > str.length * 2)198                    return "I'm infinite-looping!";199                consume();200                switch(state) {201                    case "data":202                        if (whitespace(code)) {203                            emit(new WhitespaceToken);204                            while (whitespace(next()))consume();205                        } else if (code == 0x22)206                            switchto("double-quote-string");207                        else if (code == 0x23)208                            switchto("hash");209                        else if (code == 0x27)210                            switchto("single-quote-string");211                        else if (code == 0x28)212                            emit(new OpenParenToken);213                        else if (code == 0x29)214                            emit(new CloseParenToken);215                        else if (code == 0x2b) {216                            if (digit(next()) || (next() == 0x2e && digit(next(2))))217                                switchto("number") && reconsume();218                            else219                                emit(new DelimToken(code));220                        } else if (code == 0x2d) {221                            if (next(1) == 0x2d && next(2) == 0x3e)222                                consume(2) && emit(new CDCToken);223                            else if (digit(next()) || (next(1) == 0x2e && digit(next(2))))224                                switchto("number") && reconsume();225                            else226                                switchto('ident') && reconsume();227                        } else if (code == 0x2e) {228                            if (digit(next()))229                                switchto("number") && reconsume();230                            else231                                emit(new DelimToken(code));232                        } else if (code == 0x2f) {233                            if (next() == 0x2a)234                                consume() && switchto("comment");235                            else236                                emit(new DelimToken(code));237                        } else if (code == 0x3a)238                            emit(new ColonToken);239                        else if (code == 0x3b)240                            emit(new SemicolonToken);241                        else if (code == 0x3c) {242                            if (next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d)243                                consume(3) && emit(new CDOToken);244                            else245                                emit(new DelimToken(code));246                        } else if (code == 0x40)247                            switchto("at-keyword");248                        else if (code == 0x5b)249                            emit(new OpenSquareToken);250                        else if (code == 0x5c) {251                            if (badescape(next()))252                                parseerror() && emit(new DelimToken(code));253                            else254                                switchto('ident') && reconsume();255                        } else if (code == 0x5d)256                            emit(new CloseSquareToken);257                        else if (code == 0x7b)258                            emit(new OpenCurlyToken);259                        else if (code == 0x7d)260                            emit(new CloseCurlyToken);261                        else if (digit(code))262                            switchto("number") && reconsume();263                        else if (code == 0x55 || code == 0x75) {264                            if (next(1) == 0x2b && hexdigit(next(2)))265                                consume() && switchto("unicode-range");266                            else267                                switchto('ident') && reconsume();268                        } else if (namestartchar(code))269                            switchto('ident') && reconsume();270                        else if (eof()) {271                            emit(new EOFToken);272                            return tokens;273                        } else274                            emit(new DelimToken(code));275                        break;276                    case "double-quote-string":277                        if (currtoken == undefined)278                            create(new StringToken);279                        if (code == 0x22)280                            emit() && switchto("data");281                        else if (eof())282                            parseerror() && emit() && switchto("data") && reconsume();283                        else if (newline(code))284                            parseerror() && emit(new BadStringToken) && switchto("data") && reconsume();285                        else if (code == 0x5c) {286                            if (badescape(next()))287                                parseerror() && emit(new BadStringToken) && switchto("data");288                            else if (newline(next()))289                                consume();290                            else291                                currtoken.append(consumeEscape());292                        } else293                            currtoken.append(code);294                        break;295                    case "single-quote-string":296                        if (currtoken == undefined)297                            create(new StringToken);298                        if (code == 0x27)299                            emit() && switchto("data");300                        else if (eof())301                            parseerror() && emit() && switchto("data");302                        else if (newline(code))303                            parseerror() && emit(new BadStringToken) && switchto("data") && reconsume();304                        else if (code == 0x5c) {305                            if (badescape(next()))306                                parseerror() && emit(new BadStringToken) && switchto("data");307                            else if (newline(next()))308                                consume();309                            else310                                currtoken.append(consumeEscape());311                        } else312                            currtoken.append(code);313                        break;314                    case "hash":315                        if (namechar(code))316                            create(new HashToken(code)) && switchto("hash-rest");317                        else if (code == 0x5c) {318                            if (badescape(next()))319                                parseerror() && emit(new DelimToken(0x23)) && switchto("data") && reconsume();320                            else321                                create(new HashToken(consumeEscape())) && switchto('hash-rest');322                        } else323                            emit(new DelimToken(0x23)) && switchto('data') && reconsume();324                        break;325                    case "hash-rest":326                        if (namechar(code))327                            currtoken.append(code);328                        else if (code == 0x5c) {329                            if (badescape(next()))330                                parseerror() && emit() && switchto("data") && reconsume();331                            else332                                currtoken.append(consumeEscape());333                        } else334                            emit() && switchto('data') && reconsume();335                        break;336                    case "comment":337                        if (code == 0x2a) {338                            if (next() == 0x2f)339                                consume() && switchto('data');340                            else341                                donothing();342                        } else if (eof())343                            parseerror() && switchto('data') && reconsume();344                        else345                            donothing();346                        break;347                    case "at-keyword":348                        if (code == 0x2d) {349                            if (namestartchar(next()))350                                create(new AtKeywordToken(0x2d)) && switchto('at-keyword-rest');351                            else if (next(1) == 0x5c && !badescape(next(2)))352                                create(new AtKeywordtoken(0x2d)) && switchto('at-keyword-rest');353                            else354                                parseerror() && emit(new DelimToken(0x40)) && switchto('data') && reconsume();355                        } else if (namestartchar(code))356                            create(new AtKeywordToken(code)) && switchto('at-keyword-rest');357                        else if (code == 0x5c) {358                            if (badescape(next()))359                                parseerror() && emit(new DelimToken(0x23)) && switchto("data") && reconsume();360                            else361                                create(new AtKeywordToken(consumeEscape())) && switchto('at-keyword-rest');362                        } else363                            emit(new DelimToken(0x40)) && switchto('data') && reconsume();364                        break;365                    case "at-keyword-rest":366                        if (namechar(code))367                            currtoken.append(code);368                        else if (code == 0x5c) {369                            if (badescape(next()))370                                parseerror() && emit() && switchto("data") && reconsume();371                            else372                                currtoken.append(consumeEscape());373                        } else374                            emit() && switchto('data') && reconsume();375                        break;376                    case "ident":377                        if (code == 0x2d) {378                            if (namestartchar(next()))379                                create(new IdentifierToken(code)) && switchto('ident-rest');380                            else if (next(1) == 0x5c && !badescape(next(2)))381                                create(new IdentifierToken(code)) && switchto('ident-rest');382                            else383                                emit(new DelimToken(0x2d)) && switchto('data');384                        } else if (namestartchar(code))385                            create(new IdentifierToken(code)) && switchto('ident-rest');386                        else if (code == 0x5c) {387                            if (badescape(next()))388                                parseerror() && switchto("data") && reconsume();389                            else390                                create(new IdentifierToken(consumeEscape())) && switchto('ident-rest');391                        } else392                            catchfire("Hit the generic 'else' clause in ident state.") && switchto('data') && reconsume();393                        break;394                    case "ident-rest":395                        if (namechar(code))396                            currtoken.append(code);397                        else if (code == 0x5c) {398                            if (badescape(next()))399                                parseerror() && emit() && switchto("data") && reconsume();400                            else401                                currtoken.append(consumeEscape());402                        } else if (code == 0x28) {403                            if (currtoken.ASCIImatch('url'))404                                switchto('url');405                            else406                                emit(new FunctionToken(currtoken)) && switchto('data');407                        } else if (whitespace(code) && options.transformFunctionWhitespace)408                            switchto('transform-function-whitespace') && reconsume();409                        else410                            emit() && switchto('data') && reconsume();411                        break;412                    case "transform-function-whitespace":413                        if (whitespace(next()))414                            donothing();415                        else if (code == 0x28)416                            emit(new FunctionToken(currtoken)) && switchto('data');417                        else418                            emit() && switchto('data') && reconsume();419                        break;420                    case "number":421                        create(new NumberToken());422                        if (code == 0x2d) {423                            if (digit(next()))424                                consume() && currtoken.append([0x2d, code]) && switchto('number-rest');425                            else if (next(1) == 0x2e && digit(next(2)))426                                consume(2) && currtoken.append([0x2d, 0x2e, code]) && switchto('number-fraction');427                            else428                                switchto('data') && reconsume();429                        } else if (code == 0x2b) {430                            if (digit(next()))431                                consume() && currtoken.append([0x2b, code]) && switchto('number-rest');432                            else if (next(1) == 0x2e && digit(next(2)))433                                consume(2) && currtoken.append([0x2b, 0x2e, code]) && switchto('number-fraction');434                            else435                                switchto('data') && reconsume();436                        } else if (digit(code))437                            currtoken.append(code) && switchto('number-rest');438                        else if (code == 0x2e) {439                            if (digit(next()))440                                consume() && currtoken.append([0x2e, code]) && switchto('number-fraction');441                            else442                                switchto('data') && reconsume();443                        } else444                            switchto('data') && reconsume();445                        break;446                    case "number-rest":447                        if (digit(code))448                            currtoken.append(code);449                        else if (code == 0x2e) {450                            if (digit(next()))451                                consume() && currtoken.append([0x2e, code]) && switchto('number-fraction');452                            else453                                emit() && switchto('data') && reconsume();454                        } else if (code == 0x25)455                            emit(new PercentageToken(currtoken)) && switchto('data');456                        else if (code == 0x45 || code == 0x65) {457                            if (digit(next()))458                                consume() && currtoken.append([0x25, code]) && switchto('sci-notation');459                            else if ((next(1) == 0x2b || next(1) == 0x2d) && digit(next(2)))460                                currtoken.append([0x25, next(1), next(2)]) && consume(2) && switchto('sci-notation');461                            else462                                create(new DimensionToken(currtoken, code)) && switchto('dimension');463                        } else if (code == 0x2d) {464                            if (namestartchar(next()))465                                consume() && create(new DimensionToken(currtoken, [0x2d, code])) && switchto('dimension');466                            else if (next(1) == 0x5c && badescape(next(2)))467                                parseerror() && emit() && switchto('data') && reconsume();468                            else if (next(1) == 0x5c)469                                consume() && create(new DimensionToken(currtoken, [0x2d, consumeEscape()])) && switchto('dimension');470                            else471                                emit() && switchto('data') && reconsume();472                        } else if (namestartchar(code))473                            create(new DimensionToken(currtoken, code)) && switchto('dimension');474                        else if (code == 0x5c) {475                            if (badescape(next))476                                parseerror() && emit() && switchto('data') && reconsume();477                            else478                                create(new DimensionToken(currtoken, consumeEscape)) && switchto('dimension');479                        } else480                            emit() && switchto('data') && reconsume();481                        break;482                    case "number-fraction":483                        currtoken.type = "number";484                        if (digit(code))485                            currtoken.append(code);486                        else if (code == 0x25)487                            emit(new PercentageToken(currtoken)) && switchto('data');488                        else if (code == 0x45 || code == 0x65) {489                            if (digit(next()))490                                consume() && currtoken.append([0x65, code]) && switchto('sci-notation');491                            else if ((next(1) == 0x2b || next(1) == 0x2d) && digit(next(2)))492                                currtoken.append([0x65, next(1), next(2)]) && consume(2) && switchto('sci-notation');493                            else494                                create(new DimensionToken(currtoken, code)) && switchto('dimension');495                        } else if (code == 0x2d) {496                            if (namestartchar(next()))497                                consume() && create(new DimensionToken(currtoken, [0x2d, code])) && switchto('dimension');498                            else if (next(1) == 0x5c && badescape(next(2)))499                                parseerror() && emit() && switchto('data') && reconsume();500                            else if (next(1) == 0x5c)501                                consume() && create(new DimensionToken(currtoken, [0x2d, consumeEscape()])) && switchto('dimension');502                            else503                                emit() && switchto('data') && reconsume();504                        } else if (namestartchar(code))505                            create(new DimensionToken(currtoken, code)) && switchto('dimension');506                        else if (code == 0x5c) {507                            if (badescape(next))508                                parseerror() && emit() && switchto('data') && reconsume();509                            else510                                create(new DimensionToken(currtoken, consumeEscape())) && switchto('dimension');511                        } else512                            emit() && switchto('data') && reconsume();513                        break;514                    case "dimension":515                        if (namechar(code))516                            currtoken.append(code);517                        else if (code == 0x5c) {518                            if (badescape(next()))519                                parseerror() && emit() && switchto('data') && reconsume();520                            else521                                currtoken.append(consumeEscape());522                        } else523                            emit() && switchto('data') && reconsume();524                        break;525                    case "sci-notation":526                        currtoken.type = "number";527                        if (digit(code))528                            currtoken.append(code);529                        else530                            emit() && switchto('data') && reconsume();531                        break;532                    case "url":533                        if (eof())534                            parseerror() && emit(new BadURLToken) && switchto('data');535                        else if (code == 0x22)536                            switchto('url-double-quote');537                        else if (code == 0x27)538                            switchto('url-single-quote');539                        else if (code == 0x29)540                            emit(new URLToken) && switchto('data');541                        else if (whitespace(code))542                            donothing();543                        else544                            switchto('url-unquoted') && reconsume();545                        break;546                    case "url-double-quote":547                        if (!( currtoken instanceof URLToken))548                            create(new URLToken);549                        if (eof())550                            parseerror() && emit(new BadURLToken) && switchto('data');551                        else if (code == 0x22)552                            switchto('url-end');553                        else if (newline(code))554                            parseerror() && switchto('bad-url');555                        else if (code == 0x5c) {556                            if (newline(next()))557                                consume();558                            else if (badescape(next()))559                                parseerror() && emit(new BadURLToken) && switchto('data') && reconsume();560                            else561                                currtoken.append(consumeEscape());562                        } else563                            currtoken.append(code);564                        break;565                    case "url-single-quote":566                        if (!( currtoken instanceof URLToken))567                            create(new URLToken);568                        if (eof())569                            parseerror() && emit(new BadURLToken) && switchto('data');570                        else if (code == 0x27)571                            switchto('url-end');572                        else if (newline(code))573                            parseerror() && switchto('bad-url');574                        else if (code == 0x5c) {575                            if (newline(next()))576                                consume();577                            else if (badescape(next()))578                                parseerror() && emit(new BadURLToken) && switchto('data') && reconsume();579                            else580                                currtoken.append(consumeEscape());581                        } else582                            currtoken.append(code);583                        break;584                    case "url-end":585                        if (eof())586                            parseerror() && emit(new BadURLToken) && switchto('data');587                        else if (whitespace(code))588                            donothing();589                        else if (code == 0x29)590                            emit() && switchto('data');591                        else592                            parseerror() && switchto('bad-url') && reconsume();593                        break;594                    case "url-unquoted":595                        if (!( currtoken instanceof URLToken))596                            create(new URLToken);597                        if (eof())598                            parseerror() && emit(new BadURLToken) && switchto('data');599                        else if (whitespace(code))600                            switchto('url-end');601                        else if (code == 0x29)602                            emit() && switchto('data');603                        else if (code == 0x22 || code == 0x27 || code == 0x28 || nonprintable(code))604                            parseerror() && switchto('bad-url');605                        else if (code == 0x5c) {606                            if (badescape(next()))607                                parseerror() && switchto('bad-url');608                            else609                                currtoken.append(consumeEscape());610                        } else611                            currtoken.append(code);612                        break;613                    case "bad-url":614                        if (eof())615                            parseerror() && emit(new BadURLToken) && switchto('data');616                        else if (code == 0x29)617                            emit(new BadURLToken) && switchto('data');618                        else if (code == 0x5c) {619                            if (badescape(next()))620                                donothing();621                            else622                                consumeEscape();623                        } else624                            donothing();625                        break;626                    case "unicode-range":627                        // We already know that the current code is a hexdigit.628                        var start = [code], end = [code];629                        for (var total = 1; total < 6; total++) {630                            if (hexdigit(next())) {631                                consume();632                                start.push(code);633                                end.push(code);...tokenizer.js
Source:tokenizer.js  
...21function namechar(code) { return namestartchar(code) || digit(code) || code == 0x2d; }22function nonprintable(code) { return between(code, 0,8) || between(code, 0xe,0x1f) || between(code, 0x7f,0x9f); }23function newline(code) { return code == 0xa || code == 0xc; }24function whitespace(code) { return newline(code) || code == 9 || code == 0x20; }25function badescape(code) { return newline(code) || isNaN(code); }2627// Note: I'm not yet acting smart enough to actually handle astral characters.28var maximumallowedcodepoint = 0x10ffff;2930function tokenize(str, options) {31	if(options == undefined) options = {transformFunctionWhitespace:false, scientificNotation:false};32	var i = -1;33	var tokens = [];34	var state = "data";35	var code;36	var currtoken;3738	// Line number information.39	var line = 0;40	var column = 0;41	// The only use of lastLineLength is in reconsume().42	var lastLineLength = 0;43	var incrLineno = function() {44		line += 1;45		lastLineLength = column;46		column = 0;47	};48	var locStart = {line:line, column:column};4950	var next = function(num) { if(num === undefined) num = 1; return str.charCodeAt(i+num); };51	var consume = function(num) {52		if(num === undefined)53			num = 1;54		i += num;55		code = str.charCodeAt(i);56		if (newline(code)) incrLineno();57		else column += num;58		//console.log('Consume '+i+' '+String.fromCharCode(code) + ' 0x' + code.toString(16));59		return true;60	};61	var reconsume = function() {62		i -= 1;63		if (newline(code)) {64			line -= 1;65			column = lastLineLength;66		} else {67			column -= 1;68		}69		locStart.line = line;70		locStart.column = column;71		return true;72	};73	var eof = function() { return i >= str.length; };74	var donothing = function() {};75	var emit = function(token) {76		if(token) {77			token.finish();78		} else {79			token = currtoken.finish();80		}81		if (options.loc === true) {82			token.loc = {};83			token.loc.start = {line:locStart.line, column:locStart.column, idx: locStart.idx};84			locStart = {line: line, column: column, idx: i};85			token.loc.end = locStart;86		}87		tokens.push(token);88		//console.log('Emitting ' + token);89		currtoken = undefined;90		return true;91	};92	var create = function(token) { currtoken = token; return true; };93	// mozmod: disable console.log94	var parseerror = function() { /* console.log("Parse error at index " + i + ", processing codepoint 0x" + code.toString(16) + " in state " + state + "."); */ return true; };95	// mozmod: disable console.log96	var catchfire = function(msg) { /* console.log("MAJOR SPEC ERROR: " + msg); */ return true;}97	var switchto = function(newstate) {98		state = newstate;99		//console.log('Switching to ' + state);100		return true;101	};102	var consumeEscape = function() {103		// Assume the the current character is the \104		consume();105		if(hexdigit(code)) {106			// Consume 1-6 hex digits107			var digits = [];108			for(var total = 0; total < 6; total++) {109				if(hexdigit(code)) {110					digits.push(code);111					consume();112				} else { break; }113			}114			var value = parseInt(digits.map(String.fromCharCode).join(''), 16);115			if( value > maximumallowedcodepoint ) value = 0xfffd;116			// If the current char is whitespace, cool, we'll just eat it.117			// Otherwise, put it back.118			if(!whitespace(code)) reconsume();119			return value;120		} else {121			return code;122		}123	};124125	for(;;) {126		if(i > str.length*2) return "I'm infinite-looping!";127		consume();128		switch(state) {129		case "data":130			if(whitespace(code)) {131				emit(new WhitespaceToken);132				while(whitespace(next())) consume();133			}134			else if(code == 0x22) switchto("double-quote-string");135			else if(code == 0x23) switchto("hash");136			else if(code == 0x27) switchto("single-quote-string");137			else if(code == 0x28) emit(new OpenParenToken);138			else if(code == 0x29) emit(new CloseParenToken);139			else if(code == 0x2b) {140				if(digit(next()) || (next() == 0x2e && digit(next(2)))) switchto("number") && reconsume();141				else emit(new DelimToken(code));142			}143			else if(code == 0x2d) {144				if(next(1) == 0x2d && next(2) == 0x3e) consume(2) && emit(new CDCToken);145				else if(digit(next()) || (next(1) == 0x2e && digit(next(2)))) switchto("number") && reconsume();146				else switchto('ident') && reconsume();147			}148			else if(code == 0x2e) {149				if(digit(next())) switchto("number") && reconsume();150				else emit(new DelimToken(code));151			}152			else if(code == 0x2f) {153				if(next() == 0x2a) consume() && switchto("comment");154				else emit(new DelimToken(code));155			}156			else if(code == 0x3a) emit(new ColonToken);157			else if(code == 0x3b) emit(new SemicolonToken);158			else if(code == 0x3c) {159				if(next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d) consume(3) && emit(new CDOToken);160				else emit(new DelimToken(code));161			}162			else if(code == 0x40) switchto("at-keyword");163			else if(code == 0x5b) emit(new OpenSquareToken);164			else if(code == 0x5c) {165				if(badescape(next())) parseerror() && emit(new DelimToken(code));166				else switchto('ident') && reconsume();167			}168			else if(code == 0x5d) emit(new CloseSquareToken);169			else if(code == 0x7b) emit(new OpenCurlyToken);170			else if(code == 0x7d) emit(new CloseCurlyToken);171			else if(digit(code)) switchto("number") && reconsume();172			else if(code == 0x55 || code == 0x75) {173				if(next(1) == 0x2b && hexdigit(next(2))) consume() && switchto("unicode-range");174				else switchto('ident') && reconsume();175			}176			else if(namestartchar(code)) switchto('ident') && reconsume();177			else if(eof()) { emit(new EOFToken); return tokens; }178			else emit(new DelimToken(code));179			break;180181		case "double-quote-string":182			if(currtoken == undefined) create(new StringToken);183184			if(code == 0x22) emit() && switchto("data");185			else if(eof()) parseerror() && emit() && switchto("data") && reconsume();186			else if(newline(code)) parseerror() && emit(new BadStringToken) && switchto("data") && reconsume();187			else if(code == 0x5c) {188				if(badescape(next())) parseerror() && emit(new BadStringToken) && switchto("data");189				else if(newline(next())) consume();190				else currtoken.append(consumeEscape());191			}192			else currtoken.append(code);193			break;194195		case "single-quote-string":196			if(currtoken == undefined) create(new StringToken);197198			if(code == 0x27) emit() && switchto("data");199			else if(eof()) parseerror() && emit() && switchto("data");200			else if(newline(code)) parseerror() && emit(new BadStringToken) && switchto("data") && reconsume();201			else if(code == 0x5c) {202				if(badescape(next())) parseerror() && emit(new BadStringToken) && switchto("data");203				else if(newline(next())) consume();204				else currtoken.append(consumeEscape());205			}206			else currtoken.append(code);207			break;208209		case "hash":210			if(namechar(code)) create(new HashToken(code)) && switchto("hash-rest");211			else if(code == 0x5c) {212				if(badescape(next())) parseerror() && emit(new DelimToken(0x23)) && switchto("data") && reconsume();213				else create(new HashToken(consumeEscape())) && switchto('hash-rest');214			}215			else emit(new DelimToken(0x23)) && switchto('data') && reconsume();216			break;217218		case "hash-rest":219			if(namechar(code)) currtoken.append(code);220			else if(code == 0x5c) {221				if(badescape(next())) parseerror() && emit() && switchto("data") && reconsume();222				else currtoken.append(consumeEscape());223			}224			else emit() && switchto('data') && reconsume();225			break;226227		case "comment":228			if(code == 0x2a) {229				if(next() == 0x2f) consume() && switchto('data');230				else donothing();231			}232			else if(eof()) parseerror() && switchto('data') && reconsume();233			else donothing();234			break;235236		case "at-keyword":237			if(code == 0x2d) {238				if(namestartchar(next())) create(new AtKeywordToken(0x2d)) && switchto('at-keyword-rest');239				else if(next(1) == 0x5c && !badescape(next(2))) create(new AtKeywordtoken(0x2d)) && switchto('at-keyword-rest');240				else parseerror() && emit(new DelimToken(0x40)) && switchto('data') && reconsume();241			}242			else if(namestartchar(code)) create(new AtKeywordToken(code)) && switchto('at-keyword-rest');243			else if(code == 0x5c) {244				if(badescape(next())) parseerror() && emit(new DelimToken(0x23)) && switchto("data") && reconsume();245				else create(new AtKeywordToken(consumeEscape())) && switchto('at-keyword-rest');246			}247			else emit(new DelimToken(0x40)) && switchto('data') && reconsume();248			break;249250		case "at-keyword-rest":251			if(namechar(code)) currtoken.append(code);252			else if(code == 0x5c) {253				if(badescape(next())) parseerror() && emit() && switchto("data") && reconsume();254				else currtoken.append(consumeEscape());255			}256			else emit() && switchto('data') && reconsume();257			break;258259		case "ident":260			if(code == 0x2d) {261				if(namestartchar(next())) create(new IdentifierToken(code)) && switchto('ident-rest');262				else if(next(1) == 0x5c && !badescape(next(2))) create(new IdentifierToken(code)) && switchto('ident-rest');263				else emit(new DelimToken(0x2d)) && switchto('data');264			}265			else if(namestartchar(code)) create(new IdentifierToken(code)) && switchto('ident-rest');266			else if(code == 0x5c) {267				if(badescape(next())) parseerror() && switchto("data") && reconsume();268				else create(new IdentifierToken(consumeEscape())) && switchto('ident-rest');269			}270			else catchfire("Hit the generic 'else' clause in ident state.") && switchto('data') && reconsume();271			break;272273		case "ident-rest":274			if(namechar(code)) currtoken.append(code);275			else if(code == 0x5c) {276				if(badescape(next())) parseerror() && emit() && switchto("data") && reconsume();277				else currtoken.append(consumeEscape());278			}279			else if(code == 0x28) {280				if(currtoken.ASCIImatch('url')) switchto('url');281				else emit(new FunctionToken(currtoken)) && switchto('data');282			}283			else if(whitespace(code) && options.transformFunctionWhitespace) switchto('transform-function-whitespace') && reconsume();284			else emit() && switchto('data') && reconsume();285			break;286287		case "transform-function-whitespace":288			if(whitespace(next())) donothing();289			else if(code == 0x28) emit(new FunctionToken(currtoken)) && switchto('data');290			else emit() && switchto('data') && reconsume();291			break;292293		case "number":294			create(new NumberToken());295296			if(code == 0x2d) {297				if(digit(next())) consume() && currtoken.append([0x2d,code]) && switchto('number-rest');298				else if(next(1) == 0x2e && digit(next(2))) consume(2) && currtoken.append([0x2d,0x2e,code]) && switchto('number-fraction');299				else switchto('data') && reconsume();300			}301			else if(code == 0x2b) {302				if(digit(next())) consume() && currtoken.append([0x2b,code]) && switchto('number-rest');303				else if(next(1) == 0x2e && digit(next(2))) consume(2) && currtoken.append([0x2b,0x2e,code]) && switchto('number-fraction');304				else switchto('data') && reconsume();305			}306			else if(digit(code)) currtoken.append(code) && switchto('number-rest');307			else if(code == 0x2e) {308				if(digit(next())) consume() && currtoken.append([0x2e,code]) && switchto('number-fraction');309				else switchto('data') && reconsume();310			}311			else switchto('data') && reconsume();312			break;313314		case "number-rest":315			if(digit(code)) currtoken.append(code);316			else if(code == 0x2e) {317				if(digit(next())) consume() && currtoken.append([0x2e,code]) && switchto('number-fraction');318				else emit() && switchto('data') && reconsume();319			}320			else if(code == 0x25) emit(new PercentageToken(currtoken)) && switchto('data');321			else if(code == 0x45 || code == 0x65) {322				if(digit(next())) consume() && currtoken.append([0x25,code]) && switchto('sci-notation');323				else if((next(1) == 0x2b || next(1) == 0x2d) && digit(next(2))) currtoken.append([0x25,next(1),next(2)]) && consume(2) && switchto('sci-notation');324				else create(new DimensionToken(currtoken,code)) && switchto('dimension');325			}326			else if(code == 0x2d) {327				if(namestartchar(next())) consume() && create(new DimensionToken(currtoken,[0x2d,code])) && switchto('dimension');328				else if(next(1) == 0x5c && badescape(next(2))) parseerror() && emit() && switchto('data') && reconsume();329				else if(next(1) == 0x5c) consume() && create(new DimensionToken(currtoken, [0x2d,consumeEscape()])) && switchto('dimension');330				else emit() && switchto('data') && reconsume();331			}332			else if(namestartchar(code)) create(new DimensionToken(currtoken, code)) && switchto('dimension');333			else if(code == 0x5c) {334				if(badescape(next)) parseerror() && emit() && switchto('data') && reconsume();335				else create(new DimensionToken(currtoken,consumeEscape)) && switchto('dimension');336			}337			else emit() && switchto('data') && reconsume();338			break;339340		case "number-fraction":341			currtoken.type = "number";342343			if(digit(code)) currtoken.append(code);344			else if(code == 0x25) emit(new PercentageToken(currtoken)) && switchto('data');345			else if(code == 0x45 || code == 0x65) {346				if(digit(next())) consume() && currtoken.append([0x65,code]) && switchto('sci-notation');347				else if((next(1) == 0x2b || next(1) == 0x2d) && digit(next(2))) currtoken.append([0x65,next(1),next(2)]) && consume(2) && switchto('sci-notation');348				else create(new DimensionToken(currtoken,code)) && switchto('dimension');349			}350			else if(code == 0x2d) {351				if(namestartchar(next())) consume() && create(new DimensionToken(currtoken,[0x2d,code])) && switchto('dimension');352				else if(next(1) == 0x5c && badescape(next(2))) parseerror() && emit() && switchto('data') && reconsume();353				else if(next(1) == 0x5c) consume() && create(new DimensionToken(currtoken, [0x2d,consumeEscape()])) && switchto('dimension');354				else emit() && switchto('data') && reconsume();355			}356			else if(namestartchar(code)) create(new DimensionToken(currtoken, code)) && switchto('dimension');357			else if(code == 0x5c) {358				if(badescape(next)) parseerror() && emit() && switchto('data') && reconsume();359				else create(new DimensionToken(currtoken,consumeEscape())) && switchto('dimension');360			}361			else emit() && switchto('data') && reconsume();362			break;363364		case "dimension":365			if(namechar(code)) currtoken.append(code);366			else if(code == 0x5c) {367				if(badescape(next())) parseerror() && emit() && switchto('data') && reconsume();368				else currtoken.append(consumeEscape());369			}370			else emit() && switchto('data') && reconsume();371			break;372373		case "sci-notation":374			currtoken.type = "number";375376			if(digit(code)) currtoken.append(code);377			else emit() && switchto('data') && reconsume();378			break;379380		case "url":381			if(eof()) parseerror() && emit(new BadURLToken) && switchto('data');382			else if(code == 0x22) switchto('url-double-quote');383			else if(code == 0x27) switchto('url-single-quote');384			else if(code == 0x29) emit(new URLToken) && switchto('data');385			else if(whitespace(code)) donothing();386			else switchto('url-unquoted') && reconsume();387			break;388389		case "url-double-quote":390			if(! (currtoken instanceof URLToken)) create(new URLToken);391392			if(eof()) parseerror() && emit(new BadURLToken) && switchto('data');393			else if(code == 0x22) switchto('url-end');394			else if(newline(code)) parseerror() && switchto('bad-url');395			else if(code == 0x5c) {396				if(newline(next())) consume();397				else if(badescape(next())) parseerror() && emit(new BadURLToken) && switchto('data') && reconsume();398				else currtoken.append(consumeEscape());399			}400			else currtoken.append(code);401			break;402403		case "url-single-quote":404			if(! (currtoken instanceof URLToken)) create(new URLToken);405406			if(eof()) parseerror() && emit(new BadURLToken) && switchto('data');407			else if(code == 0x27) switchto('url-end');408			else if(newline(code)) parseerror() && switchto('bad-url');409			else if(code == 0x5c) {410				if(newline(next())) consume();411				else if(badescape(next())) parseerror() && emit(new BadURLToken) && switchto('data') && reconsume();412				else currtoken.append(consumeEscape());413			}414			else currtoken.append(code);415			break;416417		case "url-end":418			if(eof()) parseerror() && emit(new BadURLToken) && switchto('data');419			else if(whitespace(code)) donothing();420			else if(code == 0x29) emit() && switchto('data');421			else parseerror() && switchto('bad-url') && reconsume();422			break;423424		case "url-unquoted":425			if(! (currtoken instanceof URLToken)) create(new URLToken);426427			if(eof()) parseerror() && emit(new BadURLToken) && switchto('data');428			else if(whitespace(code)) switchto('url-end');429			else if(code == 0x29) emit() && switchto('data');430			else if(code == 0x22 || code == 0x27 || code == 0x28 || nonprintable(code)) parseerror() && switchto('bad-url');431			else if(code == 0x5c) {432				if(badescape(next())) parseerror() && switchto('bad-url');433				else currtoken.append(consumeEscape());434			}435			else currtoken.append(code);436			break;437438		case "bad-url":439			if(eof()) parseerror() && emit(new BadURLToken) && switchto('data');440			else if(code == 0x29) emit(new BadURLToken) && switchto('data');441			else if(code == 0x5c) {442				if(badescape(next())) donothing();443				else consumeEscape();444			}445			else donothing();446			break;447448		case "unicode-range":449			// We already know that the current code is a hexdigit.450451			var start = [code], end = [code];452453			for(var total = 1; total < 6; total++) {454				if(hexdigit(next())) {455					consume();456					start.push(code);
...css-tokenizer.js
Source:css-tokenizer.js  
...34}35function whitespace(e) {36    return newline(e) || 9 == e || 32 == e;37}38function badescape(e) {39    return newline(e) || isNaN(e);40}41var maximumallowedcodepoint = 1114111;42export default function cssTokenizer(e, n) {43    null == n && (n = {44        transformFunctionWhitespace: !1,45        scientificNotation: !146    });47    for (var t, o, r = -1, i = [], a = 'data', s = 0, p = 0, u = 0, d = {48        line: s,49        column: p50    }, next = function(n) {51        return void 0 === n && (n = 1), e.charCodeAt(r + n);52    }, consume = function(n) {53        return void 0 === n && (n = 1), r += n, newline(t = e.charCodeAt(r)) ? (s += 1, 54        u = p, p = 0) : p += n, !0;55    }, reconsume = function() {56        return r -= 1, newline(t) ? (s -= 1, p = u) : p -= 1, d.line = s, d.column = p, 57        !0;58    }, eof = function() {59        return r >= e.length;60    }, emit = function(e) {61        return e ? e.finish() : e = o.finish(), !0 === n.loc && (e.loc = {}, e.loc.start = {62            line: d.line,63            column: d.column64        }, d = {65            line: s,66            column: p67        }, e.loc.end = d), i.push(e), o = void 0, !0;68    }, create = function(e) {69        return o = e, !0;70    }, parseerror = function() {71        return console.log('Parse error at index ' + r + ', processing codepoint 0x' + t.toString(16) + ' in state ' + a + '.'), 72        !0;73    }, catchfire = function(e) {74        return console.log('MAJOR SPEC ERROR: ' + e), !0;75    }, switchto = function(e) {76        return a = e, !0;77    }, consumeEscape = function() {78        if (consume(), hexdigit(t)) {79            for (var e = [], n = 0; n < 6 && hexdigit(t); n++) e.push(t), consume();80            var o = parseInt(e.map(String.fromCharCode).join(''), 16);81            return o > maximumallowedcodepoint && (o = 65533), whitespace(t) || reconsume(), 82            o;83        }84        return t;85    }; ;) {86        if (r > 2 * e.length) return 'I\'m infinite-looping!';87        switch (consume(), a) {88          case 'data':89            if (whitespace(t)) for (emit(new WhitespaceToken); whitespace(next()); ) consume(); else if (34 == t) switchto('double-quote-string'); else if (35 == t) switchto('hash'); else if (39 == t) switchto('single-quote-string'); else if (40 == t) emit(new OpenParenToken); else if (41 == t) emit(new CloseParenToken); else if (43 == t) digit(next()) || 46 == next() && digit(next(2)) ? switchto('number') && reconsume() : emit(new DelimToken(t)); else if (45 == t) 45 == next(1) && 62 == next(2) ? consume(2) && emit(new CDCToken) : digit(next()) || 46 == next(1) && digit(next(2)) ? switchto('number') && reconsume() : switchto('ident') && reconsume(); else if (46 == t) digit(next()) ? switchto('number') && reconsume() : emit(new DelimToken(t)); else if (47 == t) 42 == next() ? consume() && switchto('comment') : emit(new DelimToken(t)); else if (58 == t) emit(new ColonToken); else if (59 == t) emit(new SemicolonToken); else if (60 == t) 33 == next(1) && 45 == next(2) && 45 == next(3) ? consume(3) && emit(new CDOToken) : emit(new DelimToken(t)); else if (64 == t) switchto('at-keyword'); else if (91 == t) emit(new OpenSquareToken); else if (92 == t) badescape(next()) ? parseerror() && emit(new DelimToken(t)) : switchto('ident') && reconsume(); else if (93 == t) emit(new CloseSquareToken); else if (123 == t) emit(new OpenCurlyToken); else if (125 == t) emit(new CloseCurlyToken); else if (digit(t)) switchto('number') && reconsume(); else if (85 == t || 117 == t) 43 == next(1) && hexdigit(next(2)) ? consume() && switchto('unicode-range') : switchto('ident') && reconsume(); else if (namestartchar(t)) switchto('ident') && reconsume(); else {90                if (eof()) return emit(new EOFToken), i;91                emit(new DelimToken(t));92            }93            break;94          case 'double-quote-string':95            null == o && create(new StringToken), 34 == t ? emit() && switchto('data') : eof() ? parseerror() && emit() && switchto('data') && reconsume() : newline(t) ? parseerror() && emit(new BadStringToken) && switchto('data') && reconsume() : 92 == t ? badescape(next()) ? parseerror() && emit(new BadStringToken) && switchto('data') : newline(next()) ? consume() : o.append(consumeEscape()) : o.append(t);96            break;97          case 'single-quote-string':98            null == o && create(new StringToken), 39 == t ? emit() && switchto('data') : eof() ? parseerror() && emit() && switchto('data') : newline(t) ? parseerror() && emit(new BadStringToken) && switchto('data') && reconsume() : 92 == t ? badescape(next()) ? parseerror() && emit(new BadStringToken) && switchto('data') : newline(next()) ? consume() : o.append(consumeEscape()) : o.append(t);99            break;100          case 'hash':101            namechar(t) ? create(new HashToken(t)) && switchto('hash-rest') : 92 == t ? badescape(next()) ? parseerror() && emit(new DelimToken(35)) && switchto('data') && reconsume() : create(new HashToken(consumeEscape())) && switchto('hash-rest') : emit(new DelimToken(35)) && switchto('data') && reconsume();102            break;103          case 'hash-rest':104            namechar(t) ? o.append(t) : 92 == t ? badescape(next()) ? parseerror() && emit() && switchto('data') && reconsume() : o.append(consumeEscape()) : emit() && switchto('data') && reconsume();105            break;106          case 'comment':107            42 == t ? 47 == next() && consume() && switchto('data') : eof() && parseerror() && switchto('data') && reconsume();108            break;109          case 'at-keyword':110            45 == t ? namestartchar(next()) ? create(new AtKeywordToken(45)) && switchto('at-keyword-rest') : 92 != next(1) || badescape(next(2)) ? parseerror() && emit(new DelimToken(64)) && switchto('data') && reconsume() : create(new AtKeywordtoken(45)) && switchto('at-keyword-rest') : namestartchar(t) ? create(new AtKeywordToken(t)) && switchto('at-keyword-rest') : 92 == t ? badescape(next()) ? parseerror() && emit(new DelimToken(35)) && switchto('data') && reconsume() : create(new AtKeywordToken(consumeEscape())) && switchto('at-keyword-rest') : emit(new DelimToken(64)) && switchto('data') && reconsume();111            break;112          case 'at-keyword-rest':113            namechar(t) ? o.append(t) : 92 == t ? badescape(next()) ? parseerror() && emit() && switchto('data') && reconsume() : o.append(consumeEscape()) : emit() && switchto('data') && reconsume();114            break;115          case 'ident':116            45 == t ? namestartchar(next()) ? create(new IdentifierToken(t)) && switchto('ident-rest') : 92 != next(1) || badescape(next(2)) ? emit(new DelimToken(45)) && switchto('data') : create(new IdentifierToken(t)) && switchto('ident-rest') : namestartchar(t) ? create(new IdentifierToken(t)) && switchto('ident-rest') : 92 == t ? badescape(next()) ? parseerror() && switchto('data') && reconsume() : create(new IdentifierToken(consumeEscape())) && switchto('ident-rest') : catchfire('Hit the generic \'else\' clause in ident state.') && switchto('data') && reconsume();117            break;118          case 'ident-rest':119            namechar(t) ? o.append(t) : 92 == t ? badescape(next()) ? parseerror() && emit() && switchto('data') && reconsume() : o.append(consumeEscape()) : 40 == t ? o.ASCIImatch('url') ? switchto('url') : emit(new FunctionToken(o)) && switchto('data') : whitespace(t) && n.transformFunctionWhitespace ? switchto('transform-function-whitespace') && reconsume() : emit() && switchto('data') && reconsume();120            break;121          case 'transform-function-whitespace':122            whitespace(next()) || (40 == t ? emit(new FunctionToken(o)) && switchto('data') : emit() && switchto('data') && reconsume());123            break;124          case 'number':125            create(new NumberToken), 45 == t ? digit(next()) ? consume() && o.append([ 45, t ]) && switchto('number-rest') : 46 == next(1) && digit(next(2)) ? consume(2) && o.append([ 45, 46, t ]) && switchto('number-fraction') : switchto('data') && reconsume() : 43 == t ? digit(next()) ? consume() && o.append([ 43, t ]) && switchto('number-rest') : 46 == next(1) && digit(next(2)) ? consume(2) && o.append([ 43, 46, t ]) && switchto('number-fraction') : switchto('data') && reconsume() : digit(t) ? o.append(t) && switchto('number-rest') : 46 == t && digit(next()) ? consume() && o.append([ 46, t ]) && switchto('number-fraction') : switchto('data') && reconsume();126            break;127          case 'number-rest':128            digit(t) ? o.append(t) : 46 == t ? digit(next()) ? consume() && o.append([ 46, t ]) && switchto('number-fraction') : emit() && switchto('data') && reconsume() : 37 == t ? emit(new PercentageToken(o)) && switchto('data') : 69 == t || 101 == t ? digit(next()) ? consume() && o.append([ 37, t ]) && switchto('sci-notation') : 43 != next(1) && 45 != next(1) || !digit(next(2)) ? create(new DimensionToken(o, t)) && switchto('dimension') : o.append([ 37, next(1), next(2) ]) && consume(2) && switchto('sci-notation') : 45 == t ? namestartchar(next()) ? consume() && create(new DimensionToken(o, [ 45, t ])) && switchto('dimension') : 92 == next(1) && badescape(next(2)) ? parseerror() && emit() && switchto('data') && reconsume() : 92 == next(1) ? consume() && create(new DimensionToken(o, [ 45, consumeEscape() ])) && switchto('dimension') : emit() && switchto('data') && reconsume() : namestartchar(t) ? create(new DimensionToken(o, t)) && switchto('dimension') : 92 == t ? badescape(next) ? parseerror() && emit() && switchto('data') && reconsume() : create(new DimensionToken(o, consumeEscape)) && switchto('dimension') : emit() && switchto('data') && reconsume();129            break;130          case 'number-fraction':131            o.type = 'number', digit(t) ? o.append(t) : 37 == t ? emit(new PercentageToken(o)) && switchto('data') : 69 == t || 101 == t ? digit(next()) ? consume() && o.append([ 101, t ]) && switchto('sci-notation') : 43 != next(1) && 45 != next(1) || !digit(next(2)) ? create(new DimensionToken(o, t)) && switchto('dimension') : o.append([ 101, next(1), next(2) ]) && consume(2) && switchto('sci-notation') : 45 == t ? namestartchar(next()) ? consume() && create(new DimensionToken(o, [ 45, t ])) && switchto('dimension') : 92 == next(1) && badescape(next(2)) ? parseerror() && emit() && switchto('data') && reconsume() : 92 == next(1) ? consume() && create(new DimensionToken(o, [ 45, consumeEscape() ])) && switchto('dimension') : emit() && switchto('data') && reconsume() : namestartchar(t) ? create(new DimensionToken(o, t)) && switchto('dimension') : 92 == t ? badescape(next) ? parseerror() && emit() && switchto('data') && reconsume() : create(new DimensionToken(o, consumeEscape())) && switchto('dimension') : emit() && switchto('data') && reconsume();132            break;133          case 'dimension':134            namechar(t) ? o.append(t) : 92 == t ? badescape(next()) ? parseerror() && emit() && switchto('data') && reconsume() : o.append(consumeEscape()) : emit() && switchto('data') && reconsume();135            break;136          case 'sci-notation':137            o.type = 'number', digit(t) ? o.append(t) : emit() && switchto('data') && reconsume();138            break;139          case 'url':140            eof() ? parseerror() && emit(new BadURLToken) && switchto('data') : 34 == t ? switchto('url-double-quote') : 39 == t ? switchto('url-single-quote') : 41 == t ? emit(new URLToken) && switchto('data') : whitespace(t) || switchto('url-unquoted') && reconsume();141            break;142          case 'url-double-quote':143            o instanceof URLToken || create(new URLToken), eof() ? parseerror() && emit(new BadURLToken) && switchto('data') : 34 == t ? switchto('url-end') : newline(t) ? parseerror() && switchto('bad-url') : 92 == t ? newline(next()) ? consume() : badescape(next()) ? parseerror() && emit(new BadURLToken) && switchto('data') && reconsume() : o.append(consumeEscape()) : o.append(t);144            break;145          case 'url-single-quote':146            o instanceof URLToken || create(new URLToken), eof() ? parseerror() && emit(new BadURLToken) && switchto('data') : 39 == t ? switchto('url-end') : newline(t) ? parseerror() && switchto('bad-url') : 92 == t ? newline(next()) ? consume() : badescape(next()) ? parseerror() && emit(new BadURLToken) && switchto('data') && reconsume() : o.append(consumeEscape()) : o.append(t);147            break;148          case 'url-end':149            eof() ? parseerror() && emit(new BadURLToken) && switchto('data') : whitespace(t) || (41 == t ? emit() && switchto('data') : parseerror() && switchto('bad-url') && reconsume());150            break;151          case 'url-unquoted':152            o instanceof URLToken || create(new URLToken), eof() ? parseerror() && emit(new BadURLToken) && switchto('data') : whitespace(t) ? switchto('url-end') : 41 == t ? emit() && switchto('data') : 34 == t || 39 == t || 40 == t || nonprintable(t) ? parseerror() && switchto('bad-url') : 92 == t ? badescape(next()) ? parseerror() && switchto('bad-url') : o.append(consumeEscape()) : o.append(t);153            break;154          case 'bad-url':155            eof() ? parseerror() && emit(new BadURLToken) && switchto('data') : 41 == t ? emit(new BadURLToken) && switchto('data') : 92 == t && (badescape(next()) || consumeEscape());156            break;157          case 'unicode-range':158            for (var k = [ t ], c = [ t ], T = 1; T < 6 && hexdigit(next()); T++) consume(), 159            k.push(t), c.push(t);160            if (63 == next()) {161                for (;T < 6 && 63 == next(); T++) consume(), k.push('0'.charCodeAt(0)), c.push('f'.charCodeAt(0));162                emit(new UnicodeRangeToken(k, c)) && switchto('data');163            } else if (45 == next(1) && hexdigit(next(2))) {164                consume(), consume(), c = [ t ];165                for (T = 1; T < 6 && hexdigit(next()); T++) consume(), c.push(t);166                emit(new UnicodeRangeToken(k, c)) && switchto('data');167            } else emit(new UnicodeRangeToken(k)) && switchto('data');168            break;169          default:...Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  await page.screenshot({ path: 'google.png' });7  await browser.close();8})();Using AI Code Generation
1const { test, expect } = require('@playwright/test');2test('test', async ({ page }) => {3  const title = page.locator('.navbar__inner .navbar__title');4  expect(await title.textContent()).toBe('Playwright');5});6- Use the page.waitForNavigation()Using AI Code Generation
1const { chromium } = require('playwright');2const { badescape } = require('playwright/lib/internal/utils');3(async () => {4  const browser = await chromium.launch();5  const page = await browser.newPage();6  await browser.close();7})();Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const page = await browser.newPage();5  await page.goto(url);6  const title = await page.title();7  console.log(title);8  await browser.close();9})();Using AI Code Generation
1const { test, expect } = require('@playwright/test');2const { badescape } = require('@playwright/test/internal');3test('my test', async ({ page }) => {4  await page.goto(url);5  expect(await page.textContent('h1')).toBe('Hello John!');6});7const { test, expect } = require('@playwright/test');8const { badescape } = require('@playwright/test/internal');9test('my test', async ({ page }) => {10  await page.goto(url);11  expect(await page.textContent('h1')).toBe('Hello John!');12});13const { test, expect } = require('@playwright/test');14const { badescape } = require('@playwright/test/internal');15test('my test', async ({ page }) => {16  await page.goto(url);17  expect(await page.textContent('h1')).toBe('Hello John!');18});19const { test, expect } = require('@playwright/test');20const { badescape } = require('@playwright/test/internal');21test('my test', async ({ page }) => {22  await page.goto(url);23  expect(await page.textContent('h1')).toBe('Hello John!');24});25const { test, expect } = require('@playwright/test');26const { badescape } = require('@playwright/test/internal');27test('my test', async ({ page }) => {28  await page.goto(url);29  expect(await page.textContent('h1')).toBe('Hello John!');30});31const { test, expect } = require('@playwright/test');Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  await page.fill('[name="q"]', 'playwright');7  await page.keyboard.press('Enter');8  await page.waitForNavigation();9  await page.screenshot({ path: `example.png` });10  await browser.close();11})();Using AI Code Generation
1const {badescape} = require('playwright/lib/utils/utils');2const escaped = badescape(url);3console.log(escaped);4const {badescape} = require('playwright');5const escaped = badescape(url);6console.log(escaped);7const {badescape} = require('playwright/lib/utils/utils');8const escaped = badescape(url);9console.log(escaped);10const {badescape} = require('playwright');11const escaped = badescape(url);12console.log(escaped);13const {badescape} = require('playwright/lib/utils/utils');14const escaped = badescape(url);15console.log(escaped);16const {badescape} = require('playwright');17const escaped = badescape(url);18console.log(escaped);19const {badescape} = require('playwright/lib/utils/utils');20const escaped = badescape(url);21console.log(escaped);LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
