holidays 0.85__py3-none-any.whl → 0.87__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. holidays/calendars/chinese.py +44 -6
  2. holidays/calendars/hindu.py +85 -1
  3. holidays/countries/bangladesh.py +13 -9
  4. holidays/countries/bulgaria.py +208 -50
  5. holidays/countries/estonia.py +55 -9
  6. holidays/countries/germany.py +75 -74
  7. holidays/countries/gibraltar.py +1 -1
  8. holidays/countries/india.py +5 -3
  9. holidays/countries/italy.py +489 -167
  10. holidays/countries/mongolia.py +1 -5
  11. holidays/countries/nepal.py +46 -41
  12. holidays/countries/russia.py +1 -2
  13. holidays/countries/sweden.py +102 -32
  14. holidays/countries/taiwan.py +3 -6
  15. holidays/countries/thailand.py +5 -5
  16. holidays/countries/united_states.py +55 -46
  17. holidays/financial/ny_stock_exchange.py +591 -89
  18. holidays/groups/chinese.py +11 -18
  19. holidays/groups/hindu.py +24 -0
  20. holidays/holiday_base.py +51 -23
  21. holidays/locale/bg/LC_MESSAGES/BG.mo +0 -0
  22. holidays/locale/bn/LC_MESSAGES/BD.mo +0 -0
  23. holidays/locale/de/LC_MESSAGES/DE.mo +0 -0
  24. holidays/locale/en_US/LC_MESSAGES/BD.mo +0 -0
  25. holidays/locale/en_US/LC_MESSAGES/BG.mo +0 -0
  26. holidays/locale/en_US/LC_MESSAGES/DE.mo +0 -0
  27. holidays/locale/en_US/LC_MESSAGES/EE.mo +0 -0
  28. holidays/locale/en_US/LC_MESSAGES/IT.mo +0 -0
  29. holidays/locale/en_US/LC_MESSAGES/NP.mo +0 -0
  30. holidays/locale/en_US/LC_MESSAGES/SE.mo +0 -0
  31. holidays/locale/en_US/LC_MESSAGES/TW.mo +0 -0
  32. holidays/locale/et/LC_MESSAGES/EE.mo +0 -0
  33. holidays/locale/gu/LC_MESSAGES/IN.mo +0 -0
  34. holidays/locale/it_IT/LC_MESSAGES/IT.mo +0 -0
  35. holidays/locale/ne/LC_MESSAGES/NP.mo +0 -0
  36. holidays/locale/sv/LC_MESSAGES/SE.mo +0 -0
  37. holidays/locale/th/LC_MESSAGES/CA.mo +0 -0
  38. holidays/locale/th/LC_MESSAGES/CN.mo +0 -0
  39. holidays/locale/th/LC_MESSAGES/DE.mo +0 -0
  40. holidays/locale/th/LC_MESSAGES/DK.mo +0 -0
  41. holidays/locale/th/LC_MESSAGES/ES.mo +0 -0
  42. holidays/locale/th/LC_MESSAGES/FI.mo +0 -0
  43. holidays/locale/th/LC_MESSAGES/HK.mo +0 -0
  44. holidays/locale/th/LC_MESSAGES/NO.mo +0 -0
  45. holidays/locale/th/LC_MESSAGES/SE.mo +0 -0
  46. holidays/locale/th/LC_MESSAGES/TL.mo +0 -0
  47. holidays/locale/th/LC_MESSAGES/TW.mo +0 -0
  48. holidays/locale/th/LC_MESSAGES/US.mo +0 -0
  49. holidays/locale/th/LC_MESSAGES/VA.mo +0 -0
  50. holidays/locale/uk/LC_MESSAGES/BG.mo +0 -0
  51. holidays/locale/uk/LC_MESSAGES/DE.mo +0 -0
  52. holidays/locale/uk/LC_MESSAGES/EE.mo +0 -0
  53. holidays/locale/uk/LC_MESSAGES/SE.mo +0 -0
  54. holidays/locale/zh_CN/LC_MESSAGES/TW.mo +0 -0
  55. holidays/locale/zh_TW/LC_MESSAGES/TW.mo +0 -0
  56. holidays/utils.py +10 -1
  57. holidays/version.py +1 -1
  58. {holidays-0.85.dist-info → holidays-0.87.dist-info}/METADATA +18 -11
  59. {holidays-0.85.dist-info → holidays-0.87.dist-info}/RECORD +63 -56
  60. {holidays-0.85.dist-info → holidays-0.87.dist-info}/licenses/CONTRIBUTORS +4 -0
  61. {holidays-0.85.dist-info → holidays-0.87.dist-info}/WHEEL +0 -0
  62. {holidays-0.85.dist-info → holidays-0.87.dist-info}/licenses/LICENSE +0 -0
  63. {holidays-0.85.dist-info → holidays-0.87.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,6 @@
13
13
  from datetime import date
14
14
 
15
15
  from holidays.calendars.chinese import _ChineseLunisolar, CHINESE_CALENDAR
16
- from holidays.calendars.gregorian import APR
17
16
  from holidays.groups.eastern import EasternCalendarHolidays
18
17
 
19
18
 
@@ -38,12 +37,9 @@ class ChineseCalendarHolidays(EasternCalendarHolidays):
38
37
  @property
39
38
  def _qingming_festival(self):
40
39
  """
41
- Return Qingming Festival (15th day after the Spring Equinox) date.
40
+ Return Qingming Festival (5th solar term) date.
42
41
  """
43
- day = 5
44
- if (self._year % 4 < 1) or (self._year % 4 < 2 and self._year >= 2009):
45
- day = 4
46
- return date(self._year, APR, day)
42
+ return self._chinese_calendar.qingming_date(self._year)[0]
47
43
 
48
44
  @property
49
45
  def _mid_autumn_festival(self):
@@ -74,13 +70,6 @@ class ChineseCalendarHolidays(EasternCalendarHolidays):
74
70
  """
75
71
  return self._chinese_calendar.double_ninth_date(self._year)[0]
76
72
 
77
- @property
78
- def _dongzhi_festival(self):
79
- """
80
- Return Dongzhi Festival (Chinese Winter Solstice) date.
81
- """
82
- return self._chinese_calendar.winter_solstice_date(self._year)[0]
83
-
84
73
  def _add_chinese_calendar_holiday(
85
74
  self, name: str, dt_estimated: tuple[date | None, bool], days_delta: int = 0
86
75
  ) -> date | None:
@@ -199,14 +188,16 @@ class ChineseCalendarHolidays(EasternCalendarHolidays):
199
188
 
200
189
  def _add_dongzhi_festival(self, name) -> date | None:
201
190
  """
202
- Add Dongzhi Festival (Chinese Winter Solstice).
191
+ Add Dongzhi Festival (22nd solar term, Winter Solstice).
203
192
 
204
193
  The Dongzhi Festival or Winter Solstice Festival is a traditional
205
194
  Chinese festival celebrated during the Dongzhi solar term
206
195
  (winter solstice), which falls between December 21 and 23.
207
196
  https://en.wikipedia.org/wiki/Dongzhi_Festival
208
197
  """
209
- return self._add_holiday(name, self._dongzhi_festival)
198
+ return self._add_chinese_calendar_holiday(
199
+ name, self._chinese_calendar.winter_solstice_date(self._year)
200
+ )
210
201
 
211
202
  def _add_hanshi_festival(self, name) -> date | None:
212
203
  """
@@ -221,15 +212,17 @@ class ChineseCalendarHolidays(EasternCalendarHolidays):
221
212
  name, self._chinese_calendar.winter_solstice_date(self._year - 1), days_delta=+105
222
213
  )
