diff options
author | Alexis Hildebrandt <afh@surryhill.net> | 2014-05-08 12:07:17 +0200 |
---|---|---|
committer | Alexis Hildebrandt <afh@surryhill.net> | 2014-05-08 12:15:47 +0200 |
commit | 1e5cf0c924d0a4cd6a0c863b1e163bd8db65dbea (patch) | |
tree | 4ce6622f50a6e06c6797dcbc2cde6f72bdd2ab68 /contrib | |
parent | c254bea7975b56675fe55cb44125ded55cb79f35 (diff) | |
download | fork-ledger-1e5cf0c924d0a4cd6a0c863b1e163bd8db65dbea.tar.gz fork-ledger-1e5cf0c924d0a4cd6a0c863b1e163bd8db65dbea.tar.bz2 fork-ledger-1e5cf0c924d0a4cd6a0c863b1e163bd8db65dbea.zip |
Add script to generate commodities from ISO 4217
[ci skip]
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/iso4127-commodities/iso4217ledger.sh | 54 | ||||
-rw-r--r-- | contrib/iso4127-commodities/iso4217ledger.xsl | 138 |
2 files changed, 192 insertions, 0 deletions
diff --git a/contrib/iso4127-commodities/iso4217ledger.sh b/contrib/iso4127-commodities/iso4217ledger.sh new file mode 100755 index 00000000..1841abe8 --- /dev/null +++ b/contrib/iso4127-commodities/iso4217ledger.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +# iso4217ledger.sh - Convert ISO 4217 currencies to ledger commodities +# +# This script will download the latest XML for ISO 4217 Table A.1 +# and print the contained currency & funds code list as ledger +# commodity definitions to stdout. + +# Copyright (c) 2014 Alexis Hildebrandt +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +xml_url="http://www.currency-iso.org/dam/downloads/table_a1.xml" +xsl_file="$(dirname $0)/iso4217ledger.xsl" + +xsltproc="$(which xsltproc)" +if [ ! -f "$xsltproc" -o ! -x "$xsltproc" ]; then + echo "Can't find xsltproc" + exit 1 +fi + +download_command="$(which curl)" +if [ -f "$download_command" \ + -a -x "$download_command" ]; then + download_options="--silent" +else + download_command="$(which wget)" + if [ -n "$download_command" \ + -a -f "$download_command" \ + -a -x "$download_command" ]; then + download_options="--quiet --output-document -" + else + echo "Can't find curl or wget." + exit 1 + fi +fi + +$download_command $download_options "$xml_url" | $xsltproc "$xsl_file" - diff --git a/contrib/iso4127-commodities/iso4217ledger.xsl b/contrib/iso4127-commodities/iso4217ledger.xsl new file mode 100644 index 00000000..cd70d2d6 --- /dev/null +++ b/contrib/iso4127-commodities/iso4217ledger.xsl @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + ! iso4217ledger.xsl - Transform ISO 4217 Table A.1 to ledger commodities + ! + ! The current currency & funds code list is found at: + ! http://www.currency-iso.org/en/home/tables/table-a1.html + ! --> + +<!-- + ! Copyright (c) 2014 Alexis Hildebrandt + ! + ! Permission is hereby granted, free of charge, to any person obtaining a copy + ! of this software and associated documentation files (the "Software"), to deal + ! in the Software without restriction, including without limitation the rights + ! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + ! copies of the Software, and to permit persons to whom the Software is + ! furnished to do so, subject to the following conditions: + ! + ! The above copyright notice and this permission notice shall be included in + ! all copies or substantial portions of the Software. + ! + ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + ! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + ! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + ! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + ! SOFTWARE. + ! --> + +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + > + + <!-- + ! Set the value of this variable to your preferred decimal separator. + ! For European countries this is likely to be the comma ','. + ! --> + <xsl:variable name="decimal_separator"> + <xsl:text>,</xsl:text> + <!-- + <xsl:text>.</xsl:text> + --> + </xsl:variable> + + + <!-- + ! Ensure that plain text will be written, + ! and all whitespace from the XML source is stripped. + ! --> + <xsl:output method="text"/> + <xsl:template match="text()" /> + + <!-- + ! Add comment that the file was generated. + ! --> + <xsl:template match="/"> + <xsl:text>; Ledger commodity declarations +; Generated from ISO 4217 Table A.1 XML (</xsl:text> + <xsl:value-of select="ISO_4217/@Pblshd"/> +<xsl:text>) using iso4217ledger.xsl + +</xsl:text> + <xsl:apply-templates /> + </xsl:template> + + <!-- + ! Create ledger entry for the corresponding commodity + ! --> + <xsl:template match="CcyNtry"> + <xsl:variable name="ccy"> + <xsl:choose> + <xsl:when test="Ccy"> + <xsl:value-of select="Ccy"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>ยค</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:text>commodity </xsl:text> + <xsl:value-of select="$ccy"/> + + <xsl:text> + note </xsl:text> + <xsl:value-of select="CcyNm"/> + <xsl:text> - </xsl:text> + <xsl:value-of select="normalize-space(CtryNm)"/> + <xsl:if test="CcyNbr"> + <xsl:text> (</xsl:text> + <xsl:value-of select="CcyNbr"/> + <xsl:text>)</xsl:text> + </xsl:if> + + <xsl:text> + format </xsl:text> + <xsl:value-of select="$ccy"/><xsl:text> </xsl:text> + <xsl:text>0000</xsl:text> + <xsl:choose> + <xsl:when test="CcyMnrUnts > 0"> + <xsl:value-of select="$decimal_separator"/> + <xsl:call-template name="zero"> + <xsl:with-param name="count" select="CcyMnrUnts"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="CcyMnrUnts = 'N.A.'"> + <xsl:value-of select="$decimal_separator"/> + <xsl:call-template name="zero"> + <xsl:with-param name="count" select="3"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + </xsl:otherwise> + </xsl:choose> + + <xsl:text> + nomarket + +</xsl:text> + </xsl:template> + + + <!-- + ! Recursive template to generate 0s + ! --> + <xsl:template name="zero"> + <xsl:param name="count" select="0"/> + <xsl:if test="$count > 0"> + <xsl:text>0</xsl:text> + <xsl:call-template name="zero"> + <xsl:with-param name="count" select="$count - 1"/> + </xsl:call-template> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> |