diff options
| author | Ben Culkin <scorpress@gmail.com> | 2022-08-16 23:04:07 -0400 |
|---|---|---|
| committer | Ben Culkin <scorpress@gmail.com> | 2022-08-16 23:04:07 -0400 |
| commit | 05bb1067b348f43108fd04b968dc53fc338373fb (patch) | |
| tree | 0abd83efa1b2e2a563cdb162ce1b5303b5ef05e7 | |
| parent | 5c5f049917745f487264948aa5663ca64681f510 (diff) | |
Update a few things
| -rw-r--r-- | base/pom.xml | 3 | ||||
| -rw-r--r-- | base/src/main/java/bjc/utils/funcutils/IteratorUtils.java | 2 | ||||
| -rw-r--r-- | base/src/main/java/bjc/utils/ioutils/blocks/BlockReaders.java | 12 | ||||
| -rw-r--r-- | base/src/main/java/bjc/utils/ioutils/blocks/IteratorBlockReader.java | 52 | ||||
| -rw-r--r-- | base/src/main/java/bjc/utils/parserutils/pattern/PatternPart.java | 147 | ||||
| -rw-r--r-- | base/src/main/java/module-info.java | 2 | ||||
| -rw-r--r-- | clformat/pom.xml | 1 |
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> |
