source: josm/trunk/src/org/openstreetmap/josm/io/XmlWriter.java@ 9171

Last change on this file since 9171 was 8929, checked in by Don-vip, 8 years ago

javadoc fixes

  • Property svn:eol-style set to native
File size: 2.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io;
3
4import java.io.Closeable;
5import java.io.IOException;
6import java.io.PrintWriter;
7import java.util.HashMap;
8import java.util.Map;
9
10/**
11 * Helper class to use for xml outputting classes.
12 *
13 * @author imi
14 */
15public class XmlWriter implements Closeable {
16
17 protected final PrintWriter out;
18
19 public XmlWriter(PrintWriter out) {
20 this.out = out;
21 }
22
23 /**
24 * Flushes the stream.
25 */
26 public void flush() {
27 if (out != null) {
28 out.flush();
29 }
30 }
31
32 public static String encode(String unencoded) {
33 return encode(unencoded, false);
34 }
35
36 /**
37 * Encode the given string in XML1.0 format.
38 * Optimized to fast pass strings that don't need encoding (normal case).
39 *
40 * @param unencoded the unencoded input string
41 * @param keepApos true if apostrophe sign should stay as it is (in order to work around
42 * a Java bug that renders
43 * new JLabel("<html>'</html>")
44 * literally as 6 character string, see #7558)
45 * @return XML1.0 string
46 */
47 public static String encode(String unencoded, boolean keepApos) {
48 StringBuilder buffer = null;
49 for (int i = 0; i < unencoded.length(); ++i) {
50 String encS = null;
51 if (!keepApos || unencoded.charAt(i) != '\'') {
52 encS = XmlWriter.encoding.get(unencoded.charAt(i));
53 }
54 if (encS != null) {
55 if (buffer == null) {
56 buffer = new StringBuilder(unencoded.substring(0, i));
57 }
58 buffer.append(encS);
59 } else if (buffer != null) {
60 buffer.append(unencoded.charAt(i));
61 }
62 }
63 return (buffer == null) ? unencoded : buffer.toString();
64 }
65
66 /**
67 * The output writer to save the values to.
68 */
69 private static final Map<Character, String> encoding = new HashMap<>();
70 static {
71 encoding.put('<', "&lt;");
72 encoding.put('>', "&gt;");
73 encoding.put('"', "&quot;");
74 encoding.put('\'', "&apos;");
75 encoding.put('&', "&amp;");
76 encoding.put('\n', "&#xA;");
77 encoding.put('\r', "&#xD;");
78 encoding.put('\t', "&#x9;");
79 }
80
81 @Override
82 public void close() throws IOException {
83 if (out != null) {
84 out.close();
85 }
86 }
87}
Note: See TracBrowser for help on using the repository browser.