pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / src / site / src / documentation / skins / common / xslt / html / pathutils.xsl
diff --git a/lucene-java-3.5.0/lucene/src/site/src/documentation/skins/common/xslt/html/pathutils.xsl b/lucene-java-3.5.0/lucene/src/site/src/documentation/skins/common/xslt/html/pathutils.xsl
new file mode 100644 (file)
index 0000000..c1639a4
--- /dev/null
@@ -0,0 +1,231 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!--
+PathUtils.xsl
+
+A set of XSLT templates useful for parsing URI paths:
+
+dirname: return the directory part of a path
+filename: return the file part of a path
+ext: return the last extension of the filename in a path
+filename-noext: return the file part of a path without its last extension
+
+-->
+<!-- Returns the directory part of a path.  Equivalent to Unix 'dirname'.
+Examples:
+'' -> ''
+'foo/index.html' -> 'foo/'
+-->
+  <xsl:template name="dirname">
+    <xsl:param name="path" />
+    <xsl:if test="contains($path, '/')">
+      <xsl:value-of select="concat(substring-before($path, '/'), '/')" />
+      <xsl:call-template name="dirname">
+        <xsl:with-param name="path"
+        select="substring-after($path, '/')" />
+      </xsl:call-template>
+    </xsl:if>
+  </xsl:template>
+<!-- Normalized (..'s eliminated) version of 'dirname' -->
+  <xsl:template name="dirname-nz">
+    <xsl:param name="path" />
+    <xsl:call-template name="normalize">
+      <xsl:with-param name="path">
+        <xsl:call-template name="dirname">
+          <xsl:with-param name="path" select="$path" />
+        </xsl:call-template>
+      </xsl:with-param>
+    </xsl:call-template>
+  </xsl:template>
+<!-- Returns the filename part of a path.  Equivalent to Unix 'basename'
+Examples:
+'index.html'  ->  'index.html' 
+'foo/bar/'  ->  '' 
+'foo/bar/index.html'  ->  'index.html' 
+-->
+  <xsl:template name="filename">
+    <xsl:param name="path"/>
+    <xsl:choose>
+      <xsl:when test="contains($path, '/')">
+        <xsl:call-template name="filename">
+          <xsl:with-param name="path" select="substring-after($path, '/')"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$path"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+<!-- Returns the last extension of a filename in a path.
+Examples:
+'index.html'  ->  '.html' 
+'index.dtdx.html'  ->  '.html' 
+'foo/bar/'  ->  '' 
+'foo/bar/index.html'  ->  '.html' 
+'foo/bar/index'  ->  '' 
+-->
+  <xsl:template name="ext">
+    <xsl:param name="path"/>
+    <xsl:param name="subflag"/>
+<!-- Outermost call? -->
+    <xsl:choose>
+      <xsl:when test="contains($path, '.')">
+        <xsl:call-template name="ext">
+          <xsl:with-param name="path" select="substring-after($path, '.')"/>
+          <xsl:with-param name="subflag" select="'sub'"/>
+        </xsl:call-template>
+      </xsl:when>
+<!-- Handle extension-less filenames by returning '' -->
+      <xsl:when test="not($subflag) and not(contains($path, '.'))">
+<xsl:text/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="concat('.', $path)"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+<!-- Returns a filename of a path stripped of its last extension.
+Examples:
+'foo/bar/index.dtdx.html' -> 'index.dtdx'
+-->
+  <xsl:template name="filename-noext">
+    <xsl:param name="path"/>
+    <xsl:variable name="filename">
+      <xsl:call-template name="filename">
+        <xsl:with-param name="path" select="$path"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="ext">
+      <xsl:call-template name="ext">
+        <xsl:with-param name="path" select="$filename"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:value-of select="substring($filename, 1, string-length($filename) - string-length($ext))"/>
+  </xsl:template>
+<!-- Returns a path with the filename stripped of its last extension.
+Examples:
+'foo/bar/index.dtdx.html' -> 'foo/bar/index.dtdx'
+-->
+  <xsl:template name="path-noext">
+    <xsl:param name="path"/>
+    <xsl:variable name="ext">
+      <xsl:call-template name="ext">
+        <xsl:with-param name="path" select="$path"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:value-of select="substring($path, 1, string-length($path) - string-length($ext))"/>
+  </xsl:template>
+<!-- Normalized (..'s eliminated) version of 'path-noext' -->
+  <xsl:template name="path-noext-nz">
+    <xsl:param name="path" />
+    <xsl:call-template name="normalize">
+      <xsl:with-param name="path">
+        <xsl:call-template name="path-noext">
+          <xsl:with-param name="path" select="$path" />
+        </xsl:call-template>
+      </xsl:with-param>
+    </xsl:call-template>
+  </xsl:template>
+<!-- Returns a path with any fragment identifier ('#...') stripped off
+Examples:
+'foo/bar/index.dtdx.html#blah' -> 'foo/bar/index.dtdx.html'
+-->
+  <xsl:template name="path-nofrag">
+    <xsl:param name="path"/>
+    <xsl:if test="not(contains($path, '#'))">
+      <xsl:value-of select="$path"/>
+    </xsl:if>
+    <xsl:if test="contains($path, '#')">
+      <xsl:value-of select="substring-before($path, '#')"/>
+    </xsl:if>
+  </xsl:template>
+<!-- Normalizes a path, converting '/' to '\' and eliminating ..'s
+Examples:
+'foo/bar/../baz/index.html' -> foo/baz/index.html'
+-->
+  <xsl:template name="normalize">
+    <xsl:param name="path"/>
+<!-- replace all \  with / -->
+    <xsl:variable name="path-" select="translate($path, '\', '/')"/>
+    <xsl:choose>
+<!-- process relative refs here -->
+      <xsl:when test="contains($path-, '/../')">
+<!--  put part before /../ into $pa: "foo/bar" -->
+        <xsl:variable name="pa" select="substring-before($path-, '/../')"/>
+<!-- put part after first occurrence /../ into $th: "baz/index.html" -->
+        <xsl:variable name="th" select="substring-after($path-, '/../')"/>
+<!-- cut last real directory name before /../ and put rest in $pa- : "foo/"  -->
+        <xsl:variable name="pa-">
+          <xsl:call-template name="dirname">
+            <xsl:with-param name="path" select="$pa"/>
+          </xsl:call-template>
+        </xsl:variable>
+<!-- recombine pieces thus eliminating one .. and one dir step before it
+              and recurse into this template to eliminate more /../
+      -->
+        <xsl:variable name="pa-th" select="concat($pa-, $th)"/>
+        <xsl:call-template name="normalize">
+          <xsl:with-param name="path" select="$pa-th"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$path-"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+<!--
+Uncomment this to test.
+Usage: saxon pathutils.xsl pathutils.xsl path=foo/bar
+
+<xsl:param name="path" select="'/foo/bar/../baz/index.html'"/>
+<xsl:template match="/">
+  <xsl:message>
+    path           = <xsl:value-of select="$path"/>
+    normalize      = <xsl:call-template name="normalize">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    dirname        = <xsl:call-template name="dirname">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    dirname-nz     = <xsl:call-template name="dirname-nz">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    filename       = <xsl:call-template name="filename">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    ext            = <xsl:call-template name="ext">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    filename-noext = <xsl:call-template name="filename-noext">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    path-noext     = <xsl:call-template name="path-noext">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    path-noext-nz  = <xsl:call-template name="path-noext-nz">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+    path-nofrag    = <xsl:call-template name="path-nofrag">
+      <xsl:with-param name="path" select="$path"/>
+    </xsl:call-template>
+  </xsl:message>
+</xsl:template>
+-->
+</xsl:stylesheet>