diff --git a/spec/shortcodes_spec.cr b/spec/shortcodes_spec.cr index d3d859e..1f0b467 100644 --- a/spec/shortcodes_spec.cr +++ b/spec/shortcodes_spec.cr @@ -15,207 +15,198 @@ describe "Shortcodes" do result.shortcodes[0].name.should eq "shortcode" result.shortcodes[0].matching.should eq 0 result.shortcodes[0].args.size.should eq 0 - result.shortcodes[0].whole.should eq "{{% shortcode %}}" + result.shortcodes[0].whole.should eq "{{% shortcode %}}" end -# Ensure(parse, simple_shortcode) -# { -# char *input = "foobar {{% shortcode %}}blah"; -# result = parse(input); -# // Only 1 shortcode -# assert_that(result.sccount, is_equal_to(1)); -# // It's a simple one called shortcode, no args -# chunk_s(input, result.sc[0].name); -# assert_that(s.s, is_equal_to_string("shortcode")); -# assert_that(result.sc[0].matching, is_equal_to(0)); -# assert_that(result.sc[0].argcount, is_equal_to(0)); -# // The whole shortcode is the whole thing -# chunk_s(input, result.sc[0].whole); -# assert_that(s.s, is_equal_to_string("{{% shortcode %}}")); -# assert_that(result.errcount, is_equal_to(0)); -# } + it "should report mismatched tags" do + input = "foobar {{% shortcode %}}blah{{% /foo %}}" + result = parse(input) + result.shortcodes.size.should eq 1 + result.errors.size.should eq 1 + result.errors[0].code.should eq ERR_MISMATCHED_CLOSING_TAG + input[result.errors[0].position, 8].should eq "{{% /foo" + end + # Ensure(parse, mismatched_tags) + # { + # char *input = "foobar {{% shortcode %}}blah{{% /foo %}}"; + # result = parse(input); + # // One shortcode, one error + # assert_that(result.sccount, is_equal_to(1)); + # assert_that(result.errcount, is_equal_to(1)); + # assert_that(result.errors[0].code, is_equal_to(ERR_MISMATCHED_CLOSING_TAG)); + # str_copyb(&s, input + result.errors[0].position, 8); + # assert_that(s.s, is_equal_to_string("{{% /foo")); + # } -# Ensure(parse, mismatched_tags) -# { -# char *input = "foobar {{% shortcode %}}blah{{% /foo %}}"; -# result = parse(input); -# // One shortcode, one error -# assert_that(result.sccount, is_equal_to(1)); -# assert_that(result.errcount, is_equal_to(1)); -# assert_that(result.errors[0].code, is_equal_to(ERR_MISMATCHED_CLOSING_TAG)); -# str_copyb(&s, input + result.errors[0].position, 8); -# assert_that(s.s, is_equal_to_string("{{% /foo")); -# } + # Ensure(parse, mismatched_brackets) + # { + # char *input = "foobar {{% shortcode >}}blah"; + # result = parse(input); + # // No shortcodes, 1 error + # assert_that(result.sccount, is_equal_to(0)); + # assert_that(result.errcount, is_equal_to(1)); + # assert_that(result.errors[0].code, is_equal_to(ERR_MISMATCHED_BRACKET)); + # str_copyb(&s, input + result.errors[0].position, 3); + # assert_that(s.s, is_equal_to_string(">}}")); + # } -# Ensure(parse, mismatched_brackets) -# { -# char *input = "foobar {{% shortcode >}}blah"; -# result = parse(input); -# // No shortcodes, 1 error -# assert_that(result.sccount, is_equal_to(0)); -# assert_that(result.errcount, is_equal_to(1)); -# assert_that(result.errors[0].code, is_equal_to(ERR_MISMATCHED_BRACKET)); -# str_copyb(&s, input + result.errors[0].position, 3); -# assert_that(s.s, is_equal_to_string(">}}")); -# } + # Ensure(parse, mismatched_brackets_inside_data_are_ok) + # { + # char *input = "foobar {{% sc %}} >}}blah {{% /sc %}} "; + # result = parse(input); + # // 1 shortcode + # assert_that(result.sccount, is_equal_to(1)); + # chunk_s(input, result.sc[0].whole); + # assert_that(s.s, is_equal_to_string("{{% sc %}} >}}blah {{% /sc %}}")); + # chunk_s(input, result.sc[0].data); + # assert_that(s.s, is_equal_to_string(" >}}blah ")); + # assert_that(result.errcount, is_equal_to(0)); + # } -# Ensure(parse, mismatched_brackets_inside_data_are_ok) -# { -# char *input = "foobar {{% sc %}} >}}blah {{% /sc %}} "; -# result = parse(input); -# // 1 shortcode -# assert_that(result.sccount, is_equal_to(1)); -# chunk_s(input, result.sc[0].whole); -# assert_that(s.s, is_equal_to_string("{{% sc %}} >}}blah {{% /sc %}}")); -# chunk_s(input, result.sc[0].data); -# assert_that(s.s, is_equal_to_string(" >}}blah ")); -# assert_that(result.errcount, is_equal_to(0)); -# } + # Ensure(parse, mismatched_brackets_in_qval_are_ok) + # { + # char *input = "foobar {{% sc \">}}blah\" %}} {{% /sc %}}"; + # result = parse(input); + # // 1 shortcode + # assert_that(result.sccount, is_equal_to(1)); + # chunk_s(input, result.sc[0].whole); + # assert_that(s.s, is_equal_to_string("{{% sc \">}}blah\" %}} {{% /sc %}}")); + # chunk_s(input, result.sc[0].argvals[0]); + # assert_that(s.s, is_equal_to_string(">}}blah")); + # assert_that(result.errcount, is_equal_to(0)); + # } -# Ensure(parse, mismatched_brackets_in_qval_are_ok) -# { -# char *input = "foobar {{% sc \">}}blah\" %}} {{% /sc %}}"; -# result = parse(input); -# // 1 shortcode -# assert_that(result.sccount, is_equal_to(1)); -# chunk_s(input, result.sc[0].whole); -# assert_that(s.s, is_equal_to_string("{{% sc \">}}blah\" %}} {{% /sc %}}")); -# chunk_s(input, result.sc[0].argvals[0]); -# assert_that(s.s, is_equal_to_string(">}}blah")); -# assert_that(result.errcount, is_equal_to(0)); -# } + # Ensure(parse, inner_spaces_optional) + # { + # char *input = "foobar {{% shortcode%}}blah"; + # result = parse(input); + # // Only 1 shortcode + # assert_that(result.sccount, is_equal_to(1)); -# Ensure(parse, inner_spaces_optional) -# { -# char *input = "foobar {{% shortcode%}}blah"; -# result = parse(input); -# // Only 1 shortcode -# assert_that(result.sccount, is_equal_to(1)); + # // It's a simple one called shortcode, no args + # chunk_s(input, result.sc[0].name); + # assert_that(s.s, is_equal_to_string("shortcode")); + # assert_that(result.sc[0].matching, is_equal_to(0)); + # assert_that(result.sc[0].argcount, is_equal_to(0)); + # // The whole shortcode is the whole thing + # chunk_s(input, result.sc[0].whole); + # assert_that(s.s, is_equal_to_string("{{% shortcode%}}")); + # assert_that(result.errcount, is_equal_to(0)); + # } -# // It's a simple one called shortcode, no args -# chunk_s(input, result.sc[0].name); -# assert_that(s.s, is_equal_to_string("shortcode")); -# assert_that(result.sc[0].matching, is_equal_to(0)); -# assert_that(result.sc[0].argcount, is_equal_to(0)); -# // The whole shortcode is the whole thing -# chunk_s(input, result.sc[0].whole); -# assert_that(s.s, is_equal_to_string("{{% shortcode%}}")); -# assert_that(result.errcount, is_equal_to(0)); -# } + # Ensure(parse, name_can_be_path) + # { + # char *input = "foobar {{% shortcode/foo/bar %}}blah"; + # result = parse(input); + # // Only 1 shortcode + # assert_that(result.sccount, is_equal_to(1)); -# Ensure(parse, name_can_be_path) -# { -# char *input = "foobar {{% shortcode/foo/bar %}}blah"; -# result = parse(input); -# // Only 1 shortcode -# assert_that(result.sccount, is_equal_to(1)); + # // It's a simple one called shortcode, no args + # chunk_s(input, result.sc[0].name); + # assert_that(s.s, is_equal_to_string("shortcode/foo/bar")); + # assert_that(result.sc[0].matching, is_equal_to(0)); + # assert_that(result.sc[0].argcount, is_equal_to(0)); + # assert_that(result.errcount, is_equal_to(0)); + # } -# // It's a simple one called shortcode, no args -# chunk_s(input, result.sc[0].name); -# assert_that(s.s, is_equal_to_string("shortcode/foo/bar")); -# assert_that(result.sc[0].matching, is_equal_to(0)); -# assert_that(result.sc[0].argcount, is_equal_to(0)); -# assert_that(result.errcount, is_equal_to(0)); -# } + # Ensure(parse, multiple_shortcodes) + # { + # char *input = "foobar {{% shortcode %}}blah {{}}blahblah"; + # result = parse(input); + # // 2 shortcodes + # assert_that(result.sccount, is_equal_to(2)); -# Ensure(parse, multiple_shortcodes) -# { -# char *input = "foobar {{% shortcode %}}blah {{}}blahblah"; -# result = parse(input); -# // 2 shortcodes -# assert_that(result.sccount, is_equal_to(2)); + # // It's a simple one called shortcode, no args + # chunk_s(input, result.sc[0].name); + # assert_that(s.s, is_equal_to_string("shortcode")); + # assert_that(result.sc[0].matching, is_equal_to(0)); + # assert_that(result.sc[0].argcount, is_equal_to(0)); + # // The whole shortcode is the whole thing + # chunk_s(input, result.sc[0].whole); + # assert_that(s.s, is_equal_to_string("{{% shortcode %}}")); + # // It's a simple one called sc2, no args + # chunk_s(input, result.sc[1].name); + # assert_that(s.s, is_equal_to_string("sc2")); + # assert_that(result.sc[1].matching, is_equal_to(0)); + # assert_that(result.sc[1].argcount, is_equal_to(0)); + # // The whole shortcode is the whole thing + # chunk_s(input, result.sc[1].whole); + # assert_that(s.s, is_equal_to_string("{{}}")); + # assert_that(result.errcount, is_equal_to(0)); + # } -# // It's a simple one called shortcode, no args -# chunk_s(input, result.sc[0].name); -# assert_that(s.s, is_equal_to_string("shortcode")); -# assert_that(result.sc[0].matching, is_equal_to(0)); -# assert_that(result.sc[0].argcount, is_equal_to(0)); -# // The whole shortcode is the whole thing -# chunk_s(input, result.sc[0].whole); -# assert_that(s.s, is_equal_to_string("{{% shortcode %}}")); -# // It's a simple one called sc2, no args -# chunk_s(input, result.sc[1].name); -# assert_that(s.s, is_equal_to_string("sc2")); -# assert_that(result.sc[1].matching, is_equal_to(0)); -# assert_that(result.sc[1].argcount, is_equal_to(0)); -# // The whole shortcode is the whole thing -# chunk_s(input, result.sc[1].whole); -# assert_that(s.s, is_equal_to_string("{{}}")); -# assert_that(result.errcount, is_equal_to(0)); -# } + # Ensure(parse, matching_shortcode) + # { + # char *input = "blah {{% shortcode %}}foo bar{{% /shortcode %}} blah"; + # result = parse(input); -# Ensure(parse, matching_shortcode) -# { -# char *input = "blah {{% shortcode %}}foo bar{{% /shortcode %}} blah"; -# result = parse(input); + # // Only 1 shortcode + # assert_that(result.sccount, is_equal_to(1)); -# // Only 1 shortcode -# assert_that(result.sccount, is_equal_to(1)); + # // It's a matching one called shortcode, no args + # chunk_s(input, result.sc[0].name); + # assert_that(s.s, is_equal_to_string("shortcode")); + # assert_that(result.sc[0].matching, is_equal_to(1)); + # assert_that(result.sc[0].argcount, is_equal_to(0)); + # // data is the stuff between the shortcode tags + # chunk_s(input, result.sc[0].data); + # assert_that(s.s, is_equal_to_string("foo bar")); + # // The whole shortcode is the whole thing + # chunk_s(input, result.sc[0].whole); + # assert_that(s.s, is_equal_to_string("{{% shortcode %}}foo bar{{% /shortcode %}}")); + # assert_that(result.errcount, is_equal_to(0)); + # } -# // It's a matching one called shortcode, no args -# chunk_s(input, result.sc[0].name); -# assert_that(s.s, is_equal_to_string("shortcode")); -# assert_that(result.sc[0].matching, is_equal_to(1)); -# assert_that(result.sc[0].argcount, is_equal_to(0)); -# // data is the stuff between the shortcode tags -# chunk_s(input, result.sc[0].data); -# assert_that(s.s, is_equal_to_string("foo bar")); -# // The whole shortcode is the whole thing -# chunk_s(input, result.sc[0].whole); -# assert_that(s.s, is_equal_to_string("{{% shortcode %}}foo bar{{% /shortcode %}}")); -# assert_that(result.errcount, is_equal_to(0)); -# } + # Ensure(parse, shortcode_args) + # { + # char *input = "foobar {{% shortcode foo \"bar\" 42 bat=v1 baz=\"v2\" %}}blah"; + # result = parse(input); + # // Only 1 shortcode + # assert_that(result.sccount, is_equal_to(1)); -# Ensure(parse, shortcode_args) -# { -# char *input = "foobar {{% shortcode foo \"bar\" 42 bat=v1 baz=\"v2\" %}}blah"; -# result = parse(input); -# // Only 1 shortcode -# assert_that(result.sccount, is_equal_to(1)); + # // The whole shortcode is the whole thing + # chunk_s(input, result.sc[0].whole); + # assert_that(s.s, is_equal_to_string("{{% shortcode foo \"bar\" 42 bat=v1 baz=\"v2\" %}}")); -# // The whole shortcode is the whole thing -# chunk_s(input, result.sc[0].whole); -# assert_that(s.s, is_equal_to_string("{{% shortcode foo \"bar\" 42 bat=v1 baz=\"v2\" %}}")); + # // Name is shortcode + # chunk_s(input, result.sc[0].name); + # assert_that(s.s, is_equal_to_string("shortcode")); + # assert_that(result.sc[0].matching, is_equal_to(0)); -# // Name is shortcode -# chunk_s(input, result.sc[0].name); -# assert_that(s.s, is_equal_to_string("shortcode")); -# assert_that(result.sc[0].matching, is_equal_to(0)); + # // Has 5 args + # assert_that(result.sc[0].argcount, is_equal_to(5)); -# // Has 5 args -# assert_that(result.sc[0].argcount, is_equal_to(5)); + # // Arg1 is foo, no name + # assert_that(result.sc[0].argnames[0].len, is_equal_to(0)); + # chunk_s(input, result.sc[0].argvals[0]); + # assert_that(s.s, is_equal_to_string("foo")); + # // Arg2 is bar, no name + # assert_that(result.sc[0].argnames[1].len, is_equal_to(0)); + # chunk_s(input, result.sc[0].argvals[1]); + # assert_that(s.s, is_equal_to_string("bar")); + # // Arg3 is 42, no name + # assert_that(result.sc[0].argnames[2].len, is_equal_to(0)); + # chunk_s(input, result.sc[0].argvals[2]); + # assert_that(s.s, is_equal_to_string("42")); + # // Arg4 is bat=v1 + # chunk_s(input, result.sc[0].argnames[3]); + # assert_that(s.s, is_equal_to_string("bat")); + # chunk_s(input, result.sc[0].argvals[3]); + # assert_that(s.s, is_equal_to_string("v1")); + # // Arg5 is baz=v2 + # chunk_s(input, result.sc[0].argnames[4]); + # assert_that(s.s, is_equal_to_string("baz")); + # chunk_s(input, result.sc[0].argvals[4]); + # assert_that(s.s, is_equal_to_string("v2")); + # assert_that(result.errcount, is_equal_to(0)); + # } -# // Arg1 is foo, no name -# assert_that(result.sc[0].argnames[0].len, is_equal_to(0)); -# chunk_s(input, result.sc[0].argvals[0]); -# assert_that(s.s, is_equal_to_string("foo")); -# // Arg2 is bar, no name -# assert_that(result.sc[0].argnames[1].len, is_equal_to(0)); -# chunk_s(input, result.sc[0].argvals[1]); -# assert_that(s.s, is_equal_to_string("bar")); -# // Arg3 is 42, no name -# assert_that(result.sc[0].argnames[2].len, is_equal_to(0)); -# chunk_s(input, result.sc[0].argvals[2]); -# assert_that(s.s, is_equal_to_string("42")); -# // Arg4 is bat=v1 -# chunk_s(input, result.sc[0].argnames[3]); -# assert_that(s.s, is_equal_to_string("bat")); -# chunk_s(input, result.sc[0].argvals[3]); -# assert_that(s.s, is_equal_to_string("v1")); -# // Arg5 is baz=v2 -# chunk_s(input, result.sc[0].argnames[4]); -# assert_that(s.s, is_equal_to_string("baz")); -# chunk_s(input, result.sc[0].argvals[4]); -# assert_that(s.s, is_equal_to_string("v2")); -# assert_that(result.errcount, is_equal_to(0)); -# } - -# // BUG? -# // Ensure(parse, escaped_shortcode) -# // { -# // char *input = "foobar \\{{% shortcode %}}"; -# // result = parse(input); -# // // No shortcodes -# // assert_that(result.sc[0].name.len, is_equal_to(0)); -# // } + # // BUG? + # // Ensure(parse, escaped_shortcode) + # // { + # // char *input = "foobar \\{{% shortcode %}}"; + # // result = parse(input); + # // // No shortcodes + # // assert_that(result.sc[0].name.len, is_equal_to(0)); + # // } end diff --git a/src/shortcodes.c b/src/shortcodes.c index 9a1c755..611be31 100644 --- a/src/shortcodes.c +++ b/src/shortcodes.c @@ -29,21 +29,22 @@ static const int shortcode_en_main = 141; char *pe = p + len; sc_result result; - shortcode *sc_list = result.sc; + result.errcount = 0; + shortcode *sc_list = result.sc; int c_sc = 0; char *mark = p; char *data_mark = p; -#line 40 "shortcodes.c" +#line 41 "shortcodes.c" { cs = shortcode_start; } -#line 132 "shortcodes.rl" +#line 133 "shortcodes.rl" -#line 47 "shortcodes.c" +#line 48 "shortcodes.c" { if ( p == pe ) goto _test_eof; @@ -64,7 +65,7 @@ st141: if ( ++p == pe ) goto _test_eof141; case 141: -#line 68 "shortcodes.c" +#line 69 "shortcodes.c" if ( (*p) == 123 ) goto tr1; goto st0; @@ -85,7 +86,7 @@ st1: if ( ++p == pe ) goto _test_eof1; case 1: -#line 89 "shortcodes.c" +#line 90 "shortcodes.c" if ( (*p) == 123 ) goto tr2; goto st0; @@ -99,7 +100,7 @@ st2: if ( ++p == pe ) goto _test_eof2; case 2: -#line 103 "shortcodes.c" +#line 104 "shortcodes.c" switch( (*p) ) { case 37: goto st3; case 60: goto st139; @@ -133,7 +134,7 @@ st4: if ( ++p == pe ) goto _test_eof4; case 4: -#line 137 "shortcodes.c" +#line 138 "shortcodes.c" switch( (*p) ) { case 32: goto tr6; case 37: goto tr7; @@ -179,7 +180,7 @@ st5: if ( ++p == pe ) goto _test_eof5; case 5: -#line 183 "shortcodes.c" +#line 184 "shortcodes.c" switch( (*p) ) { case 32: goto st5; case 34: goto tr11; @@ -209,7 +210,7 @@ st6: if ( ++p == pe ) goto _test_eof6; case 6: -#line 213 "shortcodes.c" +#line 214 "shortcodes.c" switch( (*p) ) { case 34: goto st7; case 123: goto tr18; @@ -255,7 +256,7 @@ st8: if ( ++p == pe ) goto _test_eof8; case 8: -#line 259 "shortcodes.c" +#line 260 "shortcodes.c" switch( (*p) ) { case 123: goto tr1; case 125: goto st9; @@ -315,7 +316,7 @@ st142: if ( ++p == pe ) goto _test_eof142; case 142: -#line 319 "shortcodes.c" +#line 320 "shortcodes.c" if ( (*p) == 123 ) goto tr25; goto st10; @@ -347,7 +348,7 @@ st11: if ( ++p == pe ) goto _test_eof11; case 11: -#line 351 "shortcodes.c" +#line 352 "shortcodes.c" if ( (*p) == 123 ) goto tr26; goto st10; @@ -372,7 +373,7 @@ st12: if ( ++p == pe ) goto _test_eof12; case 12: -#line 376 "shortcodes.c" +#line 377 "shortcodes.c" switch( (*p) ) { case 37: goto st13; case 60: goto st86; @@ -419,7 +420,7 @@ st15: if ( ++p == pe ) goto _test_eof15; case 15: -#line 423 "shortcodes.c" +#line 424 "shortcodes.c" switch( (*p) ) { case 32: goto tr32; case 37: goto tr33; @@ -449,7 +450,7 @@ st16: if ( ++p == pe ) goto _test_eof16; case 16: -#line 453 "shortcodes.c" +#line 454 "shortcodes.c" switch( (*p) ) { case 32: goto st16; case 37: goto st17; @@ -470,7 +471,7 @@ st17: if ( ++p == pe ) goto _test_eof17; case 17: -#line 474 "shortcodes.c" +#line 475 "shortcodes.c" switch( (*p) ) { case 123: goto tr25; case 125: goto st18; @@ -495,7 +496,7 @@ st19: if ( ++p == pe ) goto _test_eof19; case 19: -#line 499 "shortcodes.c" +#line 500 "shortcodes.c" switch( (*p) ) { case 32: goto tr39; case 37: goto tr40; @@ -541,7 +542,7 @@ st20: if ( ++p == pe ) goto _test_eof20; case 20: -#line 545 "shortcodes.c" +#line 546 "shortcodes.c" switch( (*p) ) { case 32: goto st20; case 34: goto tr44; @@ -571,7 +572,7 @@ st21: if ( ++p == pe ) goto _test_eof21; case 21: -#line 575 "shortcodes.c" +#line 576 "shortcodes.c" switch( (*p) ) { case 34: goto st22; case 123: goto tr51; @@ -617,7 +618,7 @@ st23: if ( ++p == pe ) goto _test_eof23; case 23: -#line 621 "shortcodes.c" +#line 622 "shortcodes.c" switch( (*p) ) { case 123: goto tr25; case 125: goto st24; @@ -659,7 +660,7 @@ st25: if ( ++p == pe ) goto _test_eof25; case 25: -#line 663 "shortcodes.c" +#line 664 "shortcodes.c" switch( (*p) ) { case 123: goto tr25; case 125: goto st26; @@ -695,7 +696,7 @@ st27: if ( ++p == pe ) goto _test_eof27; case 27: -#line 699 "shortcodes.c" +#line 700 "shortcodes.c" switch( (*p) ) { case 34: goto st22; case 123: goto tr58; @@ -722,7 +723,7 @@ st28: if ( ++p == pe ) goto _test_eof28; case 28: -#line 726 "shortcodes.c" +#line 727 "shortcodes.c" switch( (*p) ) { case 34: goto st22; case 37: goto st29; @@ -773,7 +774,7 @@ st31: if ( ++p == pe ) goto _test_eof31; case 31: -#line 777 "shortcodes.c" +#line 778 "shortcodes.c" switch( (*p) ) { case 32: goto tr64; case 34: goto st22; @@ -804,7 +805,7 @@ st32: if ( ++p == pe ) goto _test_eof32; case 32: -#line 808 "shortcodes.c" +#line 809 "shortcodes.c" switch( (*p) ) { case 32: goto st32; case 34: goto st22; @@ -826,7 +827,7 @@ st33: if ( ++p == pe ) goto _test_eof33; case 33: -#line 830 "shortcodes.c" +#line 831 "shortcodes.c" switch( (*p) ) { case 34: goto st22; case 123: goto tr51; @@ -888,7 +889,7 @@ st143: if ( ++p == pe ) goto _test_eof143; case 143: -#line 892 "shortcodes.c" +#line 893 "shortcodes.c" switch( (*p) ) { case 34: goto st22; case 123: goto tr51; @@ -904,7 +905,7 @@ st35: if ( ++p == pe ) goto _test_eof35; case 35: -#line 908 "shortcodes.c" +#line 909 "shortcodes.c" switch( (*p) ) { case 32: goto tr71; case 34: goto st22; @@ -951,7 +952,7 @@ st36: if ( ++p == pe ) goto _test_eof36; case 36: -#line 955 "shortcodes.c" +#line 956 "shortcodes.c" switch( (*p) ) { case 32: goto st36; case 34: goto tr76; @@ -981,7 +982,7 @@ st37: if ( ++p == pe ) goto _test_eof37; case 37: -#line 985 "shortcodes.c" +#line 986 "shortcodes.c" switch( (*p) ) { case 32: goto tr81; case 34: goto st22; @@ -1019,7 +1020,7 @@ st38: if ( ++p == pe ) goto _test_eof38; case 38: -#line 1023 "shortcodes.c" +#line 1024 "shortcodes.c" switch( (*p) ) { case 34: goto st22; case 123: goto tr51; @@ -1063,7 +1064,7 @@ st40: if ( ++p == pe ) goto _test_eof40; case 40: -#line 1067 "shortcodes.c" +#line 1068 "shortcodes.c" switch( (*p) ) { case 34: goto st22; case 123: goto tr51; @@ -1090,7 +1091,7 @@ st42: if ( ++p == pe ) goto _test_eof42; case 42: -#line 1094 "shortcodes.c" +#line 1095 "shortcodes.c" switch( (*p) ) { case 32: goto tr88; case 34: goto st22; @@ -1120,7 +1121,7 @@ st43: if ( ++p == pe ) goto _test_eof43; case 43: -#line 1124 "shortcodes.c" +#line 1125 "shortcodes.c" switch( (*p) ) { case 32: goto tr88; case 34: goto st22; @@ -1152,7 +1153,7 @@ st44: if ( ++p == pe ) goto _test_eof44; case 44: -#line 1156 "shortcodes.c" +#line 1157 "shortcodes.c" switch( (*p) ) { case 34: goto tr76; case 123: goto tr51; @@ -1195,7 +1196,7 @@ st46: if ( ++p == pe ) goto _test_eof46; case 46: -#line 1199 "shortcodes.c" +#line 1200 "shortcodes.c" switch( (*p) ) { case 32: goto tr95; case 34: goto st22; @@ -1242,7 +1243,7 @@ st47: if ( ++p == pe ) goto _test_eof47; case 47: -#line 1246 "shortcodes.c" +#line 1247 "shortcodes.c" switch( (*p) ) { case 32: goto st47; case 34: goto tr98; @@ -1272,7 +1273,7 @@ st48: if ( ++p == pe ) goto _test_eof48; case 48: -#line 1276 "shortcodes.c" +#line 1277 "shortcodes.c" switch( (*p) ) { case 32: goto tr102; case 34: goto st50; @@ -1293,7 +1294,7 @@ st49: if ( ++p == pe ) goto _test_eof49; case 49: -#line 1297 "shortcodes.c" +#line 1298 "shortcodes.c" switch( (*p) ) { case 34: goto st50; case 123: goto tr106; @@ -1339,7 +1340,7 @@ st51: if ( ++p == pe ) goto _test_eof51; case 51: -#line 1343 "shortcodes.c" +#line 1344 "shortcodes.c" switch( (*p) ) { case 32: goto st51; case 34: goto tr109; @@ -1369,7 +1370,7 @@ st52: if ( ++p == pe ) goto _test_eof52; case 52: -#line 1373 "shortcodes.c" +#line 1374 "shortcodes.c" switch( (*p) ) { case 32: goto tr112; case 37: goto tr113; @@ -1398,7 +1399,7 @@ st53: if ( ++p == pe ) goto _test_eof53; case 53: -#line 1402 "shortcodes.c" +#line 1403 "shortcodes.c" switch( (*p) ) { case 32: goto tr112; case 37: goto tr113; @@ -1429,7 +1430,7 @@ st54: if ( ++p == pe ) goto _test_eof54; case 54: -#line 1433 "shortcodes.c" +#line 1434 "shortcodes.c" switch( (*p) ) { case 34: goto tr109; case 123: goto tr25; @@ -1464,7 +1465,7 @@ st55: if ( ++p == pe ) goto _test_eof55; case 55: -#line 1468 "shortcodes.c" +#line 1469 "shortcodes.c" switch( (*p) ) { case 34: goto st50; case 123: goto tr118; @@ -1491,7 +1492,7 @@ st56: if ( ++p == pe ) goto _test_eof56; case 56: -#line 1495 "shortcodes.c" +#line 1496 "shortcodes.c" switch( (*p) ) { case 34: goto st50; case 37: goto st57; @@ -1542,7 +1543,7 @@ st59: if ( ++p == pe ) goto _test_eof59; case 59: -#line 1546 "shortcodes.c" +#line 1547 "shortcodes.c" switch( (*p) ) { case 32: goto tr124; case 34: goto st50; @@ -1573,7 +1574,7 @@ st60: if ( ++p == pe ) goto _test_eof60; case 60: -#line 1577 "shortcodes.c" +#line 1578 "shortcodes.c" switch( (*p) ) { case 32: goto st60; case 34: goto st50; @@ -1595,7 +1596,7 @@ st61: if ( ++p == pe ) goto _test_eof61; case 61: -#line 1599 "shortcodes.c" +#line 1600 "shortcodes.c" switch( (*p) ) { case 34: goto st50; case 123: goto tr106; @@ -1657,7 +1658,7 @@ st144: if ( ++p == pe ) goto _test_eof144; case 144: -#line 1661 "shortcodes.c" +#line 1662 "shortcodes.c" switch( (*p) ) { case 34: goto st50; case 123: goto tr106; @@ -1673,7 +1674,7 @@ st63: if ( ++p == pe ) goto _test_eof63; case 63: -#line 1677 "shortcodes.c" +#line 1678 "shortcodes.c" switch( (*p) ) { case 32: goto tr131; case 34: goto st50; @@ -1720,7 +1721,7 @@ st64: if ( ++p == pe ) goto _test_eof64; case 64: -#line 1724 "shortcodes.c" +#line 1725 "shortcodes.c" switch( (*p) ) { case 32: goto st64; case 34: goto tr136; @@ -1750,7 +1751,7 @@ st65: if ( ++p == pe ) goto _test_eof65; case 65: -#line 1754 "shortcodes.c" +#line 1755 "shortcodes.c" switch( (*p) ) { case 32: goto tr141; case 34: goto st22; @@ -1788,7 +1789,7 @@ st66: if ( ++p == pe ) goto _test_eof66; case 66: -#line 1792 "shortcodes.c" +#line 1793 "shortcodes.c" switch( (*p) ) { case 34: goto st50; case 123: goto tr106; @@ -1815,7 +1816,7 @@ st68: if ( ++p == pe ) goto _test_eof68; case 68: -#line 1819 "shortcodes.c" +#line 1820 "shortcodes.c" switch( (*p) ) { case 32: goto tr144; case 34: goto st50; @@ -1862,7 +1863,7 @@ st69: if ( ++p == pe ) goto _test_eof69; case 69: -#line 1866 "shortcodes.c" +#line 1867 "shortcodes.c" switch( (*p) ) { case 34: goto st50; case 123: goto tr106; @@ -1889,7 +1890,7 @@ st71: if ( ++p == pe ) goto _test_eof71; case 71: -#line 1893 "shortcodes.c" +#line 1894 "shortcodes.c" switch( (*p) ) { case 32: goto tr144; case 34: goto st50; @@ -1921,7 +1922,7 @@ st72: if ( ++p == pe ) goto _test_eof72; case 72: -#line 1925 "shortcodes.c" +#line 1926 "shortcodes.c" switch( (*p) ) { case 34: goto tr136; case 123: goto tr106; @@ -1964,7 +1965,7 @@ st74: if ( ++p == pe ) goto _test_eof74; case 74: -#line 1968 "shortcodes.c" +#line 1969 "shortcodes.c" switch( (*p) ) { case 32: goto tr153; case 34: goto st50; @@ -2011,7 +2012,7 @@ st75: if ( ++p == pe ) goto _test_eof75; case 75: -#line 2015 "shortcodes.c" +#line 2016 "shortcodes.c" switch( (*p) ) { case 32: goto st75; case 34: goto tr156; @@ -2041,7 +2042,7 @@ st76: if ( ++p == pe ) goto _test_eof76; case 76: -#line 2045 "shortcodes.c" +#line 2046 "shortcodes.c" switch( (*p) ) { case 32: goto tr159; case 34: goto st50; @@ -2062,7 +2063,7 @@ st77: if ( ++p == pe ) goto _test_eof77; case 77: -#line 2066 "shortcodes.c" +#line 2067 "shortcodes.c" switch( (*p) ) { case 32: goto tr160; case 34: goto st50; @@ -2092,7 +2093,7 @@ st78: if ( ++p == pe ) goto _test_eof78; case 78: -#line 2096 "shortcodes.c" +#line 2097 "shortcodes.c" switch( (*p) ) { case 32: goto tr160; case 34: goto st50; @@ -2124,7 +2125,7 @@ st79: if ( ++p == pe ) goto _test_eof79; case 79: -#line 2128 "shortcodes.c" +#line 2129 "shortcodes.c" switch( (*p) ) { case 34: goto tr156; case 123: goto tr106; @@ -2148,7 +2149,7 @@ st80: if ( ++p == pe ) goto _test_eof80; case 80: -#line 2152 "shortcodes.c" +#line 2153 "shortcodes.c" switch( (*p) ) { case 32: goto tr164; case 34: goto st22; @@ -2178,7 +2179,7 @@ st81: if ( ++p == pe ) goto _test_eof81; case 81: -#line 2182 "shortcodes.c" +#line 2183 "shortcodes.c" switch( (*p) ) { case 32: goto tr164; case 34: goto st22; @@ -2210,7 +2211,7 @@ st82: if ( ++p == pe ) goto _test_eof82; case 82: -#line 2214 "shortcodes.c" +#line 2215 "shortcodes.c" switch( (*p) ) { case 34: goto tr98; case 123: goto tr51; @@ -2234,7 +2235,7 @@ st83: if ( ++p == pe ) goto _test_eof83; case 83: -#line 2238 "shortcodes.c" +#line 2239 "shortcodes.c" switch( (*p) ) { case 32: goto tr168; case 37: goto tr115; @@ -2263,7 +2264,7 @@ st84: if ( ++p == pe ) goto _test_eof84; case 84: -#line 2267 "shortcodes.c" +#line 2268 "shortcodes.c" switch( (*p) ) { case 32: goto tr168; case 37: goto tr115; @@ -2294,7 +2295,7 @@ st85: if ( ++p == pe ) goto _test_eof85; case 85: -#line 2298 "shortcodes.c" +#line 2299 "shortcodes.c" switch( (*p) ) { case 34: goto tr44; case 123: goto tr25; @@ -2336,7 +2337,7 @@ st87: if ( ++p == pe ) goto _test_eof87; case 87: -#line 2340 "shortcodes.c" +#line 2341 "shortcodes.c" switch( (*p) ) { case 32: goto tr173; case 37: goto tr42; @@ -2382,7 +2383,7 @@ st88: if ( ++p == pe ) goto _test_eof88; case 88: -#line 2386 "shortcodes.c" +#line 2387 "shortcodes.c" switch( (*p) ) { case 123: goto tr1; case 125: goto st89; @@ -2407,7 +2408,7 @@ st90: if ( ++p == pe ) goto _test_eof90; case 90: -#line 2411 "shortcodes.c" +#line 2412 "shortcodes.c" switch( (*p) ) { case 34: goto st7; case 123: goto tr177; @@ -2423,7 +2424,7 @@ st91: if ( ++p == pe ) goto _test_eof91; case 91: -#line 2427 "shortcodes.c" +#line 2428 "shortcodes.c" switch( (*p) ) { case 34: goto st7; case 37: goto st92; @@ -2459,7 +2460,7 @@ st93: if ( ++p == pe ) goto _test_eof93; case 93: -#line 2463 "shortcodes.c" +#line 2464 "shortcodes.c" switch( (*p) ) { case 32: goto tr181; case 34: goto st7; @@ -2506,7 +2507,7 @@ st94: if ( ++p == pe ) goto _test_eof94; case 94: -#line 2510 "shortcodes.c" +#line 2511 "shortcodes.c" switch( (*p) ) { case 32: goto st94; case 34: goto tr186; @@ -2536,7 +2537,7 @@ st95: if ( ++p == pe ) goto _test_eof95; case 95: -#line 2540 "shortcodes.c" +#line 2541 "shortcodes.c" switch( (*p) ) { case 32: goto tr191; case 34: goto st7; @@ -2574,7 +2575,7 @@ st96: if ( ++p == pe ) goto _test_eof96; case 96: -#line 2578 "shortcodes.c" +#line 2579 "shortcodes.c" switch( (*p) ) { case 34: goto st7; case 123: goto tr18; @@ -2618,7 +2619,7 @@ st98: if ( ++p == pe ) goto _test_eof98; case 98: -#line 2622 "shortcodes.c" +#line 2623 "shortcodes.c" switch( (*p) ) { case 34: goto st7; case 123: goto tr18; @@ -2650,7 +2651,7 @@ st145: if ( ++p == pe ) goto _test_eof145; case 145: -#line 2654 "shortcodes.c" +#line 2655 "shortcodes.c" switch( (*p) ) { case 34: goto st7; case 123: goto tr18; @@ -2666,7 +2667,7 @@ st100: if ( ++p == pe ) goto _test_eof100; case 100: -#line 2670 "shortcodes.c" +#line 2671 "shortcodes.c" switch( (*p) ) { case 32: goto tr197; case 34: goto st7; @@ -2696,7 +2697,7 @@ st101: if ( ++p == pe ) goto _test_eof101; case 101: -#line 2700 "shortcodes.c" +#line 2701 "shortcodes.c" switch( (*p) ) { case 32: goto tr197; case 34: goto st7; @@ -2728,7 +2729,7 @@ st102: if ( ++p == pe ) goto _test_eof102; case 102: -#line 2732 "shortcodes.c" +#line 2733 "shortcodes.c" switch( (*p) ) { case 34: goto tr186; case 123: goto tr18; @@ -2770,7 +2771,7 @@ st104: if ( ++p == pe ) goto _test_eof104; case 104: -#line 2774 "shortcodes.c" +#line 2775 "shortcodes.c" switch( (*p) ) { case 32: goto tr204; case 34: goto st7; @@ -2817,7 +2818,7 @@ st105: if ( ++p == pe ) goto _test_eof105; case 105: -#line 2821 "shortcodes.c" +#line 2822 "shortcodes.c" switch( (*p) ) { case 32: goto st105; case 34: goto tr207; @@ -2847,7 +2848,7 @@ st106: if ( ++p == pe ) goto _test_eof106; case 106: -#line 2851 "shortcodes.c" +#line 2852 "shortcodes.c" switch( (*p) ) { case 32: goto tr211; case 34: goto st108; @@ -2868,7 +2869,7 @@ st107: if ( ++p == pe ) goto _test_eof107; case 107: -#line 2872 "shortcodes.c" +#line 2873 "shortcodes.c" switch( (*p) ) { case 34: goto st108; case 123: goto tr215; @@ -2914,7 +2915,7 @@ st109: if ( ++p == pe ) goto _test_eof109; case 109: -#line 2918 "shortcodes.c" +#line 2919 "shortcodes.c" switch( (*p) ) { case 32: goto st109; case 34: goto tr218; @@ -2944,7 +2945,7 @@ st110: if ( ++p == pe ) goto _test_eof110; case 110: -#line 2948 "shortcodes.c" +#line 2949 "shortcodes.c" switch( (*p) ) { case 32: goto tr221; case 37: goto tr222; @@ -2973,7 +2974,7 @@ st111: if ( ++p == pe ) goto _test_eof111; case 111: -#line 2977 "shortcodes.c" +#line 2978 "shortcodes.c" switch( (*p) ) { case 32: goto tr221; case 37: goto tr222; @@ -3004,7 +3005,7 @@ st112: if ( ++p == pe ) goto _test_eof112; case 112: -#line 3008 "shortcodes.c" +#line 3009 "shortcodes.c" switch( (*p) ) { case 34: goto tr218; case 123: goto tr1; @@ -3028,7 +3029,7 @@ st113: if ( ++p == pe ) goto _test_eof113; case 113: -#line 3032 "shortcodes.c" +#line 3033 "shortcodes.c" switch( (*p) ) { case 34: goto st108; case 123: goto tr227; @@ -3044,7 +3045,7 @@ st114: if ( ++p == pe ) goto _test_eof114; case 114: -#line 3048 "shortcodes.c" +#line 3049 "shortcodes.c" switch( (*p) ) { case 34: goto st108; case 37: goto st115; @@ -3080,7 +3081,7 @@ st116: if ( ++p == pe ) goto _test_eof116; case 116: -#line 3084 "shortcodes.c" +#line 3085 "shortcodes.c" switch( (*p) ) { case 32: goto tr231; case 34: goto st108; @@ -3127,7 +3128,7 @@ st117: if ( ++p == pe ) goto _test_eof117; case 117: -#line 3131 "shortcodes.c" +#line 3132 "shortcodes.c" switch( (*p) ) { case 32: goto st117; case 34: goto tr236; @@ -3157,7 +3158,7 @@ st118: if ( ++p == pe ) goto _test_eof118; case 118: -#line 3161 "shortcodes.c" +#line 3162 "shortcodes.c" switch( (*p) ) { case 32: goto tr241; case 34: goto st7; @@ -3195,7 +3196,7 @@ st119: if ( ++p == pe ) goto _test_eof119; case 119: -#line 3199 "shortcodes.c" +#line 3200 "shortcodes.c" switch( (*p) ) { case 34: goto st108; case 123: goto tr215; @@ -3222,7 +3223,7 @@ st121: if ( ++p == pe ) goto _test_eof121; case 121: -#line 3226 "shortcodes.c" +#line 3227 "shortcodes.c" switch( (*p) ) { case 32: goto tr243; case 34: goto st108; @@ -3269,7 +3270,7 @@ st122: if ( ++p == pe ) goto _test_eof122; case 122: -#line 3273 "shortcodes.c" +#line 3274 "shortcodes.c" switch( (*p) ) { case 34: goto st108; case 123: goto tr215; @@ -3301,7 +3302,7 @@ st146: if ( ++p == pe ) goto _test_eof146; case 146: -#line 3305 "shortcodes.c" +#line 3306 "shortcodes.c" switch( (*p) ) { case 34: goto st108; case 123: goto tr215; @@ -3317,7 +3318,7 @@ st124: if ( ++p == pe ) goto _test_eof124; case 124: -#line 3321 "shortcodes.c" +#line 3322 "shortcodes.c" switch( (*p) ) { case 32: goto tr243; case 34: goto st108; @@ -3349,7 +3350,7 @@ st125: if ( ++p == pe ) goto _test_eof125; case 125: -#line 3353 "shortcodes.c" +#line 3354 "shortcodes.c" switch( (*p) ) { case 34: goto tr236; case 123: goto tr215; @@ -3391,7 +3392,7 @@ st127: if ( ++p == pe ) goto _test_eof127; case 127: -#line 3395 "shortcodes.c" +#line 3396 "shortcodes.c" switch( (*p) ) { case 32: goto tr252; case 34: goto st108; @@ -3438,7 +3439,7 @@ st128: if ( ++p == pe ) goto _test_eof128; case 128: -#line 3442 "shortcodes.c" +#line 3443 "shortcodes.c" switch( (*p) ) { case 32: goto st128; case 34: goto tr255; @@ -3468,7 +3469,7 @@ st129: if ( ++p == pe ) goto _test_eof129; case 129: -#line 3472 "shortcodes.c" +#line 3473 "shortcodes.c" switch( (*p) ) { case 32: goto tr258; case 34: goto st108; @@ -3489,7 +3490,7 @@ st130: if ( ++p == pe ) goto _test_eof130; case 130: -#line 3493 "shortcodes.c" +#line 3494 "shortcodes.c" switch( (*p) ) { case 32: goto tr259; case 34: goto st108; @@ -3519,7 +3520,7 @@ st131: if ( ++p == pe ) goto _test_eof131; case 131: -#line 3523 "shortcodes.c" +#line 3524 "shortcodes.c" switch( (*p) ) { case 32: goto tr259; case 34: goto st108; @@ -3551,7 +3552,7 @@ st132: if ( ++p == pe ) goto _test_eof132; case 132: -#line 3555 "shortcodes.c" +#line 3556 "shortcodes.c" switch( (*p) ) { case 34: goto tr255; case 123: goto tr215; @@ -3575,7 +3576,7 @@ st133: if ( ++p == pe ) goto _test_eof133; case 133: -#line 3579 "shortcodes.c" +#line 3580 "shortcodes.c" switch( (*p) ) { case 32: goto tr263; case 34: goto st7; @@ -3605,7 +3606,7 @@ st134: if ( ++p == pe ) goto _test_eof134; case 134: -#line 3609 "shortcodes.c" +#line 3610 "shortcodes.c" switch( (*p) ) { case 32: goto tr263; case 34: goto st7; @@ -3637,7 +3638,7 @@ st135: if ( ++p == pe ) goto _test_eof135; case 135: -#line 3641 "shortcodes.c" +#line 3642 "shortcodes.c" switch( (*p) ) { case 34: goto tr207; case 123: goto tr18; @@ -3661,7 +3662,7 @@ st136: if ( ++p == pe ) goto _test_eof136; case 136: -#line 3665 "shortcodes.c" +#line 3666 "shortcodes.c" switch( (*p) ) { case 32: goto tr267; case 37: goto tr224; @@ -3690,7 +3691,7 @@ st137: if ( ++p == pe ) goto _test_eof137; case 137: -#line 3694 "shortcodes.c" +#line 3695 "shortcodes.c" switch( (*p) ) { case 32: goto tr267; case 37: goto tr224; @@ -3721,7 +3722,7 @@ st138: if ( ++p == pe ) goto _test_eof138; case 138: -#line 3725 "shortcodes.c" +#line 3726 "shortcodes.c" switch( (*p) ) { case 34: goto tr11; case 123: goto tr1; @@ -3762,7 +3763,7 @@ st140: if ( ++p == pe ) goto _test_eof140; case 140: -#line 3766 "shortcodes.c" +#line 3767 "shortcodes.c" switch( (*p) ) { case 32: goto tr272; case 37: goto tr9; @@ -3933,7 +3934,7 @@ case 140: _test_eof: {} } -#line 133 "shortcodes.rl" +#line 134 "shortcodes.rl" result.sccount = c_sc; return result; diff --git a/src/shortcodes.cr b/src/shortcodes.cr index 26931a7..d85ca22 100644 --- a/src/shortcodes.cr +++ b/src/shortcodes.cr @@ -30,7 +30,7 @@ lib LibShortcodes fun parse(input : Pointer(LibC::Char), len : UInt32) : ScResult end -module Shortcodes +module Shortcodes struct Arg property name : String = "" property value : String = "" @@ -40,8 +40,8 @@ module Shortcodes end struct Error - @position: UInt32 - @code: UInt32 + property position : UInt32 + property code : UInt32 def initialize(@position, @code) end @@ -52,9 +52,15 @@ module Shortcodes property data : String = "" property matching : Int32 = 0 property args : Array(Arg) = [] of Arg - property errors : Array(Error) = [] of Error property whole : String = "" - def initialize(@name, @data, @matching, @args, @whole) + + def initialize( + @name, + @data, + @matching, + @args, + @whole + ) end end @@ -81,14 +87,6 @@ module Shortcodes ) end - errors = [] of Error - (0...r.errcount).each do |k| - errors << Error.new( - r.errors[k].position, - r.errors[k].code, - ) - end - result.shortcodes << Shortcode.new( extract(sc.name, input), extract(sc.data, input), @@ -97,17 +95,22 @@ module Shortcodes extract(sc.whole, input), ) end + (0...r.errcount).each do |k| + result.errors << Error.new( + r.errors[k].position, + r.errors[k].code, + ) + end result end - - #### Error codes + # ### Error codes # # You are closing the wrong shortcode. # Example: # {{% foo %}} {{% /bar %}} ERR_MISMATCHED_CLOSING_TAG = 1 - + # You are using mismatched brackets. # Example: # {{% foo >}} diff --git a/src/shortcodes.rl b/src/shortcodes.rl index 0a2ce38..84deddf 100644 --- a/src/shortcodes.rl +++ b/src/shortcodes.rl @@ -122,7 +122,8 @@ sc_result parse(char *input, unsigned int len) { char *pe = p + len; sc_result result; - shortcode *sc_list = result.sc; + result.errcount = 0; + shortcode *sc_list = result.sc; int c_sc = 0; char *mark = p;