# `JsonRemedy.Layer3.SyntaxHelpers`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L1)

Helper functions for Layer 3 syntax normalization operations.

Contains utilities for character recognition, text processing,
and common operations used across the syntax normalization layer.

# `consume_identifier`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L107)

```elixir
@spec consume_identifier(String.t(), non_neg_integer()) ::
  {String.t(), non_neg_integer()}
```

Consume identifier characters from input starting at position.

# `consume_number`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L115)

```elixir
@spec consume_number(String.t(), non_neg_integer()) :: {String.t(), non_neg_integer()}
```

Consume number characters from input starting at position.

# `consume_while`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L124)

```elixir
@spec consume_while(String.t(), non_neg_integer(), (String.t() -&gt; boolean())) ::
  {String.t(), non_neg_integer()}
```

Generic consume while predicate is true.

# `consume_whitespace`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L80)

```elixir
@spec consume_whitespace(String.t(), non_neg_integer()) ::
  {String.t(), non_neg_integer()}
```

Consume whitespace from input and return {whitespace_string, new_position}.

# `create_repair`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L190)

```elixir
@spec create_repair(String.t(), String.t(), non_neg_integer()) :: map()
```

Create a repair action record.

# `identifier_char?`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L27)

```elixir
@spec identifier_char?(String.t()) :: boolean()
```

Check if a character can be part of an identifier.

# `identifier_start?`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L13)

```elixir
@spec identifier_start?(String.t()) :: boolean()
```

Check if a character can start an identifier (letter, underscore, or UTF-8).

# `identifier_start_char_simple?`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L69)

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

Check if a character can start an identifier in binary optimized mode.

# `match_at_position?`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L147)

```elixir
@spec match_at_position?(String.t(), non_neg_integer(), String.t()) :: boolean()
```

Check if a string matches at a specific position (UTF-8 safe).

# `number_char?`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L61)

```elixir
@spec number_char?(String.t()) :: boolean()
```

Check if a character is part of a number.

# `pop_stack_safe`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L204)

```elixir
@spec pop_stack_safe(list()) :: {list(), any()}
```

Safely pop from stack.

# `utf8_letter?`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L37)

```elixir
@spec utf8_letter?(String.t()) :: boolean()
```

Check if a character is a UTF-8 letter (simplified approach).

# `word_boundary?`
[🔗](https://github.com/nshkrdotcom/json_remedy/blob/v0.2.1/lib/json_remedy/layer3/syntax_helpers.ex#L162)

```elixir
@spec word_boundary?(String.t(), non_neg_integer(), String.t()) :: boolean()
```

Check if a token match is at a word boundary.

---

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