aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Rutger Broekhoff2024-05-04 16:33:53 +0200
committerLibravatar Rutger Broekhoff2024-05-04 16:33:53 +0200
commit279f790f078325582aa62e562a766204034766e4 (patch)
tree6aea4ebf68194afee9bbd4d5a8339355ec6753a7
parent4f5cb257dc47dcff1b1306e4ae702669dfa93197 (diff)
downloadoeuf-279f790f078325582aa62e562a766204034766e4.tar.gz
oeuf-279f790f078325582aa62e562a766204034766e4.zip
Try generating C++ code from NeTEx XSDs using CodeSynthesis XSD
-rw-r--r--scratch/netex-nl-cxx/.gitignore2
-rw-r--r--scratch/netex-nl-cxx/merge-enums-into-basic.xslt23
-rwxr-xr-xscratch/netex-nl-cxx/process.sh29
-rw-r--r--scratch/netex-nl-cxx/remove-enums-include.xslt12
4 files changed, 66 insertions, 0 deletions
diff --git a/scratch/netex-nl-cxx/.gitignore b/scratch/netex-nl-cxx/.gitignore
new file mode 100644
index 0000000..f7d74b2
--- /dev/null
+++ b/scratch/netex-nl-cxx/.gitignore
@@ -0,0 +1,2 @@
1/vendor/
2/gen/
diff --git a/scratch/netex-nl-cxx/merge-enums-into-basic.xslt b/scratch/netex-nl-cxx/merge-enums-into-basic.xslt
new file mode 100644
index 0000000..6e3fdad
--- /dev/null
+++ b/scratch/netex-nl-cxx/merge-enums-into-basic.xslt
@@ -0,0 +1,23 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3 <!-- Replace includes of netex-nl-enums.xsd with the (almost) literal
4 contents of the xsd:schema definition in netex-nl-enums.xsd -->
5 <xsl:template match="xsd:include[@schemaLocation='netex-nl-enums.xsd']">
6 <xsl:apply-templates select="document('netex-nl-enums.xsd', /)/xsd:schema/node()"/>
7 </xsl:template>
8
9 <!-- Remove the big 'AFHANKELIJKHEDEN' (dependencies) comment, which
10 otherwise looks out of place in the output -->
11 <xsl:template match="comment()[following-sibling::*[1]/self::xsd:include[@schemaLocation='netex-nl-basic.xsd']]"/>
12
13 <!-- Remove includes of netex-nl-basic.xsd (coming from netex-nl-enums.xsd),
14 because we basically inline netex-nl-enums.xsd into netex-nl-basic.xsd -->
15 <xsl:template match="xsd:include[@schemaLocation='netex-nl-basic.xsd']"/>
16
17 <!-- Apply the transformation on the entire tree -->
18 <xsl:template match="@*|node()">
19 <xsl:copy>
20 <xsl:apply-templates select="@*|node()"/>
21 </xsl:copy>
22 </xsl:template>
23</xsl:transform>
diff --git a/scratch/netex-nl-cxx/process.sh b/scratch/netex-nl-cxx/process.sh
new file mode 100755
index 0000000..8ab7a94
--- /dev/null
+++ b/scratch/netex-nl-cxx/process.sh
@@ -0,0 +1,29 @@
1#!/usr/bin/env bash
2
3set -eu
4set -o pipefail
5
6XSD_TAG="v9.3.0-draft1"
7
8rm -rf ./gen ./vendor/src
9mkdir -p gen vendor/src
10
11curl -L "https://github.com/BISONNL/NeTEx-NL/archive/refs/tags/$XSD_TAG.tar.gz" -o ./vendor/netex-nl.tar.gz
12tar -xzf ./vendor/netex-nl.tar.gz --strip-components 1 -C ./vendor/src/
13
14xsltproc -o ./vendor/src/xsd/netex-nl-basic-new.xsd ./merge-enums-into-basic.xslt ./vendor/src/xsd/netex-nl-basic.xsd
15xsltproc -o ./vendor/src/xsd/netex-nl-data-new.xsd ./remove-enums-include.xslt ./vendor/src/xsd/netex-nl-data.xsd
16xsltproc -o ./vendor/src/xsd/netex-nl-new.xsd ./remove-enums-include.xslt ./vendor/src/xsd/netex-nl.xsd
17rm ./vendor/src/xsd/netex-nl-enums.xsd
18mv ./vendor/src/xsd/netex-nl-basic-new.xsd ./vendor/src/xsd/netex-nl-basic.xsd
19mv ./vendor/src/xsd/netex-nl-data-new.xsd ./vendor/src/xsd/netex-nl-data.xsd
20mv ./vendor/src/xsd/netex-nl-new.xsd ./vendor/src/xsd/netex-nl.xsd
21
22process () {
23 xsdcxx cxx-tree --output-dir ./gen --namespace-map http://www.opengis.net/gml/3.2=gml "vendor/src/xsd/$1.xsd"
24}
25
26process gml-bison
27process netex-nl-basic
28process netex-nl-data
29process netex-nl
diff --git a/scratch/netex-nl-cxx/remove-enums-include.xslt b/scratch/netex-nl-cxx/remove-enums-include.xslt
new file mode 100644
index 0000000..170f732
--- /dev/null
+++ b/scratch/netex-nl-cxx/remove-enums-include.xslt
@@ -0,0 +1,12 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3 <!-- Remove includes of netex-nl-enums.xsd -->
4 <xsl:template match="xsd:include[@schemaLocation='netex-nl-enums.xsd']" />
5
6 <!-- Apply the transformation on the entire tree -->
7 <xsl:template match="@*|node()">
8 <xsl:copy>
9 <xsl:apply-templates select="@*|node()"/>
10 </xsl:copy>
11 </xsl:template>
12</xsl:transform>