diff --git a/SanityCheck.jar b/SanityCheck.jar index 36c886155cf61858bb6e54466cb88efc05f615cd..478417de473b6dd0de5575eef4d474e2ef3d7073 100644 Binary files a/SanityCheck.jar and b/SanityCheck.jar differ diff --git a/devTools/javaSanityCheck/src/Main.java b/devTools/javaSanityCheck/src/Main.java index 87b18682d2391fc678a383ccc4b47480278c0473..9c2d72a8ebe019e565a56e8daf3625c50c4b0f6d 100644 --- a/devTools/javaSanityCheck/src/Main.java +++ b/devTools/javaSanityCheck/src/Main.java @@ -261,26 +261,33 @@ public class Main { if (change == 3) { //remove the topmost element from stack since it is complete KnownElement k = stack.pop().getKnownElement(); - //if KnownElement k is closing another tag check if there is one and remove it + //if KnownElement k is closing another element, check if there is one and remove it if (k.isClosing()) { - if (stack.empty()) { //there are no open tags at all - addError(new SyntaxError("Closed tag " + k.getShortDescription() + " without having any open tags.", -2)); + if (stack.empty()) { //there are no open elements at all + addError(new SyntaxError("Closed tag " + k.getShortDescription() + " without " + + "having any open tags.", -2)); } else if (stack.peek() instanceof KnownElement) { + //get opening tag KnownElement kFirst = (KnownElement) stack.pop(); + //check if closing element matches the opening element if (!kFirst.isMatchingElement(k)) { addError(new SyntaxError("Opening tag " + kFirst.getShortDescription() + " does not match closing tag " + k.getShortDescription() + ".", -2)); } } else { + //There closing tag inside another not Known element: <div </html> addError(new SyntaxError("Closing tag " + k.getShortDescription() + " inside " + - "another tag: " + stack.peek().getShortDescription(), -2, true)); + "another tag " + stack.peek().getShortDescription() + " without opening first.", + -2, true)); } } + //check if the element needs to be closed by another if (k.isOpening()) { stack.push(k); } return; } + //means the element couldn't do anything with it and is finished if (change == 4) { stack.pop(); } else { @@ -293,7 +300,7 @@ public class Main { //innermost element was uninterested, trying to find matching element switch (c) { //case '@': - // stack.push(new AtElement(currentLine, currentPosition)); + //stack.push(new AtElement(currentLine, currentPosition)); //break; case '<': stack.push(new AngleBracketElement(currentLine, currentPosition)); diff --git a/devTools/javaSanityCheck/src/element/AngleBracketElement.java b/devTools/javaSanityCheck/src/element/AngleBracketElement.java index 233c4f303205ab5e24b7c7ffd8c45088002ed471..43538bd6986a30cbc1a98966c8f6fea15144a3a3 100644 --- a/devTools/javaSanityCheck/src/element/AngleBracketElement.java +++ b/devTools/javaSanityCheck/src/element/AngleBracketElement.java @@ -218,7 +218,7 @@ public class AngleBracketElement extends Element { private int handleClosingHTML(char c) throws SyntaxError { if (c == '>') { if (tree.getElement() == null) { - throw new SyntaxError("Unknown HTML tag", 2); + throw new SyntaxError("Unknown HTML tag: " + tree.getPath(), 2); } if (tree.getElement().single) { throw new SyntaxError("Single HTML tag used as closing Tag: " + tree.getElement().tag, 2); @@ -243,7 +243,6 @@ public class AngleBracketElement extends Element { if (tree.getElement() == null) { //assuming not listed means widget until better solution return 1; - //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + tree.getPath(), 1); } if (!tree.getElement().single) { if (logicTags.contains(tree.getElement().tag)) { @@ -260,7 +259,6 @@ public class AngleBracketElement extends Element { state = -5; if (tree.getElement() == null) { //assuming not listed means widget until better solution - //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + tree.getPath(), 1); return 1; } if (!tree.getElement().single) { @@ -279,7 +277,6 @@ public class AngleBracketElement extends Element { if (tree == null) { //assuming not listed means widget until better solution state = 3; - //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + c, 1); } return 1; @@ -288,7 +285,7 @@ public class AngleBracketElement extends Element { private int handleClosingTwine(char c) throws SyntaxError { if (c == '>') { if (tree.getElement() == null) { - throw new SyntaxError("Unknown Twine tag", 2); + throw new SyntaxError("Unknown Twine tag: " + tree.getPath(), 2); } if (tree.getElement().single) { throw new SyntaxError("Single Twine tag used as closing Tag: " + tree.getElement().tag, 2); @@ -319,6 +316,7 @@ public class AngleBracketElement extends Element { case 0: builder.append("<"); break; + //TWINE case 1: builder.append("<<"); break; @@ -332,28 +330,49 @@ public class AngleBracketElement extends Element { builder.append("<</").append(tree.getPath()); break; case 3: - builder.append("<<??? ???"); - break; - case 4: - builder.append("<<?").append(tree.getPath()).append(" ???"); + builder.append("<<???"); break; case -3: - builder.append("<<??? ???>"); + builder.append("<<???>"); + break; + case 4: + builder.append("<<").append(tree.getPath()).append(" ???"); break; case -4: - builder.append("<<?").append(tree.getPath()).append(" ???>"); + builder.append("<<").append(tree.getPath()).append(" ???>"); break; case 5: - builder.append("<").append(tree.getPath()).append(" ???"); + builder.append("<<???"); break; case -5: - builder.append("</").append(tree.getPath()); + builder.append("<<").append(tree == null ? "???" : tree.getPath()).append(">"); break; case 6: - builder.append("<").append(tree.getPath()).append(" ???"); + builder.append("<<").append(tree.getPath()).append(" ???>"); + break; + case -6: + builder.append("<</").append(tree.getPath()).append(">"); + break; + //HTML + case -9: + builder.append("</"); break; + case 10: + builder.append("<").append(tree.getPath()); + break; + case -10: + builder.append("</").append(tree.getPath()); + break; + case 11: + builder.append("<?").append(tree == null ? "???" : tree.getPath()); + break; + case -11: + builder.append("</").append(tree == null ? "???" : tree.getPath()); + break; + case 12: + builder.append("<").append(tree.getPath()).append(" ???"); default: - //throw new UnknownStateException(state); + throw new UnknownStateException(state); } return builder.toString(); }