mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
dbd14f8662
Seems there is a different way to state O2 percentage in DivingLog. This patch includes that format along with the previously seen one. Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
250 lines
7.7 KiB
HTML
250 lines
7.7 KiB
HTML
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
|
<xsl:strip-space elements="*"/>
|
|
<xsl:output method="xml" indent="yes"/>
|
|
|
|
<xsl:template match="/">
|
|
<divelog program='subsurface-import' version='2'>
|
|
<dives>
|
|
<xsl:apply-templates select="/Divinglog/Logbook/Dive"/>
|
|
</dives>
|
|
</divelog>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="Dive">
|
|
<dive>
|
|
<xsl:attribute name="number">
|
|
<xsl:value-of select="Number"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:if test="rating > 0">
|
|
<xsl:attribute name="rating">
|
|
<xsl:value-of select="Rating"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:attribute name="date">
|
|
<xsl:value-of select="Divedate"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:attribute name="time">
|
|
<xsl:value-of select="Entrytime"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:attribute name="duration">
|
|
<xsl:choose>
|
|
<xsl:when test="string-length(Divetime) - string-length(translate(./Divetime, '.', '')) = 1">
|
|
<xsl:value-of select="concat(substring-before(Divetime, '.'), ':', format-number((substring-after(Divetime, '.') * 60 div 100), '00'), ' min')"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="concat(Divetime, ' min')"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
|
|
<depth>
|
|
<xsl:if test="Depth != ''">
|
|
<xsl:attribute name="max">
|
|
<xsl:value-of select="concat(Depth, ' m')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="DepthAvg != ''">
|
|
<xsl:attribute name="mean">
|
|
<xsl:value-of select="concat(DepthAvg, ' m')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
</depth>
|
|
|
|
<location>
|
|
<xsl:for-each select="Country/@Name | City/@Name | Place/@Name">
|
|
<xsl:if test="position() != 1"> / </xsl:if>
|
|
<xsl:value-of select="."/>
|
|
</xsl:for-each>
|
|
</location>
|
|
|
|
<xsl:if test="Place/Lat != ''">
|
|
<gps>
|
|
<xsl:value-of select="concat(Place/Lat, ' ', Place/Lon)"/>
|
|
</gps>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="Buddy/@Names != ''">
|
|
<buddy>
|
|
<xsl:value-of select="Buddy/@Names"/>
|
|
</buddy>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="Divemaster != ''">
|
|
<divemaster>
|
|
<xsl:value-of select="Divemaster"/>
|
|
</divemaster>
|
|
</xsl:if>
|
|
|
|
<cylinder>
|
|
<xsl:attribute name="description">
|
|
<xsl:value-of select="Tanktype"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="start">
|
|
<xsl:value-of select="PresS"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:attribute name="end">
|
|
<xsl:value-of select="PresE"/>
|
|
</xsl:attribute>
|
|
|
|
<xsl:attribute name="size">
|
|
<xsl:choose>
|
|
<xsl:when test="DblTank = 'False'">
|
|
<xsl:value-of select="Tanksize"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="format-number(Tanksize * 2, '#.##')"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
|
|
<xsl:if test="O2 != ''">
|
|
<xsl:attribute name="o2">
|
|
<xsl:value-of select="concat(O2, '%')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="Gas != ''">
|
|
<xsl:attribute name="o2">
|
|
<xsl:value-of select="substring-after(substring-before(Gas, ')'), 'O2=')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:if test="He != ''">
|
|
<xsl:attribute name="he">
|
|
<xsl:value-of select="concat(He, '%')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
</cylinder>
|
|
|
|
<temperature>
|
|
<xsl:if test="Airtemp != ''">
|
|
<xsl:attribute name="air">
|
|
<xsl:value-of select="concat(Airtemp, ' C')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<xsl:if test="Watertemp != ''">
|
|
<xsl:attribute name="water">
|
|
<xsl:value-of select="concat(Watertemp, ' C')"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
</temperature>
|
|
|
|
<suit>
|
|
<xsl:value-of select="Divesuit"/>
|
|
</suit>
|
|
|
|
<xsl:if test="Weight != ''">
|
|
<weightsystem>
|
|
<!-- Is weight always in kilograms? -->
|
|
<xsl:attribute name="weight">
|
|
<xsl:value-of select="concat(Weight, ' kg')"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="description">
|
|
<xsl:value-of select="'unknown'"/>
|
|
</xsl:attribute>
|
|
</weightsystem>
|
|
</xsl:if>
|
|
|
|
<notes>
|
|
<xsl:value-of select="Comments"/>
|
|
</notes>
|
|
|
|
<!-- Trying to detect if depth samples are in Imperial or Metric
|
|
units. This is based on an assumption that maximum depth of
|
|
a dive is recorded in metric and if samples contain bigger
|
|
values, they must be imperial.
|
|
-->
|
|
|
|
<xsl:variable name="max">
|
|
<xsl:for-each select="Profile/P/Depth">
|
|
<xsl:sort select="." data-type="number" order="descending"/>
|
|
<xsl:if test="position() = 1"><xsl:value-of select="."/></xsl:if>
|
|
</xsl:for-each>
|
|
</xsl:variable>
|
|
|
|
<xsl:variable name="depthUnit">
|
|
<xsl:choose>
|
|
<xsl:when test="$max > Depth + 1">
|
|
<xsl:value-of select="'imperial'"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="'metric'"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:variable>
|
|
|
|
<divecomputer>
|
|
<xsl:if test="Computer != ''">
|
|
<xsl:attribute name="model">
|
|
<xsl:value-of select="Computer"/>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
|
|
<xsl:for-each select="Profile/P">
|
|
<sample>
|
|
<xsl:attribute name="time">
|
|
<xsl:value-of select="concat(floor(number(./@Time) div 60), ':', format-number(floor(number(./@Time) mod 60), '00'), ' min')"/>
|
|
</xsl:attribute>
|
|
<!-- This looks like pure guess work to figure out the unit -->
|
|
<xsl:if test="Temp != ''">
|
|
<xsl:attribute name="temp">
|
|
<xsl:choose>
|
|
<xsl:when test="Temp > 32">
|
|
<xsl:value-of select="concat(format-number((Temp - 32) * 5 div 9, '0.0'), ' C')"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="concat(Temp, ' C')"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:attribute>
|
|
</xsl:if>
|
|
<!-- How does this pressure information work? How do we know
|
|
which pressure information is in use?
|
|
Until further information, just grab "randomly" the first
|
|
pressure reading -->
|
|
<xsl:attribute name="pressure">
|
|
<xsl:value-of select="Press1"/>
|
|
</xsl:attribute>
|
|
<xsl:attribute name="depth">
|
|
<xsl:call-template name="depthConvert">
|
|
<xsl:with-param name="depth">
|
|
<xsl:value-of select="Depth"/>
|
|
</xsl:with-param>
|
|
<xsl:with-param name="depthUnit">
|
|
<xsl:value-of select="$depthUnit"/>
|
|
</xsl:with-param>
|
|
</xsl:call-template>
|
|
</xsl:attribute>
|
|
</sample>
|
|
</xsl:for-each>
|
|
|
|
</divecomputer>
|
|
|
|
|
|
</dive>
|
|
</xsl:template>
|
|
|
|
<!-- convert depth to meters -->
|
|
<xsl:template name="depthConvert">
|
|
<xsl:param name="depth"/>
|
|
<xsl:param name="depthUnit"/>
|
|
|
|
<xsl:if test="$depth != ''">
|
|
<xsl:choose>
|
|
<xsl:when test="$depthUnit = 'imperial'">
|
|
<xsl:value-of select="concat(format-number($depth div 3.2808, '##.#'), ' m')"/>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:value-of select="concat($depth, ' m')"/>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
<!-- end convert depth -->
|
|
|
|
</xsl:stylesheet>
|