create-mendix-widget-gleam 2.0.14 → 2.0.15

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 (203) hide show
  1. package/README.md +1 -1
  2. package/package.json +5 -1
  3. package/src/index.mjs +22 -7
  4. package/template/gleam.toml +1 -1
  5. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@command.cache +0 -0
  6. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@command.cache_inline +0 -0
  7. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@command.cache_meta +0 -0
  8. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@cursor.cache +0 -0
  9. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@cursor.cache_inline +0 -0
  10. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@cursor.cache_meta +0 -0
  11. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@event.cache +0 -0
  12. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@event.cache_inline +0 -0
  13. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@event.cache_meta +0 -0
  14. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@internal@consts.cache +0 -0
  15. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@internal@consts.cache_inline +0 -0
  16. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@internal@consts.cache_meta +0 -0
  17. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@stdout.cache +0 -0
  18. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@stdout.cache_inline +0 -0
  19. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@stdout.cache_meta +0 -0
  20. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@style.cache +0 -0
  21. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@style.cache_inline +0 -0
  22. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@style.cache_meta +0 -0
  23. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@terminal.cache +0 -0
  24. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@terminal.cache_inline +0 -0
  25. package/tui/build/dev/javascript/etch/_gleam_artefacts/etch@terminal.cache_meta +0 -0
  26. package/tui/build/dev/javascript/etch/etch/command.mjs +479 -0
  27. package/tui/build/dev/javascript/etch/etch/cursor.mjs +164 -0
  28. package/tui/build/dev/javascript/etch/etch/event.mjs +2399 -0
  29. package/tui/build/dev/javascript/etch/etch/internal/consts.mjs +3 -0
  30. package/tui/build/dev/javascript/etch/etch/stdout.mjs +375 -0
  31. package/tui/build/dev/javascript/etch/etch/style.mjs +741 -0
  32. package/tui/build/dev/javascript/etch/etch/terminal.mjs +137 -0
  33. package/tui/build/dev/javascript/etch/gleam.mjs +1 -0
  34. package/tui/build/dev/javascript/etch/input/event_ffi.erl +73 -0
  35. package/tui/build/dev/javascript/etch/input/input_ffi.mjs +192 -0
  36. package/tui/build/dev/javascript/etch/input/signal_handler.erl +33 -0
  37. package/tui/build/dev/javascript/etch/terminal/terminal_ffi.erl +22 -0
  38. package/tui/build/dev/javascript/etch/terminal/terminal_ffi.mjs +37 -0
  39. package/tui/build/dev/javascript/etch/terminal/tty_state.erl +29 -0
  40. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@application.cache +0 -0
  41. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@application.cache_inline +0 -0
  42. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@application.cache_meta +0 -0
  43. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache +0 -0
  44. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_inline +0 -0
  45. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta +0 -0
  46. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache +0 -0
  47. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_inline +0 -0
  48. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta +0 -0
  49. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache +0 -0
  50. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_inline +0 -0
  51. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta +0 -0
  52. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@port.cache +0 -0
  53. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@port.cache_inline +0 -0
  54. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@port.cache_meta +0 -0
  55. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache +0 -0
  56. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_inline +0 -0
  57. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta +0 -0
  58. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@reference.cache +0 -0
  59. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@reference.cache_inline +0 -0
  60. package/tui/build/dev/javascript/gleam_erlang/_gleam_artefacts/gleam@erlang@reference.cache_meta +0 -0
  61. package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/application.mjs +38 -0
  62. package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/atom.mjs +2 -0
  63. package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/charlist.mjs +1 -0
  64. package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/node.mjs +12 -0
  65. package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/port.mjs +1 -0
  66. package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/process.mjs +161 -0
  67. package/tui/build/dev/javascript/gleam_erlang/gleam/erlang/reference.mjs +1 -0
  68. package/tui/build/dev/javascript/gleam_erlang/gleam.mjs +1 -0
  69. package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@application.erl +43 -0
  70. package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@atom.erl +94 -0
  71. package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@charlist.erl +42 -0
  72. package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@node.erl +80 -0
  73. package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@port.erl +8 -0
  74. package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@process.erl +868 -0
  75. package/tui/build/dev/javascript/gleam_erlang/gleam@erlang@reference.erl +21 -0
  76. package/tui/build/dev/javascript/gleam_erlang/gleam_erlang_ffi.erl +164 -0
  77. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@array.cache +0 -0
  78. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@array.cache_inline +0 -0
  79. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@array.cache_meta +0 -0
  80. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@promise.cache +0 -0
  81. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@promise.cache_inline +0 -0
  82. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@promise.cache_meta +0 -0
  83. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@symbol.cache +0 -0
  84. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@symbol.cache_inline +0 -0
  85. package/tui/build/dev/javascript/gleam_javascript/_gleam_artefacts/gleam@javascript@symbol.cache_meta +0 -0
  86. package/tui/build/dev/javascript/gleam_javascript/gleam/javascript/array.mjs +24 -0
  87. package/tui/build/dev/javascript/gleam_javascript/gleam/javascript/promise.mjs +105 -0
  88. package/tui/build/dev/javascript/gleam_javascript/gleam/javascript/symbol.mjs +7 -0
  89. package/tui/build/dev/javascript/gleam_javascript/gleam.mjs +1 -0
  90. package/tui/build/dev/javascript/gleam_javascript/gleam_javascript_ffi.mjs +133 -0
  91. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache +0 -0
  92. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_inline +0 -0
  93. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta +0 -0
  94. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache +0 -0
  95. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_inline +0 -0
  96. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta +0 -0
  97. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache +0 -0
  98. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_inline +0 -0
  99. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_meta +0 -0
  100. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache +0 -0
  101. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_inline +0 -0
  102. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta +0 -0
  103. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache +0 -0
  104. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_inline +0 -0
  105. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta +0 -0
  106. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache +0 -0
  107. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_inline +0 -0
  108. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_meta +0 -0
  109. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache +0 -0
  110. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_inline +0 -0
  111. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta +0 -0
  112. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache +0 -0
  113. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_inline +0 -0
  114. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta +0 -0
  115. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache +0 -0
  116. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_inline +0 -0
  117. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta +0 -0
  118. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache +0 -0
  119. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_inline +0 -0
  120. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta +0 -0
  121. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache +0 -0
  122. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_inline +0 -0
  123. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta +0 -0
  124. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache +0 -0
  125. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_inline +0 -0
  126. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta +0 -0
  127. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache +0 -0
  128. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_inline +0 -0
  129. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta +0 -0
  130. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache +0 -0
  131. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_inline +0 -0
  132. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta +0 -0
  133. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache +0 -0
  134. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_inline +0 -0
  135. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta +0 -0
  136. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache +0 -0
  137. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_inline +0 -0
  138. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta +0 -0
  139. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache +0 -0
  140. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_inline +0 -0
  141. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta +0 -0
  142. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache +0 -0
  143. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_inline +0 -0
  144. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_meta +0 -0
  145. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache +0 -0
  146. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_inline +0 -0
  147. package/tui/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta +0 -0
  148. package/tui/build/dev/javascript/gleam_stdlib/dict.mjs +710 -0
  149. package/tui/build/dev/javascript/gleam_stdlib/gleam/bit_array.mjs +286 -0
  150. package/tui/build/dev/javascript/gleam_stdlib/gleam/bool.mjs +295 -0
  151. package/tui/build/dev/javascript/gleam_stdlib/gleam/bytes_tree.mjs +225 -0
  152. package/tui/build/dev/javascript/gleam_stdlib/gleam/dict.mjs +455 -0
  153. package/tui/build/dev/javascript/gleam_stdlib/gleam/dynamic/decode.mjs +993 -0
  154. package/tui/build/dev/javascript/gleam_stdlib/gleam/dynamic.mjs +35 -0
  155. package/tui/build/dev/javascript/gleam_stdlib/gleam/float.mjs +528 -0
  156. package/tui/build/dev/javascript/gleam_stdlib/gleam/function.mjs +6 -0
  157. package/tui/build/dev/javascript/gleam_stdlib/gleam/int.mjs +764 -0
  158. package/tui/build/dev/javascript/gleam_stdlib/gleam/io.mjs +8 -0
  159. package/tui/build/dev/javascript/gleam_stdlib/gleam/list.mjs +3063 -0
  160. package/tui/build/dev/javascript/gleam_stdlib/gleam/option.mjs +386 -0
  161. package/tui/build/dev/javascript/gleam_stdlib/gleam/order.mjs +166 -0
  162. package/tui/build/dev/javascript/gleam_stdlib/gleam/pair.mjs +96 -0
  163. package/tui/build/dev/javascript/gleam_stdlib/gleam/result.mjs +448 -0
  164. package/tui/build/dev/javascript/gleam_stdlib/gleam/set.mjs +413 -0
  165. package/tui/build/dev/javascript/gleam_stdlib/gleam/string.mjs +695 -0
  166. package/tui/build/dev/javascript/gleam_stdlib/gleam/string_tree.mjs +128 -0
  167. package/tui/build/dev/javascript/gleam_stdlib/gleam/uri.mjs +1151 -0
  168. package/tui/build/dev/javascript/gleam_stdlib/gleam.mjs +1 -0
  169. package/tui/build/dev/javascript/gleam_stdlib/gleam@bit_array.erl +347 -0
  170. package/tui/build/dev/javascript/gleam_stdlib/gleam@bool.erl +334 -0
  171. package/tui/build/dev/javascript/gleam_stdlib/gleam@bytes_tree.erl +211 -0
  172. package/tui/build/dev/javascript/gleam_stdlib/gleam@dict.erl +513 -0
  173. package/tui/build/dev/javascript/gleam_stdlib/gleam@dynamic.erl +105 -0
  174. package/tui/build/dev/javascript/gleam_stdlib/gleam@dynamic@decode.erl +1114 -0
  175. package/tui/build/dev/javascript/gleam_stdlib/gleam@float.erl +711 -0
  176. package/tui/build/dev/javascript/gleam_stdlib/gleam@function.erl +18 -0
  177. package/tui/build/dev/javascript/gleam_stdlib/gleam@int.erl +972 -0
  178. package/tui/build/dev/javascript/gleam_stdlib/gleam@io.erl +76 -0
  179. package/tui/build/dev/javascript/gleam_stdlib/gleam@list.erl +2735 -0
  180. package/tui/build/dev/javascript/gleam_stdlib/gleam@option.erl +381 -0
  181. package/tui/build/dev/javascript/gleam_stdlib/gleam@order.erl +188 -0
  182. package/tui/build/dev/javascript/gleam_stdlib/gleam@pair.erl +104 -0
  183. package/tui/build/dev/javascript/gleam_stdlib/gleam@result.erl +500 -0
  184. package/tui/build/dev/javascript/gleam_stdlib/gleam@set.erl +430 -0
  185. package/tui/build/dev/javascript/gleam_stdlib/gleam@string.erl +964 -0
  186. package/tui/build/dev/javascript/gleam_stdlib/gleam@string_tree.erl +202 -0
  187. package/tui/build/dev/javascript/gleam_stdlib/gleam@uri.erl +1042 -0
  188. package/tui/build/dev/javascript/gleam_stdlib/gleam_stdlib.erl +534 -0
  189. package/tui/build/dev/javascript/gleam_stdlib/gleam_stdlib.mjs +1133 -0
  190. package/tui/build/dev/javascript/gleam_version +1 -0
  191. package/tui/build/dev/javascript/prelude.mjs +1575 -0
  192. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache +0 -0
  193. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache_inline +0 -0
  194. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache_meta +0 -0
  195. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui.cache_warnings +0 -0
  196. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache +0 -0
  197. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache_inline +0 -0
  198. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache_meta +0 -0
  199. package/tui/build/dev/javascript/tui/_gleam_artefacts/tui@prompt.cache_warnings +0 -0
  200. package/tui/build/dev/javascript/tui/gleam.mjs +1 -0
  201. package/tui/build/dev/javascript/tui/tui/prompt.mjs +521 -0
  202. package/tui/build/dev/javascript/tui/tui.mjs +334 -0
  203. package/tui/build/dev/javascript/tui/tui_ffi.mjs +32 -0
