InputBlockKind Scanner::echo(Output &out, std::string &block_name)
{
    const opt_t *opts = out.block().opts;
    code_alc_t &alc = out.allocator;
    const char *x, *y;

    if (is_eof()) return INPUT_END;

next:
    tok = cur;
loop:
    location = cur_loc();
    ptr = cur;

#line 55 "src/parse/lex.cc"
{
	unsigned char yych;
	unsigned int yyaccept = 0;
	static const unsigned char yybm[] = {
		  0, 128, 128, 128, 128, 128, 128, 128, 
		128, 160,   0, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		160, 128,   0, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		192, 192, 192, 192, 192, 192, 192, 192, 
		192, 192, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128,   0, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
		128, 128, 128, 128, 128, 128, 128, 128, 
	};
	if ((lim - cur) < 18) { if (!fill(18)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '\r') {
		if (yych <= '\t') {
			if (yych <= 0x00) goto yy1;
			if (yych <= 0x08) goto yy2;
			goto yy4;
		} else {
			if (yych <= '\n') goto yy5;
			if (yych <= '\f') goto yy2;
			goto yy7;
		}
	} else {
		if (yych <= '$') {
			if (yych == ' ') goto yy4;
			goto yy2;
		} else {
			if (yych <= '%') goto yy8;
			if (yych == '/') goto yy9;
			goto yy2;
		}
	}
yy1:
	++cur;
#line 273 "../src/parse/lex.re"
	{
        if (is_eof()) {
            out.wraw(tok, ptr);
            return INPUT_END;
        }
        goto loop;
    }
#line 125 "src/parse/lex.cc"
yy2:
	++cur;
yy3:
#line 293 "../src/parse/lex.re"
	{ goto loop; }
#line 131 "src/parse/lex.cc"
yy4:
	yyaccept = 0;
	yych = (unsigned char)*(mar = ++cur);
	if (yybm[0+yych] & 32) {
		goto yy10;
	}
	if (yych == '%') goto yy12;
	goto yy3;
yy5:
	yyaccept = 1;
	yych = (unsigned char)*(mar = ++cur);
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy13;
	} else {
		if (yych <= ' ') goto yy13;
		if (yych == '#') goto yy14;
	}
yy6:
#line 288 "../src/parse/lex.re"
	{
        next_line();
        goto loop;
    }
#line 155 "src/parse/lex.cc"
yy7:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy5;
	goto yy3;
yy8:
	yych = (unsigned char)*++cur;
	if (yych == '{') goto yy15;
	goto yy3;
yy9:
	yyaccept = 0;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '*') goto yy16;
	goto yy3;
yy10:
	++cur;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 32) {
		goto yy10;
	}
	if (yych == '%') goto yy12;
yy11:
	cur = mar;
	if (yyaccept <= 2) {
		if (yyaccept <= 1) {
			if (yyaccept == 0) {
				goto yy3;
			} else {
				goto yy6;
			}
		} else {
			goto yy155;
		}
	} else {
		if (yyaccept == 3) {
			goto yy157;
		} else {
			goto yy165;
		}
	}
yy12:
	yych = (unsigned char)*++cur;
	if (yych == '{') goto yy15;
	goto yy11;
yy13:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy13;
		goto yy11;
	} else {
		if (yych <= ' ') goto yy13;
		if (yych != '#') goto yy11;
	}