223
214
 
224
- def _add_qingming_festival(self, name) -> date:
215
+ def _add_qingming_festival(self, name) -> date | None:
225
216
  """
226
- Add Qingming Festival (15th day after the Spring Equinox).
217
+ Add Qingming Festival (5th solar term of the Chinese lunisolar calendar).
227
218
 
228
219
  The Qingming festival or Ching Ming Festival, also known as
229
220
  Tomb-Sweeping Day in English, is a traditional Chinese festival.
230
221
  https://en.wikipedia.org/wiki/Qingming_Festival
231
222
  """
232
- return self._add_holiday(name, self._qingming_festival)
223
+ return self._add_chinese_calendar_holiday(
224
+ name, self._chinese_calendar.qingming_date(self._year)
225
+ )
233
226
 
234
227
  def _add_double_ninth_festival(self, name) -> date | None:
235
228
  """
holidays/groups/hindu.py CHANGED
@@ -59,6 +59,18 @@ class HinduCalendarHolidays(EasternCalendarHolidays):
59
59
  days_delta=days_delta,
60
60
  )
61
61
 
62
+ def _add_bathukamma(self, name) -> date | None:
63
+ """
64
+ Add Bathukamma Festival.
65
+
66
+ Bathukamma is a floral festival celebrated predominantly in Telangana
67
+ and some parts of Andhra Pradesh. It starts on Mahalaya Amavasya.
68
+ https://en.wikipedia.org/wiki/Bathukamma
69
+ """
70
+ return self._add_hindu_calendar_holiday(
71
+ name, self._hindu_calendar.bathukamma_date(self._year)
72
+ )
73
+
62
74
  def _add_bhai_dooj(self, name) -> date | None:
63
75
  """
