$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r77636 - trunk/tools/boostbook/xsl
From: steven_at_[hidden]
Date: 2012-03-29 19:46:06
Author: steven_watanabe
Date: 2012-03-29 19:46:06 EDT (Thu, 29 Mar 2012)
New Revision: 77636
URL: http://svn.boost.org/trac/boost/changeset/77636
Log:
Initial support for highlighting jam code.
Text files modified: 
   trunk/tools/boostbook/xsl/annotation.xsl       |     6 +++                                     
   trunk/tools/boostbook/xsl/docbook.xsl          |     6 +++                                     
   trunk/tools/boostbook/xsl/source-highlight.xsl |    79 ++++++++++++++++++++++++++++++++++++++++
   3 files changed, 91 insertions(+), 0 deletions(-)
Modified: trunk/tools/boostbook/xsl/annotation.xsl
==============================================================================
--- trunk/tools/boostbook/xsl/annotation.xsl	(original)
+++ trunk/tools/boostbook/xsl/annotation.xsl	2012-03-29 19:46:06 EDT (Thu, 29 Mar 2012)
@@ -388,6 +388,12 @@
     </computeroutput>
   </xsl:template>
 
+  <xsl:template match="code[@lang='jam']" mode="annotation">
+    <computeroutput>
+      <xsl:apply-templates mode="annotation"/>
+    </computeroutput>
+  </xsl:template>
+
   <xsl:template match="bold" mode="annotation">
     <emphasis role="bold">
       <xsl:apply-templates mode="annotation"/>
Modified: trunk/tools/boostbook/xsl/docbook.xsl
==============================================================================
--- trunk/tools/boostbook/xsl/docbook.xsl	(original)
+++ trunk/tools/boostbook/xsl/docbook.xsl	2012-03-29 19:46:06 EDT (Thu, 29 Mar 2012)
@@ -392,6 +392,12 @@
     </computeroutput>
   </xsl:template>
 
+  <xsl:template match="code[@lang='jam']">
+    <computeroutput>
+      <xsl:apply-templates mode="highlight-jam"/>
+    </computeroutput>
+  </xsl:template>
+
   <xsl:template match="bold">
     <emphasis role="bold">
       <xsl:apply-templates mode="annotation"/>
Modified: trunk/tools/boostbook/xsl/source-highlight.xsl
==============================================================================
--- trunk/tools/boostbook/xsl/source-highlight.xsl	(original)
+++ trunk/tools/boostbook/xsl/source-highlight.xsl	2012-03-29 19:46:06 EDT (Thu, 29 Mar 2012)
@@ -435,6 +435,75 @@
     </xsl:choose>
   </xsl:template>
 
+  <!-- Jam syntax highlighting -->
+
+  <xsl:variable name="jam-keywords" select="' actions bind case class default else for if ignore in include local module on piecemeal quietly return rule switch together updated while '"/>
+  <xsl:variable name="jam-operators" select="' ! != & && ( ) += : ; < <= = > >= ?= [ ] { | || } '"/>
+
+  <xsl:template name="highlight-jam-word">
+    <xsl:param name="text"/>
+    <xsl:choose>
+      <xsl:when test="contains($jam-keywords, concat(' ', $text, ' '))">
+        <xsl:call-template name="highlight-keyword">
+          <xsl:with-param name="keyword" select="$text"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:when test="contains($jam-operators, concat(' ', $text, ' '))">
+        <xsl:call-template name="highlight-special">
+          <xsl:with-param name="text" select="$text"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$text"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template name="jam-word-length">
+    <xsl:param name="text"/>
+    <xsl:param name="pos" select="1"/>
+    <xsl:choose>
+      <xsl:when test="string-length($text) + 1= $pos">
+        <xsl:value-of select="$pos - 1"/>
+      </xsl:when>
+      <xsl:when test="contains(' 

	', substring($text, $pos, 1))">
+        <xsl:value-of select="$pos - 1"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:call-template name="jam-word-length">
+          <xsl:with-param name="text" select="$text"/>
+          <xsl:with-param name="pos" select="$pos + 1"/>
+        </xsl:call-template>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template name="highlight-jam-text">
+    <xsl:param name="text"/>
+    <xsl:choose>
+      <xsl:when test="string-length($text) = 0"/>
+      <xsl:when test="contains(' 

	', substring($text, 1, 1))">
+        <xsl:value-of select="substring($text, 1, 1)"/>
+        <xsl:call-template name="highlight-jam-text">
+          <xsl:with-param name="text" select="substring($text, 2)"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:variable name="length">
+          <xsl:call-template name="jam-word-length">
+            <xsl:with-param name="text" select="$text"/>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:call-template name="highlight-jam-word">
+          <xsl:with-param name="text" select="substring($text, 1, $length)"/>
+        </xsl:call-template>
+        <xsl:call-template name="highlight-jam-text">
+          <xsl:with-param name="text" select="substring($text, $length + 1)"/>
+        </xsl:call-template>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
   <!-- Perform C++ syntax highlighting on the given text -->
   <xsl:template name="highlight-text">
     <xsl:param name="text" select="."/>
@@ -481,4 +550,14 @@
     <xsl:apply-templates mode="highlight"/>
   </xsl:template>
 
+  <xsl:template match="*" mode="highlight-jam">
+    <xsl:apply-templates mode="annotation"/>
+  </xsl:template>
+
+  <xsl:template match="text()" mode="highlight-jam">
+    <xsl:call-template name="highlight-jam-text">
+      <xsl:with-param name="text" select="."/>
+    </xsl:call-template>
+  </xsl:template>
+
 </xsl:stylesheet>