KXmlSerializer.java revision adc854b798c1cfe3bfd4c27d68d5cee38ca617da
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining a copy 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of this software and associated documentation files (the "Software"), to deal 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the Software without restriction, including without limitation the rights 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to use, copy, modify, merge, publish, distribute, sublicense, and/or 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sell copies of the Software, and to permit persons to whom the Software is 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * furnished to do so, subject to the following conditions: 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The above copyright notice and this permission notice shall be included in 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * all copies or substantial portions of the Software. 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IN THE SOFTWARE. */ 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.kxml2.io; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.*; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xmlpull.v1.*; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KXmlSerializer implements XmlSerializer { 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // static final String UNDEFINED = ":"; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-added 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** size (in characters) for the write buffer */ 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int WRITE_BUFFER_SIZE = 500; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-added 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-changed 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // (Guarantee that the writer is always buffered.) 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private BufferedWriter writer; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-changed 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean pending; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int auto; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int depth; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String[] elementStack = new String[12]; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //nsp/prefix/name 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int[] nspCounts = new int[4]; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String[] nspStack = new String[8]; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //prefix/nsp; both empty are "" 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean[] indent = new boolean[4]; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean unicode; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String encoding; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final void check(boolean close) throws IOException { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!pending) 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project depth++; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pending = false; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (indent.length <= depth) { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean[] hlp = new boolean[depth + 4]; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(indent, 0, hlp, 0, depth); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project indent = hlp; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project indent[depth] = indent[depth - 1]; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = nspCounts[depth - 1]; 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i < nspCounts[depth]; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i++) { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(' '); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("xmlns"); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!"".equals(nspStack[i * 2])) { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(':'); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(nspStack[i * 2]); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else if ("".equals(getNamespace()) && !"".equals(nspStack[i * 2 + 1])) 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException("Cannot set default namespace for elements in no namespace"); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("=\""); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writeEscaped(nspStack[i * 2 + 1], '"'); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write('"'); 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nspCounts.length <= depth + 1) { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] hlp = new int[depth + 8]; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(nspCounts, 0, hlp, 0, depth + 1); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspCounts = hlp; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspCounts[depth + 1] = nspCounts[depth]; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // nspCounts[depth + 2] = nspCounts[depth]; 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(close ? " />" : ">"); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final void writeEscaped(String s, int quot) 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < s.length(); i++) { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char c = s.charAt(i); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (c) { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '\n': 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '\r': 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '\t': 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if(quot == -1) 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(c); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("&#"+((int) c)+';'); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '&' : 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("&"); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '>' : 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(">"); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '<' : 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("<"); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '"' : 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case '\'' : 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == quot) { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write( 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c == '"' ? """ : "'"); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default : 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //if(c < ' ') 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // throw new IllegalArgumentException("Illegal control code:"+((int) c)); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c >= ' ' && c !='@' && (c < 127 || unicode)) 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(c); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("&#" + ((int) c) + ";"); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final void writeIndent() throws IOException { 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("\r\n"); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < depth; i++) 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(' '); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }*/ 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void docdecl(String dd) throws IOException { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("<!DOCTYPE"); 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(dd); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(">"); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void endDocument() throws IOException { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (depth > 0) { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project endTag( 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementStack[depth * 3 - 3], 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementStack[depth * 3 - 1]); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project flush(); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void entityRef(String name) throws IOException { 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write('&'); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(name); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(';'); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getFeature(String name) { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //return false; 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ( 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "http://xmlpull.org/v1/doc/features.html#indent-output" 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals( 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project name)) 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ? indent[depth] 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : false; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getPrefix(String namespace, boolean create) { 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getPrefix(namespace, false, create); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project catch (IOException e) { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException(e.toString()); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final String getPrefix( 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String namespace, 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean includeDefault, 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean create) 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = nspCounts[depth + 1] * 2 - 2; 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i >= 0; 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i -= 2) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nspStack[i + 1].equals(namespace) 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && (includeDefault || !nspStack[i].equals(""))) { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String cand = nspStack[i]; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = i + 2; 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project j < nspCounts[depth + 1] * 2; 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project j++) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nspStack[j].equals(cand)) { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cand = null; 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cand != null) 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return cand; 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!create) 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prefix; 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ("".equals(namespace)) 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix = ""; 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else { 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project do { 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix = "n" + (auto++); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = nspCounts[depth + 1] * 2 - 2; 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i >= 0; 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i -= 2) { 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prefix.equals(nspStack[i])) { 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix = null; 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (prefix == null); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean p = pending; 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pending = false; 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setPrefix(prefix, namespace); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pending = p; 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return prefix; 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getProperty(String name) { 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException("Unsupported property"); 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void ignorableWhitespace(String s) 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project text(s); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFeature(String name, boolean value) { 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ("http://xmlpull.org/v1/doc/features.html#indent-output" 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .equals(name)) { 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project indent[depth] = value; 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException("Unsupported Feature"); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setProperty(String name, Object value) { 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException( 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Unsupported Property:" + value); 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setPrefix(String prefix, String namespace) 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prefix == null) 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project prefix = ""; 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (namespace == null) 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project namespace = ""; 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String defined = getPrefix(namespace, true, false); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // boil out if already defined 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (prefix.equals(defined)) 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int pos = (nspCounts[depth + 1]++) << 1; 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nspStack.length < pos + 1) { 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] hlp = new String[nspStack.length + 16]; 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(nspStack, 0, hlp, 0, pos); 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspStack = hlp; 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspStack[pos++] = prefix; 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspStack[pos] = namespace; 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setOutput(Writer writer) { 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // BEGIN android-changed 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Guarantee that the writer is always buffered. 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (writer instanceof BufferedWriter) { 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.writer = (BufferedWriter) writer; 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.writer = new BufferedWriter(writer, WRITE_BUFFER_SIZE); 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // END android-changed 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // elementStack = new String[12]; //nsp/prefix/name 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //nspCounts = new int[4]; 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //nspStack = new String[8]; //prefix/nsp 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //indent = new boolean[4]; 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspCounts[0] = 2; 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspCounts[1] = 2; 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspStack[0] = ""; 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspStack[1] = ""; 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspStack[2] = "xml"; 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspStack[3] = "http://www.w3.org/XML/1998/namespace"; 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pending = false; 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project auto = 0; 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project depth = 0; 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project unicode = false; 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setOutput(OutputStream os, String encoding) 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (os == null) 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setOutput( 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project encoding == null 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ? new OutputStreamWriter(os) 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : new OutputStreamWriter(os, encoding)); 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.encoding = encoding; 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoding != null 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && encoding.toLowerCase().startsWith("utf")) 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project unicode = true; 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void startDocument( 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String encoding, 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Boolean standalone) 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("<?xml version='1.0' "); 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoding != null) { 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.encoding = encoding; 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoding.toLowerCase().startsWith("utf")) 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project unicode = true; 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.encoding != null) { 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("encoding='"); 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(this.encoding); 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("' "); 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (standalone != null) { 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("standalone='"); 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write( 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project standalone.booleanValue() ? "yes" : "no"); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("' "); 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("?>"); 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public XmlSerializer startTag(String namespace, String name) 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if (namespace == null) 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // namespace = ""; 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (indent[depth]) { 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("\r\n"); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < depth; i++) 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(" "); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int esp = depth * 3; 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (elementStack.length < esp + 3) { 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] hlp = new String[elementStack.length + 12]; 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(elementStack, 0, hlp, 0, esp); 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementStack = hlp; 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prefix = 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project namespace == null 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ? "" 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : getPrefix(namespace, true, true); 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ("".equals(namespace)) { 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = nspCounts[depth]; 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i < nspCounts[depth + 1]; 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project i++) { 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ("".equals(nspStack[i * 2]) && !"".equals(nspStack[i * 2 + 1])) { 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException("Cannot set default namespace for elements in no namespace"); 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementStack[esp++] = namespace; 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementStack[esp++] = prefix; 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementStack[esp] = name; 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write('<'); 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!"".equals(prefix)) { 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(prefix); 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(':'); 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(name); 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pending = true; 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public XmlSerializer attribute( 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String namespace, 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String name, 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String value) 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!pending) 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalStateException("illegal position for attribute"); 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // int cnt = nspCounts[depth]; 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (namespace == null) 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project namespace = ""; 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // depth--; 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // pending = false; 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prefix = 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "".equals(namespace) 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ? "" 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : getPrefix(namespace, false, true); 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // pending = true; 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // depth++; 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* if (cnt != nspCounts[depth]) { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(' '); 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("xmlns"); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (nspStack[cnt * 2] != null) { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(':'); 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(nspStack[cnt * 2]); 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("=\""); 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writeEscaped(nspStack[cnt * 2 + 1], '"'); 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write('"'); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(' '); 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!"".equals(prefix)) { 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(prefix); 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(':'); 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(name); 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write('='); 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char q = value.indexOf('"') == -1 ? '"' : '\''; 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(q); 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writeEscaped(value, q); 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(q); 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void flush() throws IOException { 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.flush(); 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void close() throws IOException { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(); 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.close(); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public XmlSerializer endTag(String namespace, String name) 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!pending) 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project depth--; 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // if (namespace == null) 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // namespace = ""; 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((namespace == null 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && elementStack[depth * 3] != null) 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || (namespace != null 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && !namespace.equals(elementStack[depth * 3])) 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || !elementStack[depth * 3 + 2].equals(name)) 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException("</{"+namespace+"}"+name+"> does not match start"); 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pending) { 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(true); 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project depth--; 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else { 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (indent[depth + 1]) { 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("\r\n"); 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < depth; i++) 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(" "); 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("</"); 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prefix = elementStack[depth * 3 + 1]; 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!"".equals(prefix)) { 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(prefix); 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(':'); 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(name); 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write('>'); 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nspCounts[depth + 1] = nspCounts[depth]; 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getNamespace() { 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDepth() == 0 ? null : elementStack[getDepth() * 3 - 3]; 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getName() { 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getDepth() == 0 ? null : elementStack[getDepth() * 3 - 1]; 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getDepth() { 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return pending ? depth + 1 : depth; 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public XmlSerializer text(String text) throws IOException { 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project indent[depth] = false; 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writeEscaped(text, -1); 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public XmlSerializer text(char[] text, int start, int len) 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project text(new String(text, start, len)); 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void cdsect(String data) throws IOException { 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("<![CDATA["); 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(data); 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("]]>"); 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void comment(String comment) throws IOException { 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("<!--"); 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(comment); 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("-->"); 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void processingInstruction(String pi) 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project check(false); 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("<?"); 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write(pi); 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project writer.write("?>"); 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 563