summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-12-16 20:44:25 -0500
committerBen Culkin <scorpress@gmail.com>2020-12-16 20:44:25 -0500
commit416c8a90cceb37c3bf8c8560d285b4be8e6d1cc6 (patch)
tree28f541c92d9da443084b83d5bd108600fa2c047d
parent6dcadc360dafdd12142d53327f44579379a4c9dd (diff)
Minor tweaks
-rw-r--r--base/src/examples/java/bjc/utils/examples/ShuntTest.java15
-rw-r--r--base/src/main/java/bjc/utils/cli/Command.java4
-rw-r--r--base/src/main/java/bjc/utils/cli/DelegatingCommand.java1
-rw-r--r--base/src/main/java/bjc/utils/cli/GenericCommand.java49
-rw-r--r--base/src/main/java/bjc/utils/cli/GenericCommandMode.java11
-rw-r--r--base/src/main/java/bjc/utils/cli/GenericHelp.java13
-rw-r--r--base/src/main/java/bjc/utils/cli/NullHelp.java9
-rw-r--r--base/src/main/java/bjc/utils/cli/objects/Command.java619
8 files changed, 319 insertions, 402 deletions
diff --git a/base/src/examples/java/bjc/utils/examples/ShuntTest.java b/base/src/examples/java/bjc/utils/examples/ShuntTest.java
index c5defe4..39d37ee 100644
--- a/base/src/examples/java/bjc/utils/examples/ShuntTest.java
+++ b/base/src/examples/java/bjc/utils/examples/ShuntTest.java
@@ -12,7 +12,8 @@ import bjc.utils.parserutils.ShuntingYard;
* @author ben
*
*/
-public class ShuntTest {
+public class ShuntTest
+{
/**
* Main method
*
@@ -20,16 +21,16 @@ public class ShuntTest {
* Unused CLI args
*/
public static void main(final String[] args) {
- final Scanner inputSource = new Scanner(System.in);
+ Scanner inputSource = new Scanner(System.in);
System.out.print("Enter a expression to shunt: ");
- final String line = inputSource.nextLine();
+ String line = inputSource.nextLine();
- final ShuntingYard<String> yard = new ShuntingYard<>(true);
+ ShuntingYard<String> yard = new ShuntingYard<>(true);
- final ListEx<String> preTokens
- = new FunctionalStringTokenizer(line).toList(strang -> strang);
- final ListEx<String> shuntedTokens = yard.postfix(preTokens, strang -> strang);
+ FunctionalStringTokenizer tokenizer = new FunctionalStringTokenizer(line);
+ ListEx<String> preTokens = tokenizer.toList(strang -> strang);
+ ListEx<String> shuntedTokens = yard.postfix(preTokens, strang -> strang);
System.out.println(shuntedTokens.toString());
diff --git a/base/src/main/java/bjc/utils/cli/Command.java b/base/src/main/java/bjc/utils/cli/Command.java
index 7451cf7..5f4a65b 100644
--- a/base/src/main/java/bjc/utils/cli/Command.java
+++ b/base/src/main/java/bjc/utils/cli/Command.java
@@ -11,7 +11,9 @@ public interface Command {
*
* @return A command that serves as an alias to this one
*/
- Command aliased();
+ default Command aliased() {
+ return new DelegatingCommand(this);
+ };
/**
* Get the handler that executes this command
diff --git a/base/src/main/java/bjc/utils/cli/DelegatingCommand.java b/base/src/main/java/bjc/utils/cli/DelegatingCommand.java
index f17b6b5..fa2d1db 100644
--- a/base/src/main/java/bjc/utils/cli/DelegatingCommand.java
+++ b/base/src/main/java/bjc/utils/cli/DelegatingCommand.java
@@ -21,6 +21,7 @@ class DelegatingCommand implements Command {
@Override
public Command aliased() {
+ // Prevent double-indirections
return new DelegatingCommand(delegate);
}
diff --git a/base/src/main/java/bjc/utils/cli/GenericCommand.java b/base/src/main/java/bjc/utils/cli/GenericCommand.java
index a847bea..6903152 100644
--- a/base/src/main/java/bjc/utils/cli/GenericCommand.java
+++ b/base/src/main/java/bjc/utils/cli/GenericCommand.java
@@ -12,40 +12,25 @@ public class GenericCommand implements Command {
/* The help for the command. */
private CommandHelp help;
- /**
- * Create a new generic command.
+ /** Create a new generic command.
*
- * @param handler
- * The handler to use for the command.
- *
- * @param description
- * The description of the command. May be null, in which case
- * a default is provided.
- *
- * @param help
- * The detailed help message for the command. May be null, in
- * which case the description is repeated for the detailed
- * help.
- */
- public GenericCommand(final CommandHandler handler, final String description,
- final String help) {
+ * @param handler The handler to use for the command.
+ * @param summary The summary of the command. May be null, in which case a
+ * default is provided.
+ * @param description The detailed help message for the command. May be null,
+ * in which case the summary is repeated for the
+ * detailed help. */
+ public GenericCommand(final CommandHandler handler, final String summary,
+ final String description) {
if (handler == null)
throw new NullPointerException("Command handler must not be null");
this.handler = handler;
- if (description == null) {
- this.help = new NullHelp();
- } else {
- this.help = new GenericHelp(description, help);
- }
- }
-
- @Override
- public Command aliased() {
- return new DelegatingCommand(this);
+ if (summary == null) this.help = new NullHelp();
+ else this.help = new GenericHelp(summary, description);
}
-
+
@Override
public CommandHandler getHandler() {
return handler;
@@ -57,16 +42,6 @@ public class GenericCommand implements Command {
}
@Override
- public boolean isAlias() {
- return false;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Object#toString()
- */
- @Override
public String toString() {
return String.format("GenericCommand [help=%s]", help);
}
diff --git a/base/src/main/java/bjc/utils/cli/GenericCommandMode.java b/base/src/main/java/bjc/utils/cli/GenericCommandMode.java
index 60c51a8..3642137 100644
--- a/base/src/main/java/bjc/utils/cli/GenericCommandMode.java
+++ b/base/src/main/java/bjc/utils/cli/GenericCommandMode.java
@@ -55,12 +55,12 @@ public class GenericCommandMode implements CommandMode {
throw new NullPointerException("Error output source must be non-null");
this.normalOutput = normalOutput;
- this.errorOutput = errorOutput;
+ this.errorOutput = errorOutput;
/* Initialize maps so that they sort in alphabetical order. */
commandHandlers = new FunctionalMap<>(new TreeMap<>());
defaultHandlers = new FunctionalMap<>(new TreeMap<>());
- helpTopics = new FunctionalMap<>(new TreeMap<>());
+ helpTopics = new FunctionalMap<>(new TreeMap<>());
/* Setup default commands. */
setupDefaultCommands();
@@ -84,17 +84,16 @@ public class GenericCommandMode implements CommandMode {
if (commandName == null) {
throw new NullPointerException("Command name must not be null");
} else if (aliasName == null) {
- String msg = "Alias name must not be null";
- throw new NullPointerException(msg);
+ throw new NullPointerException("Alias name must not be null");
} else if (!commandHandlers.containsKey(commandName)
&& !defaultHandlers.containsKey(commandName)) {
- String msg = String.format("Cannot alias non-existant command '%s'",
+ String msg = String.format("Cannot alias non-existing command '%s'",
commandName);
throw new IllegalArgumentException(msg);
} else if (commandHandlers.containsKey(aliasName)
|| defaultHandlers.containsKey(aliasName)) {
String msg = String.format(
- "Cannot bind alias '%s' to an already bound command.", aliasName);
+ "Cannot bind alias '%s' to an already used name.", aliasName);
throw new IllegalArgumentException(msg);
} else {
/* The command that will be aliased. */
diff --git a/base/src/main/java/bjc/utils/cli/GenericHelp.java b/base/src/main/java/bjc/utils/cli/GenericHelp.java
index 45d3a88..0157d4f 100644
--- a/base/src/main/java/bjc/utils/cli/GenericHelp.java
+++ b/base/src/main/java/bjc/utils/cli/GenericHelp.java
@@ -1,17 +1,14 @@
package bjc.utils.cli;
-/**
- * Generic implementation of a help topic.
+/** Generic implementation of a help topic.
*
- * @author ben
- */
+ * @author ben */
public class GenericHelp implements CommandHelp {
/* The strings for this help topic. */
private final String summary;
private final String description;
- /**
- * Create a new help topic.
+ /** Create a new help topic.
*
* @param summary
* The summary of this help topic.
@@ -31,9 +28,7 @@ public class GenericHelp implements CommandHelp {
@Override
public String getDescription() {
- if (description == null) {
- return summary;
- }
+ if (description == null) return summary;
return description;
}
diff --git a/base/src/main/java/bjc/utils/cli/NullHelp.java b/base/src/main/java/bjc/utils/cli/NullHelp.java
index 5e5fb67..048b6e7 100644
--- a/base/src/main/java/bjc/utils/cli/NullHelp.java
+++ b/base/src/main/java/bjc/utils/cli/NullHelp.java
@@ -1,10 +1,8 @@
package bjc.utils.cli;
-/**
- * Implementation of a help topic that doesn't exist.
+/** Implementation of a help topic that doesn't exist or isn't provided.
*
- * @author ben
- */
+ * @author ben */
public class NullHelp implements CommandHelp {
@Override
public String getDescription() {
@@ -15,5 +13,4 @@ public class NullHelp implements CommandHelp {
public String getSummary() {
return "No summary provided";
}
-
-}
+} \ No newline at end of file
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