Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow whitespace at complex-message start #854

Merged
merged 3 commits into from
Aug 12, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions spec/message.abnf
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
message = simple-message / complex-message

simple-message = [simple-start pattern]
simple-message = [s] [simple-start pattern]
eemeli marked this conversation as resolved.
Show resolved Hide resolved
simple-start = simple-start-char / escaped-char / placeholder
pattern = *(text-char / escaped-char / placeholder)
placeholder = expression / markup

complex-message = *(declaration [s]) complex-body [s]
complex-message = [s] *(declaration [s]) complex-body [s]
declaration = input-declaration / local-declaration / reserved-statement
complex-body = quoted-pattern / matcher

Expand Down
13 changes: 9 additions & 4 deletions spec/syntax.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,11 +153,14 @@ message = simple-message / complex-message
```

A **_<dfn>simple message</dfn>_** contains a single _pattern_,
with restrictions on its first character.
with restrictions on its first non-whitespace character.
An empty string is a valid _simple message_.

Whitespace at the start of a _simple message_ is significant,
eemeli marked this conversation as resolved.
Show resolved Hide resolved
and a part of the _text_ of the _message_.

```abnf
simple-message = [simple-start pattern]
simple-message = [s] [simple-start pattern]
simple-start = simple-start-char / escaped-char / placeholder
```

Expand All @@ -169,8 +172,10 @@ and consists of:
1. an optional list of _declarations_, followed by
2. a _complex body_

Whitespace at the start of a _complex message_ is ignored.
eemeli marked this conversation as resolved.
Show resolved Hide resolved

```abnf
complex-message = *(declaration [s]) complex-body [s]
complex-message = [s] *(declaration [s]) complex-body [s]
```

### Declarations
Expand Down Expand Up @@ -300,7 +305,7 @@ U+007B LEFT CURLY BRACKET `{`, and U+007D RIGHT CURLY BRACKET `}`
MUST be escaped as `\\`, `\{`, and `\}` respectively.

In the ABNF, _text_ is represented by non-empty sequences of
`simple-start-char`, `text-char`, and `escaped-char`.
`simple-start-char`, `text-char`, `escaped-char`, and `s`.
eemeli marked this conversation as resolved.
Show resolved Hide resolved
The first of these is used at the start of a _simple message_,
and matches `text-char` except for not allowing U+002E FULL STOP `.`.
eemeli marked this conversation as resolved.
Show resolved Hide resolved
The ABNF uses `content-char` as a shared base for _text_ and _quoted literal_ characters.
Expand Down
17 changes: 13 additions & 4 deletions test/tests/syntax.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@
"src": "hello {|world|}",
"exp": "hello world"
},
{
"description": "message -> simple-message -> s simple-start pattern -> s simple-start-char pattern -> ...",
"src": "\n hello\t",
"exp": "\n hello\t"
},
{
"src": "hello {$place}",
"params": [
Expand Down Expand Up @@ -134,6 +139,11 @@
"src": ".input{$x}{{}}",
"exp": ""
},
{
"description": "message -> complex-message -> s *(declaration [s]) complex-body s -> s declaration complex-body s -> s input-declaration complex-body s -> s input variable-expression complex-body s",
"src": "\t.input{$x}{{}}\n",
"exp": ""
},
{
"description": "message -> complex-message -> *(declaration [s]) complex-body -> declaration declaration complex-body -> input-declaration input-declaration complex-body -> input variable-expression input variable-expression complex-body",
"src": ".input{$x}.input{$y}{{}}",
Expand All @@ -145,8 +155,8 @@
"exp": ""
},
{
"description": "message -> complex-message -> *(declaration [s]) complex-body s -> complex-body s",
"src": "{{}} ",
"description": "message -> complex-message -> s *(declaration [s]) complex-body s -> s complex-body s",
"src": " {{}} ",
"exp": ""
},
{
Expand Down Expand Up @@ -398,8 +408,7 @@
"source": "|42|",
"value": "42"
}
],
"exp": "42"
]
},
{
"description": "... literal -> quoted-literal -> \"|\" \"|\" ...",
Expand Down