64
76
  Add Bhai Dooj.
@@ -301,6 +313,18 @@ class HinduCalendarHolidays(EasternCalendarHolidays):
301
313
  name, self._hindu_calendar.maha_shivaratri_date(self._year)
302
314
  )
303
315
 
316
+ def _add_maharana_pratap_jayanti(self, name) -> date | None:
317
+ """
318
+ Add Maharana Pratap Jayanti.
319
+
320
+ Maharana Pratap Jayanti celebrates the birth of the Rajput king Maharana Pratap.
321
+ It falls on the third day of the Shukla Paksha of the month of Jyeshtha.
322
+ https://en.wikipedia.org/wiki/Maharana_Pratap
323
+ """
324
+ return self._add_hindu_calendar_holiday(
325
+ name, self._hindu_calendar.maharana_pratap_jayanti_date(self._year)
326
+ )
327
+
304
328
  def _add_mahavir_jayanti(self, name) -> date | None:
305
329
  """
306
330
  Add Mahavir Jayanti.
holidays/holiday_base.py CHANGED
@@ -46,6 +46,7 @@ from holidays.helpers import _normalize_arguments, _normalize_tuple
46
46
  CategoryArg = str | Iterable[str]
47
47
  DateArg = date | tuple[int, int] | tuple[int, int, int]
48
48
  DateLike = date | datetime | str | float | int
49
+ NameLookup = Literal["contains", "exact", "startswith", "icontains", "iexact", "istartswith"]
49
50
  SpecialHoliday = tuple[int, int, str] | tuple[tuple[int, int, str], ...]
50
51
  SubstitutedHoliday = (
51
52
  tuple[int, int, int, int]
@@ -558,27 +559,25 @@ class HolidayBase(dict[date, str]):
558
559
 
559
560
  if key.step is None:
560
561
  step = 1
561
- elif isinstance(key.step, timedelta):
562
- step = key.step.days
563
562
  elif isinstance(key.step, int):
564
563
  step = key.step
564
+ elif isinstance(key.step, timedelta):
565
+ step = key.step.days
565
566
  else:
566
567
  raise TypeError(f"Cannot convert type '{type(key.step)}' to int.")
567
568
 
568
569
  if step == 0:
569
570
  raise ValueError("Step value must not be zero.")
570
571
 
571
- date_diff = stop - start
572
- if date_diff.days < 0 <= step or date_diff.days >= 0 > step:
573
- step *= -1
574
-
575
- days_in_range = []
576
- for delta_days in range(0, date_diff.days, step):
577
- day = _timedelta(start, delta_days)
578
- if day in self:
579
- days_in_range.append(day)
572
+ diff_days = (stop - start).days
573
+ if diff_days < 0 <= step or diff_days >= 0 > step:
574
+ step = -step
580
575
 
581
- return days_in_range
576
+ return [
577
+ day
578
+ for delta_days in range(0, diff_days, step)
579
+ if (day := _timedelta(start, delta_days)) in self
580
+ ]
582
581
 
583
582
  return dict.__getitem__(self, self.__keytransform__(key))
584
583
 
@@ -670,19 +669,14 @@ class HolidayBase(dict[date, str]):
670
669
  if self:
671
670
  return super().__repr__()
672
671
 
673
- parts = []
674
672
  if hasattr(self, "market"):
675
- parts.append(f"holidays.financial_holidays({self.market!r}")
676
- parts.append(")")
673
+ return f"holidays.financial_holidays({self.market!r})"
677
674
  elif hasattr(self, "country"):
678
- parts.append(f"holidays.country_holidays({self.country!r}")
679
675
  if self.subdiv:
680
- parts.append(f", subdiv={self.subdiv!r}")
681
- parts.append(")")
682
- else:
683
- parts.append("holidays.HolidayBase()")
676
+ return f"holidays.country_holidays({self.country!r}, subdiv={self.subdiv!r})"
677
+ return f"holidays.country_holidays({self.country!r})"
684
678
 
685
- return "".join(parts)
679
+ return "holidays.HolidayBase()"
686
680
 
687
681
  def __setattr__(self, key: str, value: Any) -> None:
688
682
  dict.__setattr__(self, key, value)
@@ -809,6 +803,37 @@ class HolidayBase(dict[date, str]):
809
803
  self[dt] = self.tr(name)
810
804
  return dt
811
805
 
806
+ def _add_multiday_holiday(
807
+ self, start_date: date, duration_days: int, *, name: str | None = None
808
+ ) -> set[date]:
809
+ """Add a multi-day holiday.
810
+
811
+ Args:
812
+ start_date:
813
+ First day of the holiday.
814
+
815
+ duration_days:
816
+ Number of additional days to add.
817
+
818
+ name:
819
+ Optional holiday name; inferred from `start_date` if omitted.
820
+
821
+ Returns:
822
+ A set of all added holiday dates.
823
+
824
+ Raises:
825
+ ValueError:
826
+ If the holiday name cannot be inferred from `start_date`.
827
+ """
828
+ if (holiday_name := name or self.get(start_date)) is None:
829
+ raise ValueError(f"Cannot infer holiday name for date {start_date!r}.")
830
+
831
+ return {
832
+ d
833
+ for delta in range(1, duration_days + 1)
834
+ if (d := self._add_holiday(holiday_name, _timedelta(start_date, delta)))
835
+ }
836
+
812
837
  def _add_special_holidays(self, mapping_names, *, observed=False):
813
838
  """Add special holidays."""
814
839
  for mapping_name in mapping_names:
@@ -997,7 +1022,10 @@ class HolidayBase(dict[date, str]):
997
1022
  return [name for name in self.get(key, "").split(HOLIDAY_NAME_DELIMITER) if name]
998
1023
 
999
1024
  def get_named(
1000
- self, holiday_name: str, lookup: str = "icontains", split_multiple_names: bool = True
1025
+ self,
1026
+ holiday_name: str,
1027
+ lookup: NameLookup = "icontains",
1028
+ split_multiple_names: bool = True,
1001
1029
  ) -> list[date]:
1002
1030
  """Find all holiday dates matching a given name.
