1 /*******************************************************************************
\r
2 * ============LICENSE_START====================================================
\r
4 * * ===========================================================================
\r
5 * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * * Copyright © 2017 Amdocs
\r
7 * * ===========================================================================
\r
8 * * Licensed under the Apache License, Version 2.0 (the "License");
\r
9 * * you may not use this file except in compliance with the License.
\r
10 * * You may obtain a copy of the License at
\r
12 * * http://www.apache.org/licenses/LICENSE-2.0
\r
14 * * Unless required by applicable law or agreed to in writing, software
\r
15 * * distributed under the License is distributed on an "AS IS" BASIS,
\r
16 * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
17 * * See the License for the specific language governing permissions and
\r
18 * * limitations under the License.
\r
19 * * ============LICENSE_END====================================================
\r
21 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
\r
23 ******************************************************************************/
\r
24 package com.att.rosetta;
\r
26 import java.io.IOException;
\r
27 import java.io.Reader;
\r
28 import java.util.Map.Entry;
\r
29 import java.util.TreeMap;
\r
31 public class XmlEscape {
\r
32 private XmlEscape() {}
\r
34 private static final TreeMap<String,Integer> charMap; // see initialization at end
\r
35 private static final TreeMap<Integer,String> intMap; // see initialization at end
\r
37 public static void xmlEscape(StringBuilder sb, Reader r) throws ParseException {
\r
40 StringBuilder esc = new StringBuilder();
\r
41 for(int cnt = 0;cnt<9 /*max*/; ++cnt) {
\r
42 if((c=r.read())<0)throw new ParseException("Invalid Data: Unfinished Escape Sequence");
\r
44 esc.append((char)c);
\r
45 } else { // evaluate
\r
46 Integer i = charMap.get(esc.toString());
\r
48 // leave in nasty XML format for now.
\r
53 sb.append((char)i.intValue());
\r
60 } catch (IOException e) {
\r
61 throw new ParseException(e);
\r
65 public static void xmlEscape(StringBuilder sb, int chr) {
\r
67 sb.append(intMap.get(chr));
\r
71 public static String convert(StringBuilder insb) {
\r
73 StringBuilder sb=null;
\r
74 for(idx=0;idx<insb.length();++idx) {
\r
75 ch = insb.charAt(idx);
\r
76 if(ch>=160 || ch==34 || ch==38 || ch==39 || ch==60 || ch==62) {
\r
77 sb = new StringBuilder();
\r
78 sb.append(insb,0,idx);
\r
83 if(sb==null)return insb.toString();
\r
85 for(int i=idx;i<insb.length();++i) {
\r
86 ch = insb.charAt(i);
\r
89 case 34: sb.append("""); break;
\r
90 case 38: sb.append("&"); break;
\r
91 case 39: sb.append("'"); break;
\r
92 case 60: sb.append("<"); break;
\r
93 case 62: sb.append(">"); break;
\r
95 sb.append((char)ch);
\r
98 String s = intMap.get(ch);
\r
99 if(s==null)sb.append((char)ch);
\r
107 return sb.toString();
\r
111 charMap = new TreeMap<String, Integer>();
\r
112 intMap = new TreeMap<Integer,String>();
\r
113 charMap.put("quot", 34);
\r
114 charMap.put("amp",38);
\r
115 charMap.put("apos",39);
\r
116 charMap.put("lt",60);
\r
117 charMap.put("gt",62);
\r
118 charMap.put("nbsp",160);
\r
119 charMap.put("iexcl",161);
\r
120 charMap.put("cent",162);
\r
121 charMap.put("pound",163);
\r
122 charMap.put("curren",164);
\r
123 charMap.put("yen",165);
\r
124 charMap.put("brvbar",166);
\r
125 charMap.put("sect",167);
\r
126 charMap.put("uml",168);
\r
127 charMap.put("copy",169);
\r
128 charMap.put("ordf",170);
\r
129 charMap.put("laquo",171);
\r
130 charMap.put("not",172);
\r
131 charMap.put("shy",173);
\r
132 charMap.put("reg",174);
\r
133 charMap.put("macr",175);
\r
134 charMap.put("deg",176);
\r
135 charMap.put("plusmn",177);
\r
136 charMap.put("sup2",178);
\r
137 charMap.put("sup3",179);
\r
138 charMap.put("acute",180);
\r
139 charMap.put("micro",181);
\r
140 charMap.put("para",182);
\r
141 charMap.put("middot",183);
\r
142 charMap.put("cedil",184);
\r
143 charMap.put("sup1",185);
\r
144 charMap.put("ordm",186);
\r
145 charMap.put("raquo",187);
\r
146 charMap.put("frac14",188);
\r
147 charMap.put("frac12",189);
\r
148 charMap.put("frac34",190);
\r
149 charMap.put("iquest",191);
\r
150 charMap.put("Agrave",192);
\r
151 charMap.put("Aacute",193);
\r
152 charMap.put("Acirc",194);
\r
153 charMap.put("Atilde",195);
\r
154 charMap.put("Auml",196);
\r
155 charMap.put("Aring",197);
\r
156 charMap.put("AElig",198);
\r
157 charMap.put("Ccedil",199);
\r
158 charMap.put("Egrave",200);
\r
159 charMap.put("Eacute",201);
\r
160 charMap.put("Ecirc",202);
\r
161 charMap.put("Euml",203);
\r
162 charMap.put("Igrave",204);
\r
163 charMap.put("Iacute",205);
\r
164 charMap.put("Icirc",206);
\r
165 charMap.put("Iuml",207);
\r
166 charMap.put("ETH",208);
\r
167 charMap.put("Ntilde",209);
\r
168 charMap.put("Ograve",210);
\r
169 charMap.put("Oacute",211);
\r
170 charMap.put("Ocirc",212);
\r
171 charMap.put("Otilde",213);
\r
172 charMap.put("Ouml",214);
\r
173 charMap.put("times",215);
\r
174 charMap.put("Oslash",216);
\r
175 charMap.put("Ugrave",217);
\r
176 charMap.put("Uacute",218);
\r
177 charMap.put("Ucirc",219);
\r
178 charMap.put("Uuml",220);
\r
179 charMap.put("Yacute",221);
\r
180 charMap.put("THORN",222);
\r
181 charMap.put("szlig",223);
\r
182 charMap.put("agrave",224);
\r
183 charMap.put("aacute",225);
\r
184 charMap.put("acirc",226);
\r
185 charMap.put("atilde",227);
\r
186 charMap.put("auml",228);
\r
187 charMap.put("aring",229);
\r
188 charMap.put("aelig",230);
\r
189 charMap.put("ccedil",231);
\r
190 charMap.put("egrave",232);
\r
191 charMap.put("eacute",233);
\r
192 charMap.put("ecirc",234);
\r
193 charMap.put("euml",235);
\r
194 charMap.put("igrave",236);
\r
195 charMap.put("iacute",237);
\r
196 charMap.put("icirc",238);
\r
197 charMap.put("iuml",239);
\r
198 charMap.put("eth",240);
\r
199 charMap.put("ntilde",241);
\r
200 charMap.put("ograve",242);
\r
201 charMap.put("oacute",243);
\r
202 charMap.put("ocirc",244);
\r
203 charMap.put("otilde",245);
\r
204 charMap.put("ouml",246);
\r
205 charMap.put("divide",247);
\r
206 charMap.put("oslash",248);
\r
207 charMap.put("ugrave",249);
\r
208 charMap.put("uacute",250);
\r
209 charMap.put("ucirc",251);
\r
210 charMap.put("uuml",252);
\r
211 charMap.put("yacute",253);
\r
212 charMap.put("thorn",254);
\r
213 charMap.put("yuml",255);
\r
214 charMap.put("OElig",338);
\r
215 charMap.put("oelig",339);
\r
216 charMap.put("Scaron",352);
\r
217 charMap.put("scaron",353);
\r
218 charMap.put("Yuml",376);
\r
219 charMap.put("fnof",402);
\r
220 charMap.put("circ",710);
\r
221 charMap.put("tilde",732);
\r
222 charMap.put("Alpha",913);
\r
223 charMap.put("Beta",914);
\r
224 charMap.put("Gamma",915);
\r
225 charMap.put("Delta",916);
\r
226 charMap.put("Epsilon",917);
\r
227 charMap.put("Zeta",918);
\r
228 charMap.put("Eta",919);
\r
229 charMap.put("Theta",920);
\r
230 charMap.put("Iota",921);
\r
231 charMap.put("Kappa",922);
\r
232 charMap.put("Lambda",923);
\r
233 charMap.put("Mu",924);
\r
234 charMap.put("Nu",925);
\r
235 charMap.put("Xi",926);
\r
236 charMap.put("Omicron",927);
\r
237 charMap.put("Pi",928);
\r
238 charMap.put("Rho",929);
\r
239 charMap.put("Sigma",931);
\r
240 charMap.put("Tau",932);
\r
241 charMap.put("Upsilon",933);
\r
242 charMap.put("Phi",934);
\r
243 charMap.put("Chi",935);
\r
244 charMap.put("Psi",936);
\r
245 charMap.put("Omega",937);
\r
246 charMap.put("alpha",945);
\r
247 charMap.put("beta",946);
\r
248 charMap.put("gamma",947);
\r
249 charMap.put("delta",948);
\r
250 charMap.put("epsilon",949);
\r
251 charMap.put("zeta",950);
\r
252 charMap.put("eta",951);
\r
253 charMap.put("theta",952);
\r
254 charMap.put("iota",953);
\r
255 charMap.put("kappa",954);
\r
256 charMap.put("lambda",955);
\r
257 charMap.put("mu",956);
\r
258 charMap.put("nu",957);
\r
259 charMap.put("xi",958);
\r
260 charMap.put("omicron",959);
\r
261 charMap.put("pi",960);
\r
262 charMap.put("rho",961);
\r
263 charMap.put("sigmaf",962);
\r
264 charMap.put("sigma",963);
\r
265 charMap.put("tau",964);
\r
266 charMap.put("upsilon",965);
\r
267 charMap.put("phi",966);
\r
268 charMap.put("chi",967);
\r
269 charMap.put("psi",968);
\r
270 charMap.put("omega",969);
\r
271 charMap.put("thetasym",977);
\r
272 charMap.put("upsih",978);
\r
273 charMap.put("piv",982);
\r
274 charMap.put("ensp",8194);
\r
275 charMap.put("emsp",8195);
\r
276 charMap.put("thinsp",8201);
\r
277 charMap.put("zwnj",8204);
\r
278 charMap.put("zwj",8205);
\r
279 charMap.put("lrm",8206);
\r
280 charMap.put("rlm",8207);
\r
281 charMap.put("ndash",8211);
\r
282 charMap.put("mdash",8212);
\r
283 charMap.put("lsquo",8216);
\r
284 charMap.put("rsquo",8217);
\r
285 charMap.put("sbquo",8218);
\r
286 charMap.put("ldquo",8220);
\r
287 charMap.put("rdquo",8221);
\r
288 charMap.put("bdquo",8222);
\r
289 charMap.put("dagger",8224);
\r
290 charMap.put("Dagger",8225);
\r
291 charMap.put("bull",8226);
\r
292 charMap.put("hellip",8230);
\r
293 charMap.put("permil",8240);
\r
294 charMap.put("prime",8242);
\r
295 charMap.put("Prime",8243);
\r
296 charMap.put("lsaquo",8249);
\r
297 charMap.put("rsaquo",8250);
\r
298 charMap.put("oline",8254);
\r
299 charMap.put("frasl",8260);
\r
300 charMap.put("euro",8364);
\r
301 charMap.put("image",8465);
\r
302 charMap.put("weierp",8472);
\r
303 charMap.put("real",8476);
\r
304 charMap.put("trade",8482);
\r
305 charMap.put("alefsym",8501);
\r
306 charMap.put("larr",8592);
\r
307 charMap.put("uarr",8593);
\r
308 charMap.put("rarr",8594);
\r
309 charMap.put("darr",8595);
\r
310 charMap.put("harr",8596);
\r
311 charMap.put("crarr",8629);
\r
312 charMap.put("lArr",8656);
\r
313 charMap.put("uArr",8657);
\r
314 charMap.put("rArr",8658);
\r
315 charMap.put("dArr",8659);
\r
316 charMap.put("hArr",8660);
\r
317 charMap.put("forall",8704);
\r
318 charMap.put("part",8706);
\r
319 charMap.put("exist",8707);
\r
320 charMap.put("empty",8709);
\r
321 charMap.put("nabla",8711);
\r
322 charMap.put("isin",8712);
\r
323 charMap.put("notin",8713);
\r
324 charMap.put("ni",8715);
\r
325 charMap.put("prod",8719);
\r
326 charMap.put("sum",8721);
\r
327 charMap.put("minus",8722);
\r
328 charMap.put("lowast",8727);
\r
329 charMap.put("radic",8730);
\r
330 charMap.put("prop",8733);
\r
331 charMap.put("infin",8734);
\r
332 charMap.put("ang",8736);
\r
333 charMap.put("and",8743);
\r
334 charMap.put("or",8744);
\r
335 charMap.put("cap",8745);
\r
336 charMap.put("cup",8746);
\r
337 charMap.put("int",8747);
\r
338 charMap.put("there4",8756);
\r
339 charMap.put("sim",8764);
\r
340 charMap.put("cong",8773);
\r
341 charMap.put("asymp",8776);
\r
342 charMap.put("ne",8800);
\r
343 charMap.put("equiv",8801);
\r
344 charMap.put("le",8804);
\r
345 charMap.put("ge",8805);
\r
346 charMap.put("sub",8834);
\r
347 charMap.put("sup",8835);
\r
348 charMap.put("nsub",8836);
\r
349 charMap.put("sube",8838);
\r
350 charMap.put("supe",8839);
\r
351 charMap.put("oplus",8853);
\r
352 charMap.put("otimes",8855);
\r
353 charMap.put("perp",8869);
\r
354 charMap.put("sdot",8901);
\r
355 charMap.put("lceil",8968);
\r
356 charMap.put("rceil",8969);
\r
357 charMap.put("lfloor",8970);
\r
358 charMap.put("rfloor",8971);
\r
359 charMap.put("lang",9001);
\r
360 charMap.put("rang",9002);
\r
361 charMap.put("loz",9674);
\r
362 charMap.put("spades",9824);
\r
363 charMap.put("clubs",9827);
\r
364 charMap.put("hearts",9829);
\r
365 charMap.put("diams",9830);
\r
367 for( Entry<String, Integer> es: charMap.entrySet()) {
\r
368 if(es.getValue()>=160); // save small space... note that no longer has amp, etc.
\r
369 intMap.put(es.getValue(), es.getKey());
\r