Locale.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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/Variant.h>
  11. #include <AK/Vector.h>
  12. #include <LibUnicode/Forward.h>
  13. namespace Unicode {
  14. struct LanguageID {
  15. bool is_root { false };
  16. Optional<StringView> language {};
  17. Optional<StringView> script {};
  18. Optional<StringView> region {};
  19. Vector<StringView> variants {};
  20. };
  21. struct Keyword {
  22. StringView key {};
  23. Vector<StringView> types {};
  24. };
  25. struct LocaleExtension {
  26. Vector<StringView> attributes {};
  27. Vector<Keyword> keywords {};
  28. };
  29. using Extension = Variant<LocaleExtension>;
  30. struct LocaleID {
  31. LanguageID language_id {};
  32. Vector<Extension> extensions {};
  33. };
  34. // Note: These methods only verify that the provided strings match the EBNF grammar of the
  35. // Unicode identifier subtag (i.e. no validation is done that the tags actually exist).
  36. bool is_unicode_language_subtag(StringView);
  37. bool is_unicode_script_subtag(StringView);
  38. bool is_unicode_region_subtag(StringView);
  39. bool is_unicode_variant_subtag(StringView);
  40. Optional<LanguageID> parse_unicode_language_id(StringView);
  41. Optional<LocaleID> parse_unicode_locale_id(StringView);
  42. Optional<String> canonicalize_unicode_locale_id(LocaleID&);
  43. String const& default_locale();
  44. bool is_locale_available(StringView locale);
  45. Optional<StringView> get_locale_language_mapping(StringView locale, StringView language);
  46. Optional<StringView> get_locale_territory_mapping(StringView locale, StringView territory);
  47. Optional<StringView> get_locale_script_mapping(StringView locale, StringView script);
  48. Optional<StringView> get_locale_currency_mapping(StringView locale, StringView currency);
  49. }