@scalenc/nc-format
Version:
Library for handling TRUMPF NC file format.
109 lines • 4.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tryGetNumberAsInteger = exports.tryParseNumber = exports.isCloseingFieldBrace = exports.isOpeningFieldBrace = exports.isDeclaration = exports.isAssignmentOperator = exports.isGoto = exports.isToKeyword = exports.isFlowControlInstruction = exports.isMCode = exports.isGCode = exports.isLineOrFileEnd = exports.TokenType = void 0;
const Constants_1 = require("./Constants");
var TokenType;
(function (TokenType) {
TokenType[TokenType["NEW_LINE"] = 0] = "NEW_LINE";
TokenType[TokenType["COMMENT"] = 1] = "COMMENT";
TokenType[TokenType["IDENTIFIER"] = 2] = "IDENTIFIER";
TokenType[TokenType["NUMBER"] = 3] = "NUMBER";
TokenType[TokenType["STRING"] = 4] = "STRING";
TokenType[TokenType["OPERATOR"] = 5] = "OPERATOR";
TokenType[TokenType["FIELD_BRACE"] = 6] = "FIELD_BRACE";
TokenType[TokenType["BRACE"] = 7] = "BRACE";
TokenType[TokenType["SEPARATOR"] = 8] = "SEPARATOR";
TokenType[TokenType["COLON"] = 9] = "COLON";
})(TokenType = exports.TokenType || (exports.TokenType = {}));
function isLineOrFileEnd(token) {
return !token || token.type === TokenType.NEW_LINE || token.type === TokenType.COMMENT;
}
exports.isLineOrFileEnd = isLineOrFileEnd;
function isGCode(token) {
return token?.type === TokenType.IDENTIFIER && token.value === Constants_1.Constants.G_CODE;
}
exports.isGCode = isGCode;
function isMCode(token) {
return token?.type === TokenType.IDENTIFIER && token.value === Constants_1.Constants.M_CODE;
}
exports.isMCode = isMCode;
function isFlowControlInstruction(token) {
return token?.type === TokenType.IDENTIFIER && Constants_1.Constants.FLOW_CONTROL_INSTRUCTIONS.includes(token.value.toUpperCase());
}
exports.isFlowControlInstruction = isFlowControlInstruction;
function isToKeyword(token) {
return token?.type === TokenType.IDENTIFIER && token.value.toUpperCase() === Constants_1.Constants.FOR_TO;
}
exports.isToKeyword = isToKeyword;
function isGoto(token) {
return (token?.type === TokenType.IDENTIFIER &&
token.value.toUpperCase().startsWith(Constants_1.Constants.GOTO) &&
(token.value.length === Constants_1.Constants.GOTO.length ||
(token.value.length === Constants_1.Constants.GOTO.length + 1 && Constants_1.Constants.GOTO_SPECIFIER.includes(token.value[4].toUpperCase()))));
}
exports.isGoto = isGoto;
function isAssignmentOperator(token) {
return token?.type === TokenType.OPERATOR && token.value.length === 1 && token.value[0] === Constants_1.Constants.ASSIGNMENT_OPERATOR;
}
exports.isAssignmentOperator = isAssignmentOperator;
function isDeclaration(token) {
return token?.type === TokenType.IDENTIFIER && token.value === Constants_1.Constants.DEF;
}
exports.isDeclaration = isDeclaration;
function isOpeningFieldBrace(token) {
return token?.type === TokenType.FIELD_BRACE && token.value.length === 1 && token.value[0] === Constants_1.Constants.OPENING_FIELD_BRACE;
}
exports.isOpeningFieldBrace = isOpeningFieldBrace;
function isCloseingFieldBrace(token) {
return token?.type === TokenType.FIELD_BRACE && token.value.length === 1 && token.value[0] === Constants_1.Constants.CLOSING_FIELD_BRACE;
}
exports.isCloseingFieldBrace = isCloseingFieldBrace;
function tryParseNumber(token) {
if (token.type != TokenType.NUMBER || !token.value) {
return undefined;
}
if ('hHbB'.includes(token.value[0])) {
return tryGetNumberAsInteger(token);
}
const number = +token.value;
return Number.isNaN(number) ? undefined : number;
}
exports.tryParseNumber = tryParseNumber;
function tryGetNumberAsInteger(token) {
if (token?.type !== TokenType.NUMBER || !token.value) {
return undefined;
}
switch (token.value[0]) {
case 'h':
case 'H': {
const number = Number.parseInt(token.value.substring(1).replaceAll(' ', ''), 16);
return Number.isNaN(number) ? undefined : number;
}
case 'b':
case 'B': {
let value = 0;
for (let i = 1; i < token.value.length; ++i) {
value <<= 1;
// eslint-disable-next-line security/detect-object-injection
switch (token.value[i]) {
case '0':
break;
case '1':
value += 1;
break;
case ' ':
break;
default:
return undefined;
}
}
return value;
}
default: {
const number = Number.parseInt(token.value);
return Number.isNaN(number) ? undefined : number;
}
}
}
exports.tryGetNumberAsInteger = tryGetNumberAsInteger;
//# sourceMappingURL=Token.js.map