DateTimeFormat.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Copyright (c) 2021, Tim Flynn <trflynn89@pm.me>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Optional.h>
  8. #include <AK/String.h>
  9. #include <AK/StringView.h>
  10. #include <AK/Types.h>
  11. #include <AK/Vector.h>
  12. #include <LibUnicode/Forward.h>
  13. namespace Unicode {
  14. enum class HourCycle : u8 {
  15. H11,
  16. H12,
  17. H23,
  18. H24,
  19. };
  20. enum class CalendarPatternStyle : u8 {
  21. Narrow,
  22. Short,
  23. Long,
  24. Numeric,
  25. TwoDigit,
  26. };
  27. struct CalendarPattern {
  28. String pattern {};
  29. Optional<String> pattern12 {};
  30. // https://unicode.org/reports/tr35/tr35-dates.html#Calendar_Fields
  31. Optional<CalendarPatternStyle> era {};
  32. Optional<CalendarPatternStyle> year {};
  33. Optional<CalendarPatternStyle> month {};
  34. Optional<CalendarPatternStyle> weekday {};
  35. Optional<CalendarPatternStyle> day {};
  36. Optional<CalendarPatternStyle> day_period {};
  37. Optional<CalendarPatternStyle> hour {};
  38. Optional<CalendarPatternStyle> minute {};
  39. Optional<CalendarPatternStyle> second {};
  40. Optional<u8> fractional_second_digits {};
  41. Optional<CalendarPatternStyle> time_zone_name {};
  42. };
  43. enum class CalendarFormatType : u8 {
  44. Date,
  45. Time,
  46. DateTime,
  47. };
  48. struct CalendarFormat {
  49. CalendarPattern full_format {};
  50. CalendarPattern long_format {};
  51. CalendarPattern medium_format {};
  52. CalendarPattern short_format {};
  53. };
  54. HourCycle hour_cycle_from_string(StringView hour_cycle);
  55. StringView hour_cycle_to_string(HourCycle hour_cycle);
  56. CalendarPatternStyle calendar_pattern_style_from_string(StringView style);
  57. StringView calendar_pattern_style_to_string(CalendarPatternStyle style);
  58. Vector<Unicode::HourCycle> get_regional_hour_cycles(StringView locale);
  59. Optional<Unicode::HourCycle> get_default_regional_hour_cycle(StringView locale);
  60. Optional<CalendarFormat> get_calendar_format(StringView locale, StringView calendar, CalendarFormatType type);
  61. Vector<CalendarPattern> get_calendar_available_formats(StringView locale, StringView calendar);
  62. }