⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xhtmleditorkit.java

📁 XBrowser是一个完全免费并且开源的Web浏览器
💻 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 + -