/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" */ package key.commands; import key.*; import key.util.Trie; import java.io.*; import java.util.StringTokenizer; import java.util.Enumeration; /** * A remarkable scripting tool, and the start of a simple expression * parser (all this will go a long way, one day), the print class * accepts, as it's argument, what is to be printed. If the * argument is inclosed in ""'s, the quotes are stripped and it is * printed as is. if enclosed in ()'s, the brackets are stripped, * and a search is performed based on the current context, the value * of the result is printed (using toString()). otherwise, the * arguments are just printed. mainly useful for alias & the scripting * commands, such as the loginscript. */ public class Print extends Command { public Print() { setKey( "print" ); usage = "[<identifier>]"; } public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException { String id; if( args.hasMoreTokens() ) id = args.nextToken( "" ); else { ic.blankLine(); return; } Object o; char c = id.charAt( 0 ); switch( c ) { // include for future compatibility case '\"': { int i = id.lastIndexOf( '\"' ); if( i != -1 ) id = id.substring( 1, i ); ic.send( id ); break; } case '(': { int i = id.lastIndexOf( ')' ); if( i != -1 ) id = id.substring( 1, i ); try { o = new Search( id, p.getContext() ).result; } catch( InvalidSearchException e ) { ic.sendError( e.getMessage() ); return; } if( o == null ) ic.sendFeedback( Key.nullString ); else if( o instanceof Paragraph ) { ic.send( (Paragraph) o ); } else if( o instanceof Screen ) { ic.send( (Screen) o ); } else if( o instanceof Trie ) { ic.sendError( "Multiple matches: " + ((Trie)o).contents() ); } else ic.sendFeedback( o.toString() ); break; } default: { if( Character.isDigit( c ) ) { // a number, probably ic.send( id ); } } } } }