// $Id: HegemonInputFilter.java,v 1.14 1999/06/23 04:16:05 greear Exp $
// $Revision: 1.14 $ $Author: greear $ $Date: 1999/06/23 04:16:05 $
//
//Hegemon Client Code: Java Client for ScryMUD Server Code
//Copyright (C) 1998 Ben Greear
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// To contact the Author, Ben Greear: greear@cyberhighway.net, (preferred)
// greearb@agcs.com
//
import java.util.*;
import java.awt.*;
/* filter stuff coming FROM mud */
class HegemonInputFilter extends Object {
StringBuffer current_line;
OlcStore olc_store;
int last_phase = -1;
SocketWriter sink;
ActionFrame actions;
ColorSelectionManager color_mgr;
HegemonManager hm;
HegemonScroll heg_scroll;
HegemonDisplay heg_disp;
boolean last_tag_was_space;
boolean last_was_lt;
boolean in_tag;
boolean last_was_gt;
Integer context_mode;
// PONDERING: a case for every different thing we want to capture??
public static final Integer MODE_NORMAL = new Integer(0);
public static final Integer MODE_HELP_PAGE = new Integer(1);
public static final Integer MODE_STAT_SD = new Integer(2);
public static final Integer MODE_STAT_ND = new Integer(3);
public static final Integer MODE_STAT_LD = new Integer(4);
public static final Integer MODE_MSCRIPT_DATA = new Integer(5);
public static final Integer MODE_PATH_CELL_STAT_LD = new Integer(6);
public static final Integer MODE_KEYWORD_LD = new Integer(7);
public static final Integer MODE_BUG_TITLE = new Integer(8);
public static final Integer MODE_BUG_COMMENT_ENTRY = new Integer(9);
StringBuffer tag_sofar;
StringBuffer disp_sofar;
Hashtable tag_hash; //hash table for tags w/no arguments
public HegemonInputFilter(OlcStore os, SocketWriter snk,
ActionFrame acts, HegemonManager h,
HegemonScroll hs, ColorSelectionManager cm) {
super();
hm = h;
context_mode = MODE_NORMAL;
heg_scroll = hs;
heg_disp = heg_scroll.getPar();
current_line = new StringBuffer(100);
olc_store = os;
sink = snk; /* for automatic output (ie actions) */
actions = acts;
color_mgr = cm;
last_tag_was_space = false;
last_was_lt = false;
last_was_gt = false;
in_tag = false;
tag_sofar = new StringBuffer(50);
disp_sofar = new StringBuffer(1000);
tag_hash = new Hashtable();
tag_hash.put("BATTLE", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getBattleSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getBattleFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/BATTLE", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getBattleSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getBattleFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("BEEP", new TagCommand() {
public boolean run(Vector args) {
java.awt.Toolkit.getDefaultToolkit().beep();
return true;
}});
tag_hash.put("/BUG_ENTRY", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
hm.getBugListEditor().signalEntryDone();
return true;
}});
tag_hash.put("BUG_TITLE", new TagCommand() {
public boolean run(Vector args) {
hm.getBugListEditor().clear();
heg_scroll.getProperties().pushContextMode(MODE_BUG_TITLE);
context_mode = MODE_BUG_TITLE;
return true;
}});
tag_hash.put("/BUG_TITLE", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
return true;
}});
tag_hash.put("TELL", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getTellSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getTellFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/TELL", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getGossipSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getTellFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("/BUG_COMMENT_ENTRY", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
hm.getBugListEditor().signalCommentDone();
return true;
}});
tag_hash.put("DOOR_LIST", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getDoorListSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getDoorListFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/DOOR_LIST", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getDoorListSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getDoorListFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("MOB_LIST", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getMobListSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getMobListFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/MOB_LIST", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getMobListSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getMobListFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("ITEM_LIST", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getItemListSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getItemListFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/ITEM_LIST", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getItemListSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getItemListFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("RM_DESC", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getRoomDescSelection();
heg_scroll.getProperties().pushContextMode(MODE_STAT_LD);
context_mode = MODE_STAT_LD;
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getRoomDescFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/RM_DESC", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
if (color_mgr.getRoomDescSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getRoomDescFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("/RM_SHORT_DESC", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
if (color_mgr.getRoomShortDescSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getRoomShortDescFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("GOSSIP", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getGossipSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getGossipFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/GOSSIP", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getGossipSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getGossipFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("SAY", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getSaySelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getSayFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/SAY", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getSaySelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getSayFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("YELL", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getYellSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getYellFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/YELL", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getYellSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getYellFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("AUCTION", new TagCommand() {
public boolean run(Vector args) {
Color c = color_mgr.getAuctionSelection();
if (c != null)
heg_scroll.pushColor(c);
Font f = color_mgr.getAuctionFont();
if (f != null)
heg_scroll.pushFont(f);
return true;
}});
tag_hash.put("/AUCTION", new TagCommand() {
public boolean run(Vector args) {
if (color_mgr.getAuctionSelection() != null)
heg_scroll.getProperties().popColor();
if (color_mgr.getAuctionFont() != null)
heg_scroll.getProperties().popFont();
return true;
}});
tag_hash.put("TAB", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushTab();
return true;
}});
tag_hash.put("/TAB", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popTab();
return true;
}});
tag_hash.put("/HELP", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
hm.getHelpFrame().saveHelpText(); //write it to disk
return true;
}});
tag_hash.put("P", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.drawNewline();
return true;
}});
tag_hash.put("PRE", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushMode(heg_scroll.
getProperties().MODE_PRE);
return true;
}});
tag_hash.put("/PRE", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popMode();
return true;
}});
tag_hash.put("/COLOR", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popColor();
return true;
}});
tag_hash.put("STAT_SD", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_STAT_SD);
context_mode = MODE_STAT_SD;
return true;
}});
tag_hash.put("STAT_ND", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_STAT_ND);
context_mode = MODE_STAT_ND;
return true;
}});
tag_hash.put("STAT_LD", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_STAT_LD);
context_mode = MODE_STAT_LD;
return true;
}});
tag_hash.put("KEYWORD_DESC", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_KEYWORD_LD);
context_mode = MODE_KEYWORD_LD;
return true;
}});
tag_hash.put("PSTAT_LD", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_PATH_CELL_STAT_LD);
context_mode = MODE_PATH_CELL_STAT_LD;
return true;
}});
tag_hash.put("SCRIPT_DATA", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_MSCRIPT_DATA);
context_mode = MODE_MSCRIPT_DATA;
return true;
}});
tag_hash.put("/KEYWORD_DESC", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
return true;
}});
tag_hash.put("/SCRIPT_DATA", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
return true;
}});
tag_hash.put("/STAT", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().popContextMode();
context_mode = heg_scroll.getProperties().getContextMode();
return true;
}});
tag_hash.put("ENGAGE_HEGEMON", new TagCommand() {
public boolean run(Vector args) {
try {
hm.getSocketManager().write("using_client\n");
} catch (Exception e) { e.printStackTrace(); }
return true;
}});
tag_hash.put("__SCRY__", new TagCommand() {
public boolean run(Vector args) {
try {
/* let the server know what we are.
*/
hm.getSocketManager().write("__HEGEMON__\n");
} catch (Exception e) { e.printStackTrace(); }
return true;
}});
tag_hash.put("DISCRIM", new TagCommand() {
public boolean run(Vector args) {
StringBuffer buf = new StringBuffer(100);
for (int i = 1; i<args.size(); i++) {
buf.append((String)(args.elementAt(i)) + " ");
}
setMobScriptDiscrim(buf.toString());
return true;
}});
tag_hash.put("KEYWORD", new TagCommand() {
public boolean run(Vector args) {
//first one is keyword number
hm.getKeywordEditor().do_clear();
hm.getKeywordEditor().setCellNum((String)(args.elementAt(1)));
StringBuffer buf = new StringBuffer(100);
// the rest are names
for (int i = 2; i<args.size(); i++) {
buf.append((String)(args.elementAt(i)) + " ");
}
hm.getKeywordEditor().setNames(buf.toString());
return true;
}});
tag_hash.put("NAMES", new TagCommand() {
public boolean run(Vector args) {
StringBuffer buf = new StringBuffer(100);
// the rest are names
for (int i = 1; i<args.size(); i++) {
buf.append((String)(args.elementAt(i)) + " ");
}
hm.getOlEditor().setNames(buf.toString());
return true;
}});
tag_hash.put("EXITS", new TagCommand() {
public boolean run(Vector args) {
hm.getClientDisplay().getInputField().getExitNavigator().setDirs(args);
return true;
}});
tag_hash.put("VALUE_INAME", new TagCommand() {
public boolean run(Vector args) {
Log.instance().dbg("Was VALUE_INAME..\n");
StringBuffer buf = new StringBuffer(100);
// First is the index...
// the rest are it's name
for (int i = 2; i<args.size(); i++) {
buf.append((String)(args.elementAt(i)) + " ");
}
hm.getPsoEditor().setName((String)(args.elementAt(1)),
buf.toString());
return true;
}});
tag_hash.put("RM_SHORT_DESC", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_STAT_SD);
context_mode = MODE_STAT_SD;
OlEditor tmp = hm.getOlEditor();
if (!tmp.isFrozen()) {
int i = Integer.parseInt((String)(args.elementAt(1)));
tmp.do_clear();
tmp.setObjNum(i);
tmp.appendInRoomDesc("N/A");
tmp.setObjType(OlEditor.ROOM);
}
Color c = color_mgr.getRoomShortDescSelection();
if (c != null)
heg_scroll.pushColor(c);
return true;
}});
tag_hash.put("COLOR", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.pushColor((String)(args.elementAt(1)));
return true;
}});
tag_hash.put("MSTAT", new TagCommand() {
public boolean run(Vector args) {
OlEditor tmp = hm.getOlEditor();
if (!tmp.isFrozen()) {
int i = Integer.parseInt((String)(args.elementAt(1)));
tmp.do_clear();
tmp.setObjNum(i);
tmp.setObjType(OlEditor.MOB);
}
return true;
}});
tag_hash.put("OSTAT", new TagCommand() {
public boolean run(Vector args) {
OlEditor tmp = hm.getOlEditor();
if (!tmp.isFrozen()) {
int i = Integer.parseInt((String)(args.elementAt(1)));
tmp.do_clear();
tmp.setObjNum(i);
tmp.setObjType(OlEditor.OBJ);
}
return true;
}});
tag_hash.put("PHASE", new TagCommand() {
public boolean run(Vector args) {
int tmp = Integer.parseInt((String)(args.elementAt(1)));
if (tmp == last_phase) {
MessageDialog md =
new MessageDialog("ALERT",
"You must enter OLC data at your prompt.",
"yellow", "black");
return true;
}//if
else {
Log.instance().dbg("(OLC) Phase: " + tmp);
last_phase = tmp;
signalCase(last_phase);
return false;
}
}});
tag_hash.put("PATH_IS_DEST", new TagCommand() {
public boolean run(Vector args) {
hm.getPathCellEditor().setIsDest((String)(args.elementAt(1)));
return true;
}});
tag_hash.put("H", new TagCommand() {
public boolean run(Vector args) {
try {
heg_scroll.getProperties().pushTextSize(new Integer((String)(args.elementAt(1))));
return true;
}
catch (Exception e) {
Log.instance().err(e.toString());
return true;
}
}});
tag_hash.put("HELP", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.getProperties().pushContextMode(MODE_HELP_PAGE);
context_mode = MODE_HELP_PAGE;
HelpFrame tmp = hm.getHelpFrame();
tmp.setHelpCategory((String)args.elementAt(1));
tmp.setHelpTopic((String)args.elementAt(2));
return true;
}});
tag_hash.put("PSTAT", new TagCommand() {
public boolean run(Vector args) {
hm.getPathCellEditor().do_clear(); // PathCell Stat
hm.getPathCellEditor().setVehNum((String)(args.elementAt(1)));
hm.getPathCellEditor().setCellNum((String)(args.elementAt(2)));
return true;
}});
tag_hash.put("PATH_DIR", new TagCommand() {
public boolean run(Vector args) {
hm.getPathCellEditor().setDir((String)(args.elementAt(1)),
(String)(args.elementAt(2)));
return true;
}});
tag_hash.put("BUG_COMMENT_ENTRY", new TagCommand() {
public boolean run(Vector args) {
hm.getBugListEditor().newEntry((String)(args.elementAt(1)),
(String)(args.elementAt(2)));
heg_scroll.getProperties().pushContextMode(MODE_BUG_COMMENT_ENTRY);
context_mode = MODE_BUG_COMMENT_ENTRY;
return true;
}});
tag_hash.put("VALUE_LIST", new TagCommand() {
public boolean run(Vector args) {
hm.getPsoEditor().setList((String)(args.elementAt(1)), // i_th
(String)(args.elementAt(2)), // name
(String)(args.elementAt(3))); // gold
return true;
}});
tag_hash.put("VALUE_ITEM", new TagCommand() {
public boolean run(Vector args) {
hm.getPsoEditor().setItem((String)(args.elementAt(1)), // idx
(String)(args.elementAt(2)), // obj#
(String)(args.elementAt(3)), // $sell
(String)(args.elementAt(4))); // $buy
return true;
}});
tag_hash.put("PROMPT", new TagCommand() {
public boolean run(Vector args) {
heg_scroll.setPrompt(Integer.parseInt((String)(args.elementAt(1))),
Integer.parseInt((String)(args.elementAt(2))),
Integer.parseInt((String)(args.elementAt(3))),
Integer.parseInt((String)(args.elementAt(4))),
Integer.parseInt((String)(args.elementAt(5))),
Integer.parseInt((String)(args.elementAt(6))));
return true;
}});
tag_hash.put("MOB_SCRIPT", new TagCommand() {
public boolean run(Vector args) {
hm.getMobScriptEditor().do_clear();
setMobScriptData((String)(args.elementAt(1)),
(String)(args.elementAt(2)),
(String)(args.elementAt(3)),
(String)(args.elementAt(4)),
(String)(args.elementAt(5)),
"MOB",
(String)(args.elementAt(6)));
return true;
}});
tag_hash.put("ROOM_SCRIPT", new TagCommand() {
public boolean run(Vector args) {
hm.getMobScriptEditor().do_clear();
setMobScriptData((String)(args.elementAt(1)),
(String)(args.elementAt(2)),
(String)(args.elementAt(3)),
(String)(args.elementAt(4)),
(String)(args.elementAt(5)),
"ROOM",
(String)(args.elementAt(6)));
return true;
}});
tag_hash.put("OBJ_SCRIPT", new TagCommand() {
public boolean run(Vector args) {
hm.getMobScriptEditor().do_clear();
setMobScriptData((String)(args.elementAt(1)),
(String)(args.elementAt(2)),
(String)(args.elementAt(3)),
(String)(args.elementAt(4)),
(String)(args.elementAt(5)),
"OBJECT",
(String)(args.elementAt(6)));
return true;
}});
tag_hash.put("BUG_ENTRY", new TagCommand() {
public boolean run(Vector args) {
hm.getBugListEditor().setBugEntry((String)(args.elementAt(1)), //num
(String)(args.elementAt(2)), //state
(String)(args.elementAt(3)), //cr_date
(String)(args.elementAt(4)), //reporter
(String)(args.elementAt(5)), //room_num
(String)(args.elementAt(6)), //assigned_to
(String)(args.elementAt(7))); //col_type
return true;
}});
// Would be nice to force the hash-table to optimize itself at this point.
}//constructor
public final void setOutput(HegemonScroll disp) {
heg_scroll = disp;
}
public final synchronized void filter(String input) {
/* add GAGs and SUBSTITUTIONS here... */
// input = doGags(input);
//Log.it("in filter, input: -:" + input + ":-");
if (actions != null) {
filterActions(input);
}
displayInput(input);
}//filter
public final void filterActions(String input) {
if ((hm == null) || !hm.getActionManager().getActionsEnabled()) {
return;
}
int len = input.length();
char ch;
for (int i = 0; i<len; i++) {
if ((ch = input.charAt(i)) == '\n') {
filterLine(current_line.toString());
current_line = new StringBuffer(100);
}
else {
current_line.append(ch);
}
}//for
/* when here, all but the last line (and only if it doesn't have
a newline at the end of it) has been filtered. Lets filter this
remainder in case someone want's to action off of a prompt.
For example: Enter thy name: is a favorite.
*/
if (filterLine(current_line.toString()) == true) {
current_line = new StringBuffer(100); /*make sure we don't do an
action on it again... */
}
return; //just wanted to look :)
}//filterActions()
/** returns true if it did an action, false otherwise */
private boolean filterLine(String ln) {
int idx = 0;
int len = ln.length();
String num;
Enumeration e;
boolean retval = false;
/* check for actions */
if ((sink != null) && (actions != null)) {
Action acts_vect[] = actions.getActions();
Action a;
int acts_len = 0;
if (acts_vect != null) {
acts_len = acts_vect.length;
}
for (int i = 0; i<acts_len; i++) {
a = acts_vect[i];
if ((idx = ln.indexOf(a.getTrigger())) != -1) {
retval = true;
sink.send(a.getAction() + "\n");
}//if
}//for
}//if sink, ie if we are doing actions
return retval;
}//filterLine()
protected void signalCase(int which_un) {
if (olc_store != null) {
olc_store.processCase(which_un);
}
}
void displayInput(String txt) {
Log.instance().io("\nin displayInput, last_was_lt: " + last_was_lt
+ " last_was_gt: " + last_was_gt + " disp_sofar -:"
+ disp_sofar + " tag_sofar: " + tag_sofar + " in_tag: "
+ in_tag + " txt: -:" + txt + ":-");
int len = txt.length();
char ch;
for (int i = 0; i<len; i++) {
ch = txt.charAt(i);
if (last_was_lt && !in_tag) {
if (ch == '<') {
disp_sofar.append(ch);
last_was_lt = false;
continue;
}
else {
dispenseText(disp_sofar.toString());
disp_sofar = new StringBuffer(1000);
in_tag = true;
}
}//if last was a less-than
if (in_tag) {
if (last_was_gt) {
if (ch == '>') {
tag_sofar.append(ch);
last_was_gt = false;
}
else {
// When here, we got a tag...
if (!processTag((tag_sofar.toString()).trim())) {
//Log.it("Could not process tag: " + tag_sofar);
dispenseText("<" + tag_sofar.toString() + ">");
}
// Clear the slate, ready to start over...
tag_sofar = new StringBuffer(50);
last_was_lt = false;
in_tag = false;
last_was_gt = false;
i--; //need to re-look at this character...
}//if last was greater-than.
}//if last was greater-than
else {
if ((ch == '=') || (Character.isWhitespace(ch))) {
if (!last_tag_was_space)
tag_sofar.append(' ');
last_tag_was_space = true;
}
else {
last_tag_was_space = false;
if (ch == '>') {
last_was_gt = true;
}
else {
last_was_gt = false;
tag_sofar.append(ch);
}
}//else
}//else
}//if in_tag
else {
if (ch == '<') {
last_was_lt = true;
}// if not a less than
else {
disp_sofar.append(ch);
last_was_lt = false;
}
}//else, not in tag
}//for
if (disp_sofar.length() > 0) {
dispenseText(disp_sofar.toString());
disp_sofar = new StringBuffer(1000);
}//if
heg_disp.paintScroll();
}//displayInput
// Depending on which case we're in, send text to certain places..
void dispenseText(String txt) {
Log.instance().dbg("DispenseText, context_mode: " + context_mode
+ " text -:" + txt + ":-\n");
if (context_mode.equals(MODE_NORMAL)) {
heg_scroll.append(txt);
return;
}//if
else if (context_mode.equals(MODE_HELP_PAGE)) {
hm.getHelpFrame().appendAndCache(txt);
hm.getHelpFrame().getHegemonDisplay().paintScroll();
if (heg_scroll != null) {
heg_scroll.append(txt);
}
return;
}//if
else if (context_mode.equals(MODE_STAT_SD)) {
hm.getOlEditor().appendShortDesc(txt);
heg_scroll.append(txt);
}
else if (context_mode.equals(MODE_STAT_ND)) {
hm.getOlEditor().appendInRoomDesc(txt);
heg_scroll.append(txt);
}
else if (context_mode.equals(MODE_STAT_LD)) {
hm.getOlEditor().appendLongDesc(txt);
heg_scroll.append(txt);
}
else if (context_mode.equals(MODE_KEYWORD_LD)) {
hm.getKeywordEditor().appendDesc(txt);
//heg_scroll.append(txt);
}
else if (context_mode.equals(MODE_PATH_CELL_STAT_LD)) {
hm.getPathCellEditor().appendLongDesc(txt);
//heg_scroll.append(txt);
}
else if (context_mode.equals(MODE_MSCRIPT_DATA)) {
hm.getMobScriptEditor().appendScript(txt);
heg_scroll.append(txt);
}
else if (context_mode.equals(MODE_BUG_TITLE)) {
hm.getBugListEditor().appendTitle(txt);
}
else if (context_mode.equals(MODE_BUG_COMMENT_ENTRY)) {
hm.getBugListEditor().appendComment(txt);
}
else {
Log.instance().err("ERROR: default case in dispenseText.");
}
}//dispenseText
/** Ok then, have a tag, minus the < and the >. We ASSUME that
exactly one SPACE seperates each token. And it DOES NOT START OR
END WITH A SPACE. Returns true if was able to comprehend the tag,
else returns false. */
private final boolean processTag(String tag) {
Log.instance().io("in processTag, tag: -:" + tag + ":-");
Vector args = new Vector();
int len = tag.length();
boolean in_quotes = false;
StringBuffer sb = new StringBuffer(50);
char ch;
boolean is_escaped = false;
for (int i = 0; i<len; i++) {
ch = tag.charAt(i);
if (ch == '\\') {
if (is_escaped) {
sb.append(ch);
}
else {
is_escaped = true;
}
}
else if (ch == '\"') {
if (is_escaped) {
sb.append(ch);
}
else {
//end or beginning of quoted tag
if (in_quotes) { //at the end then
args.addElement(sb.toString());
sb = new StringBuffer(50);
in_quotes = false;
}
else {
in_quotes = true;
}
}//else
}//if got a quote
else if (ch == ' ') {
if (in_quotes) {
sb.append(ch);
}
else {
if (sb.length() > 0) {
args.addElement(sb.toString());
sb = new StringBuffer(50);
}
}
}//if
else {
sb.append(ch);
}
}//for
// Get the last one...
if (sb.length() > 0) {
args.addElement(sb.toString());
}
/* when here, got all our args in a row. */
return processArgs(args);
}//processTag
/** return value is true if cmd was recognized, false otherwise. */
private final boolean processArgs(Vector args) {
int len = args.size();
if (len == 0)
return false; //blah, all fer nothing!
boolean valid = false;
String cmd = (String)(args.elementAt(0));
if ((Log.instance().getLevel() & Log.IO) > 0) {
Log.instance().io("\nin processArgs(), COMMAND: -:" + cmd
+ ":- len: " + len + "\n");
for (int i = 0; i<len; i++) {
Log.instance().io("\targ[" + i + "] -:" + (String)(args.elementAt(i))
+ ":-");
}//for
}//if
/* now our large switch of different commands... */
TagCommand tg = (TagCommand)(tag_hash.get(cmd.toUpperCase()));
if (tg != null) {
try {
return tg.run(args);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
return false;
}//processArgs
void setMobScriptData(String trig, String mnum, String actor_num,
String target_num, String precedence, String entity,
String script_idx) {
hm.getMobScriptEditor().setMobScriptData(trig, mnum, actor_num,
target_num, precedence, script_idx);
hm.getMobScriptEditor().setEntity(entity);
}
void setMobScriptDiscrim(String discrim) {
hm.getMobScriptEditor().setMobScriptDiscrim(discrim);
}
}//HegemonInputFilter class