# Copyright 2008 Google Inc.
# 
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

# This file contains additional data about currencies which are not included in
# the CLDR data.  Currently, this file contains three fields separated by "|".
# Empty trailing fields can be omitted along with their separators.
#
# The first field is a "portable" currency symbol, which is intended to be
# recognized in most locales.
#
# The second field contains zero or more flags separated by spaces.
#
# At most one of the following:
#   SymPrefix     The currency symbol goes before the number, regardless of the
#                 normal position for this locale.
#   SymSuffix     The currency symbol goes after the number, regardless of the
#                 normal position for this locale.
#
# At most one of the following:
#   ForceSpace    Always add a space between the currency symbol and the number.
#   ForceNoSpace  Never add a space after the currency symbol and the number
#
# The third field overrides the CLDR-derived currency symbol if present.
#
# The following were set to 10 originally, which is POSITION_FLAG without
# POS_FIXED_FLAG.  As I understand the code, this would have no effect.
#  CZK DKK EUR ILS ISK NOK RUB SEK
AED = DH
ARS = AR$
AUD = AU$
BDT = Tk
BRL = R$
CAD = C$
CHF = CHF
CLP = CL$
CNY = RMB¥
COP = COL$
CRC = CR₡
CUP = $MN
CZK = Kč
DKK = kr
DOP = RD$
EGP = LE
EUR = €
GBP = GB£
HKD = HK$
ILS = IL₪
INR = Rs
ISK = kr
JMD = JA$
JPY = JP¥
KRW = KR₩
LKR = SLRs
MNT = MN₮
MXN = Mex$
MYR = RM
NOK = NOkr
PAB = B/.
PEN = S/.
PHP = PHP
PKR = PKRs.
RUB = руб
SAR = SR
SEK = kr
SGD = S$
THB = THB
TRY = YTL
TWD = NT$
USD = US$
UYU = UY$
VND = ₫|SymSuffix
YER = YER
ZAR = ZAR
