// Text - Xalan extension element for inserting text package com.nwalsh.xalan; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.InputStream; import java.io.IOException; import java.io.FileNotFoundException; import java.net.URL; import java.net.MalformedURLException; import org.xml.sax.SAXException; import org.xml.sax.ContentHandler; import org.apache.xpath.objects.XObject; import org.apache.xpath.XPath; import org.apache.xpath.NodeSet; import org.apache.xalan.extensions.XSLProcessorContext; import org.apache.xalan.transformer.TransformerImpl; import org.apache.xalan.templates.StylesheetRoot; import org.apache.xalan.templates.ElemExtensionCall; import org.apache.xalan.templates.OutputProperties; import org.apache.xalan.res.XSLTErrorResources; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.Source; /** *
Xalan extension element for inserting text * *
$Id: Text.java,v 1.2 2006/05/15 11:14:03 nwalsh Exp $
* *Copyright (C) 2001 Norman Walsh.
* *This class provides a * Xalan * extension element for inserting text into a result tree.
* *Change Log:
*Initial release.
Constructor for Text
* *Does nothing.
*/ public Text() { } public String insertfile(XSLProcessorContext context, ElemExtensionCall elem) throws MalformedURLException, FileNotFoundException, IOException, TransformerException { String href = getFilename(context, elem); String encoding = getEncoding(context, elem); String baseURI = context.getTransformer().getBaseURLOfSource(); URIResolver resolver = context.getTransformer().getURIResolver(); if (resolver != null) { Source source = resolver.resolve(href, baseURI); href = source.getSystemId(); } URL baseURL = null; URL fileURL = null; try { baseURL = new URL(baseURI); } catch (MalformedURLException e1) { try { baseURL = new URL("file:" + baseURI); } catch (MalformedURLException e2) { System.out.println("Cannot find base URI for " + baseURI); baseURL = null; } } String text = ""; try { try { fileURL = new URL(baseURL, href); } catch (MalformedURLException e1) { try { fileURL = new URL(baseURL, "file:" + href); } catch (MalformedURLException e2) { System.out.println("Cannot open " + href); return ""; } } InputStreamReader isr = null; if (encoding.equals("") == true) isr = new InputStreamReader(fileURL.openStream()); else isr = new InputStreamReader(fileURL.openStream(), encoding); BufferedReader is = new BufferedReader(isr); final int BUFFER_SIZE = 4096; char chars[] = new char[BUFFER_SIZE]; char nchars[] = new char[BUFFER_SIZE]; int len = 0; int i = 0; int carry = -1; while ((len = is.read(chars)) > 0) { // various new lines are normalized to LF to prevent blank lines // between lines int nlen = 0; for (i=0; i