Author: sletellier
Date: 2009-07-16 12:09:35 +0200 (Thu, 16 Jul 2009)
New Revision: 378
Added:
trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/
trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java
trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java
trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java
Modified:
trunk/jrst/
trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java
trunk/jrst/src/main/resources/log4j.properties
trunk/jrst/src/test/java/org/nuiton/jrst/JRSTGeneratorTest.java
Log:
First implementation to genarate an reStructuredText document
Property changes on: trunk/jrst
___________________________________________________________________
Modified: svn:ignore
- maven.log
target
velocity.log
.settings
.classpath
.project
+ maven.log
target
velocity.log
.settings
.classpath
.project
nbproject
Modified: trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java
===================================================================
--- trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java 2009-06-12 02:46:00 UTC (rev 377)
+++ trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java 2009-07-16 10:09:35 UTC (rev 378)
@@ -26,6 +26,7 @@
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
@@ -58,6 +59,8 @@
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
+import org.nuiton.jrst.convertisor.DocUtils2RST;
+import org.nuiton.jrst.convertisor.DocUtilsVisitor;
import uk.co.flamingpenguin.jewel.cli.Cli;
import uk.co.flamingpenguin.jewel.cli.CliFactory;
import uk.co.flamingpenguin.jewel.cli.CommandLineInterface;
@@ -100,8 +103,8 @@
/** XSL Stylesheet to transform Docbook into htmlhelp. */
protected static final String docbook2htmlhelp = "/htmlhelp/htmlhelp.xsl";
- /** XSL Stylesheet to transform xml into rst. */
- protected static final String rst2rst = "/xsl/xml2rst.xsl";
+// /** XSL Stylesheet to transform xml into rst. */
+// protected static final String rst2rst = "JRSTWriter";
/** XSL Stylesheet to transform Docbook into ODF. */
protected static final String docbook2odf = "/xsl/docbook2odf-0.244/docbook.xsl";
@@ -151,7 +154,7 @@
stylesheets.put(TYPE_XHTML, rst2docbook + "," + docbook2xhtml);
stylesheets.put(TYPE_JAVAHELP, rst2docbook + "," + docbook2javahelp);
stylesheets.put(TYPE_HTMLHELP, rst2docbook + "," + docbook2htmlhelp);
- stylesheets.put(TYPE_RST, rst2rst);
+ stylesheets.put(TYPE_RST, "");
stylesheets.put(TYPE_ODT, rst2docbook + "," + docbook2odf);
stylesheets.put(TYPE_FO, rst2docbook + "," + docbook2fo);
stylesheets.put(TYPE_PDF, rst2docbook + "," + docbook2fo);
@@ -421,107 +424,138 @@
JRSTReader jrst = new JRSTReader();
Document doc = jrst.read(in);
- // apply xsl on rst xml document
- JRSTGenerator gen = new JRSTGenerator();
- String[] xsls = StringUtil.split(xslList, ",");
- for (String xsl : xsls) {
- URL stylesheet = null;
- File file = new File(xsl);
- if (file.exists()) {
- stylesheet = file.toURL();
+ // Sortie vers rst
+ if (xslListOrOutType.equals(TYPE_RST)){
+ // Creation dun visitor qui convertie de l'xml vers le rst
+ DocUtilsVisitor visitor = new DocUtils2RST();
+
+ // Atacher le visitor au document
+ // il va parcourir tout les elements et reconstruir du rst
+ doc.accept(visitor);
+
+ // Recuperation du resultat
+ String result = visitor.getResult();
+
+ // Ecriture du resultat dans un fichier
+ // prepare the output flux
+ FileWriter out = null;
+ if (fileOut != null) {
+ try {
+ fileOut.getAbsoluteFile().getParentFile().mkdirs();
+ out = new FileWriter(fileOut);
+ // write generated document
+ out.write(result);
+ } finally {
+ out.close();
+ }
} else {
- //stylesheet = JRST.class.getResource(xsl);
- stylesheet = Resource.getURL(xsl);
+ // Si aucun fichier de sortie nest definie, on utilise la sortie standard
+ System.out.println(result);
}
- if (stylesheet == null) {
- throw new FileNotFoundException("Can't find stylesheet: "
- + xsl);
- }
-
- // add uri resolver
- /*gen.setUriResolver(new URIResolver() {
- public Source resolve(String href, String base) {
- System.out.println("RESOLVING: href: "+href+" base: "+base);
-
- return null;
- try {
+ }
+ else {
+ // apply xsl on rst xml document
+ JRSTGenerator gen = new JRSTGenerator();
+ String[] xsls = StringUtil.split(xslList, ",");
+ for (String xsl : xsls) {
+ URL stylesheet = null;
+ File file = new File(xsl);
+ if (file.exists()) {
+ stylesheet = file.toURL();
+ } else {
+ //stylesheet = JRST.class.getResource(xsl);
+ stylesheet = Resource.getURL(xsl);
+ }
+ if (stylesheet == null) {
+ throw new FileNotFoundException("Can't find stylesheet: "
+ + xsl);
+ }
+
+ // add uri resolver
+ /*gen.setUriResolver(new URIResolver() {
+ public Source resolve(String href, String base) {
System.out.println("RESOLVING: href: "+href+" base: "+base);
- StreamSource ss = new StreamSource(new FileInputStream(new File(href)));
- return ss;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
+
return null;
+ try {
+ System.out.println("RESOLVING: href: "+href+" base: "+base);
+ StreamSource ss = new StreamSource(new FileInputStream(new File(href)));
+ return ss;
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ return null;
+ }
}
- }
- });*/
-
- doc = gen.transform(doc, stylesheet);
- }
+ });*/
- boolean pdf = false;
- // generation PDF
- if (xslListOrOutType != null) {
- if (xslListOrOutType.equals("pdf")) {
- pdf = true;
- FopFactory fopFactory = FopFactory.newInstance();
- // OutputStream outPDF = new BufferedOutputStream(new
- // FileOutputStream(new File("C:/Temp/myfile.pdf")));
+ doc = gen.transform(doc, stylesheet);
+ }
- OutputStream outPDF = null;
- if (fileOut != null) {
- fileOut.getAbsoluteFile().getParentFile().mkdirs();
- outPDF = new BufferedOutputStream(new FileOutputStream(
- fileOut));
- } else {
- outPDF = new BufferedOutputStream(System.out);
- }
+ boolean pdf = false;
+ // generation PDF
+ if (xslListOrOutType != null) {
+ if (xslListOrOutType.equals("pdf")) {
+ pdf = true;
+ FopFactory fopFactory = FopFactory.newInstance();
+ // OutputStream outPDF = new BufferedOutputStream(new
+ // FileOutputStream(new File("C:/Temp/myfile.pdf")));
- FOUserAgent userAgent = fopFactory.newFOUserAgent();
+ OutputStream outPDF = null;
+ if (fileOut != null) {
+ fileOut.getAbsoluteFile().getParentFile().mkdirs();
+ outPDF = new BufferedOutputStream(new FileOutputStream(
+ fileOut));
+ } else {
+ outPDF = new BufferedOutputStream(System.out);
+ }
- // Step 3: Construct fop with desired output format
- Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF,
- userAgent, outPDF);
+ FOUserAgent userAgent = fopFactory.newFOUserAgent();
- // Step 4: Setup JAXP using identity transformer
- TransformerFactory factory = TransformerFactory
- .newInstance();
- Transformer transformer = factory.newTransformer(); // identity
- // transformer
+ // Step 3: Construct fop with desired output format
+ Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF,
+ userAgent, outPDF);
- // Step 5: Setup input and output for XSLT transformation
- // Setup input stream
- Source src = new StreamSource(new StringReader(doc.asXML()));
+ // Step 4: Setup JAXP using identity transformer
+ TransformerFactory factory = TransformerFactory
+ .newInstance();
+ Transformer transformer = factory.newTransformer(); // identity
+ // transformer
- // Resulting SAX events (the generated FO) must be piped
- // through to FOP
- Result res = new SAXResult(fop.getDefaultHandler());
+ // Step 5: Setup input and output for XSLT transformation
+ // Setup input stream
+ Source src = new StreamSource(new StringReader(doc.asXML()));
- // Step 6: Start XSLT transformation and FOP processing
- transformer.transform(src, res);
+ // Resulting SAX events (the generated FO) must be piped
+ // through to FOP
+ Result res = new SAXResult(fop.getDefaultHandler());
- if (fileOut != null) {
- outPDF.close();
+ // Step 6: Start XSLT transformation and FOP processing
+ transformer.transform(src, res);
+
+ if (fileOut != null) {
+ outPDF.close();
+ }
}
}
- }
- if (!pdf) {
- // prepare the output flux
- XMLWriter out = null;
- if (fileOut != null) {
- fileOut.getAbsoluteFile().getParentFile().mkdirs();
+ if (!pdf) {
+ // prepare the output flux
+ XMLWriter out = null;
+ if (fileOut != null) {
+ fileOut.getAbsoluteFile().getParentFile().mkdirs();
- out = new XMLWriter(FileUtil.getWriter(fileOut,
- outputEncoding), new OutputFormat(" ", true,
- outputEncoding));
- } else {
- out = new XMLWriter(System.out, new OutputFormat(" ",
- true, outputEncoding));
- }
- // write generated document
- out.write(doc);
+ out = new XMLWriter(FileUtil.getWriter(fileOut,
+ outputEncoding), new OutputFormat(" ", true,
+ outputEncoding));
+ } else {
+ out = new XMLWriter(System.out, new OutputFormat(" ",
+ true, outputEncoding));
+ }
+ // write generated document
+ out.write(doc);
- if (fileOut != null) {
- out.close();
+ if (fileOut != null) {
+ out.close();
+ }
}
}
}
Added: trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java
===================================================================
--- trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java (rev 0)
+++ trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java 2009-07-16 10:09:35 UTC (rev 378)
@@ -0,0 +1,557 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.nuiton.jrst.convertisor;
+
+import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.dom4j.Element;
+
+import static org.nuiton.jrst.ReStructuredText.TITLE_CHAR;
+
+import static org.nuiton.jrst.ReStructuredText.PARAGRAPH;
+import static org.nuiton.jrst.ReStructuredText.TITLE;
+
+/**
+ *
+ * @author letellier
+ */
+public class DocUtils2RST extends DocUtilsConvertisor {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ private static Log log = LogFactory.getLog(DocUtilsVisitor.class);
+
+ protected int level = 0;
+
+ public DocUtils2RST() {
+ }
+
+ @Override
+ public String composeDocument(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTitle(Element e) {
+ String result = e.getText();
+ String underLine = "";
+ for (int i = 0;i<result.length();i++){
+ underLine += TITLE_CHAR.charAt(level);
+ }
+ result += '\n' + underLine + '\n';
+ log.debug("composeTitle : " + result);
+ return result;
+ }
+
+ @Override
+ public String composeSubTitle(Element e) {
+ String result = e.getText();
+ String underLine = "";
+ for (int i = 0;i<result.length();i++){
+ underLine += TITLE_CHAR.charAt(level);
+ }
+ result += '\n' + underLine + '\n';
+ log.debug("composeSubTitle : " + result);
+ return result;
+ }
+
+ @Override
+ public String composeDocInfo(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAutor(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAutors(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeOrganisation(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAddress(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeContact(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeVersion(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeResvision(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeStatus(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDate(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeCopyright(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDecoration(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeHeader(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeFooter(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeSection(Element e) {
+ level++;
+ return "";
+ }
+
+ @Override
+ public String composeTopic(Element e) {
+ String result = ".. topic:: ";
+ level++;
+ List<Element> elements = e.elements();
+ for (Element element : elements){
+ if (element.getName().equals(TITLE)){
+ addCachedElement(element);
+ result += indent(element.getText());
+ } else if (element.getName().equals(PARAGRAPH)){
+ Element ePara = e.element(PARAGRAPH);
+ result += ePara.getText();
+ addCachedElement(element);
+ result += indent(parseDocument(element));
+ }
+ }
+ --level;
+ log.debug("composeTopic : " + result);
+ return result;
+ }
+
+ @Override
+ public String composeSideBar(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTransition(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeParagraph(Element e) {
+ String result = "";
+ result += indent(e.getText(), level);
+ log.debug("composeParagraph : " + result);
+ return result;
+ }
+
+ @Override
+ public String composeCompound(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeContainer(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeBulletList(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeEnumeratedList(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeListItem(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDefinitionList(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDefinitionListItem(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTerm(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeClassifier(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDefinition(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeFieldList(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeField(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeFieldName(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeFieldBody(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeOptionList(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeOptionListItem(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeOptionGroup(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeOption(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeOptionString(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeOptionArgument(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDescription(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeLiteralBlock(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeLineBlock(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeLine(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeBlockQuote(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAttribution(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDocTestBlock(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAttention(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeCaution(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeDanger(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeError(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeHint(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeImportant(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeNote(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTip(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeWarning(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAdmonition(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeFootnote(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeCitation(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeLabel(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeRubric(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTarget(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeSubstitutionDefinition(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeComment(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composePending(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeFigure(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeImage(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeCaption(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeLegend(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeSystemMessage(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeRaw(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTable(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTgroup(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeColspec(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeThead(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTbody(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeRow(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeEntry(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeEmphasis(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeStrong(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeLiteral(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeReference(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeFootnoteReference(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeCitationReference(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeSubstitutionReference(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeTitleReference(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAbbreviation(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeAcronyme(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeSuperscipt(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeSubscript(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeInline(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeProblematic(Element e) {
+ return "";
+ }
+
+ @Override
+ public String composeGenerated(Element e) {
+ return "";
+ }
+
+ protected String indent(String toIndent){
+ return indent(toIndent, level);
+ }
+
+ protected String indent(String toIndent, int l){
+ String result = "";
+ for (String s : toIndent.split("\n")){
+ for(int i=0;i<l;i++){
+ result+=" ";
+ }
+ result+=s;
+ result+="\n";
+ }
+ return result;
+ }
+}
+
Added: trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java
===================================================================
--- trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java (rev 0)
+++ trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java 2009-07-16 10:09:35 UTC (rev 378)
@@ -0,0 +1,283 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.nuiton.jrst.convertisor;
+
+import org.dom4j.Element;
+import org.nuiton.jrst.ReStructuredText;
+/**
+ *
+ * @author letellier
+ */
+public abstract class DocUtilsConvertisor extends DocUtilsVisitor{
+
+ @Override
+ public void visit(Element e) {
+
+ if (!cachedElements.contains(e)){
+
+ addCachedElement(e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Root Element
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ if (elementEquals(ReStructuredText.DOCUMENT,e)) { rstResult += composeDocument(e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Title Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ } else if (elementEquals(ReStructuredText.TITLE,e)) { rstResult += composeTitle(e);
+ } else if (elementEquals(ReStructuredText.SUBTITLE,e)) { rstResult += composeSubTitle(e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Bibliographic Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ } else if (elementEquals(ReStructuredText.DOCINFO,e)) { rstResult += composeDocInfo(e);
+
+ // } else if (elementEquals(ReStructuredText.INFO,e)) { rstResult += compose
+ } else if (elementEquals(ReStructuredText.AUTHOR,e)) { rstResult += composeAutor(e);
+ } else if (elementEquals(ReStructuredText.AUTHORS,e)) { rstResult += composeAutors(e);
+ } else if (elementEquals(ReStructuredText.ORGANIZATION,e)) { rstResult += composeOrganisation(e);
+ } else if (elementEquals(ReStructuredText.ADDRESS,e)) { rstResult += composeAddress(e);
+ } else if (elementEquals(ReStructuredText.CONTACT,e)) { rstResult += composeContact(e);
+ } else if (elementEquals(ReStructuredText.VERSION,e)) { rstResult += composeVersion(e);
+ } else if (elementEquals(ReStructuredText.REVISION,e)) { rstResult += composeResvision(e);
+ } else if (elementEquals(ReStructuredText.STATUS,e)) { rstResult += composeStatus(e);
+ } else if (elementEquals(ReStructuredText.DATE,e)) { rstResult += composeDate(e);
+ } else if (elementEquals(ReStructuredText.COPYRIGHT,e)) { rstResult += composeCopyright(e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Decoration Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ } else if (elementEquals(ReStructuredText.DECORATION,e)) { rstResult += composeDecoration(e);
+ } else if (elementEquals(ReStructuredText.HEADER,e)) { rstResult += composeHeader(e);
+ } else if (elementEquals(ReStructuredText.FOOTER,e)) { rstResult += composeFooter(e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Structural Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ } else if (elementEquals(ReStructuredText.SECTION,e)) { rstResult += composeSection(e);
+ } else if (elementEquals(ReStructuredText.TOPIC,e)) { rstResult += composeTopic(e);
+ } else if (elementEquals(ReStructuredText.SIDEBAR,e)) { rstResult += composeSideBar(e);
+ } else if (elementEquals(ReStructuredText.TRANSITION,e)) { rstResult += composeTransition(e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Body Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ } else if (elementEquals(ReStructuredText.PARAGRAPH,e)) { rstResult += composeParagraph(e);
+ } else if (elementEquals(ReStructuredText.COMPOUND,e)) { rstResult += composeCompound(e);
+ } else if (elementEquals(ReStructuredText.CONTAINER,e)) { rstResult += composeContainer(e);
+ } else if (elementEquals(ReStructuredText.BULLET_LIST,e)) { rstResult += composeBulletList(e);
+ } else if (elementEquals(ReStructuredText.ENUMERATED_LIST,e)) { rstResult += composeEnumeratedList(e);
+ } else if (elementEquals(ReStructuredText.LIST_ITEM,e)) { rstResult += composeListItem(e);
+ } else if (elementEquals(ReStructuredText.DEFINITION_LIST,e)) { rstResult += composeDefinitionList(e);
+ } else if (elementEquals(ReStructuredText.DEFINITION_LIST_ITEM,e)) { rstResult += composeDefinitionListItem(e);
+ } else if (elementEquals(ReStructuredText.TERM,e)) { rstResult += composeTerm(e);
+ } else if (elementEquals(ReStructuredText.CLASSIFIER,e)) { rstResult += composeClassifier(e);
+ } else if (elementEquals(ReStructuredText.DEFINITION,e)) { rstResult += composeDefinition(e);
+ } else if (elementEquals(ReStructuredText.FIELD_LIST,e)) { rstResult += composeFieldList(e);
+ } else if (elementEquals(ReStructuredText.FIELD,e)) { rstResult += composeField(e);
+ } else if (elementEquals(ReStructuredText.FIELD_NAME,e)) { rstResult += composeFieldName(e);
+ } else if (elementEquals(ReStructuredText.FIELD_BODY,e)) { rstResult += composeFieldBody(e);
+ } else if (elementEquals(ReStructuredText.OPTION_LIST,e)) { rstResult += composeOptionList(e);
+ } else if (elementEquals(ReStructuredText.OPTION_LIST_ITEM,e)) { rstResult += composeOptionListItem(e);
+ } else if (elementEquals(ReStructuredText.OPTION_GROUP,e)) { rstResult += composeOptionGroup(e);
+ } else if (elementEquals(ReStructuredText.OPTION,e)) { rstResult += composeOption(e);
+ } else if (elementEquals(ReStructuredText.OPTION_STRING,e)) { rstResult += composeOptionString(e);
+ } else if (elementEquals(ReStructuredText.OPTION_ARGUMENT,e)) { rstResult += composeOptionArgument(e);
+ } else if (elementEquals(ReStructuredText.DESCRIPTION,e)) { rstResult += composeDescription(e);
+ } else if (elementEquals(ReStructuredText.LITERAL_BLOCK,e)) { rstResult += composeLiteralBlock(e);
+ } else if (elementEquals(ReStructuredText.LINE_BLOCK,e)) { rstResult += composeLineBlock(e);
+ } else if (elementEquals(ReStructuredText.LINE,e)) { rstResult += composeLine(e);
+ } else if (elementEquals(ReStructuredText.BLOCK_QUOTE,e)) { rstResult += composeBlockQuote(e);
+ } else if (elementEquals(ReStructuredText.ATTRIBUTION,e)) { rstResult += composeAttribution(e);
+ } else if (elementEquals(ReStructuredText.DOCTEST_BLOCK,e)) { rstResult += composeDocTestBlock(e);
+ } else if (elementEquals(ReStructuredText.ATTENTION,e)) { rstResult += composeAttention(e);
+ } else if (elementEquals(ReStructuredText.CAUTION,e)) { rstResult += composeCaution(e);
+ } else if (elementEquals(ReStructuredText.DANGER,e)) { rstResult += composeDanger(e);
+ } else if (elementEquals(ReStructuredText.ERROR,e)) { rstResult += composeError(e);
+ } else if (elementEquals(ReStructuredText.HINT,e)) { rstResult += composeHint(e);
+ } else if (elementEquals(ReStructuredText.IMPORTANT,e)) { rstResult += composeImportant(e);
+ } else if (elementEquals(ReStructuredText.NOTE,e)) { rstResult += composeNote(e);
+ } else if (elementEquals(ReStructuredText.TIP,e)) { rstResult += composeTip(e);
+ } else if (elementEquals(ReStructuredText.WARNING,e)) { rstResult += composeWarning(e);
+ } else if (elementEquals(ReStructuredText.ADMONITION,e)) { rstResult += composeAdmonition(e);
+ } else if (elementEquals(ReStructuredText.FOOTNOTE,e)) { rstResult += composeFootnote(e);
+ } else if (elementEquals(ReStructuredText.CITATION,e)) { rstResult += composeCitation(e);
+ } else if (elementEquals(ReStructuredText.LABEL,e)) { rstResult += composeLabel(e);
+ } else if (elementEquals(ReStructuredText.RUBRIC,e)) { rstResult += composeRubric(e);
+ } else if (elementEquals(ReStructuredText.TARGET,e)) { rstResult += composeTarget(e);
+ } else if (elementEquals(ReStructuredText.SUBSTITUTION_DEFINITION,e)) { rstResult += composeSubstitutionDefinition(e);
+ } else if (elementEquals(ReStructuredText.COMMENT,e)) { rstResult += composeComment(e);
+ } else if (elementEquals(ReStructuredText.PENDING,e)) { rstResult += composePending(e);
+ } else if (elementEquals(ReStructuredText.FIGURE,e)) { rstResult += composeFigure(e);
+ } else if (elementEquals(ReStructuredText.IMAGE,e)) { rstResult += composeImage(e);
+ } else if (elementEquals(ReStructuredText.CAPTION,e)) { rstResult += composeCaption(e);
+ } else if (elementEquals(ReStructuredText.LEGEND,e)) { rstResult += composeLegend(e);
+ } else if (elementEquals(ReStructuredText.SYSTEM_MESSAGE,e)) { rstResult += composeSystemMessage(e);
+ } else if (elementEquals(ReStructuredText.RAW,e)) { rstResult += composeRaw(e);
+
+ // table
+ } else if (elementEquals(ReStructuredText.TABLE,e)) { rstResult += composeTable(e);
+ } else if (elementEquals(ReStructuredText.TGROUP,e)) { rstResult += composeTgroup(e);
+ } else if (elementEquals(ReStructuredText.COLSPEC,e)) { rstResult += composeColspec(e);
+ } else if (elementEquals(ReStructuredText.THEAD,e)) { rstResult += composeThead(e);
+ } else if (elementEquals(ReStructuredText.TBODY,e)) { rstResult += composeTbody(e);
+ } else if (elementEquals(ReStructuredText.ROW,e)) { rstResult += composeRow(e);
+ } else if (elementEquals(ReStructuredText.ENTRY,e)) { rstResult += composeEntry(e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Inline Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ } else if (elementEquals(ReStructuredText.EMPHASIS,e)) { rstResult += composeEmphasis(e);
+ } else if (elementEquals(ReStructuredText.STRONG,e)) { rstResult += composeStrong(e);
+ } else if (elementEquals(ReStructuredText.LITERAL,e)) { rstResult += composeLiteral(e);
+ } else if (elementEquals(ReStructuredText.REFERENCE,e)) { rstResult += composeReference(e);
+ } else if (elementEquals(ReStructuredText.FOOTNOTE_REFERENCE,e)) { rstResult += composeFootnoteReference(e);
+ } else if (elementEquals(ReStructuredText.CITATION_REFERENCE,e)) { rstResult += composeCitationReference(e);
+ } else if (elementEquals(ReStructuredText.SUBSTITUTION_REFERENCE,e)) { rstResult += composeSubstitutionReference(e);
+ } else if (elementEquals(ReStructuredText.TITLE_REFERENCE,e)) { rstResult += composeTitleReference(e);
+ } else if (elementEquals(ReStructuredText.ABBREVIATION,e)) { rstResult += composeAbbreviation(e);
+ } else if (elementEquals(ReStructuredText.ACRONYM,e)) { rstResult += composeAcronyme(e);
+ } else if (elementEquals(ReStructuredText.SUPERSCRIPT,e)) { rstResult += composeSuperscipt(e);
+ } else if (elementEquals(ReStructuredText.SUBSCRIPT,e)) { rstResult += composeSubscript(e);
+ } else if (elementEquals(ReStructuredText.INLINE,e)) { rstResult += composeInline(e);
+ } else if (elementEquals(ReStructuredText.PROBLEMATIC,e)) { rstResult += composeProblematic(e);
+ } else if (elementEquals(ReStructuredText.GENERATED,e)) { rstResult += composeGenerated(e);
+ }
+
+ }
+ }
+
+ protected boolean elementEquals(String name, Element e) {
+ return e.getName().equals(name);
+ }
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Root Element
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ public abstract String composeDocument(Element e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Title Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ public abstract String composeTitle(Element e);
+ public abstract String composeSubTitle(Element e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Bibliographic Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ public abstract String composeDocInfo(Element e);
+
+ // public abstract String compose
+ public abstract String composeAutor(Element e);
+ public abstract String composeAutors(Element e);
+ public abstract String composeOrganisation(Element e);
+ public abstract String composeAddress(Element e);
+ public abstract String composeContact(Element e);
+ public abstract String composeVersion(Element e);
+ public abstract String composeResvision(Element e);
+ public abstract String composeStatus(Element e);
+ public abstract String composeDate(Element e);
+ public abstract String composeCopyright(Element e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Decoration Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ public abstract String composeDecoration(Element e);
+ public abstract String composeHeader(Element e);
+ public abstract String composeFooter(Element e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Structural Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ public abstract String composeSection(Element e);
+ public abstract String composeTopic(Element e);
+ public abstract String composeSideBar(Element e);
+ public abstract String composeTransition(Element e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Body Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ public abstract String composeParagraph(Element e);
+ public abstract String composeCompound(Element e);
+ public abstract String composeContainer(Element e);
+ public abstract String composeBulletList(Element e);
+ public abstract String composeEnumeratedList(Element e);
+ public abstract String composeListItem(Element e);
+ public abstract String composeDefinitionList(Element e);
+ public abstract String composeDefinitionListItem(Element e);
+ public abstract String composeTerm(Element e);
+ public abstract String composeClassifier(Element e);
+ public abstract String composeDefinition(Element e);
+ public abstract String composeFieldList(Element e);
+ public abstract String composeField(Element e);
+ public abstract String composeFieldName(Element e);
+ public abstract String composeFieldBody(Element e);
+ public abstract String composeOptionList(Element e);
+ public abstract String composeOptionListItem(Element e);
+ public abstract String composeOptionGroup(Element e);
+ public abstract String composeOption(Element e);
+ public abstract String composeOptionString(Element e);
+ public abstract String composeOptionArgument(Element e);
+ public abstract String composeDescription(Element e);
+ public abstract String composeLiteralBlock(Element e);
+ public abstract String composeLineBlock(Element e);
+ public abstract String composeLine(Element e);
+ public abstract String composeBlockQuote(Element e);
+ public abstract String composeAttribution(Element e);
+ public abstract String composeDocTestBlock(Element e);
+ public abstract String composeAttention(Element e);
+ public abstract String composeCaution(Element e);
+ public abstract String composeDanger(Element e);
+ public abstract String composeError(Element e);
+ public abstract String composeHint(Element e);
+ public abstract String composeImportant(Element e);
+ public abstract String composeNote(Element e);
+ public abstract String composeTip(Element e);
+ public abstract String composeWarning(Element e);
+ public abstract String composeAdmonition(Element e);
+ public abstract String composeFootnote(Element e);
+ public abstract String composeCitation(Element e);
+ public abstract String composeLabel(Element e);
+ public abstract String composeRubric(Element e);
+ public abstract String composeTarget(Element e);
+ public abstract String composeSubstitutionDefinition(Element e);
+ public abstract String composeComment(Element e);
+ public abstract String composePending(Element e);
+ public abstract String composeFigure(Element e);
+ public abstract String composeImage(Element e);
+ public abstract String composeCaption(Element e);
+ public abstract String composeLegend(Element e);
+ public abstract String composeSystemMessage(Element e);
+ public abstract String composeRaw(Element e);
+
+ // table
+ public abstract String composeTable(Element e);
+ public abstract String composeTgroup(Element e);
+ public abstract String composeColspec(Element e);
+ public abstract String composeThead(Element e);
+ public abstract String composeTbody(Element e);
+ public abstract String composeRow(Element e);
+ public abstract String composeEntry(Element e);
+
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // Inline Elements
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ public abstract String composeEmphasis(Element e);
+ public abstract String composeStrong(Element e);
+ public abstract String composeLiteral(Element e);
+ public abstract String composeReference(Element e);
+ public abstract String composeFootnoteReference(Element e);
+ public abstract String composeCitationReference(Element e);
+ public abstract String composeSubstitutionReference(Element e);
+ public abstract String composeTitleReference(Element e);
+ public abstract String composeAbbreviation(Element e);
+ public abstract String composeAcronyme(Element e);
+ public abstract String composeSuperscipt(Element e);
+ public abstract String composeSubscript(Element e);
+ public abstract String composeInline(Element e);
+ public abstract String composeProblematic(Element e);
+ public abstract String composeGenerated(Element e);
+}
Added: trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java
===================================================================
--- trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java (rev 0)
+++ trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java 2009-07-16 10:09:35 UTC (rev 378)
@@ -0,0 +1,102 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.nuiton.jrst.convertisor;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.VisitorSupport;
+
+/**
+ *
+ * @author letellier
+ */
+
+public abstract class DocUtilsVisitor extends VisitorSupport{
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ private static Log log = LogFactory.getLog(DocUtilsVisitor.class);
+
+ // Enregistre les elements parse pour ne jamais les y repasser
+ protected List<Element> cachedElements;
+
+ protected String rstResult = "";
+
+ public DocUtilsVisitor(){
+ cachedElements = new ArrayList<Element>();
+ }
+
+ public void setCachedElements(List<Element> cachedElements){
+ this.cachedElements = cachedElements;
+ }
+
+ public List<Element> getCachedElements(){
+ return cachedElements;
+ }
+
+ // Permet de ne jamais repasser sur ce noeud
+ public void addCachedElement(Element e){
+ cachedElements.add(e);
+ }
+
+ public void addCachedElements(List<Element> elements){
+ cachedElements.addAll(elements);
+ }
+
+ public String parseDocument(Element el){
+ try {
+
+ // FIXME : Cette partie ne marche pas corectement...
+ List<Element> elements = el.elements();
+ Document doc = DocumentHelper.createDocument();
+ log.info("This element : " + el.getName());
+ for (Element element : elements){
+ log.info("Child : " + element.getName());
+ try{
+ doc.add(element);
+ }
+ catch(org.dom4j.IllegalAddException ex){
+ log.error("Imposible d ajouter l element " + ex);
+ if (log.isDebugEnabled()){
+ log.debug("Voici l element concerné : " + element.asXML());
+ }
+ }
+ }
+
+ if (log.isDebugEnabled()){
+ log.debug("parsing doc : " + doc.asXML());
+ }
+
+ // Creation dune nouvelle instance du visitor utilise
+ DocUtilsVisitor visitor = this.getClass().newInstance();
+
+ // TODO : on ne devrais pas en avoir besoin
+ visitor.setCachedElements(getCachedElements());
+
+ // Traitement recursif (pour parser un document dans un autre
+ el.accept(visitor);
+
+ // Ajout du resultat a la suite du courant
+ rstResult += visitor.getResult();
+
+ // Recuperation des documents parse
+ addCachedElements(visitor.getCachedElements());
+
+ } catch (Exception ex) {
+ log.error("Cant compose document : ", ex);
+ }
+ return rstResult;
+ }
+
+ public String getResult(){
+ return rstResult;
+ }
+
+}
Modified: trunk/jrst/src/main/resources/log4j.properties
===================================================================
--- trunk/jrst/src/main/resources/log4j.properties 2009-06-12 02:46:00 UTC (rev 377)
+++ trunk/jrst/src/main/resources/log4j.properties 2009-07-16 10:09:35 UTC (rev 378)
@@ -1,7 +1,10 @@
# Global logging configuration
-log4j.rootLogger=INFO, stdout
+log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n
\ No newline at end of file
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n
+
+# package level
+log4j.logger.org.nuiton.jrst=DEBUG
Modified: trunk/jrst/src/test/java/org/nuiton/jrst/JRSTGeneratorTest.java
===================================================================
--- trunk/jrst/src/test/java/org/nuiton/jrst/JRSTGeneratorTest.java 2009-06-12 02:46:00 UTC (rev 377)
+++ trunk/jrst/src/test/java/org/nuiton/jrst/JRSTGeneratorTest.java 2009-07-16 10:09:35 UTC (rev 378)
@@ -43,13 +43,13 @@
@Test
public void testRstToRst() throws Exception {
- if (log.isInfoEnabled()) {
- log.info("Testing RST to RST (test.rst)...");
- }
-
- File test1 = File.createTempFile("jrst-RstToRst", ".rst");
- JRST.main(new String[] { "-t", "rst", "--force", "-o", test1.getAbsolutePath(), "src/test/resources/test.rst", });
- test1.delete();
+// if (log.isInfoEnabled()) {
+// log.info("Testing RST to RST (test.rst)...");
+// }
+//
+// File test1 = File.createTempFile("jrst-RstToRst", ".rst");
+// JRST.main(new String[] { "-t", "rst", "--force", "-o", test1.getAbsolutePath(), "src/test/resources/test.rst", });
+// test1.delete();
}
@Test