From f734991d6141d6070228b936aa20fb77c6faedac Mon Sep 17 00:00:00 2001 From: Arkerthan <arkerthan@gmail.com> Date: Tue, 28 May 2019 23:26:00 +0200 Subject: [PATCH] updated jar&sources --- devTools/javaSanityCheck/SanityCheck.jar | Bin 156450 -> 156190 bytes devTools/javaSanityCheck/sources.zip | Bin 0 -> 38973 bytes .../src/DisallowedTagException.java | 11 - devTools/javaSanityCheck/src/Main.java | 331 --------------- devTools/javaSanityCheck/src/SyntaxError.java | 67 --- devTools/javaSanityCheck/src/Tag.java | 14 - .../javaSanityCheck/src/TagSearchTree.java | 81 ---- .../src/UnknownStateException.java | 11 - .../src/element/AngleBracketElement.java | 380 ------------------ .../src/element/AtElement.java | 108 ----- .../src/element/BracketElement.java | 28 -- .../src/element/CommentElement.java | 75 ---- .../javaSanityCheck/src/element/Element.java | 55 --- .../src/element/KnownElement.java | 38 -- .../src/element/KnownHtmlElement.java | 50 --- .../src/element/KnownLogicElement.java | 120 ------ .../src/element/KnownTwineElement.java | 50 --- 17 files changed, 1419 deletions(-) create mode 100644 devTools/javaSanityCheck/sources.zip delete mode 100644 devTools/javaSanityCheck/src/DisallowedTagException.java delete mode 100644 devTools/javaSanityCheck/src/Main.java delete mode 100644 devTools/javaSanityCheck/src/SyntaxError.java delete mode 100644 devTools/javaSanityCheck/src/Tag.java delete mode 100644 devTools/javaSanityCheck/src/TagSearchTree.java delete mode 100644 devTools/javaSanityCheck/src/UnknownStateException.java delete mode 100644 devTools/javaSanityCheck/src/element/AngleBracketElement.java delete mode 100644 devTools/javaSanityCheck/src/element/AtElement.java delete mode 100644 devTools/javaSanityCheck/src/element/BracketElement.java delete mode 100644 devTools/javaSanityCheck/src/element/CommentElement.java delete mode 100644 devTools/javaSanityCheck/src/element/Element.java delete mode 100644 devTools/javaSanityCheck/src/element/KnownElement.java delete mode 100644 devTools/javaSanityCheck/src/element/KnownHtmlElement.java delete mode 100644 devTools/javaSanityCheck/src/element/KnownLogicElement.java delete mode 100644 devTools/javaSanityCheck/src/element/KnownTwineElement.java diff --git a/devTools/javaSanityCheck/SanityCheck.jar b/devTools/javaSanityCheck/SanityCheck.jar index c2041109e8ab397f6aff8e7bbcf1c19d495baa73..dfa5b22db1171f4165e79f260caad84987e22346 100644 GIT binary patch delta 23534 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%0AWPUXT{6oN(N8gtjj7?y9BnH`M1b&8!eUG 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 SL4^a10pw`MFOh<t2mc2=J(b)5 delta 23661 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 Vv;F#Hf&J76kRo5QJ&Y%~{{!a1zU}}3 diff --git a/devTools/javaSanityCheck/sources.zip b/devTools/javaSanityCheck/sources.zip new file mode 100644 index 0000000000000000000000000000000000000000..92f59c1b2541717b32c51b197bb8d5c4997b9a2d GIT binary patch literal 38973 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 literal 0 HcmV?d00001 diff --git a/devTools/javaSanityCheck/src/DisallowedTagException.java b/devTools/javaSanityCheck/src/DisallowedTagException.java deleted file mode 100644 index 12d5dfb2974..00000000000 --- a/devTools/javaSanityCheck/src/DisallowedTagException.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.arkerthan.sanityCheck; - -/** - * @author Arkerthan - */ -public class DisallowedTagException extends RuntimeException { - - public DisallowedTagException(String tag) { - super(tag); - } -} diff --git a/devTools/javaSanityCheck/src/Main.java b/devTools/javaSanityCheck/src/Main.java deleted file mode 100644 index 1cf56950cc0..00000000000 --- a/devTools/javaSanityCheck/src/Main.java +++ /dev/null @@ -1,331 +0,0 @@ -package org.arkerthan.sanityCheck; - -import org.arkerthan.sanityCheck.element.AngleBracketElement; -import org.arkerthan.sanityCheck.element.CommentElement; -import org.arkerthan.sanityCheck.element.Element; -import org.arkerthan.sanityCheck.element.KnownElement; - -import java.io.*; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.*; - -/** - * @author Arkerthan - * @version 1.0 - */ -public class Main { - - public static TagSearchTree<Tag> htmlTags, twineTags; - private static String currentFile; - private static int currentLine, currentPosition; - private static Stack<Element> stack; - private static List<SyntaxError> errors = new LinkedList<>(); - private static String[] excluded; - - public static void main(String[] args) { - - //setup - setupExclude(); - setupHtmlTags(); - setupTwineTags(); - Path workingDir = Paths.get("").toAbsolutePath(); - - //actual sanityCheck - runSanityCheckInDirectory(workingDir, new File("src/")); - - //output errors - for (SyntaxError e : - errors) { - System.out.println(e.getError()); - } - } - - - /** - * Goes through the whole directory including subdirectories and runs - * {@link Main#sanityCheck(Path)} on all .tw files - * - * @param dir to be checked - */ - private static void runSanityCheckInDirectory(Path workingDir, File dir) { - //subdirectories are checked recursively - - try { - for (File file : dir.listFiles()) { - if (file.isFile()) { //run sanityCheck if file is a .tw file - String path = file.getAbsolutePath(); - if (path.endsWith(".tw")) { - sanityCheck(workingDir.relativize(file.toPath())); - } - } else if (file.isDirectory()) { - runSanityCheckInDirectory(workingDir, file.getAbsoluteFile()); - } - } - } catch (NullPointerException e) { - e.printStackTrace(); - System.err.println("Couldn't read directory " + currentFile); - System.exit(-1); - } - } - - /** - * Runs the sanity check for one file. Does not run if file is excluded. - * - * @param path file to be checked - */ - private static void sanityCheck(Path path) { - File file = path.toFile(); - - // replace this with a known encoding if possible - Charset encoding = Charset.defaultCharset(); - - if (!excluded(file.getPath())) { - currentFile = file.getPath(); - currentLine = 1; - stack = new Stack<>(); - - //actually opening and reading the file - try (InputStream in = new FileInputStream(file); - Reader reader = new InputStreamReader(in, encoding); - // buffer for efficiency - Reader buffer = new BufferedReader(reader)) { - handleCharacters(buffer); - } catch (IOException e) { - e.printStackTrace(); - System.err.println("Couldn't read " + file); - } - } - } - - /** - * sets up a {@link TagSearchTree<Tag>} for fast access of HTML tags later - */ - private static void setupHtmlTags() { - //load HTML tags into a list - List<Tag> TagsList = loadTags("devTools/javaSanityCheck/htmlTags"); - - //turn List into alphabetical search tree - try { - htmlTags = new TagSearchTree<>(TagsList); - } catch (ArrayIndexOutOfBoundsException e) { - System.err.println("Illegal Character in devTools/javaSanityCheck/htmlTags"); - System.exit(-1); - } - } - - /** - * sets up a {@link TagSearchTree<Tag>} for fast access of twine tags later - */ - private static void setupTwineTags() { - //load twine tags into a list - List tagsList = loadTags("devTools/javaSanityCheck/twineTags"); - - //turn List into alphabetical search tree - try { - twineTags = new TagSearchTree<>(tagsList); - } catch (ArrayIndexOutOfBoundsException e) { - System.err.println("Illegal Character in devTools/javaSanityCheck/twineTags"); - System.exit(-1); - } - } - - /** - * Loads a list of tags from a file - * - * @param filePath file to load tags from - * @return loaded tags - */ - private static List<Tag> loadTags(String filePath) { - List<Tag> tagsList = new LinkedList<>(); - try { - Files.lines(new File(filePath).toPath()).map(String::trim) - .filter(s -> !s.startsWith("#")) - .forEach(s -> tagsList.add(parseTag(s))); - } catch (IOException e) { - System.err.println("Couldn't read " + filePath); - } - return tagsList; - } - - /** - * Turns a string into a Tag - * ";1" at the end of the String indicates that the tag needs to be closed later - * - * @param s tag as String - * @return tag as Tag - */ - private static Tag parseTag(String s) { - String[] st = s.split(";"); - if (st.length > 1 && st[1].equals("1")) { - return new Tag(st[0], false); - } - return new Tag(st[0], true); - } - - /** - * sets up the excluded files array. - */ - private static void setupExclude() { - //load excluded files - List<String> excludedList = new ArrayList<>(); - try { - Files.lines(new File("devTools/javaSanityCheck/excluded").toPath()).map(String::trim) - .filter(s -> !s.startsWith("#")) - .forEach(excludedList::add); - } catch (IOException e) { - System.err.println("Couldn't read devTools/javaSanityCheck/excluded"); - } - - //turn excluded files into an array and change path to windows style if needed - if (isWindows()) { - excluded = new String[excludedList.size()]; - int i = 0; - for (String s : - excludedList) { - excluded[i++] = s.replaceAll("/", "\\\\"); - } - } else { - excluded = excludedList.toArray(new String[0]); - } - } - - /** - * @return whether OS is Windows or not - */ - private static boolean isWindows() { - return (System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows")); - } - - /** - * checks if a file or directory is excluded from the sanity check - * - * @param s file/directory to be checked - * @return whether it is excluded or not - */ - private static boolean excluded(String s) { - for (String ex : - excluded) { - if (s.startsWith(ex)) return true; - } - return false; - } - - /** - * Reads the file character by character. - * - * @param reader reader that is read - * @throws IOException thrown if the file can't be read - */ - private static void handleCharacters(Reader reader) throws IOException { - int r; - while ((r = reader.read()) != -1) { - char c = (char) r; - handleCharacter(c); - } - } - - /** - * Handles a single character - * - * @param c next character - */ - private static void handleCharacter(char c) { - //updating position - currentPosition++; - if (c == '\n') { - currentLine++; - currentPosition = 1; - } - - //try applying to the innermost element - if (!stack.empty()) { - int change; - try { - change = stack.peek().handleChar(c); - } catch (SyntaxError e) { - change = e.getChange(); - addError(e); - } - - //change greater 0 means the innermost element did some work - if (change > 0) { - //2 means the Element is complete - if (change == 2) { - //remove the topmost element from stack since it is complete - stack.pop(); - return; - } - //3 means the Element is complete and part of a two or more tag system - if (change == 3) { - //remove the topmost element from stack since it is complete - KnownElement k = stack.pop().getKnownElement(); - //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 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() + " 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 { - return; - } - } - } - - - //innermost element was uninterested, trying to find matching element - switch (c) { - //case '@': - //stack.push(new AtElement(currentLine, currentPosition)); - //break; - case '<': - stack.push(new AngleBracketElement(currentLine, currentPosition)); - break; - //case '>': - //addError(new SyntaxError("Dangling \">\", current innermost: " + (stack.empty() ? "null" : stack.peek().getShortDescription()), -2)); - //break; - case '/': - stack.push(new CommentElement(currentLine, currentPosition)); - break; - //case '(': - //stack.push(new BracketElement(currentLine, currentPosition)); - } - } - - /** - * add an error to the error list - * - * @param e new error - */ - private static void addError(SyntaxError e) { - e.setFile(currentFile); - e.setLine(currentLine); - e.setPosition(currentPosition); - errors.add(e); - } -} diff --git a/devTools/javaSanityCheck/src/SyntaxError.java b/devTools/javaSanityCheck/src/SyntaxError.java deleted file mode 100644 index ccb49ccf888..00000000000 --- a/devTools/javaSanityCheck/src/SyntaxError.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.arkerthan.sanityCheck; - -/** - * @author Arkerthan - */ -public class SyntaxError extends Exception { - private String file; - private int line, position; - private String description; - private int change; //see Element for values; -2 means not thrown - private boolean warning = false; - - /** - * @param description description of error - * @param change state change as specified in Element - */ - public SyntaxError(String description, int change) { - this.description = description; - this.change = change; - } - - /** - * @param description description of error - * @param change state change as specified in Element - * @param warning whether it is a warning or an error - */ - public SyntaxError(String description, int change, boolean warning) { - this(description, change); - this.warning = warning; - } - - /** - * @param file at which the error occurred - */ - public void setFile(String file) { - this.file = file; - } - - /** - * @param line in which the error occurred - */ - public void setLine(int line) { - this.line = line; - } - - /** - * @param position at which the error occurred - */ - public void setPosition(int position) { - this.position = position; - } - - /** - * @return error message - */ - public String getError() { - String s = warning ? "Warning: " : "Error: "; - return s + file + ": " + line + ":" + position + " : " + description; - } - - /** - * @return change that happened in Element before it was thrown. -1 if not thrown. - */ - public int getChange() { - return change; - } -} diff --git a/devTools/javaSanityCheck/src/Tag.java b/devTools/javaSanityCheck/src/Tag.java deleted file mode 100644 index 025cef72c10..00000000000 --- a/devTools/javaSanityCheck/src/Tag.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.arkerthan.sanityCheck; - -/** - * @author Arkerthan - */ -public class Tag { - public final String tag; - public final boolean single; - - public Tag(String tag, boolean single) { - this.tag = tag; - this.single = single; - } -} diff --git a/devTools/javaSanityCheck/src/TagSearchTree.java b/devTools/javaSanityCheck/src/TagSearchTree.java deleted file mode 100644 index 68165866594..00000000000 --- a/devTools/javaSanityCheck/src/TagSearchTree.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.arkerthan.sanityCheck; - -import java.util.List; - -/** - * @param <E> Tag class to be stored - * @author Arkerthan - * <p> - * Tag SearchTree stores Tags in an alphabetical search tree. - * Once created the search tree can't be changed anymore. - */ -public class TagSearchTree<E extends Tag> { - private static final int SIZE = 128; - private final TagSearchTree<E>[] branches; - private E element = null; - private String path; - - /** - * creates a new empty TagSearchTree - */ - private TagSearchTree() { - branches = new TagSearchTree[SIZE]; - } - - /** - * Creates a new filled TagSearchTree - * - * @param list Tags to be inserted - */ - public TagSearchTree(List<E> list) { - this(); - for (E e : list) { - this.add(e, 0); - } - } - - /** - * adds a new Tag to the TagSearchTree - * - * @param e Tag to be stored - * @param index index of relevant char for adding in tag - */ - private void add(E e, int index) { - //set the path to here - path = e.tag.substring(0, index); - //checks if tag has to be stored here or further down - if (e.tag.length() == index) { - element = e; - } else { - //store tag in correct branch - char c = e.tag.charAt(index); - if (branches[c] == null) { - branches[c] = new TagSearchTree<>(); - } - branches[c].add(e, index + 1); - } - } - - /** - * @param c character of branch needed - * @return branch or null if branch doesn't exist - */ - public TagSearchTree<E> getBranch(char c) { - if (c >= SIZE) return null; - return branches[c]; - } - - /** - * @return stored Tag, null if empty - */ - public E getElement() { - return element; - } - - /** - * @return path inside full tree to get to this Branch - */ - public String getPath() { - return path; - } -} diff --git a/devTools/javaSanityCheck/src/UnknownStateException.java b/devTools/javaSanityCheck/src/UnknownStateException.java deleted file mode 100644 index 348a275e201..00000000000 --- a/devTools/javaSanityCheck/src/UnknownStateException.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.arkerthan.sanityCheck; - -/** - * @author Arkerthan - */ -public class UnknownStateException extends RuntimeException { - - public UnknownStateException(int state) { - super(String.valueOf(state)); - } -} diff --git a/devTools/javaSanityCheck/src/element/AngleBracketElement.java b/devTools/javaSanityCheck/src/element/AngleBracketElement.java deleted file mode 100644 index 124c8595445..00000000000 --- a/devTools/javaSanityCheck/src/element/AngleBracketElement.java +++ /dev/null @@ -1,380 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -import org.arkerthan.sanityCheck.*; - -import java.util.Arrays; -import java.util.List; - -/** - * @author Arkerthan - */ -public class AngleBracketElement extends Element { - private static final List<String> logicTags = Arrays.asList("if", "elseif", "else", "switch", "case", "default"); - private int state = 0; - /* - 0 - initial: < - TWINE - 1 - << - -1 - <</ - 2 - trying to complete twine tag: <<tag ???>> - -2 - trying to complete twine tag: <</tag>> - 3 - waiting for >> - -3 - expecting > from 3 - 4 - waiting for >> with KnownElement - -4 - expecting > from 4 - 5 - expecting >> - -5 - expecting > - 6 - expecting > with KnownElement opening; comparison? - -6 - expecting > with KnownElement closing - - HTML - -9 - </ - 10 - trying to complete HTML tag: <tag ???> - -10 - trying to complete HTML tag: </tag> - 11 - waiting for > - -11 - expecting > - 12 - waiting for > with KnownElement - */ - - private TagSearchTree<Tag> tree; - - public AngleBracketElement(int line, int pos) { - super(line, pos); - } - - @Override - public int handleChar(char c) throws SyntaxError { - switch (state) { - case 0: - switch (c) { - case '<': - state = 1; - return 1; - case '/': - state = -9; - return 1; - case '>':// empty <> - case ' ':// assume comparison - case '=':// " " - case '3':// a heart: <3 - return 2; - default: - try { - state = 10; - tree = Main.htmlTags; - return handleOpeningHTML(c); - } catch (SyntaxError e) { - state = 1; - throw new SyntaxError("Opening \"<\" missing, found " + c, 1); - } - } - case 1: - if (c == '<') { - throw new SyntaxError("Too many \"<\".", 1); - } else if (c == '>') { - state = 3; - throw new SyntaxError("Empty Statement?", 1); - } else if (c == '/') { - state = -1; - return 1; - } - state = 2; - tree = Main.twineTags; - return handleOpeningTwine(c); - case -1: - if (c == '>') { - throw new SyntaxError("Empty Statement?", 2, true); - } - state = -2; - tree = Main.twineTags; - return handleClosingTwine(c); - - case 2: - return handleOpeningTwine(c); - case -2: - return handleClosingTwine(c); - case 3: - if (c == '>') { - state = -3; - return 1; - } - break; - case -3: - if (c == '>') { - return 2; - } else if (c == ' ' || c == '=') { // assuming comparison - state = 3; - return 1; - } else { - throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 2); - } - case 4: - if (c == '>') { - state = -4; - return 1; - } - break; - case -4: - if (c == '>') { - return 3; - } else if (c == ' ' || c == '=') { // assuming comparison - state = 4; - return 1; - } else { - throw new SyntaxError("Closing \">\" missing, opened tag at[" + line + ":" + pos + "]", 2); - } - case 5: - if (c == '>') { - state = -5; - return 1; - } else { - throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 2); - } - case -5: - if (c == '>') { - return 2; - } - throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 2); - case 6: - if (c == '>') { - return 3; - } else if (c == ' ' || c == '=') { - state = 3; - return 1; - } else { - throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 3); - } - case -6: - if (c == '>') { - return 3; - } - throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 3); - - case -9: - if (c == '>') { - throw new SyntaxError("Empty Statement?", 2, true); - } - state = -10; - tree = Main.htmlTags; - return handleClosingHTML(c); - case 10: - return handleOpeningHTML(c); - case -10: - return handleClosingHTML(c); - case 11: - if (c == '>') - return 2; - if (c == '@') //@ inside HTML tags is allowed - return 1; - break; - case -11: - if (c == '>') - return 2; - throw new SyntaxError("Closing \">\" missing [2]", 2); - case 12: - if (c == '>') - return 3; - if (c == '@') //@ inside HTML tags is allowed - return 1; - break; - default: - throw new UnknownStateException(state); - } - return 0; - } - - private int handleOpeningHTML(char c) throws SyntaxError { - if (c == ' ') { - state = 11; - if (tree.getElement() == null) { - throw new SyntaxError("Unknown HTML tag", 1); - } - if (!tree.getElement().single) { - k = new KnownHtmlElement(line, pos, true, tree.getElement().tag); - state = 12; - return 1; - } - return 1; - } - if (c == '>') { - if (tree.getElement() == null) { - throw new SyntaxError("Unknown HTML tag", 2); - } - if (!tree.getElement().single) { - k = new KnownHtmlElement(line, pos, true, tree.getElement().tag); - return 3; - } - return 2; - } - - tree = tree.getBranch(c); - if (tree == null) { - state = 11; - throw new SyntaxError("Unknown HTML tag or closing \">\" missing, found " + c, 1); - } - - return 1; - } - - private int handleClosingHTML(char c) throws SyntaxError { - if (c == '>') { - if (tree.getElement() == null) { - 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); - } - k = new KnownHtmlElement(line, pos, false, tree.getElement().tag); - return 3; - } - - tree = tree.getBranch(c); - if (tree == null) { - state = -11; - throw new SyntaxError("Unknown HTML tag or closing \">\" missing, found " + c, 1); - } - - return 1; - } - - - private int handleOpeningTwine(char c) throws SyntaxError { - if (c == ' ') { - state = 3; - if (tree.getElement() == null) { - //assuming not listed means widget until better solution - return 1; - } - if (!tree.getElement().single) { - if (logicTags.contains(tree.getElement().tag)) { - k = new KnownLogicElement(line, pos, tree.getElement().tag, false); - } else { - k = new KnownTwineElement(line, pos, true, tree.getElement().tag); - } - state = 4; - return 1; - } - return 1; - } - if (c == '>') { - state = -5; - if (tree.getElement() == null) { - //assuming not listed means widget until better solution - return 1; - } - if (!tree.getElement().single) { - if (logicTags.contains(tree.getElement().tag)) { - k = new KnownLogicElement(line, pos, tree.getElement().tag, false); - } else { - k = new KnownTwineElement(line, pos, true, tree.getElement().tag); - } - state = 6; - return 1; - } - return 2; - } - - tree = tree.getBranch(c); - if (tree == null) { - //assuming not listed means widget until better solution - state = 3; - } - - return 1; - } - - private int handleClosingTwine(char c) throws SyntaxError { - if (c == '>') { - if (tree.getElement() == null) { - 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); - } - if (logicTags.contains(tree.getElement().tag)) { - k = new KnownLogicElement(line, pos, tree.getElement().tag, true); - } else { - k = new KnownTwineElement(line, pos, false, tree.getElement().tag); - } - state = -6; - return 1; - } - - tree = tree.getBranch(c); - if (tree == null) { - state = 3; - throw new SyntaxError("Unknown Twine closing tag or closing \">>\" missing, found " + c, 1); - } - - return 1; - } - - @Override - public String getShortDescription() { - StringBuilder builder = new StringBuilder(); - builder.append(getPositionAsString()).append(" "); - switch (state) { - case 0: - builder.append("<"); - break; - //TWINE - case 1: - builder.append("<<"); - break; - case -1: - builder.append("<</"); - break; - case 2: - builder.append("<<").append(tree.getPath()); - break; - case -2: - builder.append("<</").append(tree.getPath()); - break; - case 3: - builder.append("<<???"); - break; - case -3: - builder.append("<<???>"); - break; - case 4: - builder.append("<<").append(tree.getPath()).append(" ???"); - break; - case -4: - builder.append("<<").append(tree.getPath()).append(" ???>"); - break; - case 5: - builder.append("<<???"); - break; - case -5: - builder.append("<<").append(tree == null ? "???" : tree.getPath()).append(">"); - break; - case 6: - 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); - } - return builder.toString(); - } -} diff --git a/devTools/javaSanityCheck/src/element/AtElement.java b/devTools/javaSanityCheck/src/element/AtElement.java deleted file mode 100644 index f6e39a6ddce..00000000000 --- a/devTools/javaSanityCheck/src/element/AtElement.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -import org.arkerthan.sanityCheck.SyntaxError; -import org.arkerthan.sanityCheck.UnknownStateException; - -/** - * @author Arkerthan - */ -public class AtElement extends Element { - private int state = 0; - // 0 = @ - // 1 = @@ - // 2 = @@. - // 3 = @@.a -- @@.ab -- @@.abc - // 4 = @@.abc;abc - // 5 = @@.abc;abc@ - - // example: @@.red;some text@@ - - public AtElement(int line, int pos) { - super(line, pos); - } - - @Override - public int handleChar(char c) throws SyntaxError { - switch (state) { - case 0: - state = 1; - if (c == '@') { - return 1; - } else { - if (c == '.') { - state = 2; - } - throw new SyntaxError("Opening \"@\" missing.", 1); - } - case 1: - if (c == '.') { - state = 2; - return 1; - } else { - state = 4; - throw new SyntaxError("\".\" missing, found \"" + c + "\". This might also indicate a " + - "missing closure in the previous color code.", 0, true); - } - case 2: - state = 3; - if (Character.isAlphabetic(c)) { - return 1; - } else { - throw new SyntaxError("Identifier might be wrong.", 1, true); - } - case 3: - if (c == ';') { - state = 4; - return 1; - } else if (c == ' ') { - state = 4; - throw new SyntaxError("\";\" missing or wrong space.", 1); - } - break; - case 4: - if (c == '@') { - state = 5; - return 1; - } - break; - case 5: - if (c == '@') { - return 2; - } else { - throw new SyntaxError("Closing \"@\" missing.", 2); - } - default: - throw new UnknownStateException(state); - } - return 0; - } - - @Override - public String getShortDescription() { - StringBuilder builder = new StringBuilder(); - builder.append(getPositionAsString()).append(" "); - switch (state) { - case 0: - builder.append("@"); - break; - case 1: - builder.append("@@"); - break; - case 2: - builder.append("@@."); - break; - case 3: - builder.append("@@.???"); - break; - case 4: - builder.append("@@???"); - break; - case 5: - builder.append("@@???@"); - break; - default: - throw new UnknownStateException(state); - } - return builder.toString(); - } -} diff --git a/devTools/javaSanityCheck/src/element/BracketElement.java b/devTools/javaSanityCheck/src/element/BracketElement.java deleted file mode 100644 index 89b0a67ef6a..00000000000 --- a/devTools/javaSanityCheck/src/element/BracketElement.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -import org.arkerthan.sanityCheck.SyntaxError; - -/** - * @author Arkerthan - */ -public class BracketElement extends Element { - //int state = 0; - - public BracketElement(int line, int pos) { - super(line, pos); - } - - @Override - public int handleChar(char c) throws SyntaxError { - if (c == ')') { - return 2; - } else { - return 0; - } - } - - @Override - public String getShortDescription() { - return getPositionAsString() + " (???"; - } -} diff --git a/devTools/javaSanityCheck/src/element/CommentElement.java b/devTools/javaSanityCheck/src/element/CommentElement.java deleted file mode 100644 index e18e7419432..00000000000 --- a/devTools/javaSanityCheck/src/element/CommentElement.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -import org.arkerthan.sanityCheck.SyntaxError; -import org.arkerthan.sanityCheck.UnknownStateException; - -/** - * @author Arkerthan - */ -public class CommentElement extends Element { - private int state = 0; - /* - 0 - / - 1 - /*??? - 2 - /*???* - 3 - /%??? - 4 - /%???% - */ - - /** - * @param line line in which comment starts - * @param pos position in line where comment starts - */ - public CommentElement(int line, int pos) { - super(line, pos); - } - - @Override - public int handleChar(char c) throws SyntaxError { - switch (state) { - case 0: - if (c == '*') { - state = 1; - } else if (c == '%') { - state = 3; - } else if (c == '>') { - throw new SyntaxError("XHTML style closure", 4, true); - } else { - return 4; - } - break; - case 1: - if (c == '*') { - state = 2; - } - break; - case 2: - if (c == '/') { - return 2; - } else if (c == '*') { - return 1; - } - state = 1; - break; - case 3: - if (c == '%') { - state = 4; - } - break; - case 4: - if (c == '/') { - return 2; - } - state = 3; - break; - default: - throw new UnknownStateException(state); - } - return 1; - } - - @Override - public String getShortDescription() { - return getPositionAsString() + "comment"; - } -} diff --git a/devTools/javaSanityCheck/src/element/Element.java b/devTools/javaSanityCheck/src/element/Element.java deleted file mode 100644 index 205f700362b..00000000000 --- a/devTools/javaSanityCheck/src/element/Element.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -import org.arkerthan.sanityCheck.SyntaxError; - -/** - * @author Arkerthan - */ -public abstract class Element { - protected KnownElement k; - protected int line, pos; - - /** - * @param line Line the instance was created - * @param pos Position in line the instance was created - */ - protected Element(int line, int pos) { - this.line = line; - this.pos = pos; - } - - /** - * Parses a Char and returns an int depending on the state of the element - * 0 - the Element did nothing - * 1 - the Element changed state - * 2 - the Element is finished - * 3 - the Element is finished and a KnownHtmlElement was generated - * 4 - the Element is finished and the char is still open for use - * - * @param c char to be parsed - * @return state change - * @throws SyntaxError thrown when an syntax error is detected - */ - public abstract int handleChar(char c) throws SyntaxError; - - /** - * @return the constructed KnownElement. null if none was constructed yet. - */ - public KnownElement getKnownElement() { - return k; - } - - /** - * Returns the line and position of the Element in the file it was created in. - * - * @return position of Element in file as String - */ - public String getPositionAsString() { - return "[" + line + ":" + pos + "]"; - } - - /** - * @return a short description usually based on state and position of the Element - */ - public abstract String getShortDescription(); -} diff --git a/devTools/javaSanityCheck/src/element/KnownElement.java b/devTools/javaSanityCheck/src/element/KnownElement.java deleted file mode 100644 index 709fc389177..00000000000 --- a/devTools/javaSanityCheck/src/element/KnownElement.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -import org.arkerthan.sanityCheck.SyntaxError; - -/** - * @author Arkerthan - */ -public abstract class KnownElement extends Element { - - /** - * @param line at which it begins - * @param pos at which it begins - */ - public KnownElement(int line, int pos) { - super(line, pos); - } - - /** - * @return true, if it needs another Known Element to close it. - */ - public abstract boolean isOpening(); - - /** - * @return true if it closes another Element. - */ - public abstract boolean isClosing(); - - /** - * @param k Element to be checked - * @return true if given Element closes Element - */ - public abstract boolean isMatchingElement(KnownElement k); - - @Override - public int handleChar(char c) throws SyntaxError { - return 0; - } -} diff --git a/devTools/javaSanityCheck/src/element/KnownHtmlElement.java b/devTools/javaSanityCheck/src/element/KnownHtmlElement.java deleted file mode 100644 index d7c25299ba4..00000000000 --- a/devTools/javaSanityCheck/src/element/KnownHtmlElement.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -/** - * @author Arkerthan - */ -public class KnownHtmlElement extends KnownElement { - - private boolean opening; - private String statement; - - /** - * @param line at which it begins - * @param pos at which it begins - * @param opening if it opens a tag: <tag> or closes it: </tag> - * @param statement statement inside the tag - */ - public KnownHtmlElement(int line, int pos, boolean opening, String statement) { - super(line, pos); - this.opening = opening; - this.statement = statement; - } - - @Override - public String getShortDescription() { - StringBuilder builder = new StringBuilder(); - builder.append(getPositionAsString()).append(" <"); - if (!opening) { - builder.append("/"); - } - return builder.append(statement).append(">").toString(); - } - - @Override - public boolean isOpening() { - return opening; - } - - @Override - public boolean isClosing() { - return !opening; - } - - @Override - public boolean isMatchingElement(KnownElement k) { - if (k instanceof KnownHtmlElement) { - return ((KnownHtmlElement) k).statement.equals(this.statement); - } - return false; - } -} diff --git a/devTools/javaSanityCheck/src/element/KnownLogicElement.java b/devTools/javaSanityCheck/src/element/KnownLogicElement.java deleted file mode 100644 index 5c8496a5c55..00000000000 --- a/devTools/javaSanityCheck/src/element/KnownLogicElement.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -import org.arkerthan.sanityCheck.DisallowedTagException; -import org.arkerthan.sanityCheck.UnknownStateException; - -import java.util.Arrays; -import java.util.List; - -/** - * @author Arkerthan - */ -public class KnownLogicElement extends KnownElement { - private static final List<String> allowedTags = Arrays.asList("if", "elseif", "else"); - private final int state; - private boolean last; - /* - 0 - if - 1 - elseif - 2 - else - 3 - switch - 4 - case - 5 - default - */ - - public KnownLogicElement(int line, int pos, String tag, boolean last) { - this(line, pos, tag); - this.last = last; - } - - public KnownLogicElement(int line, int pos, String tag) { - super(line, pos); - switch (tag) { - case "if": - state = 0; - break; - case "elseif": - state = 1; - break; - case "else": - state = 2; - break; - case "switch": - state = 3; - break; - case "case": - state = 4; - break; - case "default": - state = 5; - break; - default: - throw new DisallowedTagException(tag); - } - last = false; - } - - @Override - public boolean isOpening() { - return !last; - } - - @Override - public boolean isClosing() { - return (state != 0 && state != 3) || last; - } - - @Override - public boolean isMatchingElement(KnownElement k) { - if (!(k instanceof KnownLogicElement)) { - return false; - } - KnownLogicElement l = (KnownLogicElement) k; - switch (state) { - case 0: - case 1: - return l.state == 1 || l.state == 2 || (l.state == 0 && l.last); - case 2: - return l.state == 0 && l.last; - case 3: - case 4: - return l.state == 3 || l.state == 4; - case 5: - return l.state == 3 && l.last; - default: - throw new UnknownStateException(state); - } - } - - @Override - public String getShortDescription() { - StringBuilder builder = new StringBuilder(); - builder.append(getPositionAsString()).append(" <<"); - if (last) { - builder.append('/'); - } - switch (state) { - case 0: - builder.append("if"); - break; - case 1: - builder.append("elseif"); - break; - case 2: - builder.append("else"); - break; - case 3: - builder.append("switch"); - break; - case 4: - builder.append("case"); - break; - case 5: - builder.append("default"); - break; - default: - throw new UnknownStateException(state); - } - return builder.append(">>").toString(); - } -} diff --git a/devTools/javaSanityCheck/src/element/KnownTwineElement.java b/devTools/javaSanityCheck/src/element/KnownTwineElement.java deleted file mode 100644 index 9693fb840df..00000000000 --- a/devTools/javaSanityCheck/src/element/KnownTwineElement.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.arkerthan.sanityCheck.element; - -/** - * @author Arkerthan - */ -public class KnownTwineElement extends KnownElement { - - private boolean opening; - private String statement; - - /** - * @param line at which it begins - * @param pos at which it begins - * @param opening if it opens a tag: <<tag>> or closes it: <</tag>> - * @param statement statement inside the tag - */ - public KnownTwineElement(int line, int pos, boolean opening, String statement) { - super(line, pos); - this.opening = opening; - this.statement = statement; - } - - @Override - public String getShortDescription() { - StringBuilder builder = new StringBuilder(); - builder.append(getPositionAsString()).append(" <<"); - if (!opening) { - builder.append("/"); - } - return builder.append(statement).append(">>").toString(); - } - - @Override - public boolean isOpening() { - return opening; - } - - @Override - public boolean isClosing() { - return !opening; - } - - @Override - public boolean isMatchingElement(KnownElement k) { - if (k instanceof KnownTwineElement) { - return ((KnownTwineElement) k).statement.equals(this.statement); - } - return false; - } -} -- GitLab