diff options
Diffstat (limited to 'base/src/main/java/bjc/utils/cli/objects')
3 files changed, 298 insertions, 351 deletions
diff --git a/base/src/main/java/bjc/utils/cli/objects/Command.java b/base/src/main/java/bjc/utils/cli/objects/Command.java index af22643..3b287ea 100644 --- a/base/src/main/java/bjc/utils/cli/objects/Command.java +++ b/base/src/main/java/bjc/utils/cli/objects/Command.java @@ -3,341 +3,288 @@ package bjc.utils.cli.objects; import java.util.regex.Matcher; import java.util.regex.Pattern; -/** - * A single-line command read from the user. +/** A single-line command read from the user. * - * @author Ben Culkin - */ + * @author Ben Culkin */ public class Command { - /** - * Command status values. - * - * @author Ben Culkin - */ - public static enum CommandStatus { - /** - * The command succeeded. - */ - SUCCESS, - /** - * The command failed non-fatally. - */ - FAIL, - /** - * The command failed fatally. - */ - ERROR, - /** - * The command was the last one. - */ - FINISH, - } - - /** - * The line number of this command. - */ - public final int lno; - - /** - * The full text of this command. - */ - public final String full; - /** - * The text of this command without its name. - */ - public String remn; - /** - * The name of this command. - */ - public final String name; - - /** - * The name of the I/O source this command was read from. - */ - public final String src; - - /** - * Create a new command. - * - * @param ln - * The string to get the command from. - * - * @param lno - * The number of the line the command came from. - * - * @param ioSrc - * The name of where the I/O came from. - */ - public Command(String ln, int lno, String ioSrc) { - int idx = ln.indexOf(' '); - - if (idx == -1) - idx = ln.length(); - - /* Grab command parts. */ - full = ln; - name = ln.substring(0, idx).trim(); - remn = ln.substring(idx).trim(); - - this.lno = lno; - - src = ioSrc; - } - - /** - * Removes up until the first occurrence of a particular string for the - * remaining command, and returns the removed string. - * - * By default, both the substring and the remaining text are trimmed - * (leading/trailing spaces removed). - * - * @param delm - * The delimiter to stop substringing at. - * - * @return The substring, or null if there is no occurrence of the delimiter. - */ - public String trimTo(String delm) { - return trimTo(delm, true); - } - - /** - * Removes up until the first occurrence of a particular string for the - * remaining command, and returns the removed string. - * - * @param delm - * The delimiter to stop substringing at. - * @param doTrim - * Whether or not to trim the substring and remaining command - * (Remove leading/trailing spaces). - * - * @return The substring, or null if there is no occurrence of the delimiter. - */ - public String trimTo(String delm, boolean doTrim) { - int idx = remn.indexOf(delm); - if (idx == -1) - return null; - - String tmp = remn.substring(0, idx); - remn = remn.substring(idx); - - if (doTrim) { - tmp = tmp.trim(); - remn = remn.trim(); - } - - return tmp; - } - - /** - * Removes up until the first occurrence of a particular regex for the remaining - * command, and returns the removed string. - * - * By default, both the substring and the remaining text are trimmed - * (leading/trailing spaces removed). - * - * @param rDelm - * The regex to stop substringing at. - * - * @return The string, up to the matched pattern. - */ - public String trimToRX(String rDelm) { - return trimToRX(Pattern.compile(rDelm), true); - } - - /** - * Removes up until the first occurrence of a particular regex for the remaining - * command, and returns the removed string. - * - * By default, both the substring and the remaining text are trimmed - * (leading/trailing spaces removed). - * - * @param delm - * The regex to stop substringing at. - * - * @return The string, up to the matched pattern. - */ - public String trimToRX(Pattern delm) { - return trimToRX(delm, true); - } - - /** - * Removes up until the first occurrence of a particular regex for the remaining - * command, and returns the removed string. - * - * @param rDelm - * The regex to stop substringing at. - * @param doTrim - * Whether or not to trim the substring and remaining command - * (Remove leading/trailing spaces). - * - * @return The string, up to the matched pattern. - */ - public String trimToRX(String rDelm, boolean doTrim) { - return trimToRX(Pattern.compile(rDelm), doTrim); - } - - /** - * Removes up until the first occurrence of a particular regex for the remaining - * command, and returns the removed string. - * - * @param delm - * The regex to stop substringing at. - * @param doTrim - * Whether or not to trim the substring and remaining command - * (Remove leading/trailing spaces). - * - * @return The string, up to the matched pattern. - */ - public String trimToRX(Pattern delm, boolean doTrim) { - Matcher mat = delm.matcher(remn); - if (!mat.find()) - return null; - - String tmp = remn.substring(0, mat.start()); - remn = remn.substring(mat.end()); - - if (doTrim) { - tmp = tmp.trim(); - remn = remn.trim(); - } - - return tmp; - } - - /** - * Removes up until the first occurrence of a particular string for the - * remaining command, and returns the removed string. - * - * By default, both the substring and the remaining text are trimmed - * (leading/trailing spaces removed). - * - * @param delm - * The delimiter to stop substringing at. - * - * @return The substring, or null if there is no occurrence of the delimiter. - */ - public String trimTo(char delm) { - return trimTo(delm, true); - } - - /** - * Removes up until the first occurrence of a particular string for the - * remaining command, and returns the removed string. - * - * @param delm - * The delimiter to stop substringing at. - * @param doTrim - * Whether or not to trim the substring and remaining command - * (Remove leading/trailing spaces). - * - * @return The substring, or null if there is no occurrence of the delimiter. - */ - public String trimTo(char delm, boolean doTrim) { - int idx = remn.indexOf(delm); - if (idx == -1) - return null; - - String tmp = remn.substring(0, idx); - remn = remn.substring(idx); - - if (doTrim) { - tmp = tmp.trim(); - remn = remn.trim(); - } - - return tmp; - } - - /** - * Check if this command has text after its name. - * - * @return Whether or not this command has text after its name. - */ - public boolean hasRemaining() { - return !remn.equals(""); - } - - /** - * Parse a command from a string. - * - * The main thing this does is ignore blank lines, as well as comments marked by - * #'s either at the start of the line or part of the way through the line. - * - * @param lne - * The string to get the command from. - * - * @param lno - * The line number of the command. - * - * @param srcName - * The name of where the I/O came from. - * @return The parsed command - */ - public static Command fromString(String lne, int lno, String srcName) { - String ln = lne; - - /* Ignore blank lines and comments. */ - if (ln.equals("")) - return null; - if (ln.startsWith("#")) - return null; - - /* Trim off comments part-way through the line. */ - int idxHash = ln.indexOf('#'); - if (idxHash != -1) { - ln = ln.substring(0, idxHash).trim(); - } - - return new Command(ln, lno, srcName); - } - - /** - * Give an informational message about something in relation to this command. - * - * @param info - * The informational message. - * - * @param parms - * The parameters for the informational message. - * @return The information message. - */ - public String info(String info, Object... parms) { - String msg = String.format(info, parms); - - return String.format("INFO (%s:%d): %s", src, lno, msg); - } - - /** - * Warn about something in relation to this command. - * - * @param warning - * The warning message. - * - * @param parms - * The parameters for the warning message. - * - * @return The formatted warning. - */ - public String warn(String warning, Object... parms) { - String msg = String.format(warning, parms); - - return String.format("WARNING (%s:%d): %s", src, lno, msg); - } - - /** - * Give an error about something in relation to this command. - * - * @param err - * The error message. - * - * @param parms - * The parameters for the error message. - * - * @return The formatted error - */ - public String error(String err, Object... parms) { - String msg = String.format(err, parms); - - return String.format("ERROR (%s:%d): %s", src, lno, msg); - } -} + /** Command status values. + * + * @author Ben Culkin */ + public static enum CommandStatus { + /** The command succeeded. */ + SUCCESS, + /** The command failed non-fatally. */ + FAIL, + /** The command failed fatally. */ + ERROR, + /** The command was the last one. */ + FINISH, + } + + /** The line number of this command. */ + public final int lno; + + /** The full text of this command. */ + public final String full; + /** The text of this command without its name. */ + public String remn; + /** The name of this command. */ + public final String name; + + /** The name of the I/O source this command was read from. */ + public final String src; + + /** Create a new command. + * + * @param ln + * The string to get the command from. + * + * @param lno + * The number of the line the command came from. + * + * @param ioSrc + * The name of where the I/O came from. */ + public Command(String ln, int lno, String ioSrc) { + int idx = ln.indexOf(' '); + if (idx == -1) idx = ln.length(); + + /* Grab command parts. */ + full = ln; + name = ln.substring(0, idx).trim(); + remn = ln.substring(idx).trim(); + + this.lno = lno; + + src = ioSrc; + } + + /** Removes up until the first occurrence of a particular string for the + * remaining command, and returns the removed string. + * + * By default, both the substring and the remaining text are trimmed + * (leading/trailing spaces removed). + * + * @param delm + * The delimiter to stop substringing at. + * + * @return The substring, or null if there is no occurrence of the delimiter. */ + public String trimTo(String delm) { + return trimTo(delm, true); + } + + /** Removes up until the first occurrence of a particular string for the + * remaining command, and returns the removed string. + * + * @param delm + * The delimiter to stop substringing at. + * @param doTrim + * Whether or not to trim the substring and remaining command + * (Remove leading/trailing spaces). + * + * @return The substring, or null if there is no occurrence of the delimiter. */ + public String trimTo(String delm, boolean doTrim) { + int idx = remn.indexOf(delm); + if (idx == -1) return null; + + String tmp = remn.substring(0, idx); + remn = remn.substring(idx); + + if (doTrim) { + tmp = tmp.trim(); + remn = remn.trim(); + } + + return tmp; + } + + /** Removes up until the first occurrence of a particular regex for the + * remaining + * command, and returns the removed string. + * + * By default, both the substring and the remaining text are trimmed + * (leading/trailing spaces removed). + * + * @param rDelm + * The regex to stop substringing at. + * + * @return The string, up to the matched pattern. */ + public String trimToRX(String rDelm) { + return trimToRX(Pattern.compile(rDelm), true); + } + + /** Removes up until the first occurrence of a particular regex for the + * remaining + * command, and returns the removed string. + * + * By default, both the substring and the remaining text are trimmed + * (leading/trailing spaces removed). + * + * @param delm + * The regex to stop substringing at. + * + * @return The string, up to the matched pattern. */ + public String trimToRX(Pattern delm) { + return trimToRX(delm, true); + } + + /** Removes up until the first occurrence of a particular regex for the + * remaining + * command, and returns the removed string. + * + * @param rDelm + * The regex to stop substringing at. + * @param doTrim + * Whether or not to trim the substring and remaining command + * (Remove leading/trailing spaces). + * + * @return The string, up to the matched pattern. */ + public String trimToRX(String rDelm, boolean doTrim) { + return trimToRX(Pattern.compile(rDelm), doTrim); + } + + /** Removes up until the first occurrence of a particular regex for the + * remaining + * command, and returns the removed string. + * + * @param delm + * The regex to stop substringing at. + * @param doTrim + * Whether or not to trim the substring and remaining command + * (Remove leading/trailing spaces). + * + * @return The string, up to the matched pattern. */ + public String trimToRX(Pattern delm, boolean doTrim) { + Matcher mat = delm.matcher(remn); + if (!mat.find()) return null; + + String tmp = remn.substring(0, mat.start()); + remn = remn.substring(mat.end()); + + if (doTrim) { + tmp = tmp.trim(); + remn = remn.trim(); + } + + return tmp; + } + + /** Removes up until the first occurrence of a particular string for the + * remaining command, and returns the removed string. + * + * By default, both the substring and the remaining text are trimmed + * (leading/trailing spaces removed). + * + * @param delm + * The delimiter to stop substringing at. + * + * @return The substring, or null if there is no occurrence of the delimiter. */ + public String trimTo(char delm) { + return trimTo(delm, true); + } + + /** Removes up until the first occurrence of a particular string for the + * remaining command, and returns the removed string. + * + * @param delm + * The delimiter to stop substringing at. + * @param doTrim + * Whether or not to trim the substring and remaining command + * (Remove leading/trailing spaces). + * + * @return The substring, or null if there is no occurrence of the delimiter. */ + public String trimTo(char delm, boolean doTrim) { + int idx = remn.indexOf(delm); + if (idx == -1) return null; + + String tmp = remn.substring(0, idx); + remn = remn.substring(idx); + + if (doTrim) { + tmp = tmp.trim(); + remn = remn.trim(); + } + + return tmp; + } + + /** Check if this command has text after its name. + * + * @return Whether or not this command has text after its name. */ + public boolean hasRemaining() { + return !remn.equals(""); + } + + /** Parse a command from a string. + * + * The main thing this does is ignore blank lines, as well as comments marked by + * #'s either at the start of the line or part of the way through the line. + * + * @param lne + * The string to get the command from. + * + * @param lno + * The line number of the command. + * + * @param srcName + * The name of where the I/O came from. + * + * @return The parsed command */ + public static Command fromString(String lne, int lno, String srcName) { + String ln = lne; + + /* Ignore blank lines and comments. */ + if (ln.equals("")) return null; + if (ln.startsWith("#")) return null; + + /* Trim off comments part-way through the line. */ + int idxHash = ln.indexOf('#'); + if (idxHash != -1) ln = ln.substring(0, idxHash).trim(); + + return new Command(ln, lno, srcName); + } + + /** Give an informational message about something in relation to this command. + * + * @param info + * The informational message. + * + * @param parms + * The parameters for the informational message. + * + * @return The information message. */ + public String info(String info, Object... parms) { + String msg = String.format(info, parms); + + return String.format("INFO (%s:%d): %s", src, lno, msg); + } + + /** Warn about something in relation to this command. + * + * @param warning + * The warning message. + * + * @param parms + * The parameters for the warning message. + * + * @return The formatted warning. */ + public String warn(String warning, Object... parms) { + String msg = String.format(warning, parms); + + return String.format("WARNING (%s:%d): %s", src, lno, msg); + } + + /** Give an error about something in relation to this command. + * + * @param err + * The error message. + * + * @param parms + * The parameters for the error message. + * + * @return The formatted error */ + public String error(String err, Object... parms) { + String msg = String.format(err, parms); + + return String.format("ERROR (%s:%d): %s", src, lno, msg); + } +}
\ No newline at end of file diff --git a/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java b/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java index d2595d6..613b223 100644 --- a/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java +++ b/base/src/main/java/bjc/utils/cli/objects/DefineCLI.java @@ -14,7 +14,7 @@ import java.util.logging.Logger; import java.util.regex.Pattern; import bjc.utils.cli.objects.Command.CommandStatus; -import bjc.utils.funcutils.StringUtils; +import bjc.utils.parserutils.*; /* * @TODO 10/09/17 :DefineCLIFinish @@ -130,7 +130,7 @@ public class DefineCLI { } private CommandStatus defString(Command com) { - List<String> arguments = StringUtils.processArguments(com.remn); + List<String> arguments = TokenUtils.processArguments(com.remn); if (arguments.size() < 1) { LOGGER.severe(com.error( @@ -158,7 +158,7 @@ public class DefineCLI { } private CommandStatus defFormat(Command com) { - List<String> arguments = StringUtils.processArguments(com.remn); + List<String> arguments = TokenUtils.processArguments(com.remn); if (arguments.size() < 1) { LOGGER.severe(com.error( @@ -186,7 +186,7 @@ public class DefineCLI { } private CommandStatus bindFormat(Command com) { - List<String> strings = StringUtils.processArguments(com.remn); + List<String> strings = TokenUtils.processArguments(com.remn); if (strings.size() < 2) { LOGGER.severe(com.error( diff --git a/base/src/main/java/bjc/utils/cli/objects/DelimSplitterCLI.java b/base/src/main/java/bjc/utils/cli/objects/DelimSplitterCLI.java index a6820f2..53d6d1e 100644 --- a/base/src/main/java/bjc/utils/cli/objects/DelimSplitterCLI.java +++ b/base/src/main/java/bjc/utils/cli/objects/DelimSplitterCLI.java @@ -10,9 +10,9 @@ import java.util.List; import java.util.Map; import java.util.Scanner; -import bjc.data.ITree; +import bjc.data.Tree; import bjc.funcdata.FunctionalList; -import bjc.funcdata.IList; +import bjc.funcdata.ListEx; import bjc.utils.funcutils.StringUtils; import bjc.utils.ioutils.MirrorDB; import bjc.utils.parserutils.delims.DelimiterException; @@ -359,7 +359,7 @@ public class DelimSplitterCLI { private void handleDelim(final String args) { try { - final ITree<String> res = dlm.delimitSequence(args.split(" ")); + final Tree<String> res = dlm.delimitSequence(args.split(" ")); printDelimSeq(res); } catch (final DelimiterException dex) { @@ -372,14 +372,14 @@ public class DelimSplitterCLI { for (int i = 0; i < argArray.length; i++) { final String arg = argArray[i]; - final IList<String> strangs = split.split(arg); + final ListEx<String> strangs = split.split(arg); System.out.printf("%d '%s' %s\n", i, arg, strangs); } } private void handleTest(final String inp, final boolean splitWS) { - IList<String> strings; + ListEx<String> strings; try { strings = split.split(inp); @@ -400,7 +400,7 @@ public class DelimSplitterCLI { strings = new FunctionalList<>(tks); } try { - final ITree<String> delim + final Tree<String> delim = dlm.delimitSequence(strings.toArray(new String[0])); printDelimSeq(delim); @@ -410,7 +410,7 @@ public class DelimSplitterCLI { } } - private void printDelimSeq(final ITree<String> delim) { + private void printDelimSeq(final Tree<String> delim) { System.out.println("Delimited tokens:\n" + delim.getChild(1).toString()); System.out.print("Delimited expr: "); printDelimTree(delim); @@ -420,7 +420,7 @@ public class DelimSplitterCLI { System.out.println(); } - private void printDelimTree(final ITree<String> tree) { + private void printDelimTree(final Tree<String> tree) { final StringBuilder sb = new StringBuilder(); intPrintDelimTree(tree.getChild(1), sb); @@ -428,13 +428,13 @@ public class DelimSplitterCLI { System.out.println(sb.toString().replaceAll("\\s+", " ")); } - private void intPrintDelimTree(final ITree<String> tree, final StringBuilder sb) { + private void intPrintDelimTree(final Tree<String> tree, final StringBuilder sb) { tree.doForChildren(child -> { intPrintDelimNode(child, sb); }); } - private void intPrintDelimNode(final ITree<String> tree, final StringBuilder sb) { + private void intPrintDelimNode(final Tree<String> tree, final StringBuilder sb) { if (tree.getHead().equals("contents")) { intPrintDelimTree(tree, sb); return; @@ -458,7 +458,7 @@ public class DelimSplitterCLI { case 3: intPrintDelimNode(tree.getChild(0), sb); - final ITree<String> contents = tree.getChild(1); + final Tree<String> contents = tree.getChild(1); intPrintDelimTree(contents.getChild(0), sb); intPrintDelimNode(tree.getChild(2), sb); |
