{"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":"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"}