1003
1031
 
@@ -1202,7 +1230,7 @@ class HolidayBase(dict[date, str]):
1202
1230
 
1203
1231
  return dict.pop(self, self.__keytransform__(key), default)
1204
1232
 
1205
- def pop_named(self, holiday_name: str, lookup: str = "icontains") -> list[date]:
1233
+ def pop_named(self, holiday_name: str, lookup: NameLookup = "icontains") -> list[date]:
1206
1234
  """Remove all holidays matching the given name.
1207
1235
 
1208
1236
  This method removes all dates associated with a holiday name, so they are
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
holidays/utils.py CHANGED
@@ -234,6 +234,7 @@ def financial_holidays(
234
234
  expand: bool = True,
235
235
  observed: bool = True,
236
236
  language: str | None = None,
237
+ categories: CategoryArg | None = None,
237
238
  ) -> HolidayBase:
238
239
  """Return a new dictionary-like [HolidayBase][holidays.holiday_base.HolidayBase] object.
239
240
 
@@ -291,6 +292,9 @@ def financial_holidays(
291
292
 
292
293
  This behavior will be updated and formalized in v1.
293
294
 
295
+ categories:
296
+ Requested holiday categories.
297
+
294
298
  Returns:
295
299
  A `HolidayBase` object matching the `market`.
296
300
 
@@ -306,7 +310,12 @@ def financial_holidays(
306
310
 
307
311
  try:
308
312
  return getattr(holidays, market)(
309
- years=years, subdiv=subdiv, expand=expand, observed=observed, language=language
313
+ years=years,
314
+ subdiv=subdiv,
315
+ expand=expand,
316
+ observed=observed,
317
+ language=language,
318
+ categories=categories,
310
319
  )
311
320
  except AttributeError:
312
321
  raise NotImplementedError(f"Financial market {market} not available")
holidays/version.py CHANGED
@@ -10,4 +10,4 @@
10
10
  # Website: https://github.com/vacanza/holidays
11
11
  # License: MIT (see LICENSE file)
12
12
 
13
- __version__ = "0.85"
13
+ __version__ = "0.87"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: holidays
3
- Version: 0.85
3
+ Version: 0.87
4
4
  Summary: Open World Holidays Framework
5
5
  Author: Vacanza Team
6
6
  Maintainer: Arkadii Yakovets, Panpakorn Siripanich, Serhii Murza
@@ -32,7 +32,7 @@ Requires-Python: >=3.10
32
32
  Description-Content-Type: text/markdown
33
33
  License-File: CONTRIBUTORS
34
34
  License-File: LICENSE
35
- Requires-Dist: python-dateutil
35
+ Requires-Dist: python-dateutil<3,>=2.9.0.post0
36
36
  Dynamic: license-file
37
37
 
38
38
  # Holidays
@@ -307,7 +307,7 @@ any) in brackets, available languages and additional holiday categories. All cou
307
307
  <td>Bangladesh</td>
308
308
  <td>BD</td>
309
309
  <td></td>
310
- <td></td>
310
+ <td><strong>bn</strong>, en_US</td>
311
311
  <td></td>
312
312
  </tr>
313
313
  <tr>
@@ -427,7 +427,7 @@ any) in brackets, available languages and additional holiday categories. All cou
427
427
  <td>BG</td>
