gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r18396 - in gnunet-gtk: . contrib


From: gnunet
Subject: [GNUnet-SVN] r18396 - in gnunet-gtk: . contrib
Date: Tue, 29 Nov 2011 21:52:51 +0100

Author: grothoff
Date: 2011-11-29 21:52:51 +0100 (Tue, 29 Nov 2011)
New Revision: 18396

Added:
   gnunet-gtk/contrib/svn2cl.xsl
Removed:
   gnunet-gtk/ChangeLog
Modified:
   gnunet-gtk/Makefile.am
Log:
adding code for ChangeLog generation

Deleted: gnunet-gtk/ChangeLog
===================================================================
--- gnunet-gtk/ChangeLog        2011-11-29 20:51:13 UTC (rev 18395)
+++ gnunet-gtk/ChangeLog        2011-11-29 20:52:51 UTC (rev 18396)
@@ -1,258 +0,0 @@
-Mon Oct 31 11:53:57 CET 2011                                                   
                                                                                
                              
-       Releasing gnunet-gtk 0.9.0pre4.
-
-Mon Sep 19 14:25:55 CEST 2011
-       Releasing gnunet-gtk 0.9.0pre3.
-
-Fri Sep  9 10:43:26 CEST 2011
-       Initial draft for gnunet-peerinfo-gtk.
-       Fixing issues when compiling against Gtk 3.0 (which is now
-       required since we are clearly getting increasingly
-       incompatible with Gtk 2.6).
-
-Mon Aug 15 16:18:22 CEST 2011
-       Merging gnunet-setup and gnunet-gtk projects.
-
-Mon Nov  1 13:03:59 CET 2010
-       gnunet-setup started.
-
-Thu Dec 23 23:37:09 CET 2010
-       Releasing gnunet-gtk 0.9.0pre2.
-
-Sat Jul  3 20:47:22 CEST 2010
-       Releasing gnunet-gtk 0.9.0pre1.
-
-Sun Jun  6 00:47:21 CEST 2010
-       Upgrade to gettext-0.17.
-       Starting to track changes for gnunet-gtk 0.9.x-branch.
-
-Fri Feb 12 22:30:44 CET 2010
-       Releasing gnunet-gtk 0.8.1a.
-
-Tue Dec 29 12:24:04 CET 2009
-       Releasing gnunet-gtk 0.8.1.
-
-Sun Jul 20 15:28:04 MDT 2008
-       Releasing gnunet-gtk 0.8.0a.
-
-Sat Jun 14 00:54:39 MDT 2008
-       Releasing gnunet-gtk 0.8.0.
-
-Wed Jun 11 23:00:38 MDT 2008
-       Fixed icon installation and telling GTK about our
-       icon path.
-
-Sat Jun  7 17:54:49 MDT 2008
-       Added support for new namespace APIs.  Chat now uses
-       an icon to indicate which of the room members is the
-       local user.  Allowed user to leave chat room.  Fixed
-       warnings and various minor UI glitches.
-
-Sun Jun  1 21:11:54 MDT 2008
-       Releasing 0.8.0pre1.
-
-Sun May 18 17:28:43 MDT 2008
-       Removed libltdl tests and directory.  We do not need
-       those anymore since we use libgnunetutil anyway.
-
-Sun Mar  2 19:13:39 MST 2008
-       Releasing gnunet-gtk 0.8.0pre0.
-
-Sat Mar  1 23:07:18 MST 2008
-       Added DHT (dstore) utilization statistics.
-       Added trust (earned/spend/awarded) statistics.
-
-Sat Feb  9 19:39:24 MST 2008
-       Fixed lifelock caused by buggy semaphore operations
-       in event thread handler.  Added suspend/resume for
-       searches.  Added visual changes on aborted searches.
-       Removed timeout and max-result options from search
-       dialog (no longer required by ECRS/FSUI).  Fixed
-       signed/unsigned type issues in stats.  Migrated
-       gnunet-gtk GLADE file to GLADE-3 GUI (still getting
-       warnings).
-
-Thu Dec 20 19:54:19 MST 2007
-       Releasing gnunet-gtk 0.7.3.
-
-Sat Sep 29 16:57:14 MDT 2007
-       Releasing gnunet-gtk 0.7.2c.
-
-Fri Aug 24 19:49:21 MDT 2007
-       Fixing a few memory leaks.  Reducing memory
-       consumption of flag images (by sharing flag
-       instances between different peers).
-
-Mon Jul 30 00:39:20 MDT 2007
-       Releasing gnunet-gtk 0.7.2b.
-
-Sat Jul  7 02:37:10 MDT 2007
-       Releasing gnunet-gtk 0.7.2a.
-
-Fri Jul  6 23:07:42 MDT 2007
-       Fixed build issues with autoconf 1.10.
-
-Sun Jun 17 00:09:13 MDT 2007
-       Releasing gnunet-gtk 0.7.2.
-
-Sun Jun 10 19:32:33 MDT 2007
-       Completed support for namespaces.
-
-Thu May 31 20:53:50 MDT 2007
-       Added peer-info tab.  You must load the new "peers" module
-       to see it.
-
-Thu May 31 01:30:23 MDT 2007
-       Added color-coding of search results.
-       Added warning (red background) if anonymity level is zero.
-       Fixed (rare) deadlock.
-
-Sun Mar 25 13:49:12 MDT 2007
-       Releasing gnunet-gtk 0.7.1c.
-
-Thu Mar  1 00:03:44 MST 2007
-       Fixing issues with gettext (wrong path).
-
-Sat Feb 24 15:43:14 MST 2007
-       Improved performance of statistics querying code
-       (O(n^2) to O(n) where n is number of stats).
-
-Thu Feb 15 21:54:15 MST 2007
-       Added IO load statistics.
-
-Sun Feb 11 13:53:13 MST 2007
-        Releasing GNUnet 0.7.1b.
-
-Thu Feb  8 13:40:11 MST 2007
-       Upgrade to gettext-0.16.1.
-       Minor bugfix in build process (#1182).
-
-Sat Feb  3 22:03:52 MST 2007
-       Added ability to open gnunet-directory.
-
-Sat Feb  3 21:00:23 MST 2007
-       Added ability to save search results as gnunet-directory
-       (in right-click context menu).
-
-Sun Jan 28 20:16:46 MST 2007
-       Added ability to copy URIs of search results and
-       uploads to clipboard.
-
-Fri Dec 22 19:21:07 MST 2006
-       Releasing gnunet-gtk 0.7.1.
-
-Mon Dec 11 21:41:58 MST 2006
-       Releasing gnunet-gtk 0.7.1pre2.
-
-Sun Dec 10 00:35:16 MST 2006
-       Fixed deadlocks in FS plugin.
-
-Sun Dec  3 14:47:46 MST 2006
-       Buttons that cannot be used are now disabled.
-       Started downloads are marked using a yellow
-       background for size field in the search dialog.
-       Completed downloads are marked using a green
-       background.  When manually entering a path
-       for uploads, switch between recursive and
-       file-only is now automatic.  It is now possible
-       to remove keywords and metadata in the upload
-       dialog.
-
-Wed Nov 15 23:17:36 MST 2006
-       Updated to GNUnet 0.7.1pre0 APIs.  Disabled
-       incomplete or broken portions of FS API.
-       Added additional statistics on datastore.
-       Releasing gnunet-gtk 0.7.1pre0.
-
-Sat May 20 08:37:02 PDT 2006
-       Fixed some deadlocks and other minor bugs.
-       Releasing gnunet-gtk 0.7.0e.
-
-Sat May 13 19:45:41 PDT 2006
-       Added some additional stats.
-
-Sat May  6 00:17:59 PDT 2006
-       Releasing gnunet-gtk 0.7.0d.
-
-Wed Apr 26 10:33:43 PDT 2006
-       Added french translation.
-
-Sun Apr 23 05:30:17 PDT 2006
-       Cleaner shutdown code for open search windows, avoiding some
-       (harmless) crashes in certain versions of GTK library on exit.
-
-Sat Apr 22 13:50:39 PDT 200
-       Improved signaling in gtk-common library, resulting in better response 
times
-       (especially noticeable during shutdown).
-
-Sat Apr  1 16:24:27 PST 2006
-       Improved shutdown code.
-
-Sat Mar 25 10:14:44 PST 2006
-       Adding .desktop support.
-
-Sat Jan  7 02:38:37 PST 2006
-       Adding Swedish translation.
-
-Fri Dec 23 15:59:19 PST 2005
-       Releasing 0.7.0b.
-
-Sat Nov 19 16:13:19 PST 2005
-       Releasing 0.7.0a.
-
-Sun Aug 28 01:17:43 PDT 2005
-       Fixed various minor bugs, cleaned up name selection for downloads.
-       Releasing 0.7.0.
-
-Tue Aug 23 00:47:31 PDT 2005
-       Fixed bugs in shutdown sequence (unclean with respect to LOG,
-       resulted in warnings under certain circumstances).
-
-Sun Aug 21 19:57:19 PDT 2005
-       Fixed deadlock in download abort code.
-
-Sun Aug 21 18:42:14 PDT 2005
-       Fixed deadlock in gnunet-gtk shutdown.
-
-Sat Aug 20 21:06:56 PDT 2005
-       Added support for toggling collection of file identifiers.
-
-Sat Aug 20 13:51:01 PDT 2005
-       Releasing 0.7.0pre6.
-
-Thu Aug 18 21:18:28 PDT 2005
-       Made quotations match GNU standards.
-
-Wed Aug 17 23:51:13 PDT 2005
-       Fixed various minor bugs, including memory leaks.
-       Implemented auto-renaming.
-
-Mon Jul 18 01:30:09 CEST 2005
-       Releasing 0.7.0pre5.
-
-Fri Jul 15 13:06:40 CEST 2005
-       Fixed problem with gnunet-gtk hanging on shutdown.
-
-Sun Jul 10 00:59:03 CEST 2005
-       Added stats plugin.  Made gettext (internationalization)
-       work.  Minor bugfixes.
-
-Tue Jul  5 01:48:30 CEST 2005
-       Refactored code to use plugins for the different
-       applications (die monolithic code, die!).
-
-Sat Jul  2 17:21:07 CEST 2005
-       Fixed omissions from glade file.  Implemented
-       aborting downloads and clearing completed
-       downloads.  Releasing 0.7.0pre4.
-
-Mon Jun 27 17:21:09 CEST 2005
-       Merged old GNUnet po files for i18n.
-       Updated glade file for proper interaction
-       with intltool (do not translate dummy labels).
-
-Sun Jun 26 18:21:17 CEST 2005
-       Released 0.7.0pre3 (first release).
-
-Mon May 23 11:06:02 EST 2005
-        Started serious coding on glade-based gnunet-gtk.

Modified: gnunet-gtk/Makefile.am
===================================================================
--- gnunet-gtk/Makefile.am      2011-11-29 20:51:13 UTC (rev 18395)
+++ gnunet-gtk/Makefile.am      2011-11-29 20:52:51 UTC (rev 18396)
@@ -19,3 +19,16 @@
 EXTRA_DIST = \
   config.rpath  \
   install-sh mkinstalldirs 
+
+ChangeLog:
+       if test -f $(top_srcdir)/.svn/entries; then \
+               svn log -v --xml -r HEAD:18395 | \
+                       xsltproc --stringparam ignore-message-starting "-" \
+                                --stringparam strip-prefix "gnunet" \
+                                --stringparam include-rev "yes" 
$(top_srcdir)/contrib/svn2cl.xsl - > $@; \
+       fi
+
+dist: ChangeLog
+
+.PHONY: ChangeLog
+

Added: gnunet-gtk/contrib/svn2cl.xsl
===================================================================
--- gnunet-gtk/contrib/svn2cl.xsl                               (rev 0)
+++ gnunet-gtk/contrib/svn2cl.xsl       2011-11-29 20:52:51 UTC (rev 18396)
@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+
+   svn2cl.xsl - xslt stylesheet for converting svn log to a normal
+                changelog
+
+   version 0.11
+
+   Usage (replace ++ with two minus signs which aren't allowed
+   inside xml comments):
+     svn ++verbose ++xml log | \
+       xsltproc ++stringparam strip-prefix `basename $(pwd)` \
+                ++stringparam linelen 75 \
+                ++stringparam groupbyday yes \
+                ++stringparam separate-daylogs yes \
+                ++stringparam include-rev yes \
+                ++stringparam include-actions yes \
+                ++stringparam breakbeforemsg yes/2 \
+                ++stringparam reparagraph yes \
+                ++stringparam authorsfile FILE \
+                ++stringparam ignore-message-starting \
+                svn2cl.xsl - > ChangeLog
+
+   This file is based on several implementations of this conversion
+   that I was not completely happy with and some other common
+   xslt constructs found on the web.
+
+   Copyright (C) 2004, 2005, 2006, 2007 Arthur de Jong.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+   3. The name of the author may not be used to endorse or promote
+      products derived from this software without specific prior
+      written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+   IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+   IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+
+<!DOCTYPE xsl:stylesheet [
+ <!ENTITY space "&#32;">
+]>
+
+<xsl:stylesheet
+  version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+
+ <xsl:output
+   method="text"
+   encoding="utf-8"
+   media-type="text/plain"
+   omit-xml-declaration="yes"
+   standalone="yes"
+   indent="no" />
+
+ <xsl:strip-space elements="*" />
+
+ <!-- the prefix of pathnames to strip -->
+ <xsl:param name="strip-prefix" select="'/'" />
+
+ <!-- the length of a line to wrap messages at -->
+ <xsl:param name="linelen" select="75" />
+
+ <!-- whether entries should be grouped by day -->
+ <xsl:param name="groupbyday" select="'no'" />
+
+ <!-- whether to seperate log messages by empty lines -->
+ <xsl:param name="separate-daylogs" select="'no'" />
+
+ <!-- whether a revision number should be included -->
+ <xsl:param name="include-rev" select="'no'" />
+
+ <!-- whether aaction labels should be added to files -->
+ <xsl:param name="include-actions" select="'no'" />
+
+ <!-- whether the log message should start on a new line -->
+ <xsl:param name="breakbeforemsg" select="'no'" />
+
+ <!-- whether the message should be rewrapped within one paragraph -->
+ <xsl:param name="reparagraph" select="'no'" />
+
+ <!-- whether certain messages should be ignored -->
+ <xsl:param name="ignore-message-starting" select="''" />
+
+ <!-- location of authors file if any -->
+ <xsl:param name="authorsfile" select="''" />
+ <xsl:key name="author-lookup" match="author" use="@uid" />
+ <xsl:variable name="authors-top" select="document($authorsfile)/authors" />
+
+ <!-- match the topmost log entry -->
+ <xsl:template match="log">
+  <xsl:choose>
+   <xsl:when test="$ignore-message-starting != ''">
+    <!-- only handle logentries with don't contain the string -->
+    <xsl:apply-templates 
select="logentry[not(starts-with(msg,$ignore-message-starting))]" />
+   </xsl:when>
+   <xsl:otherwise>
+    <xsl:apply-templates select="logentry" />
+   </xsl:otherwise>
+  </xsl:choose>
+  <!-- add newlines at the end of the changelog -->
+  <xsl:text>&#xA;</xsl:text>
+ </xsl:template>
+
+ <!-- format one entry from the log -->
+ <xsl:template match="logentry">
+  <xsl:choose>
+   <!-- if we're grouping we should omit some headers -->
+   <xsl:when test="$groupbyday='yes'">
+    <!-- save log entry number -->
+    <xsl:variable name="pos" select="position()" />
+    <!-- fetch previous entry's date -->
+    <xsl:variable name="prevdate">
+     <xsl:apply-templates select="../logentry[position()=(($pos)-1)]/date" />
+    </xsl:variable>
+    <!-- fetch previous entry's author -->
+    <xsl:variable name="prevauthor">
+     <xsl:value-of 
select="normalize-space(../logentry[position()=(($pos)-1)]/author)" />
+    </xsl:variable>
+    <!-- fetch this entry's date -->
+    <xsl:variable name="date">
+     <xsl:apply-templates select="date" />
+    </xsl:variable>
+    <!-- fetch this entry's author -->
+    <xsl:variable name="author">
+     <xsl:value-of select="normalize-space(author)" />
+    </xsl:variable>
+    <!-- check if header is changed -->
+    <xsl:if test="($prevdate!=$date) or ($prevauthor!=$author)">
+     <!-- add newline -->
+     <xsl:if test="not(position()=1)">
+      <xsl:text>&#xA;</xsl:text>
+     </xsl:if>
+     <!-- date -->
+     <xsl:value-of select="$date" />
+     <!-- two spaces -->
+     <xsl:text>&space;&space;</xsl:text>
+     <!-- author's name -->
+     <xsl:apply-templates select="author" />
+     <!-- two newlines -->
+     <xsl:text>&#xA;</xsl:text>
+     <xsl:if 
test="$separate-daylogs!='yes'"><xsl:text>&#xA;</xsl:text></xsl:if>
+    </xsl:if>
+   </xsl:when>
+   <!-- write the log header -->
+   <xsl:otherwise>
+    <!-- add newline -->
+    <xsl:if test="not(position()=1)">
+     <xsl:text>&#xA;</xsl:text>
+    </xsl:if>
+    <!-- date -->
+    <xsl:apply-templates select="date" />
+    <!-- two spaces -->
+    <xsl:text>&space;&space;</xsl:text>
+    <!-- author's name -->
+    <xsl:apply-templates select="author" />
+    <!-- two newlines -->
+    <xsl:text>&#xA;&#xA;</xsl:text>
+   </xsl:otherwise>
+  </xsl:choose>
+  <!-- get paths string -->
+  <xsl:variable name="paths">
+   <xsl:apply-templates select="paths" />
+  </xsl:variable>
+  <!-- get revision number -->
+  <xsl:variable name="rev">
+   <xsl:if test="$include-rev='yes'">
+    <xsl:text>[r</xsl:text>
+    <xsl:value-of select="@revision" />
+    <xsl:text>]&space;</xsl:text>
+   </xsl:if>
+  </xsl:variable>
+  <!-- trim trailing newlines -->
+  <xsl:variable name="msg">
+   <!-- add a line break before the log message -->
+   <xsl:choose>
+    <xsl:when test="$breakbeforemsg='yes'">
+     <xsl:text>&#xA;</xsl:text>
+    </xsl:when>
+    <xsl:when test="number($breakbeforemsg)&gt;0">
+     <xsl:call-template name="newlines">
+      <xsl:with-param name="count" select="number($breakbeforemsg)" />
+     </xsl:call-template>
+    </xsl:when>
+   </xsl:choose>
+   <xsl:call-template name="trim-newln">
+    <xsl:with-param name="txt" select="msg" />
+   </xsl:call-template>
+  </xsl:variable>
+  <!-- add newline here if separate-daylogs is in effect -->
+  <xsl:if test="$groupbyday='yes' and 
$separate-daylogs='yes'"><xsl:text>&#xA;</xsl:text></xsl:if>
+  <!-- first line is indented (other indents are done in wrap template) -->
+  <xsl:text>&#x9;*&space;</xsl:text>
+  <!-- set up the text to wrap -->
+  <xsl:variable name="txt">
+   <xsl:value-of select="$rev" />
+   <xsl:if test="$paths!=''">
+    <xsl:value-of select="concat($paths,':&space;')" />
+   </xsl:if>
+   <xsl:value-of select="$msg" />
+  </xsl:variable>
+  <!-- print the paths and message nicely wrapped -->
+  <xsl:call-template name="wrap">
+   <xsl:with-param name="txt" select="$txt" />
+  </xsl:call-template>
+ </xsl:template>
+
+ <!-- format date -->
+ <xsl:template match="date">
+  <xsl:variable name="date" select="normalize-space(.)" />
+  <!-- output date part -->
+  <xsl:value-of select="substring($date,1,10)" />
+  <!-- output time part -->
+  <xsl:if test="$groupbyday!='yes'">
+   <xsl:text>&space;</xsl:text>
+   <xsl:value-of select="substring($date,12,5)" />
+  </xsl:if>
+ </xsl:template>
+
+ <!-- format author -->
+ <xsl:template match="author">
+  <xsl:variable name="uid" select="normalize-space(.)" />
+  <!-- try to lookup author in authorsfile -->
+  <xsl:choose>
+   <xsl:when test="$authorsfile!=''">
+    <xsl:for-each select="$authors-top">
+     <xsl:variable name="author" select="key('author-lookup',$uid)" />
+     <!-- present result -->
+     <xsl:choose>
+      <xsl:when test="string($author/.)">
+       <xsl:apply-templates select="$author/node()" mode="copy" />
+      </xsl:when>
+      <xsl:otherwise>
+       <xsl:value-of select="$uid" />
+      </xsl:otherwise>
+     </xsl:choose>
+    </xsl:for-each>
+   </xsl:when>
+   <xsl:otherwise>
+    <xsl:value-of select="$uid" />
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <!-- copy but normalize text -->
+ <xsl:template match="text()" mode="copy">
+  <xsl:value-of select="normalize-space(.)" />
+ </xsl:template>
+
+ <!-- simple copy template -->
+ <xsl:template match="@*|node()" mode="copy">
+  <xsl:copy>
+   <xsl:apply-templates select="@*|node()" mode="copy" />
+  </xsl:copy>
+ </xsl:template>
+
+ <!-- present a list of paths names -->
+ <xsl:template match="paths">
+  <xsl:choose>
+   <!-- only handle paths that begin with the path and strip the path -->
+   <xsl:when test="$strip-prefix != ''">
+    <!-- if strip-prefix does not start with a slash, prepend it -->
+    <xsl:variable name="tmpstrip1">
+     <xsl:choose>
+      <xsl:when test="starts-with($strip-prefix,'/')">
+       <xsl:value-of select="$strip-prefix" />
+      </xsl:when>
+      <xsl:otherwise>
+       <xsl:value-of select="concat('/',$strip-prefix)" />
+      </xsl:otherwise>
+     </xsl:choose>
+    </xsl:variable>
+    <!-- strip trailing slash from strip-prefix -->
+    <xsl:variable name="tmpstrip2">
+     <xsl:choose>
+      <xsl:when test="substring($tmpstrip1,string-length($tmpstrip1),1)='/'">
+       <xsl:value-of 
select="substring($tmpstrip1,1,string-length($tmpstrip1)-1)" />
+      </xsl:when>
+      <xsl:otherwise>
+       <xsl:value-of select="$tmpstrip1" />
+      </xsl:otherwise>
+     </xsl:choose>
+    </xsl:variable>
+    <!-- filter on all entries within directory -->
+    <xsl:for-each 
select="path[starts-with(concat(normalize-space(.),'/'),concat($tmpstrip2,'/'))]">
+     <xsl:sort select="normalize-space(.)" data-type="text" />
+     <!-- unless we are the first entry, add a comma -->
+     <xsl:if test="not(position()=1)">
+      <xsl:text>,&space;</xsl:text>
+     </xsl:if>
+     <!-- print the path name -->
+     <xsl:call-template name="printpath">
+      <xsl:with-param name="path" 
select="substring(normalize-space(.),string-length($strip-prefix)+3)" />
+     </xsl:call-template>
+     <!-- add the action flag -->
+     <xsl:if test="$include-actions='yes'">
+      <xsl:apply-templates select="." mode="action"/>
+     </xsl:if>
+    </xsl:for-each>
+   </xsl:when>
+   <!-- print a simple list of all paths -->
+   <xsl:otherwise>
+    <xsl:for-each select="path">
+     <xsl:sort select="normalize-space(.)" data-type="text" />
+     <!-- unless we are the first entry, add a comma -->
+     <xsl:if test="not(position()=1)">
+      <xsl:text>,&space;</xsl:text>
+     </xsl:if>
+     <!-- print the path name -->
+     <xsl:value-of select="normalize-space(.)" />
+     <!-- add the action flag -->
+     <xsl:if test="$include-actions='yes'">
+      <xsl:apply-templates select="." mode="action"/>
+     </xsl:if>
+    </xsl:for-each>
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="path" mode="action">
+  <xsl:choose>
+   <xsl:when test="@action='D'">
+    <xsl:text>[DEL]</xsl:text>
+   </xsl:when>
+   <xsl:when test="@copyfrom-path">
+    <xsl:text>[CPY]</xsl:text>
+   </xsl:when>
+   <xsl:when test="@action='D'">
+    <xsl:text>[ADD]</xsl:text>
+   </xsl:when>
+  </xsl:choose>
+ </xsl:template>
+
+ <!-- transform path to something printable -->
+ <xsl:template name="printpath">
+  <!-- fetch the pathname -->
+  <xsl:param name="path" />
+  <!-- strip leading slash -->
+  <xsl:variable name="tmp1">
+   <xsl:choose>
+    <xsl:when test="starts-with($path,'/')">
+     <xsl:value-of select="substring($path,2)" />
+    </xsl:when>
+    <xsl:otherwise>
+     <xsl:value-of select="$path" />
+    </xsl:otherwise>
+   </xsl:choose>
+  </xsl:variable>
+  <!-- translate empty string to dot -->
+  <xsl:choose>
+   <xsl:when test="$tmp1 = ''">
+    <xsl:text>.</xsl:text>
+   </xsl:when>
+   <xsl:otherwise>
+    <xsl:value-of select="$tmp1" />
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <!-- string-wrapping template -->
+ <xsl:template name="wrap">
+  <xsl:param name="txt" />
+  <xsl:variable name="normtxt" select="normalize-space($txt)" />
+  <xsl:choose>
+   <xsl:when test="contains($txt,'&#xA;')">
+     <!-- text contains newlines, do the first line -->
+     <xsl:call-template name="wrap">
+      <xsl:with-param name="txt" select="substring-before($txt,'&#xA;')" />
+     </xsl:call-template>
+     <!-- print tab -->
+     <xsl:text>&#x9;&space;&space;</xsl:text>
+     <!-- wrap the rest of the text -->
+     <xsl:call-template name="wrap">
+      <xsl:with-param name="txt" select="substring-after($txt,'&#xA;')" />
+     </xsl:call-template>
+   </xsl:when>
+   <xsl:when test="(string-length($normtxt) &lt; (($linelen)-9)) or 
not(contains($normtxt,' '))">
+    <!-- this is easy, nothing to do -->
+    <xsl:value-of select="$normtxt" />
+    <!-- add newline -->
+    <xsl:text>&#xA;</xsl:text>
+   </xsl:when>
+   <xsl:otherwise>
+    <!-- find the first line -->
+    <xsl:variable name="tmp" select="substring($normtxt,1,(($linelen)-9))" />
+    <xsl:variable name="line">
+     <xsl:choose>
+      <!-- if our attempt contains spaces wrap on that -->
+      <xsl:when test="contains($tmp,' ')">
+       <xsl:call-template name="find-line">
+        <xsl:with-param name="txt" select="$tmp" />
+       </xsl:call-template>
+      </xsl:when>
+      <!-- otherwise use the first non-space characters from the text -->
+      <xsl:otherwise>
+       <xsl:value-of select="substring-before($normtxt,' ')" />
+      </xsl:otherwise>
+     </xsl:choose>
+    </xsl:variable>
+    <!-- print line -->
+    <xsl:value-of select="$line" />
+    <!-- print newline and tab -->
+    <xsl:text>&#xA;&#x9;&space;&space;</xsl:text>
+    <!-- wrap the rest of the text -->
+    <xsl:call-template name="wrap">
+     <xsl:with-param name="txt" 
select="normalize-space(substring($normtxt,string-length($line)+1))" />
+    </xsl:call-template>
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <!-- template to trim line to contain space as last char -->
+ <xsl:template name="find-line">
+  <xsl:param name="txt" />
+  <xsl:choose>
+   <xsl:when test="substring($txt,string-length($txt),1)=' '">
+    <xsl:value-of select="substring($txt,1,string-length($txt)-1)" />
+   </xsl:when>
+   <xsl:otherwise>
+    <xsl:call-template name="find-line">
+     <xsl:with-param name="txt" 
select="substring($txt,1,string-length($txt)-1)" />
+    </xsl:call-template>
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <!-- template to trim trailing and starting newlines -->
+ <xsl:template name="trim-newln">
+  <xsl:param name="txt" />
+  <xsl:choose>
+   <!-- find starting newlines -->
+   <xsl:when test="substring($txt,1,1) = '&#xA;'">
+    <xsl:call-template name="trim-newln">
+     <xsl:with-param name="txt" select="substring($txt,2)" />
+    </xsl:call-template>
+   </xsl:when>
+   <!-- find trailing newlines -->
+   <xsl:when test="substring($txt,string-length($txt),1) = '&#xA;'">
+    <xsl:call-template name="trim-newln">
+     <xsl:with-param name="txt" 
select="substring($txt,1,string-length($txt)-1)" />
+    </xsl:call-template>
+   </xsl:when>
+   <!-- if the message has paragrapgs, find the first one -->
+   <xsl:when test="$reparagraph='yes' and contains($txt,'&#xA;&#xA;')">
+     <!-- remove newlines from first paragraph -->
+     <xsl:value-of 
select="normalize-space(substring-before($txt,'&#xA;&#xA;'))" />
+     <!-- paragraph separator -->
+     <xsl:text>&#xA;&#xA;</xsl:text>
+     <!-- do the rest of the text -->
+     <xsl:call-template name="trim-newln">
+      <xsl:with-param name="txt" select="substring-after($txt,'&#xA;&#xA;')" />
+     </xsl:call-template>
+   </xsl:when>
+   <!-- remove more single newlines -->
+   <xsl:when test="$reparagraph='yes'">
+    <xsl:value-of select="normalize-space($txt)" />
+   </xsl:when>
+   <!-- no newlines found, we're done -->
+   <xsl:otherwise>
+    <xsl:value-of select="$txt" />
+   </xsl:otherwise>
+  </xsl:choose>
+ </xsl:template>
+
+ <!-- insert a number of newlines -->
+ <xsl:template name="newlines">
+  <xsl:param name="count" />
+  <xsl:text>&#xA;</xsl:text>
+  <xsl:if test="$count&gt;1">
+   <xsl:call-template name="newlines">
+    <xsl:with-param name="count" select="($count)-1" />
+   </xsl:call-template>
+  </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]