# `Feel.Syntax.Characters`
[🔗](https://github.com/FeeJai/BDM/blob/feel-v0.1.0/apps/feel/lib/feel/syntax/characters.ex#L1)

The character classes of the FEEL lexical grammar (DMN 1.6, section 10.3.1.2).

The ranges are those of grammar rules 28 (name start characters), 29 (name part
characters), 61 (white space), and 62 (vertical space), in the normalized form
recorded in the specification notes: the printed rules have stray spaces and
some short hex values.

Two classes overlap: U+1680, U+180E and U+FEFF are both white space and inside
the name ranges. White space wins, since it is stated to separate tokens.
`is_word_char/1` applies that rule, so a word never contains white space.

All of the guards work on a Unicode code point (an integer).

# `is_digit`
*macro* 

A decimal digit, `0` to `9`.

# `is_name_part`
*macro* 

A name part character (rule 29): a name start character, a digit, or a combining mark.

# `is_name_start`
*macro* 

A name start character (rule 28): letters, `_`, `?`, and most of Unicode above Latin-1.

# `is_vertical_space`
*macro* 

Vertical space (rule 62): the line terminators U+000A to U+000D.

# `is_whitespace`
*macro* 

White space (rule 61), which includes vertical space.

# `is_word_char`
*macro* 

A character that can be part of a word: a name part character that is not white space.

# `name_part?`

```elixir
@spec name_part?(integer()) :: boolean()
```

Returns `true` for a name part character (rule 29).

# `name_start?`

```elixir
@spec name_start?(integer()) :: boolean()
```

Returns `true` for a name start character (rule 28).

# `vertical_space?`

```elixir
@spec vertical_space?(integer()) :: boolean()
```

Returns `true` for vertical space (rule 62).

# `whitespace?`

```elixir
@spec whitespace?(integer()) :: boolean()
```

Returns `true` for white space (rule 61).

# `word_char?`

```elixir
@spec word_char?(integer()) :: boolean()
```

Returns `true` for a character that can be part of a word.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
