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