ern-api-gen
Version:
Electrode Native API generator
101 lines • 4.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Part_1 = __importDefault(require("./Part"));
const ParserException_1 = __importDefault(require("./ParserException"));
const IgnoreToken_1 = __importDefault(require("./IgnoreToken"));
const StringBuilder_1 = __importDefault(require("../../java/StringBuilder"));
class IgnoreLineParser {
static parse(text) {
const parts = [];
const sb = StringBuilder_1.default();
const characters = text.split('');
let next = null;
for (let i = 0, totalLength = characters.length; i < totalLength; i++) {
let current = characters[i];
next = i < totalLength - 1 ? characters[i + 1] : null;
if (i === 0) {
if (current === '#') {
parts.push(new Part_1.default(IgnoreToken_1.default.COMMENT, text));
i = totalLength;
continue;
}
else if (current === '!') {
if (i === totalLength - 1) {
throw new ParserException_1.default('Negation with no negated pattern.');
}
else {
parts.push(new Part_1.default(IgnoreToken_1.default.NEGATE));
continue;
}
}
else if (current === '\\' && next === '#') {
current = next;
next = null;
i++;
}
}
const a = IgnoreToken_1.default.MATCH_ANY.getPattern();
if (a === current) {
if (a === next) {
if (i + 3 < totalLength && characters[i + 2] === a) {
throw new ParserException_1.default('The pattern *** is invalid.');
}
parts.push(new Part_1.default(IgnoreToken_1.default.MATCH_ALL));
i++;
continue;
}
else {
if (sb.length() > 0) {
parts.push(new Part_1.default(IgnoreToken_1.default.TEXT, sb.toString()));
sb.delete(0, sb.length());
}
parts.push(new Part_1.default(IgnoreToken_1.default.MATCH_ANY));
continue;
}
}
if (i === 0 && IgnoreToken_1.default.ROOTED_MARKER.getPattern() === current) {
parts.push(new Part_1.default(IgnoreToken_1.default.ROOTED_MARKER));
continue;
}
if (current === '\\' && next === ' ') {
parts.push(new Part_1.default(IgnoreToken_1.default.ESCAPED_SPACE));
i++;
continue;
}
else if (current === '\\' && next === '!') {
parts.push(new Part_1.default(IgnoreToken_1.default.ESCAPED_EXCLAMATION));
i++;
continue;
}
if (IgnoreToken_1.default.PATH_DELIM.getPattern() === current) {
if (i !== totalLength - 1) {
if (sb.length() > 0) {
parts.push(new Part_1.default(IgnoreToken_1.default.TEXT, sb.toString()));
sb.delete(0, sb.length());
}
parts.push(new Part_1.default(IgnoreToken_1.default.PATH_DELIM));
if (IgnoreToken_1.default.PATH_DELIM.getPattern() === next) {
i++;
}
continue;
}
else {
parts.push(new Part_1.default(IgnoreToken_1.default.TEXT, sb.toString()));
sb.delete(0, sb.length());
parts.push(new Part_1.default(IgnoreToken_1.default.DIRECTORY_MARKER));
continue;
}
}
sb.append(current);
}
if (sb.length() > 0) {
parts.push(new Part_1.default(IgnoreToken_1.default.TEXT, sb.toString().trim()));
}
return parts;
}
}
exports.IgnoreLineParser = IgnoreLineParser;
//# sourceMappingURL=IgnoreLineParser.js.map