StringPrototype.h 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <andreas@ladybird.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Utf8View.h>
  8. #include <LibJS/Runtime/StringObject.h>
  9. namespace JS {
  10. struct CodePoint {
  11. bool is_unpaired_surrogate { false };
  12. u32 code_point { 0 };
  13. size_t code_unit_count { 0 };
  14. };
  15. Optional<size_t> string_index_of(Utf16View const& string, Utf16View const& search_value, size_t from_index);
  16. CodePoint code_point_at(Utf16View const& string, size_t position);
  17. String to_well_formed_string(Utf16String const&);
  18. static constexpr Utf8View whitespace_characters = Utf8View("\x09\x0A\x0B\x0C\x0D\x20\xC2\xA0\xE1\x9A\x80\xE2\x80\x80\xE2\x80\x81\xE2\x80\x82\xE2\x80\x83\xE2\x80\x84\xE2\x80\x85\xE2\x80\x86\xE2\x80\x87\xE2\x80\x88\xE2\x80\x89\xE2\x80\x8A\xE2\x80\xAF\xE2\x81\x9F\xE3\x80\x80\xE2\x80\xA8\xE2\x80\xA9\xEF\xBB\xBF"sv);
  19. ThrowCompletionOr<String> trim_string(VM&, Value string, TrimMode where);
  20. class StringPrototype final : public StringObject {
  21. JS_OBJECT(StringPrototype, StringObject);
  22. GC_DECLARE_ALLOCATOR(StringPrototype);
  23. public:
  24. explicit StringPrototype(Realm&);
  25. virtual void initialize(Realm&) override;
  26. virtual ~StringPrototype() override = default;
  27. private:
  28. JS_DECLARE_NATIVE_FUNCTION(at);
  29. JS_DECLARE_NATIVE_FUNCTION(char_at);
  30. JS_DECLARE_NATIVE_FUNCTION(char_code_at);
  31. JS_DECLARE_NATIVE_FUNCTION(code_point_at);
  32. JS_DECLARE_NATIVE_FUNCTION(concat);
  33. JS_DECLARE_NATIVE_FUNCTION(ends_with);
  34. JS_DECLARE_NATIVE_FUNCTION(includes);
  35. JS_DECLARE_NATIVE_FUNCTION(index_of);
  36. JS_DECLARE_NATIVE_FUNCTION(is_well_formed);
  37. JS_DECLARE_NATIVE_FUNCTION(last_index_of);
  38. JS_DECLARE_NATIVE_FUNCTION(locale_compare);
  39. JS_DECLARE_NATIVE_FUNCTION(match);
  40. JS_DECLARE_NATIVE_FUNCTION(match_all);
  41. JS_DECLARE_NATIVE_FUNCTION(normalize);
  42. JS_DECLARE_NATIVE_FUNCTION(pad_end);
  43. JS_DECLARE_NATIVE_FUNCTION(pad_start);
  44. JS_DECLARE_NATIVE_FUNCTION(repeat);
  45. JS_DECLARE_NATIVE_FUNCTION(replace);
  46. JS_DECLARE_NATIVE_FUNCTION(replace_all);
  47. JS_DECLARE_NATIVE_FUNCTION(search);
  48. JS_DECLARE_NATIVE_FUNCTION(slice);
  49. JS_DECLARE_NATIVE_FUNCTION(split);
  50. JS_DECLARE_NATIVE_FUNCTION(starts_with);
  51. JS_DECLARE_NATIVE_FUNCTION(substring);
  52. JS_DECLARE_NATIVE_FUNCTION(to_locale_lowercase);
  53. JS_DECLARE_NATIVE_FUNCTION(to_locale_uppercase);
  54. JS_DECLARE_NATIVE_FUNCTION(to_lowercase);
  55. JS_DECLARE_NATIVE_FUNCTION(to_string);
  56. JS_DECLARE_NATIVE_FUNCTION(to_uppercase);
  57. JS_DECLARE_NATIVE_FUNCTION(to_well_formed);
  58. JS_DECLARE_NATIVE_FUNCTION(trim);
  59. JS_DECLARE_NATIVE_FUNCTION(trim_end);
  60. JS_DECLARE_NATIVE_FUNCTION(trim_start);
  61. JS_DECLARE_NATIVE_FUNCTION(value_of);
  62. JS_DECLARE_NATIVE_FUNCTION(symbol_iterator);
  63. JS_DECLARE_NATIVE_FUNCTION(substr);
  64. JS_DECLARE_NATIVE_FUNCTION(anchor);
  65. JS_DECLARE_NATIVE_FUNCTION(big);
  66. JS_DECLARE_NATIVE_FUNCTION(blink);
  67. JS_DECLARE_NATIVE_FUNCTION(bold);
  68. JS_DECLARE_NATIVE_FUNCTION(fixed);
  69. JS_DECLARE_NATIVE_FUNCTION(fontcolor);
  70. JS_DECLARE_NATIVE_FUNCTION(fontsize);
  71. JS_DECLARE_NATIVE_FUNCTION(italics);
  72. JS_DECLARE_NATIVE_FUNCTION(link);
  73. JS_DECLARE_NATIVE_FUNCTION(small);
  74. JS_DECLARE_NATIVE_FUNCTION(strike);
  75. JS_DECLARE_NATIVE_FUNCTION(sub);
  76. JS_DECLARE_NATIVE_FUNCTION(sup);
  77. };
  78. }