From bb8b3e4dec6367da0bac7e1d0ee4cc4aae3bc208 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Wed, 13 Mar 2019 11:32:45 +0100
Subject: [PATCH] updated jar and sources

---
 SanityCheck.jar                               | Bin 20708 -> 20729 bytes
 devTools/javaSanityCheck/src/Main.java        |  92 +++++++++---------
 devTools/javaSanityCheck/src/SyntaxError.java |  26 ++++-
 .../src/element/AngleBracketElement.java      |  14 +--
 .../src/element/CommentElement.java           |   6 +-
 .../javaSanityCheck/src/element/Element.java  |   9 +-
 .../src/element/KnownElement.java             |   4 +
 .../src/element/KnownHtmlElement.java         |   6 ++
 .../src/element/KnownTwineElement.java        |   7 ++
 9 files changed, 107 insertions(+), 57 deletions(-)

diff --git a/SanityCheck.jar b/SanityCheck.jar
index bebdf1da3e6277f966e8fff78ea96d884fe27b0b..36c886155cf61858bb6e54466cb88efc05f615cd 100644
GIT binary patch
delta 13129
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
Zs;J69$jkjbb&w+j&8VWmEXx1O`G19Fn(Y7p

delta 13088
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
KV0z^KmHB^g?bQDO

diff --git a/devTools/javaSanityCheck/src/Main.java b/devTools/javaSanityCheck/src/Main.java
index eea3a4ff611..87b18682d23 100644
--- a/devTools/javaSanityCheck/src/Main.java
+++ b/devTools/javaSanityCheck/src/Main.java
@@ -12,6 +12,9 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.*;
 
+/**
+ * @author Arkerthan
+ */
 public class Main {
 
     public static TagSearchTree<Tag> htmlTags, twineTags;
@@ -22,6 +25,7 @@ public class Main {
     private static String[] excluded;
 
     public static void main(String[] args) {
+
         //setup
         setupExclude();
         setupHtmlTags();
@@ -31,7 +35,7 @@ public class Main {
         //actual sanityCheck
         runSanityCheckInDirectory(workingDir, new File("src/"));
 
-        //handle errors
+        //output errors
         for (SyntaxError e :
                 errors) {
             System.out.println(e.getError());
@@ -41,7 +45,7 @@ public class Main {
 
     /**
      * Goes through the whole directory including subdirectories and runs
-     * sanityCheck() on all .tw files
+     * {@link Main#sanityCheck(Path)} on all .tw files
      *
      * @param dir to be checked
      */
@@ -61,7 +65,7 @@ public class Main {
             }
         } catch (NullPointerException e) {
             e.printStackTrace();
-            System.err.println("Couldn't find directory " + currentFile);
+            System.err.println("Couldn't read directory " + currentFile);
             System.exit(-1);
         }
     }
@@ -78,42 +82,33 @@ public class Main {
         Charset encoding = Charset.defaultCharset();
 
         if (!excluded(file.getPath())) {
-            try {
-                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);
-                }
+            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 the alphabetical search tree for fast access of HTML tags later
+     * 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 = new LinkedList<>();
-        try {
-
-            Files.lines(new File("devTools/javaSanityCheck/htmlTags").toPath()).map(String::trim)
-                    .filter(s -> !s.startsWith("#"))
-                    .forEach(s -> TagsList.add(parseTag(s)));
-        } catch (IOException e) {
-            System.err.println("Couldn't read devTools/javaSanityCheck/htmlTags");
-        }
+        List<Tag> TagsList = loadTags("devTools/javaSanityCheck/htmlTags");
 
         //turn List into alphabetical search tree
         try {
-            htmlTags = new TagSearchTree(TagsList);
+            htmlTags = new TagSearchTree<>(TagsList);
         } catch (ArrayIndexOutOfBoundsException e) {
             System.err.println("Illegal Character in devTools/javaSanityCheck/htmlTags");
             System.exit(-1);
@@ -121,29 +116,39 @@ public class Main {
     }
 
     /**
-     * sets up the alphabetical search tree for fast access of twine tags later
+     * sets up a {@link TagSearchTree<Tag>} for fast access of twine tags later
      */
     private static void setupTwineTags() {
         //load twine tags into a list
-        List<Tag> TagsList = new LinkedList<>();
-        try {
-
-            Files.lines(new File("devTools/javaSanityCheck/twineTags").toPath()).map(String::trim)
-                    .filter(s -> !s.startsWith("#"))
-                    .forEach(s -> TagsList.add(parseTag(s)));
-        } catch (IOException e) {
-            System.err.println("Couldn't read devTools/javaSanityCheck/twineTags");
-        }
+        List tagsList = loadTags("devTools/javaSanityCheck/twineTags");
 
         //turn List into alphabetical search tree
         try {
-            twineTags = new TagSearchTree(TagsList);
+            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
@@ -160,7 +165,7 @@ public class Main {
     }
 
     /**
-     * sets up the excluded array.
+     * sets up the excluded files array.
      */
     private static void setupExclude() {
         //load excluded files
@@ -173,7 +178,7 @@ public class Main {
             System.err.println("Couldn't read devTools/javaSanityCheck/excluded");
         }
 
-        //turn excluded files into an array and change them to windows style if needed
+        //turn excluded files into an array and change path to windows style if needed
         if (isWindows()) {
             excluded = new String[excludedList.size()];
             int i = 0;
@@ -252,15 +257,13 @@ public class Main {
                     stack.pop();
                     return;
                 }
-                //3 means the Element is complete and part of a two tag system
+                //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 (k.isOpening()) {
-                        stack.push(k);
-                    } else */
+                    //if KnownElement k is closing another tag check if there is one and remove it
                     if (k.isClosing()) {
-                        if (stack.empty()) {
+                        if (stack.empty()) { //there are no open tags at all
                             addError(new SyntaxError("Closed tag " + k.getShortDescription() + " without having any open tags.", -2));
                         } else if (stack.peek() instanceof KnownElement) {
                             KnownElement kFirst = (KnownElement) stack.pop();
@@ -268,7 +271,6 @@ public class Main {
                                 addError(new SyntaxError("Opening tag " + kFirst.getShortDescription() +
                                         " does not match closing tag " + k.getShortDescription() + ".", -2));
                             }
-                            //stack.pop();
                         } else {
                             addError(new SyntaxError("Closing tag " + k.getShortDescription() + " inside " +
                                     "another tag: " + stack.peek().getShortDescription(), -2, true));
diff --git a/devTools/javaSanityCheck/src/SyntaxError.java b/devTools/javaSanityCheck/src/SyntaxError.java
index 150f2bd449b..ad7aa7cdf3c 100644
--- a/devTools/javaSanityCheck/src/SyntaxError.java
+++ b/devTools/javaSanityCheck/src/SyntaxError.java
@@ -7,33 +7,57 @@ public class SyntaxError extends Exception {
     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 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/element/AngleBracketElement.java b/devTools/javaSanityCheck/src/element/AngleBracketElement.java
index e4819ba37ea..233c4f30320 100644
--- a/devTools/javaSanityCheck/src/element/AngleBracketElement.java
+++ b/devTools/javaSanityCheck/src/element/AngleBracketElement.java
@@ -64,7 +64,7 @@ public class AngleBracketElement extends Element {
                             return handleOpeningHTML(c);
                         } catch (SyntaxError e) {
                             state = 1;
-                            throw new SyntaxError("Opening \"<\" missing, found " + c + " [debug:initialCase]", 1);
+                            throw new SyntaxError("Opening \"<\" missing, found " + c, 1);
                         }
                 }
             case 1:
@@ -105,7 +105,7 @@ public class AngleBracketElement extends Element {
                     state = 3;
                     return 1;
                 } else {
-                    throw new SyntaxError("Closing \">\" missing, opened [" + line + ":" + pos + "]", 2);
+                    throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 2);
                 }
             case 4:
                 if (c == '>') {
@@ -120,20 +120,20 @@ public class AngleBracketElement extends Element {
                     state = 4;
                     return 1;
                 } else {
-                    throw new SyntaxError("Closing \">\" missing, opened [" + line + ":" + pos + "]", 2);
+                    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 [" + line + ":" + pos + "]", 2);
+                    throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 2);
                 }
             case -5:
                 if (c == '>') {
                     return 2;
                 }
-                throw new SyntaxError("Closing \">\" missing, opened [" + line + ":" + pos + "]", 2);
+                throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 2);
             case 6:
                 if (c == '>') {
                     return 3;
@@ -141,13 +141,13 @@ public class AngleBracketElement extends Element {
                     state = 3;
                     return 1;
                 } else {
-                    throw new SyntaxError("Closing \">\" missing, opened [" + line + ":" + pos + "]", 3);
+                    throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 3);
                 }
             case -6:
                 if (c == '>') {
                     return 3;
                 }
-                throw new SyntaxError("Closing \">\" missing, opened [" + line + ":" + pos + "]", 3);
+                throw new SyntaxError("Closing \">\" missing, opened tag at [" + line + ":" + pos + "]", 3);
 
             case -9:
                 if (c == '>') {
diff --git a/devTools/javaSanityCheck/src/element/CommentElement.java b/devTools/javaSanityCheck/src/element/CommentElement.java
index 3a3cc12aff9..159b92afcd5 100644
--- a/devTools/javaSanityCheck/src/element/CommentElement.java
+++ b/devTools/javaSanityCheck/src/element/CommentElement.java
@@ -4,7 +4,7 @@ import org.arkerthan.sanityCheck.SyntaxError;
 import org.arkerthan.sanityCheck.UnknownStateException;
 
 public class CommentElement extends Element {
-    int state = 0;
+    private int state = 0;
     /*
     0 - /
     1 - /*???
@@ -13,6 +13,10 @@ public class CommentElement extends Element {
     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);
     }
diff --git a/devTools/javaSanityCheck/src/element/Element.java b/devTools/javaSanityCheck/src/element/Element.java
index b0f99fa904f..96f71976f3d 100644
--- a/devTools/javaSanityCheck/src/element/Element.java
+++ b/devTools/javaSanityCheck/src/element/Element.java
@@ -23,12 +23,15 @@ public abstract class Element {
      * 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
-     * @return
-     * @throws Error
+     * @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;
     }
diff --git a/devTools/javaSanityCheck/src/element/KnownElement.java b/devTools/javaSanityCheck/src/element/KnownElement.java
index 305be2fe652..7bc0b7a1ee7 100644
--- a/devTools/javaSanityCheck/src/element/KnownElement.java
+++ b/devTools/javaSanityCheck/src/element/KnownElement.java
@@ -4,6 +4,10 @@ import org.arkerthan.sanityCheck.SyntaxError;
 
 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);
     }
diff --git a/devTools/javaSanityCheck/src/element/KnownHtmlElement.java b/devTools/javaSanityCheck/src/element/KnownHtmlElement.java
index d086a74bc54..c262263b9b7 100644
--- a/devTools/javaSanityCheck/src/element/KnownHtmlElement.java
+++ b/devTools/javaSanityCheck/src/element/KnownHtmlElement.java
@@ -5,6 +5,12 @@ 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;
diff --git a/devTools/javaSanityCheck/src/element/KnownTwineElement.java b/devTools/javaSanityCheck/src/element/KnownTwineElement.java
index 24003fd00be..765d9b682ee 100644
--- a/devTools/javaSanityCheck/src/element/KnownTwineElement.java
+++ b/devTools/javaSanityCheck/src/element/KnownTwineElement.java
@@ -5,6 +5,13 @@ 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;
-- 
GitLab