summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2022-08-16 23:04:07 -0400
committerBen Culkin <scorpress@gmail.com>2022-08-16 23:04:07 -0400
commit05bb1067b348f43108fd04b968dc53fc338373fb (patch)
tree0abd83efa1b2e2a563cdb162ce1b5303b5ef05e7
parent5c5f049917745f487264948aa5663ca64681f510 (diff)
Update a few things
-rw-r--r--base/pom.xml3
-rw-r--r--base/src/main/java/bjc/utils/funcutils/IteratorUtils.java2
-rw-r--r--base/src/main/java/bjc/utils/ioutils/blocks/BlockReaders.java12
-rw-r--r--base/src/main/java/bjc/utils/ioutils/blocks/IteratorBlockReader.java52
-rw-r--r--base/src/main/java/bjc/utils/parserutils/pattern/PatternPart.java147
-rw-r--r--base/src/main/java/module-info.java2
-rw-r--r--clformat/pom.xml1
7 files changed, 214 insertions, 5 deletions
diff --git a/base/pom.xml b/base/pom.xml
index f23ff4f..29744b6 100644
--- a/base/pom.xml
+++ b/base/pom.xml
@@ -103,6 +103,7 @@
<version>4.12</version>
</dependency>
+<!--
<dependency>
<groupId>org.junit.contrib</groupId>
<artifactId>junit-theories</artifactId>
@@ -120,7 +121,7 @@
<artifactId>junit-quickcheck-generators</artifactId>
<version>0.5</version>
</dependency>
-
+-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
diff --git a/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java b/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java
index 662b1bf..5f6368e 100644
--- a/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java
+++ b/base/src/main/java/bjc/utils/funcutils/IteratorUtils.java
@@ -111,5 +111,5 @@ public class IteratorUtils {
{
Queue<ElementType> backer = new ArrayDeque<>();
return Pair.pair(backer::add, new QueueBackedIterator<>(backer));
- }
+ }
}
diff --git a/base/src/main/java/bjc/utils/ioutils/blocks/BlockReaders.java b/base/src/main/java/bjc/utils/ioutils/blocks/BlockReaders.java
index 16d50c0..2342c22 100644
--- a/base/src/main/java/bjc/utils/ioutils/blocks/BlockReaders.java
+++ b/base/src/main/java/bjc/utils/ioutils/blocks/BlockReaders.java
@@ -1,6 +1,7 @@
package bjc.utils.ioutils.blocks;
import java.io.*;
+import java.util.Iterator;
/** Utility methods for constructing instances of {@link BlockReader}
*
@@ -59,4 +60,15 @@ public class BlockReaders {
public static BlockReader serial(final BlockReader... readers) {
return new SerialBlockReader(readers);
}
+
+ /**
+ * Create a block reader from an iterator of blocks.
+ *
+ * @param iter The iterator of blocks.
+ *
+ * @return A block reader which returns blocks from the given iterator.
+ */
+ public static BlockReader fromIterator(final Iterator<Block> iter) {
+ return new IteratorBlockReader(iter);
+ }
}
diff --git a/base/src/main/java/bjc/utils/ioutils/blocks/IteratorBlockReader.java b/base/src/main/java/bjc/utils/ioutils/blocks/IteratorBlockReader.java
new file mode 100644
index 0000000..de4a083
--- /dev/null
+++ b/base/src/main/java/bjc/utils/ioutils/blocks/IteratorBlockReader.java
@@ -0,0 +1,52 @@
+package bjc.utils.ioutils.blocks;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+/**
+ * BlockReader which produces blocks from an iterator
+ *
+ * @author bjcul
+ */
+public final class IteratorBlockReader implements BlockReader {
+ private final Iterator<Block> iter;
+ private Block currBlock;
+ private int blockCount = 0;
+
+ /**
+ * Create a new block reader from an iterator.
+ *
+ * @param iter The iterator to get blocks from.
+ */
+ public IteratorBlockReader(Iterator<Block> iter) {
+ this.iter = iter;
+ }
+
+ @Override
+ public boolean nextBlock() {
+ if (!iter.hasNext()) return false;
+ currBlock = iter.next();
+ blockCount++;
+ return true;
+ }
+
+ @Override
+ public boolean hasNextBlock() {
+ return iter.hasNext();
+ }
+
+ @Override
+ public int getBlockCount() {
+ return blockCount;
+ }
+
+ @Override
+ public Block getBlock() {
+ return currBlock;
+ }
+
+ @Override
+ public void close() throws IOException {
+ // Nothing for us to really do
+ }
+} \ No newline at end of file
diff --git a/base/src/main/java/bjc/utils/parserutils/pattern/PatternPart.java b/base/src/main/java/bjc/utils/parserutils/pattern/PatternPart.java
new file mode 100644
index 0000000..6661072
--- /dev/null
+++ b/base/src/main/java/bjc/utils/parserutils/pattern/PatternPart.java
@@ -0,0 +1,147 @@
+package bjc.utils.parserutils.pattern;
+
+import java.util.StringJoiner;
+import java.util.function.Supplier;
+import java.util.regex.*;
+
+/**
+ * Builder interface for regex patterns.
+ *
+ * @author bjculkin
+ *
+ */
+public interface PatternPart {
+ /**
+ * Convert this pattern part into a regex.
+ *
+ * @return The regex this part represents.
+ */
+ public String toRegex();
+
+ public boolean canOptimize();
+
+ static PatternPart part(boolean canOptimize, Supplier<String> func) {
+ return new PatternPart() {
+
+ @Override
+ public String toRegex() {
+ return func.get();
+ }
+
+ @Override
+ public boolean canOptimize() {
+ return canOptimize;
+ }
+ };
+ }
+
+ static PatternPart var(Supplier<String> source) {
+ return part(false, source);
+ }
+ /**
+ * Create a 'raw' pattern part, which just echoes the given string.
+ *
+ * @param str The regex to include
+ *
+ * @return A pattern part which converts to the given string.
+ */
+ static PatternPart raw(String str) {
+ return part(true, () -> str);
+ }
+
+ static PatternPart joining(String joiner, PatternPart... parts) {
+ return new PatternPart() {
+
+ @Override
+ public String toRegex() {
+ StringJoiner sj = new StringJoiner(joiner);
+ for (PatternPart part : parts) sj.add(part.toRegex());
+ return sj.toString();
+ }
+
+ @Override
+ public boolean canOptimize() {
+ for (PatternPart part : parts)
+ if (!part.canOptimize()) return false;
+
+ return true;
+ }
+ };
+ }
+ /**
+ * Create a pattern part which matches the given string.
+ *
+ * @param str The string to match
+ *
+ * @return A pattern which matches the given string.
+ */
+ static PatternPart literal(String str) {
+ return part(true, () -> Pattern.quote(str));
+ }
+
+ /**
+ * Create a pattern part which matches a single digit.
+ *
+ * @return A pattern that matches a digit.
+ */
+ static PatternPart digit() {
+ return raw("\\d");
+ }
+
+ static PatternPart cclass(char... chars) {
+ return part(true, () -> {
+ StringBuilder sb = new StringBuilder("[");
+ for (char ch : chars) sb.append(ch);
+ sb.append("]");
+ return sb.toString();
+ });
+ }
+
+ static PatternPart notCClass(char... chars) {
+ return part(true, () -> {
+ StringBuilder sb = new StringBuilder("[^");
+ for (char ch : chars) sb.append(ch);
+ sb.append("]");
+ return sb.toString();
+ });
+ }
+
+ static PatternPart nonspace() {
+ return raw("\\S");
+ }
+
+ static PatternPart concat(PatternPart... parts) {
+ return joining(" ", parts);
+ }
+
+ static PatternPart alternate(PatternPart... parts) {
+ return joining("|", parts);
+ }
+
+ static PatternPart repeat(PatternPart part) {
+ return part(part.canOptimize(), () -> part.toRegex() + "*");
+ }
+
+ static PatternPart optional(PatternPart part) {
+ return part(part.canOptimize(), () -> part.toRegex() + "?");
+ }
+
+ static PatternPart repeatAtLeastOnce(PatternPart part) {
+ return part(part.canOptimize(), () -> part.toRegex() + "*");
+ }
+
+ static PatternPart surround(String lhs, String rhs, PatternPart part) {
+ return part(part.canOptimize(), () -> lhs + part.toRegex() + rhs);
+ }
+ static PatternPart group(PatternPart part) {
+ return surround("(", ")", part);
+ }
+
+ static PatternPart namedGroup(String groupName, PatternPart part) {
+ return surround("(<" + groupName + ">", ")", part);
+ }
+
+ static PatternPart nonCaptureGroup(PatternPart part) {
+ return surround("(?:", ")", part);
+ }
+}
diff --git a/base/src/main/java/module-info.java b/base/src/main/java/module-info.java
index 188046b..3901514 100644
--- a/base/src/main/java/module-info.java
+++ b/base/src/main/java/module-info.java
@@ -3,7 +3,6 @@ module bjc.utils {
exports bjc.utils.funcutils;
exports bjc.utils.parserutils.splitter;
exports bjc.utils.ioutils;
- exports bjc.utils.examples;
exports bjc.utils.misc;
exports bjc.utils.parserutils.delims;
exports bjc.utils.gen;
@@ -12,7 +11,6 @@ module bjc.utils {
exports bjc.utils.cli;
exports bjc.utils.gui.awt;
exports bjc.utils.gui.layout;
- exports bjc.utils.examples.gen;
exports bjc.utils.math;
exports bjc.utils.gui;
exports bjc.utils.parserutils;
diff --git a/clformat/pom.xml b/clformat/pom.xml
index 5244694..d01f03c 100644
--- a/clformat/pom.xml
+++ b/clformat/pom.xml
@@ -23,7 +23,6 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>bjc</groupId>