Author: tchemit Date: 2009-08-16 14:07:32 +0200 (Sun, 16 Aug 2009) New Revision: 393 Added: trunk/jrst/src/test/java/org/nuiton/jrst/JRSTTest.java Removed: trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java Modified: trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java Log: - make this works on topic - simplify (remove DocUtilsConvertisor which give use nothing else) - improve code (use constants and StringBuilder instead ofString concatenation = bad) - add JRSTTest test to test toRst mode (must be continued...) Modified: trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java =================================================================== --- trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java 2009-08-16 12:05:26 UTC (rev 392) +++ trunk/jrst/src/main/java/org/nuiton/jrst/JRST.java 2009-08-16 12:07:32 UTC (rev 393) @@ -438,7 +438,8 @@ // Recuperation du resultat String result = visitor.getResult(); - + // nettoyage du visiteur + visitor.clear(); // Ecriture du resultat dans un fichier // prepare the output flux FileWriter out = null; Modified: trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java =================================================================== --- trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java 2009-08-16 12:05:26 UTC (rev 392) +++ trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtils2RST.java 2009-08-16 12:07:32 UTC (rev 393) @@ -1,8 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - package org.nuiton.jrst.convertisor; import java.util.List; @@ -19,539 +14,529 @@ * * @author letellier */ -public class DocUtils2RST extends DocUtilsConvertisor { +public class DocUtils2RST extends DocUtilsVisitor { /** to use log facility, just put in your code: log.info(\"...\"); */ - private static Log log = LogFactory.getLog(DocUtilsVisitor.class); - + private static Log log = LogFactory.getLog(DocUtils2RST.class); protected int level = 0; - public DocUtils2RST() { - } - @Override public String composeDocument(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTitle(Element e) { String result = e.getText(); - String underLine = ""; - for (int i = 0;i<result.length();i++){ + String underLine = EMPTY_STRING; + for (int i = 0; i < result.length(); i++) { underLine += TITLE_CHAR.charAt(level); } - result += '\n' + underLine + '\n'; - log.debug("composeTitle : " + result); + result += LINE_SEPARATOR + underLine + LINE_SEPARATOR; + log.debug("composeTitle :\n" + result); return result; } @Override public String composeSubTitle(Element e) { String result = e.getText(); - String underLine = ""; - for (int i = 0;i<result.length();i++){ + String underLine = EMPTY_STRING; + for (int i = 0; i < result.length(); i++) { underLine += TITLE_CHAR.charAt(level); } - result += '\n' + underLine + '\n'; - log.debug("composeSubTitle : " + result); + result += LINE_SEPARATOR + underLine + LINE_SEPARATOR; + log.debug("composeSubTitle :\n" + result); return result; } @Override public String composeDocInfo(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAutor(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAutors(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeOrganisation(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAddress(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeContact(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeVersion(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeResvision(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeStatus(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDate(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeCopyright(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDecoration(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeHeader(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeFooter(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeSection(Element e) { level++; - return ""; + return EMPTY_STRING; } @Override public String composeTopic(Element e) { - String result = ".. topic:: "; + StringBuilder buffer = new StringBuilder(".. topic:: "); level++; - List<Element> elements = e.elements(); - for (Element element : elements){ - if (element.getName().equals(TITLE)){ + List<?> elements = e.elements(); + for (Object o : elements) { + Element element = (Element) o; + try { + if (elementEquals(TITLE, element)) { + log.debug("topic title : " + element.getText()); + buffer.append(indent(element.getText())); + } else if (elementEquals(PARAGRAPH, element)) { + log.trace("topic para (from element) : " + element.getText()); + String para = parseDocument(element); + log.debug("topic para (from parsing) : " + para); + buffer.append(indent(para)); + } + } finally { + // always mark the node as fired 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); + String result = buffer.toString(); + log.debug("composeTopic :\n" + result); return result; } @Override public String composeSideBar(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTransition(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeParagraph(Element e) { - String result = ""; - result += indent(e.getText(), level); - log.debug("composeParagraph : " + result); + String result = indent(e.getText(), level); + log.debug("composeParagraph :\n" + result); return result; } @Override public String composeCompound(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeContainer(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeBulletList(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeEnumeratedList(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeListItem(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDefinitionList(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDefinitionListItem(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTerm(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeClassifier(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDefinition(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeFieldList(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeField(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeFieldName(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeFieldBody(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeOptionList(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeOptionListItem(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeOptionGroup(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeOption(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeOptionString(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeOptionArgument(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDescription(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeLiteralBlock(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeLineBlock(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeLine(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeBlockQuote(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAttribution(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDocTestBlock(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAttention(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeCaution(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeDanger(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeError(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeHint(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeImportant(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeNote(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTip(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeWarning(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAdmonition(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeFootnote(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeCitation(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeLabel(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeRubric(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTarget(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeSubstitutionDefinition(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeComment(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composePending(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeFigure(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeImage(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeCaption(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeLegend(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeSystemMessage(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeRaw(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTable(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTgroup(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeColspec(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeThead(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTbody(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeRow(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeEntry(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeEmphasis(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeStrong(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeLiteral(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeReference(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeFootnoteReference(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeCitationReference(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeSubstitutionReference(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeTitleReference(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAbbreviation(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeAcronyme(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeSuperscipt(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeSubscript(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeInline(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeProblematic(Element e) { - return ""; + return EMPTY_STRING; } @Override public String composeGenerated(Element e) { - return ""; + return EMPTY_STRING; } - protected String indent(String toIndent){ + 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; - } } Deleted: trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java =================================================================== --- trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java 2009-08-16 12:05:26 UTC (rev 392) +++ trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsConvertisor.java 2009-08-16 12:07:32 UTC (rev 393) @@ -1,283 +0,0 @@ -/* - * 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); -} Modified: trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java =================================================================== --- trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java 2009-08-16 12:05:26 UTC (rev 392) +++ trunk/jrst/src/main/java/org/nuiton/jrst/convertisor/DocUtilsVisitor.java 2009-08-16 12:07:32 UTC (rev 393) @@ -1,81 +1,547 @@ -/* - * 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; +import org.nuiton.jrst.ReStructuredText; /** * * @author letellier */ +public abstract class DocUtilsVisitor extends VisitorSupport { -public class DocUtilsVisitor extends VisitorSupport{ - + public static final String EMPTY_STRING = ""; + public static final String LINE_SEPARATOR = "\n"; + public static final String SPACE = " "; /** 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 + // Enregistre les elements parse pour ne jamais les revisiter protected List<Element> cachedElements; + // le resultat de la visite + protected StringBuilder rstResult; - protected String rstResult = ""; + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Root Element + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + public abstract String composeDocument(Element e); - public DocUtilsVisitor(){ + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // 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); + + public DocUtilsVisitor() { cachedElements = new ArrayList<Element>(); + rstResult = new StringBuilder(); } - public void setCachedElements(List<Element> cachedElements){ - this.cachedElements = cachedElements; - } + @Override + public void visit(Element e) { - public List<Element> getCachedElements(){ - return cachedElements; - } + if (!cachedElements.contains(e)) { + log.debug("entre element " + e.getName()); + addCachedElement(e); - // Permet de ne jamais repasser sur ce noeud - public void addCachedElement(Element e){ - cachedElements.add(e); - } + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Root Element + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (elementEquals(ReStructuredText.DOCUMENT, e)) { + appendResult(composeDocument(e)); + } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Title Elements + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + else if (elementEquals(ReStructuredText.TITLE, e)) { + appendResult(composeTitle(e)); + } else if (elementEquals(ReStructuredText.SUBTITLE, e)) { + appendResult(composeSubTitle(e)); + } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Bibliographic Elements + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + else if (elementEquals(ReStructuredText.DOCINFO, e)) { + appendResult(composeDocInfo(e)); - public void addCachedElements(List<Element> elements){ - cachedElements.addAll(elements); + // } else if (elementEquals(ReStructuredText.INFO,e)) { appendResult(composeInfo(e)); + } else if (elementEquals(ReStructuredText.AUTHOR, e)) { + appendResult(composeAutor(e)); + } else if (elementEquals(ReStructuredText.AUTHORS, e)) { + appendResult(composeAutors(e)); + } else if (elementEquals(ReStructuredText.ORGANIZATION, e)) { + appendResult(composeOrganisation(e)); + } else if (elementEquals(ReStructuredText.ADDRESS, e)) { + appendResult(composeAddress(e)); + } else if (elementEquals(ReStructuredText.CONTACT, e)) { + appendResult(composeContact(e)); + } else if (elementEquals(ReStructuredText.VERSION, e)) { + appendResult(composeVersion(e)); + } else if (elementEquals(ReStructuredText.REVISION, e)) { + appendResult(composeResvision(e)); + } else if (elementEquals(ReStructuredText.STATUS, e)) { + appendResult(composeStatus(e)); + } else if (elementEquals(ReStructuredText.DATE, e)) { + appendResult(composeDate(e)); + } else if (elementEquals(ReStructuredText.COPYRIGHT, e)) { + appendResult(composeCopyright(e)); + } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Decoration Elements + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + else if (elementEquals(ReStructuredText.DECORATION, e)) { + appendResult(composeDecoration(e)); + } else if (elementEquals(ReStructuredText.HEADER, e)) { + appendResult(composeHeader(e)); + } else if (elementEquals(ReStructuredText.FOOTER, e)) { + appendResult(composeFooter(e)); + } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Structural Elements + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + else if (elementEquals(ReStructuredText.SECTION, e)) { + appendResult(composeSection(e)); + } else if (elementEquals(ReStructuredText.TOPIC, e)) { + appendResult(composeTopic(e)); + } else if (elementEquals(ReStructuredText.SIDEBAR, e)) { + appendResult(composeSideBar(e)); + } else if (elementEquals(ReStructuredText.TRANSITION, e)) { + appendResult(composeTransition(e)); + } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Body Elements + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + else if (elementEquals(ReStructuredText.PARAGRAPH, e)) { + appendResult(composeParagraph(e)); + } else if (elementEquals(ReStructuredText.COMPOUND, e)) { + appendResult(composeCompound(e)); + } else if (elementEquals(ReStructuredText.CONTAINER, e)) { + appendResult(composeContainer(e)); + } else if (elementEquals(ReStructuredText.BULLET_LIST, e)) { + appendResult(composeBulletList(e)); + } else if (elementEquals(ReStructuredText.ENUMERATED_LIST, e)) { + appendResult(composeEnumeratedList(e)); + } else if (elementEquals(ReStructuredText.LIST_ITEM, e)) { + appendResult(composeListItem(e)); + } else if (elementEquals(ReStructuredText.DEFINITION_LIST, e)) { + appendResult(composeDefinitionList(e)); + } else if (elementEquals(ReStructuredText.DEFINITION_LIST_ITEM, e)) { + appendResult(composeDefinitionListItem(e)); + } else if (elementEquals(ReStructuredText.TERM, e)) { + appendResult(composeTerm(e)); + } else if (elementEquals(ReStructuredText.CLASSIFIER, e)) { + appendResult(composeClassifier(e)); + } else if (elementEquals(ReStructuredText.DEFINITION, e)) { + appendResult(composeDefinition(e)); + } else if (elementEquals(ReStructuredText.FIELD_LIST, e)) { + appendResult(composeFieldList(e)); + } else if (elementEquals(ReStructuredText.FIELD, e)) { + appendResult(composeField(e)); + } else if (elementEquals(ReStructuredText.FIELD_NAME, e)) { + appendResult(composeFieldName(e)); + } else if (elementEquals(ReStructuredText.FIELD_BODY, e)) { + appendResult(composeFieldBody(e)); + } else if (elementEquals(ReStructuredText.OPTION_LIST, e)) { + appendResult(composeOptionList(e)); + } else if (elementEquals(ReStructuredText.OPTION_LIST_ITEM, e)) { + appendResult(composeOptionListItem(e)); + } else if (elementEquals(ReStructuredText.OPTION_GROUP, e)) { + appendResult(composeOptionGroup(e)); + } else if (elementEquals(ReStructuredText.OPTION, e)) { + appendResult(composeOption(e)); + } else if (elementEquals(ReStructuredText.OPTION_STRING, e)) { + appendResult(composeOptionString(e)); + } else if (elementEquals(ReStructuredText.OPTION_ARGUMENT, e)) { + appendResult(composeOptionArgument(e)); + } else if (elementEquals(ReStructuredText.DESCRIPTION, e)) { + appendResult(composeDescription(e)); + } else if (elementEquals(ReStructuredText.LITERAL_BLOCK, e)) { + appendResult(composeLiteralBlock(e)); + } else if (elementEquals(ReStructuredText.LINE_BLOCK, e)) { + appendResult(composeLineBlock(e)); + } else if (elementEquals(ReStructuredText.LINE, e)) { + appendResult(composeLine(e)); + } else if (elementEquals(ReStructuredText.BLOCK_QUOTE, e)) { + appendResult(composeBlockQuote(e)); + } else if (elementEquals(ReStructuredText.ATTRIBUTION, e)) { + appendResult(composeAttribution(e)); + } else if (elementEquals(ReStructuredText.DOCTEST_BLOCK, e)) { + appendResult(composeDocTestBlock(e)); + } else if (elementEquals(ReStructuredText.ATTENTION, e)) { + appendResult(composeAttention(e)); + } else if (elementEquals(ReStructuredText.CAUTION, e)) { + appendResult(composeCaution(e)); + } else if (elementEquals(ReStructuredText.DANGER, e)) { + appendResult(composeDanger(e)); + } else if (elementEquals(ReStructuredText.ERROR, e)) { + appendResult(composeError(e)); + } else if (elementEquals(ReStructuredText.HINT, e)) { + appendResult(composeHint(e)); + } else if (elementEquals(ReStructuredText.IMPORTANT, e)) { + appendResult(composeImportant(e)); + } else if (elementEquals(ReStructuredText.NOTE, e)) { + appendResult(composeNote(e)); + } else if (elementEquals(ReStructuredText.TIP, e)) { + appendResult(composeTip(e)); + } else if (elementEquals(ReStructuredText.WARNING, e)) { + appendResult(composeWarning(e)); + } else if (elementEquals(ReStructuredText.ADMONITION, e)) { + appendResult(composeAdmonition(e)); + } else if (elementEquals(ReStructuredText.FOOTNOTE, e)) { + appendResult(composeFootnote(e)); + } else if (elementEquals(ReStructuredText.CITATION, e)) { + appendResult(composeCitation(e)); + } else if (elementEquals(ReStructuredText.LABEL, e)) { + appendResult(composeLabel(e)); + } else if (elementEquals(ReStructuredText.RUBRIC, e)) { + appendResult(composeRubric(e)); + } else if (elementEquals(ReStructuredText.TARGET, e)) { + appendResult(composeTarget(e)); + } else if (elementEquals(ReStructuredText.SUBSTITUTION_DEFINITION, e)) { + appendResult(composeSubstitutionDefinition(e)); + } else if (elementEquals(ReStructuredText.COMMENT, e)) { + appendResult(composeComment(e)); + } else if (elementEquals(ReStructuredText.PENDING, e)) { + appendResult(composePending(e)); + } else if (elementEquals(ReStructuredText.FIGURE, e)) { + appendResult(composeFigure(e)); + } else if (elementEquals(ReStructuredText.IMAGE, e)) { + appendResult(composeImage(e)); + } else if (elementEquals(ReStructuredText.CAPTION, e)) { + appendResult(composeCaption(e)); + } else if (elementEquals(ReStructuredText.LEGEND, e)) { + appendResult(composeLegend(e)); + } else if (elementEquals(ReStructuredText.SYSTEM_MESSAGE, e)) { + appendResult(composeSystemMessage(e)); + } else if (elementEquals(ReStructuredText.RAW, e)) { + appendResult(composeRaw(e)); + + // table + } else if (elementEquals(ReStructuredText.TABLE, e)) { + appendResult(composeTable(e)); + } else if (elementEquals(ReStructuredText.TGROUP, e)) { + appendResult(composeTgroup(e)); + } else if (elementEquals(ReStructuredText.COLSPEC, e)) { + appendResult(composeColspec(e)); + } else if (elementEquals(ReStructuredText.THEAD, e)) { + appendResult(composeThead(e)); + } else if (elementEquals(ReStructuredText.TBODY, e)) { + appendResult(composeTbody(e)); + } else if (elementEquals(ReStructuredText.ROW, e)) { + appendResult(composeRow(e)); + } else if (elementEquals(ReStructuredText.ENTRY, e)) { + appendResult(composeEntry(e)); + } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Inline Elements + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + else if (elementEquals(ReStructuredText.EMPHASIS, e)) { + appendResult(composeEmphasis(e)); + } else if (elementEquals(ReStructuredText.STRONG, e)) { + appendResult(composeStrong(e)); + } else if (elementEquals(ReStructuredText.LITERAL, e)) { + appendResult(composeLiteral(e)); + } else if (elementEquals(ReStructuredText.REFERENCE, e)) { + appendResult(composeReference(e)); + } else if (elementEquals(ReStructuredText.FOOTNOTE_REFERENCE, e)) { + appendResult(composeFootnoteReference(e)); + } else if (elementEquals(ReStructuredText.CITATION_REFERENCE, e)) { + appendResult(composeCitationReference(e)); + } else if (elementEquals(ReStructuredText.SUBSTITUTION_REFERENCE, e)) { + appendResult(composeSubstitutionReference(e)); + } else if (elementEquals(ReStructuredText.TITLE_REFERENCE, e)) { + appendResult(composeTitleReference(e)); + } else if (elementEquals(ReStructuredText.ABBREVIATION, e)) { + appendResult(composeAbbreviation(e)); + } else if (elementEquals(ReStructuredText.ACRONYM, e)) { + appendResult(composeAcronyme(e)); + } else if (elementEquals(ReStructuredText.SUPERSCRIPT, e)) { + appendResult(composeSuperscipt(e)); + } else if (elementEquals(ReStructuredText.SUBSCRIPT, e)) { + appendResult(composeSubscript(e)); + } else if (elementEquals(ReStructuredText.INLINE, e)) { + appendResult(composeInline(e)); + } else if (elementEquals(ReStructuredText.PROBLEMATIC, e)) { + appendResult(composeProblematic(e)); + } else if (elementEquals(ReStructuredText.GENERATED, e)) { + appendResult(composeGenerated(e)); + } + + } } - public String parseDocument(Element el){ + public String parseDocument(Element el) { try { - // FIXME : Cette partie ne marche pas corectement... - log.info("This element : " + el.getName()); + if (log.isDebugEnabled()) { + log.debug("This element : " + el.getName()); + } - // Creation dune nouvelle instance du visitor utilise + // Creation dune nouvelle instance du visitor utilise DocUtilsVisitor visitor = this.getClass().newInstance(); - // Traitement recursif (pour parser un document dans un autre - el.accept(visitor); + // Traitement recursif (pour parser un document dans un autre) + try { + el.accept(visitor); + String result = visitor.getResult(); + if (log.isDebugEnabled()) { + log.debug("document parsing result:\n" + result); + } + return result; + } finally { + // Recuperation des elements parcourus + addCachedElements(visitor.getCachedElements()); + // nettoyage du visiteur temporaire + visitor.clear(); + } - // 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); + if (log.isErrorEnabled()) { + log.error("Cant compose document for reason " + ex.getMessage(), ex); + } + //FIXME : TC-20090816 should deal better the exception ? + return EMPTY_STRING; } - return rstResult; } - public String getResult(){ - return rstResult; + public String getResult() { + return rstResult.toString(); } + public void clear() { + cachedElements.clear(); + rstResult = null; + } + + protected void appendResult(String result) { + rstResult.append(result); + } + + protected boolean elementEquals(String name, Element e) { + return e.getName().equals(name); + } + + protected List<Element> getCachedElements() { + return cachedElements; + } + + // Permet de ne jamais repasser sur ce noeud + protected void addCachedElement(Element e) { + cachedElements.add(e); + } + + protected void addCachedElements(List<Element> elements) { + cachedElements.addAll(elements); + } + + protected String indent(String toIndent, int l) { + String prefix = EMPTY_STRING; + for (int i = 0; i < l; i++) { + prefix += SPACE; + } + StringBuilder buffer = new StringBuilder(); + for (String s : toIndent.split(LINE_SEPARATOR)) { + buffer.append(prefix).append(s).append(LINE_SEPARATOR); + } + return buffer.toString(); + } } Added: trunk/jrst/src/test/java/org/nuiton/jrst/JRSTTest.java =================================================================== --- trunk/jrst/src/test/java/org/nuiton/jrst/JRSTTest.java (rev 0) +++ trunk/jrst/src/test/java/org/nuiton/jrst/JRSTTest.java 2009-08-16 12:07:32 UTC (rev 393) @@ -0,0 +1,95 @@ +package org.nuiton.jrst; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + * @author chemit + */ +public class JRSTTest { + + /** to use log facility, just put in your code: log.info("..."); */ + protected static Log log = LogFactory.getLog(JRSTTest.class); + static File basedir; + static File testBasedir; + + @BeforeClass + public static void beforeClass() { + String tmp = System.getProperty("basedir"); + if (tmp == null || tmp.isEmpty()) { + tmp = new File("").getAbsolutePath(); + } + basedir = new File(tmp); + testBasedir = new File(basedir, + "target" + File.separator + + "tests" + File.separator + + // "tests-" + System.nanoTime() + File.separator + + JRSTTest.class.getName()); + testBasedir.mkdirs(); + log.info("test basedir : " + testBasedir); + } + + @Test + public void testToRst() throws IOException { + File in = new File(testBasedir, "toRst1-in.rst"); + + List<String> IN_LINES = Arrays.asList(new String[]{ + "=====", + "Title", + "=====", + // "", + "SubTitle", + "--------", + // "", + ".. topic:: TopicTitle", + // "", + " TopicBody.", + // "", + // "", + "Another body outside of the topic :)" + }); + List<String> OUT_LINES = Arrays.asList(new String[]{ + "Title", + "-----", + // "", + "SubTitle", + "--------", + // "", + ".. topic:: TopicTitle", + // "", + " TopicBody.", + // "", + // "", + "Another body outside of the topic :)" + }); + + FileUtils.writeLines(in, IN_LINES); + + File out = new File(testBasedir, "toRst1-out.rst"); + try { + JRST.generate(JRST.TYPE_RST, in, out, JRST.Overwrite.ALLTIME); + + } catch (Exception e) { + log.error(e); + Assert.fail(e.getMessage()); + } + List<?> readLines = FileUtils.readLines(out); + // the title == Title === is transformed in Title ---- + Assert.assertEquals(OUT_LINES.size(), readLines.size()); + for (int i = 0, j = OUT_LINES.size(); i < j; i++) { + String inLine = OUT_LINES.get(i); + String outLine = (String) readLines.get(i); + Assert.assertEquals(inLine, outLine); + + } + } +}