mirror of
git://git.psyc.eu/libpsyc
synced 2024-08-15 03:19:02 +00:00
render doc
This commit is contained in:
parent
4ceb768639
commit
0f9f1bdc94
3 changed files with 46 additions and 16 deletions
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file psyc/parser.h
|
||||
* @brief Interface for various psyc parser functions.
|
||||
* @brief Interface for various PSYC parser functions.
|
||||
*
|
||||
* All parsing functions and the definitions they use are
|
||||
* defined in this file.
|
||||
|
|
|
@ -1,8 +1,37 @@
|
|||
#ifndef PSYC_RENDER_H
|
||||
# define PSYC_RENDER_H
|
||||
|
||||
#include "syntax.h"
|
||||
/**
|
||||
* @file psyc/render.h
|
||||
* @brief Interface for PSYC packet rendering.
|
||||
*
|
||||
* All rendering functions and the definitions they use are
|
||||
* defined in this file.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup rendering Rendering Functions
|
||||
*
|
||||
* This module contains all rendering functions.
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return codes for PSYC_render.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
//PSYC_RENDER_ERROR_ROUTING = -2,
|
||||
PSYC_RENDER_ERROR = -1,
|
||||
PSYC_RENDER_SUCCESS = 0,
|
||||
} PSYC_RenderRC;
|
||||
|
||||
/**
|
||||
* Render a PSYC packet into a buffer.
|
||||
*/
|
||||
PSYC_RenderRC PSYC_render(PSYC_Packet *packet, char *buffer, size_t buflen);
|
||||
|
||||
/*
|
||||
typedef enum
|
||||
{
|
||||
PSYC_RENDER_CHECK_LENGTH = 0,
|
||||
|
@ -10,17 +39,12 @@ typedef enum
|
|||
PSYC_RENDER_NO_LENGTH = 2,
|
||||
PSYC_RENDER_ROUTING = 3,
|
||||
} PSYC_RenderFlag;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
PSYC_RENDER_ERROR_ROUTING = -2,
|
||||
PSYC_RENDER_ERROR = -1,
|
||||
PSYC_RENDER_SUCCESS = 0,
|
||||
} PSYC_RenderRC;
|
||||
*/
|
||||
|
||||
/**
|
||||
* Struct for keeping render state.
|
||||
*/
|
||||
/*
|
||||
typedef struct
|
||||
{
|
||||
PSYC_RenderFlag flag; ///< flags for the renderer
|
||||
|
@ -31,9 +55,7 @@ typedef struct
|
|||
size_t length; ///< how big is the buffer we allocated
|
||||
char buffer[]; ///< OMG a C99 feature! variable size buffer!
|
||||
} PSYC_RenderState;
|
||||
|
||||
PSYC_RenderRC PSYC_render(PSYC_Packet *packet, char *buffer, size_t buflen);
|
||||
|
||||
*/
|
||||
/**
|
||||
* Initiates the state struct.
|
||||
*
|
||||
|
@ -52,3 +74,5 @@ int PSYC_renderBody(PSYC_RenderState* render,
|
|||
const char* data, size_t dlength);
|
||||
*/
|
||||
#endif // PSYC_RENDER_H
|
||||
|
||||
/** @} */ // end of rendering group
|
||||
|
|
14
src/render.c
14
src/render.c
|
@ -1,5 +1,6 @@
|
|||
#include "psyc/lib.h"
|
||||
#include "psyc/render.h"
|
||||
#include "psyc/syntax.h"
|
||||
|
||||
inline size_t PSYC_renderModifier(PSYC_Modifier *m, char *buffer)
|
||||
{
|
||||
|
@ -28,38 +29,43 @@ PSYC_RenderRC PSYC_render(PSYC_Packet *packet, char *buffer, size_t buflen)
|
|||
size_t i, cur = 0;
|
||||
|
||||
if (packet->length > buflen)
|
||||
return PSYC_RENDER_ERROR;
|
||||
return PSYC_RENDER_ERROR; // return error if packet doesn't fit in buffer
|
||||
|
||||
// render routing modifiers
|
||||
for (i = 0; i < packet->routing.lines; i++)
|
||||
cur += PSYC_renderModifier(&packet->routing.modifiers[i], buffer + cur);
|
||||
|
||||
// add length if needed
|
||||
if (packet->flag == PSYC_PACKET_NEED_LENGTH) {
|
||||
//cur += sprintf(buffer + cur, "%ld", packet->contentLength);
|
||||
cur += itoa(packet->contentLength, buffer + cur, 10);
|
||||
}
|
||||
|
||||
buffer[cur++] = '\n';
|
||||
buffer[cur++] = '\n'; // start of content part
|
||||
|
||||
// render entity modifiers
|
||||
for (i = 0; i < packet->entity.lines; i++)
|
||||
cur += PSYC_renderModifier(&packet->entity.modifiers[i], buffer + cur);
|
||||
|
||||
if (packet->method.length)
|
||||
if (packet->method.length) // add method\n
|
||||
{
|
||||
memcpy(buffer + cur, packet->method.ptr, packet->method.length);
|
||||
cur += packet->method.length;
|
||||
buffer[cur++] = '\n';
|
||||
}
|
||||
|
||||
if (packet->data.length)
|
||||
if (packet->data.length) // add data\n
|
||||
{
|
||||
memcpy(buffer + cur, packet->data.ptr, packet->method.length);
|
||||
cur += packet->data.length;
|
||||
buffer[cur++] = '\n';
|
||||
}
|
||||
|
||||
// add packet delimiter
|
||||
buffer[cur++] = C_GLYPH_PACKET_DELIMITER;
|
||||
buffer[cur++] = '\n';
|
||||
|
||||
// actual length should be equal to pre-calculated length at this point
|
||||
assert(cur == packet->length);
|
||||
return PSYC_RENDER_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue