protected String parseStatement(InputReader reader) throws InvalidSyntaxException, EnvironmentException, ParserException { if (!reader.hasNextWord()) { return reader.getCurrentStatement(); } Word word = reader.nextWord(); String keyword = word.asName(); WordTail tail = reader.getWordTail(); if (tail.isCompilerCommand()) { String command = reader.nextWord().asName(); if (command.equals("include")) { return parseInclude(reader); } else if (command.equals("macro")) { insideMacro = true; return reader.getCurrentStatement(); } else if (command.equals("macroend")) { insideMacro = false; return reader.getCurrentStatement(); } } if (insideMacro) { return reader.getCurrentStatement(); } else if (tail.isAssignment()) { return statementParser.parseVarAssign(word, reader); } else if (tail.isFunctionArgsOpen()) { return statementParser.parseCall(word, null, reader); } else if (keyword.equals("var")) { return statementParser.parseVarDeclare(reader); } else if (keyword.equals("function")) { return statementParser.parseFunctionBegin(reader); } else if (keyword.equals("return")) { return statementParser.parseFunctionReturn(reader); } else if (keyword.equals("functionend")) { return statementParser.parseFunctionEnd(reader); } else if (keyword.equals("if") || keyword.equals("elseif")) { return statementParser.parseIf(word, reader); } else if (keyword.equals("else")) { return NSISStatements.logicLibDefine(reader.getIndent(), "Else"); } else if (keyword.equals("endif")) { return NSISStatements.logicLibDefine(reader.getIndent(), "EndIf"); } else if (keyword.equals("do")) { return statementParser.parseDoLoop("Do", reader); } else if (keyword.equals("continue")) { return NSISStatements.logicLibDefine(reader.getIndent(), "Continue"); } else if (keyword.equals("break")) { return NSISStatements.logicLibDefine(reader.getIndent(), "Break"); } else if (keyword.equals("loop")) { return statementParser.parseDoLoop("Loop", reader); } return reader.getCurrentStatement(); }