CurrencyCode.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /*
  2. * Copyright (c) 2021, Tim Flynn <trflynn89@pm.me>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibUnicode/CurrencyCode.h>
  7. namespace Unicode {
  8. static auto const& ensure_currency_codes()
  9. {
  10. // https://www.iso.org/iso-4217-currency-codes.html
  11. // https://www.six-group.com/dam/download/financial-information/data-center/iso-currrency/amendments/lists/list_one.xml
  12. static HashMap<StringView, CurrencyCode> currency_codes {
  13. { "AED"sv, { 2 } },
  14. { "AFN"sv, { 2 } },
  15. { "ALL"sv, { 2 } },
  16. { "AMD"sv, { 2 } },
  17. { "ANG"sv, { 2 } },
  18. { "AOA"sv, { 2 } },
  19. { "ARS"sv, { 2 } },
  20. { "AUD"sv, { 2 } },
  21. { "AWG"sv, { 2 } },
  22. { "AZN"sv, { 2 } },
  23. { "BAM"sv, { 2 } },
  24. { "BBD"sv, { 2 } },
  25. { "BDT"sv, { 2 } },
  26. { "BGN"sv, { 2 } },
  27. { "BHD"sv, { 3 } },
  28. { "BIF"sv, { 0 } },
  29. { "BMD"sv, { 2 } },
  30. { "BND"sv, { 2 } },
  31. { "BOB"sv, { 2 } },
  32. { "BOV"sv, { 2 } },
  33. { "BRL"sv, { 2 } },
  34. { "BSD"sv, { 2 } },
  35. { "BTN"sv, { 2 } },
  36. { "BWP"sv, { 2 } },
  37. { "BYN"sv, { 2 } },
  38. { "BZD"sv, { 2 } },
  39. { "CAD"sv, { 2 } },
  40. { "CDF"sv, { 2 } },
  41. { "CHE"sv, { 2 } },
  42. { "CHF"sv, { 2 } },
  43. { "CHW"sv, { 2 } },
  44. { "CLF"sv, { 4 } },
  45. { "CLP"sv, { 0 } },
  46. { "CNY"sv, { 2 } },
  47. { "COP"sv, { 2 } },
  48. { "COU"sv, { 2 } },
  49. { "CRC"sv, { 2 } },
  50. { "CUC"sv, { 2 } },
  51. { "CUP"sv, { 2 } },
  52. { "CVE"sv, { 2 } },
  53. { "CZK"sv, { 2 } },
  54. { "DJF"sv, { 0 } },
  55. { "DKK"sv, { 2 } },
  56. { "DOP"sv, { 2 } },
  57. { "DZD"sv, { 2 } },
  58. { "EGP"sv, { 2 } },
  59. { "ERN"sv, { 2 } },
  60. { "ETB"sv, { 2 } },
  61. { "EUR"sv, { 2 } },
  62. { "FJD"sv, { 2 } },
  63. { "FKP"sv, { 2 } },
  64. { "GBP"sv, { 2 } },
  65. { "GEL"sv, { 2 } },
  66. { "GHS"sv, { 2 } },
  67. { "GIP"sv, { 2 } },
  68. { "GMD"sv, { 2 } },
  69. { "GNF"sv, { 0 } },
  70. { "GTQ"sv, { 2 } },
  71. { "GYD"sv, { 2 } },
  72. { "HKD"sv, { 2 } },
  73. { "HNL"sv, { 2 } },
  74. { "HRK"sv, { 2 } },
  75. { "HTG"sv, { 2 } },
  76. { "HUF"sv, { 2 } },
  77. { "IDR"sv, { 2 } },
  78. { "ILS"sv, { 2 } },
  79. { "INR"sv, { 2 } },
  80. { "IQD"sv, { 3 } },
  81. { "IRR"sv, { 2 } },
  82. { "ISK"sv, { 0 } },
  83. { "JMD"sv, { 2 } },
  84. { "JOD"sv, { 3 } },
  85. { "JPY"sv, { 0 } },
  86. { "KES"sv, { 2 } },
  87. { "KGS"sv, { 2 } },
  88. { "KHR"sv, { 2 } },
  89. { "KMF"sv, { 0 } },
  90. { "KPW"sv, { 2 } },
  91. { "KRW"sv, { 0 } },
  92. { "KWD"sv, { 3 } },
  93. { "KYD"sv, { 2 } },
  94. { "KZT"sv, { 2 } },
  95. { "LAK"sv, { 2 } },
  96. { "LBP"sv, { 2 } },
  97. { "LKR"sv, { 2 } },
  98. { "LRD"sv, { 2 } },
  99. { "LSL"sv, { 2 } },
  100. { "LYD"sv, { 3 } },
  101. { "MAD"sv, { 2 } },
  102. { "MDL"sv, { 2 } },
  103. { "MGA"sv, { 2 } },
  104. { "MKD"sv, { 2 } },
  105. { "MMK"sv, { 2 } },
  106. { "MNT"sv, { 2 } },
  107. { "MOP"sv, { 2 } },
  108. { "MRU"sv, { 2 } },
  109. { "MUR"sv, { 2 } },
  110. { "MVR"sv, { 2 } },
  111. { "MWK"sv, { 2 } },
  112. { "MXN"sv, { 2 } },
  113. { "MXV"sv, { 2 } },
  114. { "MYR"sv, { 2 } },
  115. { "MZN"sv, { 2 } },
  116. { "NAD"sv, { 2 } },
  117. { "NGN"sv, { 2 } },
  118. { "NIO"sv, { 2 } },
  119. { "NOK"sv, { 2 } },
  120. { "NPR"sv, { 2 } },
  121. { "NZD"sv, { 2 } },
  122. { "OMR"sv, { 3 } },
  123. { "PAB"sv, { 2 } },
  124. { "PEN"sv, { 2 } },
  125. { "PGK"sv, { 2 } },
  126. { "PHP"sv, { 2 } },
  127. { "PKR"sv, { 2 } },
  128. { "PLN"sv, { 2 } },
  129. { "PYG"sv, { 0 } },
  130. { "QAR"sv, { 2 } },
  131. { "RON"sv, { 2 } },
  132. { "RSD"sv, { 2 } },
  133. { "RUB"sv, { 2 } },
  134. { "RWF"sv, { 0 } },
  135. { "SAR"sv, { 2 } },
  136. { "SBD"sv, { 2 } },
  137. { "SCR"sv, { 2 } },
  138. { "SDG"sv, { 2 } },
  139. { "SEK"sv, { 2 } },
  140. { "SGD"sv, { 2 } },
  141. { "SHP"sv, { 2 } },
  142. { "SLL"sv, { 2 } },
  143. { "SOS"sv, { 2 } },
  144. { "SRD"sv, { 2 } },
  145. { "SSP"sv, { 2 } },
  146. { "STN"sv, { 2 } },
  147. { "SVC"sv, { 2 } },
  148. { "SYP"sv, { 2 } },
  149. { "SZL"sv, { 2 } },
  150. { "THB"sv, { 2 } },
  151. { "TJS"sv, { 2 } },
  152. { "TMT"sv, { 2 } },
  153. { "TND"sv, { 3 } },
  154. { "TOP"sv, { 2 } },
  155. { "TRY"sv, { 2 } },
  156. { "TTD"sv, { 2 } },
  157. { "TWD"sv, { 2 } },
  158. { "TZS"sv, { 2 } },
  159. { "UAH"sv, { 2 } },
  160. { "UGX"sv, { 0 } },
  161. { "USD"sv, { 2 } },
  162. { "USN"sv, { 2 } },
  163. { "UYI"sv, { 0 } },
  164. { "UYU"sv, { 2 } },
  165. { "UYW"sv, { 4 } },
  166. { "UZS"sv, { 2 } },
  167. { "VES"sv, { 2 } },
  168. { "VND"sv, { 0 } },
  169. { "VUV"sv, { 0 } },
  170. { "WST"sv, { 2 } },
  171. { "XAF"sv, { 0 } },
  172. { "XAG"sv, { {} } },
  173. { "XAU"sv, { {} } },
  174. { "XBA"sv, { {} } },
  175. { "XBB"sv, { {} } },
  176. { "XBC"sv, { {} } },
  177. { "XBD"sv, { {} } },
  178. { "XCD"sv, { 2 } },
  179. { "XDR"sv, { {} } },
  180. { "XOF"sv, { 0 } },
  181. { "XPD"sv, { {} } },
  182. { "XPF"sv, { 0 } },
  183. { "XPT"sv, { {} } },
  184. { "XSU"sv, { {} } },
  185. { "XTS"sv, { {} } },
  186. { "XUA"sv, { {} } },
  187. { "XXX"sv, { {} } },
  188. { "YER"sv, { 2 } },
  189. { "ZAR"sv, { 2 } },
  190. { "ZMW"sv, { 2 } },
  191. { "ZWL"sv, { 2 } },
  192. };
  193. return currency_codes;
  194. }
  195. Optional<CurrencyCode> get_currency_code(StringView currency)
  196. {
  197. static auto const& currency_codes = ensure_currency_codes();
  198. return currency_codes.get(currency);
  199. }
  200. }