extract data in matched shortcodes

This commit is contained in:
Roberto Alsina 2023-07-11 10:22:18 -03:00
parent be56f4110e
commit e0b1c8b365

View File

@ -1,6 +1,7 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "bglibs/str.h" #include "bglibs/str.h"
#include "bglibs/gstack.h"
%%{ %%{
machine shortcode; machine shortcode;
@ -55,14 +56,20 @@
@ { @ {
str_cats(&output, "+++ opening\n"); str_cats(&output, "+++ opening\n");
str_copy(&open_name, &new_name); str_copy(&open_name, &new_name);
data_mark = p;
};
closing_shortcode = (start spc '/' name spc end)
> {
// Starting a shortcode, close data
str_copyb(&data, data_mark+1, p-data_mark-2);
}; };
closing_shortcode = (start spc '/' name spc end);
matched_shortcode = (shortcode any* closing_shortcode) matched_shortcode = (shortcode any* closing_shortcode)
@ { @ {
str_cats(&output, "--- closing\n"); str_cats(&output, "--- closing\n");
// TODO: Use a stack of open shortcodes rather than 1
printf("closing from %s to %s\n", open_name.s, new_name.s); printf("closing from %s to %s\n", open_name.s, new_name.s);
printf("data: %s\n", data.s);
if (str_cmp(&open_name, 0, &new_name, 0) != 0) { if (str_cmp(&open_name, 0, &new_name, 0) != 0) {
// Closing the wrong code // Closing the wrong code
// TODO error reporting // TODO error reporting
@ -81,25 +88,32 @@ str parse(char *input) {
char *p = input; char *p = input;
char *pe = p + strlen(input); char *pe = p + strlen(input);
str open_name, new_name, output; str open_name, new_name, output, data;
str_init(&open_name); str_init(&open_name);
str_init(&new_name); str_init(&new_name);
str_init(&output); str_init(&output);
str_init(&data);
char *mark = p;
char *data_mark = p;
char *mark = 0;
%% write init; %% write init;
%% write exec; %% write exec;
return output; return output;
} }
struct shortcode {
str name;
str args;
str content;
};
int main(int argc, char **argv) { int main(int argc, char **argv) {
str output = parse(" str output = parse("
sarasa sarasa
{{< o1 arg1 >}} {{< o1 arg1 >}}
stuff stuff
{{< c1 arg2 >}} {{< c1 arg2 >}}foobar{{% /c1%}}
foobar
{{% /c1%}}
{{< o2 arg1 >}} {{< o2 arg1 >}}
{{< o3 arg1 >}} {{< o3 arg1 >}}
more stuff more stuff