yy14:
	++cur;
	if ((lim - cur) < 5) { if (!fill(5)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy14;
		goto yy11;
	} else {
		if (yych <= ' ') goto yy14;
		if (yych == 'l') goto yy17;
		goto yy11;
	}
yy15:
	++cur;
#line 139 "../src/parse/lex.re"
	{
        if (pos != ptr) {
            // re2c does not parse user-defined code outside of re2c blocks, therefore it
            // can confuse `%{` in the middle of a string or a comment with a block start.
            // To avoid this recognize `%{` as a block start only on a new line, possibly
            // preceded by whitespaces.
            goto loop;
        }
        out.wraw(tok, ptr);
        block_name.clear();
        return INPUT_GLOBAL;
    }
#line 238 "src/parse/lex.cc"
yy16:
	yych = (unsigned char)*++cur;
	if (yych == '!') goto yy18;
	goto yy11;
yy17:
	yych = (unsigned char)*++cur;
	if (yych == 'i') goto yy19;
	goto yy11;
yy18:
	yych = (unsigned char)*++cur;
	switch (yych) {
		case 'c': goto yy20;
		case 'g': goto yy21;
		case 'h': goto yy22;
		case 'i': goto yy23;
		case 'l': goto yy24;
		case 'm': goto yy25;
		case 'r': goto yy26;
		case 's': goto yy27;
		case 't': goto yy28;
		case 'u': goto yy29;
		default: goto yy11;
	}
yy19:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy30;
	goto yy11;
yy20:
	yych = (unsigned char)*++cur;
	if (yych == 'o') goto yy31;
	goto yy11;
yy21:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy32;
	goto yy11;
yy22:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy33;
	goto yy11;
yy23:
	yych = (unsigned char)*++cur;
	if (yych == 'g') goto yy34;
	if (yych == 'n') goto yy35;
	goto yy11;
yy24:
	yych = (unsigned char)*++cur;
	if (yych == 'o') goto yy36;
	goto yy11;
yy25:
	yych = (unsigned char)*++cur;
	if (yych == 'a') goto yy37;
	if (yych == 't') goto yy38;
	goto yy11;
yy26:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy39;
	if (yych == 'u') goto yy40;
	goto yy11;
yy27:
	yych = (unsigned char)*++cur;
	if (yych == 't') goto yy41;
	goto yy11;
yy28:
	yych = (unsigned char)*++cur;
	if (yych == 'y') goto yy42;
	goto yy11;
yy29:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy43;
	goto yy11;
yy30:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy44;
	goto yy11;
yy31:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy45;
	goto yy11;
yy32:
	yych = (unsigned char)*++cur;
	if (yych == 't') goto yy46;
	goto yy11;
yy33:
	yych = (unsigned char)*++cur;
	if (yych == 'a') goto yy47;
	goto yy11;
yy34:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy48;
	goto yy11;
yy35:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy49;
	goto yy11;
yy36:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy50;
	goto yy11;
yy37:
	yych = (unsigned char)*++cur;
	if (yych == 'x') goto yy51;
	goto yy11;
yy38:
	yych = (unsigned char)*++cur;
	if (yych == 'a') goto yy52;
	goto yy11;
yy39:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy53;
	goto yy11;
yy40:
	yych = (unsigned char)*++cur;
	if (yych == 'l') goto yy54;
	goto yy11;
yy41:
	yych = (unsigned char)*++cur;
	if (yych == 'a') goto yy55;
	goto yy11;
yy42:
	yych = (unsigned char)*++cur;
	if (yych == 'p') goto yy56;
	goto yy11;
yy43:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy57;
	goto yy11;
yy44:
	yych = (unsigned char)*++cur;
	if (yych <= '0') goto yy59;
	if (yych <= '9') goto yy11;
	goto yy59;
yy45:
	yych = (unsigned char)*++cur;
	if (yych == 'd') goto yy60;
	goto yy11;
yy46:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy61;
	goto yy11;
yy47:
	yych = (unsigned char)*++cur;
	if (yych == 'd') goto yy62;
	goto yy11;
yy48:
	yych = (unsigned char)*++cur;
	if (yych == 'o') goto yy63;
	goto yy11;
yy49:
	yych = (unsigned char)*++cur;
	if (yych == 'l') goto yy64;
	goto yy11;
yy50:
	yych = (unsigned char)*++cur;
	if (yych == 'a') goto yy65;
	goto yy11;
yy51:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy66;
	if (yych == 'n') goto yy67;
	goto yy11;
yy52:
	yych = (unsigned char)*++cur;
	if (yych == 'g') goto yy68;
	goto yy11;
yy53:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy69;
	goto yy11;
yy54:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy70;
	goto yy11;
yy55:
	yych = (unsigned char)*++cur;
	if (yych == 'g') goto yy71;
	goto yy11;
yy56:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy72;
	goto yy11;
yy57:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy73;
	goto yy11;
yy58:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
yy59:
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy58;
		goto yy11;
	} else {
		if (yych <= ' ') goto yy58;
		if (yych <= '0') goto yy11;
		if (yych <= '9') {
			yyt1 = cur;
			goto yy74;
		}
		goto yy11;
	}
