Improve markup of %{ %} actions and codeblocks, fix some minor related bugs
authorNick Downing <downing.nick@gmail.com>
Sat, 21 Jul 2018 11:47:02 +0000 (21:47 +1000)
committerNick Downing <downing.nick@gmail.com>
Sat, 21 Jul 2018 11:48:18 +0000 (21:48 +1000)
src/main.c
src/scan.c
src/scan.l

index 6cd30a6..448b94b 100644 (file)
@@ -169,7 +169,7 @@ int flex_main (int argc, char *argv[])
 
 #if 1
  void piece_append(const char *str);
- piece_append("<RefList><PLex ref=\"0\"><PLex_Section1>");
+ piece_append("<root><PLex ref=\"0\"><PLex_Section1>");
 #endif
        readin ();
 
@@ -191,7 +191,7 @@ int flex_main (int argc, char *argv[])
        make_tables ();
 #if 1
  /* at this point flexscan() has been called to copy section 3 to the output */
- piece_append("</PLex></RefList>");
+ piece_append("</PLex></root>");
 
  extern char *piece[];
  extern int piece1;
index f713552..28e469f 100644 (file)
@@ -7784,7 +7784,7 @@ extern const char *escaped_qstart, *escaped_qend;
 } while (0)
 
 /* Nick */
-static void markup_action(void);
+static void markup_action(const char *text);
 static void markup_option(const char *name, int sense);
 
 
@@ -9102,12 +9102,17 @@ YY_RULE_SETUP
                        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())
@@ -9117,12 +9122,12 @@ YY_RULE_SETUP
        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:
@@ -9130,7 +9135,7 @@ 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 )
@@ -9145,15 +9150,18 @@ case 143:
 (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 )
@@ -9170,14 +9178,18 @@ YY_RULE_SETUP
                                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. */
@@ -9195,7 +9207,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 607 "scan.l"
+#line 619 "scan.l"
 {
 
                 if (sf_skip_ws()){
@@ -9212,12 +9224,12 @@ YY_RULE_SETUP
        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. */
@@ -9251,7 +9263,7 @@ YY_RULE_SETUP
 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. */
@@ -9285,15 +9297,15 @@ YY_RULE_SETUP
                        }
        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);
@@ -9313,7 +9325,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 153:
 YY_RULE_SETUP
-#line 705 "scan.l"
+#line 717 "scan.l"
 {
                        int cclval;
 
@@ -9363,12 +9375,12 @@ YY_RULE_SETUP
        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
@@ -9378,7 +9390,7 @@ return CCL_OP_UNION;
 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;
@@ -9433,7 +9445,7 @@ nmstr[yyleng - 2 - end_is_ws] = '\0';  /* chop trailing brace */
        YY_BREAK
 case 157:
 YY_RULE_SETUP
-#line 811 "scan.l"
+#line 823 "scan.l"
 {
                     if (sf_skip_ws())
                         yy_push_state(COMMENT_DISCARD);
@@ -9446,7 +9458,7 @@ YY_RULE_SETUP
        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. */
@@ -9460,7 +9472,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 159:
 YY_RULE_SETUP
-#line 831 "scan.l"
+#line 843 "scan.l"
 {
                     sf_push();
                     if (lex_compat || posix_compat)
@@ -9473,12 +9485,12 @@ YY_RULE_SETUP
        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();
@@ -9489,17 +9501,17 @@ YY_RULE_SETUP
        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
@@ -9517,17 +9529,17 @@ case YY_STATE_EOF(SECT2):
 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:
@@ -9535,17 +9547,17 @@ 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 );
@@ -9554,24 +9566,24 @@ YY_RULE_SETUP
 
 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);
@@ -9583,49 +9595,49 @@ YY_RULE_SETUP
 
 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
 
@@ -9635,7 +9647,7 @@ case 183:
 (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:
@@ -9643,12 +9655,12 @@ 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
 
@@ -9658,23 +9670,23 @@ case 186:
 (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);
@@ -9685,127 +9697,127 @@ YY_RULE_SETUP
 
 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" ),
@@ -9817,7 +9829,7 @@ YY_RULE_SETUP
 
 case 215:
 YY_RULE_SETUP
-#line 960 "scan.l"
+#line 972 "scan.l"
 {
                        yylval = myctoi( yytext );
                        return NUMBER;
@@ -9825,12 +9837,12 @@ YY_RULE_SETUP
        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 )
@@ -9841,7 +9853,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 218:
 YY_RULE_SETUP
-#line 974 "scan.l"
+#line 986 "scan.l"
 {
                        synerr( _( "bad character inside {}'s" ) );
                        BEGIN(SECT2);
@@ -9851,7 +9863,7 @@ YY_RULE_SETUP
 case 219:
 /* rule 219 can match eol */
 YY_RULE_SETUP
-#line 980 "scan.l"
+#line 992 "scan.l"
 {
                        synerr( _( "missing }" ) );
                        BEGIN(SECT2);
@@ -9863,18 +9875,18 @@ YY_RULE_SETUP
 
 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);
@@ -9882,7 +9894,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 223:
 YY_RULE_SETUP
-#line 999 "scan.l"
+#line 1011 "scan.l"
 {
             ACTION_ECHO;
             CHECK_YYMORE(yytext);
@@ -9891,13 +9903,13 @@ YY_RULE_SETUP
 
 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;
@@ -9905,10 +9917,13 @@ YY_RULE_SETUP
             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
@@ -9917,43 +9932,43 @@ YY_RULE_SETUP
 
 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;
@@ -9962,7 +9977,7 @@ YY_RULE_SETUP
  {
                       add_action( "\tYY_BREAK]""]\n" );
   flush();
-  markup_action();
+  markup_action("</PLex_Text></PLex_Section2_Rule_Action>");
  }
 
                    doing_rule_action = false;
@@ -9972,31 +9987,31 @@ YY_RULE_SETUP
        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
 
@@ -10004,24 +10019,24 @@ ACTION_ECHO; BEGIN(ACTION);
 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
 
@@ -10031,7 +10046,7 @@ case YY_STATE_EOF(COMMENT_DISCARD):
 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();
@@ -10040,7 +10055,7 @@ case YY_STATE_EOF(CHARACTER_CONSTANT):
 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();
@@ -10048,7 +10063,7 @@ case YY_STATE_EOF(GROUP_MINUS_PARAMS):
        YY_BREAK
 case 243:
 YY_RULE_SETUP
-#line 1074 "scan.l"
+#line 1089 "scan.l"
 {
                        yylval = myesc( (unsigned char *) yytext );
 
@@ -10061,27 +10076,27 @@ YY_RULE_SETUP
 
 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
@@ -10098,27 +10113,27 @@ case YY_STATE_EOF(SECT3):
 
 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
@@ -10135,15 +10150,15 @@ case YY_STATE_EOF(SECT3_NOESCAPE):
 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):
@@ -11191,7 +11206,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 1119 "scan.l"
+#line 1134 "scan.l"
 
 
 
@@ -11232,7 +11247,7 @@ void set_input_file( char *file )
        }
 
 /* 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, */
@@ -11241,7 +11256,8 @@ static void markup_action(void) {
  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();
 }
 
index 7b908c6..a6ebe72 100644 (file)
@@ -127,7 +127,7 @@ extern const char *escaped_qstart, *escaped_qend;
 } while (0)
 
 /* Nick */
-static void markup_action(void);
+static void markup_action(const char *text);
 static void markup_option(const char *name, int sense);
 
 %}
@@ -547,7 +547,12 @@ M4QEND      "]""]"
                        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}"<"         {
@@ -570,6 +575,9 @@ M4QEND      "]""]"
        {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 )
@@ -586,8 +594,12 @@ M4QEND      "]""]"
                                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()){
@@ -1010,10 +1022,13 @@ nmstr[yyleng - 2 - end_is_ws] = '\0';  /* chop trailing brace */
             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>");
         }
     }
 }
@@ -1036,7 +1051,7 @@ nmstr[yyleng - 2 - end_is_ws] = '\0';  /* chop trailing brace */
  {
                       add_action( "\tYY_BREAK]""]\n" );
   flush();
-  markup_action();
+  markup_action("</PLex_Text></PLex_Section2_Rule_Action>");
  }
 
                    doing_rule_action = false;
@@ -1057,7 +1072,7 @@ nmstr[yyleng - 2 - end_is_ws] = '\0';  /* chop trailing brace */
 <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;
 }
 
@@ -1155,7 +1170,7 @@ void set_input_file( char *file )
        }
 
 /* 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, */
@@ -1164,7 +1179,8 @@ static void markup_action(void) {
  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();
 }