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 / CSS.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  18.6 KB  |  815 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Toolkit;
  6. import java.io.IOException;
  7. import java.io.ObjectInputStream;
  8. import java.io.ObjectOutputStream;
  9. import java.io.Serializable;
  10. import java.lang.reflect.Method;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.util.Enumeration;
  14. import java.util.Hashtable;
  15. import java.util.Vector;
  16. import javax.swing.SizeRequirements;
  17. import javax.swing.text.AttributeSet;
  18. import javax.swing.text.Element;
  19. import javax.swing.text.MutableAttributeSet;
  20. import javax.swing.text.SimpleAttributeSet;
  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.Tag;
  25.  
  26. public class CSS implements Serializable {
  27.    private static final Hashtable attributeMap = new Hashtable();
  28.    private static final Hashtable valueMap = new Hashtable();
  29.    static int[] sizeMap = new int[]{8, 10, 12, 14, 18, 24, 36};
  30.    private static final Hashtable htmlAttrToCssAttrMap = new Hashtable(20);
  31.    private static final Hashtable styleConstantToCssMap = new Hashtable(17);
  32.    private static final Hashtable htmlValueToCssValueMap = new Hashtable(8);
  33.    private static final Hashtable cssValueToInternalValueMap = new Hashtable(13);
  34.    private static Hashtable fontMapping;
  35.    private static final Object fontMappingLock = new Object();
  36.    private transient Hashtable valueConvertor = new Hashtable();
  37.    private int baseFontSize = 3;
  38.  
  39.    public CSS() {
  40.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_SIZE, new FontSize(this));
  41.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_FAMILY, new FontFamily());
  42.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_WEIGHT, new FontWeight());
  43.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_STYLE, new BorderStyle());
  44.       ColorValue var1 = new ColorValue();
  45.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.COLOR, var1);
  46.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR, var1);
  47.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_COLOR, var1);
  48.       LengthValue var2 = new LengthValue();
  49.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_TOP, var2);
  50.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_BOTTOM, var2);
  51.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_LEFT, var2);
  52.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_RIGHT, var2);
  53.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_TOP, var2);
  54.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_BOTTOM, var2);
  55.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_LEFT, var2);
  56.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_RIGHT, var2);
  57.       BorderWidthValue var3 = new BorderWidthValue((String)null, 0);
  58.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_WIDTH, var2);
  59.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_TOP_WIDTH, var3);
  60.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_BOTTOM_WIDTH, var3);
  61.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_LEFT_WIDTH, var3);
  62.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_RIGHT_WIDTH, var3);
  63.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.TEXT_INDENT, var2);
  64.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.WIDTH, var2);
  65.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.HEIGHT, var2);
  66.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_SPACING, var2);
  67.       StringValue var4 = new StringValue();
  68.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_STYLE, var4);
  69.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.TEXT_DECORATION, var4);
  70.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.TEXT_ALIGN, var4);
  71.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN, var4);
  72.       CssValueMapper var5 = new CssValueMapper();
  73.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.LIST_STYLE_TYPE, var5);
  74.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BACKGROUND_IMAGE, new BackgroundImage());
  75.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BACKGROUND_POSITION, new BackgroundPosition());
  76.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BACKGROUND_REPEAT, var5);
  77.       this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BACKGROUND_ATTACHMENT, var5);
  78.       CssValue var6 = new CssValue();
  79.       int var7 = javax.swing.text.html.CSS.Attribute.allAttributes.length;
  80.  
  81.       for(int var8 = 0; var8 < var7; ++var8) {
  82.          Attribute var9 = javax.swing.text.html.CSS.Attribute.allAttributes[var8];
  83.          if (this.valueConvertor.get(var9) == null) {
  84.             this.valueConvertor.put(var9, var6);
  85.          }
  86.       }
  87.  
  88.    }
  89.  
  90.    void setBaseFontSize(int var1) {
  91.       if (var1 < 1) {
  92.          this.baseFontSize = 0;
  93.       } else if (var1 > 7) {
  94.          this.baseFontSize = 7;
  95.       } else {
  96.          this.baseFontSize = var1;
  97.       }
  98.  
  99.    }
  100.  
  101.    void setBaseFontSize(String var1) {
  102.       if (var1 != null) {
  103.          if (var1.startsWith("+")) {
  104.             int var2 = Integer.valueOf(var1.substring(1));
  105.             this.setBaseFontSize(this.baseFontSize + var2);
  106.          } else if (var1.startsWith("-")) {
  107.             int var5 = -Integer.valueOf(var1.substring(1));
  108.             this.setBaseFontSize(this.baseFontSize + var5);
  109.          } else {
  110.             this.setBaseFontSize(Integer.valueOf(var1));
  111.          }
  112.       }
  113.  
  114.    }
  115.  
  116.    int getBaseFontSize() {
  117.       return this.baseFontSize;
  118.    }
  119.  
  120.    void addInternalCSSValue(MutableAttributeSet var1, Attribute var2, String var3) {
  121.       if (var2 == javax.swing.text.html.CSS.Attribute.FONT) {
  122.          javax.swing.text.html.CSS.ShorthandFontParser.parseShorthandFont(this, var3, var1);
  123.       } else if (var2 == javax.swing.text.html.CSS.Attribute.BACKGROUND) {
  124.          javax.swing.text.html.CSS.ShorthandBackgroundParser.parseShorthandBackground(this, var3, var1);
  125.       } else if (var2 == javax.swing.text.html.CSS.Attribute.MARGIN) {
  126.          javax.swing.text.html.CSS.ShorthandMarginParser.parseShorthandMargin(this, var3, var1, javax.swing.text.html.CSS.Attribute.access$000());
  127.       } else if (var2 == javax.swing.text.html.CSS.Attribute.PADDING) {
  128.          javax.swing.text.html.CSS.ShorthandMarginParser.parseShorthandMargin(this, var3, var1, javax.swing.text.html.CSS.Attribute.access$100());
  129.       } else if (var2 == javax.swing.text.html.CSS.Attribute.BORDER_WIDTH) {
  130.          javax.swing.text.html.CSS.ShorthandMarginParser.parseShorthandMargin(this, var3, var1, javax.swing.text.html.CSS.Attribute.access$200());
  131.       } else {
  132.          Object var4 = this.getInternalCSSValue(var2, var3);
  133.          if (var4 != null) {
  134.             var1.addAttribute(var2, var4);
  135.          }
  136.       }
  137.  
  138.    }
  139.  
  140.    Object getInternalCSSValue(Attribute var1, String var2) {
  141.       CssValue var3 = (CssValue)this.valueConvertor.get(var1);
  142.       return var3.parseCssValue(var2);
  143.    }
  144.  
  145.    Attribute styleConstantsKeyToCSSKey(StyleConstants var1) {
  146.       return (Attribute)styleConstantToCssMap.get(var1);
  147.    }
  148.  
  149.    Object styleConstantsValueToCSSValue(StyleConstants var1, Object var2) {
  150.       Attribute var3 = this.styleConstantsKeyToCSSKey(var1);
  151.       if (var3 != null) {
  152.          CssValue var4 = (CssValue)this.valueConvertor.get(var3);
  153.          return var4.fromStyleConstants(var1, var2);
  154.       } else {
  155.          return null;
  156.       }
  157.    }
  158.  
  159.    Object cssValueToStyleConstantsValue(StyleConstants var1, Object var2) {
  160.       return var2 instanceof CssValue ? ((CssValue)var2).toStyleConstants(var1, (View)null) : null;
  161.    }
  162.  
  163.    Font getFont(StyleContext var1, AttributeSet var2, int var3) {
  164.       int var4 = getFontSize(var2, var3);
  165.       StringValue var5 = (StringValue)var2.getAttribute(javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN);
  166.       if (var5 != null) {
  167.          String var6 = ((CssValue)var5).toString();
  168.          if (var6.indexOf("sup") >= 0 || var6.indexOf("sub") >= 0) {
  169.             var4 -= 2;
  170.          }
  171.       }
  172.  
  173.       FontFamily var12 = (FontFamily)var2.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_FAMILY);
  174.       String var7 = var12 != null ? var12.getValue() : "SansSerif";
  175.       int var8 = 0;
  176.       FontWeight var9 = (FontWeight)var2.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_WEIGHT);
  177.       if (var9 != null && var9.getValue() > 400) {
  178.          var8 |= 1;
  179.       }
  180.  
  181.       Object var10 = var2.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_STYLE);
  182.       if (var10 != null && var10.toString().indexOf("italic") >= 0) {
  183.          var8 |= 2;
  184.       }
  185.  
  186.       Font var11 = var1.getFont(var7, var8, var4);
  187.       return var11;
  188.    }
  189.  
  190.    static int getFontSize(AttributeSet var0, int var1) {
  191.       FontSize var2 = (FontSize)var0.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_SIZE);
  192.       return var2 != null ? (int)var2.getValue(var0) : var1;
  193.    }
  194.  
  195.    Color getColor(AttributeSet var1, Attribute var2) {
  196.       ColorValue var3 = (ColorValue)var1.getAttribute(var2);
  197.       return var3 != null ? var3.getValue() : null;
  198.    }
  199.  
  200.    float getPointSize(String var1) {
  201.       if (var1 != null) {
  202.          if (var1.startsWith("+")) {
  203.             int var6 = Integer.valueOf(var1.substring(1));
  204.             return this.getPointSize(this.baseFontSize + var6);
  205.          } else if (var1.startsWith("-")) {
  206.             int var2 = -Integer.valueOf(var1.substring(1));
  207.             return this.getPointSize(this.baseFontSize + var2);
  208.          } else {
  209.             int var3 = Integer.valueOf(var1);
  210.             return this.getPointSize(var3);
  211.          }
  212.       } else {
  213.          return 0.0F;
  214.       }
  215.    }
  216.  
  217.    float getLength(AttributeSet var1, Attribute var2) {
  218.       LengthValue var3 = (LengthValue)var1.getAttribute(var2);
  219.       float var4 = var3 != null ? var3.getValue() : 0.0F;
  220.       return var4;
  221.    }
  222.  
  223.    AttributeSet translateHTMLToCSS(AttributeSet var1) {
  224.       SimpleAttributeSet var2 = new SimpleAttributeSet();
  225.       Element var3 = (Element)var1;
  226.       HTML.Tag var4 = this.getHTMLTag(var1);
  227.       if (var4 == Tag.TD || var4 == Tag.TH) {
  228.          AttributeSet var5 = var3.getParentElement().getParentElement().getAttributes();
  229.          this.translateAttribute(javax.swing.text.html.HTML.Attribute.BORDER, var5, var2);
  230.          String var6 = (String)var5.getAttribute(javax.swing.text.html.HTML.Attribute.CELLPADDING);
  231.          if (var6 != null) {
  232.             Object var7 = this.getInternalCSSValue(javax.swing.text.html.CSS.Attribute.PADDING_TOP, var6);
  233.             var2.addAttribute(javax.swing.text.html.CSS.Attribute.PADDING_TOP, var7);
  234.             var2.addAttribute(javax.swing.text.html.CSS.Attribute.PADDING_BOTTOM, var7);
  235.             var2.addAttribute(javax.swing.text.html.CSS.Attribute.PADDING_LEFT, var7);
  236.             var2.addAttribute(javax.swing.text.html.CSS.Attribute.PADDING_RIGHT, var7);
  237.          }
  238.       }
  239.  
  240.       if (var3.isLeaf()) {
  241.          this.translateEmbeddedAttributes(var1, var2);
  242.       } else {
  243.          this.translateAttributes(var4, var1, var2);
  244.       }
  245.  
  246.       if (var4 == Tag.CAPTION) {
  247.          Object var8 = var1.getAttribute(javax.swing.text.html.HTML.Attribute.ALIGN);
  248.          if (var8 == null || !var8.equals("top") && !var8.equals("bottom")) {
  249.             var8 = var1.getAttribute(javax.swing.text.html.HTML.Attribute.VALIGN);
  250.             if (var8 != null) {
  251.                var2.addAttribute(javax.swing.text.html.CSS.Attribute.CAPTION_SIDE, var8);
  252.             }
  253.          } else {
  254.             var2.addAttribute(javax.swing.text.html.CSS.Attribute.CAPTION_SIDE, var8);
  255.             var2.removeAttribute(javax.swing.text.html.CSS.Attribute.TEXT_ALIGN);
  256.          }
  257.       }
  258.  
  259.       return var2;
  260.    }
  261.  
  262.    static Hashtable getValidFontNameMapping() {
  263.       if (fontMapping == null) {
  264.          Object var0 = fontMappingLock;
  265.          synchronized(var0) {
  266.             if (fontMapping == null) {
  267.                String[] var1 = null;
  268.  
  269.                try {
  270.                   Class var2 = Class.forName("java.awt.GraphicsEnvironment");
  271.                   if (var2 != null) {
  272.                      Method var3 = var2.getDeclaredMethod("getLocalGraphicsEnvironment", (Class[])null);
  273.                      if (var3 != null) {
  274.                         Object var4 = var3.invoke(var2, (Object[])null);
  275.                         if (var4 != null) {
  276.                            var3 = var2.getMethod("getAvailableFontFamilyNames", (Class[])null);
  277.                            if (var3 != null) {
  278.                               var1 = (String[])var3.invoke(var4, (Object[])null);
  279.                            }
  280.                         }
  281.                      }
  282.                   }
  283.                } catch (Throwable var6) {
  284.                }
  285.  
  286.                if (var1 == null) {
  287.                   var1 = Toolkit.getDefaultToolkit().getFontList();
  288.                }
  289.  
  290.                if (var1 != null) {
  291.                   fontMapping = new Hashtable(var1.length * 2);
  292.  
  293.                   for(int var8 = var1.length - 1; var8 >= 0; --var8) {
  294.                      fontMapping.put(var1[var8].toLowerCase(), var1[var8]);
  295.                      fontMapping.put(var1[var8], var1[var8]);
  296.                   }
  297.                } else {
  298.                   fontMapping = new Hashtable(1);
  299.                }
  300.             }
  301.          }
  302.       }
  303.  
  304.       return fontMapping;
  305.    }
  306.  
  307.    public static Attribute[] getAllAttributeKeys() {
  308.       Attribute[] var0 = new Attribute[javax.swing.text.html.CSS.Attribute.allAttributes.length];
  309.       System.arraycopy(javax.swing.text.html.CSS.Attribute.allAttributes, 0, var0, 0, javax.swing.text.html.CSS.Attribute.allAttributes.length);
  310.       return var0;
  311.    }
  312.  
  313.    public static final Attribute getAttribute(String var0) {
  314.       return (Attribute)attributeMap.get(var0);
  315.    }
  316.  
  317.    static final Value getValue(String var0) {
  318.       return (Value)valueMap.get(var0);
  319.    }
  320.  
  321.    static URL getURL(URL var0, String var1) {
  322.       if (var1 == null) {
  323.          return null;
  324.       } else {
  325.          if (var1.startsWith("url(") && var1.endsWith(")")) {
  326.             var1 = var1.substring(4, var1.length() - 1);
  327.          }
  328.  
  329.          try {
  330.             URL var2 = new URL(var1);
  331.             if (var2 != null) {
  332.                return var2;
  333.             }
  334.          } catch (MalformedURLException var3) {
  335.          }
  336.  
  337.          if (var0 != null) {
  338.             try {
  339.                URL var5 = new URL(var0, var1);
  340.                return var5;
  341.             } catch (MalformedURLException var4) {
  342.             }
  343.          }
  344.  
  345.          return null;
  346.       }
  347.    }
  348.  
  349.    static String colorToHex(Color var0) {
  350.       String var1 = new String("#");
  351.       String var2 = Integer.toHexString(var0.getRed());
  352.       if (var2.length() > 2) {
  353.          var2 = var2.substring(0, 2);
  354.       } else if (var2.length() < 2) {
  355.          var1 = var1 + "0" + var2;
  356.       } else {
  357.          var1 = var1 + var2;
  358.       }
  359.  
  360.       var2 = Integer.toHexString(var0.getGreen());
  361.       if (var2.length() > 2) {
  362.          var2 = var2.substring(0, 2);
  363.       } else if (var2.length() < 2) {
  364.          var1 = var1 + "0" + var2;
  365.       } else {
  366.          var1 = var1 + var2;
  367.       }
  368.  
  369.       var2 = Integer.toHexString(var0.getBlue());
  370.       if (var2.length() > 2) {
  371.          var2 = var2.substring(0, 2);
  372.       } else if (var2.length() < 2) {
  373.          var1 = var1 + "0" + var2;
  374.       } else {
  375.          var1 = var1 + var2;
  376.       }
  377.  
  378.       return var1;
  379.    }
  380.  
  381.    static final Color hexToColor(String var0) {
  382.       int var2 = var0.length();
  383.       String var1;
  384.       if (var0.startsWith("#")) {
  385.          var1 = var0.substring(1, Math.min(var0.length(), 7));
  386.       } else {
  387.          var1 = var0;
  388.       }
  389.  
  390.       String var3 = "0x" + var1;
  391.  
  392.       Color var4;
  393.       try {
  394.          var4 = Color.decode(var3);
  395.       } catch (NumberFormatException var6) {
  396.          var4 = null;
  397.       }
  398.  
  399.       return var4;
  400.    }
  401.  
  402.    static Color stringToColor(String var0) {
  403.       Object var1 = null;
  404.       Color var2;
  405.       if (var0.charAt(0) == '#') {
  406.          var2 = hexToColor(var0);
  407.       } else if (var0.equalsIgnoreCase("Black")) {
  408.          var2 = hexToColor("#000000");
  409.       } else if (var0.equalsIgnoreCase("Silver")) {
  410.          var2 = hexToColor("#C0C0C0");
  411.       } else if (var0.equalsIgnoreCase("Gray")) {
  412.          var2 = hexToColor("#808080");
  413.       } else if (var0.equalsIgnoreCase("White")) {
  414.          var2 = hexToColor("#FFFFFF");
  415.       } else if (var0.equalsIgnoreCase("Maroon")) {
  416.          var2 = hexToColor("#800000");
  417.       } else if (var0.equalsIgnoreCase("Red")) {
  418.          var2 = hexToColor("#FF0000");
  419.       } else if (var0.equalsIgnoreCase("Purple")) {
  420.          var2 = hexToColor("#800080");
  421.       } else if (var0.equalsIgnoreCase("Fuchsia")) {
  422.          var2 = hexToColor("#FF00FF");
  423.       } else if (var0.equalsIgnoreCase("Green")) {
  424.          var2 = hexToColor("#008000");
  425.       } else if (var0.equalsIgnoreCase("Lime")) {
  426.          var2 = hexToColor("#00FF00");
  427.       } else if (var0.equalsIgnoreCase("Olive")) {
  428.          var2 = hexToColor("#808000");
  429.       } else if (var0.equalsIgnoreCase("Yellow")) {
  430.          var2 = hexToColor("#FFFF00");
  431.       } else if (var0.equalsIgnoreCase("Navy")) {
  432.          var2 = hexToColor("#000080");
  433.       } else if (var0.equalsIgnoreCase("Blue")) {
  434.          var2 = hexToColor("#0000FF");
  435.       } else if (var0.equalsIgnoreCase("Teal")) {
  436.          var2 = hexToColor("#008080");
  437.       } else if (var0.equalsIgnoreCase("Aqua")) {
  438.          var2 = hexToColor("#00FFFF");
  439.       } else {
  440.          var2 = hexToColor(var0);
  441.       }
  442.  
  443.       return var2;
  444.    }
  445.  
  446.    static int getIndexOfSize(float var0) {
  447.       for(int var1 = 0; var1 < sizeMap.length; ++var1) {
  448.          if (var0 <= (float)sizeMap[var1]) {
  449.             return var1;
  450.          }
  451.       }
  452.  
  453.       return sizeMap.length - 1;
  454.    }
  455.  
  456.    static String[] parseStrings(String var0) {
  457.       int var3 = var0 == null ? 0 : var0.length();
  458.       Vector var4 = new Vector(4);
  459.  
  460.       for(int var1 = 0; var1 < var3; ++var1) {
  461.          while(var1 < var3 && Character.isWhitespace(var0.charAt(var1))) {
  462.             ++var1;
  463.          }
  464.  
  465.          int var2;
  466.          for(var2 = var1; var1 < var3 && !Character.isWhitespace(var0.charAt(var1)); ++var1) {
  467.          }
  468.  
  469.          if (var2 != var1) {
  470.             var4.addElement(var0.substring(var2, var1));
  471.          }
  472.       }
  473.  
  474.       String[] var5 = new String[var4.size()];
  475.       var4.copyInto(var5);
  476.       return var5;
  477.    }
  478.  
  479.    float getPointSize(int var1) {
  480.       if (var1 < 0) {
  481.          return (float)sizeMap[0];
  482.       } else {
  483.          return var1 > sizeMap.length - 1 ? (float)sizeMap[sizeMap.length - 1] : (float)sizeMap[var1];
  484.       }
  485.    }
  486.  
  487.    private void translateEmbeddedAttributes(AttributeSet var1, MutableAttributeSet var2) {
  488.       Enumeration var3 = var1.getAttributeNames();
  489.       if (var1.getAttribute(StyleConstants.NameAttribute) == Tag.HR) {
  490.          this.translateAttributes(Tag.HR, var1, var2);
  491.       }
  492.  
  493.       while(var3.hasMoreElements()) {
  494.          Object var4 = var3.nextElement();
  495.          if (var4 instanceof HTML.Tag) {
  496.             HTML.Tag var5 = (HTML.Tag)var4;
  497.             Object var6 = var1.getAttribute(var5);
  498.             if (var6 != null && var6 instanceof AttributeSet) {
  499.                this.translateAttributes(var5, (AttributeSet)var6, var2);
  500.             }
  501.          } else if (var4 instanceof Attribute) {
  502.             var2.addAttribute(var4, var1.getAttribute(var4));
  503.          }
  504.       }
  505.  
  506.    }
  507.  
  508.    private void translateAttributes(HTML.Tag var1, AttributeSet var2, MutableAttributeSet var3) {
  509.       Enumeration var4 = var2.getAttributeNames();
  510.  
  511.       while(var4.hasMoreElements()) {
  512.          Object var5 = var4.nextElement();
  513.          if (var5 instanceof HTML.Attribute) {
  514.             HTML.Attribute var6 = (HTML.Attribute)var5;
  515.             if (var6 == javax.swing.text.html.HTML.Attribute.ALIGN) {
  516.                String var7 = (String)var2.getAttribute(javax.swing.text.html.HTML.Attribute.ALIGN);
  517.                if (var7 != null) {
  518.                   Attribute var8 = this.getCssAlignAttribute(var1, var2);
  519.                   if (var8 != null) {
  520.                      Object var9 = this.getCssValue(var8, var7);
  521.                      if (var9 != null) {
  522.                         var3.addAttribute(var8, var9);
  523.                      }
  524.                   }
  525.                }
  526.             } else if (var6 != javax.swing.text.html.HTML.Attribute.SIZE || this.isHTMLFontTag(var1)) {
  527.                this.translateAttribute(var6, var2, var3);
  528.             }
  529.          } else if (var5 instanceof Attribute) {
  530.             var3.addAttribute(var5, var2.getAttribute(var5));
  531.          }
  532.       }
  533.  
  534.    }
  535.  
  536.    private void translateAttribute(HTML.Attribute var1, AttributeSet var2, MutableAttributeSet var3) {
  537.       Attribute[] var4 = this.getCssAttribute(var1);
  538.       String var5 = (String)var2.getAttribute(var1);
  539.       if (var4 != null && var5 != null) {
  540.          for(int var6 = 0; var6 < var4.length; ++var6) {
  541.             Object var7 = this.getCssValue(var4[var6], var5);
  542.             if (var7 != null) {
  543.                var3.addAttribute(var4[var6], var7);
  544.             }
  545.          }
  546.  
  547.       }
  548.    }
  549.  
  550.    Object getCssValue(Attribute var1, String var2) {
  551.       CssValue var3 = (CssValue)this.valueConvertor.get(var1);
  552.       Object var4 = var3.parseHtmlValue(var2);
  553.       return var4;
  554.    }
  555.  
  556.    private Attribute[] getCssAttribute(HTML.Attribute var1) {
  557.       return (Attribute[])htmlAttrToCssAttrMap.get(var1);
  558.    }
  559.  
  560.    private Attribute getCssAlignAttribute(HTML.Tag var1, AttributeSet var2) {
  561.       return javax.swing.text.html.CSS.Attribute.TEXT_ALIGN;
  562.    }
  563.  
  564.    private HTML.Tag getHTMLTag(AttributeSet var1) {
  565.       Object var2 = var1.getAttribute(StyleConstants.NameAttribute);
  566.       if (var2 instanceof HTML.Tag) {
  567.          HTML.Tag var3 = (HTML.Tag)var2;
  568.          return var3;
  569.       } else {
  570.          return null;
  571.       }
  572.    }
  573.  
  574.    private boolean isHTMLFontTag(HTML.Tag var1) {
  575.       return var1 != null && (var1 == Tag.FONT || var1 == Tag.BASEFONT);
  576.    }
  577.  
  578.    private boolean isFloater(String var1) {
  579.       return var1.equals("left") || var1.equals("right");
  580.    }
  581.  
  582.    private boolean validTextAlignValue(String var1) {
  583.       return this.isFloater(var1) || var1.equals("center");
  584.    }
  585.  
  586.    static SizeRequirements calculateTiledRequirements(LayoutIterator var0, SizeRequirements var1) {
  587.       long var2 = 0L;
  588.       long var4 = 0L;
  589.       long var6 = 0L;
  590.       int var8 = 0;
  591.       int var9 = 0;
  592.       int var10 = var0.getCount();
  593.  
  594.       for(int var11 = 0; var11 < var10; ++var11) {
  595.          var0.setIndex(var11);
  596.          int var13 = (int)var0.getLeadingCollapseSpan();
  597.          int var14 = Math.max(var8, var13);
  598.          if (var14 != 0) {
  599.             var9 += var14 - var8;
  600.          }
  601.  
  602.          var6 += (long)((int)var0.getPreferredSpan(0.0F));
  603.          var2 = (long)((float)var2 + var0.getMinimumSpan(0.0F));
  604.          var4 = (long)((float)var4 + var0.getMaximumSpan(0.0F));
  605.          var8 = (int)var0.getTrailingCollapseSpan();
  606.       }
  607.  
  608.       var2 -= (long)var9;
  609.       var6 -= (long)var9;
  610.       var4 -= (long)var9;
  611.       if (var1 == null) {
  612.          var1 = new SizeRequirements();
  613.       }
  614.  
  615.       var1.minimum = var2 > 2147483647L ? Integer.MAX_VALUE : (int)var2;
  616.       var1.preferred = var6 > 2147483647L ? Integer.MAX_VALUE : (int)var6;
  617.       var1.maximum = var4 > 2147483647L ? Integer.MAX_VALUE : (int)var4;
  618.       return var1;
  619.    }
  620.  
  621.    static void calculateTiledLayout(LayoutIterator var0, int var1) {
  622.       long var2 = 0L;
  623.       long var4 = 0L;
  624.       long var6 = 0L;
  625.       int var8 = 0;
  626.       int var9 = 0;
  627.       int var10 = var0.getCount();
  628.  
  629.       for(int var11 = 0; var11 < var10; ++var11) {
  630.          var0.setIndex(var11);
  631.          int var13 = (int)var0.getLeadingCollapseSpan();
  632.          var0.setOffset(Math.max(var8, var13));
  633.          if (var0.getOffset() != 0) {
  634.             var0.setOffset(var0.getOffset() - var8);
  635.             var9 += var0.getOffset();
  636.          }
  637.  
  638.          var0.setSpan((int)var0.getPreferredSpan((float)var1));
  639.          var6 += (long)var0.getSpan();
  640.          var2 = (long)((float)var2 + var0.getMinimumSpan((float)var1));
  641.          var4 = (long)((float)var4 + var0.getMaximumSpan((float)var1));
  642.          var8 = (int)var0.getTrailingCollapseSpan();
  643.       }
  644.  
  645.       int var12 = var1 - var9;
  646.       long var20 = (long)var12 - var6;
  647.       float var15 = 0.0F;
  648.       if (var20 != 0L) {
  649.          float var16 = var20 > 0L ? (float)(var4 - var6) : (float)(var6 - var2);
  650.          var15 = (float)var20 / var16;
  651.          var15 = Math.min(var15, 1.0F);
  652.          var15 = Math.max(var15, -1.0F);
  653.       }
  654.  
  655.       int var23 = 0;
  656.  
  657.       for(int var17 = 0; var17 < var10; ++var17) {
  658.          var0.setIndex(var17);
  659.          var0.setOffset(var0.getOffset() + var23);
  660.          int var18 = var15 > 0.0F ? (int)var0.getMaximumSpan((float)var1) - var0.getSpan() : var0.getSpan() - (int)var0.getMinimumSpan((float)var1);
  661.          int var19 = (int)(var15 * (float)var18 + 0.5F);
  662.          var0.setSpan(var0.getSpan() + var19);
  663.          var23 = (int)Math.min((long)var23 + (long)var0.getSpan(), 2147483647L);
  664.       }
  665.  
  666.    }
  667.  
  668.    private void writeObject(ObjectOutputStream var1) throws IOException {
  669.       var1.defaultWriteObject();
  670.       Enumeration var2 = this.valueConvertor.keys();
  671.       var1.writeInt(this.valueConvertor.size());
  672.       if (var2 != null) {
  673.          while(var2.hasMoreElements()) {
  674.             Object var3 = var2.nextElement();
  675.             Object var4 = this.valueConvertor.get(var3);
  676.             if (!(var3 instanceof Serializable) && (var3 = StyleContext.getStaticAttributeKey(var3)) == null) {
  677.                var3 = null;
  678.                var4 = null;
  679.             } else if (!(var4 instanceof Serializable) && (var4 = StyleContext.getStaticAttributeKey(var4)) == null) {
  680.                var3 = null;
  681.                var4 = null;
  682.             }
  683.  
  684.             var1.writeObject(var3);
  685.             var1.writeObject(var4);
  686.          }
  687.       }
  688.  
  689.    }
  690.  
  691.    private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException {
  692.       var1.defaultReadObject();
  693.       int var2 = var1.readInt();
  694.       this.valueConvertor = new Hashtable(Math.max(1, var2));
  695.  
  696.       while(var2-- > 0) {
  697.          Object var3 = var1.readObject();
  698.          Object var4 = var1.readObject();
  699.          Object var5 = StyleContext.getStaticAttribute(var3);
  700.          if (var5 != null) {
  701.             var3 = var5;
  702.          }
  703.  
  704.          Object var6 = StyleContext.getStaticAttribute(var4);
  705.          if (var6 != null) {
  706.             var4 = var6;
  707.          }
  708.  
  709.          if (var3 != null && var4 != null) {
  710.             this.valueConvertor.put(var3, var4);
  711.          }
  712.       }
  713.  
  714.    }
  715.  
  716.    // $FF: synthetic method
  717.    static Hashtable access$300() {
  718.       return cssValueToInternalValueMap;
  719.    }
  720.  
  721.    // $FF: synthetic method
  722.    static Hashtable access$400() {
  723.       return htmlValueToCssValueMap;
  724.    }
  725.  
  726.    static {
  727.       for(int var0 = 0; var0 < javax.swing.text.html.CSS.Attribute.allAttributes.length; ++var0) {
  728.          attributeMap.put(javax.swing.text.html.CSS.Attribute.allAttributes[var0].toString(), javax.swing.text.html.CSS.Attribute.allAttributes[var0]);
  729.       }
  730.  
  731.       for(int var1 = 0; var1 < javax.swing.text.html.CSS.Value.allValues.length; ++var1) {
  732.          valueMap.put(javax.swing.text.html.CSS.Value.allValues[var1].toString(), javax.swing.text.html.CSS.Value.allValues[var1]);
  733.       }
  734.  
  735.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.COLOR, new Attribute[]{javax.swing.text.html.CSS.Attribute.COLOR});
  736.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.TEXT, new Attribute[]{javax.swing.text.html.CSS.Attribute.COLOR});
  737.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.CLEAR, new Attribute[]{javax.swing.text.html.CSS.Attribute.CLEAR});
  738.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.BACKGROUND, new Attribute[]{javax.swing.text.html.CSS.Attribute.BACKGROUND_IMAGE});
  739.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.BGCOLOR, new Attribute[]{javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR});
  740.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.WIDTH, new Attribute[]{javax.swing.text.html.CSS.Attribute.WIDTH});
  741.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.HEIGHT, new Attribute[]{javax.swing.text.html.CSS.Attribute.HEIGHT});
  742.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.BORDER, new Attribute[]{javax.swing.text.html.CSS.Attribute.BORDER_TOP_WIDTH, javax.swing.text.html.CSS.Attribute.BORDER_RIGHT_WIDTH, javax.swing.text.html.CSS.Attribute.BORDER_BOTTOM_WIDTH, javax.swing.text.html.CSS.Attribute.BORDER_LEFT_WIDTH});
  743.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.CELLPADDING, new Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING});
  744.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.CELLSPACING, new Attribute[]{javax.swing.text.html.CSS.Attribute.BORDER_SPACING});
  745.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.MARGINWIDTH, new Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN_LEFT, javax.swing.text.html.CSS.Attribute.MARGIN_RIGHT});
  746.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.MARGINHEIGHT, new Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN_TOP, javax.swing.text.html.CSS.Attribute.MARGIN_BOTTOM});
  747.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.HSPACE, new Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING_LEFT, javax.swing.text.html.CSS.Attribute.PADDING_RIGHT});
  748.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.VSPACE, new Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING_BOTTOM, javax.swing.text.html.CSS.Attribute.PADDING_TOP});
  749.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.FACE, new Attribute[]{javax.swing.text.html.CSS.Attribute.FONT_FAMILY});
  750.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.SIZE, new Attribute[]{javax.swing.text.html.CSS.Attribute.FONT_SIZE});
  751.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.VALIGN, new Attribute[]{javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN});
  752.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.ALIGN, new Attribute[]{javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN, javax.swing.text.html.CSS.Attribute.TEXT_ALIGN, javax.swing.text.html.CSS.Attribute.FLOAT});
  753.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.TYPE, new Attribute[]{javax.swing.text.html.CSS.Attribute.LIST_STYLE_TYPE});
  754.       htmlAttrToCssAttrMap.put(javax.swing.text.html.HTML.Attribute.NOWRAP, new Attribute[]{javax.swing.text.html.CSS.Attribute.WHITE_SPACE});
  755.       styleConstantToCssMap.put(StyleConstants.FontFamily, javax.swing.text.html.CSS.Attribute.FONT_FAMILY);
  756.       styleConstantToCssMap.put(StyleConstants.FontSize, javax.swing.text.html.CSS.Attribute.FONT_SIZE);
  757.       styleConstantToCssMap.put(StyleConstants.Bold, javax.swing.text.html.CSS.Attribute.FONT_WEIGHT);
  758.       styleConstantToCssMap.put(StyleConstants.Italic, javax.swing.text.html.CSS.Attribute.FONT_STYLE);
  759.       styleConstantToCssMap.put(StyleConstants.Underline, javax.swing.text.html.CSS.Attribute.TEXT_DECORATION);
  760.       styleConstantToCssMap.put(StyleConstants.StrikeThrough, javax.swing.text.html.CSS.Attribute.TEXT_DECORATION);
  761.       styleConstantToCssMap.put(StyleConstants.Superscript, javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN);
  762.       styleConstantToCssMap.put(StyleConstants.Subscript, javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN);
  763.       styleConstantToCssMap.put(StyleConstants.Foreground, javax.swing.text.html.CSS.Attribute.COLOR);
  764.       styleConstantToCssMap.put(StyleConstants.Background, javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR);
  765.       styleConstantToCssMap.put(StyleConstants.FirstLineIndent, javax.swing.text.html.CSS.Attribute.TEXT_INDENT);
  766.       styleConstantToCssMap.put(StyleConstants.LeftIndent, javax.swing.text.html.CSS.Attribute.MARGIN_LEFT);
  767.       styleConstantToCssMap.put(StyleConstants.RightIndent, javax.swing.text.html.CSS.Attribute.MARGIN_RIGHT);
  768.       styleConstantToCssMap.put(StyleConstants.SpaceAbove, javax.swing.text.html.CSS.Attribute.MARGIN_TOP);
  769.       styleConstantToCssMap.put(StyleConstants.SpaceBelow, javax.swing.text.html.CSS.Attribute.MARGIN_BOTTOM);
  770.       styleConstantToCssMap.put(StyleConstants.Alignment, javax.swing.text.html.CSS.Attribute.TEXT_ALIGN);
  771.       htmlValueToCssValueMap.put("disc", javax.swing.text.html.CSS.Value.DISC);
  772.       htmlValueToCssValueMap.put("square", javax.swing.text.html.CSS.Value.SQUARE);
  773.       htmlValueToCssValueMap.put("circle", javax.swing.text.html.CSS.Value.CIRCLE);
  774.       htmlValueToCssValueMap.put("1", javax.swing.text.html.CSS.Value.DECIMAL);
  775.       htmlValueToCssValueMap.put("a", javax.swing.text.html.CSS.Value.LOWER_ALPHA);
  776.       htmlValueToCssValueMap.put("A", javax.swing.text.html.CSS.Value.UPPER_ALPHA);
  777.       htmlValueToCssValueMap.put("i", javax.swing.text.html.CSS.Value.LOWER_ROMAN);
  778.       htmlValueToCssValueMap.put("I", javax.swing.text.html.CSS.Value.UPPER_ROMAN);
  779.       cssValueToInternalValueMap.put("disc", javax.swing.text.html.CSS.Value.DISC);
  780.       cssValueToInternalValueMap.put("square", javax.swing.text.html.CSS.Value.SQUARE);
  781.       cssValueToInternalValueMap.put("circle", javax.swing.text.html.CSS.Value.CIRCLE);
  782.       cssValueToInternalValueMap.put("decimal", javax.swing.text.html.CSS.Value.DECIMAL);
  783.       cssValueToInternalValueMap.put("lower-roman", javax.swing.text.html.CSS.Value.LOWER_ROMAN);
  784.       cssValueToInternalValueMap.put("upper-roman", javax.swing.text.html.CSS.Value.UPPER_ROMAN);
  785.       cssValueToInternalValueMap.put("lower-alpha", javax.swing.text.html.CSS.Value.LOWER_ALPHA);
  786.       cssValueToInternalValueMap.put("upper-alpha", javax.swing.text.html.CSS.Value.UPPER_ALPHA);
  787.       cssValueToInternalValueMap.put("repeat", javax.swing.text.html.CSS.Value.BACKGROUND_REPEAT);
  788.       cssValueToInternalValueMap.put("no-repeat", javax.swing.text.html.CSS.Value.BACKGROUND_NO_REPEAT);
  789.       cssValueToInternalValueMap.put("repeat-x", javax.swing.text.html.CSS.Value.BACKGROUND_REPEAT_X);
  790.       cssValueToInternalValueMap.put("repeat-y", javax.swing.text.html.CSS.Value.BACKGROUND_REPEAT_Y);
  791.       cssValueToInternalValueMap.put("scroll", javax.swing.text.html.CSS.Value.BACKGROUND_SCROLL);
  792.       cssValueToInternalValueMap.put("fixed", javax.swing.text.html.CSS.Value.BACKGROUND_FIXED);
  793.       Attribute[] var2 = javax.swing.text.html.CSS.Attribute.allAttributes;
  794.  
  795.       try {
  796.          for(int var3 = 0; var3 < var2.length; ++var3) {
  797.             StyleContext.registerStaticAttributeKey(var2[var3]);
  798.          }
  799.       } catch (Throwable var5) {
  800.          var5.printStackTrace();
  801.       }
  802.  
  803.       Value[] var6 = javax.swing.text.html.CSS.Value.allValues;
  804.  
  805.       try {
  806.          for(int var7 = 0; var7 < var6.length; ++var7) {
  807.             StyleContext.registerStaticAttributeKey(var6[var7]);
  808.          }
  809.       } catch (Throwable var4) {
  810.          var4.printStackTrace();
  811.       }
  812.  
  813.    }
  814. }
  815.