yy60:
	yych = (unsigned char)*++cur;
	if (yych == 'i') goto yy75;
	goto yy11;
yy61:
	yych = (unsigned char)*++cur;
	if (yych == 't') goto yy76;
	goto yy11;
yy62:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy77;
	goto yy11;
yy63:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy78;
	goto yy11;
yy64:
	yych = (unsigned char)*++cur;
	if (yych == 'u') goto yy79;
	goto yy11;
yy65:
	yych = (unsigned char)*++cur;
	if (yych == 'l') goto yy80;
	goto yy11;
yy66:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy81;
	goto yy11;
yy67:
	yych = (unsigned char)*++cur;
	if (yych == 'm') goto yy82;
	goto yy11;
yy68:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy83;
	goto yy11;
yy69:
	++cur;
#line 152 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        if (!lex_opt_name(block_name)) return INPUT_ERROR;
        if (block_name == "local") {
            msg.error(cur_loc(), "ill-formed local block, expected `local:re2c`");
            return INPUT_ERROR;
        }
        return INPUT_GLOBAL;
    }
#line 488 "src/parse/lex.cc"
yy70:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy84;
	goto yy11;
yy71:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy85;
	goto yy11;
yy72:
	yych = (unsigned char)*++cur;
	if (yych == 's') goto yy86;
	goto yy11;
yy73:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy87;
	goto yy11;
yy74:
	++cur;
	if ((lim - cur) < 2) { if (!fill(2)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 64) {
		goto yy74;
	}
	if (yych <= '\f') {
		if (yych <= 0x08) goto yy11;
		if (yych <= '\t') goto yy88;
		if (yych <= '\n') goto yy89;
		goto yy11;
	} else {
		if (yych <= '\r') goto yy90;
		if (yych == ' ') goto yy88;
		goto yy11;
	}
yy75:
	yych = (unsigned char)*++cur;
	if (yych == 't') goto yy91;
	goto yy11;
yy76:
	yych = (unsigned char)*++cur;
	if (yych == 'a') goto yy92;
	goto yy11;
yy77:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy93;
	goto yy11;
yy78:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy94;
	goto yy11;
yy79:
	yych = (unsigned char)*++cur;
	if (yych == 'd') goto yy95;
	goto yy11;
yy80:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy96;
	goto yy11;
yy81:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy97;
	goto yy11;
yy82:
	yych = (unsigned char)*++cur;
	if (yych == 'a') goto yy98;
	goto yy11;
yy83:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy99;
	goto yy11;
yy84:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy100;
	goto yy11;
yy85:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy101;
	goto yy11;
yy86:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy102;
	goto yy11;
yy87:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy103;
	goto yy11;
yy88:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy88;
		goto yy11;
	} else {
		if (yych <= ' ') goto yy88;
		if (yych == '"') goto yy104;
		goto yy11;
	}
yy89:
	++cur;
	cur = yyt1;
#line 281 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        out.wdelay_stmt(0, code_newline(alc));
        set_sourceline();
        goto next;
    }
#line 596 "src/parse/lex.cc"
yy90:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy89;
	goto yy11;
yy91:
	yych = (unsigned char)*++cur;
	if (yych == 'i') goto yy105;
	goto yy11;
