home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / text / html / StyleSheet.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  15.4 KB  |  578 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import java.io.ObjectOutputStream;
  8. import java.io.Reader;
  9. import java.io.Serializable;
  10. import java.net.URL;
  11. import java.util.Enumeration;
  12. import java.util.Hashtable;
  13. import java.util.Vector;
  14. import javax.swing.border.Border;
  15. import javax.swing.border.EmptyBorder;
  16. import javax.swing.text.AttributeSet;
  17. import javax.swing.text.Element;
  18. import javax.swing.text.MutableAttributeSet;
  19. import javax.swing.text.SimpleAttributeSet;
  20. import javax.swing.text.Style;
  21. import javax.swing.text.StyleConstants;
  22. import javax.swing.text.StyleContext;
  23. import javax.swing.text.View;
  24. import javax.swing.text.html.HTML.Attribute;
  25. import javax.swing.text.html.HTML.Tag;
  26.  
  27. public class StyleSheet extends StyleContext {
  28.    static final Border noBorder = new EmptyBorder(0, 0, 0, 0);
  29.    static final int DEFAULT_FONT_SIZE = 3;
  30.    private Style selectors = ((StyleContext)this).addStyle((String)null, (Style)null);
  31.    private CssParser parser;
  32.    private transient Hashtable valueConvertor;
  33.    private transient Vector searchContext;
  34.    private int baseFontIndex;
  35.    private int baseFontSize;
  36.    static int[] sizeMap = new int[]{8, 10, 12, 14, 18, 24, 36};
  37.    static final SheetAttribute RULE = new SheetAttribute("rule", false);
  38.    static final SheetAttribute WEIGHT = new SheetAttribute("rule-weight", false);
  39.    static final SheetAttribute BOX_PAINTER = new SheetAttribute("box-painter", true);
  40.    static final SheetAttribute LIST_PAINTER = new SheetAttribute("list-painter", true);
  41.    private static final Hashtable htmlAttrToCssAttrMap = new Hashtable(20);
  42.  
  43.    static {
  44.       htmlAttrToCssAttrMap.put(Attribute.COLOR, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.COLOR});
  45.       htmlAttrToCssAttrMap.put(Attribute.TEXT, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.COLOR});
  46.       htmlAttrToCssAttrMap.put(Attribute.CLEAR, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.CLEAR});
  47.       htmlAttrToCssAttrMap.put(Attribute.BACKGROUND, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.BACKGROUND_IMAGE});
  48.       htmlAttrToCssAttrMap.put(Attribute.BGCOLOR, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR});
  49.       htmlAttrToCssAttrMap.put(Attribute.WIDTH, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.WIDTH});
  50.       htmlAttrToCssAttrMap.put(Attribute.HEIGHT, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.HEIGHT});
  51.       htmlAttrToCssAttrMap.put(Attribute.BORDER, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.BORDER_WIDTH});
  52.       htmlAttrToCssAttrMap.put(Attribute.CELLPADDING, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING});
  53.       htmlAttrToCssAttrMap.put(Attribute.CELLSPACING, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN});
  54.       htmlAttrToCssAttrMap.put(Attribute.MARGINWIDTH, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN_LEFT, javax.swing.text.html.CSS.Attribute.MARGIN_RIGHT});
  55.       htmlAttrToCssAttrMap.put(Attribute.MARGINHEIGHT, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN_TOP, javax.swing.text.html.CSS.Attribute.MARGIN_BOTTOM});
  56.       htmlAttrToCssAttrMap.put(Attribute.HSPACE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING_LEFT, javax.swing.text.html.CSS.Attribute.PADDING_RIGHT});
  57.       htmlAttrToCssAttrMap.put(Attribute.VSPACE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING_BOTTOM, javax.swing.text.html.CSS.Attribute.PADDING_TOP});
  58.       htmlAttrToCssAttrMap.put(Attribute.FACE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.FONT_FAMILY});
  59.       htmlAttrToCssAttrMap.put(Attribute.SIZE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.FONT_SIZE});
  60.       htmlAttrToCssAttrMap.put(Attribute.VALIGN, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN});
  61.       htmlAttrToCssAttrMap.put(Attribute.ALIGN, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN, javax.swing.text.html.CSS.Attribute.TEXT_ALIGN, javax.swing.text.html.CSS.Attribute.FLOAT});
  62.       CSS.Attribute[] var0 = javax.swing.text.html.CSS.Attribute.allAttributes;
  63.  
  64.       try {
  65.          for(int var1 = 0; var1 < var0.length; ++var1) {
  66.             StyleContext.registerStaticAttributeKey(var0[var1]);
  67.          }
  68.       } catch (Throwable var2) {
  69.          var2.printStackTrace();
  70.       }
  71.  
  72.       StyleContext.registerStaticAttributeKey(RULE);
  73.       StyleContext.registerStaticAttributeKey(WEIGHT);
  74.       StyleContext.registerStaticAttributeKey(BOX_PAINTER);
  75.       StyleContext.registerStaticAttributeKey(LIST_PAINTER);
  76.    }
  77.  
  78.    public StyleSheet() {
  79.       this.selectors.addAttribute(StyleConstants.NameAttribute, ":");
  80.       this.searchContext = new Vector();
  81.       this.valueConvertor = new Hashtable();
  82.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_SIZE, new FontSize(this));
  83.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_FAMILY, new FontFamily(this));
  84.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_WEIGHT, new FontWeight(this));
  85.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_STYLE, new BorderStyle(this));
  86.       ColorValue var1 = new ColorValue(this);
  87.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.COLOR, var1);
  88.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR, var1);
  89.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_COLOR, var1);
  90.       LengthValue var2 = new LengthValue(this);
  91.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_TOP, var2);
  92.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_BOTTOM, var2);
  93.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_LEFT, var2);
  94.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_RIGHT, var2);
  95.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_TOP, var2);
  96.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_BOTTOM, var2);
  97.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_LEFT, var2);
  98.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_RIGHT, var2);
  99.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_WIDTH, var2);
  100.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_TOP_WIDTH, var2);
  101.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_BOTTOM_WIDTH, var2);
  102.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_LEFT_WIDTH, var2);
  103.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_RIGHT_WIDTH, var2);
  104.       CssValue var3 = new CssValue(this);
  105.       int var4 = javax.swing.text.html.CSS.Attribute.allAttributes.length;
  106.  
  107.       for(int var5 = 0; var5 < var4; ++var5) {
  108.          CSS.Attribute var6 = javax.swing.text.html.CSS.Attribute.allAttributes[var5];
  109.          if (this.valueConvertor.get(var6) == null) {
  110.             this.valueConvertor.put(var6, var3);
  111.          }
  112.       }
  113.  
  114.       this.baseFontSize = 3;
  115.    }
  116.  
  117.    // $FF: synthetic method
  118.    static int access$0(StyleSheet var0) {
  119.       return var0.baseFontSize;
  120.    }
  121.  
  122.    // $FF: synthetic method
  123.    static Hashtable access$1(StyleSheet var0) {
  124.       return var0.valueConvertor;
  125.    }
  126.  
  127.    public void addRule(String var1) {
  128.    }
  129.  
  130.    void addRule(String[] var1, AttributeSet var2) {
  131.       String var3 = "";
  132.       int var4 = var1.length - 1;
  133.  
  134.       for(int var5 = 0; var5 < var4; ++var5) {
  135.          var3 = var3 + var1[var5] + " ";
  136.       }
  137.  
  138.       var3 = var3 + var1[var4];
  139.       Style var6 = ((StyleContext)this).getStyle(var3);
  140.       if (var6 == null) {
  141.          var6 = ((StyleContext)this).addStyle(var3, (Style)null);
  142.          Style var7 = this.selectors;
  143.  
  144.          for(int var8 = 0; var8 <= var4; ++var8) {
  145.             var7 = this.addSelector(var7, var1[var8]);
  146.          }
  147.  
  148.          var7.addAttribute(RULE, var6);
  149.       }
  150.  
  151.       var6.addAttributes(var2);
  152.    }
  153.  
  154.    Style addSelector(Style var1, String var2) {
  155.       HTML.Tag var3 = HTML.getTag(var2);
  156.       if (var3 != null) {
  157.          Style var6;
  158.          if (!var1.isDefined(var3)) {
  159.             var6 = ((StyleContext)this).addStyle((String)null, var1);
  160.             String var5 = String.valueOf(var1.getAttribute(StyleConstants.NameAttribute)) + var2 + ":";
  161.             var6.addAttribute(StyleConstants.NameAttribute, var5);
  162.             var1.addAttribute(var3, var6);
  163.          } else {
  164.             var6 = (Style)var1.getAttribute(var3);
  165.          }
  166.  
  167.          return var6;
  168.       } else {
  169.          Style var4;
  170.          if (!var1.isDefined(var2)) {
  171.             var4 = ((StyleContext)this).addStyle((String)null, var1);
  172.             var1.addAttribute(var2, var4);
  173.          } else {
  174.             var4 = (Style)var1.getAttribute(var2);
  175.          }
  176.  
  177.          return var4;
  178.       }
  179.    }
  180.  
  181.    static String colorToHex(Color var0) {
  182.       String var1 = new String("#");
  183.       String var2 = Integer.toHexString(var0.getRed());
  184.       if (var2.length() > 2) {
  185.          var2 = var2.substring(0, 2);
  186.       } else if (var2.length() < 2) {
  187.          var1 = var1 + "0" + var2;
  188.       } else {
  189.          var1 = var1 + var2;
  190.       }
  191.  
  192.       var2 = Integer.toHexString(var0.getGreen());
  193.       if (var2.length() > 2) {
  194.          var2 = var2.substring(0, 2);
  195.       } else if (var2.length() < 2) {
  196.          var1 = var1 + "0" + var2;
  197.       } else {
  198.          var1 = var1 + var2;
  199.       }
  200.  
  201.       var2 = Integer.toHexString(var0.getBlue());
  202.       if (var2.length() > 2) {
  203.          var2 = var2.substring(0, 2);
  204.       } else if (var2.length() < 2) {
  205.          var1 = var1 + "0" + var2;
  206.       } else {
  207.          var1 = var1 + var2;
  208.       }
  209.  
  210.       return var1;
  211.    }
  212.  
  213.    public Color getBackground(AttributeSet var1) {
  214.       ColorValue var2 = (ColorValue)var1.getAttribute(javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR);
  215.       Color var3 = var2 != null ? var2.getValue() : null;
  216.       return var3;
  217.    }
  218.  
  219.    public BoxPainter getBoxPainter(AttributeSet var1) {
  220.       return new BoxPainter(var1);
  221.    }
  222.  
  223.    private CSS.Attribute getCssAlignAttribute(HTML.Tag var1, AttributeSet var2) {
  224.       return javax.swing.text.html.CSS.Attribute.TEXT_ALIGN;
  225.    }
  226.  
  227.    private CSS.Attribute[] getCssAttribute(HTML.Attribute var1) {
  228.       return (CSS.Attribute[])htmlAttrToCssAttrMap.get(var1);
  229.    }
  230.  
  231.    private Object getCssValue(CSS.Attribute var1, String var2) {
  232.       CssValue var3 = (CssValue)this.valueConvertor.get(var1);
  233.       Object var4 = var3.parseHtmlValue(var2);
  234.       return var4;
  235.    }
  236.  
  237.    public AttributeSet getDeclaration(String var1) {
  238.       return null;
  239.    }
  240.  
  241.    public Font getFont(AttributeSet var1) {
  242.       FontSize var2 = (FontSize)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_SIZE);
  243.       int var3 = var2 != null ? (int)var2.getValue(var1) : 12;
  244.       String var4 = (String)var1.getAttribute(javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN);
  245.       if (var4 != null && (var4.indexOf("sup") >= 0 || var4.indexOf("sub") >= 0)) {
  246.          var3 -= 2;
  247.       }
  248.  
  249.       FontFamily var5 = (FontFamily)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_FAMILY);
  250.       String var6 = var5 != null ? var5.getValue() : "SansSerif";
  251.       int var7 = 0;
  252.       FontWeight var8 = (FontWeight)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_WEIGHT);
  253.       if (var8 != null && var8.getValue() > 400) {
  254.          var7 |= 1;
  255.       }
  256.  
  257.       String var9 = (String)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_STYLE);
  258.       if (var9 != null && var9.equals("italic")) {
  259.          var7 |= 2;
  260.       }
  261.  
  262.       Font var10 = super.getFont(var6, var7, var3);
  263.       return var10;
  264.    }
  265.  
  266.    public Color getForeground(AttributeSet var1) {
  267.       ColorValue var2 = (ColorValue)var1.getAttribute(javax.swing.text.html.CSS.Attribute.COLOR);
  268.       Color var3 = var2 != null ? var2.getValue() : Color.black;
  269.       return var3;
  270.    }
  271.  
  272.    private HTML.Tag getHTMLTag(AttributeSet var1) {
  273.       Object var2 = var1.getAttribute(StyleConstants.NameAttribute);
  274.       if (var2 instanceof HTML.Tag) {
  275.          HTML.Tag var3 = (HTML.Tag)var2;
  276.          return var3;
  277.       } else {
  278.          return null;
  279.       }
  280.    }
  281.  
  282.    public static int getIndexOfSize(float var0) {
  283.       for(int var1 = 0; var1 < sizeMap.length; ++var1) {
  284.          if (var0 <= (float)sizeMap[var1]) {
  285.             return var1;
  286.          }
  287.       }
  288.  
  289.       return sizeMap.length - 1;
  290.    }
  291.  
  292.    public ListPainter getListPainter(AttributeSet var1) {
  293.       return new ListPainter(var1);
  294.    }
  295.  
  296.    public float getPointSize(int var1) {
  297.       if (var1 < 0) {
  298.          return (float)sizeMap[0];
  299.       } else {
  300.          return var1 > sizeMap.length - 1 ? (float)sizeMap[sizeMap.length - 1] : (float)sizeMap[var1];
  301.       }
  302.    }
  303.  
  304.    public float getPointSize(String var1) {
  305.       if (var1 != null) {
  306.          if (var1.startsWith("+")) {
  307.             int var4 = Integer.valueOf(var1.substring(1));
  308.             return this.getPointSize(this.baseFontSize + var4);
  309.          } else if (var1.startsWith("-")) {
  310.             int var2 = -Integer.valueOf(var1.substring(1));
  311.             return this.getPointSize(this.baseFontSize + var2);
  312.          } else {
  313.             int var3 = Integer.valueOf(var1);
  314.             return this.getPointSize(var3);
  315.          }
  316.       } else {
  317.          return 0.0F;
  318.       }
  319.    }
  320.  
  321.    public Style getRule(String var1) {
  322.       return null;
  323.    }
  324.  
  325.    public Style getRule(HTML.Tag var1, Element var2) {
  326.       this.searchContext.removeAllElements();
  327.  
  328.       for(Element var3 = var2.getParentElement(); var3 != null; var3 = var3.getParentElement()) {
  329.          AttributeSet var4 = var3.getAttributes();
  330.          this.searchContext.addElement(var4.getAttribute(StyleConstants.NameAttribute));
  331.       }
  332.  
  333.       Style var8 = this.selectors;
  334.       int var5 = this.searchContext.size();
  335.  
  336.       for(int var6 = this.searchContext.size() - 1; var6 >= 0; --var6) {
  337.          Style var7 = (Style)var8.getAttribute(this.searchContext.elementAt(var6));
  338.          if (var7 != null) {
  339.             var8 = var7;
  340.          }
  341.       }
  342.  
  343.       Style var9 = (Style)var8.getAttribute(var1);
  344.       if (var9 != null) {
  345.          return (Style)var9.getAttribute(RULE);
  346.       } else {
  347.          return null;
  348.       }
  349.    }
  350.  
  351.    public AttributeSet getViewAttributes(View var1) {
  352.       return new ViewAttributeSet(var1);
  353.    }
  354.  
  355.    static final Color hexToColor(String var0) {
  356.       if (var0.startsWith("#")) {
  357.          String var1 = var0.substring(1, Math.min(var0.length(), 7));
  358.          String var2 = "0x" + var1;
  359.          Color var3 = Color.decode(var2);
  360.          return var3;
  361.       } else {
  362.          return null;
  363.       }
  364.    }
  365.  
  366.    private boolean isFloater(String var1) {
  367.       return var1.equals("left") || var1.equals("right");
  368.    }
  369.  
  370.    private boolean isHTMLFontTag(HTML.Tag var1) {
  371.       return var1 != null && (var1 == Tag.FONT || var1 == Tag.BASEFONT);
  372.    }
  373.  
  374.    public void loadRules(Reader var1, URL var2) throws IOException {
  375.       if (this.parser == null) {
  376.          this.parser = new CssParser(this);
  377.       }
  378.  
  379.       this.parser.parse(var1);
  380.    }
  381.  
  382.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  383.       var1.defaultReadObject();
  384.       this.searchContext = new Vector();
  385.       int var2 = var1.readInt();
  386.       this.valueConvertor = new Hashtable(Math.max(1, var2));
  387.  
  388.       while(var2-- > 0) {
  389.          Object var3 = var1.readObject();
  390.          Object var4 = var1.readObject();
  391.          Object var5 = StyleContext.getStaticAttribute(var3);
  392.          if (var5 != null) {
  393.             var3 = var5;
  394.          }
  395.  
  396.          Object var6 = StyleContext.getStaticAttribute(var4);
  397.          if (var6 != null) {
  398.             var4 = var6;
  399.          }
  400.  
  401.          if (var3 != null && var4 != null) {
  402.             this.valueConvertor.put(var3, var4);
  403.          }
  404.       }
  405.  
  406.    }
  407.  
  408.    public void setBaseFontSize(int var1) {
  409.       if (var1 < 1) {
  410.          this.baseFontSize = 0;
  411.       } else if (var1 > 7) {
  412.          this.baseFontSize = 7;
  413.       } else {
  414.          this.baseFontSize = var1;
  415.       }
  416.  
  417.    }
  418.  
  419.    public void setBaseFontSize(String var1) {
  420.       if (var1 != null) {
  421.          if (var1.startsWith("+")) {
  422.             int var2 = Integer.valueOf(var1.substring(1));
  423.             this.setBaseFontSize(this.baseFontSize + var2);
  424.          } else if (var1.startsWith("-")) {
  425.             int var3 = -Integer.valueOf(var1.substring(1));
  426.             this.setBaseFontSize(this.baseFontSize + var3);
  427.          } else {
  428.             this.setBaseFontSize(Integer.valueOf(var1));
  429.          }
  430.       }
  431.  
  432.    }
  433.  
  434.    public Color stringToColor(String var1) {
  435.       Color var2 = null;
  436.       if (var1.charAt(0) == '#') {
  437.          var2 = hexToColor(var1);
  438.       } else if (var1.equalsIgnoreCase("Black")) {
  439.          var2 = hexToColor("#000000");
  440.       } else if (var1.equalsIgnoreCase("Silver")) {
  441.          var2 = hexToColor("#C0C0C0");
  442.       } else if (var1.equalsIgnoreCase("Gray")) {
  443.          var2 = hexToColor("#808080");
  444.       } else if (var1.equalsIgnoreCase("White")) {
  445.          var2 = hexToColor("#FFFFFF");
  446.       } else if (var1.equalsIgnoreCase("Maroon")) {
  447.          var2 = hexToColor("#800000");
  448.       } else if (var1.equalsIgnoreCase("Red")) {
  449.          var2 = hexToColor("#FF0000");
  450.       } else if (var1.equalsIgnoreCase("Purple")) {
  451.          var2 = hexToColor("#800080");
  452.       } else if (var1.equalsIgnoreCase("Fuchsia")) {
  453.          var2 = hexToColor("#FF00FF");
  454.       } else if (var1.equalsIgnoreCase("Green")) {
  455.          var2 = hexToColor("#008000");
  456.       } else if (var1.equalsIgnoreCase("Lime")) {
  457.          var2 = hexToColor("#00FF00");
  458.       } else if (var1.equalsIgnoreCase("Olive")) {
  459.          var2 = hexToColor("#808000");
  460.       } else if (var1.equalsIgnoreCase("Yellow")) {
  461.          var2 = hexToColor("#FFFF00");
  462.       } else if (var1.equalsIgnoreCase("Navy")) {
  463.          var2 = hexToColor("#000080");
  464.       } else if (var1.equalsIgnoreCase("Blue")) {
  465.          var2 = hexToColor("#0000FF");
  466.       } else if (var1.equalsIgnoreCase("Teal")) {
  467.          var2 = hexToColor("#008080");
  468.       } else if (var1.equalsIgnoreCase("Aqua")) {
  469.          var2 = hexToColor("#00FFFF");
  470.       }
  471.  
  472.       return var2;
  473.    }
  474.  
  475.    void translateAttribute(HTML.Attribute var1, AttributeSet var2, MutableAttributeSet var3) {
  476.       CSS.Attribute[] var4 = this.getCssAttribute(var1);
  477.       String var5 = (String)var2.getAttribute(var1);
  478.       if (var4 != null && var5 != null) {
  479.          for(int var6 = 0; var6 < var4.length; ++var6) {
  480.             Object var7 = this.getCssValue(var4[var6], var5);
  481.             if (var7 != null) {
  482.                var3.addAttribute(var4[var6], var7);
  483.             }
  484.          }
  485.  
  486.       }
  487.    }
  488.  
  489.    private void translateAttributes(HTML.Tag var1, AttributeSet var2, MutableAttributeSet var3) {
  490.       Enumeration var4 = var2.getAttributeNames();
  491.  
  492.       while(var4.hasMoreElements()) {
  493.          Object var5 = var4.nextElement();
  494.          if (var5 instanceof HTML.Attribute) {
  495.             HTML.Attribute var6 = (HTML.Attribute)var5;
  496.             if (var6 == Attribute.ALIGN) {
  497.                String var7 = (String)var2.getAttribute(Attribute.ALIGN);
  498.                if (var7 != null) {
  499.                   CSS.Attribute var8 = this.getCssAlignAttribute(var1, var2);
  500.                   if (var8 != null) {
  501.                      Object var9 = this.getCssValue(var8, var7);
  502.                      if (var9 != null) {
  503.                         var3.addAttribute(var8, var9);
  504.                      }
  505.                   }
  506.                }
  507.             } else if (var6 != Attribute.SIZE || this.isHTMLFontTag(var1)) {
  508.                this.translateAttribute(var6, var2, var3);
  509.             }
  510.          }
  511.       }
  512.  
  513.    }
  514.  
  515.    private void translateEmbeddedAttributes(AttributeSet var1, MutableAttributeSet var2) {
  516.       Enumeration var3 = var1.getAttributeNames();
  517.  
  518.       while(var3.hasMoreElements()) {
  519.          Object var4 = var3.nextElement();
  520.          if (var4 instanceof HTML.Tag) {
  521.             HTML.Tag var5 = (HTML.Tag)var4;
  522.             Object var6 = var1.getAttribute(var5);
  523.             if (var6 != null && var6 instanceof AttributeSet) {
  524.                this.translateAttributes(var5, (AttributeSet)var6, var2);
  525.             }
  526.          }
  527.       }
  528.  
  529.    }
  530.  
  531.    public AttributeSet translateHTMLToCSS(AttributeSet var1) {
  532.       SimpleAttributeSet var2 = new SimpleAttributeSet();
  533.       Element var3 = (Element)var1;
  534.       HTML.Tag var4 = this.getHTMLTag(var1);
  535.       if (var4 == Tag.TD || var4 == Tag.TH) {
  536.          AttributeSet var5 = var3.getParentElement().getParentElement().getAttributes();
  537.          this.translateAttribute(Attribute.BORDER, var5, var2);
  538.       }
  539.  
  540.       if (var3.isLeaf()) {
  541.          this.translateEmbeddedAttributes(var1, var2);
  542.       } else {
  543.          this.translateAttributes(var4, var1, var2);
  544.       }
  545.  
  546.       Style var6 = ((StyleContext)this).addStyle((String)null, (Style)null);
  547.       var6.addAttributes(var2);
  548.       return var6;
  549.    }
  550.  
  551.    private boolean validTextAlignValue(String var1) {
  552.       return this.isFloater(var1) || var1.equals("center");
  553.    }
  554.  
  555.    private void writeObject(ObjectOutputStream var1) throws IOException {
  556.       var1.defaultWriteObject();
  557.       Enumeration var2 = this.valueConvertor.keys();
  558.       var1.writeInt(this.valueConvertor.size());
  559.       if (var2 != null) {
  560.          while(var2.hasMoreElements()) {
  561.             Object var3 = var2.nextElement();
  562.             Object var4 = this.valueConvertor.get(var3);
  563.             if (!(var3 instanceof Serializable) && (var3 = StyleContext.getStaticAttributeKey(var3)) == null) {
  564.                var3 = null;
  565.                var4 = null;
  566.             } else if (!(var4 instanceof Serializable) && (var4 = StyleContext.getStaticAttributeKey(var4)) == null) {
  567.                var3 = null;
  568.                var4 = null;
  569.             }
  570.  
  571.             var1.writeObject(var3);
  572.             var1.writeObject(var4);
  573.          }
  574.       }
  575.  
  576.    }
  577. }
  578.