blob: 6d9bd7d6eeff769d0d3b766bb0c2b6de0a16de09 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Angelo Zerr 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:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.e4.ui.css.core.impl.dom.parsers;
import java.io.IOException;
import java.util.Stack;
import org.eclipse.e4.ui.css.core.dom.parsers.CSSParser;
import org.eclipse.e4.ui.css.core.impl.dom.CSSStyleDeclarationImpl;
import org.eclipse.e4.ui.css.core.impl.dom.CSSValueFactory;
import org.eclipse.e4.ui.css.core.sac.DocumentHandlerFactory;
import org.eclipse.e4.ui.css.core.sac.ExtendedDocumentHandler;
import org.eclipse.e4.ui.css.core.sac.ISACParserFactory;
import org.eclipse.e4.ui.css.core.sac.ParserNotFoundException;
import org.eclipse.e4.ui.css.core.sac.SACParserFactory;
import org.w3c.css.sac.ConditionFactory;
import org.w3c.css.sac.InputSource;
import org.w3c.css.sac.Parser;
import org.w3c.css.sac.SelectorFactory;
import org.w3c.css.sac.SelectorList;
import org.w3c.dom.css.CSSRule;
import org.w3c.dom.css.CSSStyleDeclaration;
import org.w3c.dom.css.CSSStyleSheet;
import org.w3c.dom.css.CSSValue;
/**
* Abstract {@link CSSParser} implementation.
*/
public class AbstractCSSParser implements CSSParser {
private static DocumentHandlerFactory defaultDocumentHandlerFactory;
private static ISACParserFactory defaultParserFactory;
static {
defaultDocumentHandlerFactory = DocumentHandlerFactory.newInstance();
defaultParserFactory = SACParserFactory.newInstance();
}
// SAC
private Parser parser = null;
private DocumentHandlerFactory documentHandlerFactory;
private ISACParserFactory parserFactory;
private ConditionFactory conditionFactory = null;
private SelectorFactory selectorFactory = null;
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#parseStyleSheet(org.w3c.css.sac.InputSource)
*/
public CSSStyleSheet parseStyleSheet(InputSource source) throws IOException {
ExtendedDocumentHandler documentHandler = getDocumentHandlerFactory()
.makeDocumentHandler();
Parser parser = getParser();
parser.setDocumentHandler(documentHandler);
parser.parseStyleSheet(source);
return (CSSStyleSheet) documentHandler.getNodeRoot();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#parseStyleDeclaration(org.w3c.css.sac.InputSource)
*/
public CSSStyleDeclaration parseStyleDeclaration(InputSource source)
throws IOException {
CSSStyleDeclarationImpl styleDeclaration = new CSSStyleDeclarationImpl(
null);
parseStyleDeclaration(((CSSStyleDeclaration) (styleDeclaration)),
source);
return styleDeclaration;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#parseStyleDeclaration(org.w3c.dom.css.CSSStyleDeclaration,
* org.w3c.css.sac.InputSource)
*/
public void parseStyleDeclaration(CSSStyleDeclaration styleDeclaration,
InputSource source) throws IOException {
Stack stack = new Stack();
stack.push(styleDeclaration);
ExtendedDocumentHandler documentHandler = getDocumentHandlerFactory()
.makeDocumentHandler();
documentHandler.setNodeStack(stack);
Parser parser = getParser();
parser.setDocumentHandler(documentHandler);
parser.parseStyleDeclaration(source);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#parsePropertyValue(org.w3c.css.sac.InputSource)
*/
public CSSValue parsePropertyValue(InputSource source) throws IOException {
Parser parser = getParser();
ExtendedDocumentHandler documentHandler = getDocumentHandlerFactory()
.makeDocumentHandler();
parser.setDocumentHandler(documentHandler);
return CSSValueFactory.newValue(parser.parsePropertyValue(source));
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#parseRule(org.w3c.css.sac.InputSource)
*/
public CSSRule parseRule(InputSource source) throws IOException {
// TODO Auto-generated method stub
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#parseSelectors(org.w3c.css.sac.InputSource)
*/
public SelectorList parseSelectors(InputSource source) throws IOException {
// TODO Auto-generated method stub
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#setParentStyleSheet(org.w3c.dom.css.CSSStyleSheet)
*/
public void setParentStyleSheet(CSSStyleSheet parentStyleSheet) {
}
/**
* Return instance of {@link DocumentHandlerFactory}.
*
* @return
*/
public DocumentHandlerFactory getDocumentHandlerFactory() {
if (documentHandlerFactory == null)
return defaultDocumentHandlerFactory;
return documentHandlerFactory;
}
/**
* Set instance of {@link DocumentHandlerFactory}.
*
* @param documentHandlerFactory
*/
public void setDocumentHandlerFactory(
DocumentHandlerFactory documentHandlerFactory) {
this.documentHandlerFactory = documentHandlerFactory;
}
/**
* Return SAC {@link Parser} to use.
*
* @return
*/
public Parser getParser() {
if (parser == null)
try {
parser = getSACParserFactory().makeParser();
if (conditionFactory != null)
parser.setConditionFactory(conditionFactory);
if (selectorFactory != null)
parser.setSelectorFactory(selectorFactory);
} catch (Exception e) {
// TODO : manage error.
// e.printStackTrace();
throw new ParserNotFoundException(e);
}
return parser;
}
/**
* Set SAC {@link Parser} to use.
*
* @param parser
*/
public void setParser(Parser parser) {
this.parser = parser;
}
/**
* Return factory {@link ISACParserFactory} to use.
*
* @return
*/
public ISACParserFactory getSACParserFactory() {
if (parserFactory == null)
return defaultParserFactory;
return parserFactory;
}
/**
* Set factory {@link ISACParserFactory} to use.
*
* @param parserFactory
*/
public void setSACParserFactory(ISACParserFactory parserFactory) {
this.parserFactory = parserFactory;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#getConditionFactory()
*/
public ConditionFactory getConditionFactory() {
return conditionFactory;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#setConditionFactory(org.w3c.css.sac.ConditionFactory)
*/
public void setConditionFactory(ConditionFactory conditionFactory) {
this.conditionFactory = conditionFactory;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#getSelectorFactory()
*/
public SelectorFactory getSelectorFactory() {
return selectorFactory;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.e4.ui.css.core.dom.parsers.CSSParser#setSelectorFactory(org.w3c.css.sac.SelectorFactory)
*/
public void setSelectorFactory(SelectorFactory selectorFactory) {
this.selectorFactory = selectorFactory;
}
}