1 22 23 package org.meshcms.util; 24 25 import java.util.*; 26 import javax.xml.transform.*; 27 28 public abstract class XHTMLTagStack { 29 public static final String A = "a"; 30 public static final String ABBR = "abbr"; 31 public static final String ACRONYM = "acronym"; 32 public static final String ADDRESS = "address"; 33 public static final String AREA = "area"; 34 public static final String B = "b"; 35 public static final String BASE = "base"; 36 public static final String BDO = "bdo"; 37 public static final String BIG = "big"; 38 public static final String BLOCKQUOTE = "blockquote"; 39 public static final String BODY = "body"; 40 public static final String BR = "br"; 41 public static final String BUTTON = "button"; 42 public static final String CAPTION = "caption"; 43 public static final String CITE = "cite"; 44 public static final String CODE = "code"; 45 public static final String COL = "col"; 46 public static final String COLGROUP = "colgroup"; 47 public static final String DD = "dd"; 48 public static final String DEL = "del"; 49 public static final String DIV = "div"; 50 public static final String DFN = "dfn"; 51 public static final String DL = "dl"; 52 public static final String DT = "dt"; 53 public static final String EM = "em"; 54 public static final String FIELDSET = "fieldset"; 55 public static final String FORM = "form"; 56 public static final String FRAME = "frame"; 57 public static final String FRAMESET = "frameset"; 58 public static final String H1 = "h1"; 59 public static final String H2 = "h2"; 60 public static final String H3 = "h3"; 61 public static final String H4 = "h4"; 62 public static final String H5 = "h5"; 63 public static final String H6 = "h6"; 64 public static final String HEAD = "head"; 65 public static final String HR = "hr"; 66 public static final String HTML = "html"; 67 public static final String I = "i"; 68 public static final String IFRAME = "iframe"; 69 public static final String IMG = "img"; 70 public static final String INPUT = "input"; 71 public static final String INS = "ins"; 72 public static final String KBD = "kbd"; 73 public static final String LABEL = "label"; 74 public static final String LEGEND = "legend"; 75 public static final String LI = "li"; 76 public static final String LINK = "link"; 77 public static final String MAP = "map"; 78 public static final String META = "meta"; 79 public static final String NOFRAMES = "noframes"; 80 public static final String NOSCRIPT = "noscript"; 81 public static final String OBJECT = "object"; 82 public static final String OL = "ol"; 83 public static final String OPTGROUP = "optgroup"; 84 public static final String OPTION = "option"; 85 public static final String P = "p"; 86 public static final String PARAM = "param"; 87 public static final String PRE = "pre"; 88 public static final String Q = "q"; 89 public static final String SAMP = "samp"; 90 public static final String SCRIPT = "script"; 91 public static final String SELECT = "select"; 92 public static final String SMALL = "small"; 93 public static final String SPAN = "span"; 94 public static final String STRONG = "strong"; 95 public static final String STYLE = "style"; 96 public static final String SUB = "sub"; 97 public static final String SUP = "sup"; 98 public static final String TABLE = "table"; 99 public static final String TBODY = "tbody"; 100 public static final String TD = "td"; 101 public static final String TEXTAREA = "textarea"; 102 public static final String TFOOT = "tfoot"; 103 public static final String TH = "th"; 104 public static final String THEAD = "thead"; 105 public static final String TITLE = "title"; 106 public static final String TR = "tr"; 107 public static final String TT = "tt"; 108 public static final String UL = "ul"; 109 public static final String VAR = "var"; 110 111 public static final String ATTR_ACCESSKEY = "accesskey"; 112 public static final String ATTR_CLASS = "class"; 113 public static final String ATTR_DIR = "dir"; 114 public static final String ATTR_ID = "id"; 115 public static final String ATTR_LANG = "lang"; 116 public static final String ATTR_STYLE = "style"; 117 public static final String ATTR_TABINDEX = "tabindex"; 118 public static final String ATTR_TITLE = "title"; 119 120 protected Stack tagStack; 121 122 public XHTMLTagStack() { 123 tagStack = new Stack(); 124 } 125 126 public abstract XHTMLTagStack addCDATA(String textData); 127 128 public abstract XHTMLTagStack addText(String textData); 129 130 public abstract String getCurrentTagName(); 131 132 public abstract XHTMLTagStack openTag(String tagName); 133 134 public abstract XHTMLTagStack setAttribute(String name, String value); 135 136 protected abstract void performCloseTag(); 137 138 public XHTMLTagStack closeTag() { 139 return closeTag(null); 140 } 141 142 public XHTMLTagStack closeTag(String tagName) { 143 if (tagStack.empty()) { 144 throw new IllegalStateException ("No tag to close"); 145 } 146 147 if (tagName != null) { 148 String currentTagName = getCurrentTagName(); 149 150 if (!currentTagName.equals(tagName)) { 151 throw new IllegalStateException ("Current tag is " + currentTagName + 152 ", not " + tagName); 153 } 154 } 155 156 performCloseTag(); 157 return this; 158 } 159 160 public static void configureTransformer(Transformer t, String charset) { 161 t.setOutputProperty(OutputKeys.METHOD, "xml"); 162 t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 163 t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"); 164 t.setOutputProperty(OutputKeys.INDENT, "yes"); 165 166 if (charset != null) { 167 t.setOutputProperty(OutputKeys.ENCODING, charset); 168 } 169 } 170 171 public void test() { 172 openTag(SCRIPT); { 173 setAttribute("type", "text/javascript"); 174 addCDATA("alert('ciao');"); 175 } closeTag(); 176 openTag(FORM); { 177 setAttribute("action", ""); 178 setAttribute("method", "post"); 179 openTag(FIELDSET); { 180 openTag(LEGEND).addText("Mail Form").closeTag(); 181 openTag(DIV); { 182 setAttribute(ATTR_CLASS, "field"); 183 openTag(LABEL); { 184 setAttribute("for", "msgmail"); 185 addText("Your Mail:"); 186 } closeTag(); 187 openTag(INPUT); { 188 setAttribute("type", "text"); 189 setAttribute(ATTR_ID, "msgmail"); 190 setAttribute("name", "msgmail"); 191 } closeTag(); 192 } closeTag(); 193 openTag(DIV); { 194 setAttribute(ATTR_CLASS, "field"); 195 openTag(LABEL); { 196 setAttribute("for", "msgtext"); 197 addText("Message Body:"); 198 } closeTag(); 199 openTag(TEXTAREA); { 200 setAttribute(ATTR_ID, "msgtext"); 201 setAttribute("name", "msgtext"); 202 addText("A line of text\n"); 203 addText("Other text"); 204 } closeTag(); 205 } closeTag(); 206 openTag(DIV).setAttribute(ATTR_CLASS, "buttons"); { 207 openTag(INPUT).setAttribute("value", "Send").closeTag(); 208 } closeTag(); 209 } closeTag(FIELDSET); } closeTag(); 211 } 212 } 213 | Popular Tags |