unnestcss
Version:
A library for un-nesting CSS
1 lines • 8.31 kB
Source Map (JSON)
{"version":3,"file":"tokenizer.cjs","sources":["../../../src/lib/stylis/tokenizer.ts"],"sourcesContent":["import {\n ASTERISK,\n AT,\n CARRIAGE_RETURN,\n COLON,\n COMMA,\n DOUBLE_QUOTE,\n EXCLAMATION,\n GREATER_THAN,\n HORIZONTAL_TAB,\n LEFT_CURLY_BRACKET,\n LEFT_PARENTHESIS,\n LEFT_SQUARE_BRACKET,\n LINE_FEED,\n NULL_CHARACTER,\n PLUS,\n REVERSE_SOLIDUS,\n RIGHT_CURLY_BRACKET,\n RIGHT_PARENTHESIS,\n RIGHT_SQUARE_BRACKET,\n SEMICOLON,\n SINGLE_QUOTE,\n SOLIDUS,\n SPACE,\n TILDE,\n} from \"./enum.ts\";\nimport { charCodeAt, isHexChar } from \"./utility.ts\";\n\nexport const token = (type: string): number => {\n switch (type) {\n // \\0 \\t \\n \\r whitespace token\n case NULL_CHARACTER:\n case HORIZONTAL_TAB:\n case LINE_FEED:\n case CARRIAGE_RETURN:\n case SPACE:\n return 5;\n // ! + , / > @ ~ isolate token\n case EXCLAMATION:\n case PLUS:\n case COMMA:\n case SOLIDUS:\n case GREATER_THAN:\n case AT:\n case TILDE:\n // ; { } breakpoint token\n case SEMICOLON:\n case LEFT_CURLY_BRACKET:\n case RIGHT_CURLY_BRACKET:\n return 4;\n // : accompanied token\n case COLON:\n return 3;\n // \" ' ( [ opening delimit token\n case DOUBLE_QUOTE:\n case SINGLE_QUOTE:\n case LEFT_PARENTHESIS:\n case LEFT_SQUARE_BRACKET:\n return 2;\n // ) ] closing delimit token\n case RIGHT_PARENTHESIS:\n case RIGHT_SQUARE_BRACKET:\n return 1;\n }\n return 0;\n};\n\nexport class Tokenizer {\n line = 1;\n column = 1;\n length = 0;\n position = 0;\n character?: string;\n characters: string;\n constructor(value: string) {\n this.characters = value;\n this.length = this.characters.length;\n }\n\n prev(): string {\n if (this.position > 0) {\n this.position--;\n this.character = this.characters[this.position];\n } else {\n this.character = NULL_CHARACTER;\n }\n this.column--;\n if (this.character === LINE_FEED) {\n this.column = 1;\n this.line--;\n }\n return this.character;\n }\n\n next(): string {\n if (this.position < this.length) {\n this.character = this.characters[this.position];\n this.position++;\n } else {\n this.character = NULL_CHARACTER;\n }\n this.column++;\n if (this.character === LINE_FEED) {\n this.column = 1;\n this.line++;\n }\n return this.character;\n }\n\n peek(): string {\n return this.characters[this.position] || NULL_CHARACTER;\n }\n\n slice(begin: number, end: number): string {\n return this.characters.slice(begin, end);\n }\n\n delimit(type: string): string {\n return this.slice(\n this.position - 1,\n this._delimiter(\n type === LEFT_SQUARE_BRACKET\n ? RIGHT_SQUARE_BRACKET\n : type === LEFT_PARENTHESIS\n ? RIGHT_PARENTHESIS\n : type,\n ),\n ).trim();\n }\n\n tokenize(): string[] {\n return this._tokenizer([]);\n }\n\n whitespace(type: string): string {\n this.character = this.peek();\n while (this.character !== NULL_CHARACTER) {\n this.character = this.peek();\n if (charCodeAt(this.character) < 33) {\n this.next();\n } else {\n break;\n }\n }\n return token(type) > 2 || token(this.character) > 3 ? \"\" : SPACE;\n }\n\n protected _tokenizer(children: string[]): string[] {\n while (this.next() !== NULL_CHARACTER) {\n switch (token(this.character)) {\n case 0:\n children.push(this.identifier(this.position - 1));\n break;\n case 2:\n children.push(this.delimit(this.character));\n break;\n default:\n children.push(this.character);\n }\n }\n return children;\n }\n\n escaping(index: number, count: number): string {\n count--;\n while (count && this.next() !== NULL_CHARACTER) {\n count--;\n // not 0-9 A-F a-f\n if (!isHexChar(this.character)) {\n break;\n }\n }\n return this.slice(\n index,\n this.position + +(count < 6 && this.peek() === SPACE && this.next() === SPACE),\n );\n }\n\n protected _delimiter(type: string): number {\n while (this.next() !== NULL_CHARACTER) {\n switch (this.character) {\n // ] ) \" '\n case type:\n return this.position;\n // \" '\n case DOUBLE_QUOTE:\n case SINGLE_QUOTE:\n if (type !== DOUBLE_QUOTE && type !== SINGLE_QUOTE) {\n this._delimiter(this.character);\n }\n break;\n // (\n case LEFT_PARENTHESIS:\n if (type === RIGHT_PARENTHESIS) {\n this._delimiter(type);\n }\n break;\n // \\\n case REVERSE_SOLIDUS:\n this.next();\n break;\n }\n }\n return this.position;\n }\n\n commenter(type: string, index: number): string {\n while (this.next() !== NULL_CHARACTER) {\n // //\n if (type === SOLIDUS && this.character === LINE_FEED) {\n break;\n } // /*\n if (type === ASTERISK && this.character === ASTERISK && this.peek() === SOLIDUS) {\n break;\n }\n }\n return `/*${this.slice(index, this.position - 1)}*${type === SOLIDUS ? type : this.next()}`;\n }\n\n identifier(index: number): string {\n while (!token(this.peek())) {\n this.next();\n }\n return this.slice(index, this.position);\n }\n}\n"],"names":["token","type","NULL_CHARACTER","HORIZONTAL_TAB","LINE_FEED","CARRIAGE_RETURN","SPACE","EXCLAMATION","PLUS","COMMA","SOLIDUS","GREATER_THAN","AT","TILDE","SEMICOLON","LEFT_CURLY_BRACKET","RIGHT_CURLY_BRACKET","COLON","DOUBLE_QUOTE","SINGLE_QUOTE","LEFT_PARENTHESIS","LEFT_SQUARE_BRACKET","RIGHT_PARENTHESIS","RIGHT_SQUARE_BRACKET","Tokenizer","value","begin","end","charCodeAt","children","count","isHexChar","index","REVERSE_SOLIDUS","ASTERISK"],"mappings":"oEA4BO,MAAMA,EAAS,GAAyB,CAC7C,OAAQC,EAAR,CAEE,KAAKC,EAAAA,eACL,KAAKC,EAAAA,eACL,KAAKC,EAAAA,UACL,KAAKC,EAAAA,gBACL,KAAKC,EAAAA,MACH,MAAO,GAET,KAAKC,EAAAA,YACL,KAAKC,EAAAA,KACL,KAAKC,EAAAA,MACL,KAAKC,EAAAA,QACL,KAAKC,EAAAA,aACL,KAAKC,EAAAA,GACL,KAAKC,EAAAA,MAEL,KAAKC,EAAAA,UACL,KAAKC,EAAAA,mBACL,KAAKC,EAAAA,oBACH,MAAO,GAET,KAAKC,EAAAA,MACH,MAAO,GAET,KAAKC,EAAAA,aACL,KAAKC,EAAAA,aACL,KAAKC,EAAAA,iBACL,KAAKC,EAAAA,oBACH,MAAO,GAET,KAAKC,EAAAA,kBACL,KAAKC,EAAAA,qBACH,MAAO,GAEX,MAAO,IAGF,MAAMC,CAAU,CAOrB,YAAY,EAAe,CANpB,KAAA,KAAA,EACE,KAAA,OAAA,EACA,KAAA,OAAA,EACE,KAAA,SAAA,EAIT,KAAK,WAAaC,EAClB,KAAK,OAAS,KAAK,WAAW,OAGhC,MAAe,CAYb,OAXI,KAAK,SAAW,GAClB,KAAK,WACL,KAAK,UAAY,KAAK,WAAW,KAAK,WAEtC,KAAK,UAAYvB,EAAAA,eAEnB,KAAK,SACD,KAAK,YAAcE,cACrB,KAAK,OAAS,EACd,KAAK,QAEA,KAAK,UAGd,MAAe,CAYb,OAXI,KAAK,SAAW,KAAK,QACvB,KAAK,UAAY,KAAK,WAAW,KAAK,UACtC,KAAK,YAEL,KAAK,UAAYF,EAAAA,eAEnB,KAAK,SACD,KAAK,YAAcE,cACrB,KAAK,OAAS,EACd,KAAK,QAEA,KAAK,UAGd,MAAe,CACb,OAAO,KAAK,WAAW,KAAK,WAAaF,EAAAA,eAG3C,MAAM,EAAe,EAAqB,CACxC,OAAO,KAAK,WAAW,MAAMwB,EAAOC,GAGtC,QAAQ,EAAsB,CAC5B,OAAO,KAAK,MACV,KAAK,SAAW,EAChB,KAAK,WACH1B,IAASoB,EAAAA,oBACLE,EAAAA,qBACAtB,IAASmB,EAAAA,iBACPE,EAAAA,kBACArB,IAER,OAGJ,UAAqB,CACnB,OAAO,KAAK,WAAW,IAGzB,WAAW,EAAsB,CAE/B,IADA,KAAK,UAAY,KAAK,OACf,KAAK,YAAcC,mBACxB,KAAK,UAAY,KAAK,OAClB0B,aAAW,KAAK,WAAa,KAC/B,KAAK,OAKT,OAAO5B,EAAMC,GAAQ,GAAKD,EAAM,KAAK,WAAa,EAAI,GAAKM,EAAAA,MAGnD,WAAW,EAA8B,CACjD,KAAO,KAAK,SAAWJ,kBACrB,OAAQF,EAAM,KAAK,WAAnB,CACE,IAAK,GACH6B,EAAS,KAAK,KAAK,WAAW,KAAK,SAAW,IAC9C,MACF,IAAK,GACHA,EAAS,KAAK,KAAK,QAAQ,KAAK,YAChC,MACF,QACEA,EAAS,KAAK,KAAK,WAGzB,OAAOA,EAGT,SAAS,EAAe,EAAuB,CAE7C,IADA,IACOC,GAAS,KAAK,SAAW5B,EAAAA,iBAC9B,IAEK6B,EAAAA,UAAU,KAAK,cAItB,OAAO,KAAK,MACVC,EACA,KAAK,UAAW,EAAEF,EAAQ,GAAK,KAAK,SAAWxB,EAAAA,OAAS,KAAK,SAAWA,EAAAA,QAIlE,WAAW,EAAsB,CACzC,KAAO,KAAK,SAAWJ,kBACrB,OAAQ,KAAK,UAAb,CAEE,KAAKD,SACI,KAAK,SAEd,KAAKiB,EAAAA,aACL,KAAKC,EAAAA,aACClB,IAASiB,EAAAA,cAAgBjB,IAASkB,gBACpC,KAAK,WAAW,KAAK,WAEvB,MAEF,KAAKC,EAAAA,iBACCnB,IAASqB,EAAAA,mBACX,KAAK,WAAWrB,GAElB,MAEF,KAAKgC,EAAAA,gBACH,KAAK,OACL,MAGN,OAAO,KAAK,SAGd,UAAU,EAAc,EAAuB,CAC7C,KAAO,KAAK,SAAW/B,kBAKjB,EAHAD,IAASS,EAAAA,SAAW,KAAK,YAAcN,EAAAA,WAGvCH,IAASiC,EAAAA,UAAY,KAAK,YAAcA,EAAAA,UAAY,KAAK,SAAWxB,aAI1E,MAAO,KAAK,KAAK,MAAMsB,EAAO,KAAK,SAAW,GAAG,GAAG/B,IAASS,EAAAA,QAAUT,EAAO,KAAK,SAGrF,WAAW,EAAuB,CAChC,KAAO,CAACD,EAAM,KAAK,SACjB,KAAK,OAEP,OAAO,KAAK,MAAMgC,EAAO,KAAK"}