Author: echatellier Date: 2011-03-10 11:35:45 +0100 (Thu, 10 Mar 2011) New Revision: 557 Url: http://nuiton.org/repositories/revision/jrst/557 Log: fix #647, options list parsing Modified: trunk/jrst/src/main/java/org/nuiton/jrst/JRSTLexer.java trunk/jrst/src/main/resources/xsl/rst2xhtml.xsl trunk/jrst/src/test/java/org/nuiton/jrst/bugs/TextTest.java trunk/jrst/src/test/resources/frEntier.rst Modified: trunk/jrst/src/main/java/org/nuiton/jrst/JRSTLexer.java =================================================================== --- trunk/jrst/src/main/java/org/nuiton/jrst/JRSTLexer.java 2011-03-09 10:57:52 UTC (rev 556) +++ trunk/jrst/src/main/java/org/nuiton/jrst/JRSTLexer.java 2011-03-10 10:35:45 UTC (rev 557) @@ -651,32 +651,37 @@ matcher.find(); String option_string = matcher.group(); option.addAttribute("option_string", option_string); - delimiter = option_stringTmp.charAt(matcher.end()); - option_stringTmp = option_stringTmp.substring( + + boolean done = false; + // Delimiteur bidon + delimiter = '.'; + if (option_stringTmp.length() > matcher.end()) { + delimiter = option_stringTmp.charAt(matcher.end()); + option_stringTmp = option_stringTmp.substring( matcher.end(), option_stringTmp.length()); + } else { + done = true; + } option.addAttribute("delimiterExiste", "false"); - boolean done = false; + if (delimiter == ' ') { // S'il y a 2 espaces a suivre, // l'option est finie if (option_stringTmp.charAt(1) == ' ') { done = true; } } + String option_argument = null; if ((delimiter == '=' || delimiter == ' ') && !done) { option.addAttribute("delimiterExiste", "true"); option.addAttribute("delimiter", "" + delimiter); - matcher = Pattern.compile(delimiter + "[<a-zA-Z][\\w-><\\.\\|]+").matcher( + matcher = Pattern.compile(delimiter + "(([a-zA-Z][\\w-]+)|(<[a-zA-Z][^>]*>))").matcher( option_stringTmp); - String option_argument; if (matcher.find()) { option_argument = matcher.group().substring(1, matcher.group().length()); option.addAttribute("option_argument", option_argument); if (option_stringTmp.charAt(option_argument.length() + 1) == ',') { delimiter = ','; - line = line.substring(option_string.length() - + option_argument.length() + 3, line - .length()); } else { done = true; } @@ -691,6 +696,10 @@ } } } + if (delimiter == ',') { + line = line.substring(option_string.length() + 1 + + (option_argument == null ? 0 : option_argument.length())); + } if (done) { result.setText(option_stringTmp.substring(matcher.end(), option_stringTmp.length()).trim() + " " + joinBlock(readBlock(1))); Modified: trunk/jrst/src/main/resources/xsl/rst2xhtml.xsl =================================================================== --- trunk/jrst/src/main/resources/xsl/rst2xhtml.xsl 2011-03-09 10:57:52 UTC (rev 556) +++ trunk/jrst/src/main/resources/xsl/rst2xhtml.xsl 2011-03-10 10:35:45 UTC (rev 557) @@ -478,12 +478,13 @@ <xsl:value-of select="option_string/text()"/> <xsl:value-of select="./option_argument/@delimiter"/> <xsl:apply-templates select="./option_argument"/> + <xsl:if test="position()!=last()">,</xsl:if> </span> </xsl:template> <xsl:template match="option_argument"> <var> - <xsl:value-of select="text()"/>, + <xsl:value-of select="text()"/> </var> </xsl:template> Modified: trunk/jrst/src/test/java/org/nuiton/jrst/bugs/TextTest.java =================================================================== --- trunk/jrst/src/test/java/org/nuiton/jrst/bugs/TextTest.java 2011-03-09 10:57:52 UTC (rev 556) +++ trunk/jrst/src/test/java/org/nuiton/jrst/bugs/TextTest.java 2011-03-10 10:35:45 UTC (rev 557) @@ -79,7 +79,6 @@ JRST.generate(JRST.TYPE_HTML, in, out, JRST.Overwrite.ALLTIME); String content = FileUtils.readFileToString(out); - System.out.println(content); Assert.assertTrue(content.indexOf("nuiton's forge") > 0); Assert.assertTrue(content.indexOf("build.xml") > 0); } @@ -108,8 +107,7 @@ * * @throws Exception */ - @Test(timeout=10000) - @Ignore + @Test public void testOptionLists() throws Exception { File in = new File("src/test/resources/bugs/testOptionsList644.rst"); File out = File.createTempFile("jrst-testOptionList644", ".html"); @@ -117,7 +115,6 @@ JRST.generate(JRST.TYPE_HTML, in, out, JRST.Overwrite.ALLTIME); String content = FileUtils.readFileToString(out); - System.out.println(content); Assert.assertTrue(content.indexOf("<span class=\"option\">-a</span>") > 0); Assert.assertTrue(content.indexOf("<p>options can have arguments and long descriptions</p>") > 0); Assert.assertTrue(content.indexOf("<v3region.zip|v2region.xml|v2region.xml.gz>") > 0); Modified: trunk/jrst/src/test/resources/frEntier.rst =================================================================== --- trunk/jrst/src/test/resources/frEntier.rst 2011-03-09 10:57:52 UTC (rev 556) +++ trunk/jrst/src/test/resources/frEntier.rst 2011-03-10 10:35:45 UTC (rev 557) @@ -831,7 +831,7 @@ ``|`` Gauche|Milieu Indique une alternative (un noeud ou bien l'autre (ou les deux)) / personne/nom Chemin d'accès aux éléments (personne/bras/gauche) * * Motif "joker" désignant n'importe quel élément -// //personne Indique tous les descendants d'un noeud +``//`` ``//̀``personne Indique tous les descendants d'un noeud . . Caractérise le noeud courant ``..`` ``..`` Désigne le noeud parent @ @valeur Indique un attribut caractéristique