Files
storybook/storybook-editor/assets/Storybook.sublime-syntax
Sienna Meridian Satterwhite 16deb5d237 release: Storybook v0.2.0 - Major syntax and features update
BREAKING CHANGES:
- Relationship syntax now requires blocks for all participants
- Removed self/other perspective blocks from relationships
- Replaced 'guard' keyword with 'if' for behavior tree decorators

Language Features:
- Add tree-sitter grammar with improved if/condition disambiguation
- Add comprehensive tutorial and reference documentation
- Add SBIR v0.2.0 binary format specification
- Add resource linking system for behaviors and schedules
- Add year-long schedule patterns (day, season, recurrence)
- Add behavior tree enhancements (named nodes, decorators)

Documentation:
- Complete tutorial series (9 chapters) with baker family examples
- Complete reference documentation for all language features
- SBIR v0.2.0 specification with binary format details
- Added locations and institutions documentation

Examples:
- Convert all examples to baker family scenario
- Add comprehensive working examples

Tooling:
- Zed extension with LSP integration
- Tree-sitter grammar for syntax highlighting
- Build scripts and development tools

Version Updates:
- Main package: 0.1.0 → 0.2.0
- Tree-sitter grammar: 0.1.0 → 0.2.0
- Zed extension: 0.1.0 → 0.2.0
- Storybook editor: 0.1.0 → 0.2.0
2026-02-13 21:52:03 +00:00

90 lines
2.2 KiB
YAML

%YAML 1.2
---
name: Storybook
file_extensions:
- sb
- storybook
scope: source.storybook
contexts:
main:
# Comments
- match: '//!.*$'
scope: comment.line.documentation.storybook
- match: '//.*$'
scope: comment.line.double-slash.storybook
# Prose blocks
- match: '^(\s*)(---\w*)$'
captures:
2: keyword.control.prose.storybook
push: prose_block
# Declaration keywords
- match: '\b(species|character|behavior|template|use|from)\b'
scope: keyword.declaration.storybook
# Control flow keywords
- match: '\b(for|where|if|else|match|with)\b'
scope: keyword.control.storybook
# Boolean literals
- match: '\b(true|false)\b'
scope: constant.language.boolean.storybook
# Numeric literals
- match: '\b\d+(\.\d+)?\b'
scope: constant.numeric.storybook
# Time/Duration literals
- match: '\b\d+[hms]\b'
scope: constant.numeric.time.storybook
# String literals
- match: '"'
scope: punctuation.definition.string.begin.storybook
push: double_quoted_string
# Field names (before colon)
- match: '^\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*(:)'
captures:
1: variable.other.member.storybook
2: punctuation.separator.storybook
# Range operator
- match: '\.\.'
scope: keyword.operator.range.storybook
# Operators
- match: '[+\-*/%<>=!&|]'
scope: keyword.operator.storybook
# Punctuation
- match: '[{}()\[\],;]'
scope: punctuation.storybook
# Type names and identifiers (capitalized)
- match: '\b[A-Z][a-zA-Z0-9_]*\b'
scope: entity.name.type.storybook
# Regular identifiers
- match: '\b[a-z_][a-zA-Z0-9_]*\b'
scope: variable.other.storybook
prose_block:
- meta_scope: string.unquoted.prose.storybook
- match: '^(\s*)(---)$'
captures:
2: keyword.control.prose.storybook
pop: true
- match: '.*$'
scope: string.unquoted.prose.storybook
double_quoted_string:
- meta_scope: string.quoted.double.storybook
- match: '\\.'
scope: constant.character.escape.storybook
- match: '"'
scope: punctuation.definition.string.end.storybook
pop: true