home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / text / html / MinimalHTMLWriter.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  7.4 KB  |  419 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.awt.Color;
  4. import java.io.IOException;
  5. import java.io.Writer;
  6. import java.util.Enumeration;
  7. import java.util.Hashtable;
  8. import javax.swing.text.AbstractDocument;
  9. import javax.swing.text.AbstractWriter;
  10. import javax.swing.text.AttributeSet;
  11. import javax.swing.text.BadLocationException;
  12. import javax.swing.text.DefaultStyledDocument;
  13. import javax.swing.text.Element;
  14. import javax.swing.text.ElementIterator;
  15. import javax.swing.text.Style;
  16. import javax.swing.text.StyleConstants;
  17. import javax.swing.text.StyleContext;
  18. import javax.swing.text.StyledDocument;
  19.  
  20. public class MinimalHTMLWriter extends AbstractWriter {
  21.    private static final int BOLD = 1;
  22.    private static final int ITALIC = 2;
  23.    private static final int UNDERLINE = 4;
  24.    private static final CSS css = new CSS();
  25.    private int fontMask = 0;
  26.    int startOffset = 0;
  27.    int endOffset = 0;
  28.    private AttributeSet fontAttributes;
  29.    private Hashtable styleNameMapping;
  30.  
  31.    public MinimalHTMLWriter(Writer var1, StyledDocument var2) {
  32.       super(var1, var2);
  33.    }
  34.  
  35.    public MinimalHTMLWriter(Writer var1, StyledDocument var2, int var3, int var4) {
  36.       super(var1, var2, var3, var4);
  37.    }
  38.  
  39.    public void write() throws IOException, BadLocationException {
  40.       this.styleNameMapping = new Hashtable();
  41.       this.writeStartTag("<html>");
  42.       this.writeHeader();
  43.       this.writeBody();
  44.       this.writeEndTag("</html>");
  45.    }
  46.  
  47.    protected void writeAttributes(AttributeSet var1) throws IOException {
  48.       Enumeration var2 = var1.getAttributeNames();
  49.  
  50.       while(var2.hasMoreElements()) {
  51.          Object var3 = var2.nextElement();
  52.          if (var3 instanceof StyleConstants.ParagraphConstants || var3 instanceof StyleConstants.CharacterConstants || var3 instanceof StyleConstants.FontConstants || var3 instanceof StyleConstants.ColorConstants) {
  53.             ((AbstractWriter)this).indent();
  54.             ((AbstractWriter)this).write(var3.toString());
  55.             ((AbstractWriter)this).write(':');
  56.             ((AbstractWriter)this).write(css.styleConstantsValueToCSSValue((StyleConstants)var3, var1.getAttribute(var3)).toString());
  57.             ((AbstractWriter)this).write(';');
  58.             ((AbstractWriter)this).write('\n');
  59.          }
  60.       }
  61.  
  62.    }
  63.  
  64.    protected void text(Element var1) throws IOException, BadLocationException {
  65.       String var2 = ((AbstractWriter)this).getText(var1);
  66.       if (var2.length() > 0 && var2.charAt(var2.length() - 1) == '\n') {
  67.          var2 = var2.substring(0, var2.length() - 1);
  68.       }
  69.  
  70.       if (var2.length() > 0) {
  71.          ((AbstractWriter)this).write(var2);
  72.       }
  73.  
  74.    }
  75.  
  76.    protected void writeStartTag(String var1) throws IOException {
  77.       ((AbstractWriter)this).indent();
  78.       ((AbstractWriter)this).write(var1);
  79.       ((AbstractWriter)this).write('\n');
  80.       ((AbstractWriter)this).incrIndent();
  81.    }
  82.  
  83.    protected void writeEndTag(String var1) throws IOException {
  84.       ((AbstractWriter)this).decrIndent();
  85.       ((AbstractWriter)this).indent();
  86.       ((AbstractWriter)this).write(var1);
  87.       ((AbstractWriter)this).write('\n');
  88.    }
  89.  
  90.    protected void writeHeader() throws IOException {
  91.       this.writeStartTag("<head>");
  92.       this.writeStartTag("<style>");
  93.       this.writeStartTag("<!--");
  94.       this.writeStyles();
  95.       this.writeEndTag("-->");
  96.       this.writeEndTag("</style>");
  97.       this.writeEndTag("</head>");
  98.    }
  99.  
  100.    protected void writeStyles() throws IOException {
  101.       DefaultStyledDocument var1 = (DefaultStyledDocument)((AbstractWriter)this).getDocument();
  102.       Enumeration var2 = var1.getStyleNames();
  103.  
  104.       while(var2.hasMoreElements()) {
  105.          Style var3 = var1.getStyle((String)var2.nextElement());
  106.          if (var3.getAttributeCount() != 1 || !var3.isDefined(StyleConstants.NameAttribute)) {
  107.             ((AbstractWriter)this).indent();
  108.             ((AbstractWriter)this).write("p." + this.addStyleName(var3.getName()));
  109.             ((AbstractWriter)this).write(" {\n");
  110.             ((AbstractWriter)this).incrIndent();
  111.             this.writeAttributes(var3);
  112.             ((AbstractWriter)this).decrIndent();
  113.             ((AbstractWriter)this).indent();
  114.             ((AbstractWriter)this).write("}\n");
  115.          }
  116.       }
  117.  
  118.    }
  119.  
  120.    protected void writeBody() throws IOException, BadLocationException {
  121.       ElementIterator var1 = ((AbstractWriter)this).getElementIterator();
  122.       var1.current();
  123.       Object var2 = null;
  124.       this.writeStartTag("<body>");
  125.       boolean var3 = false;
  126.  
  127.       while((var4 = var1.next()) != null) {
  128.          if (((AbstractWriter)this).inRange(var4)) {
  129.             if (var4 instanceof AbstractDocument.BranchElement) {
  130.                if (var3) {
  131.                   this.writeEndParagraph();
  132.                   var3 = false;
  133.                   this.fontMask = 0;
  134.                }
  135.  
  136.                this.writeStartParagraph(var4);
  137.             } else if (this.isText(var4)) {
  138.                this.writeContent(var4, !var3);
  139.                var3 = true;
  140.             } else {
  141.                this.writeLeaf(var4);
  142.                var3 = true;
  143.             }
  144.          }
  145.       }
  146.  
  147.       if (var3) {
  148.          this.writeEndParagraph();
  149.       }
  150.  
  151.       this.writeEndTag("</body>");
  152.    }
  153.  
  154.    protected void writeEndParagraph() throws IOException {
  155.       this.writeEndMask(this.fontMask);
  156.       if (this.inFontTag()) {
  157.          this.endSpanTag();
  158.       } else {
  159.          ((AbstractWriter)this).write('\n');
  160.       }
  161.  
  162.       this.writeEndTag("</p>");
  163.    }
  164.  
  165.    protected void writeStartParagraph(Element var1) throws IOException {
  166.       AttributeSet var2 = var1.getAttributes();
  167.       Object var3 = var2.getAttribute(StyleConstants.ResolveAttribute);
  168.       if (var3 instanceof StyleContext.NamedStyle) {
  169.          this.writeStartTag("<p class=" + this.mapStyleName(((StyleContext.NamedStyle)var3).getName()) + ">");
  170.       } else {
  171.          this.writeStartTag("<p>");
  172.       }
  173.  
  174.    }
  175.  
  176.    protected void writeLeaf(Element var1) throws IOException {
  177.       ((AbstractWriter)this).indent();
  178.       if (var1.getName() == "icon") {
  179.          this.writeImage(var1);
  180.       } else if (var1.getName() == "component") {
  181.          this.writeComponent(var1);
  182.       }
  183.  
  184.    }
  185.  
  186.    protected void writeImage(Element var1) throws IOException {
  187.    }
  188.  
  189.    protected void writeComponent(Element var1) throws IOException {
  190.    }
  191.  
  192.    protected boolean isText(Element var1) {
  193.       return var1.getName() == "content";
  194.    }
  195.  
  196.    protected void writeContent(Element var1, boolean var2) throws IOException, BadLocationException {
  197.       AttributeSet var3 = var1.getAttributes();
  198.       this.writeNonHTMLAttributes(var3);
  199.       if (var2) {
  200.          ((AbstractWriter)this).indent();
  201.       }
  202.  
  203.       this.writeHTMLTags(var3);
  204.       this.text(var1);
  205.    }
  206.  
  207.    protected void writeHTMLTags(AttributeSet var1) throws IOException {
  208.       int var2 = this.fontMask;
  209.       this.setFontMask(var1);
  210.       int var3 = 0;
  211.       int var4 = 0;
  212.       if ((var2 & 1) != 0) {
  213.          if ((this.fontMask & 1) == 0) {
  214.             var3 |= 1;
  215.          }
  216.       } else if ((this.fontMask & 1) != 0) {
  217.          var4 |= 1;
  218.       }
  219.  
  220.       if ((var2 & 2) != 0) {
  221.          if ((this.fontMask & 2) == 0) {
  222.             var3 |= 2;
  223.          }
  224.       } else if ((this.fontMask & 2) != 0) {
  225.          var4 |= 2;
  226.       }
  227.  
  228.       if ((var2 & 4) != 0) {
  229.          if ((this.fontMask & 4) == 0) {
  230.             var3 |= 4;
  231.          }
  232.       } else if ((this.fontMask & 4) != 0) {
  233.          var4 |= 4;
  234.       }
  235.  
  236.       this.writeEndMask(var3);
  237.       this.writeStartMask(var4);
  238.    }
  239.  
  240.    private void setFontMask(AttributeSet var1) {
  241.       if (StyleConstants.isBold(var1)) {
  242.          this.fontMask |= 1;
  243.       }
  244.  
  245.       if (StyleConstants.isItalic(var1)) {
  246.          this.fontMask |= 2;
  247.       }
  248.  
  249.       if (StyleConstants.isUnderline(var1)) {
  250.          this.fontMask |= 4;
  251.       }
  252.  
  253.    }
  254.  
  255.    private void writeStartMask(int var1) throws IOException {
  256.       if (var1 != 0) {
  257.          if ((var1 & 4) != 0) {
  258.             ((AbstractWriter)this).write("<u>");
  259.          }
  260.  
  261.          if ((var1 & 2) != 0) {
  262.             ((AbstractWriter)this).write("<i>");
  263.          }
  264.  
  265.          if ((var1 & 1) != 0) {
  266.             ((AbstractWriter)this).write("<b>");
  267.          }
  268.       }
  269.  
  270.    }
  271.  
  272.    private void writeEndMask(int var1) throws IOException {
  273.       if (var1 != 0) {
  274.          if ((var1 & 1) != 0) {
  275.             ((AbstractWriter)this).write("</b>");
  276.          }
  277.  
  278.          if ((var1 & 2) != 0) {
  279.             ((AbstractWriter)this).write("</i>");
  280.          }
  281.  
  282.          if ((var1 & 4) != 0) {
  283.             ((AbstractWriter)this).write("</u>");
  284.          }
  285.       }
  286.  
  287.    }
  288.  
  289.    protected void writeNonHTMLAttributes(AttributeSet var1) throws IOException {
  290.       String var2 = "";
  291.       String var3 = "; ";
  292.       if (!this.inFontTag() || !this.fontAttributes.isEqual(var1)) {
  293.          boolean var4 = true;
  294.          Color var5 = (Color)var1.getAttribute(StyleConstants.Foreground);
  295.          if (var5 != null) {
  296.             var2 = var2 + "color: " + css.styleConstantsValueToCSSValue((StyleConstants)StyleConstants.Foreground, var5);
  297.             var4 = false;
  298.          }
  299.  
  300.          Integer var6 = (Integer)var1.getAttribute(StyleConstants.FontSize);
  301.          if (var6 != null) {
  302.             if (!var4) {
  303.                var2 = var2 + var3;
  304.             }
  305.  
  306.             var2 = var2 + "font-size: " + var6 + "pt";
  307.             var4 = false;
  308.          }
  309.  
  310.          String var7 = (String)var1.getAttribute(StyleConstants.FontFamily);
  311.          if (var7 != null) {
  312.             if (!var4) {
  313.                var2 = var2 + var3;
  314.             }
  315.  
  316.             var2 = var2 + "font-family: " + var7;
  317.             var4 = false;
  318.          }
  319.  
  320.          if (var2.length() > 0) {
  321.             if (this.fontMask != 0) {
  322.                this.writeEndMask(this.fontMask);
  323.                this.fontMask = 0;
  324.             }
  325.  
  326.             this.startSpanTag(var2);
  327.             this.fontAttributes = var1;
  328.          } else if (this.fontAttributes != null) {
  329.             this.writeEndMask(this.fontMask);
  330.             this.fontMask = 0;
  331.             this.endSpanTag();
  332.          }
  333.  
  334.       }
  335.    }
  336.  
  337.    protected boolean inFontTag() {
  338.       return this.fontAttributes != null;
  339.    }
  340.  
  341.    protected void endFontTag() throws IOException {
  342.       ((AbstractWriter)this).write('\n');
  343.       this.writeEndTag("</font>");
  344.       this.fontAttributes = null;
  345.    }
  346.  
  347.    protected void startFontTag(String var1) throws IOException {
  348.       boolean var2 = false;
  349.       if (this.inFontTag()) {
  350.          this.endFontTag();
  351.          var2 = true;
  352.       }
  353.  
  354.       this.writeStartTag("<font style=\"" + var1 + "\">");
  355.       if (var2) {
  356.          ((AbstractWriter)this).indent();
  357.       }
  358.  
  359.    }
  360.  
  361.    private void startSpanTag(String var1) throws IOException {
  362.       boolean var2 = false;
  363.       if (this.inFontTag()) {
  364.          this.endSpanTag();
  365.          var2 = true;
  366.       }
  367.  
  368.       this.writeStartTag("<span style=\"" + var1 + "\">");
  369.       if (var2) {
  370.          ((AbstractWriter)this).indent();
  371.       }
  372.  
  373.    }
  374.  
  375.    private void endSpanTag() throws IOException {
  376.       ((AbstractWriter)this).write('\n');
  377.       this.writeEndTag("</span>");
  378.       this.fontAttributes = null;
  379.    }
  380.  
  381.    private String addStyleName(String var1) {
  382.       if (this.styleNameMapping == null) {
  383.          return var1;
  384.       } else {
  385.          StringBuffer var2 = null;
  386.  
  387.          for(int var3 = var1.length() - 1; var3 >= 0; --var3) {
  388.             if (!this.isValidCharacter(var1.charAt(var3))) {
  389.                if (var2 == null) {
  390.                   var2 = new StringBuffer(var1);
  391.                }
  392.  
  393.                var2.setCharAt(var3, 'a');
  394.             }
  395.          }
  396.  
  397.          String var4;
  398.          for(var4 = var2 != null ? var2.toString() : var1; this.styleNameMapping.get(var4) != null; var4 = var4 + 'x') {
  399.          }
  400.  
  401.          this.styleNameMapping.put(var1, var4);
  402.          return var4;
  403.       }
  404.    }
  405.  
  406.    private String mapStyleName(String var1) {
  407.       if (this.styleNameMapping == null) {
  408.          return var1;
  409.       } else {
  410.          String var2 = (String)this.styleNameMapping.get(var1);
  411.          return var2 == null ? var1 : var2;
  412.       }
  413.    }
  414.  
  415.    private boolean isValidCharacter(char var1) {
  416.       return var1 >= 'a' && var1 <= 'z' || var1 >= 'A' && var1 <= 'Z';
  417.    }
  418. }
  419.