2023-07-14 00:24:37 +00:00
|
|
|
#pragma once
|
2023-07-12 23:37:55 +00:00
|
|
|
|
|
|
|
// A chunk is a reference to a piece of string
|
|
|
|
// from "start" relative to its start
|
|
|
|
// and goes on for len characters.
|
2023-07-12 19:22:54 +00:00
|
|
|
struct chunk
|
|
|
|
{
|
2023-07-14 00:57:47 +00:00
|
|
|
unsigned int start, len;
|
2023-07-12 19:22:54 +00:00
|
|
|
};
|
|
|
|
typedef struct chunk chunk;
|
|
|
|
|
2023-07-13 00:58:39 +00:00
|
|
|
// An error
|
|
|
|
struct sc_error
|
|
|
|
{
|
2023-07-14 00:57:47 +00:00
|
|
|
unsigned int position;
|
|
|
|
unsigned int code;
|
2023-07-13 00:58:39 +00:00
|
|
|
};
|
|
|
|
typedef struct sc_error sc_error;
|
|
|
|
|
2023-07-12 23:37:55 +00:00
|
|
|
// Describes a parsed shortcode
|
2023-07-12 19:22:54 +00:00
|
|
|
struct shortcode
|
|
|
|
{
|
2023-07-12 20:10:55 +00:00
|
|
|
chunk whole;
|
2023-07-12 19:22:54 +00:00
|
|
|
chunk name;
|
|
|
|
chunk data;
|
|
|
|
char matching;
|
|
|
|
chunk argnames[100];
|
|
|
|
chunk argvals[100];
|
2023-07-14 00:57:47 +00:00
|
|
|
unsigned int argcount;
|
2023-07-12 19:22:54 +00:00
|
|
|
};
|
|
|
|
typedef struct shortcode shortcode;
|
|
|
|
|
2023-07-13 00:58:39 +00:00
|
|
|
struct sc_result
|
|
|
|
{
|
|
|
|
shortcode sc[100];
|
2023-07-14 01:02:45 +00:00
|
|
|
unsigned int sccount;
|
2023-07-13 00:58:39 +00:00
|
|
|
sc_error errors[10];
|
2023-07-14 00:57:47 +00:00
|
|
|
unsigned int errcount;
|
2023-07-13 00:58:39 +00:00
|
|
|
};
|
|
|
|
typedef struct sc_result sc_result;
|
|
|
|
|
|
|
|
// Error codes
|
|
|
|
|
|
|
|
/* You are closing the wrong shortcode.
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{{% foo %}} {{% /bar %}}
|
|
|
|
*/
|
2023-07-14 00:24:37 +00:00
|
|
|
#define ERR_MISMATCHED_CLOSING_TAG 1
|
2023-07-14 01:02:45 +00:00
|
|
|
|
|
|
|
/* You are using mismatched brackets.
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{{% foo >}}
|
|
|
|
*/
|
2023-07-14 00:24:37 +00:00
|
|
|
#define ERR_MISMATCHED_BRACKET 2
|
2023-07-13 00:58:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
sc_result parse(char *);
|