x-engine-c v0.2.13
The C engine for x-lang
Loading...
Searching...
No Matches
str.c File Reference

S-expression analyser, reader, writer, and display for string literals. More...

#include "x-token/sexp/str.h"
#include "x-eval.h"
#include "x-token.h"
#include "x-type/str.h"
#include "x-type/buffer.h"
#include "x-type/prim.h"

Macros

#define x_next_state(self, dflt)
 

Functions

static int hex_digit (x_char_t c)
 
x_obj_tx_sexp_str_analyse1 (x_obj_t *p_base, x_obj_t *p_args)
 
x_obj_tx_sexp_str_analyse2 (x_obj_t *p_base, x_obj_t *p_args)
 
x_obj_tx_sexp_str_analyse3 (x_obj_t *p_base, x_obj_t *p_args)
 
x_obj_tx_sexp_str_read (x_obj_t *p_base, x_obj_t *p_args)
 

Variables

x_spair_t x_sexp_str_analyse1_prim = x_obj_set(NULL, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_analyse1 }, { NULL })
 
x_spair_t x_sexp_str_analyse2_prim = x_obj_set(NULL, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_analyse2 }, { NULL })
 
x_spair_t x_sexp_str_analyse3_prim = x_obj_set(NULL, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_analyse3 }, { NULL })
 
x_satom_t x_sexp_str_read_prim = x_obj_set(x_type_atom_obj, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_read })
 

Detailed Description

S-expression analyser, reader, writer, and display for string literals.

Author
Jon Ruttan (jonru.nosp@m.ttan.nosp@m.@gmai.nosp@m.l.co.nosp@m.m)

Macro Definition Documentation

◆ x_next_state

#define x_next_state (   self,
  dflt 
)
Value:
(x_obj_isnil(p_base, x_callable_state(self)) \
? (x_obj_t *)(dflt) : x_callable_state(self))
Definition x-obj.h:212
int x_obj_isnil(x_obj_t *p_base, x_obj_t *p_obj)
Definition x-obj.c:54
#define x_callable_state(X)
Definition prim.h:40

Read next-state from callable state slot, with default fallback.

Function Documentation

◆ hex_digit()

static int hex_digit ( x_char_t  c)
static

◆ x_sexp_str_analyse1()

x_obj_t * x_sexp_str_analyse1 ( x_obj_t p_base,
x_obj_t p_args 
)

Analyse state 1: match the opening double-quote.

Parameters
p_baseBase (execution context).
p_argsPair of (self, read-args).
Returns
Next analyser state on match, or NULL.

◆ x_sexp_str_analyse2()

x_obj_t * x_sexp_str_analyse2 ( x_obj_t p_base,
x_obj_t p_args 
)

Analyse state 2: consume string body characters.

Detects backslash (transitions to escape state) and closing quote (scores the full token length). All other characters loop.

Parameters
p_baseBase (execution context).
p_argsPair of (self, read-args).
Returns
Self, score, or next state.

◆ x_sexp_str_analyse3()

x_obj_t * x_sexp_str_analyse3 ( x_obj_t p_base,
x_obj_t p_args 
)

Analyse state 3: escape state.

Unconditionally consumes one character after a backslash and returns to the normal body-reading state (analyse2).

Parameters
p_baseBase (execution context).
p_argsPair of (self, read-args).
Returns
The analyse2 state primitive.

◆ x_sexp_str_read()

x_obj_t * x_sexp_str_read ( x_obj_t p_base,
x_obj_t p_args 
)

Read a string literal from the token buffer.

Strips the surrounding quotes and processes escape sequences in-place. Supported escapes: \", \\, \n, \t, \r, \0, and \xHH (two hex digits). Unknown escapes are preserved literally.

Parameters
p_baseBase (execution context).
p_argsRead-args containing the token buffer.
Returns
A newly created owned-string object.

Variable Documentation

◆ x_sexp_str_analyse1_prim

x_spair_t x_sexp_str_analyse1_prim = x_obj_set(NULL, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_analyse1 }, { NULL })

◆ x_sexp_str_analyse2_prim

x_spair_t x_sexp_str_analyse2_prim = x_obj_set(NULL, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_analyse2 }, { NULL })

◆ x_sexp_str_analyse3_prim

x_spair_t x_sexp_str_analyse3_prim = x_obj_set(NULL, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_analyse3 }, { NULL })

◆ x_sexp_str_read_prim

x_satom_t x_sexp_str_read_prim = x_obj_set(x_type_atom_obj, X_OBJ_FLAG_NONE, { .fn = x_sexp_str_read })