mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 10:59:01 +00:00
refactor: prepare preprocessor error improvement (almost finished :-)
https://github.com/plantuml/plantuml/pull/1668
This commit is contained in:
parent
6329d9a8d5
commit
a48dd52d9f
@ -1,4 +1,4 @@
|
||||
# Warning, "version" should be the same in gradle.properties and Version.java
|
||||
# Any idea anyone how to magically synchronize those :-) ?
|
||||
version = 1.2024.4beta3
|
||||
version = 1.2024.4beta4
|
||||
org.gradle.workers.max = 3
|
@ -56,7 +56,7 @@ import net.sourceforge.plantuml.security.SFile;
|
||||
import net.sourceforge.plantuml.security.SecurityProfile;
|
||||
import net.sourceforge.plantuml.security.SecurityUtils;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TMemory;
|
||||
import net.sourceforge.plantuml.tim.TVariableScope;
|
||||
import net.sourceforge.plantuml.utils.Log;
|
||||
@ -82,7 +82,7 @@ public class Defines implements Truth {
|
||||
return new Defines();
|
||||
}
|
||||
|
||||
public void copyTo(TMemory memory, StringLocated location) throws EaterException {
|
||||
public void copyTo(TMemory memory, StringLocated location) throws EaterExceptionLocated {
|
||||
for (Entry<String, Define> ent : values.entrySet()) {
|
||||
final String name = ent.getKey();
|
||||
final Define def = ent.getValue();
|
||||
|
@ -42,13 +42,13 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterStartsub;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TMemory;
|
||||
|
||||
public class Sub {
|
||||
// ::remove folder when __HAXE__
|
||||
// ::remove folder when __HAXE__
|
||||
|
||||
private final String name;
|
||||
private final List<StringLocated> lines = new ArrayList<>();
|
||||
@ -79,7 +79,7 @@ public class Sub {
|
||||
}
|
||||
|
||||
public static Sub fromFile(ReadLine reader, String blocname, TContext context, TMemory memory)
|
||||
throws IOException, EaterException {
|
||||
throws IOException, EaterExceptionLocated {
|
||||
Sub result = null;
|
||||
StringLocated s = null;
|
||||
boolean skip = false;
|
||||
|
@ -53,8 +53,7 @@ import net.sourceforge.plantuml.preproc.StartDiagramExtractReader;
|
||||
import net.sourceforge.plantuml.preproc.Stdlib;
|
||||
import net.sourceforge.plantuml.security.SURL;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.utils.Log;
|
||||
|
||||
public class PreprocessorUtils {
|
||||
@ -134,7 +133,7 @@ public class PreprocessorUtils {
|
||||
}
|
||||
|
||||
public static ReadLine getReaderIncludeUrl(final SURL url, StringLocated s, String suf, Charset charset)
|
||||
throws EaterException {
|
||||
throws EaterExceptionLocated {
|
||||
try {
|
||||
if (StartDiagramExtractReader.containsStartDiagram(url, s, charset))
|
||||
return StartDiagramExtractReader.build(url, s, suf, charset);
|
||||
@ -142,16 +141,16 @@ public class PreprocessorUtils {
|
||||
return getReaderInclude(url, s, charset);
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("Cannot open URL " + e.getMessage(), s);
|
||||
throw EaterExceptionLocated.located("Cannot open URL " + e.getMessage(), s);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static ReadLine getReaderInclude(SURL url, StringLocated s, Charset charset)
|
||||
throws EaterException, UnsupportedEncodingException {
|
||||
throws EaterExceptionLocated, UnsupportedEncodingException {
|
||||
final InputStream is = url.openStream();
|
||||
if (is == null)
|
||||
throw EaterException.located("Cannot open URL", s);
|
||||
throw EaterExceptionLocated.located("Cannot open URL", s);
|
||||
|
||||
return ReadLineReader.create(new InputStreamReader(is, charset), url.toString(), s.getLocation());
|
||||
}
|
||||
|
@ -64,19 +64,19 @@ public abstract class Eater {
|
||||
return stringLocated;
|
||||
}
|
||||
|
||||
public abstract void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated;
|
||||
public abstract void analyze(TContext context, TMemory memory) throws EaterExceptionLocated;
|
||||
|
||||
public int getCurrentPosition() {
|
||||
return i;
|
||||
}
|
||||
|
||||
final protected String eatAllToEnd() throws EaterException {
|
||||
final protected String eatAllToEnd() throws EaterExceptionLocated {
|
||||
final String result = stringLocated.getString().substring(i);
|
||||
i = stringLocated.length();
|
||||
return result;
|
||||
}
|
||||
|
||||
final public TValue eatExpression(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
final public TValue eatExpression(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
final char ch = peekChar();
|
||||
if (ch == '{' || ch == '[') {
|
||||
final String data = eatAllToEnd();
|
||||
@ -89,23 +89,22 @@ public abstract class Eater {
|
||||
return tokenStack.getResult(getStringLocated(), context, memory);
|
||||
}
|
||||
|
||||
final protected TokenStack eatTokenStack() throws EaterException {
|
||||
final protected TokenStack eatTokenStack() throws EaterExceptionLocated {
|
||||
final TokenStack tokenStack = new TokenStack();
|
||||
addIntoTokenStack(tokenStack, false);
|
||||
if (tokenStack.size() == 0)
|
||||
throw EaterException.located("Missing expression", stringLocated);
|
||||
throw EaterExceptionLocated.located("Missing expression", stringLocated);
|
||||
|
||||
return tokenStack;
|
||||
}
|
||||
|
||||
final protected TValue eatExpressionStopAtColon(TContext context, TMemory memory)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
final protected TValue eatExpressionStopAtColon(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
final TokenStack tokenStack = new TokenStack();
|
||||
addIntoTokenStack(tokenStack, true);
|
||||
return tokenStack.getResult(getStringLocated(), context, memory);
|
||||
}
|
||||
|
||||
final protected void addIntoTokenStack(TokenStack tokenStack, boolean stopAtColon) throws EaterException {
|
||||
final protected void addIntoTokenStack(TokenStack tokenStack, boolean stopAtColon) throws EaterExceptionLocated {
|
||||
Token lastToken = null;
|
||||
while (true) {
|
||||
final Token token = TokenType.eatOneToken(lastToken, this, stopAtColon);
|
||||
@ -118,10 +117,10 @@ public abstract class Eater {
|
||||
}
|
||||
}
|
||||
|
||||
final public String eatAndGetQuotedString() throws EaterException {
|
||||
final public String eatAndGetQuotedString() throws EaterExceptionLocated {
|
||||
final char separator = peekChar();
|
||||
if (TLineType.isQuote(separator) == false)
|
||||
throw EaterException.located("quote10", stringLocated);
|
||||
throw EaterExceptionLocated.located("quote10", stringLocated);
|
||||
|
||||
checkAndEatChar(separator);
|
||||
final StringBuilder value = new StringBuilder();
|
||||
@ -130,7 +129,7 @@ public abstract class Eater {
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
final protected String eatAndGetOptionalQuotedString() throws EaterException {
|
||||
final protected String eatAndGetOptionalQuotedString() throws EaterExceptionLocated {
|
||||
final char quote = peekChar();
|
||||
if (TLineType.isQuote(quote))
|
||||
return eatAndGetQuotedString();
|
||||
@ -142,7 +141,7 @@ public abstract class Eater {
|
||||
while (true) {
|
||||
char ch = peekChar();
|
||||
if (ch == 0)
|
||||
throw EaterException.located("until001", stringLocated);
|
||||
throw EaterExceptionLocated.located("until001", stringLocated);
|
||||
|
||||
if (level == 0 && (ch == ',' || ch == ')'))
|
||||
return value.toString().trim();
|
||||
@ -160,7 +159,7 @@ public abstract class Eater {
|
||||
// return value.toString();
|
||||
}
|
||||
|
||||
final public String eatAndGetNumber() throws EaterException {
|
||||
final public String eatAndGetNumber() throws EaterExceptionLocated {
|
||||
final StringBuilder result = new StringBuilder();
|
||||
while (true) {
|
||||
final char ch = peekChar();
|
||||
@ -176,7 +175,7 @@ public abstract class Eater {
|
||||
}
|
||||
}
|
||||
|
||||
final public String eatAndGetSpaces() throws EaterException {
|
||||
final public String eatAndGetSpaces() throws EaterExceptionLocated {
|
||||
final StringBuilder result = new StringBuilder();
|
||||
while (true) {
|
||||
final char ch = peekChar();
|
||||
@ -187,19 +186,19 @@ public abstract class Eater {
|
||||
}
|
||||
}
|
||||
|
||||
final protected String eatAndGetVarname() throws EaterException {
|
||||
final protected String eatAndGetVarname() throws EaterExceptionLocated {
|
||||
final StringBuilder varname = new StringBuilder("" + eatOneChar());
|
||||
if (TLineType.isLetterOrUnderscoreOrDollar(varname.charAt(0)) == false)
|
||||
throw EaterException.located("a002", stringLocated);
|
||||
throw EaterExceptionLocated.located("a002", stringLocated);
|
||||
|
||||
addUpToLastLetterOrUnderscoreOrDigit(varname);
|
||||
return varname.toString();
|
||||
}
|
||||
|
||||
final protected String eatAndGetFunctionName() throws EaterException {
|
||||
final protected String eatAndGetFunctionName() throws EaterExceptionLocated {
|
||||
final StringBuilder varname = new StringBuilder("" + eatOneChar());
|
||||
if (TLineType.isLetterOrUnderscoreOrDollar(varname.charAt(0)) == false)
|
||||
throw EaterException.located("a003", stringLocated);
|
||||
throw EaterExceptionLocated.located("a003", stringLocated);
|
||||
|
||||
addUpToLastLetterOrUnderscoreOrDigit(varname);
|
||||
return varname.toString();
|
||||
@ -247,14 +246,14 @@ public abstract class Eater {
|
||||
return ch;
|
||||
}
|
||||
|
||||
final protected void checkAndEatChar(char ch) throws EaterException {
|
||||
final protected void checkAndEatChar(char ch) throws EaterExceptionLocated {
|
||||
if (i >= stringLocated.length() || stringLocated.charAt(i) != ch)
|
||||
throw EaterException.located("a001", stringLocated);
|
||||
throw EaterExceptionLocated.located("a001", stringLocated);
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
final protected boolean safeCheckAndEatChar(char ch) throws EaterException {
|
||||
final protected boolean safeCheckAndEatChar(char ch) throws EaterExceptionLocated {
|
||||
if (i >= stringLocated.length() || stringLocated.charAt(i) != ch)
|
||||
return false;
|
||||
|
||||
@ -262,7 +261,7 @@ public abstract class Eater {
|
||||
return true;
|
||||
}
|
||||
|
||||
final protected void optionallyEatChar(char ch) throws EaterException {
|
||||
final protected void optionallyEatChar(char ch) throws EaterExceptionLocated {
|
||||
if (i >= stringLocated.length() || stringLocated.charAt(i) != ch)
|
||||
return;
|
||||
|
||||
@ -270,7 +269,7 @@ public abstract class Eater {
|
||||
i++;
|
||||
}
|
||||
|
||||
final protected void checkAndEatChar(String s) throws EaterException {
|
||||
final protected void checkAndEatChar(String s) throws EaterExceptionLocated {
|
||||
for (int j = 0; j < s.length(); j++)
|
||||
checkAndEatChar(s.charAt(j));
|
||||
|
||||
@ -299,8 +298,7 @@ public abstract class Eater {
|
||||
}
|
||||
|
||||
final protected TFunctionImpl eatDeclareFunction(TContext context, TMemory memory, boolean unquoted,
|
||||
StringLocated location, boolean allowNoParenthesis, TFunctionType type)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
StringLocated location, boolean allowNoParenthesis, TFunctionType type) throws EaterExceptionLocated {
|
||||
final List<TFunctionArgument> args = new ArrayList<>();
|
||||
final String functionName = eatAndGetFunctionName();
|
||||
skipSpaces();
|
||||
@ -308,7 +306,7 @@ public abstract class Eater {
|
||||
if (allowNoParenthesis)
|
||||
return new TFunctionImpl(functionName, args, unquoted, type);
|
||||
|
||||
throw EaterException.located("Missing opening parenthesis", stringLocated);
|
||||
throw EaterExceptionLocated.located("Missing opening parenthesis", stringLocated);
|
||||
}
|
||||
while (true) {
|
||||
skipSpaces();
|
||||
@ -333,7 +331,7 @@ public abstract class Eater {
|
||||
checkAndEatChar(")");
|
||||
break;
|
||||
} else {
|
||||
throw EaterException.located("Error in function definition", stringLocated);
|
||||
throw EaterExceptionLocated.located("Error in function definition", stringLocated);
|
||||
}
|
||||
}
|
||||
skipSpaces();
|
||||
@ -341,7 +339,7 @@ public abstract class Eater {
|
||||
}
|
||||
|
||||
final protected TFunctionImpl eatDeclareReturnFunctionWithOptionalReturn(TContext context, TMemory memory,
|
||||
boolean unquoted, StringLocated location) throws EaterException, EaterExceptionLocated {
|
||||
boolean unquoted, StringLocated location) throws EaterExceptionLocated {
|
||||
final TFunctionImpl result = eatDeclareFunction(context, memory, unquoted, location, false,
|
||||
TFunctionType.RETURN_FUNCTION);
|
||||
if (peekChar() == 'r') {
|
||||
@ -359,7 +357,7 @@ public abstract class Eater {
|
||||
}
|
||||
|
||||
final protected TFunctionImpl eatDeclareProcedure(TContext context, TMemory memory, boolean unquoted,
|
||||
StringLocated location) throws EaterException, EaterExceptionLocated {
|
||||
StringLocated location) throws EaterExceptionLocated {
|
||||
final TFunctionImpl result = eatDeclareFunction(context, memory, unquoted, location, false,
|
||||
TFunctionType.PROCEDURE);
|
||||
return result;
|
||||
|
@ -44,7 +44,7 @@ public class EaterAffectation extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!");
|
||||
skipSpaces();
|
||||
|
@ -44,7 +44,7 @@ public class EaterAffectationDefine extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!define");
|
||||
skipSpaces();
|
||||
|
@ -44,7 +44,7 @@ public class EaterAssert extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!assert");
|
||||
skipSpaces();
|
||||
@ -55,9 +55,9 @@ public class EaterAssert extends Eater {
|
||||
if (ch == ':') {
|
||||
checkAndEatChar(':');
|
||||
final TValue message = eatExpression(context, memory);
|
||||
throw EaterException.located("Assertion error : " + message.toString(), getStringLocated());
|
||||
throw EaterExceptionLocated.located("Assertion error : " + message.toString(), getStringLocated());
|
||||
}
|
||||
throw EaterException.located("Assertion error", getStringLocated());
|
||||
throw EaterExceptionLocated.located("Assertion error", getStringLocated());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,7 @@ public class EaterDeclareProcedure extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!");
|
||||
boolean unquoted = false;
|
||||
|
@ -48,7 +48,7 @@ public class EaterDeclareReturnFunction extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!");
|
||||
boolean unquoted = false;
|
||||
|
@ -43,7 +43,7 @@ public class EaterDumpMemory extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!dump_memory");
|
||||
skipSpaces();
|
||||
|
@ -46,7 +46,7 @@ public class EaterElseIf extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!elseif");
|
||||
skipSpaces();
|
||||
|
@ -1,63 +0,0 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.tim;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
|
||||
public class EaterException extends Exception {
|
||||
|
||||
private final String message;
|
||||
|
||||
private EaterException(String message, StringLocated location) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public static EaterException unlocated(String message, StringLocated location) {
|
||||
return new EaterException(message, location);
|
||||
}
|
||||
|
||||
public static EaterException located(String message, StringLocated location) {
|
||||
return unlocated(message, location);
|
||||
}
|
||||
|
||||
public final String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public EaterExceptionLocated withLocation(StringLocated sl) {
|
||||
return EaterExceptionLocated.located(message, sl);
|
||||
}
|
||||
|
||||
}
|
@ -52,6 +52,10 @@ public class EaterExceptionLocated extends Exception {
|
||||
return new EaterExceptionLocated(message, Objects.requireNonNull(location));
|
||||
}
|
||||
|
||||
public static EaterExceptionLocated unlocated(String message, StringLocated location) {
|
||||
return new EaterExceptionLocated(message, Objects.requireNonNull(location));
|
||||
}
|
||||
|
||||
public final String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ public class EaterForeach extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!foreach");
|
||||
skipSpaces();
|
||||
|
@ -58,7 +58,7 @@ public class EaterFunctionCall extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipUntilChar('(');
|
||||
checkAndEatChar('(');
|
||||
skipSpaces();
|
||||
@ -119,9 +119,10 @@ public class EaterFunctionCall extends Eater {
|
||||
break;
|
||||
}
|
||||
if (unquoted) {
|
||||
throw EaterException.located("unquoted function/procedure cannot use expression.", getStringLocated());
|
||||
throw EaterExceptionLocated.located("unquoted function/procedure cannot use expression.",
|
||||
getStringLocated());
|
||||
}
|
||||
throw EaterException.located("call001", getStringLocated());
|
||||
throw EaterExceptionLocated.located("call001", getStringLocated());
|
||||
}
|
||||
}
|
||||
|
||||
@ -133,7 +134,7 @@ public class EaterFunctionCall extends Eater {
|
||||
return Collections.unmodifiableMap(namedArguments);
|
||||
}
|
||||
|
||||
public final String getEndOfLine() throws EaterException {
|
||||
public final String getEndOfLine() throws EaterExceptionLocated {
|
||||
return this.eatAllToEnd();
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ public class EaterIf extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!if");
|
||||
skipSpaces();
|
||||
|
@ -48,7 +48,7 @@ public class EaterIfdef extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!ifdef");
|
||||
skipSpaces();
|
||||
|
@ -46,7 +46,7 @@ public class EaterIfndef extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!ifndef");
|
||||
skipSpaces();
|
||||
|
@ -45,7 +45,7 @@ public class EaterImport extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!import");
|
||||
skipSpaces();
|
||||
|
@ -47,7 +47,7 @@ public class EaterInclude extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!include");
|
||||
final char peekChar = peekChar();
|
||||
|
@ -45,7 +45,7 @@ public class EaterIncludeDef extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!includedef");
|
||||
skipSpaces();
|
||||
|
@ -45,7 +45,7 @@ public class EaterIncludesub extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!includesub");
|
||||
skipSpaces();
|
||||
|
@ -45,7 +45,7 @@ public class EaterLegacyDefine extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!define");
|
||||
skipSpaces();
|
||||
|
@ -45,7 +45,7 @@ public class EaterLegacyDefineLong extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!definelong");
|
||||
skipSpaces();
|
||||
|
@ -44,7 +44,7 @@ public class EaterLog extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!log");
|
||||
skipSpaces();
|
||||
|
@ -46,7 +46,7 @@ public class EaterReturn extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!return");
|
||||
skipSpaces();
|
||||
|
@ -45,13 +45,13 @@ public class EaterStartsub extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!startsub");
|
||||
skipSpaces();
|
||||
this.subname = eatAllToEnd();
|
||||
if (this.subname.matches("\\w+") == false)
|
||||
throw EaterException.located("Bad sub name", getStringLocated());
|
||||
throw EaterExceptionLocated.located("Bad sub name", getStringLocated());
|
||||
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ public class EaterTheme extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!theme");
|
||||
skipSpaces();
|
||||
@ -85,7 +85,7 @@ public class EaterTheme extends Eater {
|
||||
|
||||
}
|
||||
|
||||
public final ReadLine getTheme() throws EaterException {
|
||||
public final ReadLine getTheme() throws EaterExceptionLocated {
|
||||
if (from == null) {
|
||||
try {
|
||||
final ReadLine reader = ThemeUtils.getReaderTheme(realName);
|
||||
@ -101,24 +101,24 @@ public class EaterTheme extends Eater {
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
}
|
||||
throw EaterException.located("Cannot load " + realName, getStringLocated());
|
||||
throw EaterExceptionLocated.located("Cannot load " + realName, getStringLocated());
|
||||
}
|
||||
|
||||
if (from.startsWith("<") && from.endsWith(">")) {
|
||||
final ReadLine reader = ThemeUtils.getReaderTheme(realName, from);
|
||||
if (reader == null)
|
||||
throw EaterException.located("No such theme " + realName + " in " + from, getStringLocated());
|
||||
throw EaterExceptionLocated.located("No such theme " + realName + " in " + from, getStringLocated());
|
||||
return reader;
|
||||
} else if (from.startsWith("http://") || from.startsWith("https://")) {
|
||||
final SURL url = SURL.create(ThemeUtils.getFullPath(from, realName));
|
||||
if (url == null)
|
||||
throw EaterException.located("Cannot open URL", getStringLocated());
|
||||
throw EaterExceptionLocated.located("Cannot open URL", getStringLocated());
|
||||
|
||||
try {
|
||||
return PreprocessorUtils.getReaderInclude(url, getStringLocated(), UTF_8);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("Cannot decode charset", getStringLocated());
|
||||
throw EaterExceptionLocated.located("Cannot decode charset", getStringLocated());
|
||||
}
|
||||
}
|
||||
|
||||
@ -126,12 +126,12 @@ public class EaterTheme extends Eater {
|
||||
final FileWithSuffix file = context.getFileWithSuffix(from, realName);
|
||||
final Reader tmp = file.getReader(UTF_8);
|
||||
if (tmp == null)
|
||||
throw EaterException.located("No such theme " + realName, getStringLocated());
|
||||
throw EaterExceptionLocated.located("No such theme " + realName, getStringLocated());
|
||||
|
||||
return ReadLineReader.create(tmp, "theme " + realName);
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("Cannot load " + realName, getStringLocated());
|
||||
throw EaterExceptionLocated.located("Cannot load " + realName, getStringLocated());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public class EaterUndef extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!undef");
|
||||
skipSpaces();
|
||||
|
@ -46,7 +46,7 @@ public class EaterWhile extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
skipSpaces();
|
||||
checkAndEatChar("!while");
|
||||
skipSpaces();
|
||||
|
@ -61,7 +61,7 @@ public class ExecutionContextWhile {
|
||||
}
|
||||
|
||||
public TValue conditionValue(StringLocated location, TContext context, TMemory memory)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
return whileExpression.getResult(location, context, memory);
|
||||
}
|
||||
|
||||
|
@ -79,12 +79,12 @@ public abstract class ExecutionContexts {
|
||||
return allForeachs.pollLast();
|
||||
}
|
||||
|
||||
public boolean areAllIfOk(TContext context, TMemory memory) throws EaterException {
|
||||
for (ExecutionContextIf conditionalContext : allIfs) {
|
||||
if (conditionalContext.conditionIsOkHere() == false) {
|
||||
public boolean areAllIfOk(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
for (ExecutionContextIf conditionalContext : allIfs)
|
||||
if (conditionalContext.conditionIsOkHere() == false)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -95,9 +95,9 @@ public class FunctionsSet {
|
||||
}
|
||||
|
||||
public void executeLegacyDefine(TContext context, TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
if (this.pendingFunction != null)
|
||||
throw EaterException.located("already0048", s);
|
||||
throw EaterExceptionLocated.located("already0048", s);
|
||||
|
||||
final EaterLegacyDefine legacyDefine = new EaterLegacyDefine(s);
|
||||
legacyDefine.analyze(context, memory);
|
||||
@ -107,9 +107,9 @@ public class FunctionsSet {
|
||||
}
|
||||
|
||||
public void executeLegacyDefineLong(TContext context, TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
if (this.pendingFunction != null)
|
||||
throw EaterException.located("already0068", s);
|
||||
throw EaterExceptionLocated.located("already0068", s);
|
||||
|
||||
final EaterLegacyDefineLong legacyDefineLong = new EaterLegacyDefineLong(s);
|
||||
legacyDefineLong.analyze(context, memory);
|
||||
@ -117,9 +117,9 @@ public class FunctionsSet {
|
||||
}
|
||||
|
||||
public void executeDeclareReturnFunction(TContext context, TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
if (this.pendingFunction != null)
|
||||
throw EaterException.located("already0068", s);
|
||||
throw EaterExceptionLocated.located("already0068", s);
|
||||
|
||||
final EaterDeclareReturnFunction declareFunction = new EaterDeclareReturnFunction(s);
|
||||
declareFunction.analyze(context, memory);
|
||||
@ -127,7 +127,7 @@ public class FunctionsSet {
|
||||
final TFunctionSignature declaredSignature = declareFunction.getFunction().getSignature();
|
||||
final TFunction previous = this.functions.get(declaredSignature);
|
||||
if (previous != null && (finalFlag || this.functionsFinal.contains(declaredSignature)))
|
||||
throw EaterException.located("This function is already defined", s);
|
||||
throw EaterExceptionLocated.located("This function is already defined", s);
|
||||
|
||||
if (finalFlag)
|
||||
this.functionsFinal.add(declaredSignature);
|
||||
@ -140,9 +140,9 @@ public class FunctionsSet {
|
||||
}
|
||||
|
||||
public void executeDeclareProcedure(TContext context, TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
if (this.pendingFunction != null)
|
||||
throw EaterException.located("already0068", s);
|
||||
throw EaterExceptionLocated.located("already0068", s);
|
||||
|
||||
final EaterDeclareProcedure declareFunction = new EaterDeclareProcedure(s);
|
||||
declareFunction.analyze(context, memory);
|
||||
@ -150,7 +150,7 @@ public class FunctionsSet {
|
||||
final TFunctionSignature declaredSignature = declareFunction.getFunction().getSignature();
|
||||
final TFunction previous = this.functions.get(declaredSignature);
|
||||
if (previous != null && (finalFlag || this.functionsFinal.contains(declaredSignature)))
|
||||
throw EaterException.located("This function is already defined", s);
|
||||
throw EaterExceptionLocated.located("This function is already defined", s);
|
||||
|
||||
if (finalFlag)
|
||||
this.functionsFinal.add(declaredSignature);
|
||||
|
@ -43,7 +43,7 @@ public class StringEater extends Eater {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated {
|
||||
public void analyze(TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
@ -236,7 +236,7 @@ public class TContext {
|
||||
public Knowledge asKnowledge(final TMemory memory, final LineLocation location) {
|
||||
return new Knowledge() {
|
||||
|
||||
public TValue getVariable(String name) throws EaterException, EaterExceptionLocated {
|
||||
public TValue getVariable(String name) throws EaterExceptionLocated {
|
||||
if (name.contains(".") || name.contains("[")) {
|
||||
final TValue result = fromJson(memory, name, location);
|
||||
return result;
|
||||
@ -250,8 +250,7 @@ public class TContext {
|
||||
};
|
||||
}
|
||||
|
||||
private TValue fromJson(TMemory memory, String name, LineLocation location)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
private TValue fromJson(TMemory memory, String name, LineLocation location) throws EaterExceptionLocated {
|
||||
final String result = applyFunctionsAndVariables(memory, new StringLocated(name, location));
|
||||
try {
|
||||
final JsonValue json = Json.parse(result);
|
||||
@ -284,23 +283,19 @@ public class TContext {
|
||||
final CodeIterator it = buildCodeIterator(memory, body);
|
||||
|
||||
StringLocated s = null;
|
||||
try {
|
||||
while ((s = it.peek()) != null) {
|
||||
final TValue result = executeOneLineSafe(memory, s, ftype, modeSpecial);
|
||||
if (result != null)
|
||||
return result;
|
||||
while ((s = it.peek()) != null) {
|
||||
final TValue result = executeOneLineSafe(memory, s, ftype, modeSpecial);
|
||||
if (result != null)
|
||||
return result;
|
||||
|
||||
it.next();
|
||||
}
|
||||
return null;
|
||||
} catch (EaterException e) {
|
||||
throw e.withLocation(s);
|
||||
it.next();
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
private void executeLinesInternal(TMemory memory, List<StringLocated> body, TFunctionType ftype)
|
||||
throws EaterExceptionLocated, EaterException {
|
||||
throws EaterExceptionLocated {
|
||||
final CodeIterator it = buildCodeIterator(memory, body);
|
||||
|
||||
StringLocated s = null;
|
||||
@ -312,22 +307,20 @@ public class TContext {
|
||||
}
|
||||
|
||||
private TValue executeOneLineSafe(TMemory memory, StringLocated s, TFunctionType ftype, boolean modeSpecial)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
try {
|
||||
this.debug.add(s);
|
||||
return executeOneLineNotSafe(memory, s, ftype, modeSpecial);
|
||||
} catch (Exception e) {
|
||||
if (e instanceof EaterException)
|
||||
throw (EaterException) e;
|
||||
if (e instanceof EaterExceptionLocated)
|
||||
throw (EaterExceptionLocated) e;
|
||||
Logme.error(e);
|
||||
throw EaterException.located("Fatal parsing error", s);
|
||||
throw EaterExceptionLocated.located("Fatal parsing error", s);
|
||||
}
|
||||
}
|
||||
|
||||
private TValue executeOneLineNotSafe(TMemory memory, StringLocated s, TFunctionType ftype, boolean modeSpecial)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
final TLineType type = s.getType();
|
||||
|
||||
if (type == TLineType.INCLUDESUB) {
|
||||
@ -382,11 +375,11 @@ public class TContext {
|
||||
} else if (s.getString().matches("^\\s+$")) {
|
||||
return null;
|
||||
} else {
|
||||
throw EaterException.located("Compile Error " + ftype + " " + type, s);
|
||||
throw EaterExceptionLocated.located("Compile Error " + ftype + " " + type, s);
|
||||
}
|
||||
}
|
||||
|
||||
private void addPlain(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void addPlain(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final StringLocated tmp[] = applyFunctionsAndVariablesInternal(memory, s);
|
||||
if (tmp != null) {
|
||||
if (pendingAdd != null) {
|
||||
@ -399,32 +392,31 @@ public class TContext {
|
||||
}
|
||||
}
|
||||
|
||||
private void simulatePlain(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void simulatePlain(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final StringLocated ignored[] = applyFunctionsAndVariablesInternal(memory, s);
|
||||
}
|
||||
|
||||
private void executeAffectationDefine(TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
private void executeAffectationDefine(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
new EaterAffectationDefine(s).analyze(this, memory);
|
||||
}
|
||||
|
||||
private void executeDumpMemory(TMemory memory, StringLocated s) throws EaterException {
|
||||
private void executeDumpMemory(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterDumpMemory condition = new EaterDumpMemory(s);
|
||||
condition.analyze(this, memory);
|
||||
}
|
||||
|
||||
private void executeAssert(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeAssert(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterAssert condition = new EaterAssert(s);
|
||||
condition.analyze(this, memory);
|
||||
}
|
||||
|
||||
private void executeUndef(TMemory memory, StringLocated s) throws EaterException {
|
||||
private void executeUndef(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterUndef undef = new EaterUndef(s);
|
||||
undef.analyze(this, memory);
|
||||
}
|
||||
|
||||
private StringLocated[] applyFunctionsAndVariablesInternal(TMemory memory, StringLocated located)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
if (memory.isEmpty() && functionsSet.size() == 0)
|
||||
return new StringLocated[] { located };
|
||||
|
||||
@ -442,8 +434,7 @@ public class TContext {
|
||||
|
||||
private String pendingAdd = null;
|
||||
|
||||
public String applyFunctionsAndVariables(TMemory memory, final StringLocated str)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
public String applyFunctionsAndVariables(TMemory memory, final StringLocated str) throws EaterExceptionLocated {
|
||||
// https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore%E2%80%93Horspool_algorithm
|
||||
// https://stackoverflow.com/questions/1326682/java-replacing-multiple-different-substring-in-a-string-at-once-or-in-the-most
|
||||
// https://en.wikipedia.org/wiki/String-searching_algorithm
|
||||
@ -465,7 +456,7 @@ public class TContext {
|
||||
call.getNamedArguments().keySet());
|
||||
final TFunction function = functionsSet.getFunctionSmart(signature);
|
||||
if (function == null)
|
||||
throw EaterException.located("Function not found " + presentFunction, str);
|
||||
throw EaterExceptionLocated.located("Function not found " + presentFunction, str);
|
||||
|
||||
if (function.getFunctionType() == TFunctionType.PROCEDURE) {
|
||||
this.pendingAdd = result.toString();
|
||||
@ -503,11 +494,11 @@ public class TContext {
|
||||
}
|
||||
|
||||
private void executeVoid3(StringLocated location, TMemory memory, TFunction function, EaterFunctionCall call)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
function.executeProcedureInternal(this, memory, location, call.getValues(), call.getNamedArguments());
|
||||
}
|
||||
|
||||
private void executeImport(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeImport(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterImport _import = new EaterImport(s.getTrimmed());
|
||||
_import.analyze(this, memory);
|
||||
|
||||
@ -520,13 +511,13 @@ public class TContext {
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("Cannot import " + e.getMessage(), s);
|
||||
throw EaterExceptionLocated.located("Cannot import " + e.getMessage(), s);
|
||||
}
|
||||
|
||||
throw EaterException.located("Cannot import", s);
|
||||
throw EaterExceptionLocated.located("Cannot import", s);
|
||||
}
|
||||
|
||||
private void executeLog(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeLog(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterLog log = new EaterLog(s.getTrimmed());
|
||||
log.analyze(this, memory);
|
||||
}
|
||||
@ -538,7 +529,7 @@ public class TContext {
|
||||
|
||||
}
|
||||
|
||||
private void executeIncludesub(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeIncludesub(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
ImportedFiles saveImportedFiles = null;
|
||||
try {
|
||||
final EaterIncludesub include = new EaterIncludesub(s.getTrimmed());
|
||||
@ -556,7 +547,7 @@ public class TContext {
|
||||
this.importedFiles = this.importedFiles.withCurrentDir(f2.getParentFile());
|
||||
final Reader reader = f2.getReader(charset);
|
||||
if (reader == null)
|
||||
throw EaterException.located("cannot include " + what, s);
|
||||
throw EaterExceptionLocated.located("cannot include " + what, s);
|
||||
|
||||
try {
|
||||
ReadLine readerline = ReadLineReader.create(reader, what, s.getLocation());
|
||||
@ -568,14 +559,14 @@ public class TContext {
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("cannot include " + what, s);
|
||||
throw EaterExceptionLocated.located("cannot include " + what, s);
|
||||
}
|
||||
}
|
||||
if (sub == null)
|
||||
sub = subs.get(what);
|
||||
|
||||
if (sub == null)
|
||||
throw EaterException.located("cannot include " + what, s);
|
||||
throw EaterExceptionLocated.located("cannot include " + what, s);
|
||||
|
||||
executeLinesInternal(memory, sub.lines(), null);
|
||||
} finally {
|
||||
@ -585,7 +576,7 @@ public class TContext {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeIncludeDef(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeIncludeDef(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterIncludeDef include = new EaterIncludeDef(s.getTrimmed());
|
||||
include.analyze(this, memory);
|
||||
final String definitionName = include.getLocation();
|
||||
@ -604,7 +595,7 @@ public class TContext {
|
||||
} while (true);
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("" + e, s);
|
||||
throw EaterExceptionLocated.located("" + e, s);
|
||||
} finally {
|
||||
try {
|
||||
reader2.close();
|
||||
@ -614,12 +605,12 @@ public class TContext {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeTheme(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeTheme(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterTheme eater = new EaterTheme(s.getTrimmed(), importedFiles);
|
||||
eater.analyze(this, memory);
|
||||
final ReadLine reader = eater.getTheme();
|
||||
if (reader == null)
|
||||
throw EaterException.located("No such theme " + eater.getName(), s);
|
||||
throw EaterExceptionLocated.located("No such theme " + eater.getName(), s);
|
||||
|
||||
try {
|
||||
final List<StringLocated> body = new ArrayList<>();
|
||||
@ -633,7 +624,7 @@ public class TContext {
|
||||
} while (true);
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("Error reading theme " + e, s);
|
||||
throw EaterExceptionLocated.located("Error reading theme " + e, s);
|
||||
} finally {
|
||||
try {
|
||||
reader.close();
|
||||
@ -643,7 +634,7 @@ public class TContext {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeInclude(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeInclude(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterInclude include = new EaterInclude(s.getTrimmed());
|
||||
include.analyze(this, memory);
|
||||
String location = include.getWhat();
|
||||
@ -661,7 +652,7 @@ public class TContext {
|
||||
if (location.startsWith("http://") || location.startsWith("https://")) {
|
||||
final SURL url = SURL.create(location);
|
||||
if (url == null)
|
||||
throw EaterException.located("Cannot open URL", s);
|
||||
throw EaterExceptionLocated.located("Cannot open URL", s);
|
||||
|
||||
reader = PreprocessorUtils.getReaderIncludeUrl(url, s, suf, charset);
|
||||
} else if (location.startsWith("<") && location.endsWith(">")) {
|
||||
@ -677,14 +668,14 @@ public class TContext {
|
||||
return;
|
||||
|
||||
if (strategy == PreprocessorIncludeStrategy.ONCE && filesUsedCurrent.contains(f2))
|
||||
throw EaterException.located("This file has already been included", s);
|
||||
throw EaterExceptionLocated.located("This file has already been included", s);
|
||||
|
||||
if (StartDiagramExtractReader.containsStartDiagram(f2, s, charset)) {
|
||||
reader = StartDiagramExtractReader.build(f2, s, charset);
|
||||
} else {
|
||||
final Reader tmp = f2.getReader(charset);
|
||||
if (tmp == null)
|
||||
throw EaterException.located("Cannot include file", s);
|
||||
throw EaterExceptionLocated.located("Cannot include file", s);
|
||||
|
||||
reader = ReadLineReader.create(tmp, location, s.getLocation());
|
||||
}
|
||||
@ -713,7 +704,7 @@ public class TContext {
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.located("cannot include " + e, s);
|
||||
throw EaterExceptionLocated.located("cannot include " + e, s);
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
@ -724,7 +715,7 @@ public class TContext {
|
||||
}
|
||||
}
|
||||
|
||||
throw EaterException.located("cannot include " + location, s);
|
||||
throw EaterExceptionLocated.located("cannot include " + location, s);
|
||||
}
|
||||
|
||||
public boolean isLegacyDefine(String functionName) {
|
||||
|
@ -50,10 +50,10 @@ public interface TFunction {
|
||||
public TFunctionType getFunctionType();
|
||||
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> args,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated;
|
||||
Map<String, TValue> named) throws EaterExceptionLocated;
|
||||
|
||||
public void executeProcedureInternal(TContext context, TMemory memory, StringLocated location, List<TValue> args,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated;
|
||||
Map<String, TValue> named) throws EaterExceptionLocated;
|
||||
|
||||
public boolean isUnquoted();
|
||||
|
||||
|
@ -133,7 +133,7 @@ public class TFunctionImpl implements TFunction {
|
||||
|
||||
@Override
|
||||
public void executeProcedureInternal(TContext context, TMemory memory, StringLocated location, List<TValue> args,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
if (functionType != TFunctionType.PROCEDURE && functionType != TFunctionType.LEGACY_DEFINELONG)
|
||||
throw new IllegalStateException();
|
||||
|
||||
@ -143,23 +143,24 @@ public class TFunctionImpl implements TFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> args,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
if (functionType == TFunctionType.LEGACY_DEFINE)
|
||||
return executeReturnLegacyDefine(location.getLocation(), context, memory, args);
|
||||
|
||||
if (functionType != TFunctionType.RETURN_FUNCTION)
|
||||
throw EaterException.unlocated("Illegal call here. Is there a return directive in your function?", location);
|
||||
throw EaterExceptionLocated.unlocated("Illegal call here. Is there a return directive in your function?",
|
||||
location);
|
||||
|
||||
final TMemory copy = getNewMemory(memory, args, named);
|
||||
final TValue result = context.executeLines(copy, body, TFunctionType.RETURN_FUNCTION, true);
|
||||
if (result == null)
|
||||
throw EaterException.unlocated("No return directive found in your function", location);
|
||||
throw EaterExceptionLocated.unlocated("No return directive found in your function", location);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private TValue executeReturnLegacyDefine(LineLocation location, TContext context, TMemory memory, List<TValue> args)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
if (legacyDefinition == null)
|
||||
throw new IllegalStateException();
|
||||
|
||||
|
@ -45,7 +45,7 @@ public interface TMemory {
|
||||
public TValue getVariable(String varname);
|
||||
|
||||
public void putVariable(String varname, TValue value, TVariableScope scope, StringLocated location)
|
||||
throws EaterException;
|
||||
throws EaterExceptionLocated;
|
||||
|
||||
public void removeVariable(String varname);
|
||||
|
||||
@ -59,7 +59,7 @@ public interface TMemory {
|
||||
|
||||
public ExecutionContextIf peekIf();
|
||||
|
||||
public boolean areAllIfOk(TContext context, TMemory memory) throws EaterException;
|
||||
public boolean areAllIfOk(TContext context, TMemory memory) throws EaterExceptionLocated;
|
||||
|
||||
public void addIf(ExecutionContextIf context);
|
||||
|
||||
|
@ -73,10 +73,10 @@ public class TMemoryGlobal extends ExecutionContexts implements TMemory {
|
||||
|
||||
@Override
|
||||
public void putVariable(String varname, TValue value, TVariableScope scope, StringLocated location)
|
||||
throws EaterException {
|
||||
throws EaterExceptionLocated {
|
||||
Log.info("[MemGlobal] Setting " + varname);
|
||||
if (scope == TVariableScope.LOCAL)
|
||||
throw EaterException.unlocated("Cannot use local variable here", location);
|
||||
throw EaterExceptionLocated.unlocated("Cannot use local variable here", location);
|
||||
|
||||
this.globalVariables.put(varname, value);
|
||||
this.variables.add(varname);
|
||||
|
@ -79,7 +79,7 @@ public class TMemoryLocal extends ExecutionContexts implements TMemory {
|
||||
|
||||
@Override
|
||||
public void putVariable(String varname, TValue value, TVariableScope scope, StringLocated location)
|
||||
throws EaterException {
|
||||
throws EaterExceptionLocated {
|
||||
if (scope == TVariableScope.GLOBAL) {
|
||||
memoryGlobal.putVariable(varname, value, scope, location);
|
||||
return;
|
||||
|
@ -57,7 +57,7 @@ public class TimLoader {
|
||||
this.context = new TContext(importedFiles, defines, charset, definitionsContainer);
|
||||
try {
|
||||
defines.copyTo(global, location);
|
||||
} catch (EaterException e) {
|
||||
} catch (EaterExceptionLocated e) {
|
||||
Logme.error(e);
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,6 @@ import net.sourceforge.plantuml.json.JsonValue;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.expression.TValue;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public class VariableManager {
|
||||
|
||||
@ -54,7 +53,7 @@ public class VariableManager {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public int replaceVariables(String str, int i, StringBuilder result) throws EaterException, EaterExceptionLocated {
|
||||
public int replaceVariables(String str, int i, StringBuilder result) throws EaterExceptionLocated {
|
||||
final String presentVariable = getVarnameAt(str, i);
|
||||
if (result.toString().endsWith("##"))
|
||||
result.setLength(result.length() - 2);
|
||||
@ -81,8 +80,7 @@ public class VariableManager {
|
||||
return i;
|
||||
}
|
||||
|
||||
private int replaceJson(JsonValue jsonValue, String str, int i, StringBuilder result)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
private int replaceJson(JsonValue jsonValue, String str, int i, StringBuilder result) throws EaterExceptionLocated {
|
||||
while (i < str.length()) {
|
||||
final char n = str.charAt(i);
|
||||
if (n == '.') {
|
||||
@ -120,11 +118,11 @@ public class VariableManager {
|
||||
} else if (jsonValue instanceof JsonObject) {
|
||||
jsonValue = ((JsonObject) jsonValue).get(nbString);
|
||||
} else {
|
||||
throw EaterException.unlocated("Major parsing error", location);
|
||||
throw EaterExceptionLocated.unlocated("Major parsing error", location);
|
||||
}
|
||||
|
||||
if (jsonValue == null)
|
||||
throw EaterException.unlocated("Data parsing error", location);
|
||||
throw EaterExceptionLocated.unlocated("Data parsing error", location);
|
||||
|
||||
i++;
|
||||
} else {
|
||||
|
@ -34,14 +34,13 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.tim.expression;
|
||||
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TFunction;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
|
||||
public interface Knowledge {
|
||||
|
||||
public TValue getVariable(String name) throws EaterException, EaterExceptionLocated;
|
||||
public TValue getVariable(String name) throws EaterExceptionLocated;
|
||||
|
||||
public TFunction getFunction(TFunctionSignature signature);
|
||||
|
||||
|
@ -41,7 +41,6 @@ import java.util.Deque;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunction;
|
||||
@ -54,7 +53,7 @@ public class ReversePolishInterpretor {
|
||||
private final boolean trace = false;
|
||||
|
||||
public ReversePolishInterpretor(StringLocated location, TokenStack queue, Knowledge knowledge, TMemory memory,
|
||||
TContext context) throws EaterException, EaterExceptionLocated {
|
||||
TContext context) throws EaterExceptionLocated {
|
||||
|
||||
final Deque<TValue> stack = new ArrayDeque<>();
|
||||
if (trace)
|
||||
@ -73,45 +72,45 @@ public class ReversePolishInterpretor {
|
||||
final TValue v2 = stack.removeFirst();
|
||||
final TValue v1 = stack.removeFirst();
|
||||
final TokenOperator op = token.getTokenOperator();
|
||||
if (op == null)
|
||||
throw EaterException.unlocated("bad op", location);
|
||||
|
||||
if (op == null)
|
||||
throw EaterExceptionLocated.unlocated("bad op", location);
|
||||
|
||||
final TValue tmp = op.operate(v1, v2);
|
||||
stack.addFirst(tmp);
|
||||
} else if (token.getTokenType() == TokenType.OPEN_PAREN_FUNC) {
|
||||
final int nb = Integer.parseInt(token.getSurface());
|
||||
final Token token2 = it.nextToken();
|
||||
if (token2.getTokenType() != TokenType.FUNCTION_NAME)
|
||||
throw EaterException.unlocated("rpn43", location);
|
||||
|
||||
if (token2.getTokenType() != TokenType.FUNCTION_NAME)
|
||||
throw EaterExceptionLocated.unlocated("rpn43", location);
|
||||
|
||||
if (trace)
|
||||
System.err.println("token2=" + token2);
|
||||
final TFunction function = knowledge.getFunction(new TFunctionSignature(token2.getSurface(), nb));
|
||||
if (trace)
|
||||
System.err.println("function=" + function);
|
||||
if (function == null)
|
||||
throw EaterException.unlocated("Unknown built-in function " + token2.getSurface(), location);
|
||||
|
||||
if (function.canCover(nb, Collections.<String>emptySet()) == false)
|
||||
throw EaterException.unlocated(
|
||||
if (function == null)
|
||||
throw EaterExceptionLocated.unlocated("Unknown built-in function " + token2.getSurface(), location);
|
||||
|
||||
if (function.canCover(nb, Collections.<String>emptySet()) == false)
|
||||
throw EaterExceptionLocated.unlocated(
|
||||
"Bad number of arguments for " + function.getSignature().getFunctionName(), location);
|
||||
|
||||
|
||||
final List<TValue> args = new ArrayList<>();
|
||||
for (int i = 0; i < nb; i++)
|
||||
for (int i = 0; i < nb; i++)
|
||||
args.add(0, stack.removeFirst());
|
||||
|
||||
|
||||
if (trace)
|
||||
System.err.println("args=" + args);
|
||||
if (location == null)
|
||||
throw EaterException.unlocated("rpn44", location);
|
||||
|
||||
if (location == null)
|
||||
throw EaterExceptionLocated.unlocated("rpn44", location);
|
||||
|
||||
final TValue r = function.executeReturnFunction(context, memory, location, args,
|
||||
Collections.<String, TValue>emptyMap());
|
||||
if (trace)
|
||||
System.err.println("r=" + r);
|
||||
stack.addFirst(r);
|
||||
} else {
|
||||
throw EaterException.unlocated("rpn41", location);
|
||||
throw EaterExceptionLocated.unlocated("rpn41", location);
|
||||
}
|
||||
}
|
||||
result = stack.removeFirst();
|
||||
|
@ -38,7 +38,6 @@ import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
// https://en.wikipedia.org/wiki/Shunting-yard_algorithm
|
||||
@ -59,8 +58,7 @@ public class ShuntingYard {
|
||||
System.err.println("");
|
||||
}
|
||||
|
||||
public ShuntingYard(TokenIterator it, Knowledge knowledge, StringLocated location)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
public ShuntingYard(TokenIterator it, Knowledge knowledge, StringLocated location) throws EaterExceptionLocated {
|
||||
|
||||
while (it.hasMoreTokens()) {
|
||||
final Token token = it.nextToken();
|
||||
@ -76,7 +74,7 @@ public class ShuntingYard {
|
||||
final TValue variable = knowledge.getVariable(name);
|
||||
if (variable == null) {
|
||||
if (isVariableName(name) == false)
|
||||
throw EaterException.unlocated("Parsing syntax error about " + name, location);
|
||||
throw EaterExceptionLocated.unlocated("Parsing syntax error about " + name, location);
|
||||
|
||||
ouputQueue.add(new Token(name, TokenType.QUOTED_STRING, null));
|
||||
} else {
|
||||
|
@ -44,7 +44,6 @@ import java.util.Map;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.Eater;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TMemory;
|
||||
@ -87,7 +86,7 @@ public class TokenStack {
|
||||
return result;
|
||||
}
|
||||
|
||||
static public TokenStack eatUntilCloseParenthesisOrComma(Eater eater) throws EaterException {
|
||||
static public TokenStack eatUntilCloseParenthesisOrComma(Eater eater) throws EaterExceptionLocated {
|
||||
final TokenStack result = new TokenStack();
|
||||
int level = 0;
|
||||
Token lastToken = null;
|
||||
@ -95,7 +94,7 @@ public class TokenStack {
|
||||
eater.skipSpaces();
|
||||
final char ch = eater.peekChar();
|
||||
if (ch == 0)
|
||||
throw EaterException.unlocated("until001", eater.getStringLocated());
|
||||
throw EaterExceptionLocated.unlocated("until001", eater.getStringLocated());
|
||||
|
||||
if (level == 0 && (ch == ',' || ch == ')'))
|
||||
return result;
|
||||
@ -113,12 +112,13 @@ public class TokenStack {
|
||||
}
|
||||
}
|
||||
|
||||
static public void eatUntilCloseParenthesisOrComma(TokenIterator it, StringLocated location) throws EaterException {
|
||||
static public void eatUntilCloseParenthesisOrComma(TokenIterator it, StringLocated location)
|
||||
throws EaterExceptionLocated {
|
||||
int level = 0;
|
||||
while (true) {
|
||||
final Token ch = it.peekToken();
|
||||
if (ch == null)
|
||||
throw EaterException.unlocated("until002", location);
|
||||
throw EaterExceptionLocated.unlocated("until002", location);
|
||||
|
||||
final TokenType typech = ch.getTokenType();
|
||||
if (level == 0 && (typech == TokenType.COMMA || typech == TokenType.CLOSE_PAREN_MATH)
|
||||
@ -135,7 +135,7 @@ public class TokenStack {
|
||||
}
|
||||
}
|
||||
|
||||
private int countFunctionArg(TokenIterator it, StringLocated location) throws EaterException {
|
||||
private int countFunctionArg(TokenIterator it, StringLocated location) throws EaterExceptionLocated {
|
||||
// return 42;
|
||||
final TokenType type1 = it.peekToken().getTokenType();
|
||||
if (type1 == TokenType.CLOSE_PAREN_MATH || type1 == TokenType.CLOSE_PAREN_FUNC)
|
||||
@ -151,13 +151,13 @@ public class TokenStack {
|
||||
else if (type == TokenType.COMMA)
|
||||
result++;
|
||||
else
|
||||
throw EaterException.unlocated("count13", location);
|
||||
throw EaterExceptionLocated.unlocated("count13", location);
|
||||
|
||||
}
|
||||
throw EaterException.unlocated("count12", location);
|
||||
throw EaterExceptionLocated.unlocated("count12", location);
|
||||
}
|
||||
|
||||
public void guessFunctions(StringLocated location) throws EaterException {
|
||||
public void guessFunctions(StringLocated location) throws EaterExceptionLocated {
|
||||
final Deque<Integer> open = new ArrayDeque<>();
|
||||
final Map<Integer, Integer> parens = new HashMap<Integer, Integer>();
|
||||
for (int i = 0; i < tokens.size(); i++) {
|
||||
@ -210,8 +210,7 @@ public class TokenStack {
|
||||
return new InternalIterator();
|
||||
}
|
||||
|
||||
public TValue getResult(StringLocated location, TContext context, TMemory memory)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
public TValue getResult(StringLocated location, TContext context, TMemory memory) throws EaterExceptionLocated {
|
||||
final Knowledge knowledge = context.asKnowledge(memory, location.getLocation());
|
||||
final TokenStack tmp = withoutSpace();
|
||||
tmp.guessFunctions(location);
|
||||
|
@ -36,10 +36,10 @@ package net.sourceforge.plantuml.tim.expression;
|
||||
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.Eater;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
public enum TokenType {
|
||||
// ::remove folder when __HAXE__
|
||||
// ::remove folder when __HAXE__
|
||||
QUOTED_STRING, JSON_DATA, OPERATOR, OPEN_PAREN_MATH, COMMA, CLOSE_PAREN_MATH, NUMBER, PLAIN_TEXT, SPACES,
|
||||
FUNCTION_NAME, OPEN_PAREN_FUNC, CLOSE_PAREN_FUNC;
|
||||
|
||||
@ -77,7 +77,8 @@ public enum TokenType {
|
||||
return result;
|
||||
}
|
||||
|
||||
final static public Token eatOneToken(Token lastToken, Eater eater, boolean manageColon) throws EaterException {
|
||||
final static public Token eatOneToken(Token lastToken, Eater eater, boolean manageColon)
|
||||
throws EaterExceptionLocated {
|
||||
char ch = eater.peekChar();
|
||||
if (ch == 0)
|
||||
return null;
|
||||
@ -121,7 +122,7 @@ public enum TokenType {
|
||||
return true;
|
||||
}
|
||||
|
||||
static private String eatAndGetTokenPlainText(Eater eater) throws EaterException {
|
||||
static private String eatAndGetTokenPlainText(Eater eater) throws EaterExceptionLocated {
|
||||
final StringBuilder result = new StringBuilder();
|
||||
while (true) {
|
||||
final char ch = eater.peekChar();
|
||||
|
@ -35,7 +35,6 @@
|
||||
package net.sourceforge.plantuml.tim.iterator;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
public abstract class AbstractCodeIterator implements CodeIterator {
|
||||
@ -47,7 +46,7 @@ public abstract class AbstractCodeIterator implements CodeIterator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void next() throws EaterException, EaterExceptionLocated {
|
||||
public void next() throws EaterExceptionLocated {
|
||||
source.next();
|
||||
}
|
||||
|
||||
@ -57,7 +56,8 @@ public abstract class AbstractCodeIterator implements CodeIterator {
|
||||
}
|
||||
|
||||
@Override
|
||||
final public void jumpToCodePosition(CodePosition newPosition, StringLocated location) throws EaterException {
|
||||
final public void jumpToCodePosition(CodePosition newPosition, StringLocated location)
|
||||
throws EaterExceptionLocated {
|
||||
source.jumpToCodePosition(newPosition, location);
|
||||
}
|
||||
|
||||
|
@ -35,18 +35,17 @@
|
||||
package net.sourceforge.plantuml.tim.iterator;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
public interface CodeIterator {
|
||||
// ::remove folder when __HAXE__
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated;
|
||||
public StringLocated peek() throws EaterExceptionLocated;
|
||||
|
||||
public void next() throws EaterException, EaterExceptionLocated;
|
||||
public void next() throws EaterExceptionLocated;
|
||||
|
||||
public CodePosition getCodePosition();
|
||||
|
||||
public void jumpToCodePosition(CodePosition newPosition, StringLocated location) throws EaterException;
|
||||
public void jumpToCodePosition(CodePosition newPosition, StringLocated location) throws EaterExceptionLocated;
|
||||
|
||||
}
|
||||
|
@ -40,7 +40,6 @@ import net.sourceforge.plantuml.json.ParseException;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterAffectation;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TMemory;
|
||||
@ -59,7 +58,7 @@ public class CodeIteratorAffectation extends AbstractCodeIterator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
if (result == null) {
|
||||
@ -75,16 +74,16 @@ public class CodeIteratorAffectation extends AbstractCodeIterator {
|
||||
}
|
||||
}
|
||||
|
||||
private void doAffectation(StringLocated result) throws EaterException, EaterExceptionLocated {
|
||||
private void doAffectation(StringLocated result) throws EaterExceptionLocated {
|
||||
int lastLocation = -1;
|
||||
for (int i = 0; i < 9999; i++)
|
||||
try {
|
||||
this.executeAffectation(context, memory, result);
|
||||
return;
|
||||
} catch (ParseException e) {
|
||||
if (e.getColumn() <= lastLocation)
|
||||
throw EaterException.located("Error in JSON format", result);
|
||||
|
||||
if (e.getColumn() <= lastLocation)
|
||||
throw EaterExceptionLocated.located("Error in JSON format", result);
|
||||
|
||||
lastLocation = e.getColumn();
|
||||
next();
|
||||
final StringLocated forward = source.peek();
|
||||
@ -93,7 +92,7 @@ public class CodeIteratorAffectation extends AbstractCodeIterator {
|
||||
}
|
||||
|
||||
private void executeAffectation(TContext context, TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
throws EaterExceptionLocated {
|
||||
new EaterAffectation(s).analyze(context, memory);
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,6 @@ import java.util.List;
|
||||
import net.sourceforge.plantuml.json.JsonValue;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterForeach;
|
||||
import net.sourceforge.plantuml.tim.ExecutionContextForeach;
|
||||
@ -61,7 +60,7 @@ public class CodeIteratorForeach extends AbstractCodeIterator {
|
||||
this.logs = logs;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
int level = 0;
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
@ -91,7 +90,7 @@ public class CodeIteratorForeach extends AbstractCodeIterator {
|
||||
} else if (result.getType() == TLineType.ENDFOREACH) {
|
||||
logs.add(result);
|
||||
if (foreach == null)
|
||||
throw EaterException.located("No foreach related to this endforeach", result);
|
||||
throw EaterExceptionLocated.located("No foreach related to this endforeach", result);
|
||||
|
||||
foreach.inc();
|
||||
if (foreach.isSkipMe()) {
|
||||
@ -108,7 +107,7 @@ public class CodeIteratorForeach extends AbstractCodeIterator {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeForeach(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeForeach(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterForeach condition = new EaterForeach(s);
|
||||
condition.analyze(context, memory);
|
||||
final ExecutionContextForeach foreach = ExecutionContextForeach.fromValue(condition.getVarname(),
|
||||
@ -122,7 +121,7 @@ public class CodeIteratorForeach extends AbstractCodeIterator {
|
||||
}
|
||||
|
||||
private void setLoopVariable(TMemory memory, ExecutionContextForeach foreach, StringLocated position)
|
||||
throws EaterException {
|
||||
throws EaterExceptionLocated {
|
||||
final JsonValue first = foreach.getJsonArray().get(foreach.currentIndex());
|
||||
memory.putVariable(foreach.getVarname(), TValue.fromJson(first), TVariableScope.GLOBAL, position);
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.List;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterElseIf;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterIf;
|
||||
import net.sourceforge.plantuml.tim.EaterIfdef;
|
||||
@ -61,7 +60,7 @@ public class CodeIteratorIf extends AbstractCodeIterator {
|
||||
this.logs = logs;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
if (result == null) {
|
||||
@ -107,19 +106,17 @@ public class CodeIteratorIf extends AbstractCodeIterator {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeIf(TContext context, TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
private void executeIf(TContext context, TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterIf condition = new EaterIf(s);
|
||||
condition.analyze(context, memory);
|
||||
final boolean isTrue = condition.isTrue();
|
||||
memory.addIf(ExecutionContextIf.fromValue(isTrue));
|
||||
}
|
||||
|
||||
private void executeElseIf(TContext context, TMemory memory, StringLocated s)
|
||||
throws EaterException, EaterExceptionLocated {
|
||||
private void executeElseIf(TContext context, TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final ExecutionContextIf poll = (ExecutionContextIf) memory.peekIf();
|
||||
if (poll == null)
|
||||
throw EaterException.located("No if related to this else", s);
|
||||
throw EaterExceptionLocated.located("No if related to this else", s);
|
||||
|
||||
poll.enteringElseIf();
|
||||
if (poll.hasBeenBurn() == false) {
|
||||
@ -132,32 +129,32 @@ public class CodeIteratorIf extends AbstractCodeIterator {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeIfdef(TContext context, TMemory memory, StringLocated s) throws EaterException {
|
||||
private void executeIfdef(TContext context, TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterIfdef condition = new EaterIfdef(s);
|
||||
condition.analyze(context, memory);
|
||||
final boolean isTrue = condition.isTrue(context, memory);
|
||||
memory.addIf(ExecutionContextIf.fromValue(isTrue));
|
||||
}
|
||||
|
||||
private void executeIfndef(TContext context, TMemory memory, StringLocated s) throws EaterException {
|
||||
private void executeIfndef(TContext context, TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterIfndef condition = new EaterIfndef(s);
|
||||
condition.analyze(context, memory);
|
||||
final boolean isTrue = condition.isTrue(context, memory);
|
||||
memory.addIf(ExecutionContextIf.fromValue(isTrue));
|
||||
}
|
||||
|
||||
private void executeElse(TContext context, TMemory memory, StringLocated s) throws EaterException {
|
||||
private void executeElse(TContext context, TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final ExecutionContextIf poll = (ExecutionContextIf) memory.peekIf();
|
||||
if (poll == null)
|
||||
throw EaterException.located("No if related to this else", s);
|
||||
throw EaterExceptionLocated.located("No if related to this else", s);
|
||||
|
||||
poll.nowInElse();
|
||||
}
|
||||
|
||||
private void executeEndif(TContext context, TMemory memory, StringLocated s) throws EaterException {
|
||||
private void executeEndif(TContext context, TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final ExecutionContextIf poll = (ExecutionContextIf) memory.pollIf();
|
||||
if (poll == null)
|
||||
throw EaterException.located("No if related to this endif", s);
|
||||
throw EaterExceptionLocated.located("No if related to this endif", s);
|
||||
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ package net.sourceforge.plantuml.tim.iterator;
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
public class CodeIteratorImpl implements CodeIterator {
|
||||
|
||||
@ -89,10 +89,10 @@ public class CodeIteratorImpl implements CodeIterator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void jumpToCodePosition(CodePosition newPosition, StringLocated location) throws EaterException {
|
||||
public void jumpToCodePosition(CodePosition newPosition, StringLocated location) throws EaterExceptionLocated {
|
||||
this.countJump++;
|
||||
if (this.countJump > 999)
|
||||
throw EaterException.unlocated("Infinite loop?", location);
|
||||
throw EaterExceptionLocated.unlocated("Infinite loop?", location);
|
||||
|
||||
final Position pos = (Position) newPosition;
|
||||
this.current = pos.pos;
|
||||
|
@ -35,7 +35,6 @@
|
||||
package net.sourceforge.plantuml.tim.iterator;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
public class CodeIteratorInnerComment extends AbstractCodeIterator {
|
||||
@ -44,7 +43,7 @@ public class CodeIteratorInnerComment extends AbstractCodeIterator {
|
||||
super(source);
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
final StringLocated result = source.peek();
|
||||
if (result == null) {
|
||||
return null;
|
||||
|
@ -38,7 +38,6 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.FunctionsSet;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
@ -61,7 +60,7 @@ public class CodeIteratorLegacyDefine extends AbstractCodeIterator {
|
||||
this.memory = memory;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
if (result == null) {
|
||||
|
@ -38,7 +38,6 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
public class CodeIteratorLongComment extends AbstractCodeIterator {
|
||||
@ -50,7 +49,7 @@ public class CodeIteratorLongComment extends AbstractCodeIterator {
|
||||
this.logs = logs;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
while (true) {
|
||||
if (source.peek() == null) {
|
||||
return null;
|
||||
|
@ -38,7 +38,6 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.FunctionsSet;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
@ -62,7 +61,7 @@ public class CodeIteratorProcedure extends AbstractCodeIterator {
|
||||
this.memory = memory;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
if (result == null) {
|
||||
|
@ -38,7 +38,6 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.FunctionsSet;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
@ -62,7 +61,7 @@ public class CodeIteratorReturnFunction extends AbstractCodeIterator {
|
||||
this.memory = memory;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
if (result == null) {
|
||||
|
@ -38,7 +38,6 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
|
||||
public class CodeIteratorShortComment extends AbstractCodeIterator {
|
||||
@ -50,7 +49,7 @@ public class CodeIteratorShortComment extends AbstractCodeIterator {
|
||||
this.logs = logs;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
if (result == null) {
|
||||
|
@ -40,7 +40,6 @@ import java.util.Map;
|
||||
import net.sourceforge.plantuml.preproc.Sub;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterStartsub;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
@ -66,7 +65,7 @@ public class CodeIteratorSub extends AbstractCodeIterator {
|
||||
return Collections.unmodifiableMap(subs);
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
if (readingInProgress != null)
|
||||
return readingInProgress.peek();
|
||||
|
||||
@ -83,7 +82,7 @@ public class CodeIteratorSub extends AbstractCodeIterator {
|
||||
StringLocated s = null;
|
||||
while ((s = source.peek()) != null) {
|
||||
if (s.getType() == TLineType.STARTSUB) {
|
||||
throw EaterException.located("Cannot nest sub", result);
|
||||
throw EaterExceptionLocated.located("Cannot nest sub", result);
|
||||
} else if (s.getType() == TLineType.ENDSUB) {
|
||||
source.next();
|
||||
readingInProgress = new CodeIteratorImpl(created.lines());
|
||||
@ -101,7 +100,7 @@ public class CodeIteratorSub extends AbstractCodeIterator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void next() throws EaterException, EaterExceptionLocated {
|
||||
public void next() throws EaterExceptionLocated {
|
||||
if (readingInProgress == null) {
|
||||
source.next();
|
||||
return;
|
||||
|
@ -38,7 +38,6 @@ import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.text.TLineType;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterWhile;
|
||||
import net.sourceforge.plantuml.tim.ExecutionContextWhile;
|
||||
@ -60,7 +59,7 @@ public class CodeIteratorWhile extends AbstractCodeIterator {
|
||||
this.logs = logs;
|
||||
}
|
||||
|
||||
public StringLocated peek() throws EaterException, EaterExceptionLocated {
|
||||
public StringLocated peek() throws EaterExceptionLocated {
|
||||
int level = 0;
|
||||
while (true) {
|
||||
final StringLocated result = source.peek();
|
||||
@ -90,7 +89,7 @@ public class CodeIteratorWhile extends AbstractCodeIterator {
|
||||
} else if (result.getType() == TLineType.ENDWHILE) {
|
||||
logs.add(result);
|
||||
if (currentWhile == null)
|
||||
throw EaterException.located("No while related to this endwhile", result);
|
||||
throw EaterExceptionLocated.located("No while related to this endwhile", result);
|
||||
|
||||
final TValue value = currentWhile.conditionValue(result, context, memory);
|
||||
if (value.toBoolean())
|
||||
@ -106,7 +105,7 @@ public class CodeIteratorWhile extends AbstractCodeIterator {
|
||||
}
|
||||
}
|
||||
|
||||
private void executeWhile(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated {
|
||||
private void executeWhile(TMemory memory, StringLocated s) throws EaterExceptionLocated {
|
||||
final EaterWhile condition = new EaterWhile(s);
|
||||
condition.analyze(context, memory);
|
||||
final TokenStack whileExpression = condition.getWhileExpression();
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class AlwaysFalse extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
return TValue.fromBoolean(false);
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class AlwaysTrue extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
return TValue.fromBoolean(true);
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunction;
|
||||
@ -60,13 +59,13 @@ public class CallUserFunction extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String fname = values.get(0).toString();
|
||||
final List<TValue> args = values.subList(1, values.size());
|
||||
final TFunctionSignature signature = new TFunctionSignature(fname, args.size());
|
||||
final TFunction func = context.getFunctionSmart(signature);
|
||||
if (func == null)
|
||||
throw EaterException.unlocated("Cannot find void function " + fname, location);
|
||||
throw EaterExceptionLocated.unlocated("Cannot find void function " + fname, location);
|
||||
|
||||
return func.executeReturnFunction(context, memory, location, args, named);
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class Chr extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
try {
|
||||
final String value = String.valueOf(Character.toChars(values.get(0).toInt()));
|
||||
return TValue.fromString(value);
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.klimt.color.HColor;
|
||||
import net.sourceforge.plantuml.klimt.color.HColorSet;
|
||||
import net.sourceforge.plantuml.klimt.color.NoSuchColorException;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -63,7 +62,7 @@ public class Darken extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String colorString = values.get(0).toString();
|
||||
final int ratio = values.get(1).toInt();
|
||||
try {
|
||||
@ -71,7 +70,7 @@ public class Darken extends SimpleReturnFunction {
|
||||
color = color.darken(ratio);
|
||||
return TValue.fromString(color.asString());
|
||||
} catch (NoSuchColorException e) {
|
||||
throw EaterException.located("No such color", location);
|
||||
throw EaterExceptionLocated.located("No such color", location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -61,7 +60,7 @@ public class DateFunction extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
if (values.size() == 0)
|
||||
return TValue.fromString(new Date().toString());
|
||||
|
||||
@ -71,11 +70,11 @@ public class DateFunction extends SimpleReturnFunction {
|
||||
now = 1000L * values.get(1).toInt();
|
||||
else
|
||||
now = System.currentTimeMillis();
|
||||
|
||||
|
||||
try {
|
||||
return TValue.fromString(new SimpleDateFormat(format).format(now));
|
||||
} catch (Exception e) {
|
||||
throw EaterException.unlocated("Bad date pattern", location);
|
||||
throw EaterExceptionLocated.unlocated("Bad date pattern", location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class Dec2hex extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
try {
|
||||
return TValue.fromString("" + Integer.toHexString(values.get(0).toInt()));
|
||||
} catch (Throwable t) {
|
||||
|
@ -40,7 +40,6 @@ import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.preproc.Defines;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -66,7 +65,7 @@ public class Dirpath extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
if (value == null)
|
||||
return TValue.fromString("");
|
||||
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.StringEater;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
@ -60,7 +59,7 @@ public class Eval extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String exp = values.get(0).toString();
|
||||
final StringEater eater = new StringEater(exp);
|
||||
final TValue value = eater.eatExpression(context, memory);
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class Feature extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String arg = values.get(0).toString();
|
||||
if ("style".equalsIgnoreCase(arg))
|
||||
return TValue.fromInt(1);
|
||||
|
@ -40,7 +40,6 @@ import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.security.SFile;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -60,7 +59,7 @@ public class FileExists extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
// ::comment when __CORE__
|
||||
final String path = values.get(0).toString();
|
||||
return TValue.fromBoolean(new SFile(path).exists());
|
||||
|
@ -40,7 +40,6 @@ import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.preproc.Defines;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -66,7 +65,7 @@ public class Filename extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
if (value == null) {
|
||||
return TValue.fromString("");
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -60,7 +59,7 @@ public class FunctionExists extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String name = values.get(0).toString();
|
||||
return TValue.fromBoolean(context.doesFunctionExist(name));
|
||||
}
|
||||
|
@ -45,7 +45,6 @@ import net.sourceforge.plantuml.json.JsonObject;
|
||||
import net.sourceforge.plantuml.log.Logme;
|
||||
import net.sourceforge.plantuml.preproc.Stdlib;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -65,7 +64,7 @@ public class GetAllStdlib extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
|
||||
switch (values.size()) {
|
||||
case 0:
|
||||
@ -100,7 +99,7 @@ public class GetAllStdlib extends SimpleReturnFunction {
|
||||
|
||||
default:
|
||||
assert false; // Should not append because of canCover()
|
||||
throw EaterException.located("Error on get_all_stdlib: Too many arguments", location);
|
||||
throw EaterExceptionLocated.located("Error on get_all_stdlib: Too many arguments", location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,6 @@ import net.sourceforge.plantuml.json.JsonArray;
|
||||
import net.sourceforge.plantuml.log.Logme;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.theme.ThemeUtils;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -63,7 +62,7 @@ public class GetAllTheme extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final JsonArray result = new JsonArray();
|
||||
try {
|
||||
for (String theme : ThemeUtils.getAllThemeNames()) {
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.json.JsonArray;
|
||||
import net.sourceforge.plantuml.json.JsonObject;
|
||||
import net.sourceforge.plantuml.json.JsonValue;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -62,11 +61,11 @@ public class GetJsonKey extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final TValue data = values.get(0);
|
||||
if (data.isJson() == false)
|
||||
throw EaterException.unlocated("Not JSON data", location);
|
||||
|
||||
throw EaterExceptionLocated.unlocated("Not JSON data", location);
|
||||
|
||||
final JsonValue json = data.toJson();
|
||||
if (json.isObject()) {
|
||||
final JsonObject object = (JsonObject) json;
|
||||
@ -88,7 +87,7 @@ public class GetJsonKey extends SimpleReturnFunction {
|
||||
return TValue.fromJson(result);
|
||||
}
|
||||
|
||||
throw EaterException.unlocated("Bad JSON type", location);
|
||||
throw EaterExceptionLocated.unlocated("Bad JSON type", location);
|
||||
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,6 @@ import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.json.JsonValue;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -60,7 +59,7 @@ public class GetJsonType extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final TValue data = values.get(0);
|
||||
if (data.isString())
|
||||
return TValue.fromString("string");
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class GetVariableValue extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String name = values.get(0).toString();
|
||||
final TValue variable = memory.getVariable(name);
|
||||
if (variable == null)
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -60,7 +59,7 @@ public class GetVersion extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
return TValue.fromString(Version.versionString());
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,6 @@ import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.security.SecurityUtils;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -60,7 +59,7 @@ public class Getenv extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
// ::comment when __CORE__
|
||||
final String value = getenv(values.get(0).toString());
|
||||
if (value == null)
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class Hex2dec extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
try {
|
||||
return TValue.fromInt(Integer.parseInt(values.get(0).toString(), 16));
|
||||
} catch (Throwable t) {
|
||||
|
@ -42,7 +42,6 @@ import java.util.Set;
|
||||
import net.sourceforge.plantuml.klimt.color.HColors;
|
||||
import net.sourceforge.plantuml.klimt.color.HSLColor;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -62,7 +61,7 @@ public class HslColor extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final int h = values.get(0).toInt();
|
||||
final int s = values.get(1).toInt();
|
||||
final int l = values.get(2).toInt();
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -60,7 +59,7 @@ public class IntVal extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String s = values.get(0).toString();
|
||||
try {
|
||||
return TValue.fromInt(Integer.parseInt(s));
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunction;
|
||||
@ -65,13 +64,13 @@ public class InvokeProcedure implements TFunction {
|
||||
|
||||
@Override
|
||||
public void executeProcedureInternal(TContext context, TMemory memory, StringLocated location, List<TValue> args,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String fname = args.get(0).toString();
|
||||
final List<TValue> sublist = args.subList(1, args.size());
|
||||
final TFunctionSignature signature = new TFunctionSignature(fname, sublist.size());
|
||||
final TFunction func = context.getFunctionSmart(signature);
|
||||
if (func == null)
|
||||
throw EaterException.located("Cannot find void function " + fname, location);
|
||||
throw EaterExceptionLocated.located("Cannot find void function " + fname, location);
|
||||
|
||||
func.executeProcedureInternal(context, memory, location, sublist, named);
|
||||
}
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.klimt.color.HColor;
|
||||
import net.sourceforge.plantuml.klimt.color.HColorSet;
|
||||
import net.sourceforge.plantuml.klimt.color.NoSuchColorException;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -63,13 +62,13 @@ public class IsDark extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String colorString = values.get(0).toString();
|
||||
try {
|
||||
final HColor color = HColorSet.instance().getColorLEGACY(colorString);
|
||||
return TValue.fromBoolean(color.isDark());
|
||||
} catch (NoSuchColorException e) {
|
||||
throw EaterException.located("No such color", location);
|
||||
throw EaterExceptionLocated.located("No such color", location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.klimt.color.HColor;
|
||||
import net.sourceforge.plantuml.klimt.color.HColorSet;
|
||||
import net.sourceforge.plantuml.klimt.color.NoSuchColorException;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -63,13 +62,13 @@ public class IsLight extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String colorString = values.get(0).toString();
|
||||
try {
|
||||
final HColor color = HColorSet.instance().getColorLEGACY(colorString);
|
||||
return TValue.fromBoolean(!color.isDark());
|
||||
} catch (NoSuchColorException e) {
|
||||
throw EaterException.located("No such color", location);
|
||||
throw EaterExceptionLocated.located("No such color", location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,6 @@ import java.util.Set;
|
||||
import net.sourceforge.plantuml.json.JsonObject;
|
||||
import net.sourceforge.plantuml.json.JsonValue;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -61,7 +60,7 @@ public class JsonKeyExists extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final TValue arg0 = values.get(0);
|
||||
if (arg0.isJson() == false)
|
||||
return TValue.fromBoolean(false);
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.klimt.color.HColor;
|
||||
import net.sourceforge.plantuml.klimt.color.HColorSet;
|
||||
import net.sourceforge.plantuml.klimt.color.NoSuchColorException;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -63,7 +62,7 @@ public class Lighten extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String colorString = values.get(0).toString();
|
||||
final int ratio = values.get(1).toInt();
|
||||
try {
|
||||
@ -71,7 +70,7 @@ public class Lighten extends SimpleReturnFunction {
|
||||
color = color.lighten(ratio);
|
||||
return TValue.fromString(color.asString());
|
||||
} catch (NoSuchColorException e) {
|
||||
throw EaterException.located("No such color", location);
|
||||
throw EaterExceptionLocated.located("No such color", location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -50,7 +50,6 @@ import net.sourceforge.plantuml.log.Logme;
|
||||
import net.sourceforge.plantuml.security.SFile;
|
||||
import net.sourceforge.plantuml.security.SURL;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -109,7 +108,7 @@ public class LoadJson extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final String path = values.get(0).toString();
|
||||
try {
|
||||
String data = loadStringData(path, getCharset(values));
|
||||
@ -120,11 +119,12 @@ public class LoadJson extends SimpleReturnFunction {
|
||||
return TValue.fromJson(jsonValue);
|
||||
} catch (ParseException pe) {
|
||||
Logme.error(pe);
|
||||
throw EaterException.unlocated("JSON parse issue in source " + path + " on location " + pe.getLocation(),
|
||||
location);
|
||||
throw EaterExceptionLocated
|
||||
.unlocated("JSON parse issue in source " + path + " on location " + pe.getLocation(), location);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Logme.error(e);
|
||||
throw EaterException.unlocated("JSON encoding issue in source " + path + ": " + e.getMessage(), location);
|
||||
throw EaterExceptionLocated.unlocated("JSON encoding issue in source " + path + ": " + e.getMessage(),
|
||||
location);
|
||||
}
|
||||
}
|
||||
|
||||
@ -163,7 +163,8 @@ public class LoadJson extends SimpleReturnFunction {
|
||||
* @return the decoded String from the data source
|
||||
* @throws EaterException if something went wrong on reading data
|
||||
*/
|
||||
private String loadStringData(String path, String charset) throws EaterException, UnsupportedEncodingException {
|
||||
private String loadStringData(String path, String charset)
|
||||
throws EaterExceptionLocated, UnsupportedEncodingException {
|
||||
|
||||
byte[] byteData = null;
|
||||
if (path.startsWith("http://") || path.startsWith("https://")) {
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class LogicalAnd extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
for (TValue v : values)
|
||||
if (v.toBoolean() == false)
|
||||
return TValue.fromBoolean(false);
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class LogicalNand extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
for (TValue v : values)
|
||||
if (v.toBoolean() == false)
|
||||
return TValue.fromBoolean(!false);
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class LogicalNor extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
for (TValue v : values)
|
||||
if (v.toBoolean() == true)
|
||||
return TValue.fromBoolean(!true);
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class LogicalNot extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final boolean arg = values.get(0).toBoolean();
|
||||
return TValue.fromBoolean(!arg);
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class LogicalNxor extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
int cpt = 0;
|
||||
for (TValue v : values)
|
||||
if (v.toBoolean() == true)
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class LogicalOr extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
for (TValue v : values)
|
||||
if (v.toBoolean() == true)
|
||||
return TValue.fromBoolean(true);
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class LogicalXor extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
int cpt = 0;
|
||||
for (TValue v : values)
|
||||
if (v.toBoolean() == true)
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class Now extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
final long now = System.currentTimeMillis() / 1000L;
|
||||
return TValue.fromInt((int) now);
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.tim.EaterException;
|
||||
import net.sourceforge.plantuml.tim.EaterExceptionLocated;
|
||||
import net.sourceforge.plantuml.tim.TContext;
|
||||
import net.sourceforge.plantuml.tim.TFunctionSignature;
|
||||
@ -59,7 +58,7 @@ public class Ord extends SimpleReturnFunction {
|
||||
|
||||
@Override
|
||||
public TValue executeReturnFunction(TContext context, TMemory memory, StringLocated location, List<TValue> values,
|
||||
Map<String, TValue> named) throws EaterException, EaterExceptionLocated {
|
||||
Map<String, TValue> named) throws EaterExceptionLocated {
|
||||
try {
|
||||
final int codePoint = values.get(0).toString().codePointAt(0);
|
||||
return TValue.fromInt(codePoint);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user