created: 20150103184022184 modified: 20150119220342000 title: $:/plugins/tiddlywiki/railroad/syntax The railroad widget uses a special notation to construct the components defined below. `x` and `y` here stand for any component. Names (as opposed to quoted strings) are available when a value starts with a letter and contains only letters, digits, underscores, dots and hyphens. --- ; sequence : <$railroad text=""" ["<-"] {x} ["->"] """/> * A sequence of components * The `<-` and `->` delimiters allow you to force a single component to be treated as a sequence. This is occasionally useful for spacing a diagram out examples <<< ``` x y z sequence ``` <$railroad text=""" x y z """/> ``` <-x y z-> explicit sequence ``` <$railroad text=""" <- x y z -> """/> <<< --- ; optional : <$railroad text=""" "[" [":"] x "]" """/> * A component that can be omitted * The colon makes `x` appear straight ahead examples <<< ``` [:x] optional, normally included ``` <$railroad text=""" [:x] """/> ``` [x] optional, normally omitted ``` <$railroad text=""" [x] """/> <<< --- ; repeated : <$railroad text=""" "{" x [:"+" y] "}" """/> * A list of one or more `x` * The `+` suffix adds `y` as a separator between each `x` and the next examples <<< ``` {x} one or more ``` <$railroad text=""" {x} """/> ``` {x +","} one or more, comma-separated ``` <$railroad text=""" {x +","} """/> <<< --- ; optional repeated : <$railroad text=""" "[{" [":"] x [:"+" y] "}]" """/> * An optional list of `x`, i.e. a list of zero or more `x` examples <<< ``` [{:x}] zero or more, normally included ``` <$railroad text=""" [{:x}] """/> ``` [{:x +","}] zero or more, comma-separated, normally included ``` <$railroad text=""" [{:x +","}] """/> ``` [{x}] zero or more, normally omitted ``` <$railroad text=""" [{x}] """/> ``` [{x +","}] zero or more, comma-separated, normally omitted ``` <$railroad text=""" [{x +","}] """/> <<< --- ; choice : <$railroad text=""" "(" {[:":"] x +"|"} ")" """/> * A set of alternatives * The colon indicates which branch appears straight ahead. By default, it's the first branch examples <<< ``` (x|y|z) alternatives ``` <$railroad text=""" (x|y|z) """/> ``` (x|:y|z) alternatives, normally y ``` <$railroad text=""" (x|:y|z) """/> <<< --- ; string / terminal : <$railroad text={{$:/plugins/tiddlywiki/railroad/syntax-string}}/> * A literal or terminal component * This follows the normal ~TiddlyWiki rules for quoted strings examples <<< ``` "x" terminal ``` <$railroad text=""" "x" """/> <<< --- ; nonterminal : <$railroad text=""" (name | "<" string ">") """/> * A nonterminal component, i.e. the name of another diagram examples <<< ``` <"x"> nonterminal ``` <$railroad text=""" <"x"> """/> <<< --- ; comment : <$railroad text=""" "/" string "/" """/> * A comment examples <<< ``` / "comment" / comment ``` <$railroad text=""" / "comment" / """/> <<< --- ; dummy : <$railroad text=""" "-" """/> * The absence of a component examples <<< ``` - dummy ``` <$railroad text=""" - """/> <<< --- ; link : <$railroad text=""" "[[" x "|" (name|string) "]]" """/> * A link to the tiddler title or URI given by the string or name examples <<< ``` [[x|"tiddler"]] link ``` <$railroad text=""" [[x|"tiddler"]] """/> <<< --- ; transclusion : <$railroad text=""" "{{" (name|string) "}}" """/> * Treats the content of another tiddler as diagram syntax and transcludes it into the current diagram examples <<< ``` {{"$:/plugins/tiddlywiki/railroad/example-transclusion"}} transclusion // "railroad transclusion example" text <- text in the tidlder ``` <$railroad text=""" {{ "$:/plugins/tiddlywiki/railroad/example-transclusion" }} """/> <<< --- ; arrow pragma : <$railroad text=""" "\arrow" ("yes" | "no") """/> * Controls whether repeat paths have an arrow on them * Can be toggled on and off in mid-diagram, if desired examples <<< ``` <$railroad text=""" \arrow yes [{:x}] """/> ``` <$railroad text="""\arrow yes [{:x}] """/> ``` <$railroad text=""" \arrow no [{:x}] """/> ``` <$railroad text="""\arrow no [{:x}] """/> <<< --- ; debug pragma : <$railroad text=""" "\debug" """/> * Causes the diagram to display its parse tree examples <<< ``` \debug x ``` <$railroad text="""\debug x """/> <<< --- ; start/end pragma : <$railroad text=""" ("\start" |: "\end") ("none" |: "single" | "double") """/> * Controls the style of the diagram's startpoint or endpoint examples <<< ``` \start none x ``` <$railroad text=""" \start none x """/> ``` \start double \end double x ``` <$railroad text=""" \start double \end double x """/> <<<