|
<?xml version="1.0"?> |
|
|
|
<!-- this xslt is from http://trac.adium.im/ticket/6569 --> |
|
|
|
<!-- |
|
Adium is the legal property of its developers, whose names are listed in the copyright file included |
|
with this source distribution. |
|
|
|
This program is free software; you can redistribute it and/or modify it under the terms of the GNU |
|
General Public License as published by the Free Software Foundation; either version 2 of the License, |
|
or (at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even |
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
|
Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License along with this program; if not, |
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|
|
|
Purpose: |
|
Format an Adium log file as XHTML |
|
|
|
Parameters: |
|
title A string to use for the page title |
|
--> |
|
|
|
<xsl:stylesheet version="1.0" |
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
|
xmlns:adium="http://purl.org/net/ulf/ns/0.4-02" |
|
xmlns="http://www.w3.org/1999/xhtml" |
|
exclude-result-prefixes="adium"> |
|
|
|
<xsl:output method="xml" |
|
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" |
|
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" |
|
indent="yes" encoding="utf-8"/> |
|
|
|
<xsl:strip-space elements="*"/> |
|
|
|
<xsl:param name="title" select="'Chat'"/> |
|
|
|
<!-- Process chats --> |
|
<xsl:template match="adium:chat"> |
|
<html> |
|
<head> |
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> |
|
<title><xsl:value-of select="$title"/></title> |
|
<link rel="stylesheet" href="http://paulirish.com/adiumlogs.css"/> |
|
|
|
</head> |
|
<body> |
|
<xsl:apply-templates/> |
|
</body> |
|
</html> |
|
</xsl:template> |
|
|
|
<!-- Process events --> |
|
<xsl:template match="adium:event"> |
|
<div class="event"> |
|
<xsl:value-of select="@type"/> |
|
<xsl:text>: </xsl:text> |
|
<xsl:value-of select="translate(@time, 'T', ' ')"/> |
|
</div> |
|
</xsl:template> |
|
|
|
<!-- Process messages --> |
|
<xsl:template match="adium:message"> |
|
<!-- Record whether this is a follow-on message --> |
|
<xsl:variable name="prec" select="preceding-sibling::*[1]"/> |
|
<xsl:variable name="follow-on"> |
|
<xsl:if test="$prec[self::adium:message] and $prec/@sender = @sender"> |
|
<xsl:text>follow-on</xsl:text> |
|
</xsl:if> |
|
</xsl:variable> |
|
<!-- Record whether this is from the principal account --> |
|
<xsl:variable name="principal"> |
|
<xsl:if test="@sender = /adium:chat/@account"> |
|
<xsl:text>principal</xsl:text> |
|
</xsl:if> |
|
</xsl:variable> |
|
|
|
<!-- Record if this is an auto message --> |
|
<xsl:variable name="auto"> |
|
<xsl:if test="@auto = 'true'"> |
|
<xsl:text>auto</xsl:text> |
|
</xsl:if> |
|
</xsl:variable> |
|
|
|
<!-- Create message div --> |
|
<div class="message {$principal} {$follow-on} {$auto}"> |
|
<!-- Include a sender box when this is not a follow-on message --> |
|
<xsl:if test="$follow-on = ''"> |
|
<div class="sender"> |
|
<xsl:apply-templates select="@sender|@alias"/> |
|
</div> |
|
</xsl:if> |
|
<!-- Process attributes --> |
|
<div class="meta"> |
|
<xsl:apply-templates select="@*[not(name() = 'sender' or name() = 'alias')]"/> |
|
</div> |
|
<div class="content"> |
|
<!-- Process child elements etc. --> |
|
<xsl:apply-templates select="node()"/> |
|
</div> |
|
</div> |
|
</xsl:template> |
|
|
|
<xsl:template match="@sender|@alias"> |
|
<xsl:if test="name() = 'alias' or not(../@alias)"> |
|
<span class="sender"> |
|
<xsl:value-of select="."/> |
|
</span> |
|
</xsl:if> |
|
</xsl:template> |
|
|
|
|
|
<xsl:template match="@auto"> |
|
<span class="auto"> |
|
<xsl:value-of select="."/> |
|
</span> |
|
</xsl:template> |
|
|
|
<xsl:template match="@time"> |
|
<span class="time"> |
|
<xsl:value-of select="substring(., 12, 8)"/> |
|
</span> |
|
</xsl:template> |
|
|
|
<xsl:template match="adium:message/@*" priority="0"> |
|
<xsl:message>Unhandled attribute: message/@<xsl:value-of select="name()"/> </xsl:message> |
|
</xsl:template> |
|
|
|
<!-- Copy elements but strip off the namespace --> |
|
<xsl:template match="*"> |
|
<xsl:element name="{local-name()}"> |
|
<xsl:apply-templates select="node()|@*"/> |
|
</xsl:element> |
|
</xsl:template> |
|
|
|
<!-- Copy atrributes but strip off the namespace --> |
|
<xsl:template match="@*"> |
|
<xsl:attribute name="{local-name()}"> |
|
<xsl:apply-templates/> |
|
</xsl:attribute> |
|
</xsl:template> |
|
|
|
</xsl:stylesheet> |
I figured out how to solve your whitespace issue in the
htmilfy.sh
script. Set theIFS
environment variable at the start of your script, by saying:IFS=$'\n'
. What this does is makes it such that fields are interpreted not to be broken on spaces; only on newlines.To demonstrate this, compare the output of
IFS=$'\n'; for i in
find . -name "*.xml"; do echo "$i"; done
to the same command not prefaced by the setting of theIFS
variable. You'll note that the use of theIFS
setting leads to each file being output on its own line, not broken by spaces, whereas not settingIFS
causes files to be broken on spaces.Hope this helps!