Skip to content

Commit

Permalink
Add string.split() to the canonical spec
Browse files Browse the repository at this point in the history
See #1950
  • Loading branch information
nex3 committed Mar 2, 2023
1 parent 6a21d2e commit 126a5e5
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions spec/built-in-modules/string.md
Expand Up @@ -58,6 +58,72 @@ slice($string, $start-at, $end-at: -1)

This function is also available as a global function named `str-slice()`.

### `split()`

```
split($string, $separator, $limit: null)
```

* If `$string` is not a string, throw an error.

* If `$separator` is not a string, throw an error.

* If `$limit` is a value other than an integer or `null`, throw an error.

* If `$limit` is less than 1, throw an error.

* If `$string` is an empty string, return a list with `$string` as the only
item.

* Let `split-list` be an empty list.

* If `$limit` is `null`, set `$limit` to the value of calling
`string.length($string)`.

* Let `split-counter` equal 0.

* While `split-counter <= $limit` and `string.length($string) > 0`:

* If `split-counter == $limit`:

* Append `$string` to `split-list`.

* Set `$string` to an empty string.

* Otherwise:

* If `$separator` is an empty string:

* Let `code-point` be the value of calling `string.slice($string, 1, 1)`.

* Append `code-point` to `split-list`.

* Set `$string` to `string.slice($string, 2)`.

* Increase `split-counter` by 1.

* Otherwise:

* Let `index` be the result of calling
`string.index($string, $separator)`.

* If `index` is `null`, append `$string` to `split-list` and set `$string`
to an empty string.

* Otherwise:

* Let `current-substring` be the result of calling
`string.slice($string, 1, index - 1)`.

* Append `current-substring` to `split-list`.

* Set `$string` to
`string.slice($string, index + string.length($separator))`.

* Increase `split-counter` by 1.

* Return `split-list` as a bracketed, comma-separated list.

### `to-lower-case()`

```
Expand Down

0 comments on commit 126a5e5

Please sign in to comment.