1 5 package com.teamkonzept.publishing.markups; 6 7 import java.util.*; 8 9 import com.teamkonzept.lib.*; 10 import org.apache.log4j.Category; 11 12 public class TKMarkupTree extends TKMarkupItemList 13 { 14 private static final Category cat = Category.getInstance(TKMarkupTree.class); 15 16 public void dump (TKVector dump, int level) { 17 18 if (dump == null) return; 19 20 Enumeration e = elements(); 21 while (e.hasMoreElements()) { 22 23 Object elem = e.nextElement(); 24 if (elem == null) continue; 25 26 if (elem instanceof String ) 27 dump.addElement (new TKMarkupDumpRecord(level,"String",elem.toString())); 28 29 else if (elem instanceof TKMarkupNode)((TKMarkupNode) elem).dump (dump,level); 30 else if (elem instanceof TKMarkupTree)((TKMarkupTree) elem).dump (dump,level); 31 else if (elem instanceof TKMarkup) { 32 33 TKMarkup markup = (TKMarkup) elem; 34 dump.addElement(new TKMarkupDumpRecord(level,"Markup",markup.toDisplay())); 35 } 36 } 37 } 38 39 public String expand() { 40 41 StringBuffer buffer = new StringBuffer (); 42 43 Enumeration e = elements(); 44 while (e.hasMoreElements()) { 45 46 Object elem = e.nextElement(); 47 if (elem == null) continue; 48 49 if (elem instanceof String ) buffer.append(elem); 50 else if (elem instanceof TKMarkupNode) buffer.append (((TKMarkupNode) elem).expand()); 51 else if (elem instanceof TKMarkupTree) buffer.append (((TKMarkupTree) elem).expand()); 52 else if (elem instanceof TKMarkup) buffer.append (((TKMarkup) elem).expand()); 53 } 54 55 return new String (buffer); 56 } 57 58 public String markupByName2tmpl (TKMarkupStatics statics, String name) { 59 60 if (name == null) return " "; 61 62 TKDefinedMarkup markup; 63 64 try { markup = new TKDefinedMarkup (name,new TKHashtable (),-1); } 65 catch (Exception ex) { 66 67 cat.error("*** markupByName2tmpl: ", ex); 68 return " "; 69 } 70 71 try { markup.complete (); } catch (Exception ex) { 72 73 cat.error("*** markupByName2tmpl: ",ex); 74 } 75 76 return markup.convert2Tmpl(); 77 } 78 79 public String doCrControl (String text) { 80 81 TKMarkupStatics statics = TKMarkupStatics.setup(); 82 boolean doCrConversion = TKMarkupDefinition.doCrConversion (statics); 83 String crMarkup = TKMarkupDefinition.crMarkup (statics); 84 String crcrMarkup = TKMarkupDefinition.crcrMarkup (statics); 85 86 if (!doCrConversion || (text == null)) return text; 87 88 StringBuffer digest = new StringBuffer (); 89 int pos = 0; 90 91 while (pos < text.length()) { 92 93 char chr = text.charAt (pos); 94 95 if ((chr != '\n') && (chr != '\r')) digest.append (chr); 96 97 else { 98 if (pos+1 < text.length()) 99 if ((chr == '\n') && (text.charAt (pos+1) == '\r')) pos++; 100 else if ((chr == '\r') && (text.charAt (pos+1) == '\n')) pos++; 101 102 if ((pos+1 < text.length()) && 103 ((text.charAt (pos+1) == '\n') || 104 (text.charAt (pos+1) == '\r'))) { 105 106 pos++; 107 chr = text.charAt (pos); 108 109 if (pos+1 < text.length()) 110 if ((chr == '\n') && (text.charAt (pos+1) == '\r')) pos++; 111 else if ((chr == '\r') && (text.charAt (pos+1) == '\n')) pos++; 112 113 digest.append (markupByName2tmpl(statics,crcrMarkup)); 114 115 } else digest.append (markupByName2tmpl(statics,crMarkup)); 116 } 117 118 pos++; 119 } 120 121 return new String (digest); 122 } 123 124 public String convert2Tmpl () { 125 126 StringBuffer buffer = new StringBuffer (); 127 128 Enumeration e = elements(); 129 while (e.hasMoreElements()) { 130 131 Object elem = e.nextElement(); 132 if (elem == null) continue; 133 134 if (elem instanceof String ) buffer.append(doCrControl(TKMarkupParser.doEscapes((String ) elem))); 135 else if (elem instanceof TKMarkupNode) buffer.append (((TKMarkupNode) elem).convert2Tmpl()); 136 else if (elem instanceof TKMarkupTree) buffer.append (((TKMarkupTree) elem).convert2Tmpl()); 137 else if (elem instanceof TKMarkup) { 138 139 TKMarkup markup = (TKMarkup) elem; 140 buffer.append (markup.convert2Tmpl()); 141 142 if (elem instanceof TKDefinedMarkup) { 143 144 if (!((TKDefinedMarkup) elem).isAtom) 145 buffer.append ("</TK_TAG:").append(markup.name).append('>'); 146 147 } else buffer.append ("</").append(markup.name).append('>'); 148 } 149 } 150 151 return new String (buffer); 152 } 153 154 public String convert2Xml () { 155 156 StringBuffer buffer = new StringBuffer (); 157 158 Enumeration e = elements(); 159 while (e.hasMoreElements()) { 160 161 Object elem = e.nextElement(); 162 if (elem == null) continue; 163 164 if (elem instanceof String ) buffer.append(doCrControl(elem.toString())); 165 else if (elem instanceof TKMarkupNode) buffer.append (((TKMarkupNode) elem).convert2Xml()); 166 else if (elem instanceof TKMarkupTree) buffer.append (((TKMarkupTree) elem).convert2Xml()); 167 else if (elem instanceof TKMarkup) { 168 169 TKMarkup markup = (TKMarkup) elem; 170 buffer.append (markup.convert2Xml()); 171 172 if (!(elem instanceof TKDefinedMarkup) || 173 !((TKDefinedMarkup) elem).isAtom) 174 buffer.append ("</").append(markup.name).append('>'); 175 } 176 } 177 178 return new String (buffer); 179 } 180 } 181 | Popular Tags |