// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3) fieldsfirst lnc
// Source File Name: PreparedStyleSheet.java
package com.icl.saxon;
import com.icl.saxon.om.Builder;
import com.icl.saxon.om.DocumentInfo;
import com.icl.saxon.om.NamePool;
import com.icl.saxon.output.Emitter;
import com.icl.saxon.style.LiteralResultElement;
import com.icl.saxon.style.StyleElement;
import com.icl.saxon.style.StyleNodeFactory;
import com.icl.saxon.style.XSLStyleSheet;
import com.icl.saxon.tree.DocumentImpl;
import com.icl.saxon.tree.TreeBuilder;
import java.util.Hashtable;
import java.util.Properties;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import org.w3c.dom.Document;
import org.xml.sax.SAXParseException;
// Referenced classes of package com.icl.saxon:
// Controller, StylesheetStripper, TransformerFactoryImpl
public class PreparedStyleSheet
implements Templates
{
private DocumentImpl styleDoc;
private TransformerFactoryImpl factory;
private NamePool namePool;
private StyleNodeFactory nodeFactory;
private int errorCount;
protected PreparedStyleSheet(TransformerFactoryImpl transformerfactoryimpl)
{
/* 30*/ errorCount = 0;
/* 37*/ factory = transformerfactoryimpl;
}
public Transformer newTransformer()
{
/* 45*/ Controller controller = new Controller(factory);
/* 46*/ controller.setPreparedStyleSheet(this);
/* 47*/ return controller;
}
public TransformerFactoryImpl getTransformerFactory()
{
/* 55*/ return factory;
}
public void setNamePool(NamePool namepool)
{
/* 63*/ namePool = namepool;
}
public NamePool getNamePool()
{
/* 71*/ return namePool;
}
public StyleNodeFactory getStyleNodeFactory()
{
/* 79*/ return nodeFactory;
}
protected void prepare(SAXSource saxsource)
throws TransformerConfigurationException
{
/* 88*/ if(namePool == null || namePool.isSealed())
/* 89*/ namePool = NamePool.getDefaultNamePool();
/* 92*/ nodeFactory = new StyleNodeFactory(namePool);
/* 95*/ StylesheetStripper stylesheetstripper = new StylesheetStripper();
/* 96*/ stylesheetstripper.setStylesheetRules(namePool);
/* 98*/ TreeBuilder treebuilder = new TreeBuilder();
/* 99*/ treebuilder.setNamePool(namePool);
/* 100*/ treebuilder.setErrorListener(factory.getErrorListener());
/* 101*/ treebuilder.setStripper(stylesheetstripper);
/* 102*/ treebuilder.setSystemId(saxsource.getSystemId());
/* 103*/ treebuilder.setNodeFactory(nodeFactory);
/* 104*/ treebuilder.setDiscardCommentsAndPIs(true);
/* 105*/ treebuilder.setLineNumbering(true);
DocumentImpl documentimpl;
/* 111*/ try
{
/* 111*/ documentimpl = (DocumentImpl)treebuilder.build(saxsource);
}
/* 113*/ catch(TransformerException transformerexception)
{
/* 113*/ Throwable throwable = transformerexception.getException();
/* 114*/ if(throwable != null)
{
/* 115*/ if(throwable instanceof SAXParseException)
/* 117*/ throw new TransformerConfigurationException("Failed to parse stylesheet");
/* 118*/ if(throwable instanceof TransformerConfigurationException)
/* 119*/ throw (TransformerConfigurationException)throwable;
/* 121*/ else
/* 121*/ throw new TransformerConfigurationException(throwable);
} else
{
/* 124*/ throw new TransformerConfigurationException(transformerexception);
}
}
/* 127*/ if(documentimpl.getDocumentElement() == null)
/* 128*/ throw new TransformerConfigurationException("Stylesheet is empty or absent");
/* 131*/ setStyleSheetDocument(documentimpl);
/* 133*/ if(errorCount > 0)
/* 134*/ throw new TransformerConfigurationException("Failed to compile stylesheet. " + errorCount + (errorCount != 1 ? " errors " : " error ") + "detected.");
/* 141*/ else
/* 141*/ return;
}
protected void setStyleSheetDocument(DocumentImpl documentimpl)
throws TransformerConfigurationException
{
/* 152*/ styleDoc = documentimpl;
/* 153*/ namePool = documentimpl.getNamePool();
/* 155*/ nodeFactory = new StyleNodeFactory(namePool);
/* 159*/ StyleElement styleelement = (StyleElement)styleDoc.getDocumentElement();
/* 160*/ if(styleelement instanceof LiteralResultElement)
/* 161*/ styleDoc = ((LiteralResultElement)styleelement).makeStyleSheet(this);
/* 164*/ if(!(styleDoc.getDocumentElement() instanceof XSLStyleSheet))
{
/* 165*/ throw new TransformerConfigurationException("Top-level element of stylesheet is not xsl:stylesheet or xsl:transform or literal result element");
} else
{
/* 169*/ XSLStyleSheet xslstylesheet = (XSLStyleSheet)styleDoc.getDocumentElement();
/* 173*/ xslstylesheet.setPreparedStyleSheet(this);
/* 174*/ xslstylesheet.preprocess();
/* 175*/ return;
}
}
public DocumentImpl getStyleSheetDocument()
{
/* 182*/ return styleDoc;
}
public Properties getOutputProperties()
{
/* 198*/ Properties properties = new Properties();
/* 201*/ properties.put("encoding", "utf-8");
/* 203*/ properties.put("omit-xml-declaration", "no");
/* 207*/ properties.put("cdata-section-elements", "");
/* 211*/ Properties properties1 = new Properties(properties);
/* 212*/ ((XSLStyleSheet)styleDoc.getDocumentElement()).gatherOutputProperties(properties1);
/* 213*/ return properties1;
}
public void reportError(TransformerException transformerexception)
throws TransformerException
{
/* 222*/ errorCount++;
/* 223*/ factory.getErrorListener().error(transformerexception);
}
public DocumentInfo stripWhitespace(Document document)
throws TransformerException
{
/* 232*/ XSLStyleSheet xslstylesheet = (XSLStyleSheet)styleDoc.getDocumentElement();
/* 233*/ if(xslstylesheet.stripsWhitespace() || !(document instanceof DocumentInfo))
{
/* 234*/ Builder builder = ((Controller)newTransformer()).makeBuilder();
/* 235*/ builder.setNamePool(namePool);
/* 236*/ return builder.build(factory.getSAXSource(new DOMSource(document), false));
} else
{
/* 238*/ return (DocumentInfo)document;
}
}
}