diff options
author | Miika Turkia <miika.turkia@gmail.com> | 2011-11-05 12:39:17 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-05 13:24:53 -0700 |
commit | 350462949d2dc205355e5c94ccaacf83a0775257 (patch) | |
tree | 509a28ad12c6754824fb537837a3a7adc376b456 /parse-xml.c | |
parent | 4b735521e2561fe6d03f9f94122fbdc58f48e4a5 (diff) | |
download | subsurface-350462949d2dc205355e5c94ccaacf83a0775257.tar.gz |
Use XSLT file to open JDiveLog logs
Open JDiveLog files by translating them to subsurface format using XSLT.
These files are identified by the name of the first element (JDiveLog)
and transform is applied to only these.
The XSLT feature is compiled in only if libxslt is installed. The
transformation files are installed globally in Linux under
/usr/share/subsurface/xslt. Windows and OSX still need appropriate Makefile
changes and testing.
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'parse-xml.c')
-rw-r--r-- | parse-xml.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/parse-xml.c b/parse-xml.c index 5eabc353c..ddf93a4b1 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -7,6 +7,9 @@ #include <time.h> #include <libxml/parser.h> #include <libxml/tree.h> +#ifdef XSLT +#include <libxslt/transform.h> +#endif #include "dive.h" #include "uemis.h" @@ -1466,6 +1469,9 @@ void parse_xml_file(const char *filename, GError **error) set_filename(filename); reset_all(); dive_start(); +#ifdef XSLT + doc = test_xslt_transforms(doc); +#endif traverse(xmlDocGetRootElement(doc)); dive_end(); xmlFreeDoc(doc); @@ -1476,3 +1482,23 @@ void parse_xml_init(void) { LIBXML_TEST_VERSION } + +#ifdef XSLT +xmlDoc *test_xslt_transforms(xmlDoc *doc) +{ + xmlDoc *transformed; + xsltStylesheetPtr xslt = NULL; + xmlNode *root_element = xmlDocGetRootElement(doc); + if (strcasecmp(root_element->name, "JDiveLog") == 0) { + xmlSubstituteEntitiesDefault(1); + xslt = xsltParseStylesheetFile(XSLT G_DIR_SEPARATOR_S "jdivelog2subsurface.xslt"); + if (xslt == NULL) + return doc; + transformed = xsltApplyStylesheet(xslt, doc, NULL); + xmlFreeDoc(doc); + xsltFreeStylesheet(xslt); + return transformed; + } + return doc; +} +#endif |