diff options
Diffstat (limited to 'bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/encoding/HTMLModelLoader.java')
-rw-r--r-- | bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/encoding/HTMLModelLoader.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/encoding/HTMLModelLoader.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/encoding/HTMLModelLoader.java new file mode 100644 index 0000000000..8f2cc454df --- /dev/null +++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/encoding/HTMLModelLoader.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.wst.html.core.encoding; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.wst.html.core.document.HTMLDocumentTypeAdapterFactory; +import org.eclipse.wst.html.core.document.HTMLModelParserAdapterFactory; +import org.eclipse.wst.html.core.document.XMLStyleModelImpl; +import org.eclipse.wst.html.core.htmlcss.HTMLStyleSelectorAdapterFactory; +import org.eclipse.wst.html.core.htmlcss.StyleAdapterFactory; +import org.eclipse.wst.html.core.modelquery.ModelQueryAdapterFactoryForHTML; +import org.eclipse.wst.sse.core.AbstractModelLoader; +import org.eclipse.wst.sse.core.AdapterFactory; +import org.eclipse.wst.sse.core.INodeNotifier; +import org.eclipse.wst.sse.core.IStructuredModel; +import org.eclipse.wst.sse.core.ModelLoader; +import org.eclipse.wst.sse.core.PropagatingAdapter; +import org.eclipse.wst.sse.core.document.IDocumentLoader; +import org.eclipse.wst.sse.core.parser.BlockMarker; +import org.eclipse.wst.sse.core.util.Debug; +import org.eclipse.wst.xml.core.document.XMLModel; +import org.eclipse.wst.xml.core.internal.DebugAdapterFactory; +import org.eclipse.wst.xml.core.internal.parser.XMLSourceParser; +import org.eclipse.wst.xml.core.internal.propagate.PropagatingAdapterFactoryImpl; +import org.eclipse.wst.xml.core.parser.XMLRegionContext; + +public class HTMLModelLoader extends AbstractModelLoader { + + + public HTMLModelLoader() { + super(); + } + + /** + * Convenience method to add tag names using BlockMarker object + */ + protected void addHTMLishTag(XMLSourceParser parser, String tagname) { + //DMW: Nitin, perhaps we should provide some convenience methods + // in the parser itself? e.g. addCaseInsensitiveBlockedTag(tagname) + BlockMarker bm = new BlockMarker(tagname, null, XMLRegionContext.BLOCK_TEXT, false); + parser.addBlockMarker(bm); + } + + public IStructuredModel newModel() { + XMLStyleModelImpl model = new XMLStyleModelImpl(); + return model; + } + + /** + * This method must return those factories which must be attached to the + * structuredModel before content is applied. + */ + public List getAdapterFactories() { + List result = new ArrayList(); + AdapterFactory factory = null; + factory = StyleAdapterFactory.getInstance(); + result.add(factory); + factory = HTMLStyleSelectorAdapterFactory.getInstance(); + result.add(factory); + factory = HTMLDocumentTypeAdapterFactory.getInstance(); + result.add(factory); + factory = HTMLModelParserAdapterFactory.getInstance(); + result.add(factory); + // + factory = new ModelQueryAdapterFactoryForHTML(); + result.add(factory); + + factory = new PropagatingAdapterFactoryImpl(); + result.add(factory); + + + return result; + } + + protected void preLoadAdapt(IStructuredModel structuredModel) { + super.preLoadAdapt(structuredModel); + // DMW: just added this preload on 8/16/2002 + // I noticed the ProagatingAdapterFactory was being added, + // that that the ProagatingAdapterAdapter was not being + // preload adapted -- I'm assuing it ALWAYS has to be. + XMLModel domModel = (XMLModel) structuredModel; + // if there is a model in the adapter, this will adapt it to + // first node. After that the PropagatingAdater spreads over the + // children being + // created. Each time that happends, a side effect is to + // also "spread" sprecific registered adapters, + // they two can propigate is needed. + ((INodeNotifier) domModel.getDocument()).getAdapterFor(PropagatingAdapter.class); + if (Debug.debugNotificationAndEvents) { + PropagatingAdapter propagatingAdapter = (PropagatingAdapter) ((INodeNotifier) domModel.getDocument()).getAdapterFor(PropagatingAdapter.class); + propagatingAdapter.addAdaptOnCreateFactory(new DebugAdapterFactory()); + } } + + public ModelLoader newInstance() { + return new HTMLModelLoader(); + } + + public IDocumentLoader getDocumentLoader() { + if (documentLoaderInstance == null) { + documentLoaderInstance = new HTMLDocumentLoader(); + } + return documentLoaderInstance; + } +}
\ No newline at end of file |