aboutsummaryrefslogtreecommitdiff
path: root/src/main/model/css
diff options
context:
space:
mode:
authorj-james2022-10-17 15:29:53 +0000
committerj-james2022-10-17 15:29:53 +0000
commit21b8e5f6cdcd9fab275efce5e88f02addfd19e7e (patch)
tree8a629525a63f3ff8a0123d4eefc30bc0b578af16 /src/main/model/css
parent9dad27fef462d20adec671efe6d1e795966f5300 (diff)
Implement fairly comprehensive ParserTests
100% class and method coverage, 95% line coverage
Diffstat (limited to 'src/main/model/css')
-rw-r--r--src/main/model/css/CssParser.java64
1 files changed, 34 insertions, 30 deletions
diff --git a/src/main/model/css/CssParser.java b/src/main/model/css/CssParser.java
index 25b6752..a382b14 100644
--- a/src/main/model/css/CssParser.java
+++ b/src/main/model/css/CssParser.java
@@ -4,7 +4,10 @@ import org.javatuples.*;
import java.util.*;
-/*
+/**
+ * This class represents the state of and implements an LL(1) CSS parser.
+ * For convenience, the following (slightly wrong) context-free grammar for CSS is below.
+ * <br>
* RULES ::= (RULE)+
* RULE ::= SELECTORS '{' (PROPERTY | (PROPERTY ';')*) '}'
* SELECTORS ::= SELECTOR (COMBINATOR SELECTOR)*
@@ -216,13 +219,14 @@ public class CssParser {
previousChar = '\0';
} else {
// possibly not the best way to handle this, may be better to keep the backslash
- currentValue = currentValue.substring(0, currentValue.length() - 2);
+ currentValue = currentValue.substring(0, currentValue.length() - 1);
currentValue += c;
previousChar = c;
}
break;
default:
currentValue += c;
+ previousChar = c;
break;
}
}
@@ -239,13 +243,14 @@ public class CssParser {
currentValue += c;
previousChar = '\0';
} else {
- currentValue = currentValue.substring(0, currentValue.length() - 2);
+ currentValue = currentValue.substring(0, currentValue.length() - 1);
currentValue += c;
previousChar = c;
}
break;
default:
currentValue += c;
+ previousChar = c;
break;
}
}
@@ -258,7 +263,7 @@ public class CssParser {
* REQUIRES: A string of the form [NUMBER][VALIDUNIT]
* EFFECTS: Returns a number, in pixels, that has been converted appropriately
*/
- private static double parseUnits(String input) {
+ public static double parseUnits(String input) {
String numbers = "";
String units = "";
// imagine making a language without iterable strings, fml
@@ -305,30 +310,29 @@ public class CssParser {
}
/*
- * body {
- * background-color: #f0f0f2;
- * margin: 0;
- * padding: 0;
- * font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI",
- * "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- *
- * }
- * div {
- * width: 600px;
- * margin: 5em auto;
- * padding: 2em;
- * background-color: #fdfdff;
- * border-radius: 0.5em;
- * box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
- * }
- * a:link, a:visited {
- * color: #38488f;
- * text-decoration: none;
- * }
- * @media (max - width : 700px) {
- * div {
- * margin: 0 auto;
- * width: auto;
- * }
- * }
+body {
+ background-color: #f0f0f2;
+ margin: 0;
+ padding: 0;
+ font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI",
+ "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+div {
+ width: 600px;
+ margin: 5em auto;
+ padding: 2em;
+ background-color: #fdfdff;
+ border-radius: 0.5em;
+ box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
+}
+a:link, a:visited {
+ color: #38488f;
+ text-decoration: none;
+}
+@media (max - width : 700px) {
+ div {
+ margin: 0 auto;
+ width: auto;
+ }
+}
*/