diff options
author | Miika Turkia <miika.turkia@gmail.com> | 2012-11-24 12:12:17 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2012-11-24 09:00:56 -0800 |
commit | 27f7e58493ca16266f32363f55fbe3d979348af0 (patch) | |
tree | 97cf42ba8bea28f80604a22defae92af0575bc93 /xslt/jdivelog2subsurface.xslt | |
parent | 2feaf1e815d6f3b39d338a8ba3970157e482bd37 (diff) | |
download | subsurface-27f7e58493ca16266f32363f55fbe3d979348af0.tar.gz |
Improvements on JDiveLog import
If dive computer does not record the sample interval, but records time
stamps on the samples, we use those.
A couple of corner cases fixed that were noticed in new log samples.
Also fixes when importing dives logged in imperial units.
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'xslt/jdivelog2subsurface.xslt')
-rw-r--r-- | xslt/jdivelog2subsurface.xslt | 142 |
1 files changed, 110 insertions, 32 deletions
diff --git a/xslt/jdivelog2subsurface.xslt b/xslt/jdivelog2subsurface.xslt index 4e900f59b..42cbec01e 100644 --- a/xslt/jdivelog2subsurface.xslt +++ b/xslt/jdivelog2subsurface.xslt @@ -68,13 +68,19 @@ <suit> <xsl:value-of select="Equipment/Suit"/> </suit> - <xsl:value-of select="Equipment/Suit"/> </xsl:if> <xsl:if test="Equipment/Weight != ''"> <weightsystem> <xsl:attribute name="weight"> - <xsl:value-of select="Equipment/Weight"/> + <xsl:choose> + <xsl:when test="Equipment/Weight = 'none'"> + <xsl:value-of select="0" /> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="Equipment/Weight"/> + </xsl:otherwise> + </xsl:choose> </xsl:attribute> </weightsystem> </xsl:if> @@ -178,10 +184,20 @@ Comment: <xsl:value-of select="Comment"/> </xsl:choose> </xsl:attribute> <xsl:attribute name="time"> - <xsl:call-template name="timeConvert"> - <xsl:with-param name="timeSec" select="count(preceding-sibling::D) * $delta"/> - <xsl:with-param name="units" select="'si'"/> - </xsl:call-template> + <xsl:choose> + <xsl:when test="$delta != '0'"> + <xsl:call-template name="timeConvert"> + <xsl:with-param name="timeSec" select="count(preceding-sibling::D) * $delta"/> + <xsl:with-param name="units" select="'si'"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="timeConvert"> + <xsl:with-param name="timeSec" select="preceding-sibling::T[1]"/> + <xsl:with-param name="units" select="$units"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> </xsl:attribute> </event> </xsl:if> @@ -192,10 +208,29 @@ Comment: <xsl:value-of select="Comment"/> <xsl:for-each select="DIVE/SAMPLES/SWITCH"> <event name="gaschange"> <xsl:attribute name="time"> - <xsl:call-template name="timeConvert"> - <xsl:with-param name="timeSec" select="count(preceding-sibling::D) * $delta"/> - <xsl:with-param name="units" select="'si'"/> - </xsl:call-template> + <xsl:choose> + <xsl:when test="$delta != '0'"> + <xsl:call-template name="timeConvert"> + <xsl:with-param name="timeSec" select="count(preceding-sibling::D) * $delta"/> + <xsl:with-param name="units" select="'si'"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="timeConvert"> + <xsl:with-param name="timeSec"> + <xsl:choose> + <xsl:when test="preceding-sibling::T[1] != ''"> + <xsl:value-of select="preceding-sibling::T[1]"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="'0'"/> + </xsl:otherwise> + </xsl:choose> + </xsl:with-param> + <xsl:with-param name="units" select="$units"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> </xsl:attribute> <xsl:attribute name="value"> <xsl:value-of select="ancestor::DIVE/GASES/MIX[MIXNAME=current()]/O2 * 100" /> @@ -205,20 +240,61 @@ Comment: <xsl:value-of select="Comment"/> <!-- end gas change --> <!-- dive sample - all the depth and temp readings --> - <xsl:for-each select="DIVE/SAMPLES/D"> - <xsl:variable name="timeSec" select="(position() - 1) * $delta"/> - <xsl:variable name="time" select="concat(floor($timeSec div 60), ':', - format-number(floor($timeSec mod 60), '00'), ' min')"/> - <xsl:choose> - <xsl:when test="name(following-sibling::*[1]) = 'TEMPERATURE'"> - <sample time="{$time}" depth="{concat(., ' m')}" - temp="{following-sibling::TEMPERATURE}"/> - </xsl:when> - <xsl:otherwise> - <sample time="{$time}" depth="{concat(., ' m')}"/> - </xsl:otherwise> - </xsl:choose> - </xsl:for-each> + <xsl:choose> + <xsl:when test="$delta != '0'"> + <xsl:for-each select="DIVE/SAMPLES/D"> + <xsl:variable name="timeSec" select="(position() - 1) * $delta"/> + <xsl:variable name="time" select="concat(floor($timeSec div 60), ':', + format-number(floor($timeSec mod 60), '00'), ' min')"/> + <xsl:choose> + <xsl:when test="name(following-sibling::*[1]) = 'TEMPERATURE'"> + <sample time="{$time}" depth="{concat(., ' m')}"> + <xsl:attribute name="temp"> + <xsl:choose> + <xsl:when test="$units = 'si'"> + <xsl:value-of select="concat(format-number(following-sibling::TEMPERATURE - 273.15, '00.0'), ' C')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat(following-sibling::TEMPERATURE, ' C')"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + </sample> + </xsl:when> + <xsl:otherwise> + <sample time="{$time}" depth="{concat(., ' m')}"/> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <xsl:for-each select="DIVE/SAMPLES/D"> + <sample> + <xsl:attribute name="time"> + <xsl:call-template name="timeConvert"> + <xsl:with-param name="timeSec" select="preceding-sibling::T[1]"/> + <xsl:with-param name="units" select="$units"/> + </xsl:call-template> + </xsl:attribute> + <xsl:if test="name(following-sibling::*[1]) = 'TEMPERATURE'"> + <xsl:attribute name="temp"> + <xsl:choose> + <xsl:when test="$units = 'si'"> + <xsl:value-of select="concat(format-number(following-sibling::TEMPERATURE - 273.15, '00.0'), ' C')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat(following-sibling::TEMPERATURE, ' C')"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + </xsl:if> + <xsl:attribute name="depth"> + <xsl:value-of select="concat(., ' m')"/> + </xsl:attribute> + </sample> + </xsl:for-each> + </xsl:otherwise> + </xsl:choose> <!-- dive sample --> </dive> @@ -266,14 +342,16 @@ Comment: <xsl:value-of select="Comment"/> <xsl:param name="timeSec"/> <xsl:param name="units"/> - <xsl:choose> - <xsl:when test="$units = 'si'"> - <xsl:value-of select="concat(floor(number($timeSec) div 60), ':', format-number(floor(number($timeSec) mod 60), '00'), ' min')"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat(substring-before($timeSec, '.'), ':', format-number(substring-after($timeSec, '.'), '00'), ' min')"/> - </xsl:otherwise> - </xsl:choose> + <xsl:if test="$timeSec != ''"> + <xsl:choose> + <xsl:when test="$units = 'si'"> + <xsl:value-of select="concat(floor(number($timeSec) div 60), ':', format-number(floor(number($timeSec) mod 60), '00'), ' min')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat(substring-before($timeSec, '.'), ':', format-number(substring-after($timeSec, '.'), '00'), ' min')"/> + </xsl:otherwise> + </xsl:choose> + </xsl:if> </xsl:template> <!-- end convert time --> |