Index: jrst2/src/java/org/codelutin/jrst/JRSTGenerator.java diff -u jrst2/src/java/org/codelutin/jrst/JRSTGenerator.java:1.2 jrst2/src/java/org/codelutin/jrst/JRSTGenerator.java:1.3 --- jrst2/src/java/org/codelutin/jrst/JRSTGenerator.java:1.2 Fri Nov 3 14:42:08 2006 +++ jrst2/src/java/org/codelutin/jrst/JRSTGenerator.java Fri Nov 3 16:20:38 2006 @@ -23,9 +23,9 @@ * Created: 30 oct. 06 00:14:18 * * @author poussin - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Last update: $Date: 2006/11/03 14:42:08 $ + * Last update: $Date: 2006/11/03 16:20:38 $ * by : $Author: bpoussin $ */ @@ -33,14 +33,18 @@ import static org.codelutin.jrst.ReStructuredText.*; +import java.io.File; import java.io.IOException; import java.io.Writer; +import java.net.MalformedURLException; import java.net.URL; import java.util.LinkedList; +import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; +import javax.xml.transform.URIResolver; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; @@ -82,6 +86,8 @@ protected String listType = "bullet|enumerated|..."; protected int enumStart = 1; + protected URIResolver uriResolver = null; + public JRSTGenerator() { } @@ -90,6 +96,20 @@ } /** + * @return the uriResolver + */ + public URIResolver getUriResolver() { + return this.uriResolver; + } + + /** + * @param uriResolver the uriResolver to set + */ + public void setUriResolver(URIResolver uriResolver) { + this.uriResolver = uriResolver; + } + + /** * Generate using this class as handler, this generate RST text to out * passed in constructor * @@ -117,6 +137,9 @@ public void generate(Document doc, ContentHandler handler) throws IOException, TransformerException { // load the transformer using JAXP TransformerFactory factory = TransformerFactory.newInstance(); + if (uriResolver != null) { + factory.setURIResolver(uriResolver); + } Transformer transformer = factory.newTransformer(); // now lets style the given document @@ -149,6 +172,11 @@ public void generate(Document doc, URL stylesheet, Writer out) throws IOException, TransformerException { // load the transformer using JAXP TransformerFactory factory = TransformerFactory.newInstance(); + if (uriResolver != null) { + factory.setURIResolver(uriResolver); + } else { + factory.setURIResolver(new DocumentResolver(stylesheet)); + } Transformer transformer = factory.newTransformer( new StreamSource( stylesheet.openStream() ) ); @@ -173,6 +201,11 @@ public Document transform(Document doc, URL stylesheet) throws TransformerException, IOException { // load the transformer using JAXP TransformerFactory factory = TransformerFactory.newInstance(); + if (uriResolver != null) { + factory.setURIResolver(uriResolver); + } else { + factory.setURIResolver(new DocumentResolver(stylesheet)); + } Transformer transformer = factory.newTransformer( new StreamSource( stylesheet.openStream() ) ); @@ -186,6 +219,39 @@ Document transformedDoc = result.getDocument(); return transformedDoc; } + + static public class DocumentResolver implements URIResolver { + + URL baseURL = null; + + private DocumentResolver() {} + + public DocumentResolver(URL url) throws MalformedURLException { + String path = new File(url.getPath()).getParent(); + baseURL = new URL(url.getProtocol(), url.getHost(), url.getPort(), path); + } + + public Source resolve(String href, String base) throws TransformerException { + try { + URL url = null; + if (href == null) { + url = baseURL; + } else { + url = new URL(baseURL.toString() + "/" + href); + } + Source result = new StreamSource(url.openStream()); + return result; + } catch (MalformedURLException eee) { + throw new TransformerException("Can't create url ", eee); + } catch (IOException eee) { + throw new TransformerException("Can't read url", eee); + } + } + + } + + + protected String string(String s, int number) { String result = "";