blob: 83c753709a508e613e89fcb735d512ae7e455a2b [file] [log] [blame]
/************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
*
* Use is subject to license terms.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0. You can also
* obtain a copy of the License at http://odftoolkit.org/docs/license.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
************************************************************************/
package org.odftoolkit.odfvalidator;
import java.io.IOException;
import java.io.InputStream;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.XMLFilterImpl;
/**
*
*/
class MathML101Filter extends XMLFilterImpl {
//class MathML101Filter implements EntityResolver {
private String m_aMathMLDTD;
private static final String MATHML_NAMESPACE_URI = "http://www.w3.org/1998/Math/MathML";
private static final String MATHML_PUBLIC_ID = "-//W3C//DTD MathML 1.01//EN";
private static final String OOO_MATHML_PUBLIC_ID = "-//OpenOffice.org//DTD Modified W3C MathML 1.01//EN";
private Logger m_aLogger;
/** Creates a new instance of MathML101Filter */
MathML101Filter( String aMathMLDTD, Logger aLogger ) {
m_aMathMLDTD = aMathMLDTD;
m_aLogger = aLogger;
}
public void startElement(String aUri, String aLocalName, String aQName, Attributes aAtts) throws SAXException {
super.startElement(aUri, aLocalName, aQName, aAtts);
}
public void endElement(String aUri, String aLocalName, String aQName) throws SAXException {
super.endElement(aUri, aLocalName, aQName);
}
public InputSource resolveEntity(String aPublicId, String aSystemId) throws SAXException, IOException {
InputSource aRet = null;
String aEntity = null;
if( aPublicId != null &&
(aPublicId.equals(MATHML_PUBLIC_ID) ||
aPublicId.equals(OOO_MATHML_PUBLIC_ID)) )
{
aEntity = m_aMathMLDTD;
if( InternalResources.isInternalResourceIdentifer(aEntity) )
{
String aPath = InternalResources.getResourcePath(aEntity);
InputStream aInStream = getClass().getResourceAsStream(aPath);
if( aInStream == null )
{
m_aLogger.logFatalError("Missing internal schema file: ".concat(aPath));
}
else
{
aRet = new InputSource( aInStream );
aRet.setPublicId(aPublicId);
aRet.setSystemId(aEntity);
}
}
}
else
{
aEntity = aSystemId;
}
String aMsg = "Reading doctype definition '" + aEntity + "'";
m_aLogger.logInfo( aMsg , false);
if( aRet == null )
aRet = new InputSource( aEntity );
return aRet;
}
}