# Unicode Segmentation

> StringZilla for JavaScript

Four iterable classes lazily split a UTF-8 buffer into TR29 and UAX14 segments: `Utf8Wordbreaks` for words, `Utf8Graphemes` for grapheme clusters, `Utf8Sentences` for sentences, and `Utf8Linebreaks` for line-break opportunities.
Each is constructed with the source buffer and an optional `validate` flag, and is its own iterator, yielding zero-copy `subarray` views into the buffer it keeps alive.

```javascript
const words = [...new sz.Utf8Wordbreaks(Buffer.from("Hello world!"))].map((b) => b.toString());
assert.deepStrictEqual(words, ["Hello", " ", "world", "!"]);

const graphemes = [...new sz.Utf8Graphemes(Buffer.from("a👩‍👩‍👧‍👦b"))].map((b) => b.toString());
assert.deepStrictEqual(graphemes, ["a", "👩‍👩‍👧‍👦", "b"]); // the ZWJ family is one cluster
```

`import { Utf8Segments } from 'stringzilla';`

`import { Utf8SegmentsConstructor } from 'stringzilla';`

## Utf8Segments

Iterator over segments of a UTF-8 buffer, as zero-copy `subarray` views of the buffer it keeps alive.

```typescript
interface Utf8Segments extends Iterable<Buffer>
```

## next

The next segment, or `done` once the buffer is exhausted.

```typescript
next(): IteratorResult<Buffer, undefined>
```

## Utf8SegmentsConstructor

Constructs a segment iterator over a UTF-8 buffer.

```typescript
interface Utf8SegmentsConstructor
```

## Utf8SegmentsConstructor

```typescript
new Utf8SegmentsConstructor(
    buffer: Buffer,
    validate?: boolean,
): Utf8Segments
```

- `buffer`: UTF-8 encoded input
- `validate`: If true, validates UTF-8 and throws on invalid input