428
428
  <td></td>
429
429
  <td><strong>bg</strong>, en_US, uk</td>
430
- <td>SCHOOL</td>
430
+ <td>HALF_DAY, SCHOOL</td>
431
431
  </tr>
432
432
  <tr>
433
433
  <td>Burkina Faso</td>
@@ -665,7 +665,7 @@ any) in brackets, available languages and additional holiday categories. All cou
665
665
  <td>EE</td>
666
666
  <td></td>
667
667
  <td>en_US, <strong>et</strong>, uk</td>
668
- <td></td>
668
+ <td>HALF_DAY</td>
669
669
  </tr>
670
670
  <tr>
671
671
  <td>Eswatini</td>
@@ -895,7 +895,7 @@ any) in brackets, available languages and additional holiday categories. All cou
895
895
  <td>India</td>
896
896
  <td>IN</td>
897
897
  <td>States: AN (Andaman and Nicobar Islands), AP (Andhra Pradesh), AR (Arunachal Pradesh, Arunāchal Pradesh), AS (Assam), BR (Bihar, Bihār), CG (Chhattisgarh, Chhattīsgarh), CH (Chandigarh, Chandīgarh), DH (Dadra and Nagar Haveli and Daman and Diu, Dādra and Nagar Haveli and Damān and Diu), DL (Delhi), GA (Goa), GJ (Gujarat, Gujarāt), HP (Himachal Pradesh, Himāchal Pradesh), HR (Haryana, Haryāna), JH (Jharkhand, Jhārkhand), JK (Jammu and Kashmir, Jammu and Kashmīr), KA (Karnataka, Karnātaka), KL (Kerala), LA (Ladakh, Ladākh), LD (Lakshadweep), MH (Maharashtra, Mahārāshtra), ML (Meghalaya, Meghālaya), MN (Manipur), MP (Madhya Pradesh), MZ (Mizoram), NL (Nagaland, Nāgāland), OD (Odisha), PB (Punjab), PY (Puducherry), RJ (Rajasthan, Rājasthān), SK (Sikkim), TN (Tamil Nadu, Tamil Nādu), TR (Tripura), TS (Telangana, Telangāna), UK (Uttarakhand, Uttarākhand), UP (Uttar Pradesh), WB (West Bengal)</td>
