@whisklabs/grpc
Version:
gRPC generator and http library for typescript
139 lines • 4.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tokenizer = exports.SYMBOLS = void 0;
var Block;
(function (Block) {
Block[Block["none"] = 0] = "none";
Block[Block["comment"] = 1] = "comment";
Block[Block["commentMulti"] = 2] = "commentMulti";
Block[Block["oneString"] = 3] = "oneString";
Block[Block["twoString"] = 4] = "twoString";
})(Block || (Block = {}));
var EMPTY = {
' ': true,
'\t': true,
'\n': true,
};
exports.SYMBOLS = {
'=': true,
',': true,
':': true,
';': true,
'[': true,
']': true,
'(': true,
')': true,
'{': true,
'}': true,
'<': true,
'>': true,
};
// eslint-disable-next-line complexity
function tokenizer(source) {
var tokens = [];
var lines = [];
var columns = [];
var tmp = '';
var block = Block.none;
var sameLine = true;
var curLine = 1;
var column = 1;
var finalize = function (after, force) {
if (after === void 0) { after = false; }
if (force === void 0) { force = false; }
if (tmp.length > 0 || force) {
tokens.push(tmp);
lines.push(curLine);
columns.push(after ? column : column - tmp.length);
tmp = '';
}
};
for (var i = 0; i < source.length; i++) {
var cur = source[i];
var next = source[i + 1];
switch (true) {
case block === Block.none && '//' === cur + next:
finalize();
block = Block.comment;
tmp += sameLine ? '!//' : '//';
finalize(true);
i++;
column++;
break;
case block === Block.comment && '\n' === cur:
block = Block.none;
finalize(false, true);
break;
case block === Block.none && '/*' === cur + next:
block = Block.commentMulti;
finalize();
tmp = '/*';
finalize(true);
i++;
column++;
break;
case block === Block.commentMulti && '*/' === cur + next:
block = Block.none;
finalize(false, true);
tmp = '*/';
finalize(true);
i++;
column++;
break;
case block === Block.none && cur === "'":
finalize();
tmp = cur;
block = Block.oneString;
break;
case block === Block.oneString && cur + next === "\\'":
tmp += "'";
i++;
break;
case block === Block.oneString && cur === "'":
tmp += cur;
finalize();
block = Block.none;
break;
case block === Block.none && cur === '"':
finalize();
tmp = cur;
block = Block.twoString;
break;
case block === Block.twoString && cur + next === '\\"':
tmp += '"';
i++;
break;
case block === Block.twoString && cur === '"':
tmp += cur;
finalize();
block = Block.none;
break;
case block === Block.none && exports.SYMBOLS[cur]:
finalize();
tmp = cur;
finalize(true);
break;
case block === Block.none && EMPTY[cur]:
finalize();
break;
default:
tmp += cur;
}
if (block === Block.none && cur === '\n') {
column = 1;
}
else {
column++;
}
if (cur === '\n') {
sameLine = false;
curLine++;
}
else if (!EMPTY[cur]) {
sameLine = true;
}
}
return { tokens: tokens, lines: lines, columns: columns };
}
exports.tokenizer = tokenizer;
//# sourceMappingURL=tokenizer.js.map