mirror of
git://git.psyc.eu/libpsyc
synced 2024-08-15 03:19:02 +00:00
s/modifier/operator/
This commit is contained in:
parent
0e54f3f76a
commit
4de626227a
8 changed files with 39 additions and 44 deletions
|
@ -43,13 +43,13 @@ typedef enum
|
||||||
/// from the cursor position to the end.
|
/// from the cursor position to the end.
|
||||||
PSYC_PARSE_INSUFFICIENT = 1,
|
PSYC_PARSE_INSUFFICIENT = 1,
|
||||||
/// Routing variable parsing done.
|
/// Routing variable parsing done.
|
||||||
/// Modifier, name & value contains the respective parts.
|
/// Operator, name & value contains the respective parts.
|
||||||
PSYC_PARSE_ROUTING = 2,
|
PSYC_PARSE_ROUTING = 2,
|
||||||
/// Entity variable parsing done.
|
/// Entity variable parsing done.
|
||||||
/// Modifier, name & value contains the respective parts.
|
/// Operator, name & value contains the respective parts.
|
||||||
PSYC_PARSE_ENTITY = 3,
|
PSYC_PARSE_ENTITY = 3,
|
||||||
/// Entity variable parsing is incomplete.
|
/// Entity variable parsing is incomplete.
|
||||||
/// Modifier & name are complete, value is incomplete.
|
/// Operator & name are complete, value is incomplete.
|
||||||
PSYC_PARSE_ENTITY_INCOMPLETE = 4,
|
PSYC_PARSE_ENTITY_INCOMPLETE = 4,
|
||||||
/// Body parsing done, name contains method, value contains body.
|
/// Body parsing done, name contains method, value contains body.
|
||||||
PSYC_PARSE_BODY = 5,
|
PSYC_PARSE_BODY = 5,
|
||||||
|
@ -156,14 +156,14 @@ inline size_t PSYC_getContentLength (PSYC_ParseState* s);
|
||||||
* Generalized line-based packet parser.
|
* Generalized line-based packet parser.
|
||||||
*
|
*
|
||||||
* @param state An initialized PSYC_ParseState
|
* @param state An initialized PSYC_ParseState
|
||||||
* @param modifier A pointer to a character. In case of a variable, it will
|
* @param operator A pointer to a character. In case of a variable, it will
|
||||||
* be set to the modifier of that variable
|
* be set to the operator of that variable
|
||||||
* @param name A pointer to a PSYC_Array. It will point to the name of
|
* @param name A pointer to a PSYC_Array. It will point to the name of
|
||||||
* the variable or method and its length will be set accordingly
|
* the variable or method and its length will be set accordingly
|
||||||
* @param value A pointer to a PSYC_Array. It will point to the
|
* @param value A pointer to a PSYC_Array. It will point to the
|
||||||
* value/body the variable/method and its length will be set accordingly
|
* value/body the variable/method and its length will be set accordingly
|
||||||
*/
|
*/
|
||||||
PSYC_ParseRC PSYC_parse(PSYC_ParseState* state, char* modifier, PSYC_Array* name, PSYC_Array* value);
|
PSYC_ParseRC PSYC_parse(PSYC_ParseState* state, char* operator, PSYC_Array* name, PSYC_Array* value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List value parser.
|
* List value parser.
|
||||||
|
|
|
@ -3,11 +3,6 @@
|
||||||
|
|
||||||
#include "syntax.h"
|
#include "syntax.h"
|
||||||
|
|
||||||
#define PSYC_FLAG_UNDEFINED 0
|
|
||||||
#define PSYC_FLAG_NOT_BINARY 1
|
|
||||||
#define PSYC_FLAG_YES_BINARY 2
|
|
||||||
#define PSYC_FLAG_CHECK_BINARY 3
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
PSYC_RENDER_CHECK_LENGTH = 0,
|
PSYC_RENDER_CHECK_LENGTH = 0,
|
||||||
|
@ -47,7 +42,7 @@ inline void PSYC_initRenderState (PSYC_RenderState* state);
|
||||||
int PSYC_renderVar(PSYC_RenderState* render,
|
int PSYC_renderVar(PSYC_RenderState* render,
|
||||||
const char* name, size_t nlength,
|
const char* name, size_t nlength,
|
||||||
const char* value, size_t vlength,
|
const char* value, size_t vlength,
|
||||||
PSYC_RenderFlag flags, char modifier);
|
PSYC_RenderFlag flags, char operator);
|
||||||
|
|
||||||
int PSYC_renderBody(PSYC_RenderState* render,
|
int PSYC_renderBody(PSYC_RenderState* render,
|
||||||
const char* method, size_t mlength,
|
const char* method, size_t mlength,
|
||||||
|
|
|
@ -17,20 +17,20 @@
|
||||||
#define C_GLYPH_SEPARATOR_KEYWORD '_'
|
#define C_GLYPH_SEPARATOR_KEYWORD '_'
|
||||||
#define S_GLYPH_SEPARATOR_KEYWORD "_"
|
#define S_GLYPH_SEPARATOR_KEYWORD "_"
|
||||||
|
|
||||||
#define C_GLYPH_MODIFIER_SET ':'
|
#define C_GLYPH_OPERATOR_SET ':'
|
||||||
#define S_GLYPH_MODIFIER_SET ":"
|
#define S_GLYPH_OPERATOR_SET ":"
|
||||||
|
|
||||||
#define C_GLYPH_MODIFIER_ASSIGN '='
|
#define C_GLYPH_OPERATOR_ASSIGN '='
|
||||||
#define S_GLYPH_MODIFIER_ASSIGN "="
|
#define S_GLYPH_OPERATOR_ASSIGN "="
|
||||||
|
|
||||||
#define C_GLYPH_MODIFIER_AUGMENT '+'
|
#define C_GLYPH_OPERATOR_AUGMENT '+'
|
||||||
#define S_GLYPH_MODIFIER_AUGMENT "+"
|
#define S_GLYPH_OPERATOR_AUGMENT "+"
|
||||||
|
|
||||||
#define C_GLYPH_MODIFIER_DIMINISH '-'
|
#define C_GLYPH_OPERATOR_DIMINISH '-'
|
||||||
#define S_GLYPH_MODIFIER_DIMINISH "-"
|
#define S_GLYPH_OPERATOR_DIMINISH "-"
|
||||||
|
|
||||||
#define C_GLYPH_MODIFIER_QUERY '?'
|
#define C_GLYPH_OPERATOR_QUERY '?'
|
||||||
#define S_GLYPH_MODIFIER_QUERY "?"
|
#define S_GLYPH_OPERATOR_QUERY "?"
|
||||||
|
|
||||||
/* might move into routing.h or something */
|
/* might move into routing.h or something */
|
||||||
#define PSYC_ROUTING 1
|
#define PSYC_ROUTING 1
|
||||||
|
|
10
src/parser.c
10
src/parser.c
|
@ -154,9 +154,9 @@ inline PSYC_ParseRC PSYC_parseBinaryValue(PSYC_ParseState* state, PSYC_Array* va
|
||||||
* Parse simple or binary variable.
|
* Parse simple or binary variable.
|
||||||
* @return PSYC_PARSE_ERROR or PSYC_PARSE_SUCCESS
|
* @return PSYC_PARSE_ERROR or PSYC_PARSE_SUCCESS
|
||||||
*/
|
*/
|
||||||
inline PSYC_ParseRC PSYC_parseVar(PSYC_ParseState* state, char* modifier, PSYC_Array* name, PSYC_Array* value)
|
inline PSYC_ParseRC PSYC_parseVar(PSYC_ParseState* state, char* operator, PSYC_Array* name, PSYC_Array* value)
|
||||||
{
|
{
|
||||||
*modifier = *(state->buffer.ptr + state->cursor);
|
*operator = *(state->buffer.ptr + state->cursor);
|
||||||
ADVANCE_CURSOR_OR_RETURN(PSYC_PARSE_INSUFFICIENT);
|
ADVANCE_CURSOR_OR_RETURN(PSYC_PARSE_INSUFFICIENT);
|
||||||
|
|
||||||
if (PSYC_parseName(state, name) != PSYC_PARSE_SUCCESS)
|
if (PSYC_parseName(state, name) != PSYC_PARSE_SUCCESS)
|
||||||
|
@ -218,7 +218,7 @@ inline PSYC_ParseRC PSYC_parseVar(PSYC_ParseState* state, char* modifier, PSYC_A
|
||||||
* Parse PSYC packets.
|
* Parse PSYC packets.
|
||||||
* Generalized line-based parser.
|
* Generalized line-based parser.
|
||||||
*/
|
*/
|
||||||
PSYC_ParseRC PSYC_parse(PSYC_ParseState* state, char* modifier, PSYC_Array* name, PSYC_Array* value)
|
PSYC_ParseRC PSYC_parse(PSYC_ParseState* state, char* operator, PSYC_Array* name, PSYC_Array* value)
|
||||||
{
|
{
|
||||||
int ret; // a return value
|
int ret; // a return value
|
||||||
size_t pos; // a cursor position
|
size_t pos; // a cursor position
|
||||||
|
@ -248,7 +248,7 @@ PSYC_ParseRC PSYC_parse(PSYC_ParseState* state, char* modifier, PSYC_Array* name
|
||||||
// so just test if the first char is a glyph.
|
// so just test if the first char is a glyph.
|
||||||
if (isGlyph(state->buffer.ptr[state->cursor])) // is the first char a glyph?
|
if (isGlyph(state->buffer.ptr[state->cursor])) // is the first char a glyph?
|
||||||
{ // it is a glyph, so a variable starts here
|
{ // it is a glyph, so a variable starts here
|
||||||
ret = PSYC_parseVar(state, modifier, name, value);
|
ret = PSYC_parseVar(state, operator, name, value);
|
||||||
return ret == PSYC_PARSE_SUCCESS ? PSYC_PARSE_ROUTING : ret;
|
return ret == PSYC_PARSE_SUCCESS ? PSYC_PARSE_ROUTING : ret;
|
||||||
}
|
}
|
||||||
else // not a glyph
|
else // not a glyph
|
||||||
|
@ -310,7 +310,7 @@ PSYC_ParseRC PSYC_parse(PSYC_ParseState* state, char* modifier, PSYC_Array* name
|
||||||
if (isGlyph(state->buffer.ptr[state->cursor]))
|
if (isGlyph(state->buffer.ptr[state->cursor]))
|
||||||
{
|
{
|
||||||
pos = state->cursor;
|
pos = state->cursor;
|
||||||
ret = PSYC_parseVar(state, modifier, name, value);
|
ret = PSYC_parseVar(state, operator, name, value);
|
||||||
state->contentParsed += state->cursor - pos;
|
state->contentParsed += state->cursor - pos;
|
||||||
return ret == PSYC_PARSE_SUCCESS ? PSYC_PARSE_ENTITY : ret;
|
return ret == PSYC_PARSE_SUCCESS ? PSYC_PARSE_ENTITY : ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,14 +46,14 @@ void PSYC_parse(const uint8_t* data, unsigned int length,
|
||||||
struct PSYC_Parser* pstate);
|
struct PSYC_Parser* pstate);
|
||||||
|
|
||||||
/** @brief FlagMod */
|
/** @brief FlagMod */
|
||||||
enum PSYC_Modifier
|
enum PSYC_Operator
|
||||||
{
|
{
|
||||||
// variable modifers
|
// modifier operators
|
||||||
ASSIGN=0x02,
|
ASSIGN = 0x02,
|
||||||
AUGMENT=0x04,
|
AUGMENT = 0x04,
|
||||||
DIMINISH=0x08,
|
DIMINISH = 0x08,
|
||||||
SET=0x10,
|
SET = 0x10,
|
||||||
QUERY=0x20
|
QUERY = 0x20,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PSYC_Parser
|
struct PSYC_Parser
|
||||||
|
@ -79,7 +79,7 @@ struct PSYC_Parser
|
||||||
void (*stateCallback)(struct PSYC_Parser* pstate,
|
void (*stateCallback)(struct PSYC_Parser* pstate,
|
||||||
const uint8_t *name, const unsigned int nlength,
|
const uint8_t *name, const unsigned int nlength,
|
||||||
const uint8_t *value, const unsigned int vlength,
|
const uint8_t *value, const unsigned int vlength,
|
||||||
enum PSYC_Modifier modifiers, char inEntity);
|
enum PSYC_Operator operators, char inEntity);
|
||||||
|
|
||||||
/** @brief gets called after the routing-header was parsed
|
/** @brief gets called after the routing-header was parsed
|
||||||
*
|
*
|
||||||
|
@ -135,7 +135,7 @@ struct PSYC_Parser
|
||||||
void (*errorStateCallback)(struct PSYC_Parser* pstate,
|
void (*errorStateCallback)(struct PSYC_Parser* pstate,
|
||||||
const uint8_t *name, const unsigned int nlength,
|
const uint8_t *name, const unsigned int nlength,
|
||||||
const uint8_t *value, const unsigned int vlength,
|
const uint8_t *value, const unsigned int vlength,
|
||||||
enum PSYC_Modifier modifiers);
|
enum PSYC_Operator operators);
|
||||||
|
|
||||||
|
|
||||||
/*******************************************
|
/*******************************************
|
||||||
|
|
|
@ -9,15 +9,15 @@ inline void PSYC_initRenderState (PSYC_RenderState* state)
|
||||||
PSYC_RenderRC PSYC_renderVar(PSYC_RenderState* state,
|
PSYC_RenderRC PSYC_renderVar(PSYC_RenderState* state,
|
||||||
const char* name, size_t nlength,
|
const char* name, size_t nlength,
|
||||||
const char* value, size_t vlength,
|
const char* value, size_t vlength,
|
||||||
const PSYC_RenderFlag flags, char modifier)
|
const PSYC_RenderFlag flags, char operator)
|
||||||
{
|
{
|
||||||
size_t startc = state->cursor;
|
size_t startc = state->cursor;
|
||||||
|
|
||||||
unless (nlength) nlength = strlen(name);
|
unless (nlength) nlength = strlen(name);
|
||||||
// vlength 0 means an empty variable.. no cheating there
|
// vlength 0 means an empty variable.. no cheating there
|
||||||
unless (modifier) modifier = C_GLYPH_MODIFIER_SET;
|
unless (operator) operator = C_GLYPH_OPERATOR_SET;
|
||||||
|
|
||||||
state->buffer[state->cursor++] = modifier;
|
state->buffer[state->cursor++] = operator;
|
||||||
strncpy(&state->buffer[state->cursor], name, nlength);
|
strncpy(&state->buffer[state->cursor], name, nlength);
|
||||||
state->cursor += nlength;
|
state->cursor += nlength;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
int index, ret;
|
int index, ret;
|
||||||
char buffer[2048], modifier;
|
char buffer[2048], operator;
|
||||||
PSYC_Array name, value, elem;
|
PSYC_Array name, value, elem;
|
||||||
PSYC_ParseState state;
|
PSYC_ParseState state;
|
||||||
PSYC_ParseListState listState;
|
PSYC_ParseListState listState;
|
||||||
|
@ -25,13 +25,13 @@ int main(int argc, char** argv)
|
||||||
PSYC_nextParseBuffer(&state, PSYC_createArray(buffer, index));
|
PSYC_nextParseBuffer(&state, PSYC_createArray(buffer, index));
|
||||||
|
|
||||||
// try parsing that now
|
// try parsing that now
|
||||||
while ((ret = PSYC_parse(&state, &modifier, &name, &value)))
|
while ((ret = PSYC_parse(&state, &operator, &name, &value)))
|
||||||
{
|
{
|
||||||
switch (ret)
|
switch (ret)
|
||||||
{
|
{
|
||||||
case PSYC_PARSE_ROUTING:
|
case PSYC_PARSE_ROUTING:
|
||||||
case PSYC_PARSE_ENTITY:
|
case PSYC_PARSE_ENTITY:
|
||||||
write(1, &modifier, 1);
|
write(1, &operator, 1);
|
||||||
case PSYC_PARSE_BODY:
|
case PSYC_PARSE_BODY:
|
||||||
// printf("the string is '%.*s'\n", name);
|
// printf("the string is '%.*s'\n", name);
|
||||||
write(1, name.ptr, name.length);
|
write(1, name.ptr, name.length);
|
||||||
|
|
|
@ -24,8 +24,8 @@ int writePresence(const char *avail, int availlen, const char *desc, int desclen
|
||||||
|
|
||||||
// the first call to PSYC_renderHeader() without PSYC_RENDER_ROUTING adds the
|
// the first call to PSYC_renderHeader() without PSYC_RENDER_ROUTING adds the
|
||||||
// extra newline to the buffer. later vars with PSYC_RENDER_ROUTING cause an error.
|
// extra newline to the buffer. later vars with PSYC_RENDER_ROUTING cause an error.
|
||||||
(void) PSYC_renderVar(pb, "_degree_availability", 0, avail, availlen, 0, C_GLYPH_MODIFIER_ASSIGN);
|
(void) PSYC_renderVar(pb, "_degree_availability", 0, avail, availlen, 0, C_GLYPH_OPERATOR_ASSIGN);
|
||||||
(void) PSYC_renderVar(pb, "_description_presence", 0, desc, desclen, 0, C_GLYPH_MODIFIER_ASSIGN);
|
(void) PSYC_renderVar(pb, "_description_presence", 0, desc, desclen, 0, C_GLYPH_OPERATOR_ASSIGN);
|
||||||
// presence is to be assigned permanently in distributed state
|
// presence is to be assigned permanently in distributed state
|
||||||
|
|
||||||
(void) PSYC_renderBody(pb, "_notice_presence", 0,
|
(void) PSYC_renderBody(pb, "_notice_presence", 0,
|
||||||
|
|
Loading…
Reference in a new issue