mirror of
https://github.com/pdemian/human2regex.git
synced 2025-05-16 12:30:09 -07:00
2 lines
2.1 KiB
JavaScript
2 lines
2.1 KiB
JavaScript
/*! Copyright (c) 2020 Patrick Demian; Licensed under MIT */
|
|
"use strict";const keywords=["optional","optionally","match","then","any","of","or","word","digit","unicode","character","multiple","one","two","three","four","five","six","seven","eight","nine","ten","anything","whitespace","as","number","if","starts","with","ends","otherwise","else","unless","while","more","using","global","and","multiline","exact","matching","not","between","tab","linefeed","carriage","return","group","by","exactly","inclusive","inclusively","exclusive","exclusively","including","from","to"];var TokenType;!function(e){e[e.END_OF_STATEMENT=0]="END_OF_STATEMENT",e[e.INDENT=1]="INDENT",e[e.BETWEEN=2]="BETWEEN",e[e.QUOTE=3]="QUOTE",e[e.KEYWORD_BETWEEN=4]="KEYWORD_BETWEEN",e[e.KEYWORD_OPTIONAL=5]="KEYWORD_OPTIONAL",e[e.KEYWORD_MATCH=6]="KEYWORD_MATCH",e[e.KEYWORD_THEN=7]="KEYWORD_THEN",e[e.KEYWORD_AND=8]="KEYWORD_AND",e[e.KEYWORD_OR=9]="KEYWORD_OR",e[e.KEYWORD_ANY=10]="KEYWORD_ANY",e[e.KEYWORD_OF=11]="KEYWORD_OF"}(TokenType||(TokenType={}));class Token{constructor(e,n){this.type=e,this.token_string=n}}class TokenizerOptions{constructor(){this.convert_spaces_to_tabs=!1}}function tokenize(e,n){let t=[];for(let s=0;s<e.length;s++)if(n.convert_spaces_to_tabs&&e.startsWith(" ",s))t.push(new Token(TokenType.INDENT)),s+=3;else if(e.startsWith("...",s))t.push(new Token(TokenType.BETWEEN)),s+=2;else if(e.startsWith("..",s))t.push(new Token(TokenType.BETWEEN)),s+=1;else if(e.startsWith("//",s))for(s+=1;s<e.length;){if("\n"==e[s]){t.push(new Token(TokenType.END_OF_STATEMENT));break}s++}else if(e.startsWith("\r\n",s))t.push(new Token(TokenType.END_OF_STATEMENT)),s+=1;else switch(e[s]){case"#":for(s++;s<e.length;){if("\n"==e[s]){t.push(new Token(TokenType.END_OF_STATEMENT));break}s++}break;case'"':case'"':const n=e[s];let T=!1,o="";do{if(e[++s]==n){T=!0;break}e[s]}while(s<e.length);T&&t.push(new Token(TokenType.QUOTE,o));break;case"-":t.push(new Token(TokenType.BETWEEN));break;case"\n":t.push(new Token(TokenType.END_OF_STATEMENT));break;case"\r":break;case"\t":t.push(new Token(TokenType.INDENT));break;case" ":break;default:keywords.includes("word")}return{tokens:t,errors:[]}}$(function(){}); |