@@ -0,0 +1,964 @@
1
+ -module(gleam@string).
2
+ -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
3
+ -define(FILEPATH, "src/gleam/string.gleam").
4
+ -export([is_empty/1, length/1, reverse/1, replace/3, lowercase/1, uppercase/1, compare/2, slice/3, crop/2, drop_end/2, contains/2, starts_with/2, ends_with/2, split_once/2, append/2, concat/1, repeat/2, join/2, pad_start/3, pad_end/3, trim_start/1, trim_end/1, trim/1, pop_grapheme/1, to_graphemes/1, split/2, to_utf_codepoints/1, from_utf_codepoints/1, utf_codepoint/1, utf_codepoint_to_int/1, to_option/1, first/1, last/1, capitalise/1, inspect/1, byte_size/1, drop_start/2]).
5
+ -export_type([direction/0]).
6
+
7
+ -if(?OTP_RELEASE >= 27).
8
+ -define(MODULEDOC(Str), -moduledoc(Str)).
9
+ -define(DOC(Str), -doc(Str)).
10
+ -else.
11
+ -define(MODULEDOC(Str), -compile([])).
12
+ -define(DOC(Str), -compile([])).
13
+ -endif.
14
+
15
+ ?MODULEDOC(
16
+ " Strings in Gleam are UTF-8 binaries. They can be written in your code as\n"
17
+ " text surrounded by `\"double quotes\"`.\n"
18
+ ).
19
+
20
+ -type direction() :: leading | trailing.
21
+
22
+ -file("src/gleam/string.gleam", 21).
23
+ ?DOC(
24
+ " Determines if a `String` is empty.\n"
25
+ "\n"
26
+ " ## Examples\n"
27
+ "\n"
28
+ " ```gleam\n"
29
+ " assert is_empty(\"\")\n"
30
+ " ```\n"
31
+ "\n"
32
+ " ```gleam\n"
33
+ " assert !is_empty(\"the world\")\n"
34
+ " ```\n"
35
+ ).
36
+ -spec is_empty(binary()) -> boolean().
37
+ is_empty(Str) ->
38
+ Str =:= <<""/utf8>>.
39
+
40
+ -file("src/gleam/string.gleam", 46).
41
+ ?DOC(
42
+ " Gets the number of grapheme clusters in a given `String`.\n"
43
+ "\n"
44
+ " This function has to iterate across the whole string to count the number of\n"
45
+ " graphemes, so it runs in linear time. Avoid using this in a loop.\n"
46
+ "\n"
47
+ " ## Examples\n"
48
+ "\n"
49
+ " ```gleam\n"
50
+ " assert length(\"Gleam\") == 5\n"
51
+ " ```\n"
52
+ "\n"
53
+ " ```gleam\n"
54
+ " assert length(\"ß↑e̊\") == 3\n"
55
+ " ```\n"
56
+ "\n"
57
+ " ```gleam\n"
58
+ " assert length(\"\") == 0\n"
59
+ " ```\n"
60
+ ).
61
+ -spec length(binary()) -> integer().
62
+ length(String) ->
63
+ string:length(String).
64
+
65
+ -file("src/gleam/string.gleam", 59).
66
+ ?DOC(
67
+ " Reverses a `String`.\n"
68
+ "\n"
69
+ " This function has to iterate across the whole `String` so it runs in linear\n"
70
+ " time. Avoid using this in a loop.\n"
71
+ "\n"
72
+ " ## Examples\n"
73
+ "\n"
74
+ " ```gleam\n"
75
+ " assert reverse(\"stressed\") == \"desserts\"\n"
76
+ " ```\n"
77
+ ).
78
+ -spec reverse(binary()) -> binary().
79
+ reverse(String) ->
80
+ _pipe = String,
81
+ _pipe@1 = gleam_stdlib:identity(_pipe),
82
+ _pipe@2 = string:reverse(_pipe@1),
83
+ unicode:characters_to_binary(_pipe@2).
84
+
85
+ -file("src/gleam/string.gleam", 78).
86
+ ?DOC(
87
+ " Creates a new `String` by replacing all occurrences of a given substring.\n"
88
+ "\n"
89
+ " ## Examples\n"
90
+ "\n"
91
+ " ```gleam\n"
92
+ " assert replace(\"www.example.com\", each: \".\", with: \"-\") == \"www-example-com\"\n"
93
+ " ```\n"
94
+ "\n"
95
+ " ```gleam\n"
96
+ " assert replace(\"a,b,c,d,e\", each: \",\", with: \"/\") == \"a/b/c/d/e\"\n"
97
+ " ```\n"
98
+ ).
99
+ -spec replace(binary(), binary(), binary()) -> binary().
100
+ replace(String, Pattern, Substitute) ->
101
+ _pipe = String,
102
+ _pipe@1 = gleam_stdlib:identity(_pipe),
103
+ _pipe@2 = gleam_stdlib:string_replace(_pipe@1, Pattern, Substitute),
104
+ unicode:characters_to_binary(_pipe@2).
105
+
106
+ -file("src/gleam/string.gleam", 102).
107
+ ?DOC(
108
+ " Creates a new `String` with all the graphemes in the input `String` converted to\n"
109
+ " lowercase.\n"
110
+ "\n"
111
+ " Useful for case-insensitive comparisons.\n"
112
+ "\n"
113
+ " ## Examples\n"
114
+ "\n"
115
+ " ```gleam\n"
116
+ " assert lowercase(\"X-FILES\") == \"x-files\"\n"
117
+ " ```\n"
118
+ ).
119
+ -spec lowercase(binary()) -> binary().
120
+ lowercase(String) ->
121
+ string:lowercase(String).
122
+
123
+ -file("src/gleam/string.gleam", 117).
124
+ ?DOC(
125
+ " Creates a new `String` with all the graphemes in the input `String` converted to\n"
126
+ " uppercase.\n"
127
+ "\n"
128
+ " Useful for case-insensitive comparisons and VIRTUAL YELLING.\n"
129
+ "\n"
130
+ " ## Examples\n"
131
+ "\n"
132
+ " ```gleam\n"
133
+ " assert uppercase(\"skinner\") == \"SKINNER\"\n"
134
+ " ```\n"
135
+ ).
136
+ -spec uppercase(binary()) -> binary().
137
+ uppercase(String) ->
138
+ string:uppercase(String).
139
+
140
+ -file("src/gleam/string.gleam", 137).
141
+ ?DOC(
142
+ " Compares two `String`s to see which is \"larger\" by comparing their graphemes.\n"
143
+ "\n"
144
+ " This does not compare the size or length of the given `String`s.\n"
145
+ "\n"
146
+ " ## Examples\n"
147
+ "\n"
148
+ " ```gleam\n"
149
+ " import gleam/order\n"
150
+ "\n"
151
+ " assert compare(\"Anthony\", \"Anthony\") == order.Eq\n"
152
+ " ```\n"
153
+ "\n"
154
+ " ```gleam\n"
155
+ " import gleam/order\n"
156
+ "\n"
157
+ " assert compare(\"A\", \"B\") == order.Lt\n"
158
+ " ```\n"
159
+ ).
160
+ -spec compare(binary(), binary()) -> gleam@order:order().
161
+ compare(A, B) ->
162
+ case A =:= B of
163
+ true ->
164
+ eq;
165
+
166
+ _ ->
167
+ case gleam_stdlib:less_than(A, B) of
168
+ true ->
169
+ lt;
170
+
171
+ false ->
172
+ gt
173
+ end
174
+ end.
175
+
176
+ -file("src/gleam/string.gleam", 181).
177
+ ?DOC(
178
+ " Takes a substring given a start grapheme index and a length. Negative indexes\n"
179
+ " are taken starting from the *end* of the string.\n"
180
+ "\n"
181
+ " This function runs in linear time with the size of the index and the\n"
182
+ " length. Negative indexes are linear with the size of the input string in\n"
183
+ " addition to the other costs.\n"
184
+ "\n"
185
+ " ## Examples\n"
186
+ "\n"
187
+ " ```gleam\n"
188
+ " assert slice(from: \"gleam\", at_index: 1, length: 2) == \"le\"\n"
189
+ " ```\n"
190
+ "\n"
191
+ " ```gleam\n"
192
+ " assert slice(from: \"gleam\", at_index: 1, length: 10) == \"leam\"\n"
193
+ " ```\n"
194
+ "\n"
195
+ " ```gleam\n"
196
+ " assert slice(from: \"gleam\", at_index: 10, length: 3) == \"\"\n"
197
+ " ```\n"
198
+ "\n"
199
+ " ```gleam\n"
200
+ " assert slice(from: \"gleam\", at_index: -2, length: 2) == \"am\"\n"
201
+ " ```\n"
202
+ "\n"
203
+ " ```gleam\n"
204
+ " assert slice(from: \"gleam\", at_index: -12, length: 2) == \"\"\n"
205
+ " ```\n"
206
+ ).
207
+ -spec slice(binary(), integer(), integer()) -> binary().
208
+ slice(String, Idx, Len) ->
209
+ case Len =< 0 of
210
+ true ->
211
+ <<""/utf8>>;
212
+
213
+ false ->
214
+ case Idx < 0 of
215
+ true ->
216
+ Translated_idx = string:length(String) + Idx,
217
+ case Translated_idx < 0 of
218
+ true ->
219
+ <<""/utf8>>;
220
+
221
+ false ->
222
+ gleam_stdlib:slice(String, Translated_idx, Len)
223
+ end;
224
+
225
+ false ->
226
+ gleam_stdlib:slice(String, Idx, Len)
227
+ end
228
+ end.
229
+
230
+ -file("src/gleam/string.gleam", 218).
231
+ ?DOC(
232
+ " Drops contents of the first `String` that occur before the second `String`.\n"
233
+ " If the `from` string does not contain the `before` string, `from` is\n"
234
+ " returned unchanged.\n"
235
+ "\n"
236
+ " ## Examples\n"
237
+ "\n"
238
+ " ```gleam\n"
239
+ " assert crop(from: \"The Lone Gunmen\", before: \"Lone\") == \"Lone Gunmen\"\n"
240
+ " ```\n"
241
+ ).
242
+ -spec crop(binary(), binary()) -> binary().
243
+ crop(String, Substring) ->
244
+ gleam_stdlib:crop_string(String, Substring).
245
+
246
+ -file("src/gleam/string.gleam", 253).
247
+ ?DOC(
248
+ " Drops *n* graphemes from the end of a `String`.\n"
249
+ "\n"
250
+ " This function traverses the full string, so it runs in linear time with the\n"
251
+ " size of the string. Avoid using this in a loop.\n"
252
+ "\n"
253
+ " ## Examples\n"
254
+ "\n"
255
+ " ```gleam\n"
256
+ " assert drop_end(from: \"Cigarette Smoking Man\", up_to: 2)\n"
257
+ " == \"Cigarette Smoking M\"\n"
258
+ " ```\n"
259
+ ).
260
+ -spec drop_end(binary(), integer()) -> binary().
261
+ drop_end(String, Num_graphemes) ->
262
+ case Num_graphemes =< 0 of
263
+ true ->
264
+ String;
265
+
266
+ false ->
267
+ slice(String, 0, string:length(String) - Num_graphemes)
268
+ end.
269
+
270
+ -file("src/gleam/string.gleam", 278).
271
+ ?DOC(
272
+ " Checks if the first `String` contains the second.\n"
273
+ "\n"
274
+ " ## Examples\n"
275
+ "\n"
276
+ " ```gleam\n"
277
+ " assert contains(does: \"theory\", contain: \"ory\")\n"
278
+ " ```\n"
279
+ "\n"
280
+ " ```gleam\n"
281
+ " assert contains(does: \"theory\", contain: \"the\")\n"
282
+ " ```\n"
283
+ "\n"
284
+ " ```gleam\n"
285
+ " assert !contains(does: \"theory\", contain: \"THE\")\n"
286
+ " ```\n"
287
+ ).
288
+ -spec contains(binary(), binary()) -> boolean().
289
+ contains(Haystack, Needle) ->
290
+ gleam_stdlib:contains_string(Haystack, Needle).
291
+
292
+ -file("src/gleam/string.gleam", 290).
293
+ ?DOC(
294
+ " Checks whether the first `String` starts with the second one.\n"
295
+ "\n"
296
+ " ## Examples\n"
297
+ "\n"
298
+ " ```gleam\n"
299
+ " assert !starts_with(\"theory\", \"ory\")\n"
300
+ " ```\n"
301
+ ).
302
+ -spec starts_with(binary(), binary()) -> boolean().
303
+ starts_with(String, Prefix) ->
304
+ gleam_stdlib:string_starts_with(String, Prefix).
305
+
306
+ -file("src/gleam/string.gleam", 302).
307
+ ?DOC(
308
+ " Checks whether the first `String` ends with the second one.\n"
309
+ "\n"
310
+ " ## Examples\n"
311
+ "\n"
312
+ " ```gleam\n"
313
+ " assert ends_with(\"theory\", \"ory\")\n"
314
+ " ```\n"
315
+ ).
316
+ -spec ends_with(binary(), binary()) -> boolean().
317
+ ends_with(String, Suffix) ->
318
+ gleam_stdlib:string_ends_with(String, Suffix).
319
+
320
+ -file("src/gleam/string.gleam", 340).
321
+ ?DOC(
322
+ " Splits a `String` a single time on the given substring.\n"
323
+ "\n"
324
+ " Returns an `Error` if substring not present.\n"
325
+ "\n"
326
+ " ## Examples\n"
327
+ "\n"
328
+ " ```gleam\n"
329
+ " assert split_once(\"home/gleam/desktop/\", on: \"/\")\n"
330
+ " == Ok(#(\"home\", \"gleam/desktop/\"))\n"
331
+ " ```\n"
332
+ "\n"
333
+ " ```gleam\n"
334
+ " assert split_once(\"home/gleam/desktop/\", on: \"?\") == Error(Nil)\n"
335
+ " ```\n"
336
+ ).
337
+ -spec split_once(binary(), binary()) -> {ok, {binary(), binary()}} |
338
+ {error, nil}.
339
+ split_once(String, Substring) ->
340
+ case string:split(String, Substring) of
341
+ [First, Rest] ->
342
+ {ok, {First, Rest}};
343
+
344
+ _ ->
345
+ {error, nil}
346
+ end.
347
+
348
+ -file("src/gleam/string.gleam", 370).
349
+ ?DOC(
350
+ " Creates a new `String` by joining two `String`s together.\n"
351
+ "\n"
352
+ " This function typically copies both `String`s and runs in linear time, but\n"
353
+ " the exact behaviour will depend on how the runtime you are using optimises\n"
354
+ " your code. Benchmark and profile your code if you need to understand its\n"
355
+ " performance better.\n"
356
+ "\n"
357
+ " If you are joining together large string and want to avoid copying any data\n"
358
+ " you may want to investigate using the [`string_tree`](../gleam/string_tree.html)\n"
359
+ " module.\n"
360
+ "\n"
361
+ " ## Examples\n"
362
+ "\n"
363
+ " ```gleam\n"
364
+ " assert append(to: \"butter\", suffix: \"fly\") == \"butterfly\"\n"
365
+ " ```\n"
366
+ ).
367
+ -spec append(binary(), binary()) -> binary().
368
+ append(First, Second) ->
369
+ <<First/binary, Second/binary>>.
370
+
371
+ -file("src/gleam/string.gleam", 389).
372
+ -spec concat_loop(list(binary()), binary()) -> binary().
373
+ concat_loop(Strings, Accumulator) ->
374
+ case Strings of
375
+ [String | Strings@1] ->
376
+ concat_loop(Strings@1, <<Accumulator/binary, String/binary>>);
377
+
378
+ [] ->
379
+ Accumulator
380
+ end.
381
+
382
+ -file("src/gleam/string.gleam", 385).
383
+ ?DOC(
384
+ " Creates a new `String` by joining many `String`s together.\n"
385
+ "\n"
386
+ " This function copies all the `String`s and runs in linear time.\n"
387
+ "\n"
388
+ " ## Examples\n"
389
+ "\n"
390
+ " ```gleam\n"
391
+ " assert concat([\"never\", \"the\", \"less\"]) == \"nevertheless\"\n"
392
+ " ```\n"
393
+ ).
394
+ -spec concat(list(binary())) -> binary().
395
+ concat(Strings) ->
396
+ erlang:list_to_binary(Strings).
397
+
398
+ -file("src/gleam/string.gleam", 413).
399
+ -spec repeat_loop(integer(), binary(), binary()) -> binary().
400
+ repeat_loop(Times, Doubling_acc, Acc) ->
401
+ Acc@1 = case Times rem 2 of
402
+ 0 ->
403
+ Acc;
404
+
405
+ _ ->
406
+ <<Acc/binary, Doubling_acc/binary>>
407
+ end,
408
+ Times@1 = Times div 2,
409
+ case Times@1 =< 0 of
410
+ true ->
411
+ Acc@1;
412
+
413
+ false ->
414
+ repeat_loop(
415
+ Times@1,
416
+ <<Doubling_acc/binary, Doubling_acc/binary>>,
417
+ Acc@1
418
+ )
419
+ end.
420
+
421
+ -file("src/gleam/string.gleam", 406).
422
+ ?DOC(
423
+ " Creates a new `String` by repeating a `String` a given number of times.\n"
424
+ "\n"
425
+ " This function runs in loglinear time.\n"
426
+ "\n"
427
+ " ## Examples\n"
428
+ "\n"
429
+ " ```gleam\n"
430
+ " assert repeat(\"ha\", times: 3) == \"hahaha\"\n"
431
+ " ```\n"
432
+ ).
433
+ -spec repeat(binary(), integer()) -> binary().
434
+ repeat(String, Times) ->
435
+ case Times =< 0 of
436
+ true ->
437
+ <<""/utf8>>;
438
+
439
+ false ->
440
+ repeat_loop(Times, String, <<""/utf8>>)
441
+ end.
442
+
443
+ -file("src/gleam/string.gleam", 442).
444
+ -spec join_loop(list(binary()), binary(), binary()) -> binary().
445
+ join_loop(Strings, Separator, Accumulator) ->
446
+ case Strings of
447
+ [] ->
448
+ Accumulator;
449
+
450
+ [String | Strings@1] ->
451
+ join_loop(
452
+ Strings@1,
453
+ Separator,
454
+ <<<<Accumulator/binary, Separator/binary>>/binary,
455
+ String/binary>>
456
+ )
457
+ end.
458
+
459
+ -file("src/gleam/string.gleam", 435).
460
+ ?DOC(
461
+ " Joins many `String`s together with a given separator.\n"
462
+ "\n"
463
+ " This function runs in linear time.\n"
464
+ "\n"
465
+ " ## Examples\n"
466
+ "\n"
467
+ " ```gleam\n"
468
+ " assert join([\"home\",\"evan\",\"Desktop\"], with: \"/\") == \"home/evan/Desktop\"\n"
469
+ " ```\n"
470
+ ).
471
+ -spec join(list(binary()), binary()) -> binary().
472
+ join(Strings, Separator) ->
473
+ case Strings of
474
+ [] ->
475
+ <<""/utf8>>;
476
+
477
+ [First | Rest] ->
478
+ join_loop(Rest, Separator, First)
479
+ end.
480
+
481
+ -file("src/gleam/string.gleam", 514).
482
+ -spec padding(integer(), binary()) -> binary().
483
+ padding(Size, Pad_string) ->
484
+ Pad_string_length = string:length(Pad_string),
485
+ Num_pads = case Pad_string_length of
486
+ 0 -> 0;
487
+ Gleam@denominator -> Size div Gleam@denominator
488
+ end,
489
+ Extra = case Pad_string_length of
490
+ 0 -> 0;
491
+ Gleam@denominator@1 -> Size rem Gleam@denominator@1
492
+ end,
493
+ <<(repeat(Pad_string, Num_pads))/binary,
494
+ (slice(Pad_string, 0, Extra))/binary>>.
495
+
496
+ -file("src/gleam/string.gleam", 470).
497
+ ?DOC(
498
+ " Pads the start of a `String` until it has a given length.\n"
499
+ "\n"
500
+ " ## Examples\n"
501
+ "\n"
502
+ " ```gleam\n"
503
+ " assert pad_start(\"121\", to: 5, with: \".\") == \"..121\"\n"
504
+ " ```\n"
505
+ "\n"
506
+ " ```gleam\n"
507
+ " assert pad_start(\"121\", to: 3, with: \".\") == \"121\"\n"
508
+ " ```\n"
509
+ "\n"
510
+ " ```gleam\n"
511
+ " assert pad_start(\"121\", to: 2, with: \".\") == \"121\"\n"
512
+ " ```\n"
513
+ ).
514
+ -spec pad_start(binary(), integer(), binary()) -> binary().
515
+ pad_start(String, Desired_length, Pad_string) ->
516
+ Current_length = string:length(String),
517
+ To_pad_length = Desired_length - Current_length,
518
+ case To_pad_length =< 0 of
519
+ true ->
520
+ String;
521
+
522
+ false ->
523
+ <<(padding(To_pad_length, Pad_string))/binary, String/binary>>
524
+ end.
525
+
526
+ -file("src/gleam/string.gleam", 500).
527
+ ?DOC(
528
+ " Pads the end of a `String` until it has a given length.\n"
529
+ "\n"
530
+ " ## Examples\n"
531
+ "\n"
532
+ " ```gleam\n"
533
+ " assert pad_end(\"123\", to: 5, with: \".\") == \"123..\"\n"
534
+ " ```\n"
535
+ "\n"
536
+ " ```gleam\n"
537
+ " assert pad_end(\"123\", to: 3, with: \".\") == \"123\"\n"
538
+ " ```\n"
539
+ "\n"
540
+ " ```gleam\n"
541
+ " assert pad_end(\"123\", to: 2, with: \".\") == \"123\"\n"
542
+ " ```\n"
543
+ ).
544
+ -spec pad_end(binary(), integer(), binary()) -> binary().
545
+ pad_end(String, Desired_length, Pad_string) ->
546
+ Current_length = string:length(String),
547
+ To_pad_length = Desired_length - Current_length,
548
+ case To_pad_length =< 0 of
549
+ true ->
550
+ String;
551
+
552
+ false ->
553
+ <<String/binary, (padding(To_pad_length, Pad_string))/binary>>
554
+ end.
555
+
556
+ -file("src/gleam/string.gleam", 556).
557
+ ?DOC(
558
+ " Removes whitespace at the start of a `String`.\n"
559
+ "\n"
560
+ " ## Examples\n"
561
+ "\n"
562
+ " ```gleam\n"
563
+ " assert trim_start(\" hats \\n\") == \"hats \\n\"\n"
564
+ " ```\n"
565
+ ).
566
+ -spec trim_start(binary()) -> binary().
567
+ trim_start(String) ->
568
+ string:trim(String, leading).
569
+
570
+ -file("src/gleam/string.gleam", 569).
571
+ ?DOC(
572
+ " Removes whitespace at the end of a `String`.\n"
573
+ "\n"
574
+ " ## Examples\n"
575
+ "\n"
576
+ " ```gleam\n"
577
+ " assert trim_end(\" hats \\n\") == \" hats\"\n"
578
+ " ```\n"
579
+ ).
580
+ -spec trim_end(binary()) -> binary().
581
+ trim_end(String) ->
582
+ string:trim(String, trailing).
583
+
584
+ -file("src/gleam/string.gleam", 535).
585
+ ?DOC(
586
+ " Removes whitespace on both sides of a `String`.\n"
587
+ "\n"
588
+ " Whitespace in this function is the set of nonbreakable whitespace\n"
589
+ " codepoints, defined as Pattern_White_Space in [Unicode Standard Annex #31][1].\n"
590
+ "\n"
591
+ " [1]: https://unicode.org/reports/tr31/\n"
592
+ "\n"
593
+ " ## Examples\n"
594
+ "\n"
595
+ " ```gleam\n"
596
+ " assert trim(\" hats \\n\") == \"hats\"\n"
597
+ " ```\n"
598
+ ).
599
+ -spec trim(binary()) -> binary().
600
+ trim(String) ->
601
+ _pipe = String,
602
+ _pipe@1 = trim_start(_pipe),
603
+ trim_end(_pipe@1).
604
+
605
+ -file("src/gleam/string.gleam", 594).
606
+ ?DOC(
607
+ " Splits a non-empty `String` into its first element (head) and rest (tail).\n"
608
+ " This lets you pattern match on `String`s exactly as you would with lists.\n"
609
+ "\n"
610
+ " ## Performance\n"
611
+ "\n"
612
+ " There is a notable overhead to using this function, so you may not want to\n"
613
+ " use it in a tight loop. If you wish to efficiently parse a string you may\n"
614
+ " want to use alternatives such as the [splitter package](https://hex.pm/packages/splitter).\n"
615
+ "\n"
616
+ " ## Examples\n"
617
+ "\n"
618
+ " ```gleam\n"
619
+ " assert pop_grapheme(\"gleam\") == Ok(#(\"g\", \"leam\"))\n"
620
+ " ```\n"
621
+ "\n"
622
+ " ```gleam\n"
623
+ " assert pop_grapheme(\"\") == Error(Nil)\n"
624
+ " ```\n"
625
+ ).
626
+ -spec pop_grapheme(binary()) -> {ok, {binary(), binary()}} | {error, nil}.
627
+ pop_grapheme(String) ->
628
+ gleam_stdlib:string_pop_grapheme(String).
629
+
630
+ -file("src/gleam/string.gleam", 610).
631
+ -spec to_graphemes_loop(binary(), list(binary())) -> list(binary()).
632
+ to_graphemes_loop(String, Acc) ->
633
+ case gleam_stdlib:string_pop_grapheme(String) of
634
+ {ok, {Grapheme, Rest}} ->
635
+ to_graphemes_loop(Rest, [Grapheme | Acc]);
636
+
637
+ {error, _} ->
638
+ Acc
639
+ end.
640
+
641
+ -file("src/gleam/string.gleam", 604).
642
+ ?DOC(
643
+ " Converts a `String` to a list of\n"
644
+ " [graphemes](https://en.wikipedia.org/wiki/Grapheme).\n"
645
+ "\n"
646
+ " ```gleam\n"
647
+ " assert to_graphemes(\"abc\") == [\"a\", \"b\", \"c\"]\n"
648
+ " ```\n"
649
+ ).
650
+ -spec to_graphemes(binary()) -> list(binary()).
651
+ to_graphemes(String) ->
652
+ _pipe = String,
653
+ _pipe@1 = to_graphemes_loop(_pipe, []),
654
+ lists:reverse(_pipe@1).
655
+
656
+ -file("src/gleam/string.gleam", 313).
657
+ ?DOC(
658
+ " Creates a list of `String`s by splitting a given string on a given substring.\n"
659
+ "\n"
660
+ " ## Examples\n"
661
+ "\n"
662
+ " ```gleam\n"
663
+ " assert split(\"home/gleam/desktop/\", on: \"/\")\n"
664
+ " == [\"home\", \"gleam\", \"desktop\", \"\"]\n"
665
+ " ```\n"
666
+ ).
667
+ -spec split(binary(), binary()) -> list(binary()).
668
+ split(X, Substring) ->
669
+ case Substring of
670
+ <<""/utf8>> ->
671
+ to_graphemes(X);
672
+
673
+ _ ->
674
+ _pipe = X,
675
+ _pipe@1 = gleam_stdlib:identity(_pipe),
676
+ _pipe@2 = gleam@string_tree:split(_pipe@1, Substring),
677
+ gleam@list:map(_pipe@2, fun unicode:characters_to_binary/1)
678
+ end.
679
+
680
+ -file("src/gleam/string.gleam", 656).
681
+ -spec to_utf_codepoints_loop(bitstring(), list(integer())) -> list(integer()).
682
+ to_utf_codepoints_loop(Bit_array, Acc) ->
683
+ case Bit_array of
684
+ <<First/utf8, Rest/binary>> ->
685
+ to_utf_codepoints_loop(Rest, [First | Acc]);
686
+
687
+ _ ->
688
+ lists:reverse(Acc)
689
+ end.
690
+
691
+ -file("src/gleam/string.gleam", 651).
692
+ -spec do_to_utf_codepoints(binary()) -> list(integer()).
693
+ do_to_utf_codepoints(String) ->
694
+ to_utf_codepoints_loop(<<String/binary>>, []).
695
+
696
+ -file("src/gleam/string.gleam", 646).
697
+ ?DOC(
698
+ " Converts a `String` to a `List` of `UtfCodepoint`.\n"
699
+ "\n"
700
+ " See <https://en.wikipedia.org/wiki/Code_point> and\n"
701
+ " <https://en.wikipedia.org/wiki/Unicode#Codespace_and_Code_Points> for an\n"
702
+ " explanation on code points.\n"
703
+ "\n"
704
+ " ## Examples\n"
705
+ "\n"
706
+ " ```gleam\n"
707
+ " assert \"a\" |> to_utf_codepoints == [UtfCodepoint(97)]\n"
708
+ " ```\n"
709
+ "\n"
710
+ " ```gleam\n"
711
+ " // Semantically the same as:\n"
712
+ " // [\"🏳\", \"️\", \"‍\", \"🌈\"] or:\n"
713
+ " // [waving_white_flag, variant_selector_16, zero_width_joiner, rainbow]\n"
714
+ " assert \"🏳️‍🌈\" |> to_utf_codepoints\n"
715
+ " == [\n"
716
+ " UtfCodepoint(127987),\n"
717
+ " UtfCodepoint(65039),\n"
718
+ " UtfCodepoint(8205),\n"
719
+ " UtfCodepoint(127752),\n"
720
+ " ]\n"
721
+ " ```\n"
722
+ ).
723
+ -spec to_utf_codepoints(binary()) -> list(integer()).
724
+ to_utf_codepoints(String) ->
725
+ do_to_utf_codepoints(String).
726
+
727
+ -file("src/gleam/string.gleam", 695).
728
+ ?DOC(
729
+ " Converts a `List` of `UtfCodepoint`s to a `String`.\n"
730
+ "\n"
731
+ " See <https://en.wikipedia.org/wiki/Code_point> and\n"
732
+ " <https://en.wikipedia.org/wiki/Unicode#Codespace_and_Code_Points> for an\n"
733
+ " explanation on code points.\n"
734
+ "\n"
735
+ " ## Examples\n"
736
+ "\n"
737
+ " ```gleam\n"
738
+ " let assert Ok(a) = utf_codepoint(97)\n"
739
+ " let assert Ok(b) = utf_codepoint(98)\n"
740
+ " let assert Ok(c) = utf_codepoint(99)\n"
741
+ " assert from_utf_codepoints([a, b, c]) == \"abc\"\n"
742
+ " ```\n"
743
+ ).
744
+ -spec from_utf_codepoints(list(integer())) -> binary().
745
+ from_utf_codepoints(Utf_codepoints) ->
746
+ gleam_stdlib:utf_codepoint_list_to_string(Utf_codepoints).
747
+
748
+ -file("src/gleam/string.gleam", 701).
749
+ ?DOC(
750
+ " Converts an integer to a `UtfCodepoint`.\n"
751
+ "\n"
752
+ " Returns an `Error` if the integer does not represent a valid UTF codepoint.\n"
753
+ ).
754
+ -spec utf_codepoint(integer()) -> {ok, integer()} | {error, nil}.
755
+ utf_codepoint(Value) ->
756
+ case Value of
757
+ I when I > 1114111 ->
758
+ {error, nil};
759
+
760
+ I@1 when (I@1 >= 55296) andalso (I@1 =< 57343) ->
761
+ {error, nil};
762
+
763
+ I@2 when I@2 < 0 ->
764
+ {error, nil};
765
+
766
+ I@3 ->
767
+ {ok, gleam_stdlib:identity(I@3)}
768
+ end.
769
+
770
+ -file("src/gleam/string.gleam", 721).
771
+ ?DOC(
772
+ " Converts a `UtfCodepoint` to its ordinal code point value.\n"
773
+ "\n"
774
+ " ## Examples\n"
775
+ "\n"
776
+ " ```gleam\n"
777
+ " let assert [utf_codepoint, ..] = to_utf_codepoints(\"💜\")\n"
778
+ " assert utf_codepoint_to_int(utf_codepoint) == 128156\n"
779
+ " ```\n"
780
+ ).
781
+ -spec utf_codepoint_to_int(integer()) -> integer().
782
+ utf_codepoint_to_int(Cp) ->
783
+ gleam_stdlib:identity(Cp).
784
+
785
+ -file("src/gleam/string.gleam", 736).
786
+ ?DOC(
787
+ " Converts a `String` into `Option(String)` where an empty `String` becomes\n"
788
+ " `None`.\n"
789
+ "\n"
790
+ " ## Examples\n"
791
+ "\n"
792
+ " ```gleam\n"
793
+ " assert to_option(\"\") == None\n"
794
+ " ```\n"
795
+ "\n"
796
+ " ```gleam\n"
797
+ " assert to_option(\"hats\") == Some(\"hats\")\n"
798
+ " ```\n"
799
+ ).
800
+ -spec to_option(binary()) -> gleam@option:option(binary()).
801
+ to_option(String) ->
802
+ case String of
803
+ <<""/utf8>> ->
804
+ none;
805
+
806
+ _ ->
807
+ {some, String}
808
+ end.
809
+
810
+ -file("src/gleam/string.gleam", 757).
811
+ ?DOC(
812
+ " Returns the first grapheme cluster in a given `String` and wraps it in a\n"
813
+ " `Result(String, Nil)`. If the `String` is empty, it returns `Error(Nil)`.\n"
814
+ " Otherwise, it returns `Ok(String)`.\n"
815
+ "\n"
816
+ " ## Examples\n"
817
+ "\n"
818
+ " ```gleam\n"
819
+ " assert first(\"\") == Error(Nil)\n"
820
+ " ```\n"
821
+ "\n"
822
+ " ```gleam\n"
823
+ " assert first(\"icecream\") == Ok(\"i\")\n"
824
+ " ```\n"
825
+ ).
826
+ -spec first(binary()) -> {ok, binary()} | {error, nil}.
827
+ first(String) ->
828
+ case gleam_stdlib:string_pop_grapheme(String) of
829
+ {ok, {First, _}} ->
830
+ {ok, First};
831
+
832
+ {error, E} ->
833
+ {error, E}
834
+ end.
835
+
836
+ -file("src/gleam/string.gleam", 781).
837
+ ?DOC(
838
+ " Returns the last grapheme cluster in a given `String` and wraps it in a\n"
839
+ " `Result(String, Nil)`. If the `String` is empty, it returns `Error(Nil)`.\n"
840
+ " Otherwise, it returns `Ok(String)`.\n"
841
+ "\n"
842
+ " This function traverses the full string, so it runs in linear time with the\n"
843
+ " length of the string. Avoid using this in a loop.\n"
844
+ "\n"
845
+ " ## Examples\n"
846
+ "\n"
847
+ " ```gleam\n"
848
+ " assert last(\"\") == Error(Nil)\n"
849
+ " ```\n"
850
+ "\n"
851
+ " ```gleam\n"
852
+ " assert last(\"icecream\") == Ok(\"m\")\n"
853
+ " ```\n"
854
+ ).
855
+ -spec last(binary()) -> {ok, binary()} | {error, nil}.
856
+ last(String) ->
857
+ case gleam_stdlib:string_pop_grapheme(String) of
858
+ {ok, {First, <<""/utf8>>}} ->
859
+ {ok, First};
860
+
861
+ {ok, {_, Rest}} ->
862
+ {ok, slice(Rest, -1, 1)};
863
+
864
+ {error, E} ->
865
+ {error, E}
866
+ end.
867
+
868
+ -file("src/gleam/string.gleam", 798).
869
+ ?DOC(
870
+ " Creates a new `String` with the first grapheme in the input `String`\n"
871
+ " converted to uppercase and the remaining graphemes to lowercase.\n"
872
+ "\n"
873
+ " ## Examples\n"
874
+ "\n"
875
+ " ```gleam\n"
876
+ " assert capitalise(\"mamouna\") == \"Mamouna\"\n"
877
+ " ```\n"
878
+ ).
879
+ -spec capitalise(binary()) -> binary().
880
+ capitalise(String) ->
881
+ case gleam_stdlib:string_pop_grapheme(String) of
882
+ {ok, {First, Rest}} ->
883
+ append(string:uppercase(First), string:lowercase(Rest));
884
+
885
+ {error, _} ->
886
+ <<""/utf8>>
887
+ end.
888
+
889
+ -file("src/gleam/string.gleam", 829).
890
+ ?DOC(
891
+ " Returns a `String` representation of a term in Gleam syntax.\n"
892
+ "\n"
893
+ " This may be occasionally useful for quick-and-dirty printing of values in\n"
894
+ " scripts. For error reporting and other uses prefer constructing strings by\n"
895
+ " pattern matching on the values.\n"
896
+ "\n"
897
+ " ## Limitations\n"
898
+ "\n"
899
+ " The output format of this function is not stable and could change at any\n"
900
+ " time. The output is not suitable for parsing.\n"
901
+ "\n"
902
+ " This function works using runtime reflection, so the output may not be\n"
903
+ " perfectly accurate for data structures where the runtime structure doesn't\n"
904
+ " hold enough information to determine the original syntax. For example,\n"
905
+ " tuples with an Erlang atom in the first position will be mistaken for Gleam\n"
906
+ " records.\n"
907
+ "\n"
908
+ " ## Security and safety\n"
909
+ "\n"
910
+ " There is no limit to how large the strings that this function can produce.\n"
911
+ " Be careful not to call this function with large data structures or you\n"
912
+ " could use very large amounts of memory, potentially causing runtime\n"
913
+ " problems.\n"
914
+ ).
915
+ -spec inspect(any()) -> binary().
916
+ inspect(Term) ->
917
+ _pipe = Term,
918
+ _pipe@1 = gleam_stdlib:inspect(_pipe),
919
+ unicode:characters_to_binary(_pipe@1).
920
+
921
+ -file("src/gleam/string.gleam", 852).
922
+ ?DOC(
923
+ " Returns the number of bytes in a `String`.\n"
924
+ "\n"
925
+ " This function runs in constant time on Erlang and in linear time on\n"
926
+ " JavaScript.\n"
927
+ "\n"
928
+ " ## Examples\n"
929
+ "\n"
930
+ " ```gleam\n"
931
+ " assert byte_size(\"🏳️‍⚧️🏳️‍🌈👩🏾‍❤️‍👨🏻\") == 58\n"
932
+ " ```\n"
933
+ ).
934
+ -spec byte_size(binary()) -> integer().
935
+ byte_size(String) ->
936
+ erlang:byte_size(String).
937
+
938
+ -file("src/gleam/string.gleam", 230).
939
+ ?DOC(
940
+ " Drops *n* graphemes from the start of a `String`.\n"
941
+ "\n"
942
+ " This function runs in linear time with the number of graphemes to drop.\n"
943
+ "\n"
944
+ " ## Examples\n"
945
+ "\n"
946
+ " ```gleam\n"
947
+ " assert drop_start(from: \"The Lone Gunmen\", up_to: 2) == \"e Lone Gunmen\"\n"
948
+ " ```\n"
949
+ ).
950
+ -spec drop_start(binary(), integer()) -> binary().
951
+ drop_start(String, Num_graphemes) ->
952
+ case Num_graphemes =< 0 of
953
+ true ->
954
+ String;
955
+
956
+ false ->
957
+ Prefix = gleam_stdlib:slice(String, 0, Num_graphemes),
958
+ Prefix_size = erlang:byte_size(Prefix),
959
+ binary:part(
960
+ String,
961
+ Prefix_size,
962
+ erlang:byte_size(String) - Prefix_size
963
+ )
964
+ end.