home *** CD-ROM | disk | FTP | other *** search
- package com.sun.java.swing.text.html;
-
- import com.sun.java.swing.text.AbstractDocument;
- import com.sun.java.swing.text.AttributeSet;
- import com.sun.java.swing.text.BadLocationException;
- import com.sun.java.swing.text.Element;
- import com.sun.java.swing.text.Style;
- import com.sun.java.swing.text.StyleConstants;
- import com.sun.java.swing.text.StyledDocument;
- import java.awt.Color;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.io.Writer;
- import java.util.Hashtable;
- import java.util.Vector;
-
- class HTMLWriter implements HTMLDefs {
- private Hashtable branchTable;
- private Hashtable leafTable;
- private boolean lowercase = true;
- private boolean indenting = false;
- private boolean writePre = false;
- private int nPrelines;
- private int inFont;
- private static final String GENERIC = "generic";
- private static final String SPACE = " ";
- private static final String EQUAL = "=";
- private static final String QUOTE = "\"";
- // $FF: renamed from: CR java.lang.String
- private static final String field_0 = "\n";
-
- public HTMLWriter() {
- this.initializeBranchTable();
- this.initializeLeafTable();
- }
-
- public void write(OutputStream var1, StyledDocument var2) throws Exception {
- OutputStreamWriter var3 = new OutputStreamWriter(var1);
- this.write((Writer)var3, (StyledDocument)var2);
- var3.flush();
- }
-
- public void write(Writer var1, StyledDocument var2) throws HTMLException, IOException {
- AbstractDocument.BranchElement var3 = (AbstractDocument.BranchElement)var2.getDefaultRootElement();
- this.writeStartTag(var1, "html");
- this.writeHead(var1, var3);
- this.writeBranch(var1, "", var3);
- this.writeEndTag(var1, "html");
- var1.flush();
- }
-
- public void setBranchTranslator(String var1, BranchTranslator var2) {
- this.branchTable.put(var1, var2);
- }
-
- public BranchTranslator getBranchTranslator(String var1) {
- BranchTranslator var2 = (BranchTranslator)this.branchTable.get(var1);
- HTMLDebug.println("getBranchTranslator for " + var1);
- if (var2 == null) {
- var2 = this.getBranchTranslator("generic");
- System.out.println("HTMLWriter.getBranchTranslator: Using genericBranchTranslator for " + var1);
- }
-
- return var2;
- }
-
- public void removeBranchTranslator(String var1) {
- this.branchTable.remove(var1);
- }
-
- public void setLeafTranslator(String var1, LeafTranslator var2) {
- this.leafTable.put(var1, var2);
- }
-
- public LeafTranslator getLeafTranslator(String var1) {
- LeafTranslator var2 = (LeafTranslator)this.leafTable.get(var1);
- HTMLDebug.println("getLeafTranslator for " + var1);
- if (var2 == null) {
- HTMLDebug.println("getLeafTranslator generic ");
- var2 = this.getLeafTranslator("content");
- }
-
- return var2;
- }
-
- public void removeLeafTranslator(String var1) {
- this.leafTable.remove(var1);
- }
-
- private void initializeBranchTable() {
- this.branchTable = new Hashtable();
- this.setBranchTranslator("generic", new GenericBranchTranslator(this));
- this.setBranchTranslator("blockquote", new BlockquoteTranslator(this));
- this.setBranchTranslator("body", new BodyTranslator(this));
- this.setBranchTranslator("dd", new DdTranslator(this));
- this.setBranchTranslator("dl", new DlTranslator(this));
- this.setBranchTranslator("dt", new DtTranslator(this));
- this.setBranchTranslator("head", new HeadTranslator(this));
- this.setBranchTranslator("h1", new HTranslator(this));
- this.setBranchTranslator("h2", new HTranslator(this));
- this.setBranchTranslator("h3", new HTranslator(this));
- this.setBranchTranslator("h4", new HTranslator(this));
- this.setBranchTranslator("h5", new HTranslator(this));
- this.setBranchTranslator("h6", new HTranslator(this));
- this.setBranchTranslator("li", new LiTranslator(this));
- this.setBranchTranslator("menu", new MenuTranslator(this));
- this.setBranchTranslator("ol", new OlTranslator(this));
- this.setBranchTranslator("p", new PTranslator(this));
- this.setBranchTranslator("pre", new PreTranslator(this));
- this.setBranchTranslator("pre-line", new PreLineTranslator(this));
- this.setBranchTranslator("ul", new UlTranslator(this));
- }
-
- private void initializeLeafTable() {
- this.leafTable = new Hashtable();
- this.setLeafTranslator("generic", new GenericLeafTranslator(this));
- this.setLeafTranslator("content", new ContentTranslator(this));
- this.setLeafTranslator("icon", new ImgTranslator(this));
- this.setLeafTranslator("img", new ImgTranslator(this));
- this.setLeafTranslator("font", new FontTranslator(this));
- this.setLeafTranslator("hr", new HrTranslator(this));
- this.setLeafTranslator("basefont", new BaseFontTranslator(this));
- this.setLeafTranslator("a", new ATranslator(this));
- this.setLeafTranslator("big", new BigTranslator(this));
- this.setLeafTranslator("small", new SmallTranslator(this));
- this.setLeafTranslator("code", new CodeTranslator(this));
- this.setLeafTranslator("cite", new CiteTranslator(this));
- this.setLeafTranslator("strike", new StrikeTranslator(this));
- this.setLeafTranslator("sub", new SubTranslator(this));
- this.setLeafTranslator("sup", new SupTranslator(this));
- this.setLeafTranslator("dfn", new DfnTranslator(this));
- this.setLeafTranslator("kbd", new KbdTranslator(this));
- this.setLeafTranslator("samp", new SampTranslator(this));
- this.setLeafTranslator("strong", new StrongTranslator(this));
- this.setLeafTranslator("_var", new VarTranslator(this));
- this.setLeafTranslator("em", new EmTranslator(this));
- this.setLeafTranslator("pre", new PreLeafTranslator(this));
- this.setLeafTranslator("tt", new TtTranslator(this));
- }
-
- public void writeLeaf(Writer var1, String var2, Element var3, Element var4) {
- String var5 = var4.getName();
- LeafTranslator var6 = null;
- if (var5.equals("content")) {
- AttributeSet var7 = var4.getAttributes();
- String var8 = (String)var7.getAttribute("htmltag");
- String var9 = (String)var7.getAttribute(AttributeSet.NameAttribute);
- String var10 = (String)var7.getAttribute("$ename");
- HTMLDebug.println("writeLeaf(): tagname = " + var8 + " styleName = " + var9 + " elementName " + var10);
- if (var8 != null) {
- var5 = var8;
- } else if (var9 != null) {
- var5 = var9;
- } else if (var10 != null && var10.equals("pre-line") && var9 != null) {
- var5 = var9;
- } else if (var10 == null && var9 != null) {
- var5 = var9;
- }
-
- if (var8 != null || var9 != null || var10 != null) {
- var6 = this.getLeafTranslator(var5);
- }
- } else {
- var6 = this.getLeafTranslator(var5);
- }
-
- if (var5.equals("hr") && this.indenting) {
- this.write(var1, var2);
- }
-
- if (var6 != null) {
- var6.translate(var1, var3, var4);
- }
-
- }
-
- public void setUpperCase() {
- this.lowercase = false;
- }
-
- public void setLowerCase() {
- this.lowercase = true;
- }
-
- public void setIndent() {
- this.indenting = true;
- }
-
- public void setNoIndent() {
- this.indenting = false;
- }
-
- public void writeBranch(Writer var1, String var2, Element var3) {
- if (var3.isLeaf()) {
- var3.getAttributes();
- this.writeLeaf(var1, var2, var3.getParentElement(), var3);
- } else {
- String var5 = var3.getName();
- String var4;
- if (var5.equals("section")) {
- var4 = "body";
- } else if (var5.equals("paragraph")) {
- AttributeSet var6 = var3.getAttributes();
- AttributeSet var7 = var6.getResolveParent();
- var4 = (String)var7.getAttribute(AttributeSet.NameAttribute);
- if (var4.endsWith(" p")) {
- var4 = "p";
- }
- } else {
- var4 = var5;
- }
-
- if (!var4.equals("default")) {
- AttributeSet var12 = var3.getAttributes();
- String var13 = (String)var12.getAttribute("impliedp");
- boolean var8 = false;
- if (var13 != null && var13.equals("impliedp")) {
- var8 = true;
- }
-
- if (this.indenting && !var4.equals("pre-line") && !var8) {
- this.write(var1, var2);
- }
-
- if (!var8) {
- BranchTranslator var9 = this.getBranchTranslator(var4);
- if (!this.indenting && !var4.equals("pre-line")) {
- this.write(var1, "\n");
- }
-
- var9.translate(var1, var3);
- }
-
- int var14 = var3.getElementCount();
-
- for(int var10 = 0; var10 < var14; ++var10) {
- Element var11 = var3.getElement(var10);
- if (this.indenting) {
- this.writeBranch(var1, var2 + " ", var11);
- } else {
- this.writeBranch(var1, "", var11);
- }
- }
-
- if (var13 != null && var13.equals("impliedp")) {
- this.write(var1, "");
- } else {
- this.writeEndTag(var1, var4, var2);
- }
- }
- }
- }
-
- public void writeHead(Writer var1, Element var2) {
- BranchTranslator var3 = this.getBranchTranslator("head");
- var3.translate(var1, var2);
- }
-
- public void writeStartTag(Writer var1, String var2) {
- if (!this.lowercase) {
- var2.toUpperCase();
- }
-
- this.write(var1, "<" + var2 + ">\n");
- }
-
- public void writeEndTag(Writer var1, String var2) {
- if (!this.lowercase) {
- var2.toUpperCase();
- }
-
- this.write(var1, "</" + var2 + ">\n");
- }
-
- public void writeEndTag(Writer var1, String var2, String var3) {
- if (!this.lowercase) {
- var2.toUpperCase();
- }
-
- if (!var2.equals("pre") && !var2.equals("p") && !var2.equals("h1") && !var2.equals("h2") && !var2.equals("h3") && !var2.equals("h4") && !var2.equals("h5") && !var2.equals("h6")) {
- if (!var2.equals("dt") && !var2.equals("li") && !var2.equals("dd")) {
- if (!var2.equals("li") && !var2.equals("dd") && !var2.equals("dt") && !var2.equals("hr") && !var2.equals("pre-line")) {
- if (this.indenting) {
- this.write(var1, var3 + "</" + var2 + ">\n");
- return;
- }
-
- this.write(var1, "</" + var2 + ">\n");
- }
-
- } else {
- this.write(var1, "\n");
- }
- } else {
- this.write(var1, "</" + var2 + ">\n");
- }
- }
-
- public void write(Writer var1, String var2) {
- HTMLDebug.println("Output=>" + var2 + "<=");
- int var3 = var2.length();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- try {
- var1.write(var2.charAt(var4));
- } catch (IOException var6) {
- System.out.println("HTMLWriter.write: " + var2 + " " + var6);
- }
- }
-
- }
-
- private String convertCase(String var1) {
- return this.lowercase ? var1.toLowerCase() : var1.toUpperCase();
- }
-
- private String toAlignString(int var1) {
- String var2 = "left";
- switch (var1) {
- case 0:
- var2 = "left";
- break;
- case 1:
- var2 = "center";
- break;
- case 2:
- var2 = "right";
- }
-
- return var2;
- }
-
- private boolean writeColor(AttributeSet var1, Vector var2, AttributeSet var3) {
- Color var4 = StyleConstants.getForeground(var3);
- if (var2 != null) {
- for(int var5 = 0; var5 < var2.size(); ++var5) {
- Style var6 = (Style)var2.elementAt(var5);
- if (var4 == StyleConstants.getForeground(var6)) {
- return false;
- }
- }
- }
-
- return var4 != StyleConstants.getForeground(var1);
- }
-
- private boolean writeFamily(AttributeSet var1, Vector var2, AttributeSet var3) {
- String var4 = StyleConstants.getFontFamily(var3);
- if (var2 != null) {
- for(int var5 = 0; var5 < var2.size(); ++var5) {
- Style var6 = (Style)var2.elementAt(var5);
- if (var4 == StyleConstants.getFontFamily(var6)) {
- return false;
- }
- }
- }
-
- return var4 != StyleConstants.getFontFamily(var1);
- }
-
- private boolean writeSize(AttributeSet var1, Vector var2, AttributeSet var3) {
- int var4 = StyleConstants.getFontSize(var3);
- if (var2 != null) {
- for(int var5 = 0; var5 < var2.size(); ++var5) {
- Style var6 = (Style)var2.elementAt(var5);
- if (var4 == StyleConstants.getFontSize(var6)) {
- return false;
- }
- }
- }
-
- return var4 != StyleConstants.getFontSize(var1);
- }
-
- private boolean writeFontTag(AttributeSet var1, Vector var2, AttributeSet var3) {
- if (this.writeColor(var1, var2, var3)) {
- return true;
- } else if (this.writeSize(var1, var2, var3)) {
- return true;
- } else {
- return this.writeFamily(var1, var2, var3);
- }
- }
-
- private boolean writeBoldTag(AttributeSet var1, Vector var2, AttributeSet var3) {
- if (!StyleConstants.isBold(var3)) {
- return false;
- } else {
- if (var2 != null) {
- for(int var4 = 0; var4 < var2.size(); ++var4) {
- Style var5 = (Style)var2.elementAt(var4);
- if (StyleConstants.isBold(var5)) {
- return false;
- }
- }
- }
-
- return !StyleConstants.isBold(var1);
- }
- }
-
- private boolean writeItalicTag(AttributeSet var1, Vector var2, AttributeSet var3) {
- if (!StyleConstants.isItalic(var3)) {
- return false;
- } else {
- if (var2 != null) {
- for(int var4 = 0; var4 < var2.size(); ++var4) {
- Style var5 = (Style)var2.elementAt(var4);
- if (StyleConstants.isItalic(var5)) {
- return false;
- }
- }
- }
-
- return !StyleConstants.isItalic(var1);
- }
- }
-
- private boolean writeUnderlineTag(AttributeSet var1, Vector var2, AttributeSet var3) {
- if (!StyleConstants.isUnderline(var3)) {
- return false;
- } else {
- if (var2 != null) {
- for(int var4 = 0; var4 < var2.size(); ++var4) {
- Style var5 = (Style)var2.elementAt(var4);
- if (StyleConstants.isUnderline(var5)) {
- return false;
- }
- }
- }
-
- return !StyleConstants.isUnderline(var1);
- }
- }
-
- private void writeContent(Writer var1, Vector var2, Element var3, Element var4) {
- AttributeSet var5 = var3.getAttributes();
- AttributeSet var6 = var4.getAttributes();
- AttributeSet var7 = var6.getResolveParent();
- String var8 = "b";
- String var9 = "i";
- String var10 = "u";
- boolean var11 = this.writeBoldTag(var7, var2, var5);
- if (var11) {
- this.write(var1, "<" + this.convertCase(var8) + ">");
- }
-
- boolean var12 = this.writeItalicTag(var7, var2, var5);
- if (var12) {
- this.write(var1, "<" + this.convertCase(var9) + ">");
- }
-
- boolean var13 = this.writeUnderlineTag(var7, var2, var5);
- if (var13) {
- this.write(var1, "<" + this.convertCase(var10) + ">");
- }
-
- boolean var14 = this.writeFontTag(var7, var2, var5);
- if (var14) {
- ++this.inFont;
- this.write(var1, "<" + this.convertCase("font"));
- }
-
- boolean var15 = this.writeColor(var7, var2, var5);
- if (var15) {
- Color var16 = StyleConstants.getForeground(var5);
-
- try {
- String var17 = HTMLUtils.colorToHex(var16);
- this.write(var1, " " + this.convertCase("color") + "=" + this.convertCase(var17));
- } catch (HTMLException var20) {
- HTMLDebug.println("Unable to convert Color string:" + var16);
- }
- }
-
- boolean var21 = this.writeSize(var7, var2, var5);
- if (var21) {
- StyleSheet var22 = StyleReader.getStyleSheet();
- int var18 = StyleConstants.getFontSize(var5);
- int var19 = var22.getRelSize(var18);
- if (var19 < 0) {
- this.write(var1, " " + this.convertCase("size") + "=" + var19);
- } else {
- this.write(var1, " " + this.convertCase("size") + "=+" + var19);
- }
- }
-
- boolean var23 = this.writeFamily(var7, var2, var5);
- if (var23) {
- String var24 = StyleConstants.getFontFamily(var5);
- this.write(var1, " " + this.convertCase("face") + "=\"" + var24 + "\"");
- }
-
- if (var14) {
- this.write(var1, ">");
- }
-
- String var25 = (String)var5.getAttribute(AttributeSet.NameAttribute);
- if (var25.equals("pre")) {
- this.writePreText(var1, var3);
- } else {
- this.writeText(var1, var3);
- }
-
- if (var14) {
- this.write(var1, "</" + this.convertCase("font") + ">");
- --this.inFont;
- }
-
- if (var13) {
- this.write(var1, "</" + this.convertCase(var10) + ">");
- }
-
- if (var12) {
- this.write(var1, "</" + this.convertCase(var9) + ">");
- }
-
- if (var11) {
- this.write(var1, "</" + this.convertCase(var8) + ">");
- }
-
- }
-
- private void writeText(Writer var1, Element var2) {
- try {
- StyledDocument var3 = (StyledDocument)var2.getDocument();
- String var4 = var3.getText(var2.getStartOffset(), var2.getEndOffset() - var2.getStartOffset());
- if (var4.endsWith("\n")) {
- this.writeText(var1, var3.getText(var2.getStartOffset(), var2.getEndOffset() - var2.getStartOffset() - 1));
- } else {
- this.writeText(var1, var3.getText(var2.getStartOffset(), var2.getEndOffset() - var2.getStartOffset()));
- }
- } catch (BadLocationException var5) {
- HTMLDebug.println("HTMLWriter.writeText:" + var2);
- }
- }
-
- private void writePreText(Writer var1, Element var2) {
- if (this.writePre && this.nPrelines >= 0) {
- try {
- StyledDocument var3 = (StyledDocument)var2.getDocument();
- var3.getText(var2.getStartOffset(), var2.getEndOffset() - var2.getStartOffset());
- if (var2.getStartOffset() == var2.getEndOffset() && this.nPrelines > 0) {
- this.writeChar(var1, '\n');
- this.writePre = false;
- } else if (this.nPrelines == 0 && var2.getEndOffset() - 1 > var2.getStartOffset() && var3.getText(var2.getStartOffset(), var2.getEndOffset() - var2.getStartOffset()).endsWith("\n")) {
- this.writeText(var1, var3.getText(var2.getStartOffset(), var2.getEndOffset() - var2.getStartOffset() - 1));
- this.writePre = true;
- } else {
- this.writeText(var1, var3.getText(var2.getStartOffset(), var2.getEndOffset() - var2.getStartOffset()));
- this.writePre = true;
- }
- } catch (BadLocationException var4) {
- HTMLDebug.println("HTMLWriter.writeText:" + var2);
- }
- }
- }
-
- public void writeChar(Writer var1, char var2) {
- HTMLDebug.println("Output=>" + var2 + "<=");
-
- try {
- switch (var2) {
- case '"':
- var1.write(""");
- return;
- case '&':
- var1.write("&");
- return;
- case '<':
- var1.write("<");
- return;
- case '>':
- var1.write(">");
- return;
- default:
- if (var2 != '\n' && var2 != '\t' && var2 != '\r') {
- if (var2 >= ' ' && var2 <= 127) {
- var1.write(var2);
- } else {
- var1.write("");
- var1.write(String.valueOf(var2));
- }
- } else {
- var1.write(var2);
- }
- }
- } catch (IOException var4) {
- System.out.println("HTMLWriter.write: " + var2 + " " + var4);
- }
- }
-
- private void writeText(Writer var1, String var2) {
- int var3 = var2.length();
-
- for(int var4 = 0; var4 < var3; ++var4) {
- this.writeChar(var1, var2.charAt(var4));
- }
-
- }
-
- // $FF: synthetic method
- static String access$0(HTMLWriter var0, String var1) {
- return var0.convertCase(var1);
- }
-
- // $FF: synthetic method
- static boolean access$1(HTMLWriter var0) {
- return var0.indenting;
- }
-
- // $FF: synthetic method
- static String access$2() {
- return " ";
- }
-
- // $FF: synthetic method
- static String access$3() {
- return "=";
- }
-
- // $FF: synthetic method
- static int access$4(HTMLWriter var0) {
- return var0.nPrelines;
- }
-
- // $FF: synthetic method
- static void access$5(HTMLWriter var0, int var1) {
- var0.nPrelines = var1;
- }
-
- // $FF: synthetic method
- static boolean access$6(HTMLWriter var0) {
- return var0.writePre;
- }
-
- // $FF: synthetic method
- static void access$7(HTMLWriter var0, boolean var1) {
- var0.writePre = var1;
- }
-
- // $FF: synthetic method
- static String access$8() {
- return "\"";
- }
-
- // $FF: synthetic method
- static void access$9(HTMLWriter var0, Writer var1, Vector var2, Element var3, Element var4) {
- var0.writeContent(var1, var2, var3, var4);
- }
-
- // $FF: synthetic method
- static int access$10(HTMLWriter var0) {
- return var0.inFont;
- }
-
- // $FF: synthetic method
- static void access$11(HTMLWriter var0, int var1) {
- var0.inFont = var1;
- }
- }
-