home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / JEditorPane.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  14.6 KB  |  598 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Rectangle;
  6. import java.awt.event.InputEvent;
  7. import java.awt.event.KeyEvent;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.io.InputStreamReader;
  11. import java.io.ObjectOutputStream;
  12. import java.io.StringReader;
  13. import java.io.StringWriter;
  14. import java.net.HttpURLConnection;
  15. import java.net.URL;
  16. import java.net.URLConnection;
  17. import java.util.Enumeration;
  18. import java.util.Hashtable;
  19. import javax.accessibility.AccessibleContext;
  20. import javax.swing.event.HyperlinkEvent;
  21. import javax.swing.event.HyperlinkListener;
  22. import javax.swing.plaf.ComponentUI;
  23. import javax.swing.plaf.TextUI;
  24. import javax.swing.text.AbstractDocument;
  25. import javax.swing.text.AttributeSet;
  26. import javax.swing.text.BadLocationException;
  27. import javax.swing.text.Caret;
  28. import javax.swing.text.ChangedCharSetException;
  29. import javax.swing.text.Document;
  30. import javax.swing.text.EditorKit;
  31. import javax.swing.text.JTextComponent;
  32. import javax.swing.text.StyledEditorKit;
  33. import javax.swing.text.html.HTMLDocument;
  34. import javax.swing.text.html.HTMLEditorKit;
  35. import javax.swing.text.html.HTML.Attribute;
  36. import javax.swing.text.html.HTML.Tag;
  37.  
  38. public class JEditorPane extends JTextComponent {
  39.    private EditorKit kit;
  40.    private Hashtable pageProperties;
  41.    private Hashtable typeHandlers;
  42.    private String charSetName;
  43.    private static final Object kitRegistryKey = new StringBuffer("JEditorPane.kitRegistry");
  44.    private static final Object kitTypeRegistryKey = new StringBuffer("JEditorPane.kitTypeRegistry");
  45.    private static final Object kitLoaderRegistryKey = new StringBuffer("JEditorPane.kitLoaderRegistry");
  46.    private static final String uiClassID = "EditorPaneUI";
  47.    // $FF: synthetic field
  48.    static Class class$javax$swing$event$HyperlinkListener;
  49.  
  50.    static {
  51.       registerEditorKitForContentType("text/plain", "javax.swing.JEditorPane$PlainEditorKit");
  52.       registerEditorKitForContentType("text/html", "javax.swing.text.html.HTMLEditorKit");
  53.       registerEditorKitForContentType("text/rtf", "javax.swing.text.rtf.RTFEditorKit");
  54.       registerEditorKitForContentType("application/rtf", "javax.swing.text.rtf.RTFEditorKit");
  55.    }
  56.  
  57.    public JEditorPane() {
  58.       this.charSetName = "8859_1";
  59.    }
  60.  
  61.    public JEditorPane(String var1) throws IOException {
  62.       this();
  63.       this.setPage(var1);
  64.    }
  65.  
  66.    public JEditorPane(String var1, String var2) {
  67.       this();
  68.       this.setContentType(var1);
  69.       this.setText(var2);
  70.    }
  71.  
  72.    public JEditorPane(URL var1) throws IOException {
  73.       this();
  74.       this.setPage(var1);
  75.    }
  76.  
  77.    public synchronized void addHyperlinkListener(HyperlinkListener var1) {
  78.       super.listenerList.add(class$javax$swing$event$HyperlinkListener != null ? class$javax$swing$event$HyperlinkListener : (class$javax$swing$event$HyperlinkListener = class$("javax.swing.event.HyperlinkListener")), var1);
  79.    }
  80.  
  81.    // $FF: synthetic method
  82.    static Class class$(String var0) {
  83.       try {
  84.          return Class.forName(var0);
  85.       } catch (ClassNotFoundException var2) {
  86.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  87.       }
  88.    }
  89.  
  90.    protected EditorKit createDefaultEditorKit() {
  91.       return new PlainEditorKit();
  92.    }
  93.  
  94.    public static EditorKit createEditorKitForContentType(String var0) {
  95.       EditorKit var1 = null;
  96.       Hashtable var2 = (Hashtable)SwingUtilities.appContextGet(kitRegistryKey);
  97.       if (var2 == null) {
  98.          var2 = new Hashtable();
  99.          SwingUtilities.appContextPut(kitRegistryKey, var2);
  100.       } else {
  101.          var1 = (EditorKit)var2.get(var0);
  102.       }
  103.  
  104.       if (var1 == null) {
  105.          String var3 = (String)getKitTypeRegistry().get(var0);
  106.          ClassLoader var4 = (ClassLoader)getKitLoaderRegistry().get(var0);
  107.  
  108.          try {
  109.             Class var5;
  110.             if (var4 != null) {
  111.                var5 = var4.loadClass(var3);
  112.             } else {
  113.                var5 = Class.forName(var3);
  114.             }
  115.  
  116.             var1 = (EditorKit)var5.newInstance();
  117.             var2.put(var0, var1);
  118.          } catch (Throwable var6) {
  119.             var1 = null;
  120.          }
  121.       }
  122.  
  123.       return var1 != null ? (EditorKit)var1.clone() : null;
  124.    }
  125.  
  126.    public void fireHyperlinkUpdate(HyperlinkEvent var1) {
  127.       Object[] var2 = super.listenerList.getListenerList();
  128.  
  129.       for(int var3 = var2.length - 2; var3 >= 0; var3 -= 2) {
  130.          if (var2[var3] == (class$javax$swing$event$HyperlinkListener != null ? class$javax$swing$event$HyperlinkListener : (class$javax$swing$event$HyperlinkListener = class$("javax.swing.event.HyperlinkListener")))) {
  131.             ((HyperlinkListener)var2[var3 + 1]).hyperlinkUpdate(var1);
  132.          }
  133.       }
  134.  
  135.    }
  136.  
  137.    public AccessibleContext getAccessibleContext() {
  138.       if (super.accessibleContext == null) {
  139.          if (this.getEditorKit() instanceof HTMLEditorKit) {
  140.             super.accessibleContext = new AccessibleJEditorPaneHTML(this);
  141.          } else {
  142.             super.accessibleContext = new AccessibleJEditorPane(this);
  143.          }
  144.       }
  145.  
  146.       return super.accessibleContext;
  147.    }
  148.  
  149.    public final String getContentType() {
  150.       return this.kit != null ? this.kit.getContentType() : null;
  151.    }
  152.  
  153.    public final EditorKit getEditorKit() {
  154.       if (this.kit == null) {
  155.          this.kit = this.createDefaultEditorKit();
  156.       }
  157.  
  158.       return this.kit;
  159.    }
  160.  
  161.    public EditorKit getEditorKitForContentType(String var1) {
  162.       if (this.typeHandlers == null) {
  163.          this.typeHandlers = new Hashtable(3);
  164.       }
  165.  
  166.       EditorKit var2 = (EditorKit)this.typeHandlers.get(var1);
  167.       if (var2 == null) {
  168.          var2 = createEditorKitForContentType(var1);
  169.          if (var2 != null) {
  170.             this.setEditorKitForContentType(var1, var2);
  171.          }
  172.       }
  173.  
  174.       if (var2 == null) {
  175.          var2 = this.createDefaultEditorKit();
  176.       }
  177.  
  178.       return var2;
  179.    }
  180.  
  181.    private static Hashtable getKitLoaderRegistry() {
  182.       Hashtable var0 = (Hashtable)SwingUtilities.appContextGet(kitLoaderRegistryKey);
  183.       if (var0 == null) {
  184.          var0 = new Hashtable();
  185.          SwingUtilities.appContextPut(kitLoaderRegistryKey, var0);
  186.       }
  187.  
  188.       return var0;
  189.    }
  190.  
  191.    private static Hashtable getKitTypeRegistry() {
  192.       Hashtable var0 = (Hashtable)SwingUtilities.appContextGet(kitTypeRegistryKey);
  193.       if (var0 == null) {
  194.          var0 = new Hashtable();
  195.          SwingUtilities.appContextPut(kitTypeRegistryKey, var0);
  196.       }
  197.  
  198.       return var0;
  199.    }
  200.  
  201.    public URL getPage() {
  202.       return (URL)((JTextComponent)this).getDocument().getProperty("stream");
  203.    }
  204.  
  205.    public Dimension getPreferredSize() {
  206.       Dimension var1 = super.getPreferredSize();
  207.       if (((Component)this).getParent() instanceof JViewport) {
  208.          JViewport var2 = (JViewport)((Component)this).getParent();
  209.          TextUI var3 = ((JTextComponent)this).getUI();
  210.          if (!this.getScrollableTracksViewportWidth()) {
  211.             int var4 = ((JComponent)var2).getWidth();
  212.             Dimension var5 = ((ComponentUI)var3).getMinimumSize(this);
  213.             ((ComponentUI)var3).getMaximumSize(this);
  214.             if (var4 < var5.width) {
  215.                var1.width = var5.width;
  216.             }
  217.          }
  218.  
  219.          if (!this.getScrollableTracksViewportHeight()) {
  220.             int var7 = ((JComponent)var2).getHeight();
  221.             Dimension var8 = ((ComponentUI)var3).getMinimumSize(this);
  222.             ((ComponentUI)var3).getMaximumSize(this);
  223.             if (var7 < var8.height) {
  224.                var1.height = var8.height;
  225.             }
  226.          }
  227.       }
  228.  
  229.       return var1;
  230.    }
  231.  
  232.    public boolean getScrollableTracksViewportHeight() {
  233.       if (((Component)this).getParent() instanceof JViewport) {
  234.          JViewport var1 = (JViewport)((Component)this).getParent();
  235.          TextUI var2 = ((JTextComponent)this).getUI();
  236.          int var3 = ((JComponent)var1).getHeight();
  237.          Dimension var4 = ((ComponentUI)var2).getMinimumSize(this);
  238.          Dimension var5 = ((ComponentUI)var2).getMaximumSize(this);
  239.          if (var3 >= var4.height && var3 <= var5.height) {
  240.             return true;
  241.          }
  242.       }
  243.  
  244.       return false;
  245.    }
  246.  
  247.    public boolean getScrollableTracksViewportWidth() {
  248.       if (((Component)this).getParent() instanceof JViewport) {
  249.          JViewport var1 = (JViewport)((Component)this).getParent();
  250.          TextUI var2 = ((JTextComponent)this).getUI();
  251.          int var3 = ((JComponent)var1).getWidth();
  252.          Dimension var4 = ((ComponentUI)var2).getMinimumSize(this);
  253.          Dimension var5 = ((ComponentUI)var2).getMaximumSize(this);
  254.          if (var3 >= var4.width && var3 <= var5.width) {
  255.             return true;
  256.          }
  257.       }
  258.  
  259.       return false;
  260.    }
  261.  
  262.    protected InputStream getStream(URL var1) throws IOException {
  263.       URLConnection var2 = var1.openConnection();
  264.       if (var2 instanceof HttpURLConnection) {
  265.          HttpURLConnection var3 = (HttpURLConnection)var2;
  266.          HttpURLConnection.setFollowRedirects(false);
  267.          int var4 = var3.getResponseCode();
  268.          boolean var5 = var4 >= 300 && var4 <= 399;
  269.          if (var5) {
  270.             String var6 = var2.getHeaderField("Location");
  271.             if (var6.startsWith("http", 0)) {
  272.                var1 = new URL(var6);
  273.             } else {
  274.                var1 = new URL(var1, var6);
  275.             }
  276.  
  277.             return this.getStream(var1);
  278.          }
  279.       }
  280.  
  281.       if (this.pageProperties == null) {
  282.          this.pageProperties = new Hashtable();
  283.       }
  284.  
  285.       String var8 = var2.getContentType();
  286.       if (var8 != null) {
  287.          this.setContentType(var8);
  288.          this.pageProperties.put("content-type", var8);
  289.       }
  290.  
  291.       this.pageProperties.put("stream", var1);
  292.       String var9 = var2.getContentEncoding();
  293.       if (var9 != null) {
  294.          this.pageProperties.put("content-encoding", var9);
  295.       }
  296.  
  297.       InputStream var10 = var2.getInputStream();
  298.       return var10;
  299.    }
  300.  
  301.    public String getText() {
  302.       String var1;
  303.       try {
  304.          StringWriter var2 = new StringWriter();
  305.          ((JTextComponent)this).write(var2);
  306.          var1 = var2.toString();
  307.       } catch (IOException var3) {
  308.          var1 = null;
  309.       }
  310.  
  311.       return var1;
  312.    }
  313.  
  314.    public String getUIClassID() {
  315.       return "EditorPaneUI";
  316.    }
  317.  
  318.    public boolean isManagingFocus() {
  319.       return true;
  320.    }
  321.  
  322.    protected String paramString() {
  323.       String var1 = this.charSetName != null ? this.charSetName : "";
  324.       String var2 = this.kit != null ? this.kit.toString() : "";
  325.       String var3 = this.typeHandlers != null ? this.typeHandlers.toString() : "";
  326.       return super.paramString() + ",charSetName=" + var1 + ",kit=" + var2 + ",typeHandlers=" + var3;
  327.    }
  328.  
  329.    protected void processComponentKeyEvent(KeyEvent var1) {
  330.       super.processComponentKeyEvent(var1);
  331.       if (this.isManagingFocus() && (var1.getKeyCode() == 9 || var1.getKeyChar() == '\t')) {
  332.          ((InputEvent)var1).consume();
  333.       }
  334.  
  335.    }
  336.  
  337.    public void read(InputStream var1, Object var2) throws IOException {
  338.       if (var2 instanceof HTMLDocument && this.kit instanceof HTMLEditorKit) {
  339.          HTMLDocument var3 = (HTMLDocument)var2;
  340.          ((JTextComponent)this).setDocument(var3);
  341.          this.read(var1, (Document)var3);
  342.       } else {
  343.          super.read(new InputStreamReader(var1, this.charSetName), var2);
  344.       }
  345.  
  346.    }
  347.  
  348.    void read(InputStream var1, Document var2) throws IOException {
  349.       try {
  350.          this.kit.read(new InputStreamReader(var1, this.charSetName), var2, 0);
  351.       } catch (BadLocationException var8) {
  352.          throw new IOException(((Throwable)var8).getMessage());
  353.       } catch (ChangedCharSetException var9) {
  354.          String var4 = var9.getCharSetSpec();
  355.          if (var9.keyEqualsCharSet()) {
  356.             this.charSetName = var4;
  357.          } else {
  358.             this.setCharsetFromContentTypeParameters(var4);
  359.          }
  360.  
  361.          var1.close();
  362.          URL var5 = (URL)var2.getProperty("stream");
  363.          URLConnection var6 = var5.openConnection();
  364.          var1 = var6.getInputStream();
  365.  
  366.          try {
  367.             var2.remove(0, var2.getLength());
  368.          } catch (BadLocationException var7) {
  369.          }
  370.  
  371.          var2.putProperty("IgnoreCharsetDirective", new Boolean(true));
  372.          this.read(var1, var2);
  373.       }
  374.  
  375.    }
  376.  
  377.    public static void registerEditorKitForContentType(String var0, String var1) {
  378.       getKitLoaderRegistry().remove(var0);
  379.       getKitTypeRegistry().put(var0, var1);
  380.    }
  381.  
  382.    public static void registerEditorKitForContentType(String var0, String var1, ClassLoader var2) {
  383.       getKitTypeRegistry().put(var0, var1);
  384.       getKitLoaderRegistry().put(var0, var2);
  385.    }
  386.  
  387.    public synchronized void removeHyperlinkListener(HyperlinkListener var1) {
  388.       super.listenerList.remove(class$javax$swing$event$HyperlinkListener != null ? class$javax$swing$event$HyperlinkListener : (class$javax$swing$event$HyperlinkListener = class$("javax.swing.event.HyperlinkListener")), var1);
  389.    }
  390.  
  391.    public void replaceSelection(String var1) {
  392.       if (!((JTextComponent)this).isEditable()) {
  393.          ((Component)this).getToolkit().beep();
  394.       } else {
  395.          EditorKit var2 = this.getEditorKit();
  396.          if (var2 instanceof StyledEditorKit) {
  397.             try {
  398.                Document var3 = ((JTextComponent)this).getDocument();
  399.                Caret var4 = ((JTextComponent)this).getCaret();
  400.                int var5 = Math.min(var4.getDot(), var4.getMark());
  401.                int var6 = Math.max(var4.getDot(), var4.getMark());
  402.                if (var5 != var6) {
  403.                   var3.remove(var5, var6 - var5);
  404.                }
  405.  
  406.                if (var1 != null && var1.length() > 0) {
  407.                   var3.insertString(var5, var1, ((StyledEditorKit)var2).getInputAttributes());
  408.                }
  409.             } catch (BadLocationException var7) {
  410.                ((Component)this).getToolkit().beep();
  411.             }
  412.          } else {
  413.             super.replaceSelection(var1);
  414.          }
  415.  
  416.       }
  417.    }
  418.  
  419.    protected void scrollToReference(String var1) {
  420.       Document var2 = ((JTextComponent)this).getDocument();
  421.       if (var2 instanceof HTMLDocument) {
  422.          HTMLDocument var3 = (HTMLDocument)var2;
  423.  
  424.          for(HTMLDocument.Iterator var4 = var3.getIterator(Tag.A); var4.isValid(); var4.next()) {
  425.             AttributeSet var5 = var4.getAttributes();
  426.             String var6 = (String)var5.getAttribute(Attribute.NAME);
  427.             if (var6 != null && var6.equals(var1)) {
  428.                try {
  429.                   Rectangle var7 = ((JTextComponent)this).modelToView(var4.getStartOffset());
  430.                   if (var7 != null) {
  431.                      Rectangle var8 = ((JComponent)this).getVisibleRect();
  432.                      var7.y -= var8.height / 2;
  433.                      var7.height = var8.height;
  434.                      ((JComponent)this).scrollRectToVisible(var7);
  435.                   }
  436.                } catch (BadLocationException var9) {
  437.                   ((Component)this).getToolkit().beep();
  438.                }
  439.             }
  440.          }
  441.       }
  442.  
  443.    }
  444.  
  445.    private void setCharsetFromContentTypeParameters(String var1) {
  446.       Object var2 = null;
  447.  
  448.       try {
  449.          int var3 = var1.indexOf(59);
  450.          if (var3 > -1 && var3 < var1.length() - 1) {
  451.             var1 = var1.substring(var3 + 1);
  452.          }
  453.  
  454.          if (var1.length() > 0) {
  455.             HeaderParser var4 = new HeaderParser(var1);
  456.             String var8 = var4.findValue("charset");
  457.             this.charSetName = var8;
  458.          }
  459.       } catch (IndexOutOfBoundsException var5) {
  460.       } catch (NullPointerException var6) {
  461.       } catch (Exception var7) {
  462.          System.err.println("JEditorPane.getCharsetFromContentTypeParameters failed on: " + var1);
  463.          ((Throwable)var7).printStackTrace();
  464.       }
  465.  
  466.    }
  467.  
  468.    public final void setContentType(String var1) {
  469.       int var2 = var1.indexOf(";");
  470.       if (var2 > -1) {
  471.          String var3 = var1.substring(var2);
  472.          var1 = var1.substring(0, var2).trim();
  473.          if (var1.toLowerCase().startsWith("text/")) {
  474.             this.setCharsetFromContentTypeParameters(var3);
  475.          }
  476.       }
  477.  
  478.       if (this.kit == null || !var1.equals(this.kit.getContentType())) {
  479.          EditorKit var4 = this.getEditorKitForContentType(var1);
  480.          if (var4 != null) {
  481.             this.setEditorKit(var4);
  482.          }
  483.       }
  484.  
  485.    }
  486.  
  487.    public void setEditorKit(EditorKit var1) {
  488.       EditorKit var2 = this.kit;
  489.       if (var2 != null) {
  490.          var2.deinstall(this);
  491.       }
  492.  
  493.       this.kit = var1;
  494.       if (this.kit != null) {
  495.          this.kit.install(this);
  496.          ((JTextComponent)this).setDocument(this.kit.createDefaultDocument());
  497.       }
  498.  
  499.       ((JComponent)this).firePropertyChange("editorKit", var2, var1);
  500.    }
  501.  
  502.    public void setEditorKitForContentType(String var1, EditorKit var2) {
  503.       if (this.typeHandlers == null) {
  504.          this.typeHandlers = new Hashtable(3);
  505.       }
  506.  
  507.       this.typeHandlers.put(var1, var2);
  508.    }
  509.  
  510.    public void setPage(String var1) throws IOException {
  511.       if (var1 == null) {
  512.          throw new IOException("invalid url");
  513.       } else {
  514.          URL var2 = new URL(var1);
  515.          this.setPage(var2);
  516.       }
  517.    }
  518.  
  519.    public void setPage(URL var1) throws IOException {
  520.       if (var1 == null) {
  521.          throw new IOException("invalid url");
  522.       } else {
  523.          URL var2 = this.getPage();
  524.          ((JComponent)this).scrollRectToVisible(new Rectangle(0, 0, 1, 1));
  525.          boolean var3 = false;
  526.          if (var2 == null || !var2.sameFile(var1)) {
  527.             InputStream var4 = this.getStream(var1);
  528.             if (this.kit != null) {
  529.                Document var5 = this.kit.createDefaultDocument();
  530.                if (this.pageProperties != null) {
  531.                   Enumeration var6 = this.pageProperties.keys();
  532.  
  533.                   while(var6.hasMoreElements()) {
  534.                      Object var7 = var6.nextElement();
  535.                      var5.putProperty(var7, this.pageProperties.get(var7));
  536.                   }
  537.  
  538.                   this.pageProperties.clear();
  539.                }
  540.  
  541.                if (var5.getProperty("stream") == null) {
  542.                   var5.putProperty("stream", var1);
  543.                }
  544.  
  545.                if (var5 instanceof AbstractDocument) {
  546.                   AbstractDocument var10 = (AbstractDocument)var5;
  547.                   int var11 = var10.getAsynchronousLoadPriority();
  548.                   if (var11 >= 0) {
  549.                      ((JTextComponent)this).setDocument(var5);
  550.                      PageLoader var8 = new PageLoader(this, var4, var11, var2, var1);
  551.                      ((Thread)var8).start();
  552.                      return;
  553.                   }
  554.                }
  555.  
  556.                this.read(var4, var5);
  557.                ((JTextComponent)this).setDocument(var5);
  558.                var3 = true;
  559.             }
  560.          }
  561.  
  562.          String var9 = var1.getRef();
  563.          if (var9 != null) {
  564.             if (!var3) {
  565.                this.scrollToReference(var9);
  566.             } else {
  567.                SwingUtilities.invokeLater(new 1(var9, this));
  568.             }
  569.          }
  570.  
  571.          ((JComponent)this).firePropertyChange("page", var2, var1);
  572.       }
  573.    }
  574.  
  575.    public void setText(String var1) {
  576.       try {
  577.          Document var2 = ((JTextComponent)this).getDocument();
  578.          var2.remove(0, var2.getLength());
  579.          StringReader var3 = new StringReader(var1);
  580.          EditorKit var4 = this.getEditorKit();
  581.          var4.read(var3, var2, 0);
  582.       } catch (IOException var5) {
  583.          ((Component)this).getToolkit().beep();
  584.       } catch (BadLocationException var6) {
  585.          ((Component)this).getToolkit().beep();
  586.       }
  587.  
  588.    }
  589.  
  590.    private void writeObject(ObjectOutputStream var1) throws IOException {
  591.       var1.defaultWriteObject();
  592.       if (super.ui != null && this.getUIClassID().equals("EditorPaneUI")) {
  593.          super.ui.installUI(this);
  594.       }
  595.  
  596.    }
  597. }
  598.