summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/everge/ControlledString.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/everge/ControlledString.java')
-rw-r--r--src/main/java/bjc/everge/ControlledString.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/main/java/bjc/everge/ControlledString.java b/src/main/java/bjc/everge/ControlledString.java
new file mode 100644
index 0000000..f6e9f07
--- /dev/null
+++ b/src/main/java/bjc/everge/ControlledString.java
@@ -0,0 +1,137 @@
+package bjc.everge;
+
+/**
+ * Represents a string with a set of control flags attached to it.
+ *
+ * @author Ben Culkin
+ */
+public class ControlledString {
+ /**
+ * Represents a single control (a key-values pair)
+ *
+ * @author Ben Culkin
+ */
+ public static class Control {
+ /**
+ * The name of the control.
+ */
+ public String name;
+
+ /**
+ * The arguments to the control.
+ */
+ public String[] args;
+
+ /**
+ * Create a new blank control.
+ */
+ public Control() {
+
+ }
+
+ /**
+ * Create a new argless control.
+ *
+ * @param nam
+ * The name of the control.
+ */
+ public Control(String nam) {
+ name = nam;
+ }
+
+ /**
+ * Create a new control.
+ *
+ * @param nam
+ * The name of the control.
+ * @param ars
+ * The arguments of the control.
+ */
+ public Control(String nam, String... ars) {
+ name = nam;
+ args = ars;
+ }
+ }
+
+ /**
+ * The string the controls apply to.
+ */
+ public String strang;
+
+ /**
+ * The controls that apply to the string.
+ */
+ public Control[] controls;
+
+ /**
+ * Create a new blank controlled string.
+ */
+ public ControlledString() {
+ controls = new Control[0];
+ }
+
+ /**
+ * Create a new controlled string without any controls.
+ *
+ * @param strung
+ * The string to use.
+ */
+ public ControlledString(String strung) {
+ strang = strung;
+
+ controls = new Control[0];
+ }
+
+ /**
+ * Create a new controlled string.
+ *
+ * @param strung
+ * The string to use.
+ * @param controls
+ * The controls that apply to the string.
+ */
+ public ControlledString(String strung, Control... controls) {
+ strang = strung;
+
+ controls = controls;
+ }
+
+ /**
+ * Check if the string has controls.
+ *
+ * @return Whether or not the string has controls.
+ */
+ public boolean hasControls() {
+ return controls.length > 0;
+ }
+
+ /**
+ * Parse a controlled string from a regular string.
+ *
+ * The controls must be parsed from the beginning of the string, and are indicated by occurances
+ * of contInd that bracket them from the string. The individual controls are delimited by
+ * instances of contSep, with arguments to them being separated by occurances of contArg.
+ *
+ * Each of those separators (which must be regular strings, not regexes or anything) may be
+ * escaped by preceeding them with a copy of contEsc.
+ *
+ * @param lne
+ * The string to parse frmo.
+ * @param contInd
+ * The indicator for whether or not there are controls.
+ * @param contSep
+ * The separator of individual controls.
+ * @param contArg
+ * The separator of control arguments.
+ * @param contEsc
+ * The escape string for each of the separators/indicators.
+ *
+ * @return A parsed control string.
+ */
+ public static ControlledString parse(String lne, String contInd, String contSep,
+ String contArg, String contEsc) {
+ ControlledString cs = new ControlledString(lne);
+
+ return cs;
+ }
+}