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