898
- <td><strong>en_IN</strong>, en_US, hi</td>
898
+ <td><strong>en_IN</strong>, en_US, gu, hi</td>
899
899
  <td>OPTIONAL</td>
900
900
  </tr>
901
901
  <tr>
@@ -944,7 +944,7 @@ any) in brackets, available languages and additional holiday categories. All cou
944
944
  <td>Italy</td>
945
945
  <td>IT</td>
946
946
  <td>Provinces: AG (Agrigento), AL (Alessandria), AN (Ancona), AO (Aosta), AP (Ascoli Piceno), AQ (L'Aquila), AR (Arezzo), AT (Asti), AV (Avellino), BA (Bari), BG (Bergamo), BI (Biella), BL (Belluno), BN (Benevento), BO (Bologna), BR (Brindisi), BS (Brescia), BT (Barletta-Andria-Trani), BZ (Bolzano), CA (Cagliari), CB (Campobasso), CE (Caserta), CH (Chieti), CL (Caltanissetta), CN (Cuneo), CO (Como), CR (Cremona), CS (Cosenza), CT (Catania), CZ (Catanzaro), EN (Enna), FC (Forli-Cesena, Forlì-Cesena), FE (Ferrara), FG (Foggia), FI (Firenze), FM (Fermo), FR (Frosinone), GE (Genova), GO (Gorizia), GR (Grosseto), IM (Imperia), IS (Isernia), KR (Crotone), LC (Lecco), LE (Lecce), LI (Livorno), LO (Lodi), LT (Latina), LU (Lucca), MB (Monza e Brianza), MC (Macerata), ME (Messina), MI (Milano), MN (Mantova), MO (Modena), MS (Massa-Carrara), MT (Matera), NA (Napoli), NO (Novara), NU (Nuoro), OR (Oristano), PA (Palermo), PC (Piacenza), PD (Padova), PE (Pescara), PG (Perugia), PI (Pisa), PN (Pordenone), PO (Prato), PR (Parma), PT (Pistoia), PU (Pesaro e Urbino), PV (Pavia), PZ (Potenza), RA (Ravenna), RC (Reggio Calabria), RE (Reggio Emilia), RG (Ragusa), RI (Rieti), RM (Roma), RN (Rimini), RO (Rovigo), SA (Salerno), SI (Siena), SO (Sondrio), SP (La Spezia), SR (Siracusa), SS (Sassari), SU (Sud Sardegna), SV (Savona), TA (Taranto), TE (Teramo), TN (Trento), TO (Torino), TP (Trapani), TR (Terni), TS (Trieste), TV (Treviso), UD (Udine), VA (Varese), VB (Verbano-Cusio-Ossola), VC (Vercelli), VE (Venezia), VI (Vicenza), VR (Verona), VT (Viterbo), VV (Vibo Valentia); cities: Andria, Barletta, Cesena, Forli (Forlì), Pesaro, Trani, Urbino</td>
947
- <td></td>
947
+ <td>en_US, <strong>it_IT</strong></td>
948
948
  <td></td>
949
949
  </tr>
950
950
  <tr>
@@ -1252,7 +1252,7 @@ any) in brackets, available languages and additional holiday categories. All cou
1252
1252
  <td>Nepal</td>
