mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Preconfigured import of Subsurface CSV log file
Signed-off-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
e471335af6
commit
1e04aec7fd
5 changed files with 367 additions and 1 deletions
|
@ -2558,6 +2558,7 @@ static struct xslt_files {
|
||||||
{ "Divinglog", "DivingLog.xslt", NULL },
|
{ "Divinglog", "DivingLog.xslt", NULL },
|
||||||
{ "csv", "csv2xml.xslt", NULL },
|
{ "csv", "csv2xml.xslt", NULL },
|
||||||
{ "sensuscsv", "sensuscsv.xslt", NULL },
|
{ "sensuscsv", "sensuscsv.xslt", NULL },
|
||||||
|
{ "SubsurfaceCSV", "subsurfacecsv.xslt", NULL },
|
||||||
{ "manualcsv", "manualcsv2xml.xslt", NULL },
|
{ "manualcsv", "manualcsv2xml.xslt", NULL },
|
||||||
{ NULL, }
|
{ NULL, }
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,6 +12,7 @@ const DiveLogImportDialog::CSVAppConfig DiveLogImportDialog::CSVApps[CSVAPPS] =
|
||||||
{ "XP5", 1, 2, 10, -1, -1, -1, -1, -1, -1, "Tab" },
|
{ "XP5", 1, 2, 10, -1, -1, -1, -1, -1, -1, "Tab" },
|
||||||
{ "SensusCSV", 10, 11, -1, -1, -1, -1, -1, -1, -1, "," },
|
{ "SensusCSV", 10, 11, -1, -1, -1, -1, -1, -1, -1, "," },
|
||||||
{ "Seabear CSV", 1, 2, 6, -1, -1, 3, 4, 5, 7, ";" },
|
{ "Seabear CSV", 1, 2, 6, -1, -1, 3, 4, 5, 7, ";" },
|
||||||
|
{ "SubsurfaceCSV", -1, -1, -1, -1, -1, -1, -1, -1, -1, "," },
|
||||||
{ NULL, }
|
{ NULL, }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,6 +26,7 @@ DiveLogImportDialog::DiveLogImportDialog(QStringList *fn, QWidget *parent) : QDi
|
||||||
|
|
||||||
/* Add indexes of XSLTs requiring special handling to the list */
|
/* Add indexes of XSLTs requiring special handling to the list */
|
||||||
specialCSV << 3;
|
specialCSV << 3;
|
||||||
|
specialCSV << 5;
|
||||||
|
|
||||||
for (int i = 0; !CSVApps[i].name.isNull(); ++i)
|
for (int i = 0; !CSVApps[i].name.isNull(); ++i)
|
||||||
ui->knownImports->addItem(CSVApps[i].name);
|
ui->knownImports->addItem(CSVApps[i].name);
|
||||||
|
@ -160,8 +162,10 @@ void DiveLogImportDialog::on_knownImports_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
if (specialCSV.contains(index)) {
|
if (specialCSV.contains(index)) {
|
||||||
ui->groupBox_3->setEnabled(false);
|
ui->groupBox_3->setEnabled(false);
|
||||||
|
ui->CSVUnits->setEnabled(false);
|
||||||
} else {
|
} else {
|
||||||
ui->groupBox_3->setEnabled(true);
|
ui->groupBox_3->setEnabled(true);
|
||||||
|
ui->CSVUnits->setEnabled(true);
|
||||||
}
|
}
|
||||||
if (index == 0)
|
if (index == 0)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -64,7 +64,7 @@ private:
|
||||||
QString separator;
|
QString separator;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CSVAPPS 6
|
#define CSVAPPS 7
|
||||||
static const CSVAppConfig CSVApps[CSVAPPS];
|
static const CSVAppConfig CSVApps[CSVAPPS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
<file>xslt/xml2manualcsv.xslt</file>
|
<file>xslt/xml2manualcsv.xslt</file>
|
||||||
<file>xslt/uddf.xslt</file>
|
<file>xslt/uddf.xslt</file>
|
||||||
<file>xslt/sensuscsv.xslt</file>
|
<file>xslt/sensuscsv.xslt</file>
|
||||||
|
<file>xslt/subsurfacecsv.xslt</file>
|
||||||
<file>xslt/manualcsv2xml.xslt</file>
|
<file>xslt/manualcsv2xml.xslt</file>
|
||||||
<file>xslt/shearwater.xslt</file>
|
<file>xslt/shearwater.xslt</file>
|
||||||
<file alias="icon_lung">icons/gas.png</file>
|
<file alias="icon_lung">icons/gas.png</file>
|
||||||
|
|
360
xslt/subsurfacecsv.xslt
Normal file
360
xslt/subsurfacecsv.xslt
Normal file
|
@ -0,0 +1,360 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||||
|
<xsl:include href="commonTemplates.xsl"/>
|
||||||
|
<xsl:strip-space elements="*"/>
|
||||||
|
<xsl:param name="separatorIndex" select="separatorIndex"/>
|
||||||
|
<xsl:param name="units" select="units"/>
|
||||||
|
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
|
||||||
|
|
||||||
|
<xsl:variable name="lf"><xsl:text>
|
||||||
|
</xsl:text></xsl:variable>
|
||||||
|
<xsl:variable name="fs">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$separatorIndex = 0"><xsl:text> </xsl:text></xsl:when>
|
||||||
|
<xsl:when test="$separatorIndex = 2"><xsl:text>;</xsl:text></xsl:when>
|
||||||
|
<xsl:otherwise><xsl:text>,</xsl:text></xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:template match="/">
|
||||||
|
<divelog program="subsurface-import" version="2">
|
||||||
|
<dives>
|
||||||
|
<xsl:call-template name="printLine">
|
||||||
|
<xsl:with-param name="line" select="substring-before(substring-after(//SubsurfaceCSV, $lf), $lf)"/>
|
||||||
|
<xsl:with-param name="remaining" select="substring-after(substring-after(//SubsurfaceCSV, $lf), $lf)"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</dives>
|
||||||
|
</divelog>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="printLine">
|
||||||
|
<xsl:param name="line"/>
|
||||||
|
<xsl:param name="remaining"/>
|
||||||
|
|
||||||
|
<xsl:call-template name="printFields">
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
|
||||||
|
<xsl:if test="$remaining != ''">
|
||||||
|
<xsl:call-template name="printLine">
|
||||||
|
<xsl:with-param name="line" select="substring-before($remaining, $lf)"/>
|
||||||
|
<xsl:with-param name="remaining" select="substring-after($remaining, $lf)"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="printFields">
|
||||||
|
<xsl:param name="line"/>
|
||||||
|
|
||||||
|
|
||||||
|
<dive>
|
||||||
|
<xsl:attribute name="date">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="1"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:attribute name="time">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="2"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:attribute name="number">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="0"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:attribute name="duration">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="3"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:attribute name="tags">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="22"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:variable name="rating">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="18"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$rating != ''">
|
||||||
|
<xsl:attribute name="rating">
|
||||||
|
<xsl:value-of select="$rating"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:variable name="visibility">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="19"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$visibility != ''">
|
||||||
|
<xsl:attribute name="visibility">
|
||||||
|
<xsl:value-of select="$visibility"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<divecomputerid deviceid="ffffffff" model="csv" />
|
||||||
|
|
||||||
|
<depth>
|
||||||
|
<xsl:variable name="max">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="4"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="mean">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="5"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$max != ''">
|
||||||
|
<xsl:attribute name="max">
|
||||||
|
<xsl:value-of select="$max"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="$mean != ''">
|
||||||
|
<xsl:attribute name="mean">
|
||||||
|
<xsl:value-of select="$mean"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
</depth>
|
||||||
|
|
||||||
|
<divetemperature>
|
||||||
|
<xsl:variable name="air">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="6"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="water">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="7"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$air != ''">
|
||||||
|
<xsl:attribute name="air">
|
||||||
|
<xsl:value-of select="$air"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="$water != ''">
|
||||||
|
<xsl:attribute name="water">
|
||||||
|
<xsl:value-of select="$water"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
</divetemperature>
|
||||||
|
|
||||||
|
<cylinder>
|
||||||
|
<xsl:variable name="size">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="8"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="start">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="9"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="end">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="10"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="o2">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="11"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="he">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="12"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$size != ''">
|
||||||
|
<xsl:attribute name="size">
|
||||||
|
<xsl:value-of select="$size"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="$start != ''">
|
||||||
|
<xsl:attribute name="start">
|
||||||
|
<xsl:value-of select="$start"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="$end != ''">
|
||||||
|
<xsl:attribute name="end">
|
||||||
|
<xsl:value-of select="$end"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="$o2 != ''">
|
||||||
|
<xsl:attribute name="o2">
|
||||||
|
<xsl:value-of select="$o2"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="$he != ''">
|
||||||
|
<xsl:attribute name="he">
|
||||||
|
<xsl:value-of select="$he"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
</cylinder>
|
||||||
|
|
||||||
|
<location>
|
||||||
|
<xsl:variable name="gps">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="14"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="location">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="13"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$gps != ''">
|
||||||
|
<xsl:attribute name="gps">
|
||||||
|
<xsl:value-of select="$gps"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:if test="$location != ''">
|
||||||
|
<xsl:value-of select="$location"/>
|
||||||
|
</xsl:if>
|
||||||
|
</location>
|
||||||
|
|
||||||
|
<xsl:variable name="dm">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="15"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$dm != ''">
|
||||||
|
<divemaster>
|
||||||
|
<xsl:value-of select="$dm"/>
|
||||||
|
</divemaster>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:variable name="buddy">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="16"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$buddy != ''">
|
||||||
|
<buddy>
|
||||||
|
<xsl:value-of select="$buddy"/>
|
||||||
|
</buddy>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:variable name="suit">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="17"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$suit != ''">
|
||||||
|
<suit>
|
||||||
|
<xsl:value-of select="$suit"/>
|
||||||
|
</suit>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:variable name="notes">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="20"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$notes != ''">
|
||||||
|
<notes>
|
||||||
|
<xsl:value-of select="$notes"/>
|
||||||
|
</notes>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:variable name="weight">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="21"/>
|
||||||
|
<xsl:with-param name="line" select="$line"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:if test="$weight != ''">
|
||||||
|
<weightsystem description="unknown">
|
||||||
|
<xsl:attribute name="weight">
|
||||||
|
<xsl:value-of select="$weight"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</weightsystem>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
</dive>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template name="getFieldByIndex">
|
||||||
|
<xsl:param name="index"/>
|
||||||
|
<xsl:param name="line"/>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$index > 0">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="substring($line, 1, 1) = '"'">
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="$index -1"/>
|
||||||
|
<xsl:with-param name="line" select="substring-after($line, $fs)"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:call-template name="getFieldByIndex">
|
||||||
|
<xsl:with-param name="index" select="$index -1"/>
|
||||||
|
<xsl:with-param name="line" select="substring-after($line, $fs)"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="substring($line, 1, 1) = '"'">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="substring-before($line,'"$fs') != ''">
|
||||||
|
<xsl:value-of select="substring-before($line,'"$fs')"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:if test="substring-after($line, '"$fs') = ''">
|
||||||
|
<xsl:value-of select="substring-before(substring-after($line, '"'), '"')"/>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="substring-before($line,$fs) != ''">
|
||||||
|
<xsl:value-of select="substring-before($line,$fs)"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:if test="substring-after($line, $fs) = ''">
|
||||||
|
<xsl:value-of select="$line"/>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
Loading…
Add table
Reference in a new issue