/* */ package com.ibm.icu.impl.duration.impl; /* */ /* */ import com.ibm.icu.lang.UCharacter; /* */ import java.io.IOException; /* */ import java.io.PrintStream; /* */ import java.io.Writer; /* */ import java.util.ArrayList; /* */ import java.util.List; /* */ /* */ /* */ /* */ public class XMLRecordWriter /* */ implements RecordWriter /* */ { /* */ private Writer w; /* */ private List<String> nameStack; /* */ static final String NULL_NAME = "Null"; /* */ private static final String INDENT = " "; /* */ /* */ public XMLRecordWriter(Writer w) /* */ { /* 22 */ this.w = w; /* 23 */ this.nameStack = new ArrayList(); /* */ } /* */ /* */ public boolean open(String title) { /* 27 */ newline(); /* 28 */ writeString("<" + title + ">"); /* 29 */ this.nameStack.add(title); /* 30 */ return true; /* */ } /* */ /* */ public boolean close() { /* 34 */ int ix = this.nameStack.size() - 1; /* 35 */ if (ix >= 0) { /* 36 */ String name = (String)this.nameStack.remove(ix); /* 37 */ newline(); /* 38 */ writeString("</" + name + ">"); /* 39 */ return true; /* */ } /* 41 */ return false; /* */ } /* */ /* */ public void flush() { /* */ try { /* 46 */ this.w.flush(); /* */ } /* */ catch (IOException e) {} /* */ } /* */ /* */ public void bool(String name, boolean value) { /* 52 */ internalString(name, String.valueOf(value)); /* */ } /* */ /* */ public void boolArray(String name, boolean[] values) { /* 56 */ if (values != null) { /* 57 */ String[] stringValues = new String[values.length]; /* 58 */ for (int i = 0; i < values.length; i++) { /* 59 */ stringValues[i] = String.valueOf(values[i]); /* */ } /* 61 */ stringArray(name, stringValues); /* */ } /* */ } /* */ /* */ private static String ctos(char value) { /* 66 */ if (value == '<') { /* 67 */ return "<"; /* */ } /* 69 */ if (value == '&') { /* 70 */ return "&"; /* */ } /* 72 */ return String.valueOf(value); /* */ } /* */ /* */ public void character(String name, char value) { /* 76 */ if (value != 65535) { /* 77 */ internalString(name, ctos(value)); /* */ } /* */ } /* */ /* */ public void characterArray(String name, char[] values) { /* 82 */ if (values != null) { /* 83 */ String[] stringValues = new String[values.length]; /* 84 */ for (int i = 0; i < values.length; i++) { /* 85 */ char value = values[i]; /* 86 */ if (value == 65535) { /* 87 */ stringValues[i] = "Null"; /* */ } else { /* 89 */ stringValues[i] = ctos(value); /* */ } /* */ } /* 92 */ internalStringArray(name, stringValues); /* */ } /* */ } /* */ /* */ public void namedIndex(String name, String[] names, int value) { /* 97 */ if (value >= 0) { /* 98 */ internalString(name, names[value]); /* */ } /* */ } /* */ /* */ public void namedIndexArray(String name, String[] names, byte[] values) { /* 103 */ if (values != null) { /* 104 */ String[] stringValues = new String[values.length]; /* 105 */ for (int i = 0; i < values.length; i++) { /* 106 */ int value = values[i]; /* 107 */ if (value < 0) { /* 108 */ stringValues[i] = "Null"; /* */ } else { /* 110 */ stringValues[i] = names[value]; /* */ } /* */ } /* 113 */ internalStringArray(name, stringValues); /* */ } /* */ } /* */ /* */ public static String normalize(String str) { /* 118 */ if (str == null) { /* 119 */ return null; /* */ } /* 121 */ StringBuilder sb = null; /* 122 */ boolean inWhitespace = false; /* 123 */ char c = '\000'; /* 124 */ boolean special = false; /* 125 */ for (int i = 0; i < str.length(); i++) { /* 126 */ c = str.charAt(i); /* 127 */ if (UCharacter.isWhitespace(c)) { /* 128 */ if ((sb == null) && ((inWhitespace) || (c != ' '))) { /* 129 */ sb = new StringBuilder(str.substring(0, i)); /* */ } /* 131 */ if (inWhitespace) { /* */ continue; /* */ } /* 134 */ inWhitespace = true; /* 135 */ special = false; /* 136 */ c = ' '; /* */ } else { /* 138 */ inWhitespace = false; /* 139 */ special = (c == '<') || (c == '&'); /* 140 */ if ((special) && (sb == null)) { /* 141 */ sb = new StringBuilder(str.substring(0, i)); /* */ } /* */ } /* 144 */ if (sb != null) { /* 145 */ if (special) { /* 146 */ sb.append(c == '<' ? "<" : "&"); /* */ } else { /* 148 */ sb.append(c); /* */ } /* */ } /* */ } /* 152 */ if (sb != null) /* */ { /* */ /* */ /* */ /* 157 */ return sb.toString(); /* */ } /* 159 */ return str; /* */ } /* */ /* */ private void internalString(String name, String normalizedValue) { /* 163 */ if (normalizedValue != null) { /* 164 */ newline(); /* 165 */ writeString("<" + name + ">" + normalizedValue + "</" + name + ">"); /* */ } /* */ } /* */ /* */ private void internalStringArray(String name, String[] normalizedValues) { /* 170 */ if (normalizedValues != null) { /* 171 */ push(name + "List"); /* 172 */ for (int i = 0; i < normalizedValues.length; i++) { /* 173 */ String value = normalizedValues[i]; /* 174 */ if (value == null) { /* 175 */ value = "Null"; /* */ } /* 177 */ string(name, value); /* */ } /* 179 */ pop(); /* */ } /* */ } /* */ /* */ public void string(String name, String value) { /* 184 */ internalString(name, normalize(value)); /* */ } /* */ /* */ public void stringArray(String name, String[] values) { /* 188 */ if (values != null) { /* 189 */ push(name + "List"); /* 190 */ for (int i = 0; i < values.length; i++) { /* 191 */ String value = normalize(values[i]); /* 192 */ if (value == null) { /* 193 */ value = "Null"; /* */ } /* 195 */ internalString(name, value); /* */ } /* 197 */ pop(); /* */ } /* */ } /* */ /* */ public void stringTable(String name, String[][] values) { /* 202 */ if (values != null) { /* 203 */ push(name + "Table"); /* 204 */ for (int i = 0; i < values.length; i++) { /* 205 */ String[] rowValues = values[i]; /* 206 */ if (rowValues == null) { /* 207 */ internalString(name + "List", "Null"); /* */ } else { /* 209 */ stringArray(name, rowValues); /* */ } /* */ } /* 212 */ pop(); /* */ } /* */ } /* */ /* */ private void push(String name) { /* 217 */ newline(); /* 218 */ writeString("<" + name + ">"); /* 219 */ this.nameStack.add(name); /* */ } /* */ /* */ private void pop() { /* 223 */ int ix = this.nameStack.size() - 1; /* 224 */ String name = (String)this.nameStack.remove(ix); /* 225 */ newline(); /* 226 */ writeString("</" + name + ">"); /* */ } /* */ /* */ private void newline() { /* 230 */ writeString("\n"); /* 231 */ for (int i = 0; i < this.nameStack.size(); i++) { /* 232 */ writeString(" "); /* */ } /* */ } /* */ /* */ private void writeString(String str) { /* 237 */ if (this.w != null) { /* */ try { /* 239 */ this.w.write(str); /* */ } /* */ catch (IOException e) { /* 242 */ System.err.println(e.getMessage()); /* 243 */ this.w = null; /* */ } /* */ } /* */ } /* */ } /* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\impl\duration\impl\XMLRecordWriter.class * Java compiler version: 5 (49.0) * JD-Core Version: 0.7.1 */