vijin/Syntax.fs

48 lines
1.4 KiB
Forth

module VijiN.Syntax
type Variable = Variable of string
type Term = Text of string | Variable of Variable
type Character = Character of Term
// TODO: Character should probably have more, like selecting portrait outfit/style
type DirectivePrefix = Prefix of string
type DirectiveInfix = Infix of string
type DirectiveSuffix = Suffix of string
type DirectiveOperator = DirectivePrefix * DirectiveInfix option * DirectiveSuffix option
type DirectiveArg = Arg of Term
type Directive = DirectiveOperator * DirectiveArg list list // TODO: non-empty list
type Directives = Directive list // TODO: non-empty list
type ChoiceText = Text of Term
type ChoiceValue = Value of Term
type ChoiceOption = ChoiceText * ChoiceValue option
type Choice = Variable * ChoiceOption list // TODO: non-empty list
type InlineDirective = Directive
type SpokenText =
| Plain of Term
| Emphasis of Term
| Yell of Term
| Whisper of Term
type Spoken = Character option * InlineDirective list * SpokenText list // TODO: non-empty list
type Comment = Comment of string
type Line =
| Spoken of Spoken
| Directive of Directives
| Comment of Comment
| Choice of Choice
type LineNumber = Line of int // TODO: >= 1
type PageNumber = Page of int // TODO: >= 1
type ScriptLine = LineNumber * PageNumber * Line
// TODO: other diffing metadata
type SceneName = Name of string
type Scene = SceneName * Character list * ScriptLine list