1253
1253
  <td>NP</td>
1254
1254
  <td></td>
1255
- <td></td>
1255
+ <td>en_US, <strong>ne</strong></td>
1256
1256
  <td>WORKDAY</td>
1257
1257
  </tr>
1258
1258
  <tr>
@@ -1680,7 +1680,7 @@ any) in brackets, available languages and additional holiday categories. All cou
1680
1680
  <td>SE</td>
1681
1681
  <td></td>
1682
1682
  <td>en_US, <strong>sv</strong>, th, uk</td>
1683
- <td></td>
1683
+ <td>BANK, OPTIONAL</td>
1684
1684
  </tr>
1685
1685
  <tr>
1686
1686
  <td>Switzerland</td>
@@ -1940,8 +1940,9 @@ code when available. The following financial markets are available:
1940
1940
  <colgroup>
1941
1941
  <col style="width: 20.0%" />
1942
1942
  <col style="width: 4.0%" />
1943
- <col style="width: 65.0%" />
1944
- <col style="width: 15.0%" />
1943
+ <col style="width: 46.0%" />
1944
+ <col style="width: 20.0%" />
1945
+ <col style="width: 10.0%" />
1945
1946
  </colgroup>
1946
1947
  <thead>
1947
1948
  <tr>
@@ -1949,6 +1950,7 @@ code when available. The following financial markets are available:
1949
1950
  <th>Code</th>
1950
1951
  <th>Info</th>
1951
1952
  <th>Supported Languages</th>
1953
+ <th>Supported Categories</th>
1952
1954
  </tr>
1953
1955
  </thead>
1954
1956
  <tbody>
@@ -1957,30 +1959,35 @@ code when available. The following financial markets are available:
1957
1959
  <td>BVMF</td>
1958
1960
  <td>Brazil Stock Exchange and Over-the-Counter Market holidays (same as ANBIMA holidays)</td>
1959
1961
  <td>en_US, <strong>pt_BR</strong>, uk</td>
1962
+ <td></td>
1960
1963
  </tr>
1961
1964
  <tr>
1962
1965
  <td>European Central Bank</td>
1963
1966
  <td>XECB</td>
1964
1967
  <td>Trans-European Automated Real-time Gross Settlement (TARGET2)</td>
1965
1968
  <td></td>
1969
+ <td></td>
1966
1970
  </tr>
1967
1971
  <tr>
1968
1972
  <td>ICE Futures Europe</td>
1969
1973
  <td>IFEU</td>
1970
1974
  <td>A London-based Investment Exchange holidays</td>
1971
1975
  <td></td>
1976
+ <td></td>
1972
1977
  </tr>
1973
1978
  <tr>
1974
1979
  <td>National Stock Exchange of India</td>
1975
1980
  <td>XNSE</td>
1976
1981
  <td>National Stock Exchange of India market holidays</td>
1977
1982
  <td><strong>en_IN</strong>, en_US, hi</td>
1983
+ <td></td>
1978
1984
  </tr>
1979
1985
  <tr>
1980
1986
  <td>New York Stock Exchange</td>
1981
1987
  <td>XNYS</td>
1982
1988
  <td>NYSE market holidays (used by all other US-exchanges, including NASDAQ, etc.)</td>
1983
1989
  <td></td>
1990
+ <td>HALF_DAY</td>
1984
1991
  </tr>
1985
1992
  </tbody>
1986
1993
  </table>