Mailing List Archive

svn commit: r1435063 - in /forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki: resources/chaperon/grammars/wiki.grm resources/chaperon/stylesheets/wiki2xdoc.xsl status.xml
Author: sjur
Date: Fri Jan 18 09:54:19 2013
New Revision: 1435063

URL: http://svn.apache.org/viewvc?rev=1435063&view=rev
Log:
A number of changes:
* Added support for definition list constructs (<code>;Term:definition</code>).
* Fixed numerous spacing bugs: extra or missing spaces after inline elements.
* Improved support for inline formatting and breaks, especially in tables.
* Fixed processing of no-link constructs: <code>[[text]</code> should be
rendered as <code>[text]</code>, earlier it was rendered as <code>[[text]</code>.

The plugin should now support all relevant <a href="http://www.jspwiki.org/wiki/TextFormattingRules">jspwiki markup</a>.

As part of the changes, I also added whitespace to the grammar and the xsl, to make them more readable. I also added comments to the xsl.

Modified:
forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/grammars/wiki.grm
forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/stylesheets/wiki2xdoc.xsl
forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/status.xml

Modified: forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/grammars/wiki.grm
URL: http://svn.apache.org/viewvc/forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/grammars/wiki.grm?rev=1435063&r1=1435062&r2=1435063&view=diff
==============================================================================
--- forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/grammars/wiki.grm (original)
+++ forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/grammars/wiki.grm Fri Jan 18 09:54:19 2013
@@ -33,19 +33,30 @@

%token source "\{\{\{ (\}{0,2}[^\}])* \}\}\}";

+%token text "([^\ \t\n\r\[\{\}\|\*\\\-_!#';:]
+ | _[^_\n\r]
+ | \{[^\{\n\r]
+ | \}[^\}\n\r]
+ | '[^'\n\r]
+ | \[\[
+ | \\[^\\\n\r]
+ | \-{1,3}[^\-\n\r]?)
+ ([^ \n\r\[\{\}\|\\\-_':]
+ | _[^_\n\r]
+ | \{[^\{\n\r]
+ | \}[^\}\n\r]
+ | '[^'\n\r]
+ | \[\[
+ | \\[^\\\n\r]
+ | \-{1,3}[^\-\n\r]?
+ | \|[^\|\ \t])*";
+
%token anchor "\[( [^\[\|\]]* \| )? # [^\[\|\]]* \]";

%token link "\[( [^\[\|\]]* \| )? [^\[\|\]]* \]";

-%token text "([^\ \t\n\r\[\{\}\|\*\\\-_!#'] | _[^_\n\r] | \{[^\{\n\r] | \}[^\}\n\r] | '[^'\n\r]
- | \[\[ | \\[^\\\n\r] | \-{1,3}[^\-\n\r]?)
- ([^ \n\r\[\{\}\|\\\-_'] | _[^_\n\r] | \{[^\{\n\r] | \}[^\}\n\r] | '[^'\n\r]
- | \[\[ | \\[^\\\n\r] | \-{1,3}[^\-\n\r]? | \|[^\|\ \t])*";
-
-%right softbreak "\r(\n?) | \n";
-
-%right break "\\\\";
-
+%right break "\\\\";
+%right softbreak "\r(\n?) | \n";
%right hardbreak "(\r(\n?) | \n) ([\ \t]* (\r(\n?) | \n))+";

%token bulleted1item "\*";
@@ -56,6 +67,9 @@
%token numbered2item "##";
%token numbered3item "###";

+%right deftermstart "\;";
+%token deftermdefstart "\:";
+
%ignore "[\ \t]+";

%start document;
@@ -143,6 +157,7 @@ paragraphs
paragraph
: bulletedlist1
| numberedlist1
+ | deflist
| textsequence
| line
| source %prec softbreak
@@ -240,24 +255,45 @@ tablecolumns
;

tablecolumn
- : tablecolumnitem textblock
+ : tablecolumnitem limitedtextsequence
;

-textsequence
- : textsequence textblock softbreak
- | textsequence textblock
+limitedtextsequence
+ : textblock break limitedtextsequence
+ | textblock limitedtextsequence
+ | textblock
+ ;
+
+textsequence
+ : textblock textsequence softbreak
+ | textblock textsequence
| textblock softbreak
| textblock
- | textsequence textblock break
- | textblock break
;

textblock
: link
| anchor
- | strongblock
- | emblock
- | text
+ | strongblock
+ | emblock
+ | text
+ | codeblock
+ | deftermdefstart
+ | break
+ ;
+
+termtextsequence
+ : termtextblock break termtextsequence
+ | termtextblock termtextsequence
+ | termtextblock
+ ;
+
+termtextblock
+ : link
+ | anchor
+ | strongblock
+ | emblock
+ | text
| codeblock
;

@@ -273,8 +309,22 @@ codeblock
: codeopenitem text codecloseitem
;

-/*
-deflistblock
- : defliststart text deflistnext
+deflist
+ : defentry deflist %prec PLUS
+ | defentry
+ ;
+
+defentry
+ : deflistterm deflistdef
+ ;
+
+deflistterm
+ : deftermstart termtextsequence
+ | deftermstart
+ ;
+
+deflistdef
+ : deftermdefstart textsequence
+ | deftermdefstart softbreak
+ | deftermdefstart
;
-*/

Modified: forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/stylesheets/wiki2xdoc.xsl
URL: http://svn.apache.org/viewvc/forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/stylesheets/wiki2xdoc.xsl?rev=1435063&r1=1435062&r2=1435063&view=diff
==============================================================================
--- forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/stylesheets/wiki2xdoc.xsl (original)
+++ forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/resources/chaperon/stylesheets/wiki2xdoc.xsl Fri Jan 18 09:54:19 2013
@@ -20,12 +20,13 @@
xmlns:st="http://chaperon.sourceforge.net/schema/syntaxtree/2.0"
exclude-result-prefixes="st">
<xsl:output indent="yes"
- method="html"
+ method="xml"
doctype-public="-//APACHE//DTD Documentation V1.1//EN"
doctype-system="document-v11.dtd"
cdata-section-elements="source"/>
<xsl:param name="name" select="''"/>
<xsl:param name="spaceless-filenames" select="''"/>
+
<xsl:template name="splitString">
<xsl:param name="restOfString"/>
<xsl:variable name="uppercase">(ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
@@ -62,6 +63,45 @@
</xsl:otherwise>
</xsl:choose>
</xsl:template>
+
+ <!-- Only add a space if the following char is not a punctuation mark: -->
+ <xsl:template name="addSpace">
+ <xsl:choose>
+ <xsl:when test="starts-with(./following::*[text()],'.') or
+ starts-with(./following::*[text()],',') or
+ starts-with(./following::*[text()],'!') or
+ starts-with(./following::*[text()],'?') or
+ starts-with(./following::*[text()],';') or
+ starts-with(./following::*[text()],':') or
+ starts-with(./following::*[text()],'&quot;') or
+ ./following::*[1]/st:deftermdefstart">
+ <xsl:text></xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="cleanNoLink">
+ <xsl:param name="String"/>
+ <xsl:choose>
+ <xsl:when test="contains($String,'[.[.')">
+ <xsl:variable name="StringBefore" select="substring-before($String,'[.[.')"/>
+ <xsl:variable name="StringAfter" select="substring-after($String,'[.[.')"/>
+
+ <xsl:value-of select="concat($StringBefore, '[.')"/>
+ <xsl:call-template name="cleanNoLink">
+ <xsl:with-param name="String" select="$StringAfter"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$String"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- Top level match: -->
<xsl:template match="st:output">
<document>
<header>
@@ -90,6 +130,8 @@
</body>
</document>
</xsl:template>
+
+ <!-- Sections: -->
<xsl:template match="st:section">
<section>
<title><xsl:value-of select="st:title/st:textsequence"/></title>
@@ -108,19 +150,24 @@
<xsl:apply-templates select="st:paragraphs/st:paragraph/*" mode="paragraph"/>
</section>
</xsl:template>
+
<xsl:template match="st:source" mode="paragraph">
<source>
<xsl:value-of select="substring(.,4,string-length(.)-6)"/>
</source>
</xsl:template>
+
<xsl:template match="st:textsequence" mode="paragraph">
<p>
<xsl:apply-templates select="st:textblock/*|st:break"/>
</p>
</xsl:template>
+
<xsl:template match="st:line" mode="paragraph">
<hr/>
</xsl:template>
+
+ <!-- Tables: -->
<xsl:template match="st:table" mode="paragraph">
<table>
<xsl:apply-templates select="st:tablehead|st:tablerows/st:tablecolumns"/>
@@ -141,18 +188,44 @@
<xsl:apply-templates select="st:tablecolumn"/>
</tr>
</xsl:template>
+
<xsl:template match="st:tablecolumn">
<td>
- <xsl:apply-templates select="st:textblock/*"/>
+ <xsl:apply-templates select="st:limitedtextsequence/st:textblock/*
+ | st:limitedtextsequence/st:break"/>
</td>
</xsl:template>
+
+ <!-- Textual content: -->
<xsl:template match="st:text">
+ <xsl:choose>
+ <xsl:when test="contains(.,'[.[.')">
+ <xsl:call-template name="cleanNoLink">
+ <xsl:with-param name="String" select="."/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:call-template name="addSpace"/>
+ </xsl:template>
+
+ <xsl:template match="st:deftermdefstart[not(ancestor::st:deflist)]" >
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
+
+ <xsl:template match="st:subsubtitleitem[parent::st:textblock]" >
+ <xsl:value-of select="."/>
+<xsl:text> </xsl:text>
+ </xsl:template>
+
<xsl:template match="st:break">
<br/>
</xsl:template>
+
+ <!-- Links: -->
<xsl:template match="st:link">
<xsl:choose>
<xsl:when test="contains(.,'|')">
@@ -171,7 +244,9 @@
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
+ <xsl:call-template name="addSpace"/>
</xsl:template>
+
<xsl:template name="convertLink" >
<xsl:param name="href0"/>
<xsl:param name="text"/>
@@ -181,16 +256,15 @@
</xsl:variable>
<xsl:choose>
<xsl:when test="string(number($href)) != 'NaN'"><link href="#{$href}">
- <xsl:value-of select="$text"/>
-<!-- $href --></link>
+ <xsl:value-of select="$text"/><!-- $href --></link>
</xsl:when>
<xsl:when test="contains($href,'.png') or contains($href,'.jpg') or contains($href,'.gif')">
<img src="{$href}" alt="{$text}"/>
<!-- $href -->
</xsl:when>
- <xsl:when test="contains($href,':') or contains($href,'.')"><link href="{$href}">
- <xsl:value-of select="$text"/>
-<!-- $href --></link>
+ <xsl:when test="contains($href,':') or contains($href,'.')">
+ <link href="{$href}">
+ <xsl:value-of select="$text"/><!-- $href --></link>
</xsl:when>
<xsl:otherwise><link>
<xsl:attribute name="href">
@@ -203,11 +277,11 @@
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
- <xsl:value-of select="$text"/>
-<!-- $href --></link>
+ <xsl:value-of select="$text"/><!-- $href --></link>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
+
<xsl:template match="st:anchor" >
<p>
<xsl:choose>
@@ -222,26 +296,34 @@
</xsl:otherwise>
</xsl:choose>
</p>
+
+ <!-- Inline formatting: -->
</xsl:template>
<xsl:template match="st:emblock"><em>
<xsl:value-of select="st:text"/></em>
-<xsl:text> </xsl:text>
+ <xsl:call-template name="addSpace"/>
</xsl:template>
<xsl:template match="st:strongblock"><strong>
<xsl:value-of select="st:text"/></strong>
-<xsl:text> </xsl:text>
+ <xsl:call-template name="addSpace"/>
</xsl:template>
<xsl:template match="st:codeblock"><code>
<xsl:value-of select="st:text"/></code>
-<xsl:text> </xsl:text>
+ <xsl:call-template name="addSpace"/>
</xsl:template>
+
+ <!-- Bulleted lists: -->
<xsl:template match="st:bulletedlist1" mode="paragraph">
<ul>
<xsl:apply-templates select="st:bulletedlistitem1"/>
</ul>
</xsl:template>
<xsl:template match="st:bulletedlistitem1" >
- <li><xsl:apply-templates select="st:textsequence/st:textblock/*|following-sibling::st:*[1][name() != 'bulletedlistitem1']"/></li>
+ <li>
+ <xsl:apply-templates select="st:textsequence/st:textblock/*
+ | following-sibling::st:*[1][name() != 'bulletedlistitem1']
+ | st:textsequence/st:break"/>
+ </li>
</xsl:template>
<xsl:template match="st:bulletedlist2" >
<ul>
@@ -249,7 +331,11 @@
</ul>
</xsl:template>
<xsl:template match="st:bulletedlistitem2" >
- <li><xsl:apply-templates select="st:textsequence/st:textblock/*|following-sibling::st:*[1][name() != 'bulletedlistitem2']"/></li>
+ <li>
+ <xsl:apply-templates select="st:textsequence/st:textblock/*
+ | following-sibling::st:*[1][name() != 'bulletedlistitem2']
+ | st:textsequence/st:break"/>
+ </li>
</xsl:template>
<xsl:template match="st:bulletedlist3" >
<ul>
@@ -257,32 +343,75 @@
</ul>
</xsl:template>
<xsl:template match="st:bulletedlistitem3" >
- <li><xsl:apply-templates select="st:textsequence/st:textblock/*"/></li>
+ <li>
+ <xsl:apply-templates select="st:textsequence/st:textblock/*
+ | st:textsequence/st:break"/>
+ </li>
</xsl:template>
+
+ <!-- Numbered lists: -->
<xsl:template match="st:numberedlist1" mode="paragraph">
<ol>
<xsl:apply-templates select="st:numberedlistitem1"/>
</ol>
</xsl:template>
<xsl:template match="st:numberedlistitem1" >
- <li><xsl:apply-templates select="st:textsequence/st:textblock/*|following-sibling::st:*[1][name() != 'numberedlistitem1']"/></li>
+ <li>
+ <xsl:apply-templates select="st:textsequence/st:textblock/*
+ | following-sibling::st:*[1][name() != 'numberedlistitem1']
+ | st:textsequence/st:break"/>
+ </li>
</xsl:template>
+
<xsl:template match="st:numberedlist2" >
<ol>
<xsl:apply-templates select="st:numberedlistitem2"/>
</ol>
</xsl:template>
<xsl:template match="st:numberedlistitem2" >
- <li><xsl:apply-templates select="st:textsequence/st:textblock/*|following-sibling::st:*[1][name() != 'numberedlistitem2']"/></li>
+ <li>
+ <xsl:apply-templates select="st:textsequence/st:textblock/*
+ | following-sibling::st:*[1][name() != 'numberedlistitem2']
+ | st:textsequence/st:break"/>
+ </li>
</xsl:template>
+
<xsl:template match="st:numberedlist3" >
<ol>
<xsl:apply-templates select="st:numberedlistitem3"/>
</ol>
</xsl:template>
<xsl:template match="st:numberedlistitem3" >
- <li><xsl:apply-templates select="st:textsequence/st:textblock/*"/></li>
+ <li>
+ <xsl:apply-templates select="st:textsequence/st:textblock/*
+ | st:textsequence/st:break"/>
+ </li>
+ </xsl:template>
+
+ <!-- Definition lists: -->
+ <xsl:template match="st:deflist" mode="paragraph">
+ <dl>
+ <xsl:apply-templates select="*"/>
+ </dl>
+ </xsl:template>
+ <xsl:template match="st:defentry">
+ <xsl:apply-templates select="./st:deflistterm"/>
+ <xsl:apply-templates select="./st:deflistdef"/>
+ </xsl:template>
+ <xsl:template match="st:deflistterm">
+ <dt>
+ <xsl:apply-templates select="st:termtextsequence/st:termtextblock/*
+ | st:termtextsequence/st:break"/>
+ </dt>
+ </xsl:template>
+ <xsl:template match="st:deflistdef">
+ <dd>
+ <xsl:apply-templates select="st:textsequence/st:textblock/*
+ | st:textsequence/st:break"/>
+ </dd>
</xsl:template>
+ <xsl:template match="st:deflist/st:softbreak" />
+
<xsl:template match="@*|*|text()|processing-instruction()" priority="-1">
<xsl:copy>
<xsl:apply-templates select="@*|*|text()|processing-instruction()"/>

Modified: forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/status.xml
URL: http://svn.apache.org/viewvc/forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/status.xml?rev=1435063&r1=1435062&r2=1435063&view=diff
==============================================================================
--- forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/status.xml (original)
+++ forrest/trunk/plugins/org.apache.forrest.plugin.input.wiki/status.xml Fri Jan 18 09:54:19 2013
@@ -23,6 +23,19 @@
</developers>
<changes>
<release version="0.2-dev" date="not-released">
+ <action type="fix" context="code" dev="SNM">
+ Added support for definition list constructs (<code>;Term:definition</code>).
+ Fixed numerous spacing bugs: extra or missing spaces after inline elements.
+ Improved support for inline formatting and breaks, especially in tables.
+ Fixed processing of no-link constructs: <code>[[text]</code> should be
+ rendered as <code>[text]</code>, earlier it was rendered as <code>[[text]</code>.
+ The plugin should now support all relevant <a
+ href="http://www.jspwiki.org/wiki/TextFormattingRules">jspwiki markup</a>.
+ </action>
+ <action type="fix" context="code" dev="SNM">
+ Fixed locationmap resource lookup, so that it is possible to override the
+ wiki parsing grammar and the wiki2xdocs stylesheet in the projecct source tree.
+ </action>
<action type="add" context="code" dev="SNM">
Added handling of localised content in wiki format, that is, filenames following the
<code>filename.locale.wiki</code> format, where each <code>locale</code> variant