UNPKG

@scalenc/nc-format

Version:

Library for handling TRUMPF NC file format.

109 lines 4.86 kB
"use strict"; 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