yy92:
	yych = (unsigned char)*++cur;
	if (yych == 't') goto yy106;
	goto yy11;
yy93:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy107;
	goto yy11;
yy94:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy108;
	goto yy11;
yy95:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy109;
	goto yy11;
yy96:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy110;
	goto yy11;
yy97:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy111;
	goto yy11;
yy98:
	yych = (unsigned char)*++cur;
	if (yych == 't') goto yy112;
	goto yy11;
yy99:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy113;
	goto yy11;
yy100:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy114;
	goto yy11;
yy101:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy115;
	goto yy11;
yy102:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy116;
	goto yy11;
yy103:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy117;
	goto yy11;
yy104:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yybm[0+yych] & 128) {
		goto yy104;
	}
	if (yych <= '\n') goto yy11;
	if (yych <= '"') goto yy118;
	goto yy119;
yy105:
	yych = (unsigned char)*++cur;
	if (yych == 'o') goto yy120;
	goto yy11;
yy106:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy121;
	goto yy11;
yy107:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy122;
	goto yy11;
yy108:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy123;
	goto yy11;
yy109:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy124;
	goto yy11;
yy110:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy125;
	goto yy11;
yy111:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy126;
	goto yy11;
yy112:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy127;
	goto yy11;
yy113:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy128;
	goto yy11;
yy114:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy129;
	goto yy11;
yy115:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy130;
	goto yy11;
yy116:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy131;
	goto yy11;
yy117:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy132;
	goto yy11;
yy118:
	yych = (unsigned char)*++cur;
	if (yych == '\n') goto yy89;
	if (yych == '\r') goto yy90;
	goto yy11;
yy119:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x00) goto yy11;
	if (yych == '\n') goto yy11;
	goto yy104;
yy120:
	yych = (unsigned char)*++cur;
	if (yych == 'n') goto yy72;
	goto yy11;
yy121:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy133;
	goto yy11;
yy122:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy134;
	goto yy11;
yy123:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy135;
	goto yy11;
yy124:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy136;
	goto yy11;
yy125:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy137;
	goto yy11;
yy126:
	++cur;
#line 180 "../src/parse/lex.re"
	{
        if (!lex_block(out, CODE_MAXFILL, 0, DCONF_FORMAT)) return INPUT_ERROR;
        goto next;
    }
#line 758 "src/parse/lex.cc"
yy127:
	yych = (unsigned char)*++cur;
	if (yych == 'h') goto yy138;
	goto yy11;
yy128:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy139;
	goto yy11;
yy129:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy140;
	goto yy11;
yy130:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy141;
	goto yy11;
yy131:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy142;
	goto yy11;
yy132:
	++cur;
#line 174 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        if (!lex_opt_name(block_name)) return INPUT_ERROR;
        return INPUT_USE;
    }
#line 787 "src/parse/lex.cc"
yy133:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy143;
	goto yy11;
yy134:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy144;
	goto yy11;
yy135:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy145;
	goto yy11;
yy136:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy146;
	goto yy11;
yy137:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy147;
	goto yy11;
yy138:
	yych = (unsigned char)*++cur;
	if (yych == ':') goto yy148;
	goto yy11;
yy139:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy149;
	goto yy11;
yy140:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy150;
	goto yy11;
yy141:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy151;
	goto yy11;
yy142:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy152;
	goto yy11;
yy143:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy153;
	goto yy11;
yy144:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy154;
	goto yy11;
yy145:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy156;
	goto yy11;
yy146:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy158;
	goto yy11;
yy147:
	++cur;
#line 162 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        if (!lex_opt_name(block_name)) return INPUT_ERROR;
        return INPUT_LOCAL;
    }
#line 852 "src/parse/lex.cc"
yy148:
	yych = (unsigned char)*++cur;
	if (yych == 'r') goto yy159;
	goto yy11;
yy149:
	++cur;
#line 196 "../src/parse/lex.re"
	{
        uint32_t allow = DCONF_FORMAT | DCONF_SEPARATOR;
        if (!lex_block(out, CODE_MTAGS, 0, allow)) return INPUT_ERROR;
        goto next;
    }
#line 865 "src/parse/lex.cc"
yy150:
	++cur;
#line 168 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        if (!lex_opt_name(block_name)) return INPUT_ERROR;
        return INPUT_RULES;
    }
#line 874 "src/parse/lex.cc"
yy151:
	++cur;
#line 190 "../src/parse/lex.re"
	{
        uint32_t allow = DCONF_FORMAT | DCONF_SEPARATOR;
        if (!lex_block(out, CODE_STAGS, 0, allow)) return INPUT_ERROR;
        goto next;
    }
#line 883 "src/parse/lex.cc"
yy152:
	++cur;
#line 202 "../src/parse/lex.re"
	{
        out.cond_enum_autogen = false;
        out.warn_condition_order = false; // see note [condition order]
        uint32_t allow = DCONF_FORMAT | DCONF_SEPARATOR;
        if (!lex_block(out, CODE_COND_ENUM, opts->topIndent, allow)) return INPUT_ERROR;
        goto next;
    }
#line 894 "src/parse/lex.cc"
yy153:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy160;
	goto yy11;
yy154:
	yyaccept = 2;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == ':') goto yy161;
yy155:
#line 241 "../src/parse/lex.re"
	{
        msg.error(cur_loc(), "ill-formed header directive: expected"
            " `/*!header:re2c:<on|off>` followed by a space, a newline or the"
            " end of block `*" "/`");
        return INPUT_ERROR;
    }
#line 911 "src/parse/lex.cc"
yy156:
	yyaccept = 3;
	yych = (unsigned char)*(mar = ++cur);
	if (yych <= '\r') {
		if (yych <= 0x08) goto yy157;
		if (yych <= '\n') {
			yyt1 = cur;
			goto yy162;
		}
		if (yych >= '\r') {
			yyt1 = cur;
			goto yy162;
		}
	} else {
		if (yych <= ' ') {
			if (yych >= ' ') {
				yyt1 = cur;
				goto yy162;
			}
		} else {
			if (yych == '*') {
				yyt1 = cur;
				goto yy163;
			}
		}
	}
yy157:
#line 267 "../src/parse/lex.re"
	{
        msg.error(cur_loc(), "ill-formed start of `ignore:re2c` block: expected"
            " a space, a newline, or the end of block `*" "/`");
        return INPUT_ERROR;
    }
#line 945 "src/parse/lex.cc"
yy158:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy164;
	goto yy11;
yy159:
	yych = (unsigned char)*++cur;
	if (yych == 'e') goto yy166;
	goto yy11;
yy160:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy167;
	goto yy11;
yy161:
	yych = (unsigned char)*++cur;
	if (yych == 'o') goto yy168;
	goto yy11;
yy162:
	++cur;
	cur = yyt1;
#line 261 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        // allows arbitrary garbage before the end of the comment
        if (!lex_block_end(out, true)) return INPUT_ERROR;
        goto next;
    }
#line 972 "src/parse/lex.cc"
yy163:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy162;
	goto yy11;
yy164:
	yyaccept = 4;
	yych = (unsigned char)*(mar = ++cur);
	if (yych == '\t') goto yy169;
	if (yych == ' ') goto yy169;
yy165:
#line 255 "../src/parse/lex.re"
	{
        msg.error(cur_loc(), "ill-formed include directive: expected"
            " `/*!include:re2c \"<file>\" *" "/`");
        return INPUT_ERROR;
    }
#line 989 "src/parse/lex.cc"
yy166:
	yych = (unsigned char)*++cur;
	if (yych == '2') goto yy170;
	goto yy11;
yy167:
	++cur;
#line 210 "../src/parse/lex.re"
	{
        out.state_goto = true;
        if (!opts->fFlag) {
            msg.error(cur_loc(), "`getstate:re2c` without `-f --storable-state` option");
            return INPUT_ERROR;
        }
        if (opts->loop_switch) {
            msg.error(cur_loc(), "`getstate:re2c` is incompatible with the --loop-switch "
                "option, as it requires cross-block transitions that are unsupported "
                "without the `goto` statement");
            return INPUT_ERROR;
        }
        if (!lex_block(out, CODE_STATE_GOTO, opts->topIndent, 0)) return INPUT_ERROR;
        goto next;
    }
#line 1012 "src/parse/lex.cc"
yy168:
	yych = (unsigned char)*++cur;
	if (yych == 'f') goto yy171;
	if (yych == 'n') goto yy172;
	goto yy11;
yy169:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x1F) {
		if (yych == '\t') goto yy169;
		goto yy11;
	} else {
		if (yych <= ' ') goto yy169;
		if (yych == '"') {
			yyt1 = cur;
			goto yy173;
		}
		goto yy11;
	}
yy170:
	yych = (unsigned char)*++cur;
	if (yych == 'c') goto yy174;
	goto yy11;
yy171:
	yych = (unsigned char)*++cur;
	if (yych == 'f') goto yy175;
	goto yy11;
yy172:
	++cur;
#line 226 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        out.header_mode(true);
        out.need_header = true;
        if (!lex_block_end(out)) return INPUT_ERROR;
        goto next;
    }
#line 1051 "src/parse/lex.cc"
yy173:
	++cur;
	if ((lim - cur) < 3) { if (!fill(3)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= '!') {
		if (yych <= 0x00) goto yy11;
		if (yych == '\n') goto yy11;
		goto yy173;
	} else {
		if (yych <= '"') goto yy176;
		if (yych == '\\') goto yy177;
		goto yy173;
	}
yy174:
	++cur;
#line 185 "../src/parse/lex.re"
	{
        if (!lex_block(out, CODE_MAXNMATCH, 0, DCONF_FORMAT)) return INPUT_ERROR;
        goto next;
    }
#line 1072 "src/parse/lex.cc"
yy175:
	++cur;
#line 234 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        out.header_mode(false);
        out.wdelay_stmt(0, code_line_info_input(alc, cur_loc()));
        if (!lex_block_end(out)) return INPUT_ERROR;
        goto next;
    }
#line 1083 "src/parse/lex.cc"
yy176:
	yych = (unsigned char)*++cur;
	if (yych <= '\r') {
		if (yych <= 0x08) goto yy11;
		if (yych <= '\n') {
			yyt2 = cur;
			goto yy178;
		}
		if (yych <= '\f') goto yy11;
		yyt2 = cur;
		goto yy178;
	} else {
		if (yych <= ' ') {
			if (yych <= 0x1F) goto yy11;
			yyt2 = cur;
			goto yy178;
		} else {
			if (yych == '*') {
				yyt2 = cur;
				goto yy179;
			}
			goto yy11;
		}
	}
yy177:
	++cur;
	if (lim <= cur) { if (!fill(1)) { error("unexpected end of input"); exit(1); } }
	yych = (unsigned char)*cur;
	if (yych <= 0x00) goto yy11;
	if (yych == '\n') goto yy11;
	goto yy173;
yy178:
	++cur;
	x = yyt1;
	y = yyt2;
	cur = yyt2;
#line 248 "../src/parse/lex.re"
	{
        out.wraw(tok, ptr);
        if (!lex_block_end(out)) return INPUT_ERROR;
        include(getstr(x + 1, y - 1), ptr);
        out.wdelay_stmt(0, code_line_info_input(alc, cur_loc()));
        goto next;
    }
#line 1128 "src/parse/lex.cc"
yy179:
	yych = (unsigned char)*++cur;
	if (yych == '/') goto yy178;
	goto yy11;
}
#line 294 "../src/parse/lex.re"

}