Skip to content

Latest commit

 

History

History
92 lines (57 loc) · 3.03 KB

command-parsing.asciidoc

File metadata and controls

92 lines (57 loc) · 3.03 KB

Command Parsing

Kakoune commands, either loaded from a script, or written in the command prompt are parsed according to the following rules:

Basic parsing

  • Commands are separated by ; or end of lines

  • Words (command names and parameters) are separated by whitespaces

Quoted Strings

If a word starts with ', " or %X with X a non nestable punctuation character it is parsed as a quoted string whose delimiter is, respectively, ', " or X.

A quoted string contains every character (including whitespaces) until its closing delimiter. If its closing delimiter is doubled, then it is considered to be part of the string content as a single delimiter.

Inside double quotes, %-strings are processed unless the % is escaped by doubling it. Double quotes inside these nested strings must still be escaped.

No other escaping takes place in quoted strings.

Quoted Strings Examples

  • 'foo' contains foo

  • foo’bar' is read verbatim, so it contains foo’bar'

  • foo%|bar| is read verbatim, so it contains foo%|bar|.

  • 'foo''bar' is a single word whose content is foo’bar

  • "baz""" is a single word whose content is baz".

  • %|foo||bar| is a single word whose content is foo|bar.

  • "foo %|""bar| %%,baz," is a single word whose content is foo "bar %,baz,.

Balanced Strings

If a word starts with %X with X a nestable punctuation character (one of (, [, { and <), it is parsed as a balanced string whose closing delimiter is the matching character of its opening delimiter (respectively ), ], } and >).

A balanced string contains every character (including whitespaces) until a closing delimiter is found, and opening and closing delimiters are balanced inside the string (each opening delimiter appearing inside the string have been closed by a matching closing delimiter).

No other escaping takes place in balanced strings.

Balanced Strings Examples

  • %{foo} contains foo

  • %{foo{bar}} contains foo{bar}

  • foo%{bar} contains foo%{bar}

  • "foo %{bar}" is a single word whose content is foo bar

Non Quoted words

Other words are non-quoted. Non-quoted words end either on a whitespaces or a ;.

If they start with \ followed by %, ' or ", then that leading \ is discarded.

If a whitespace or ; is preceded by \, then the \ is discarded and the whitespace or ; becomes part of the word. Any other \ is treated as a literal \.

Typed Expansions

Quoted and Balanced strings starting with % might have an optional alphabetic expansion type between the % and their delimiter (which is always a punctuation character). This expansion type defines how the string content is going to be expanded. Rules for expanding and escaping typed expansions are the same as for %-strings.

  • If the expansion type is empty, the string content is used verbatim.

  • If the expansion type is one of sh, reg, opt, val or arg, The string is expanded as described in :doc expansions

  • For any other expansion type a parsing error is raised.