From daceafeeb90680116c289a7c301c42eb3e57eb97 Mon Sep 17 00:00:00 2001 From: bjculkin Date: Tue, 28 Mar 2017 16:48:43 -0400 Subject: Mostly finish FDS core The major changes this time are that we have both data/command macros, as well as proper Unicode character support. --- .../main/java/bjc/utils/cli/fds/MacroFDSMode.java | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java b/BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java new file mode 100644 index 0000000..2576ee5 --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java @@ -0,0 +1,79 @@ +package bjc.utils.cli.fds; + +import bjc.utils.ioutils.Block; + +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +/** + * A implementation of FDS mode that invokes macros bound into a map. + * + * @author EVE + * + * @param + * The FDS state type. + */ +public class MacroFDSMode implements FDSMode { + private final class MacroFDSCommand implements FDSCommand { + private String macroName; + + public MacroFDSCommand(String c) { + macroName = c; + } + + @Override + public void run(FDSState state) { + macros.get(macroName).forEach(dest); + } + } + + /* + * The available macros. + */ + private Map> macros; + + /* + * Where to send blocks from macros. + */ + private Consumer dest; + + /** + * Create a new FDS mode for macros. + * + * @param macros + * The macros to use. + * + * @param dest + * The destination for blocks from the macros. + */ + public MacroFDSMode(Map> macros, Consumer dest) { + this.macros = macros; + this.dest = dest; + } + + @Override + public String[] registeredChars() { + return macros.keySet().toArray(new String[0]); + } + + @Override + public boolean hasCommand(String comName) { + return macros.containsKey(comName); + } + + @Override + public boolean hasSubmode(String submodeName) { + return false; + } + + @Override + public FDSCommand getCommand(String comName) throws FDSException { + return new MacroFDSCommand(comName); + } + + @Override + public FDSMode getSubmode(String submodeName) throws FDSException { + throw new FDSException("Submodes aren't available in macroName modes"); + } +} \ No newline at end of file -- cgit v1.2.3