home *** CD-ROM | disk | FTP | other *** search
Wrap
package javax.swing.text.html; import java.awt.Color; import java.awt.Font; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Reader; import java.io.Serializable; import java.net.URL; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.text.AttributeSet; import javax.swing.text.Element; import javax.swing.text.MutableAttributeSet; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.View; import javax.swing.text.html.HTML.Attribute; import javax.swing.text.html.HTML.Tag; public class StyleSheet extends StyleContext { static final Border noBorder = new EmptyBorder(0, 0, 0, 0); static final int DEFAULT_FONT_SIZE = 3; private Style selectors = ((StyleContext)this).addStyle((String)null, (Style)null); private CssParser parser; private transient Hashtable valueConvertor; private transient Vector searchContext; private int baseFontIndex; private int baseFontSize; static int[] sizeMap = new int[]{8, 10, 12, 14, 18, 24, 36}; static final SheetAttribute RULE = new SheetAttribute("rule", false); static final SheetAttribute WEIGHT = new SheetAttribute("rule-weight", false); static final SheetAttribute BOX_PAINTER = new SheetAttribute("box-painter", true); static final SheetAttribute LIST_PAINTER = new SheetAttribute("list-painter", true); private static final Hashtable htmlAttrToCssAttrMap = new Hashtable(20); static { htmlAttrToCssAttrMap.put(Attribute.COLOR, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.COLOR}); htmlAttrToCssAttrMap.put(Attribute.TEXT, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.COLOR}); htmlAttrToCssAttrMap.put(Attribute.CLEAR, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.CLEAR}); htmlAttrToCssAttrMap.put(Attribute.BACKGROUND, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.BACKGROUND_IMAGE}); htmlAttrToCssAttrMap.put(Attribute.BGCOLOR, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR}); htmlAttrToCssAttrMap.put(Attribute.WIDTH, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.WIDTH}); htmlAttrToCssAttrMap.put(Attribute.HEIGHT, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.HEIGHT}); htmlAttrToCssAttrMap.put(Attribute.BORDER, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.BORDER_WIDTH}); htmlAttrToCssAttrMap.put(Attribute.CELLPADDING, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING}); htmlAttrToCssAttrMap.put(Attribute.CELLSPACING, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN}); htmlAttrToCssAttrMap.put(Attribute.MARGINWIDTH, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN_LEFT, javax.swing.text.html.CSS.Attribute.MARGIN_RIGHT}); htmlAttrToCssAttrMap.put(Attribute.MARGINHEIGHT, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.MARGIN_TOP, javax.swing.text.html.CSS.Attribute.MARGIN_BOTTOM}); htmlAttrToCssAttrMap.put(Attribute.HSPACE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING_LEFT, javax.swing.text.html.CSS.Attribute.PADDING_RIGHT}); htmlAttrToCssAttrMap.put(Attribute.VSPACE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.PADDING_BOTTOM, javax.swing.text.html.CSS.Attribute.PADDING_TOP}); htmlAttrToCssAttrMap.put(Attribute.FACE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.FONT_FAMILY}); htmlAttrToCssAttrMap.put(Attribute.SIZE, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.FONT_SIZE}); htmlAttrToCssAttrMap.put(Attribute.VALIGN, new CSS.Attribute[]{javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN}); 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}); CSS.Attribute[] var0 = javax.swing.text.html.CSS.Attribute.allAttributes; try { for(int var1 = 0; var1 < var0.length; ++var1) { StyleContext.registerStaticAttributeKey(var0[var1]); } } catch (Throwable var2) { var2.printStackTrace(); } StyleContext.registerStaticAttributeKey(RULE); StyleContext.registerStaticAttributeKey(WEIGHT); StyleContext.registerStaticAttributeKey(BOX_PAINTER); StyleContext.registerStaticAttributeKey(LIST_PAINTER); } public StyleSheet() { this.selectors.addAttribute(StyleConstants.NameAttribute, ":"); this.searchContext = new Vector(); this.valueConvertor = new Hashtable(); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_SIZE, new FontSize(this)); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_FAMILY, new FontFamily(this)); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.FONT_WEIGHT, new FontWeight(this)); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_STYLE, new BorderStyle(this)); ColorValue var1 = new ColorValue(this); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.COLOR, var1); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR, var1); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_COLOR, var1); LengthValue var2 = new LengthValue(this); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_TOP, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_BOTTOM, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_LEFT, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.MARGIN_RIGHT, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_TOP, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_BOTTOM, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_LEFT, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.PADDING_RIGHT, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_WIDTH, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_TOP_WIDTH, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_BOTTOM_WIDTH, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_LEFT_WIDTH, var2); this.valueConvertor.put(javax.swing.text.html.CSS.Attribute.BORDER_RIGHT_WIDTH, var2); CssValue var3 = new CssValue(this); int var4 = javax.swing.text.html.CSS.Attribute.allAttributes.length; for(int var5 = 0; var5 < var4; ++var5) { CSS.Attribute var6 = javax.swing.text.html.CSS.Attribute.allAttributes[var5]; if (this.valueConvertor.get(var6) == null) { this.valueConvertor.put(var6, var3); } } this.baseFontSize = 3; } // $FF: synthetic method static int access$0(StyleSheet var0) { return var0.baseFontSize; } // $FF: synthetic method static Hashtable access$1(StyleSheet var0) { return var0.valueConvertor; } public void addRule(String var1) { } void addRule(String[] var1, AttributeSet var2) { String var3 = ""; int var4 = var1.length - 1; for(int var5 = 0; var5 < var4; ++var5) { var3 = var3 + var1[var5] + " "; } var3 = var3 + var1[var4]; Style var6 = ((StyleContext)this).getStyle(var3); if (var6 == null) { var6 = ((StyleContext)this).addStyle(var3, (Style)null); Style var7 = this.selectors; for(int var8 = 0; var8 <= var4; ++var8) { var7 = this.addSelector(var7, var1[var8]); } var7.addAttribute(RULE, var6); } var6.addAttributes(var2); } Style addSelector(Style var1, String var2) { HTML.Tag var3 = HTML.getTag(var2); if (var3 != null) { Style var6; if (!var1.isDefined(var3)) { var6 = ((StyleContext)this).addStyle((String)null, var1); String var5 = String.valueOf(var1.getAttribute(StyleConstants.NameAttribute)) + var2 + ":"; var6.addAttribute(StyleConstants.NameAttribute, var5); var1.addAttribute(var3, var6); } else { var6 = (Style)var1.getAttribute(var3); } return var6; } else { Style var4; if (!var1.isDefined(var2)) { var4 = ((StyleContext)this).addStyle((String)null, var1); var1.addAttribute(var2, var4); } else { var4 = (Style)var1.getAttribute(var2); } return var4; } } static String colorToHex(Color var0) { String var1 = new String("#"); String var2 = Integer.toHexString(var0.getRed()); if (var2.length() > 2) { var2 = var2.substring(0, 2); } else if (var2.length() < 2) { var1 = var1 + "0" + var2; } else { var1 = var1 + var2; } var2 = Integer.toHexString(var0.getGreen()); if (var2.length() > 2) { var2 = var2.substring(0, 2); } else if (var2.length() < 2) { var1 = var1 + "0" + var2; } else { var1 = var1 + var2; } var2 = Integer.toHexString(var0.getBlue()); if (var2.length() > 2) { var2 = var2.substring(0, 2); } else if (var2.length() < 2) { var1 = var1 + "0" + var2; } else { var1 = var1 + var2; } return var1; } public Color getBackground(AttributeSet var1) { ColorValue var2 = (ColorValue)var1.getAttribute(javax.swing.text.html.CSS.Attribute.BACKGROUND_COLOR); Color var3 = var2 != null ? var2.getValue() : null; return var3; } public BoxPainter getBoxPainter(AttributeSet var1) { return new BoxPainter(var1); } private CSS.Attribute getCssAlignAttribute(HTML.Tag var1, AttributeSet var2) { return javax.swing.text.html.CSS.Attribute.TEXT_ALIGN; } private CSS.Attribute[] getCssAttribute(HTML.Attribute var1) { return (CSS.Attribute[])htmlAttrToCssAttrMap.get(var1); } private Object getCssValue(CSS.Attribute var1, String var2) { CssValue var3 = (CssValue)this.valueConvertor.get(var1); Object var4 = var3.parseHtmlValue(var2); return var4; } public AttributeSet getDeclaration(String var1) { return null; } public Font getFont(AttributeSet var1) { FontSize var2 = (FontSize)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_SIZE); int var3 = var2 != null ? (int)var2.getValue(var1) : 12; String var4 = (String)var1.getAttribute(javax.swing.text.html.CSS.Attribute.VERTICAL_ALIGN); if (var4 != null && (var4.indexOf("sup") >= 0 || var4.indexOf("sub") >= 0)) { var3 -= 2; } FontFamily var5 = (FontFamily)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_FAMILY); String var6 = var5 != null ? var5.getValue() : "SansSerif"; int var7 = 0; FontWeight var8 = (FontWeight)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_WEIGHT); if (var8 != null && var8.getValue() > 400) { var7 |= 1; } String var9 = (String)var1.getAttribute(javax.swing.text.html.CSS.Attribute.FONT_STYLE); if (var9 != null && var9.equals("italic")) { var7 |= 2; } Font var10 = super.getFont(var6, var7, var3); return var10; } public Color getForeground(AttributeSet var1) { ColorValue var2 = (ColorValue)var1.getAttribute(javax.swing.text.html.CSS.Attribute.COLOR); Color var3 = var2 != null ? var2.getValue() : Color.black; return var3; } private HTML.Tag getHTMLTag(AttributeSet var1) { Object var2 = var1.getAttribute(StyleConstants.NameAttribute); if (var2 instanceof HTML.Tag) { HTML.Tag var3 = (HTML.Tag)var2; return var3; } else { return null; } } public static int getIndexOfSize(float var0) { for(int var1 = 0; var1 < sizeMap.length; ++var1) { if (var0 <= (float)sizeMap[var1]) { return var1; } } return sizeMap.length - 1; } public ListPainter getListPainter(AttributeSet var1) { return new ListPainter(var1); } public float getPointSize(int var1) { if (var1 < 0) { return (float)sizeMap[0]; } else { return var1 > sizeMap.length - 1 ? (float)sizeMap[sizeMap.length - 1] : (float)sizeMap[var1]; } } public float getPointSize(String var1) { if (var1 != null) { if (var1.startsWith("+")) { int var4 = Integer.valueOf(var1.substring(1)); return this.getPointSize(this.baseFontSize + var4); } else if (var1.startsWith("-")) { int var2 = -Integer.valueOf(var1.substring(1)); return this.getPointSize(this.baseFontSize + var2); } else { int var3 = Integer.valueOf(var1); return this.getPointSize(var3); } } else { return 0.0F; } } public Style getRule(String var1) { return null; } public Style getRule(HTML.Tag var1, Element var2) { this.searchContext.removeAllElements(); for(Element var3 = var2.getParentElement(); var3 != null; var3 = var3.getParentElement()) { AttributeSet var4 = var3.getAttributes(); this.searchContext.addElement(var4.getAttribute(StyleConstants.NameAttribute)); } Style var8 = this.selectors; int var5 = this.searchContext.size(); for(int var6 = this.searchContext.size() - 1; var6 >= 0; --var6) { Style var7 = (Style)var8.getAttribute(this.searchContext.elementAt(var6)); if (var7 != null) { var8 = var7; } } Style var9 = (Style)var8.getAttribute(var1); if (var9 != null) { return (Style)var9.getAttribute(RULE); } else { return null; } } public AttributeSet getViewAttributes(View var1) { return new ViewAttributeSet(var1); } static final Color hexToColor(String var0) { if (var0.startsWith("#")) { String var1 = var0.substring(1, Math.min(var0.length(), 7)); String var2 = "0x" + var1; Color var3 = Color.decode(var2); return var3; } else { return null; } } private boolean isFloater(String var1) { return var1.equals("left") || var1.equals("right"); } private boolean isHTMLFontTag(HTML.Tag var1) { return var1 != null && (var1 == Tag.FONT || var1 == Tag.BASEFONT); } public void loadRules(Reader var1, URL var2) throws IOException { if (this.parser == null) { this.parser = new CssParser(this); } this.parser.parse(var1); } private void readObject(ObjectInputStream var1) throws ClassNotFoundException, IOException { var1.defaultReadObject(); this.searchContext = new Vector(); int var2 = var1.readInt(); this.valueConvertor = new Hashtable(Math.max(1, var2)); while(var2-- > 0) { Object var3 = var1.readObject(); Object var4 = var1.readObject(); Object var5 = StyleContext.getStaticAttribute(var3); if (var5 != null) { var3 = var5; } Object var6 = StyleContext.getStaticAttribute(var4); if (var6 != null) { var4 = var6; } if (var3 != null && var4 != null) { this.valueConvertor.put(var3, var4); } } } public void setBaseFontSize(int var1) { if (var1 < 1) { this.baseFontSize = 0; } else if (var1 > 7) { this.baseFontSize = 7; } else { this.baseFontSize = var1; } } public void setBaseFontSize(String var1) { if (var1 != null) { if (var1.startsWith("+")) { int var2 = Integer.valueOf(var1.substring(1)); this.setBaseFontSize(this.baseFontSize + var2); } else if (var1.startsWith("-")) { int var3 = -Integer.valueOf(var1.substring(1)); this.setBaseFontSize(this.baseFontSize + var3); } else { this.setBaseFontSize(Integer.valueOf(var1)); } } } public Color stringToColor(String var1) { Color var2 = null; if (var1.charAt(0) == '#') { var2 = hexToColor(var1); } else if (var1.equalsIgnoreCase("Black")) { var2 = hexToColor("#000000"); } else if (var1.equalsIgnoreCase("Silver")) { var2 = hexToColor("#C0C0C0"); } else if (var1.equalsIgnoreCase("Gray")) { var2 = hexToColor("#808080"); } else if (var1.equalsIgnoreCase("White")) { var2 = hexToColor("#FFFFFF"); } else if (var1.equalsIgnoreCase("Maroon")) { var2 = hexToColor("#800000"); } else if (var1.equalsIgnoreCase("Red")) { var2 = hexToColor("#FF0000"); } else if (var1.equalsIgnoreCase("Purple")) { var2 = hexToColor("#800080"); } else if (var1.equalsIgnoreCase("Fuchsia")) { var2 = hexToColor("#FF00FF"); } else if (var1.equalsIgnoreCase("Green")) { var2 = hexToColor("#008000"); } else if (var1.equalsIgnoreCase("Lime")) { var2 = hexToColor("#00FF00"); } else if (var1.equalsIgnoreCase("Olive")) { var2 = hexToColor("#808000"); } else if (var1.equalsIgnoreCase("Yellow")) { var2 = hexToColor("#FFFF00"); } else if (var1.equalsIgnoreCase("Navy")) { var2 = hexToColor("#000080"); } else if (var1.equalsIgnoreCase("Blue")) { var2 = hexToColor("#0000FF"); } else if (var1.equalsIgnoreCase("Teal")) { var2 = hexToColor("#008080"); } else if (var1.equalsIgnoreCase("Aqua")) { var2 = hexToColor("#00FFFF"); } return var2; } void translateAttribute(HTML.Attribute var1, AttributeSet var2, MutableAttributeSet var3) { CSS.Attribute[] var4 = this.getCssAttribute(var1); String var5 = (String)var2.getAttribute(var1); if (var4 != null && var5 != null) { for(int var6 = 0; var6 < var4.length; ++var6) { Object var7 = this.getCssValue(var4[var6], var5); if (var7 != null) { var3.addAttribute(var4[var6], var7); } } } } private void translateAttributes(HTML.Tag var1, AttributeSet var2, MutableAttributeSet var3) { Enumeration var4 = var2.getAttributeNames(); while(var4.hasMoreElements()) { Object var5 = var4.nextElement(); if (var5 instanceof HTML.Attribute) { HTML.Attribute var6 = (HTML.Attribute)var5; if (var6 == Attribute.ALIGN) { String var7 = (String)var2.getAttribute(Attribute.ALIGN); if (var7 != null) { CSS.Attribute var8 = this.getCssAlignAttribute(var1, var2); if (var8 != null) { Object var9 = this.getCssValue(var8, var7); if (var9 != null) { var3.addAttribute(var8, var9); } } } } else if (var6 != Attribute.SIZE || this.isHTMLFontTag(var1)) { this.translateAttribute(var6, var2, var3); } } } } private void translateEmbeddedAttributes(AttributeSet var1, MutableAttributeSet var2) { Enumeration var3 = var1.getAttributeNames(); while(var3.hasMoreElements()) { Object var4 = var3.nextElement(); if (var4 instanceof HTML.Tag) { HTML.Tag var5 = (HTML.Tag)var4; Object var6 = var1.getAttribute(var5); if (var6 != null && var6 instanceof AttributeSet) { this.translateAttributes(var5, (AttributeSet)var6, var2); } } } } public AttributeSet translateHTMLToCSS(AttributeSet var1) { SimpleAttributeSet var2 = new SimpleAttributeSet(); Element var3 = (Element)var1; HTML.Tag var4 = this.getHTMLTag(var1); if (var4 == Tag.TD || var4 == Tag.TH) { AttributeSet var5 = var3.getParentElement().getParentElement().getAttributes(); this.translateAttribute(Attribute.BORDER, var5, var2); } if (var3.isLeaf()) { this.translateEmbeddedAttributes(var1, var2); } else { this.translateAttributes(var4, var1, var2); } Style var6 = ((StyleContext)this).addStyle((String)null, (Style)null); var6.addAttributes(var2); return var6; } private boolean validTextAlignValue(String var1) { return this.isFloater(var1) || var1.equals("center"); } private void writeObject(ObjectOutputStream var1) throws IOException { var1.defaultWriteObject(); Enumeration var2 = this.valueConvertor.keys(); var1.writeInt(this.valueConvertor.size()); if (var2 != null) { while(var2.hasMoreElements()) { Object var3 = var2.nextElement(); Object var4 = this.valueConvertor.get(var3); if (!(var3 instanceof Serializable) && (var3 = StyleContext.getStaticAttributeKey(var3)) == null) { var3 = null; var4 = null; } else if (!(var4 instanceof Serializable) && (var4 = StyleContext.getStaticAttributeKey(var4)) == null) { var3 = null; var4 = null; } var1.writeObject(var3); var1.writeObject(var4); } } } }