📄 xhtmleditorkit.java
字号:
/****************************************************************
* XBrowser - eXtended web Browser *
* *
* Copyright (c) 2000-2001 Armond Avanes *
* Refer to ReadMe & License files for more information *
* *
* *
* By: Armond Avanes *
* Armond555@yahoo.com & Armond333@yahoo.com *
* http://xbrowser.sourceforge.net/ *
*****************************************************************/
package xbrowser.renderer.custom;
import java.applet.*;
import java.util.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import xbrowser.renderer.XRenderer;
import xbrowser.renderer.event.*;
public class XHTMLEditorKit extends HTMLEditorKit
{
public Object clone()
{
return new XHTMLEditorKit();
}
/**
* Get TidyParser based off of tidy.
*
* Note : XTidyParser switched off!
* This is because 1) it does not know many tags;
* 2) it swallows scripts (seemed).
* also look www.exler.ru -- thru Tidy it just barks and refuse working.
**/
//protected HTMLEditorKit.Parser getParser()
//{
// return new XTidyParser();
//}
public void install(JEditorPane c)
{
myEditor = c;
super.install(c);
}
public void deinstall(JEditorPane c)
{
if( myEditor==c )
myEditor = null;
super.deinstall(c);
}
public ViewFactory getViewFactory()
{
return myViewFactory;
}
public Document createDefaultDocument() {
if( System.getProperty("java.version").compareToIgnoreCase("1.3")<0 )
return super.createDefaultDocument();
else
{
// 3 lines copied...
StyleSheet ss = new StyleSheet();
XRendererSupport.addStyleSheet(ss, getStyleSheet());
XHTMLDocument document = new XHTMLDocument(ss);
if( myEditor instanceof XRenderer) {
XRenderer r = ((XRenderer)myEditor);
r.addRendererListener( new XHTMLDocumentStopper(r, document) );
document.setWindow(r);
}
XRendererSupport.setParser(document, getParser());
// document.setAsynchronousLoadPriority(4);
document.setTokenThreshold(100);
return document;
}
}
private static class XHTMLDocumentStopper extends XRendererAdapter {
XHTMLDocumentStopper(XRenderer r, XHTMLDocument document) {
xhdoc = document;
myEditor = r;
}
public void pageLoadingStarted() {
xhdoc.stopJScript();
myEditor.removeRendererListener(this);
}
public void pageLoadingStopped() { // Should we stop JS on stop?
}
// Attributes:
private XHTMLDocument xhdoc;
private XRenderer myEditor;
}
/** Overriden to print non-ascii characters as characters. */
public void write(Writer out, Document doc, int pos, int len) throws IOException, BadLocationException
{
out = new XCorrectingHTMLWriter(out);
super.write(out, doc, pos, len);
}
private class XHTMLFactory extends HTMLEditorKit.HTMLFactory
{
public View create(Element elem)
{
Object o = elem.getAttributes().getAttribute( StyleConstants.NameAttribute);
if( o instanceof HTML.Tag )
{
HTML.Tag kind = (HTML.Tag) o;
if( kind == HTML.Tag.APPLET )
{
if( insideAppletTag )
{
insideAppletTag = false;
return new XHiddenView(elem);
}
else
{
XAppletView applet_view;
insideAppletTag = true;
applet_view = new XAppletView(elem, appletContext);
appletViews.add(applet_view);
return applet_view;
}
}
else if( kind == HTML.Tag.CONTENT && insideAppletTag )
return new XHiddenView(elem);
// Added by WWK:
View result = wwk_fact.create(elem, kind);
if( result != null )
return result;
}
return super.create(elem);
}
// Attributes:
private XCustomHTMLFactory wwk_fact = new XCustomHTMLFactory();
private boolean insideAppletTag = false;
} // class XHTMLEditorKit.XHTMLFactory
// ==================== Applet-specific things ==============
public void destroyAllApplets()
{
Iterator it = appletViews.iterator();
while( it.hasNext() )
((XAppletView)it.next()).destroyApplet();
appletViews.clear();
}
public class XAppletContext implements AppletContext
{
public Applet getApplet(String name)
{
Iterator it = appletViews.iterator();
Applet applet = null;
while( it.hasNext() )
{
applet = ((XAppletView)it.next()).getApplet();
if( applet.getName().equalsIgnoreCase(name) )
return applet;
}
return null;
}
public Enumeration getApplets()
{
Iterator it = appletViews.iterator();
Vector applets = new Vector();
while( it.hasNext() )
applets.add( ((XAppletView)it.next()).getApplet() );
return applets.elements();
}
public Image getImage(URL url)
{
return Toolkit.getDefaultToolkit().createImage(url);
}
public AudioClip getAudioClip(URL url)
{
return Applet.newAudioClip(url);
}
public void showDocument(URL url)
{
showDocument(url, "_self");
}
public void showDocument(URL url, String target)
{
if ( myEditor instanceof XCustomRenderer )
((XCustomRenderer)myEditor).showDocument(url, target);
}
public void showStatus(String status)
{
if( myEditor instanceof XCustomRenderer )
((XCustomRenderer)myEditor).showAppletStatusInternal(status);
}
void showAppletLifeCycle(Applet applet, int status)
{
if( myEditor instanceof XCustomRenderer )
((XCustomRenderer)myEditor).showAppletLifeCycle(applet, status);
}
}
// Attributes:
private ViewFactory myViewFactory = new XHTMLFactory();
private XAppletContext appletContext = new XAppletContext();
private LinkedList appletViews = new LinkedList();
private JEditorPane myEditor = null;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -