55%header {
66#include "data.h"
77
8- #define PCC_AST_MANAGER_CUSTOM_DATA_DEFINED
9- typedef mdd_data_t pcc_ast_manager_custom_data_t;
8+ // Do not capture the string for each node by default.
9+ #define MDDI_AST_NODE_STRING_CAPTURING_DISABLED
1010
11- #define PCC_AST_NODE_CUSTOM_DATA_DEFINED
12- typedef mdd_node_data_t pcc_ast_node_custom_data_t;
11+ #define MDDI_AST_MANAGER_CUSTOM_DATA_DEFINED
12+ typedef mdd_data_t mddi_ast_manager_custom_data_t;
13+
14+ #define MDDI_AST_NODE_CUSTOM_DATA_DEFINED
15+ typedef mdd_node_data_t mddi_ast_node_custom_data_t;
1316}
1417
1518%import "code/pcc_ast.peg"
1619
1720# Output data type as `$$`.
18- %value "pcc_ast_node_t *"
21+ %value "mddi_ast_node_t *"
1922# User-defined data type passed to `pcc_create`.
20- %auxil "pcc_ast_manager_t *"
23+ %auxil "mddi_ast_manager_t *"
2124
2225# Copied verbatim to the C source file before the generated parser implementation code.
2326%source {
2427#include <stdio.h>
2528#include <stdlib.h>
29+ #include <assert.h>
2630
2731#include "utils.h"
2832
@@ -204,7 +208,7 @@ mark <- '==' !whitespace
204208 {
205209 mdd_node_append_child($$, e);
206210 }
207- )+ &{ look_back_nonspace(ctx) } '=='
211+ )+ &{ @@ = look_back_nonspace(pcc_ctx); } '=='
208212 {
209213 mdd_node_data_set_range(&$$->custom, $0s, $0e);
210214 }
@@ -227,9 +231,9 @@ inline_equation <- (inline_equation_single / inline_equation_multiple)
227231 $$ = mdd_node_create_0(MDD_NODE_TYPE_INLINE_EQUATION, $0s, $0e);
228232 }
229233
230- inline_equation_single <- '$' &{ inline_equation_pre(ctx) } !'$' !'\\' nonspace_char '$' ![0-9]
234+ inline_equation_single <- '$' &{ @@ = inline_equation_pre(pcc_ctx); } !'$' !'\\' nonspace_char '$' ![0-9]
231235
232- inline_equation_multiple <- '$' &{ inline_equation_pre(ctx) } !'$' nonspace_char (!'$' !new_line .)+ '$' &{ inline_equation_post(ctx) } ![0-9]
236+ inline_equation_multiple <- '$' &{ @@ = inline_equation_pre(pcc_ctx); } !'$' nonspace_char (!'$' !new_line .)+ '$' &{ @@ = inline_equation_post(pcc_ctx); } ![0-9]
233237
234238ticks1 <- '`' !'`'
235239ticks2 <- '``' !'`'
@@ -340,7 +344,7 @@ auto_link <-
340344image <- '!' (e:explicit_link / e:explicit_link_size / e:reference_link)
341345 {
342346 assert(e);
343- assert(e->type == PCC_AST_NODE_TYPE_VARIADIC );
347+ assert(e->type == MDDI_AST_NODE_TYPE_VARIADIC );
344348 $$ = e;
345349 mdd_node_data_assign(&$$->custom, MDD_NODE_TYPE_IMAGE, $0s, $0e);
346350 }
@@ -418,12 +422,14 @@ size <-
418422 / '=' < [0-9]+ > 'x'
419423 {
420424 $$ = mdd_node_create_0(MDD_NODE_TYPE_LINK_SIZE, $0s, $0e);
421- mdd_node_type_size_data_new(&$$->custom, atoi($3), -1);
425+ // FIXME
426+ mdd_node_type_size_data_new(&$$->custom, atoi(pcc_capture__3), -1);
422427 }
423428 / '=x' < [0-9]+ >
424429 {
425430 $$ = mdd_node_create_0(MDD_NODE_TYPE_LINK_SIZE, $0s, $0e);
426- mdd_node_type_size_data_new(&$$->custom, -1, atoi($4));
431+ // FIXME
432+ mdd_node_type_size_data_new(&$$->custom, -1, atoi(pcc_capture__4));
427433 }
428434
429435explicit_link <- l:label '(' space s:source space_newline t:title? space ')'
@@ -534,7 +540,7 @@ strike <- '~~' !whitespace
534540 {
535541 mdd_node_append_child($$, e);
536542 }
537- )+ &{ look_back_nonspace(ctx) } '~~'
543+ )+ &{ @@ = look_back_nonspace(pcc_ctx); } '~~'
538544 {
539545 mdd_node_data_set_range(&$$->custom, $0s, $0e);
540546 }
@@ -552,7 +558,7 @@ strong_star <- '**' !whitespace
552558 {
553559 mdd_node_append_child($$, e);
554560 }
555- )+ &{ look_back_nonspace(ctx) } '**'
561+ )+ &{ @@ = look_back_nonspace(pcc_ctx); } '**'
556562 {
557563 mdd_node_data_set_range(&$$->custom, $0s, $0e);
558564 }
@@ -565,7 +571,7 @@ strong_ul <- '__' !whitespace
565571 {
566572 mdd_node_append_child($$, e);
567573 }
568- )+ &{ look_back_nonspace(ctx) } '__'
574+ )+ &{ @@ = look_back_nonspace(pcc_ctx); } '__'
569575 {
570576 mdd_node_data_set_range(&$$->custom, $0s, $0e);
571577 }
@@ -583,7 +589,7 @@ emph_star <- '*' !whitespace
583589 {
584590 mdd_node_append_child($$, e);
585591 }
586- )+ &{ look_back_nonspace(ctx) } '*'
592+ )+ &{ @@ = look_back_nonspace(pcc_ctx); } '*'
587593 {
588594 mdd_node_data_set_range(&$$->custom, $0s, $0e);
589595 }
@@ -596,7 +602,7 @@ emph_ul <- '_' !whitespace
596602 {
597603 mdd_node_append_child($$, e);
598604 }
599- )+ &{ look_back_nonspace(ctx) } '_'
605+ )+ &{ @@ = look_back_nonspace(pcc_ctx); } '_'
600606 {
601607 mdd_node_data_set_range(&$$->custom, $0s, $0e);
602608 }
@@ -670,29 +676,29 @@ html_block_script <- html_block_script_open (!html_block_script_close .)* html_b
670676######
671677
672678%import "char/ascii_character_group.peg"
673- %import "unicode_general_category_fix .peg"
679+ %import "char/unicode_general_category .peg"
674680
675681# End of the rules. All codes below will be copied to the C source file.
676682%%
677683
678- void pcc_ast_manager_custom_data__initialize(pcc_ast_manager_custom_data_t *obj) {
684+ void mddi_ast_manager_custom_data__initialize(mddi_ast_manager_custom_data_t *obj) {
679685 mdd_data_initialize(obj);
680686}
681687
682- void pcc_ast_manager_custom_data__finalize(pcc_ast_manager_custom_data_t *obj) {
688+ void mddi_ast_manager_custom_data__finalize(mddi_ast_manager_custom_data_t *obj) {
683689 mdd_data_finalize(obj);
684690}
685691
686- void pcc_ast_node_custom_data__initialize(pcc_ast_node_custom_data_t *obj) {
692+ void mddi_ast_node_custom_data__initialize(mddi_ast_node_custom_data_t *obj) {
687693 mdd_node_data_initialize(obj);
688694}
689695
690- void pcc_ast_node_custom_data__finalize(pcc_ast_node_custom_data_t *obj) {
696+ void mddi_ast_node_custom_data__finalize(mddi_ast_node_custom_data_t *obj) {
691697 mdd_node_data_finalize(obj);
692698}
693699
694700int look_back_nonspace(mddi_context_t *ctx) {
695- const char *buf = ctx->buffer.buf + ctx->cur;
701+ const char *buf = ctx->buffer.p + ctx->cur;
696702 if (ctx->cur == 0) {
697703 return 1;
698704 }
@@ -704,7 +710,7 @@ int look_back_nonspace(mddi_context_t *ctx) {
704710}
705711
706712int inline_equation_pre(mddi_context_t *ctx) {
707- const char *buf = ctx->buffer.buf + ctx->cur;
713+ const char *buf = ctx->buffer.p + ctx->cur;
708714 assert(ctx->cur > 0);
709715 assert(*(buf - 1) == '$');
710716 if (ctx->cur < 2) {
@@ -718,7 +724,7 @@ int inline_equation_pre(mddi_context_t *ctx) {
718724}
719725
720726int inline_equation_post(mddi_context_t *ctx) {
721- const char *buf = ctx->buffer.buf + ctx->cur;
727+ const char *buf = ctx->buffer.p + ctx->cur;
722728 assert(ctx->cur >= 2);
723729 const unsigned char ch = *(buf - 2);
724730 if (ch != ' ' && ch != '\t' && ch != '\\') {
0 commit comments