Merge pull request #284 from afh/pull/iso4217
Add script to generate commodities from ISO 4217 Interesting. Thanks
This commit is contained in:
commit
55ecb9fb62
2 changed files with 192 additions and 0 deletions
54
contrib/iso4127-commodities/iso4217ledger.sh
Executable file
54
contrib/iso4127-commodities/iso4217ledger.sh
Executable file
|
|
@ -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" -
|
||||
138
contrib/iso4127-commodities/iso4217ledger.xsl
Normal file
138
contrib/iso4127-commodities/iso4217ledger.xsl
Normal file
|
|
@ -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>
|
||||
Loading…
Add table
Reference in a new issue