package com.baselet.element.elementnew.plot.parser; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import com.baselet.gui.AutocompletionText; public class PlotConstants { /** Shared Value Constants **/ // Some key->value assignments have a list as value and the following separator is used to separate the list entries public static final String VALUE_LIST_SEPARATOR = ","; public static final String KEY_VALUE_SEP = "="; // If a variable is set to DEFAULT_VALUE, it gets removed from the parsers plotValuesCache, therefore the DEFAULT is used again public static final String DEFAULT_VALUE = "auto"; /** Parser Constants **/ public static final String PLOT = "plot"; public static final String DATA = "data"; public static final String REGEX_COMMENT = "(//.*)"; public static final String REGEX_KEY = "([(\\w)\\.]+)"; // a value is a comma separated list of word characters or "-" (for negative int eg: min_val=-3) or # (for color decoding) or . (for hierarchies) public static final String REGEX_VALUE = "([-(\\w)#\\." + VALUE_LIST_SEPARATOR + "]*)"; public static final String REGEX_VALUE_ASSIGNMENT = "(" + REGEX_KEY + KEY_VALUE_SEP + REGEX_VALUE + ")"; // plot followed by an optional space or plot followed by 1 or more value assignments (values which are only valid for the plot) public static final String REGEX_PLOT = "((" + PLOT + " ?)|(" + PLOT + " (" + REGEX_VALUE_ASSIGNMENT + " )*" + REGEX_VALUE_ASSIGNMENT + "))"; // +plot (overlap plots) followed by an optional space or plot followed by 1 or more value assignments (values which are only valid for the plot) public static final String REGEX_PLOT_ADD = "(\\+" + REGEX_PLOT + ")"; // data followed by an optional space or by space and a name which consists of word characters public static final String REGEX_DATA = "((" + DATA + " ?)|(" + DATA + " (\\w)+))"; // 1 non-comment-line which contains at least 1 Tab is an interpreted dataset public static final String REGEX_DATA_SEPARATOR = "([\t ]+)"; public static final String REGEX_DATA_GUESS = "((?!(" + REGEX_COMMENT + "))(([^=]+)|(.*" + REGEX_DATA_SEPARATOR + ".*)))"; // The following line is needed to color everything which doesn't match another RegEx // public static final String REGEX_COLOR_BASE = "(?!((" + REGEX_COMMENT + ")|(" + PLOT + ")|(" + REGEX_VALUE_ASSIGNMENT + "))).*"; /* The following variables are automatically parsed for the autocompletion. Therefore some conventions must be made: 1.) The possible values of a key must be listed in the following lines or they will not be recognized by the autocompletion 2.) Every key is separated in 3 parts: KEY_<type>_<name>. <type> can be STRING,INT,LIST,BOOL (in future there may be more types) 3.) If there is a limited number of possible values it must be named: <name>_<value> where <name> must match the <name> tag in the key 4.) values with _DEFAULT at the end are ignored by the autocompletion. */ /** Plotgrid Value Constants **/ public static final String KEY_INT_GRID_WIDTH = "grid.width"; public static final String GRID_WIDTH_DEFAULT = "3"; /** Plot Value Constants **/ public static final String KEY_BOOL_DATA_INVERT = "data.invert"; public static final Boolean DATA_INVERT_DEFAULT = false; public static final String KEY_BOOL_PLOT_TILT = "tilt"; public static final Boolean PLOT_TILT_DEFAULT = false; public static final String KEY_INT_X_POSITION = "pos.x"; // DEFAULT: filling grid from upper left to lower right corner public static final String KEY_INT_Y_POSITION = "pos.y"; public static final String KEY_INT_MIN_VALUE = "value.min"; // DEFAULT: the lowest/highest value in the plot public static final String MIN_VALUE_ALL = "all"; public static final String KEY_INT_MAX_VALUE = "value.max"; public static final String MAX_VALUE_ALL = "all"; public static final String KEY_LIST_COLORS = "colors"; // DEFAULT: cycling through colors-list public static final List<String> COLORS_DEFAULT = Collections.unmodifiableList(Arrays.asList("red", "blue", "green", "orange", "cyan", "magenta", "pink")); public static interface PlotSetting { public String getValue(); } public static enum PlotType implements PlotSetting { Bar, Line, Pie, Scatter; @Override public String getValue() { return toString().toLowerCase(); } public static String getKey() { return "type"; } } public static enum AxisShow implements PlotSetting { Axis, Line, Marker, Text, Nothing(""); private final String value; AxisShow() { value = toString().toLowerCase(); } public static String getValueList() { return KEY_VALUE_SEP + AxisShow.Axis.getValue() + VALUE_LIST_SEPARATOR + AxisShow.Line.getValue() + VALUE_LIST_SEPARATOR + AxisShow.Marker.getValue() + VALUE_LIST_SEPARATOR + AxisShow.Text.getValue(); } AxisShow(String value) { this.value = value; } @Override public String getValue() { return value; } public static String getKeyValueAxis() { return "axis.value.show"; } public static String getKeyDescAxis() { return "axis.desc.show"; } } public static enum AxisList implements PlotSetting { Relevant, Nothing(""); private final String value; AxisList() { value = toString().toLowerCase(); } AxisList(String value) { this.value = value; } @Override public String getValue() { return value; } public static String getKey() { return "axis.value.list"; } } public static List<String> toStringList(PlotSetting[] input) { return toStringList(Arrays.asList(input)); } public static List<String> toStringList(List<? extends PlotSetting> input) { List<String> returnList = new ArrayList<String>(); for (PlotSetting o : input) { returnList.add(o.getValue()); } return returnList; } public static final List<AutocompletionText> AUTOCOMPLETION_LIST = Collections.unmodifiableList(Arrays.asList( new AutocompletionText(PLOT, "draws the configured plot"), new AutocompletionText(DATA, "marks everything until the next empty line as dataset"), new AutocompletionText(DATA + KEY_VALUE_SEP + "<name>", "as data but with explicit name"), new AutocompletionText(KEY_INT_GRID_WIDTH + KEY_VALUE_SEP + GRID_WIDTH_DEFAULT, "sets the amount of plots per line"), new AutocompletionText(KEY_BOOL_DATA_INVERT + KEY_VALUE_SEP + DATA_INVERT_DEFAULT, "inverts the dataset"), new AutocompletionText(KEY_BOOL_PLOT_TILT + KEY_VALUE_SEP + PLOT_TILT_DEFAULT, "tilts the plot"), new AutocompletionText(KEY_INT_X_POSITION + KEY_VALUE_SEP + "<integer>", "places the next plot at specific horizontal grid position"), new AutocompletionText(KEY_INT_Y_POSITION + KEY_VALUE_SEP + "<integer>", "places the next plot at specific vertical grid position"), new AutocompletionText(KEY_INT_MIN_VALUE + KEY_VALUE_SEP + MIN_VALUE_ALL, "restrict the highest value shown in the plot"), new AutocompletionText(KEY_INT_MAX_VALUE + KEY_VALUE_SEP + MAX_VALUE_ALL, "restrict the lowest value shown in the plot"), new AutocompletionText(KEY_LIST_COLORS + KEY_VALUE_SEP + COLORS_DEFAULT.get(0) + VALUE_LIST_SEPARATOR + COLORS_DEFAULT.get(1), "sets a list of colors which will be cycled by the plot"), new AutocompletionText(PlotType.getKey() + KEY_VALUE_SEP + PlotType.Bar.getValue(), "sets the plot type to Bar plot"), new AutocompletionText(PlotType.getKey() + KEY_VALUE_SEP + PlotType.Line.getValue(), "sets the plot type to Line plot"), new AutocompletionText(PlotType.getKey() + KEY_VALUE_SEP + PlotType.Pie.getValue(), "sets the plot type to Pie plot"), new AutocompletionText(PlotType.getKey() + KEY_VALUE_SEP + PlotType.Scatter.getValue(), "sets the plot type to Scatter plot"), new AutocompletionText(AxisShow.getKeyValueAxis() + AxisShow.getValueList(), "a list of elements to show at the value axis"), new AutocompletionText(AxisShow.getKeyDescAxis() + AxisShow.getValueList(), "a list of elements to show at the description axis"), new AutocompletionText(AxisList.getKey() + KEY_VALUE_SEP + AxisList.Relevant.getValue(), "restricts shown values to occurring ones"))); }