📄 #wmldeckbuilder.java#
字号:
while(i<source.length()){ switch(source.charAt(i)){ case '<': source = (i>0?source.substring(0,i):"") +"<" +(i<source.length()-1?source.substring(i+1):""); i+=3; break; case '&': source = (i>0?source.substring(0,i):"") +"&" +(i<source.length()-1?source.substring(i+1):""); i+=4; break; case '>': source = (i>0?source.substring(0,i):"") +">" +(i<source.length()-1?source.substring(i+1):""); i+=3; break; case '\n': if(encodeCR){ source = (i>0?source.substring(0,i):"") +"<br>" +(i<source.length()-1?source.substring(i+1):""); i+=4; }else{ i++; } break; default: i++; } } return(source); } /** * This inner class contains knowledge about the WML elements * which are supported by this user agent. This is where the WML * content is actually interpreted and constructed into the WmlCard * (and related) objects. * <p> The following tags are recognised to some extent: * <ul> * <li><a> * <li><br> * <li><card> * <li><do> * <li><go> * <li><i> * <li><input> * <li><p> * <li><b> * <li><u> * <li><big> * <li><em> * <li><select> * <li><option> * <li><postfield> * <li><onevent> * <li><img> * <li><prev> * <li><refresh> * <li><setvar> * <li><template> * <li><table> * <li><tr> * <li><td> * <li><timer> * </ul> * */ public class wmlelement{ String name; StringBuffer endTags; boolean begun; private Hashtable attributes; private WmlDeckBuilder builder; private WmlDeck deck; /** * Construct a wmlelement of the given name. * If the name is not recognised, then it will be ignored * (however, recognised elements contained by it will be * utilised). * * @param elname The name of this element */ public wmlelement(String elname, WmlDeckBuilder b){ builder = b; deck = builder.getDeck(); name = elname.toLowerCase(); attributes = new Hashtable(); endTags = new StringBuffer(); begun = false; } /** * Begin interpreting the attributes of this element. */ public void begin(Hashtable a){ attributes = a; // only want to begin once... if(begun){ return; } begun = true; //System.err.println("//beginning element ["+name + "]"); //System.err.println("//attributes are ["+attributes.toString()+"]"); //System.err.println("beginning "+name); /** * If the name is "wml", then we are within a (hopefully) valid * WML deck. */ if(name.equals("wml")){ builder.setDeck(new WmlDeck(sourceUrl)); return; }else if(deck == null){ /** * Any tags outside the "wml" tags will be ignored. */ System.err.println("ignoring tag .. not inside wml["+name+"]"); return; } if(name.equals("a")){ String href = (String)attributes.get("href"); href = deck.resolveUrl(href); deck.currentcard.cardData("<a href='javascript:setCard(\""+href+"\");'>"); endTags.append("</a>"); }else if(name.equals("anchor")){ String accesskey = (String)attributes.get("accesskey"); String title = (String)attributes.get("title"); deck.currentcard.cardData("<a href='javascript:reval(getHref("+deck.countTasks()+"));'>"); endTags.append("</a>"); }else if(name.equals("br")){ deck.currentcard.cardData("<br>"); }else if(name.equals("card")){ String id = (String)attributes.get("id"); String onenterforward = (String)attributes.get("onenterforward"); String onenterbackward = (String)attributes.get("onenterbackward"); String align = (String)attributes.get("align"); String title = (String)attributes.get("title"); String ontimer = (String)attributes.get("ontimer"); if(id == null || id.equals("")){ id = "aplpi"+ ++deck.unknownCards; } WmlCard card = new WmlCard(deck,id); if(onenterforward != null){ card.onenterforward("setCard('"+deck.resolveUrl(onenterforward)+"');"); } if(onenterbackward != null){ card.onenterbackward("setCard('"+deck.resolveUrl(onenterbackward)+"');"); } deck.addCard(card); if(ontimer != null){ ontimer = deck.resolveUrl(ontimer); card.ontimer(new String("setCard('"+ontimer+"');")); } if(title != null){ deck.currentcard.cardData("<!--title--><center>" +title+"</center>"); } if(align != null){ deck.currentcard.cardData("<"+align+">"); endTags.append("</"+align+">"); } endTags.append("\n"); }else if(name.equals("do")){ String type = (String)attributes.get("type"); String label = (String)attributes.get("label"); String name_ = (String)attributes.get("name"); String optional = (String)attributes.get("optional"); if(type == null){ }else if(type.equals("accept")){ //Positive acknowledgement (acceptance) if(label == null){ label="ok"; } deck.currentcard.navData( "<a href='javascript:reval(getHref("+deck.countTasks()+"));'>" + "<em>" + label+"</em></a>"); }else if(type.equals("prev")){ //Backward history navigation if(label == null){ label = "back"; } deck.currentcard.navData( "<a href='javascript:prevCard();'>" + "<em>" + label+"</em></a>"); }else if(type.equals("help")){ //Request for help. May be context-sensitive. }else if(type.equals("reset")){ //Clearing or resetting state. }else if(type.equals("options")){ //Context-sensitive request for options //or additional operations. }else if(type.equals("delete")){ //Delete item or choice }else if(type.equals("unknown")){ //A generic do element. Equivalent to an //empty string (e. g., type="") }else{ //don't know about this type. } }else if(name.equals("go")){ String href = // %HREF; #REQUIRED (String)attributes.get("href"); String sendreferer = // %boolean; "false" (String)attributes.get("sendreferer"); String method = // # (post| get) "get" (String)attributes.get("method"); if(method == null){ method = "get"; } WmlTask t = deck.newTask(); t.init("go",href,sendreferer, method); }else if(name.equals("i")){ deck.currentcard.cardData("<i>"); endTags.append("</i>"); }else if(name.equals("input")){ String name_ = // NMTOKEN #REQUIRED (String) attributes.get("name"); String type_ = // (text| password) "text" (String) attributes.get("type"); if(type_ == null){ type_ = "text"; } String value =//%vdata; #IMPLIED (String) attributes.get("value"); if(value == null){ value = ""; } String format =//CDATA #IMPLIED (String) attributes.get("format"); String emptyok = //%boolean; "false" (String) attributes.get("emptyok"); if(emptyok == null){ emptyok = "false"; } String size = //# %number; #IMPLIED (String) attributes.get("size"); if(size==null){ size="10"; } try{ int v = (Integer.valueOf(size)).intValue(); if( v>12 || v<1 ){ size="12"; } }catch(Exception E){ size="12"; } String maxlength = //%number; #IMPLIED (String) attributes.get("maxlength"); String tabindex = //%number; #IMPLIED ( (String) attributes.get("tabindex"); String title = //%vdata; #IMPLIED (String) attributes.get("title"); if(title==null){ title = ""; } String accesskey =//%vdata; #IMPLIED (String)attributes.get("accesskey"); deck.setVar(name_,value); deck.currentcard.cardData(title+"<br><input size="+size + " type="+ type_ + " value=\"$"+ name_+ "\"" + " onchange=\"setVar('" +name_+"',this.value);\">"); }else if(name.equals("p")){ String align = (String)attributes.get("align"); String mode = (String)attributes.get("mode"); if(align == null){ align="left"; } deck.currentcard.cardData("<p align=\""+align+"\">"); endTags.append("</p>"); }else if(name.equals("b")){ deck.currentcard.cardData("<b>"); endTags.append("</b>"); }else if(name.equals("u")){ deck.currentcard.cardData("<u>"); endTags.append("</u>"); }else if(name.equals("big")){ deck.currentcard.cardData("<b>"); endTags.append("</b>"); }else if(name.equals("em")){ deck.currentcard.cardData("<em>"); endTags.append("</em>"); }else if(name.equals("select")){ // title %vdata; #IMPLIED String title_ = (String)attributes.get("title"); // name NMTOKEN #IMPLIED String name_ = (String)attributes.get("name"); // value %vdata; #IMPLIED String value = (String)attributes.get("value"); // iname NMTOKEN #IMPLIED String iname = (String)attributes.get("iname"); // ivalue %vdata; #IMPLIED String ivalue = (String)attributes.get("ivalue"); // multiple %boolean; "false" String multiple = (String)attributes.get("multiple"); boolean multiple_ = true; if(multiple == null || (!multiple.equals("true"))){ multiple_ = false; } // tabindex %number; #IMPLIED String tabindex = (String)attributes.get("tabindex"); deck.currentcard.beginSelect(title_,name_,value, iname,ivalue,multiple_); //deck.currentcard.cardData("<!--select-->"); //endTags.append("<!--/select-->"); }else if(name.equals("option")){ String onpick = (String)attributes.get("onpick"); String title_ = (String)attributes.get("title"); String value = (String)attributes.get("value"); if(onpick!=null && !onpick.equals("")){ onpick = deck.resolveUrl(onpick); } //deck.currentcard.cardData("<br><em>></em><a href=\"javascript:setCard('"+onpick+"');\">"); //endTags.append("</a>"); deck.currentcard.addOption(value,title_,onpick); }else if(name.equals("postfield")){ // these are the post fields for the current 'go' String _name = (String)attributes.get("name"); String value = (String)attributes.get("value"); WmlTask t = deck.currentTask(); if(t != null){ t.postfield(_name,value); } }else if(name.equals("img")){ String src = // %HREF; #REQUIRED (String)attributes.get("src"); String localsrc = //%vdata; #IMPLIED (String)attributes.get("localsrc"); String alt = //%vdata; #REQUIRED (String)attributes.get("alt"); String vspace = //%length; "0" (String)attributes.get("vspace"); String hspace = //%length; "0" (String)attributes.get("hspace"); String align = //%IAlign; "bottom" (String)attributes.get("align"); String height = //%length; #IMPLIED (String)attributes.get("height"); String width = //%length; #IMPLIED (String)attributes.get("width"); deck.currentcard.cardData("<img "); if(localsrc != null && localsrc.length()>0){ src=localsrc; if(alt == null || alt.length()>0){ alt=localsrc; } } if(src != null && src.length()>0){ src = deck.resolveUrl(src); deck.currentcard.cardData(" src=\"" +WmlDeckBuilder.imgconverter +src+"&.gif\""); if(alt != null){ deck.currentcard.cardData(" alt=\""+alt+"\" "); } } deck.currentcard.cardData(">"); endTags.append("</img>"); }else if(name.equals("onevent")){ String tipe = (String)attributes.get("type"); if(tipe!=null){ deck.awaitingtask=tipe; } }else if(name.equals("prev")){ deck.newTask(); WmlTask t = deck.currentTask(); t.init("prev"); }else if(name.equals("refresh")){ deck.newTask(); WmlTask t = deck.currentTask(); t.init("refresh"); }else if (name.equals("setvar")){ WmlTask t = deck.currentTask(); String varname = (String)attributes.get("name"); String value = (String)attributes.get("value"); if(t !=null){ t.setvar(varname, value); } }else if(name.equals("template")){ WmlTemplate t = new WmlTemplate(deck); deck.currentcard = t; }else if(name.equals("table")){ deck.currentcard.cardData("<table>"); endTags.append("</table>"); }else if(name.equals("tr")){ deck.currentcard.cardData("<tr>"); endTags.append("</tr>"); }else if(name.equals("td")){ deck.currentcard.cardData("<td><font size=1>"); endTags.append("</font></td>"); }else if(name.equals("timer")){ String value = (String)attributes.get("value"); String name_ = (String)attributes.get("name"); if(value != null){ deck.setVar("aplpicardtimeout"+deck.currentcard.name(), value+"00"); }else{ value = "0"; } if(name_ != null){ deck.setVar(name_, value); deck.setVar("aplpicardtimeout"+deck.currentcard.name(), "$"+name_); } }else{ deck.currentcard.cardData("<!-- failed to recognize tag ["+name+"]-->"); } } /** * Finish interpreting the attributes of this element. * Any necessary cleanup activities will be performed. */ public void end(){ //System.err.println("//ending element ["+name + "]"); if(deck == null){ return; } if(deck.currentcard != null){ deck.currentcard.cardData(endTags.toString()); } if(name.equals("card")){ deck.currentcard = (WmlCard)null; }else if(name.equals("template")){ deck.currentcard = (WmlCard)null; }else if(name.equals("go")){ deck.endTask(); }else if(name.equals("onevent")){ deck.awaitingtask = null; }else if(name.equals("prev")){ deck.endTask(); }else if(name.equals("refresh")){ deck.endTask(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -