%%
static int bracelevel, didadef, indented_code, checking_used;
+ static int doing_rule_action = false;
int doing_codeblock = false;
int i;
<SECT2>{WS}"%{" {
bracelevel = 1;
BEGIN(PERCENT_BRACE_ACTION);
- return '\n';
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+ return '\n';
+ }
}
<SECT2>{WS}"|".*{NL} continued_action = true; ++linenum; return '\n';
bracelevel = 0;
continued_action = false;
BEGIN(ACTION);
- return '\n';
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+ return '\n';
+ }
}
<SECT2>{OPTWS}{NL} {
continued_action = false;
BEGIN(ACTION);
unput( '\n' ); /* so <ACTION> sees it */
- return '\n';
+
+ if ( in_rule )
+ {
+ doing_rule_action = true;
+ in_rule = false;
+ return '\n';
+ }
}
<SECT2>"<<EOF>>" return EOF_OP;
if ( bracelevel == 0 ||
(doing_codeblock && indented_code) )
{
- if ( ! doing_codeblock )
+ if ( doing_rule_action )
add_action( "\tYY_BREAK\n" );
-
- doing_codeblock = false;
+
+ doing_rule_action = doing_codeblock = false;
BEGIN(SECT2);
}
}
ACTION_ECHO;
if ( bracelevel == 0 )
{
- add_action( "\tYY_BREAK\n" );
+ if ( doing_rule_action )
+ add_action( "\tYY_BREAK\n" );
+
+ doing_rule_action = false;
BEGIN(SECT2);
}
}