# tree-sitter-storybook

Tree-sitter grammar for the Storybook narrative DSL.

## Overview

This is a Tree-sitter grammar for Storybook, a domain-specific language for narrative design and character development. The grammar provides syntax highlighting, code navigation, and other editor features through Tree-sitter.

## Features

- **Syntax highlighting** for all Storybook constructs
- **Symbol outline** for navigating characters, templates, relationships, etc.
- **Bracket matching** including special handling for prose blocks
- **Auto-indentation** support

## Installation

### For development

```bash
# Install dependencies
npm install

# Generate parser
npm run build

# Run tests
npm run test
```

### For Zed editor

This grammar is integrated into the Zed Storybook extension. See the `zed-storybook` directory for the extension.

## Grammar Structure

The grammar supports the following top-level declarations:

- `use` - Import statements
- `character` - Character definitions
- `template` - Reusable field templates
- `life_arc` - State machines for character development
- `schedule` - Daily schedules and routines
- `behavior` - Behavior trees for AI
- `institution` - Organizations and groups
- `relationship` - Multi-party relationships
- `location` - Places and settings
- `species` - Species definitions with templates
- `enum` - Enumeration types

## Special Features

### Prose Blocks

The grammar includes an external scanner (written in C) to handle prose blocks:

```storybook
---backstory
This is a prose block that can contain
multiple lines of narrative text.
---
```

### Expression Support

Full support for expressions in life arc transitions:

```storybook
on self.age >= 18 and self.location is wonderland -> adult_state
```

## Testing

The grammar includes comprehensive tests. Run them with:

```bash
tree-sitter test
```

To test parsing a specific file:

```bash
tree-sitter parse path/to/file.sb
```

## License

MIT
