home *** CD-ROM | disk | FTP | other *** search
- package com.kav.xml;
-
- import java.io.PrintWriter;
- import org.w3c.dom.Attr;
- import org.w3c.dom.CharacterData;
- import org.w3c.dom.Document;
- import org.w3c.dom.DocumentType;
- import org.w3c.dom.Element;
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.w3c.dom.Notation;
- import org.w3c.dom.ProcessingInstruction;
- import org.w3c.dom.Text;
-
- public class XMLPrinter {
- public static final int DEFAULT_INDENT = 2;
- private int width;
- private String entityTokens;
- private final String AMP_ENTITY;
- private final String GT_ENTITY;
- private final String LT_ENTITY;
- private final String HEX_ENTITY;
- protected final String CDATA_END;
- protected final String CDATA_START;
- protected final String COMMENT_START;
- protected final String COMMENT_END;
- protected final String DOCTYPE_START;
- protected final String DOCTYPE_END;
- protected final String DOUBLE_QUOTE;
- protected final String EQUALS;
- protected final String FORWARD_SLASH;
- protected final String L_ANGLE_BRACKET;
- protected final String PI_START;
- protected final String PI_END;
- protected final String PUBLIC;
- protected final String R_ANGLE_BRACKET;
- protected final String SEMICOLON;
- protected final String SPACE;
- protected final String SYSTEM;
- protected final String XML_DECL;
- protected final char AMPERSAND;
- // $FF: renamed from: GT char
- protected final char field_0;
- // $FF: renamed from: LT char
- protected final char field_1;
- protected final char DASH;
- protected final char NULL;
- // $FF: renamed from: CR char
- private final char field_2;
- // $FF: renamed from: LF char
- private final char field_3;
- private String version;
- private String indent;
- private final char indentChar;
- private int indentSize;
- // $FF: renamed from: pw java.io.PrintWriter
- private PrintWriter field_4;
- private boolean unescapeCDATA;
- private boolean useEmptyElementShorthand;
- private boolean useFormat;
-
- public XMLPrinter(PrintWriter var1) {
- this(var1, 2);
- }
-
- public XMLPrinter(PrintWriter var1, int var2) {
- this.width = 80;
- this.entityTokens = "&<>";
- this.AMP_ENTITY = "&";
- this.GT_ENTITY = ">";
- this.LT_ENTITY = "<";
- this.HEX_ENTITY = "";
- this.CDATA_END = "]]>";
- this.CDATA_START = "<![CDATA[";
- this.COMMENT_START = "<!-- ";
- this.COMMENT_END = " -->";
- this.DOCTYPE_START = "<!DOCTYPE ";
- this.DOCTYPE_END = ">";
- this.DOUBLE_QUOTE = "\"";
- this.EQUALS = "=";
- this.FORWARD_SLASH = "/";
- this.L_ANGLE_BRACKET = "<";
- this.PI_START = "<?";
- this.PI_END = "?>";
- this.PUBLIC = "PUBLIC";
- this.R_ANGLE_BRACKET = ">";
- this.SEMICOLON = ";";
- this.SPACE = " ";
- this.SYSTEM = "SYSTEM";
- this.XML_DECL = "xml version=";
- this.AMPERSAND = '&';
- this.field_0 = '>';
- this.field_1 = '<';
- this.DASH = '-';
- this.field_2 = '\r';
- this.field_3 = '\n';
- this.version = "1.0";
- this.indentChar = ' ';
- this.indentSize = 2;
- this.unescapeCDATA = false;
- this.useEmptyElementShorthand = true;
- this.useFormat = false;
- this.field_4 = var1;
- this.setIndentSize(var2);
- }
-
- public void print(Node var1) {
- this.print(var1, "");
- this.field_4.flush();
- }
-
- public void printDoctype(DocumentType var1) {
- if (var1 != null) {
- this.field_4.print("<!DOCTYPE ");
- this.field_4.print(var1.getName());
- int var2 = 0;
- NamedNodeMap var3 = var1.getNotations();
- if (var3 != null) {
- var2 = var3.getLength();
- }
-
- for(int var5 = 0; var5 < var2; ++var5) {
- if (var5 > 0) {
- this.field_4.println();
- }
-
- Notation var6 = (Notation)var3.item(var5);
- String var4;
- if ((var4 = var6.getSystemId()) != null) {
- this.field_4.print("SYSTEM ");
- this.field_4.print(var4);
- }
-
- if ((var4 = var6.getPublicId()) != null) {
- this.field_4.print("PUBLIC ");
- this.field_4.print(var4);
- }
- }
-
- this.field_4.println(">");
- }
- }
-
- public void setIndentSize(int var1) {
- this.indentSize = var1;
- StringBuffer var2 = new StringBuffer(var1);
-
- for(int var3 = 0; var3 < var1; ++var3) {
- var2.append(' ');
- }
-
- this.indent = var2.toString();
- }
-
- public void setUnescapeCDATA(boolean var1) {
- this.unescapeCDATA = var1;
- }
-
- public void setUseEmptyElementShorthand(boolean var1) {
- this.useEmptyElementShorthand = var1;
- }
-
- public void setUseFormat(boolean var1) {
- this.useFormat = var1;
- }
-
- protected boolean print(Node var1, String var2) {
- if (var1 == null) {
- return false;
- } else {
- Object var4 = null;
- switch (var1.getNodeType()) {
- case 1:
- Element var7 = (Element)var1;
- this.field_4.print("<");
- this.field_4.print(var7.getNodeName());
- NamedNodeMap var8 = var7.getAttributes();
- if (var8 != null) {
- for(int var10 = 0; var10 < var8.getLength(); ++var10) {
- Attr var9 = (Attr)var8.item(var10);
- String var18 = var9.getValue();
- this.field_4.print(" ");
- this.field_4.print(var9.getName());
- if (var18 != null) {
- this.field_4.print("=\"");
- this.field_4.print(var18);
- this.field_4.print("\"");
- }
- }
- }
-
- NodeList var21 = var7.getChildNodes();
- int var22 = var21.getLength();
- if (var22 == 0 && this.useEmptyElementShorthand) {
- this.field_4.print("/>");
- if (this.useFormat) {
- this.field_4.println();
- return true;
- }
- } else {
- boolean var23 = false;
- this.field_4.print(">");
- if (this.useFormat && var22 > 0 && var21.item(0).getNodeType() != 3) {
- this.field_4.println();
- var23 = true;
- }
-
- Node var12 = null;
- String var13 = this.indent + var2;
-
- for(int var14 = 0; var14 < var22; ++var14) {
- var12 = var21.item(var14);
- if (this.useFormat && var23) {
- this.field_4.print(var13);
- }
-
- var23 = this.print(var12, var13);
- }
-
- if (this.useFormat && var12 != null && var12.getNodeType() != 3) {
- this.field_4.print(var2);
- }
-
- this.field_4.print("</");
- this.field_4.print(var7.getNodeName());
- this.field_4.print(">");
- if (this.useFormat) {
- Node var15 = var1.getNextSibling();
- if (var15 == null || var15.getNodeType() != 3) {
- this.field_4.println();
- return true;
- }
- }
- }
- break;
- case 2:
- Attr var20 = (Attr)var1;
- this.field_4.print(var20.getName());
- String var17 = var20.getValue();
- if (var17 != null) {
- this.field_4.print("=\"");
- this.field_4.print(var17);
- this.field_4.print("\"");
- }
- break;
- case 3:
- String var16 = ((Text)var1).getData();
- this.printWithXMLEntities(var16);
- break;
- case 4:
- if (this.unescapeCDATA) {
- this.printWithXMLEntities(((Text)var1).getData());
- } else {
- String var3 = ((Text)var1).getData();
- this.field_4.print("<![CDATA[");
- this.printUTF8Chars(var3.toCharArray());
- this.field_4.print("]]>");
- }
- break;
- case 5:
- this.field_4.print('&');
- this.field_4.print(var1.getNodeName());
- this.field_4.print(";");
- case 6:
- default:
- break;
- case 7:
- ProcessingInstruction var11 = (ProcessingInstruction)var1;
- this.field_4.print("<?");
- this.field_4.print(var11.getTarget());
- this.field_4.print(" ");
- this.field_4.print(var11.getData());
- this.field_4.print("?>");
- if (this.useFormat) {
- this.field_4.println();
- return true;
- }
- break;
- case 8:
- this.field_4.print("<!-- ");
- this.printComment(((CharacterData)var1).getData());
- this.field_4.print(" -->");
- if (this.useFormat) {
- this.field_4.println();
- return true;
- }
- break;
- case 9:
- Document var5 = (Document)var1;
- this.field_4.print("<?xml version=\"");
- this.field_4.print(this.version);
- this.field_4.println("\"?>");
- this.printDoctype(var5.getDoctype());
- NodeList var19 = var5.getChildNodes();
-
- for(int var6 = 0; var6 < var19.getLength(); ++var6) {
- this.print(var19.item(var6), var2);
- }
- break;
- case 10:
- this.printDoctype((DocumentType)var1);
- }
-
- return false;
- }
- }
-
- protected void printUTF8Char(char var1) {
- if (var1 >= 128) {
- this.field_4.print("");
- this.field_4.print(var1);
- this.field_4.print(";");
- } else {
- this.field_4.print(var1);
- }
- }
-
- protected void printUTF8Chars(char[] var1) {
- int var2 = 0;
- int var3 = 0;
-
- for(int var4 = 0; var4 < var1.length; ++var4) {
- if (var1[var4] >= 128) {
- this.field_4.write(var1, var2, var3);
- var3 = 0;
- var2 = var4 + 1;
- this.field_4.print("");
- this.field_4.print(var1[var4]);
- this.field_4.print(";");
- } else {
- ++var3;
- }
- }
-
- if (var2 < var1.length) {
- this.field_4.write(var1, var2, var3);
- }
-
- }
-
- private void printWithXMLEntities(String var1) {
- if (var1 != null) {
- char[] var2 = var1.toCharArray();
- int var3 = 0;
- int var4 = 0;
-
- for(int var5 = 0; var5 < var2.length; ++var5) {
- switch (var2[var5]) {
- case '&':
- this.field_4.write(var2, var4, var3);
- var3 = 0;
- var4 = var5 + 1;
- this.field_4.print("&");
- break;
- case '<':
- this.field_4.write(var2, var4, var3);
- var3 = 0;
- var4 = var5 + 1;
- this.field_4.print("<");
- break;
- case '>':
- this.field_4.write(var2, var4, var3);
- var3 = 0;
- var4 = var5 + 1;
- this.field_4.print(">");
- break;
- default:
- if (var2[var5] >= 128) {
- this.field_4.write(var2, var4, var3);
- var3 = 0;
- var4 = var5 + 1;
- this.field_4.print("");
- this.field_4.print(var2[var5]);
- this.field_4.print(";");
- } else {
- ++var3;
- }
- }
- }
-
- if (var4 < var2.length) {
- this.field_4.write(var2, var4, var3);
- }
-
- }
- }
-
- private void printComment(String var1) {
- if (var1 != null) {
- char[] var2 = var1.toCharArray();
- int var3 = 0;
- int var4 = 0;
- char var5 = 0;
-
- for(int var6 = 0; var6 < var2.length; ++var6) {
- if (var2[var6] == '-' && var5 == '-') {
- this.field_4.write(var2, var4, var3);
- var4 = var6;
- this.field_4.print(" ");
- var3 = 1;
- } else {
- var5 = var2[var6];
- ++var3;
- }
- }
-
- if (var4 < var2.length) {
- this.field_4.write(var2, var4, var3);
- }
-
- }
- }
- }
-