diff options
| author | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-28 16:48:43 -0400 |
|---|---|---|
| committer | bjculkin <bjculkin@mix.wvu.edu> | 2017-03-28 16:48:43 -0400 |
| commit | daceafeeb90680116c289a7c301c42eb3e57eb97 (patch) | |
| tree | 77e4656d7559bc84ff381fc95f285a41c4c7d867 /BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java | |
| parent | 32041545ef34fa83aeea682d97be4ca9a94659f2 (diff) | |
Mostly finish FDS core
The major changes this time are that we have both data/command
macros, as well as proper Unicode character support.
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/cli/fds/MacroFDSMode.java | 79 |
1 files changed, 79 insertions, 0 deletions
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 <S> + * The FDS state type. + */ +public class MacroFDSMode<S> implements FDSMode<S> { + private final class MacroFDSCommand implements FDSCommand<S> { + private String macroName; + + public MacroFDSCommand(String c) { + macroName = c; + } + + @Override + public void run(FDSState<S> state) { + macros.get(macroName).forEach(dest); + } + } + + /* + * The available macros. + */ + private Map<String, List<Block>> macros; + + /* + * Where to send blocks from macros. + */ + private Consumer<Block> 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<String, List<Block>> macros, Consumer<Block> 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<S> getCommand(String comName) throws FDSException { + return new MacroFDSCommand(comName); + } + + @Override + public FDSMode<S> getSubmode(String submodeName) throws FDSException { + throw new FDSException("Submodes aren't available in macroName modes"); + } +}
\ No newline at end of file |
