import java.awt.Color;
import com.jmxp.MXPProcessor;
import com.jmxp.MXPResult;
import com.jmxp.libmxp;
import com.jmxp.structures.SendStruct;
import com.jmxp.structures.flagStruct;
import com.jmxp.structures.formatStruct;
import com.jmxp.structures.gaugeStruct;
import com.jmxp.structures.imageStruct;
import com.jmxp.structures.internalWindowStruct;
import com.jmxp.structures.linkStruct;
import com.jmxp.structures.moveStruct;
import com.jmxp.structures.relocateStruct;
import com.jmxp.structures.soundStruct;
import com.jmxp.structures.statStruct;
import com.jmxp.structures.varStruct;
import com.jmxp.structures.windowStruct;
public class test
{
private MXPProcessor proc;
public test()
{
proc = new MXPProcessor("Test", "0.1");
try
{
test1();
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void processText(String text) throws Exception
{
proc.processText(text);
}
private void test1() throws Exception
{
Color white = Color.white;
Color black = Color.black;
Color yellow = Color.YELLOW;
//initialize the MXP handler
mxpSetDefaultText ("fixed", 12, false, false, false, false, white, black);
mxpSetHeaderParams (1, "fixed", 28, true, true, true, false, yellow, black);
mxpSetHeaderParams (2, "fixed", 24, true, true, true, false, yellow, black);
mxpSetHeaderParams (3, "fixed", 20, true, true, true, false, yellow, black);
mxpSetHeaderParams (4, "fixed", 16, true, true, false, false, yellow, black);
mxpSetHeaderParams (5, "fixed", 14, true, true, false, false, yellow, black);
mxpSetHeaderParams (6, "fixed", 12, true, true, false, false, yellow, black);
mxpSetDefaultGaugeColor(white);
mxpSetNonProportFont ("fixed");
mxpSetClient ("Test", "0.1");
//feed the library with text
proc.processText("\u001B[1z");
proc.processText("&unknownentity;<><c yellow back=blue>starting</c> text");
proc.processText(" and<font size=11 blue blackx face='\"\"><<>Times New Roman' 13>more");
proc.processText("<font face=\"baaah\"></font></font> text\r\n\u001B[1zline 2");
proc.processText(" <S><b><i>with bold text, Á, <, >, unfinished &");
proc.processText("\u001B[3z</BoLd>:)<a href=\r\nline 3");
proc.processText("\u001B[6z");
proc.processText("<hr><p>line1\r\nline2\r\nline3\r\nline4\r\n all on the same line!</p>");
proc.processText("break line here<br><nobr>this won't break \r\nstill");
proc.processText("the same line\r\nanother line");
proc.processText("<c darkgreen> dark green <h>High-color</h> Normal color</c>\r\n");
proc.processText("<a \"http://www.kmuddy.org\" KMuddy kmuddy>Click here for KMuddy</a>");
proc.processText("<send href=\"buy bread|buy milk\" hINt=\"this is a hint|bread hint|");
proc.processText("milk hint\" expire=link>yes, bread</send>");
proc.processText("<expire link><expire>\n");
proc.processText("<VeRsIoN>\n");
proc.processText("<sound bah.wav v=10000 p=30 c=1><music chrm.mid u=none>");
proc.processText("<gauge hp max=maxhp caption='Your HP' color=green><stat sp max=maxsp");
proc.processText("caption='Spell points' invalid>");
proc.processText("<relocate port=8080 name=bah server=test><user><password>\n");
proc.processText("<image bah.jpg URL=www.url.org t=type1 h=100 w=50 align=middle");
proc.processText("vspace=10 hspace=10><image bah.jpg ISMaP><send showmap>");
proc.processText("<image bah.jpg ismap></send>\n");
proc.processText("<!en test mytest DESC=desc PUBLISH>&test;<!en test DELETE>");
proc.processText("<v bah>some<b></b>thing</v>\n");
proc.processText("<h2>Heading 2</h2><h5>Heading 5</h5>\r\n<small>small</small>");
proc.processText("<tt>non-proportional</tt>\r\n");
proc.processText("<frame name=Status redirect Height=30>");
proc.processText("text for status");
proc.processText("<frame _previous redirect>");
proc.processText("<dest status>100</dest>");
proc.processText("<dest status eof>100</dest>");
proc.processText("<frame Status close>\r\n");
proc.processText("<!-- this is a comment, <b> stuff not parsed -->\r\n");
proc.processText("This will break the line: \rnew line\r\n");
//OKay, here goes the !element testing...
//EMPTY and OPEN flags have been successfully tested :)*/
proc.processText("<!element boldred '<color red><b>'>");
proc.processText("normal, <boldred>bold red</boldred>, normal again\n");
proc.processText("<!element ex '<send>'><ex>n</ex><ex>s</ex>\r\n");
proc.processText("<!entity col 'This should not be displayed' private>");
proc.processText("<!element bt '<b><c &col;>' att='col=red' flag=hrm>");
proc.processText("<bt>bold red <bt blue>bold blue</bt></bt>\r\n");
proc.processText("<!attlist bt 'col=green'>");
proc.processText("<bt>bold green <bt blue>bold blue</bt></bt>\r\n");
proc.processText("<!el bt delete><bt>in invalid tag</bt>\r\n");
proc.processText("<!el tagtest '<b><u><i>' tag=28>\r\n");
proc.processText("\u001B[28zthis should be b,u,i\r\nnormal\r\n");
//display results
while ( proc.hasResult())
{
MXPResult res = proc.nextResult();
displayResult(res);
}
}
private void mxpSetClient(String name, String version)
{
proc.setClient(name, version);
}
private void mxpSetNonProportFont(String font)
{
proc.setNonProportFont(font);
}
private void mxpSetDefaultGaugeColor(Color color)
{
proc.setDefaultGaugeColor(color);
}
private void mxpSetHeaderParams(int which, String font, int size, boolean _bold,
boolean _italic, boolean _underline, boolean _strikeout, Color fg, Color bg)
{
proc.setHeaderParams(which, font, size, _bold, _italic, _underline,
_strikeout, fg, bg);
}
private void mxpSetDefaultText(String font, int size, boolean _bold, boolean _italic,
boolean _underline, boolean _strikeout, Color fg, Color bg)
{
proc.setDefaultText (font, size, _bold, _italic, _underline,
_strikeout, fg, bg);
}
void displayResult (MXPResult res)
{
switch (res.type)
{
case 0: {
System.out.print("Nothing.\n");
}
break;
case 1: {
String s = (String) res.data;
if (s.equals("\r\n")) //newlines are always sent separately
System.out.print("Newline.\n");
else
System.out.print("Text: "+s+"\n");
}
break;
case 2: {
int t = (Integer) res.data;
System.out.print("Line tag: "+t+"\n");
}
break;
case 3: {
flagStruct fs = (flagStruct) res.data;
if (fs.begin)
System.out.print("Start of flag: "+fs.name+"\n");
else
System.out.print("End of flag: "+fs.name+"\n");
}
break;
case 4: {
varStruct vs = (varStruct) res.data;
if (vs.erase)
System.out.print("Erase variable: "+vs.name+"\n");
else
System.out.print("Variable: "+vs.name+", value: "+vs.value+"\n");
}
break;
case 5: {
formatStruct fs = (formatStruct) res.data;
int mask = fs.usemask;
if ((mask & formatStruct.USE_BOLD) != 0 )
System.out.print("Formatting: "+
(((fs.attributes & libmxp.Bold) != 0 ) ? "bold" : "not bold")+"\n");
if ((mask & formatStruct.USE_ITALICS) != 0 )
System.out.print("Formatting: "+
(((fs.attributes & libmxp.Italic) != 0 ) ? "italics" : "not italics")+"\n");
if ((mask & formatStruct.USE_UNDERLINE) != 0 )
System.out.print("Formatting: "+
(((fs.attributes & libmxp.Underline) != 0 ) ? "underline" : "not underline")+"\n");
if ((mask & formatStruct.USE_STRIKEOUT) != 0 )
System.out.print("Formatting: "+
(((fs.attributes & libmxp.Strikeout) != 0 ) ? "strikeout" : "not strikeout")+"\n");
if ((mask & formatStruct.USE_FG) != 0 )
System.out.printf("Formatting: foreground color (%d, %d, %d)\n", fs.fg.getRed(),
fs.fg.getGreen(), fs.fg.getBlue());
if ((mask & formatStruct.USE_BG) != 0 )
System.out.printf("Formatting: background color (%d, %d, %d)\n", fs.bg.getRed(),
fs.bg.getGreen(), fs.bg.getBlue());
if ((mask & formatStruct.USE_FONT) != 0 )
System.out.print("Formatting: font "+fs.font+"\n");
if ((mask & formatStruct.USE_SIZE) != 0 )
System.out.printf("Formatting: size %d\n", fs.size);
}
break;
case 6: {
linkStruct ls = (linkStruct) res.data;
System.out.printf("URL link: name %s, URL %s, text %s, hint %s\n",
ls.name, ls.url, ls.text, ls.hint);
}
break;
case 7: {
SendStruct ss = (SendStruct) res.data;
System.out.printf("Send link: name %s, command %s, text %s, hint %s, to prompt: %s, menu: %s\n",
ss.name, ss.command, ss.text,
ss.hint, (ss.toprompt?"yes":"no"), (ss.ismenu?"yes":"no"));
}
break;
case 8: {
String c = (String)res.data;
System.out.print("Expire: "+c+"\n");
}
break;
case 9:
{
String c = (String)res.data;
System.out.print("Send this: "+c+"\n");
}
break;
case 10: {
System.out.print("Horizontal line\n");
}
break;
case 11: {
soundStruct ss = (soundStruct) res.data;
if (ss.isSOUND)
System.out.printf("Sound: file %s, URL %s, volume %d, %d repeats, priority %d, type %s\n",
ss.fname, ss.url, ss.vol, ss.repeats, ss.priority,
ss.type);
else
System.out.printf("Music: file %s, URL %s, volume %d, %d repeats, continue %s, type %s\n",
ss.fname, ss.url, ss.vol, ss.repeats,
(ss.continuemusic?"yes":"no"), ss.type);
}
break;
case 12: {
windowStruct ws = (windowStruct) res.data;
System.out.printf("Create window: name %s, title %s, left %d, top %d, width %d, height %d, scrolling %s, floating %s\n",
ws.name, ws.title, ws.left, ws.top, ws.width, ws.height,
(ws.scrolling?"yes":"no"), (ws.floating?"yes":"no"));
}
break;
case 13: {
internalWindowStruct ws = (internalWindowStruct) res.data;
String s = "none";
switch (ws.align) {
case Left: s = "left"; break;
case Right: s = "right"; break;
case Bottom: s = "bottom"; break;
case Top: s = "top"; break;
case Middle: s = "middle (invalid!)"; break;
};
System.out.printf("Create internal window: name %s, title %s, align %s, scrolling %s\n",
ws.name, ws.title, s, (ws.scrolling?"yes":"no"));
}
break;
case 14: {
String s = (String)res.data;
System.out.printf("Close window: %s\n", s);
}
break;
case 15: {
String s = (String)res.data;
System.out.printf("Set active window: %s\n", s);
}
break;
case 16: {
moveStruct ms = (moveStruct) res.data;
System.out.printf("Move cursor: X=%d, Y=%d\n", ms.x, ms.y);
}
break;
case 17: {
System.out.printf("Erase text: %s\n", ((res.data!=null) ? "rest of frame" : "rest of line"));
}
break;
case 18: {
relocateStruct rs = (relocateStruct) res.data;
System.out.printf("Relocate: server %s, port %d\n", rs.server, rs.port);
}
break;
case 19: {
System.out.print( ((Boolean)res.data) ? "Send username\n" : "Send password\n");
}
break;
case 20: {
imageStruct is = (imageStruct) res.data;
String s = "";
switch (is.align) {
case Left: s = "left"; break;
case Right: s = "right"; break;
case Bottom: s = "bottom"; break;
case Top: s = "top"; break;
case Middle: s = "middle"; break;
};
System.out.printf("Image: name %s, URL %s, type %s, height %d, width %d, hspace %d, vspace %d, align %s\n",
is.fname, is.url, is.type, is.height,
is.width, is.hspace, is.vspace, s);
}
break;
case 21: {
String s = (String)res.data;
System.out.printf("Image map: %s\n", s);
}
break;
case 22: {
gaugeStruct gs = (gaugeStruct) res.data;
System.out.printf("Gauge: variable %s, max.variable %s, caption %s, color (%d, %d, %d)\n",
gs.variable, gs.maxvariable,
gs.caption, gs.color.getRed(), gs.color.getGreen(), gs.color.getBlue());
}
break;
case 23: {
statStruct ss = (statStruct) res.data;
System.out.printf("Status bar: variable %s, max.variable %s, caption %s\n",
ss.variable, ss.maxvariable,
ss.caption);
}
break;
case -1: {
String s = (String)res.data;
System.out.printf("Error: %s\n", s);
}
break;
case -2: {
String s = (String)res.data;
System.out.printf("Warning: %s\n", s);
}
break;
}
}
public static void main(String[] args)
{
new test();
}
}