From 154e637ae3b720f96ec02a3cc711a1d803de7dc7 Mon Sep 17 00:00:00 2001 From: Amr Al-Barghouthi Date: Fri, 16 Nov 2018 20:34:00 +0200 Subject: [PATCH] patch the repaet highight --- command.js | 13 +++++-------- parser.js | 23 ++++++++++++++++------- sketch.js | 2 ++ 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/command.js b/command.js index e13f791..e23f696 100644 --- a/command.js +++ b/command.js @@ -55,13 +55,10 @@ class CommandArg { } break; case ARGUMENT_TYPES.COMMANDS: - this.validator = (str)=>{ - let p = new Parser(str); - try{ - p.parse() - }catch{ - return false; - } + this.validator = (str,offset)=>{ + let p = new Parser(str,null,offset); + + p.parse() return true; } break; @@ -147,7 +144,7 @@ class CommandExecutor { } } parseExpression(ExpressionString) { - let p = new Parser(ExpressionString); + let p = new Parser(ExpressionString,null); let token = p.nextToken(); let next = p.nextToken(); let e; diff --git a/parser.js b/parser.js index ba03e47..79338dc 100644 --- a/parser.js +++ b/parser.js @@ -7,12 +7,13 @@ class Parser { * @param {Function} afterCmdCallback Function to execute after the commands are executed * @memberof Parser */ - constructor(text, afterCmdCallback) { + constructor(text, afterCmdCallback,offset = 0) { if (!text) text = ''; this.text = text.trimRight(); this.index = 0; this.afterCmdCallback = afterCmdCallback + this.offset = offset; } /** @@ -102,11 +103,19 @@ class Parser { let theArgToken = this.getArgs(); let endIndex = this.index + 1; if (arg.validator !== undefined) { - if (!arg.validator(theArgToken)) { - console.error(`Argument number ${i} (${theArgToken}) is invalid for command ${token}`); + let valid; + if(arg.type == ARGUMENT_TYPES.COMMANDS) + { + while(this.text.length>startIndex & this.text[startIndex++]!='['); + console.log({arg:theArgToken,offset:startIndex}); + valid = arg.validator(theArgToken,startIndex+this.offset) + }else + valid = arg.validator(theArgToken); + if (!valid) { + console.error(`Argument number ${i} (${theArgToken}) is invalid for command ${token} parser offset ${this.offset}`); throw { - startIndex: startIndex, - endIndex: endIndex + startIndex: startIndex+this.offset, + endIndex: endIndex+this.offset } } args.push(theArgToken); @@ -120,8 +129,8 @@ class Parser { }else { let endIndex = this.index + 1; throw { - startIndex: cmdStrat, - endIndex: endIndex + startIndex: cmdStrat+this.offset, + endIndex: endIndex+this.offset } } } diff --git a/sketch.js b/sketch.js index ef915f6..f5f8cfd 100644 --- a/sketch.js +++ b/sketch.js @@ -144,6 +144,8 @@ function goTurtle() { } } catch (err) { showError(err.startIndex,err.endIndex); + console.log(err); + } pop();