} while (0)
/* Nick */
-static void markup_action(void);
+static void markup_action(const char *text);
static void markup_option(const char *name, int sense);
doing_codeblock = true;
bracelevel = 1;
BEGIN(PERCENT_BRACE_ACTION);
- piece_append("<PLex_Section2_Rule_Action>");
+ int i = strlen(yytext) - 2;
+ piece_esc(yytext, i);
+ yytext += i;
+ piece_append("<PLex_Section1Or2_CodeBlock>");
+ flush();
+ piece_append("<PLex_Text>");
}
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 553 "scan.l"
+#line 558 "scan.l"
{
/* Allow "<" to appear in (?x) patterns. */
if (!sf_skip_ws())
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 559 "scan.l"
+#line 564 "scan.l"
return '^';
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 560 "scan.l"
+#line 565 "scan.l"
BEGIN(QUOTE); return '"';
YY_BREAK
case 142:
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 561 "scan.l"
+#line 566 "scan.l"
{
BEGIN(NUM);
if ( lex_compat || posix_compat )
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 568 "scan.l"
+#line 573 "scan.l"
return '$';
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 570 "scan.l"
+#line 575 "scan.l"
{
bracelevel = 1;
BEGIN(PERCENT_BRACE_ACTION);
+ int i = strlen(yytext) - 2;
+ piece_esc(yytext, i);
+ yytext += i;
piece_append("<PLex_Section2_Rule_Action>");
if ( in_rule )
return '\n';
#endif
}
+#if 1 /* don't think this can really happen */
+ abort();
+#else
flush();
piece_append("<PLex_Text>");
+#endif
}
YY_BREAK
case 145:
/* rule 145 can match eol */
YY_RULE_SETUP
-#line 592 "scan.l"
+#line 604 "scan.l"
{
if (sf_skip_ws()){
/* We're in the middle of a (?x: ) pattern. */
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 607 "scan.l"
+#line 619 "scan.l"
{
if (sf_skip_ws()){
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 621 "scan.l"
+#line 633 "scan.l"
/* allow indented rules */ ;
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 623 "scan.l"
+#line 635 "scan.l"
{
if (sf_skip_ws()){
/* We're in the middle of a (?x: ) pattern. */
case 149:
/* rule 149 can match eol */
YY_RULE_SETUP
-#line 653 "scan.l"
+#line 665 "scan.l"
{
if (sf_skip_ws()){
/* We're in the middle of a (?x: ) pattern. */
}
YY_BREAK
case 150:
-#line 686 "scan.l"
+#line 698 "scan.l"
case 151:
YY_RULE_SETUP
-#line 686 "scan.l"
+#line 698 "scan.l"
return EOF_OP;
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 688 "scan.l"
+#line 700 "scan.l"
{
sectnum = 3;
BEGIN(no_section3_escape ? SECT3_NOESCAPE : SECT3);
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 705 "scan.l"
+#line 717 "scan.l"
{
int cclval;
YY_BREAK
case 154:
YY_RULE_SETUP
-#line 751 "scan.l"
+#line 763 "scan.l"
return CCL_OP_DIFF;
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 752 "scan.l"
+#line 764 "scan.l"
return CCL_OP_UNION;
YY_BREAK
/* Check for :space: at the end of the rule so we don't
case 156:
/* rule 156 can match eol */
YY_RULE_SETUP
-#line 759 "scan.l"
+#line 771 "scan.l"
{
char *nmdefptr;
int end_is_ws, end_ch;
YY_BREAK
case 157:
YY_RULE_SETUP
-#line 811 "scan.l"
+#line 823 "scan.l"
{
if (sf_skip_ws())
yy_push_state(COMMENT_DISCARD);
YY_BREAK
case 158:
YY_RULE_SETUP
-#line 821 "scan.l"
+#line 833 "scan.l"
{
if (lex_compat || posix_compat){
/* Push back the "?#" and treat it like a normal parens. */
YY_BREAK
case 159:
YY_RULE_SETUP
-#line 831 "scan.l"
+#line 843 "scan.l"
{
sf_push();
if (lex_compat || posix_compat)
YY_BREAK
case 160:
YY_RULE_SETUP
-#line 840 "scan.l"
+#line 852 "scan.l"
sf_push(); return '(';
YY_BREAK
case 161:
YY_RULE_SETUP
-#line 841 "scan.l"
+#line 853 "scan.l"
{
if (_sf_top_ix > 0) {
sf_pop();
YY_BREAK
case 162:
YY_RULE_SETUP
-#line 849 "scan.l"
+#line 861 "scan.l"
return (unsigned char) yytext[0];
YY_BREAK
case 163:
YY_RULE_SETUP
-#line 850 "scan.l"
+#line 862 "scan.l"
RETURNCHAR;
YY_BREAK
/* Nick added this rule for consistency with rest of scanner */
case YY_STATE_EOF(SECT2):
-#line 853 "scan.l"
+#line 865 "scan.l"
{
sectnum = 0;
#if 1
case 164:
/* rule 164 can match eol */
YY_RULE_SETUP
-#line 868 "scan.l"
+#line 880 "scan.l"
++linenum; /* Allow blank lines & continuations */
YY_BREAK
case 165:
YY_RULE_SETUP
-#line 869 "scan.l"
+#line 881 "scan.l"
return (unsigned char) yytext[0];
YY_BREAK
case 166:
YY_RULE_SETUP
-#line 870 "scan.l"
+#line 882 "scan.l"
BEGIN(SECT2); return '>';
YY_BREAK
case 167:
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 871 "scan.l"
+#line 883 "scan.l"
BEGIN(CARETISBOL); return '>';
YY_BREAK
case 168:
YY_RULE_SETUP
-#line 872 "scan.l"
+#line 884 "scan.l"
RETURNNAME;
YY_BREAK
case 169:
YY_RULE_SETUP
-#line 873 "scan.l"
+#line 885 "scan.l"
{
format_synerr( _( "bad <start condition>: %s" ),
yytext );
case 170:
YY_RULE_SETUP
-#line 879 "scan.l"
+#line 891 "scan.l"
BEGIN(SECT2); return '^';
YY_BREAK
case 171:
YY_RULE_SETUP
-#line 883 "scan.l"
+#line 895 "scan.l"
RETURNCHAR;
YY_BREAK
case 172:
YY_RULE_SETUP
-#line 884 "scan.l"
+#line 896 "scan.l"
BEGIN(SECT2); return '"';
YY_BREAK
case 173:
/* rule 173 can match eol */
YY_RULE_SETUP
-#line 886 "scan.l"
+#line 898 "scan.l"
{
synerr( _( "missing quote" ) );
BEGIN(SECT2);
case 174:
YY_RULE_SETUP
-#line 895 "scan.l"
+#line 907 "scan.l"
BEGIN(SECT2);
YY_BREAK
case 175:
YY_RULE_SETUP
-#line 896 "scan.l"
+#line 908 "scan.l"
BEGIN(GROUP_MINUS_PARAMS);
YY_BREAK
case 176:
YY_RULE_SETUP
-#line 897 "scan.l"
+#line 909 "scan.l"
sf_set_case_ins(1);
YY_BREAK
case 177:
YY_RULE_SETUP
-#line 898 "scan.l"
+#line 910 "scan.l"
sf_set_dot_all(1);
YY_BREAK
case 178:
YY_RULE_SETUP
-#line 899 "scan.l"
+#line 911 "scan.l"
sf_set_skip_ws(1);
YY_BREAK
case 179:
YY_RULE_SETUP
-#line 902 "scan.l"
+#line 914 "scan.l"
BEGIN(SECT2);
YY_BREAK
case 180:
YY_RULE_SETUP
-#line 903 "scan.l"
+#line 915 "scan.l"
sf_set_case_ins(0);
YY_BREAK
case 181:
YY_RULE_SETUP
-#line 904 "scan.l"
+#line 916 "scan.l"
sf_set_dot_all(0);
YY_BREAK
case 182:
YY_RULE_SETUP
-#line 905 "scan.l"
+#line 917 "scan.l"
sf_set_skip_ws(0);
YY_BREAK
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 909 "scan.l"
+#line 921 "scan.l"
BEGIN(CCL); return '^';
YY_BREAK
case 184:
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 910 "scan.l"
+#line 922 "scan.l"
return '^';
YY_BREAK
case 185:
YY_RULE_SETUP
-#line 911 "scan.l"
+#line 923 "scan.l"
BEGIN(CCL); RETURNCHAR;
YY_BREAK
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 915 "scan.l"
+#line 927 "scan.l"
return '-';
YY_BREAK
case 187:
YY_RULE_SETUP
-#line 916 "scan.l"
+#line 928 "scan.l"
RETURNCHAR;
YY_BREAK
case 188:
YY_RULE_SETUP
-#line 917 "scan.l"
+#line 929 "scan.l"
BEGIN(SECT2); return ']';
YY_BREAK
case 189:
/* rule 189 can match eol */
YY_RULE_SETUP
-#line 918 "scan.l"
+#line 930 "scan.l"
{
synerr( _( "bad character class" ) );
BEGIN(SECT2);
case 190:
YY_RULE_SETUP
-#line 926 "scan.l"
+#line 938 "scan.l"
BEGIN(CCL); return CCE_ALNUM;
YY_BREAK
case 191:
YY_RULE_SETUP
-#line 927 "scan.l"
+#line 939 "scan.l"
BEGIN(CCL); return CCE_ALPHA;
YY_BREAK
case 192:
YY_RULE_SETUP
-#line 928 "scan.l"
+#line 940 "scan.l"
BEGIN(CCL); return CCE_BLANK;
YY_BREAK
case 193:
YY_RULE_SETUP
-#line 929 "scan.l"
+#line 941 "scan.l"
BEGIN(CCL); return CCE_CNTRL;
YY_BREAK
case 194:
YY_RULE_SETUP
-#line 930 "scan.l"
+#line 942 "scan.l"
BEGIN(CCL); return CCE_DIGIT;
YY_BREAK
case 195:
YY_RULE_SETUP
-#line 931 "scan.l"
+#line 943 "scan.l"
BEGIN(CCL); return CCE_GRAPH;
YY_BREAK
case 196:
YY_RULE_SETUP
-#line 932 "scan.l"
+#line 944 "scan.l"
BEGIN(CCL); return CCE_LOWER;
YY_BREAK
case 197:
YY_RULE_SETUP
-#line 933 "scan.l"
+#line 945 "scan.l"
BEGIN(CCL); return CCE_PRINT;
YY_BREAK
case 198:
YY_RULE_SETUP
-#line 934 "scan.l"
+#line 946 "scan.l"
BEGIN(CCL); return CCE_PUNCT;
YY_BREAK
case 199:
YY_RULE_SETUP
-#line 935 "scan.l"
+#line 947 "scan.l"
BEGIN(CCL); return CCE_SPACE;
YY_BREAK
case 200:
YY_RULE_SETUP
-#line 936 "scan.l"
+#line 948 "scan.l"
BEGIN(CCL); return CCE_UPPER;
YY_BREAK
case 201:
YY_RULE_SETUP
-#line 937 "scan.l"
+#line 949 "scan.l"
BEGIN(CCL); return CCE_XDIGIT;
YY_BREAK
case 202:
YY_RULE_SETUP
-#line 939 "scan.l"
+#line 951 "scan.l"
BEGIN(CCL); return CCE_NEG_ALNUM;
YY_BREAK
case 203:
YY_RULE_SETUP
-#line 940 "scan.l"
+#line 952 "scan.l"
BEGIN(CCL); return CCE_NEG_ALPHA;
YY_BREAK
case 204:
YY_RULE_SETUP
-#line 941 "scan.l"
+#line 953 "scan.l"
BEGIN(CCL); return CCE_NEG_BLANK;
YY_BREAK
case 205:
YY_RULE_SETUP
-#line 942 "scan.l"
+#line 954 "scan.l"
BEGIN(CCL); return CCE_NEG_CNTRL;
YY_BREAK
case 206:
YY_RULE_SETUP
-#line 943 "scan.l"
+#line 955 "scan.l"
BEGIN(CCL); return CCE_NEG_DIGIT;
YY_BREAK
case 207:
YY_RULE_SETUP
-#line 944 "scan.l"
+#line 956 "scan.l"
BEGIN(CCL); return CCE_NEG_GRAPH;
YY_BREAK
case 208:
YY_RULE_SETUP
-#line 945 "scan.l"
+#line 957 "scan.l"
BEGIN(CCL); return CCE_NEG_LOWER;
YY_BREAK
case 209:
YY_RULE_SETUP
-#line 946 "scan.l"
+#line 958 "scan.l"
BEGIN(CCL); return CCE_NEG_PRINT;
YY_BREAK
case 210:
YY_RULE_SETUP
-#line 947 "scan.l"
+#line 959 "scan.l"
BEGIN(CCL); return CCE_NEG_PUNCT;
YY_BREAK
case 211:
YY_RULE_SETUP
-#line 948 "scan.l"
+#line 960 "scan.l"
BEGIN(CCL); return CCE_NEG_SPACE;
YY_BREAK
case 212:
YY_RULE_SETUP
-#line 949 "scan.l"
+#line 961 "scan.l"
BEGIN(CCL); return CCE_NEG_UPPER;
YY_BREAK
case 213:
YY_RULE_SETUP
-#line 950 "scan.l"
+#line 962 "scan.l"
BEGIN(CCL); return CCE_NEG_XDIGIT;
YY_BREAK
case 214:
YY_RULE_SETUP
-#line 951 "scan.l"
+#line 963 "scan.l"
{
format_synerr(
_( "bad character class expression: %s" ),
case 215:
YY_RULE_SETUP
-#line 960 "scan.l"
+#line 972 "scan.l"
{
yylval = myctoi( yytext );
return NUMBER;
YY_BREAK
case 216:
YY_RULE_SETUP
-#line 965 "scan.l"
+#line 977 "scan.l"
return ',';
YY_BREAK
case 217:
YY_RULE_SETUP
-#line 966 "scan.l"
+#line 978 "scan.l"
{
BEGIN(SECT2);
if ( lex_compat || posix_compat )
YY_BREAK
case 218:
YY_RULE_SETUP
-#line 974 "scan.l"
+#line 986 "scan.l"
{
synerr( _( "bad character inside {}'s" ) );
BEGIN(SECT2);
case 219:
/* rule 219 can match eol */
YY_RULE_SETUP
-#line 980 "scan.l"
+#line 992 "scan.l"
{
synerr( _( "missing }" ) );
BEGIN(SECT2);
case 220:
YY_RULE_SETUP
-#line 990 "scan.l"
+#line 1002 "scan.l"
bracelevel = 0; piece_append("</PLex_Text>");
YY_BREAK
case 221:
YY_RULE_SETUP
-#line 992 "scan.l"
+#line 1004 "scan.l"
ACTION_ECHO; yy_push_state( CODE_COMMENT );
YY_BREAK
case 222:
YY_RULE_SETUP
-#line 995 "scan.l"
+#line 1007 "scan.l"
{
ACTION_ECHO;
CHECK_REJECT(yytext);
YY_BREAK
case 223:
YY_RULE_SETUP
-#line 999 "scan.l"
+#line 1011 "scan.l"
{
ACTION_ECHO;
CHECK_YYMORE(yytext);
case 224:
YY_RULE_SETUP
-#line 1005 "scan.l"
+#line 1017 "scan.l"
ACTION_ECHO;
YY_BREAK
case 225:
/* rule 225 can match eol */
YY_RULE_SETUP
-#line 1006 "scan.l"
+#line 1018 "scan.l"
{
++linenum;
ACTION_ECHO;
if ( doing_rule_action )
add_action( "\tYY_BREAK]""]\n" );
+ flush();
+ if (doing_codeblock)
+ piece_append("</PLex_Section1Or2_CodeBlock>");
+ else
+ markup_action("</PLex_Section2_Rule_Action>");
doing_rule_action = doing_codeblock = false;
BEGIN(SECT2);
- flush();
- piece_append("</PLex_Section2_Rule_Action>");
}
}
YY_BREAK
case 226:
YY_RULE_SETUP
-#line 1024 "scan.l"
+#line 1039 "scan.l"
ACTION_ECHO; ++bracelevel;
YY_BREAK
case 227:
YY_RULE_SETUP
-#line 1025 "scan.l"
+#line 1040 "scan.l"
ACTION_ECHO; --bracelevel;
YY_BREAK
case 228:
YY_RULE_SETUP
-#line 1026 "scan.l"
+#line 1041 "scan.l"
ACTION_ECHO;
YY_BREAK
case 229:
YY_RULE_SETUP
-#line 1027 "scan.l"
+#line 1042 "scan.l"
ACTION_ECHO;
YY_BREAK
case 230:
YY_RULE_SETUP
-#line 1028 "scan.l"
+#line 1043 "scan.l"
ACTION_ECHO; /* character constant */
YY_BREAK
case 231:
YY_RULE_SETUP
-#line 1029 "scan.l"
+#line 1044 "scan.l"
ACTION_ECHO; BEGIN(CHARACTER_CONSTANT);
YY_BREAK
case 232:
YY_RULE_SETUP
-#line 1030 "scan.l"
+#line 1045 "scan.l"
ACTION_ECHO; BEGIN(ACTION_STRING);
YY_BREAK
case 233:
/* rule 233 can match eol */
YY_RULE_SETUP
-#line 1031 "scan.l"
+#line 1046 "scan.l"
{
++linenum;
ACTION_ECHO;
{
add_action( "\tYY_BREAK]""]\n" );
flush();
- markup_action();
+ markup_action("</PLex_Text></PLex_Section2_Rule_Action>");
}
doing_rule_action = false;
YY_BREAK
case 234:
YY_RULE_SETUP
-#line 1046 "scan.l"
+#line 1061 "scan.l"
ACTION_ECHO;
YY_BREAK
case 235:
YY_RULE_SETUP
-#line 1050 "scan.l"
+#line 1065 "scan.l"
ACTION_ECHO;
YY_BREAK
case 236:
YY_RULE_SETUP
-#line 1051 "scan.l"
+#line 1066 "scan.l"
ACTION_ECHO; BEGIN(ACTION);
YY_BREAK
case 237:
YY_RULE_SETUP
-#line 1054 "scan.l"
+#line 1069 "scan.l"
ACTION_ECHO;
YY_BREAK
case 238:
YY_RULE_SETUP
-#line 1055 "scan.l"
+#line 1070 "scan.l"
ACTION_ECHO; BEGIN(ACTION);
YY_BREAK
case 239:
/* rule 239 can match eol */
YY_RULE_SETUP
-#line 1058 "scan.l"
+#line 1073 "scan.l"
ACTION_ECHO;
YY_BREAK
case 240:
/* rule 240 can match eol */
YY_RULE_SETUP
-#line 1059 "scan.l"
+#line 1074 "scan.l"
ACTION_ECHO;
YY_BREAK
case 241:
/* rule 241 can match eol */
YY_RULE_SETUP
-#line 1060 "scan.l"
-++linenum; ACTION_ECHO; if (bracelevel <= 0) { BEGIN(SECT2); flush(); if (doing_rule_action) markup_action(); } else { BEGIN(ACTION); }
+#line 1075 "scan.l"
+++linenum; ACTION_ECHO; if (bracelevel <= 0) { BEGIN(SECT2); flush(); if (doing_rule_action) markup_action("</PLex_Text></PLex_Section2_Rule_Action>"); } else { BEGIN(ACTION); }
YY_BREAK
case 242:
YY_RULE_SETUP
-#line 1061 "scan.l"
+#line 1076 "scan.l"
ACTION_ECHO;
YY_BREAK
case YY_STATE_EOF(ACTION):
case YY_STATE_EOF(ACTION_STRING):
case YY_STATE_EOF(CHARACTER_CONSTANT):
-#line 1064 "scan.l"
+#line 1079 "scan.l"
{
synerr( _( "EOF encountered inside an action" ) );
yyterminate();
case YY_STATE_EOF(EXTENDED_COMMENT):
case YY_STATE_EOF(GROUP_WITH_PARAMS):
case YY_STATE_EOF(GROUP_MINUS_PARAMS):
-#line 1069 "scan.l"
+#line 1084 "scan.l"
{
synerr( _( "EOF encountered inside pattern" ) );
yyterminate();
YY_BREAK
case 243:
YY_RULE_SETUP
-#line 1074 "scan.l"
+#line 1089 "scan.l"
{
yylval = myesc( (unsigned char *) yytext );
case 244:
YY_RULE_SETUP
-#line 1084 "scan.l"
+#line 1099 "scan.l"
fputs(escaped_qstart, yyout);
YY_BREAK
case 245:
YY_RULE_SETUP
-#line 1085 "scan.l"
+#line 1100 "scan.l"
fputs(escaped_qend, yyout);
YY_BREAK
case 246:
/* rule 246 can match eol */
YY_RULE_SETUP
-#line 1086 "scan.l"
+#line 1101 "scan.l"
ECHO;
YY_BREAK
case 247:
YY_RULE_SETUP
-#line 1087 "scan.l"
+#line 1102 "scan.l"
ECHO;
YY_BREAK
case YY_STATE_EOF(SECT3):
-#line 1088 "scan.l"
+#line 1103 "scan.l"
{
sectnum = 0;
#if 1
case 248:
YY_RULE_SETUP
-#line 1101 "scan.l"
+#line 1116 "scan.l"
fprintf(yyout, "[""[%s]""]", escaped_qstart);
YY_BREAK
case 249:
YY_RULE_SETUP
-#line 1102 "scan.l"
+#line 1117 "scan.l"
fprintf(yyout, "[""[%s]""]", escaped_qend);
YY_BREAK
case 250:
/* rule 250 can match eol */
YY_RULE_SETUP
-#line 1103 "scan.l"
+#line 1118 "scan.l"
ECHO;
YY_BREAK
case 251:
YY_RULE_SETUP
-#line 1104 "scan.l"
+#line 1119 "scan.l"
ECHO;
YY_BREAK
case YY_STATE_EOF(SECT3_NOESCAPE):
-#line 1105 "scan.l"
+#line 1120 "scan.l"
{
sectnum = 0;
#if 1
case 252:
/* rule 252 can match eol */
YY_RULE_SETUP
-#line 1117 "scan.l"
+#line 1132 "scan.l"
format_synerr( _( "bad character: %s" ), yytext );
YY_BREAK
case 253:
YY_RULE_SETUP
-#line 1119 "scan.l"
+#line 1134 "scan.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 10035 "scan.c"
+#line 10050 "scan.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(CODEBLOCK):
case YY_STATE_EOF(PICKUPDEF):
#define YYTABLES_NAME "yytables"
-#line 1119 "scan.l"
+#line 1134 "scan.l"
}
/* Nick */
-static void markup_action(void) {
+static void markup_action(const char *text) {
/* append to last token text so it appears inside <PLex_Section2_Rule>..</PLex_Section2_Rule> */
/* a problem here is that Rule has already been reduced (marked up), */
/* because we returned a '\n' token when we detected start of action, */
if (i < 21 || strcmp(piece[piece0] + i - 21, "</PLex_Section2_Rule>") != 0)
abort();
piece[piece0][i - 21] = 0;
- piece_append("</PLex_Text></PLex_Section2_Rule_Action></PLex_Section2_Rule>");
+ piece_append(text);
+ piece_append("</PLex_Section2_Rule>");
piece_pack();
}
} while (0)
/* Nick */
-static void markup_action(void);
+static void markup_action(const char *text);
static void markup_option(const char *name, int sense);
%}
doing_codeblock = true;
bracelevel = 1;
BEGIN(PERCENT_BRACE_ACTION);
- piece_append("<PLex_Section2_Rule_Action>");
+ int i = strlen(yytext) - 2;
+ piece_esc(yytext, i);
+ yytext += i;
+ piece_append("<PLex_Section1Or2_CodeBlock>");
+ flush();
+ piece_append("<PLex_Text>");
}
^{OPTWS}"<" {
{WS}"%{" {
bracelevel = 1;
BEGIN(PERCENT_BRACE_ACTION);
+ int i = strlen(yytext) - 2;
+ piece_esc(yytext, i);
+ yytext += i;
piece_append("<PLex_Section2_Rule_Action>");
if ( in_rule )
return '\n';
#endif
}
+#if 1 /* don't think this can really happen */
+ abort();
+#else
flush();
piece_append("<PLex_Text>");
+#endif
}
{WS}"|".*{NL} {
if (sf_skip_ws()){
if ( doing_rule_action )
add_action( "\tYY_BREAK]""]\n" );
+ flush();
+ if (doing_codeblock)
+ piece_append("</PLex_Section1Or2_CodeBlock>");
+ else
+ markup_action("</PLex_Section2_Rule_Action>");
doing_rule_action = doing_codeblock = false;
BEGIN(SECT2);
- flush();
- piece_append("</PLex_Section2_Rule_Action>");
}
}
}
{
add_action( "\tYY_BREAK]""]\n" );
flush();
- markup_action();
+ markup_action("</PLex_Text></PLex_Section2_Rule_Action>");
}
doing_rule_action = false;
<ACTION_STRING,CHARACTER_CONSTANT>{
(\\\n)* ACTION_ECHO;
\\(\\\n)*. ACTION_ECHO;
- {NL} ++linenum; ACTION_ECHO; if (bracelevel <= 0) { BEGIN(SECT2); flush(); if (doing_rule_action) markup_action(); } else { BEGIN(ACTION); }
+ {NL} ++linenum; ACTION_ECHO; if (bracelevel <= 0) { BEGIN(SECT2); flush(); if (doing_rule_action) markup_action("</PLex_Text></PLex_Section2_Rule_Action>"); } else { BEGIN(ACTION); }
. ACTION_ECHO;
}
}
/* Nick */
-static void markup_action(void) {
+static void markup_action(const char *text) {
/* append to last token text so it appears inside <PLex_Section2_Rule>..</PLex_Section2_Rule> */
/* a problem here is that Rule has already been reduced (marked up), */
/* because we returned a '\n' token when we detected start of action, */
if (i < 21 || strcmp(piece[piece0] + i - 21, "</PLex_Section2_Rule>") != 0)
abort();
piece[piece0][i - 21] = 0;
- piece_append("</PLex_Text></PLex_Section2_Rule_Action></PLex_Section2_Rule>");
+ piece_append(text);
+ piece_append("</PLex_Section2_Rule>");
piece_pack();
}