Compare commits
11 Commits
df2c0c147a
...
main
Author | SHA1 | Date | |
---|---|---|---|
6069d9f049 | |||
de4e072c97 | |||
4dc22ff2da | |||
19dcb7e6a4 | |||
910b7ce861 | |||
44619dd1d4 | |||
d55a1c6bad | |||
91a8c57966 | |||
8b8783f0f2 | |||
ca9ef0d4f7 | |||
817eea895a |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -51,6 +51,3 @@ Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
shortcodes.0
|
||||
tests
|
||||
.cgreen*
|
||||
|
42
README.md
42
README.md
@@ -1,5 +1,7 @@
|
||||
# Shortcodes
|
||||
|
||||
## What it is
|
||||
|
||||
This is a parser for the shortcode spec as explained in the Hugo docs
|
||||
and used in Hugo and Nikola. Approximately.
|
||||
|
||||
@@ -12,11 +14,47 @@ as close as practical.
|
||||
* Allocates no memory, because all strings are references to
|
||||
pieces of input.
|
||||
|
||||
What works:
|
||||
## What works
|
||||
|
||||
* Detect shortcodes with names
|
||||
* Standalone and matched shortcodes
|
||||
* Capture data between tags in matched shortcodes
|
||||
* Capture arguments with and without names
|
||||
* Capture values with and without quotes (with details, see TODO above)
|
||||
* Capture values with and without quotes (with details, see [TODO](TODO.md))
|
||||
|
||||
## Building
|
||||
|
||||
You need [Ragel](http://www.colm.net/open-source/ragel/) and a C compiler.
|
||||
|
||||
Ragel is used to generate `shortcodes.c` out of `shortcodes.rl`.
|
||||
As a convenience there is a generated `shortcodes.c` in the repo,
|
||||
|
||||
Then:
|
||||
|
||||
```shell
|
||||
cd src && make
|
||||
```
|
||||
|
||||
To run tests:
|
||||
|
||||
```shell
|
||||
crystal spec
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
1. Add the dependency to your `shard.yml`:
|
||||
|
||||
```yaml
|
||||
dependencies:
|
||||
cr-discount:
|
||||
github: ralsina/shortcodes
|
||||
```
|
||||
|
||||
2. Run `shards install`
|
||||
|
||||
## Usage
|
||||
|
||||
```crystal
|
||||
require "shortcodes"
|
||||
```
|
||||
|
@@ -1,240 +1,136 @@
|
||||
require "./spec_helper"
|
||||
include Shortcodes
|
||||
|
||||
describe "Shortcodes" do
|
||||
# TODO: Write tests
|
||||
|
||||
it "works" do
|
||||
result = Shortcodes.parse("foo{{% bar %}}baz{{% /bar %}}qux");
|
||||
p! result.sccount;
|
||||
p! result.shortcodes[0].matching;
|
||||
end
|
||||
it "should parse empty string" do
|
||||
result = parse("")
|
||||
result.shortcodes.size.should eq 0
|
||||
result.errors.size.should eq 0
|
||||
end
|
||||
|
||||
# Port tests below to spec
|
||||
it "should parse simeple shortcode" do
|
||||
result = parse("foobar {{% shortcode %}}blah")
|
||||
result.shortcodes.size.should eq 1
|
||||
result.errors.size.should eq 0
|
||||
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 %}}"
|
||||
end
|
||||
|
||||
# #include <cgreen/cgreen.h>
|
||||
# #include <bglibs/str.h>
|
||||
# #include "shortcodes.h"
|
||||
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
|
||||
|
||||
# Describe(parse);
|
||||
# BeforeEach(parse) {}
|
||||
# AfterEach(parse) {}
|
||||
it "should report mismatched brackets" do
|
||||
input = "foobar {{% shortcode >}}blah"
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 0
|
||||
result.errors.size.should eq 1
|
||||
result.errors[0].code.should eq ERR_MISMATCHED_BRACKET
|
||||
input[result.errors[0].position, 3].should eq ">}}"
|
||||
end
|
||||
|
||||
# sc_result result;
|
||||
# str s;
|
||||
it "should accept mismatched brackets inside data are ok" do
|
||||
input = "foobar {{% sc %}} >}}blah {{% /sc %}} "
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 1
|
||||
result.errors.size.should eq 0
|
||||
result.shortcodes[0].whole.should eq "{{% sc %}} >}}blah {{% /sc %}}"
|
||||
result.shortcodes[0].data.should eq " >}}blah "
|
||||
result.shortcodes[0].args.size.should eq 0
|
||||
end
|
||||
|
||||
# void chunk_s(char *buffer, chunk c)
|
||||
# {
|
||||
# str_copyb(&s, buffer + c.start, c.len);
|
||||
# }
|
||||
it "should accept mismatched brackets in qvals" do
|
||||
input = "foobar {{% sc \">}}blah\" %}} {{% /sc %}}"
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 1
|
||||
result.errors.size.should eq 0
|
||||
result.shortcodes[0].whole.should eq "{{% sc \">}}blah\" %}} {{% /sc %}}"
|
||||
result.shortcodes[0].args.size.should eq 1
|
||||
result.shortcodes[0].args[0].@value.should eq ">}}blah"
|
||||
end
|
||||
|
||||
# Ensure(parse, empty_string)
|
||||
# {
|
||||
# char *input = "";
|
||||
# result = parse(input);
|
||||
# // This means no shortcodes in it
|
||||
# assert_that(result.sccount, is_equal_to(0));
|
||||
# assert_that(result.errcount, is_equal_to(0));
|
||||
# }
|
||||
it "should consider spaces in shortcodes optional" do
|
||||
input = "foobar {{% shortcode%}}blah"
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 1
|
||||
result.errors.size.should eq 0
|
||||
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%}}"
|
||||
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 "should allow path-like names" do
|
||||
input = "foobar {{% shortcode/foo/bar %}}blah"
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 1
|
||||
result.errors.size.should eq 0
|
||||
result.shortcodes[0].name.should eq "shortcode/foo/bar"
|
||||
result.shortcodes[0].matching.should eq 0
|
||||
result.shortcodes[0].args.size.should eq 0
|
||||
result.shortcodes[0].whole.should eq "{{% shortcode/foo/bar %}}"
|
||||
end
|
||||
|
||||
# // 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 parse multiple shortcodes" do
|
||||
input = "foobar {{% shortcode %}}blah {{<sc2 >}}blahblah"
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 2
|
||||
result.errors.size.should eq 0
|
||||
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[1].name.should eq "sc2"
|
||||
result.shortcodes[1].matching.should eq 0
|
||||
result.shortcodes[1].args.size.should eq 0
|
||||
result.shortcodes[1].whole.should eq "{{<sc2 >}}"
|
||||
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"));
|
||||
# }
|
||||
it "should parse matching shortcodes" do
|
||||
input = "foobar {{% shortcode %}}blah {{% /shortcode %}} blah"
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 1
|
||||
result.errors.size.should eq 0
|
||||
result.shortcodes[0].name.should eq "shortcode"
|
||||
result.shortcodes[0].matching.should eq 1
|
||||
result.shortcodes[0].args.size.should eq 0
|
||||
result.shortcodes[0].whole.should eq "{{% shortcode %}}blah {{% /shortcode %}}"
|
||||
result.shortcodes[0].data.should eq "blah "
|
||||
end
|
||||
|
||||
# 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(">}}"));
|
||||
# }
|
||||
it "should parse shortcode args" do
|
||||
input = "foobar {{% shortcode foo \"bar\" 42 bat=v1 baz=\"v2\" %}}blah"
|
||||
result = parse(input)
|
||||
result.shortcodes.size.should eq 1
|
||||
result.errors.size.should eq 0
|
||||
result.shortcodes[0].name.should eq "shortcode"
|
||||
result.shortcodes[0].matching.should eq 0
|
||||
result.shortcodes[0].args.size.should eq 5
|
||||
result.shortcodes[0].args[0].name.should eq ""
|
||||
result.shortcodes[0].args[0].value.should eq "foo"
|
||||
result.shortcodes[0].args[1].name.should eq ""
|
||||
result.shortcodes[0].args[1].value.should eq "bar"
|
||||
result.shortcodes[0].args[2].name.should eq ""
|
||||
result.shortcodes[0].args[2].value.should eq "42"
|
||||
result.shortcodes[0].args[3].name.should eq "bat"
|
||||
result.shortcodes[0].args[3].value.should eq "v1"
|
||||
result.shortcodes[0].args[4].name.should eq "baz"
|
||||
result.shortcodes[0].args[4].value.should eq "v2"
|
||||
result.shortcodes[0].whole.should eq "{{% shortcode foo \"bar\" 42 bat=v1 baz=\"v2\" %}}"
|
||||
end
|
||||
|
||||
# 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, 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));
|
||||
# }
|
||||
|
||||
# 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));
|
||||
# }
|
||||
|
||||
# Ensure(parse, multiple_shortcodes)
|
||||
# {
|
||||
# char *input = "foobar {{% shortcode %}}blah {{<sc2 >}}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("{{<sc2 >}}"));
|
||||
# assert_that(result.errcount, is_equal_to(0));
|
||||
# }
|
||||
|
||||
# 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));
|
||||
|
||||
# // 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));
|
||||
|
||||
# // 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));
|
||||
|
||||
# // 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));
|
||||
# }
|
||||
|
||||
# // 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?
|
||||
# it "should ignore escaped shortcodes" do
|
||||
# input = "foobar \\{{% shortcode %}}blah"
|
||||
# result = parse(input)
|
||||
# result.shortcodes.size.should eq 0
|
||||
# result.errors.size.should eq 0
|
||||
# end
|
||||
end
|
||||
|
@@ -1,4 +1,4 @@
|
||||
CC=gcc
|
||||
all: shortcodes.o
|
||||
shortcodes.c: shortcodes.rl
|
||||
ragel -G2 shortcodes.rl -o shortcodes.c
|
||||
clean:
|
||||
|
1
src/run_tests.cr
Normal file
1
src/run_tests.cr
Normal file
@@ -0,0 +1 @@
|
||||
require "../spec/**"
|
238
src/shortcodes.c
238
src/shortcodes.c
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
|
||||
sc_result parse(char *input) {
|
||||
sc_result parse(char *input, unsigned int len) {
|
||||
|
||||
|
||||
#line 15 "shortcodes.c"
|
||||
@@ -20,14 +20,16 @@ static const int shortcode_en_main = 141;
|
||||
|
||||
|
||||
#line 116 "shortcodes.rl"
|
||||
char *eof, *ts, *te = 0;
|
||||
char *eof = input + len;
|
||||
char *ts, *te = 0;
|
||||
int cs, act = 0;
|
||||
|
||||
char *start = input;
|
||||
char *p = input;
|
||||
char *pe = p + strlen(input);
|
||||
char *pe = p + len;
|
||||
|
||||
sc_result result;
|
||||
result.errcount = 0;
|
||||
shortcode *sc_list = result.sc;
|
||||
int c_sc = 0;
|
||||
|
||||
@@ -35,14 +37,14 @@ static const int shortcode_en_main = 141;
|
||||
char *data_mark = p;
|
||||
|
||||
|
||||
#line 39 "shortcodes.c"
|
||||
#line 41 "shortcodes.c"
|
||||
{
|
||||
cs = shortcode_start;
|
||||
}
|
||||
|
||||
#line 131 "shortcodes.rl"
|
||||
#line 133 "shortcodes.rl"
|
||||
|
||||
#line 46 "shortcodes.c"
|
||||
#line 48 "shortcodes.c"
|
||||
{
|
||||
if ( p == pe )
|
||||
goto _test_eof;
|
||||
@@ -63,7 +65,7 @@ st141:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof141;
|
||||
case 141:
|
||||
#line 67 "shortcodes.c"
|
||||
#line 69 "shortcodes.c"
|
||||
if ( (*p) == 123 )
|
||||
goto tr1;
|
||||
goto st0;
|
||||
@@ -84,7 +86,7 @@ st1:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof1;
|
||||
case 1:
|
||||
#line 88 "shortcodes.c"
|
||||
#line 90 "shortcodes.c"
|
||||
if ( (*p) == 123 )
|
||||
goto tr2;
|
||||
goto st0;
|
||||
@@ -98,7 +100,7 @@ st2:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof2;
|
||||
case 2:
|
||||
#line 102 "shortcodes.c"
|
||||
#line 104 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 37: goto st3;
|
||||
case 60: goto st139;
|
||||
@@ -132,7 +134,7 @@ st4:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof4;
|
||||
case 4:
|
||||
#line 136 "shortcodes.c"
|
||||
#line 138 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr6;
|
||||
case 37: goto tr7;
|
||||
@@ -178,7 +180,7 @@ st5:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof5;
|
||||
case 5:
|
||||
#line 182 "shortcodes.c"
|
||||
#line 184 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st5;
|
||||
case 34: goto tr11;
|
||||
@@ -208,7 +210,7 @@ st6:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof6;
|
||||
case 6:
|
||||
#line 212 "shortcodes.c"
|
||||
#line 214 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st7;
|
||||
case 123: goto tr18;
|
||||
@@ -254,7 +256,7 @@ st8:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof8;
|
||||
case 8:
|
||||
#line 258 "shortcodes.c"
|
||||
#line 260 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 123: goto tr1;
|
||||
case 125: goto st9;
|
||||
@@ -314,7 +316,7 @@ st142:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof142;
|
||||
case 142:
|
||||
#line 318 "shortcodes.c"
|
||||
#line 320 "shortcodes.c"
|
||||
if ( (*p) == 123 )
|
||||
goto tr25;
|
||||
goto st10;
|
||||
@@ -346,7 +348,7 @@ st11:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof11;
|
||||
case 11:
|
||||
#line 350 "shortcodes.c"
|
||||
#line 352 "shortcodes.c"
|
||||
if ( (*p) == 123 )
|
||||
goto tr26;
|
||||
goto st10;
|
||||
@@ -371,7 +373,7 @@ st12:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof12;
|
||||
case 12:
|
||||
#line 375 "shortcodes.c"
|
||||
#line 377 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 37: goto st13;
|
||||
case 60: goto st86;
|
||||
@@ -418,7 +420,7 @@ st15:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof15;
|
||||
case 15:
|
||||
#line 422 "shortcodes.c"
|
||||
#line 424 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr32;
|
||||
case 37: goto tr33;
|
||||
@@ -448,7 +450,7 @@ st16:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof16;
|
||||
case 16:
|
||||
#line 452 "shortcodes.c"
|
||||
#line 454 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st16;
|
||||
case 37: goto st17;
|
||||
@@ -469,7 +471,7 @@ st17:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof17;
|
||||
case 17:
|
||||
#line 473 "shortcodes.c"
|
||||
#line 475 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 123: goto tr25;
|
||||
case 125: goto st18;
|
||||
@@ -494,7 +496,7 @@ st19:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof19;
|
||||
case 19:
|
||||
#line 498 "shortcodes.c"
|
||||
#line 500 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr39;
|
||||
case 37: goto tr40;
|
||||
@@ -540,7 +542,7 @@ st20:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof20;
|
||||
case 20:
|
||||
#line 544 "shortcodes.c"
|
||||
#line 546 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st20;
|
||||
case 34: goto tr44;
|
||||
@@ -570,7 +572,7 @@ st21:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof21;
|
||||
case 21:
|
||||
#line 574 "shortcodes.c"
|
||||
#line 576 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st22;
|
||||
case 123: goto tr51;
|
||||
@@ -616,7 +618,7 @@ st23:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof23;
|
||||
case 23:
|
||||
#line 620 "shortcodes.c"
|
||||
#line 622 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 123: goto tr25;
|
||||
case 125: goto st24;
|
||||
@@ -658,7 +660,7 @@ st25:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof25;
|
||||
case 25:
|
||||
#line 662 "shortcodes.c"
|
||||
#line 664 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 123: goto tr25;
|
||||
case 125: goto st26;
|
||||
@@ -694,7 +696,7 @@ st27:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof27;
|
||||
case 27:
|
||||
#line 698 "shortcodes.c"
|
||||
#line 700 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st22;
|
||||
case 123: goto tr58;
|
||||
@@ -721,7 +723,7 @@ st28:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof28;
|
||||
case 28:
|
||||
#line 725 "shortcodes.c"
|
||||
#line 727 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st22;
|
||||
case 37: goto st29;
|
||||
@@ -772,7 +774,7 @@ st31:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof31;
|
||||
case 31:
|
||||
#line 776 "shortcodes.c"
|
||||
#line 778 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr64;
|
||||
case 34: goto st22;
|
||||
@@ -803,7 +805,7 @@ st32:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof32;
|
||||
case 32:
|
||||
#line 807 "shortcodes.c"
|
||||
#line 809 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st32;
|
||||
case 34: goto st22;
|
||||
@@ -825,7 +827,7 @@ st33:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof33;
|
||||
case 33:
|
||||
#line 829 "shortcodes.c"
|
||||
#line 831 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st22;
|
||||
case 123: goto tr51;
|
||||
@@ -887,7 +889,7 @@ st143:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof143;
|
||||
case 143:
|
||||
#line 891 "shortcodes.c"
|
||||
#line 893 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st22;
|
||||
case 123: goto tr51;
|
||||
@@ -903,7 +905,7 @@ st35:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof35;
|
||||
case 35:
|
||||
#line 907 "shortcodes.c"
|
||||
#line 909 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr71;
|
||||
case 34: goto st22;
|
||||
@@ -950,7 +952,7 @@ st36:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof36;
|
||||
case 36:
|
||||
#line 954 "shortcodes.c"
|
||||
#line 956 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st36;
|
||||
case 34: goto tr76;
|
||||
@@ -980,7 +982,7 @@ st37:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof37;
|
||||
case 37:
|
||||
#line 984 "shortcodes.c"
|
||||
#line 986 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr81;
|
||||
case 34: goto st22;
|
||||
@@ -1018,7 +1020,7 @@ st38:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof38;
|
||||
case 38:
|
||||
#line 1022 "shortcodes.c"
|
||||
#line 1024 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st22;
|
||||
case 123: goto tr51;
|
||||
@@ -1062,7 +1064,7 @@ st40:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof40;
|
||||
case 40:
|
||||
#line 1066 "shortcodes.c"
|
||||
#line 1068 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st22;
|
||||
case 123: goto tr51;
|
||||
@@ -1089,7 +1091,7 @@ st42:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof42;
|
||||
case 42:
|
||||
#line 1093 "shortcodes.c"
|
||||
#line 1095 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr88;
|
||||
case 34: goto st22;
|
||||
@@ -1119,7 +1121,7 @@ st43:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof43;
|
||||
case 43:
|
||||
#line 1123 "shortcodes.c"
|
||||
#line 1125 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr88;
|
||||
case 34: goto st22;
|
||||
@@ -1151,7 +1153,7 @@ st44:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof44;
|
||||
case 44:
|
||||
#line 1155 "shortcodes.c"
|
||||
#line 1157 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr76;
|
||||
case 123: goto tr51;
|
||||
@@ -1194,7 +1196,7 @@ st46:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof46;
|
||||
case 46:
|
||||
#line 1198 "shortcodes.c"
|
||||
#line 1200 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr95;
|
||||
case 34: goto st22;
|
||||
@@ -1241,7 +1243,7 @@ st47:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof47;
|
||||
case 47:
|
||||
#line 1245 "shortcodes.c"
|
||||
#line 1247 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st47;
|
||||
case 34: goto tr98;
|
||||
@@ -1271,7 +1273,7 @@ st48:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof48;
|
||||
case 48:
|
||||
#line 1275 "shortcodes.c"
|
||||
#line 1277 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr102;
|
||||
case 34: goto st50;
|
||||
@@ -1292,7 +1294,7 @@ st49:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof49;
|
||||
case 49:
|
||||
#line 1296 "shortcodes.c"
|
||||
#line 1298 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st50;
|
||||
case 123: goto tr106;
|
||||
@@ -1338,7 +1340,7 @@ st51:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof51;
|
||||
case 51:
|
||||
#line 1342 "shortcodes.c"
|
||||
#line 1344 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st51;
|
||||
case 34: goto tr109;
|
||||
@@ -1368,7 +1370,7 @@ st52:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof52;
|
||||
case 52:
|
||||
#line 1372 "shortcodes.c"
|
||||
#line 1374 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr112;
|
||||
case 37: goto tr113;
|
||||
@@ -1397,7 +1399,7 @@ st53:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof53;
|
||||
case 53:
|
||||
#line 1401 "shortcodes.c"
|
||||
#line 1403 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr112;
|
||||
case 37: goto tr113;
|
||||
@@ -1428,7 +1430,7 @@ st54:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof54;
|
||||
case 54:
|
||||
#line 1432 "shortcodes.c"
|
||||
#line 1434 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr109;
|
||||
case 123: goto tr25;
|
||||
@@ -1463,7 +1465,7 @@ st55:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof55;
|
||||
case 55:
|
||||
#line 1467 "shortcodes.c"
|
||||
#line 1469 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st50;
|
||||
case 123: goto tr118;
|
||||
@@ -1490,7 +1492,7 @@ st56:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof56;
|
||||
case 56:
|
||||
#line 1494 "shortcodes.c"
|
||||
#line 1496 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st50;
|
||||
case 37: goto st57;
|
||||
@@ -1541,7 +1543,7 @@ st59:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof59;
|
||||
case 59:
|
||||
#line 1545 "shortcodes.c"
|
||||
#line 1547 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr124;
|
||||
case 34: goto st50;
|
||||
@@ -1572,7 +1574,7 @@ st60:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof60;
|
||||
case 60:
|
||||
#line 1576 "shortcodes.c"
|
||||
#line 1578 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st60;
|
||||
case 34: goto st50;
|
||||
@@ -1594,7 +1596,7 @@ st61:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof61;
|
||||
case 61:
|
||||
#line 1598 "shortcodes.c"
|
||||
#line 1600 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st50;
|
||||
case 123: goto tr106;
|
||||
@@ -1656,7 +1658,7 @@ st144:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof144;
|
||||
case 144:
|
||||
#line 1660 "shortcodes.c"
|
||||
#line 1662 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st50;
|
||||
case 123: goto tr106;
|
||||
@@ -1672,7 +1674,7 @@ st63:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof63;
|
||||
case 63:
|
||||
#line 1676 "shortcodes.c"
|
||||
#line 1678 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr131;
|
||||
case 34: goto st50;
|
||||
@@ -1719,7 +1721,7 @@ st64:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof64;
|
||||
case 64:
|
||||
#line 1723 "shortcodes.c"
|
||||
#line 1725 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st64;
|
||||
case 34: goto tr136;
|
||||
@@ -1749,7 +1751,7 @@ st65:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof65;
|
||||
case 65:
|
||||
#line 1753 "shortcodes.c"
|
||||
#line 1755 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr141;
|
||||
case 34: goto st22;
|
||||
@@ -1787,7 +1789,7 @@ st66:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof66;
|
||||
case 66:
|
||||
#line 1791 "shortcodes.c"
|
||||
#line 1793 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st50;
|
||||
case 123: goto tr106;
|
||||
@@ -1814,7 +1816,7 @@ st68:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof68;
|
||||
case 68:
|
||||
#line 1818 "shortcodes.c"
|
||||
#line 1820 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr144;
|
||||
case 34: goto st50;
|
||||
@@ -1861,7 +1863,7 @@ st69:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof69;
|
||||
case 69:
|
||||
#line 1865 "shortcodes.c"
|
||||
#line 1867 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st50;
|
||||
case 123: goto tr106;
|
||||
@@ -1888,7 +1890,7 @@ st71:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof71;
|
||||
case 71:
|
||||
#line 1892 "shortcodes.c"
|
||||
#line 1894 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr144;
|
||||
case 34: goto st50;
|
||||
@@ -1920,7 +1922,7 @@ st72:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof72;
|
||||
case 72:
|
||||
#line 1924 "shortcodes.c"
|
||||
#line 1926 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr136;
|
||||
case 123: goto tr106;
|
||||
@@ -1963,7 +1965,7 @@ st74:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof74;
|
||||
case 74:
|
||||
#line 1967 "shortcodes.c"
|
||||
#line 1969 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr153;
|
||||
case 34: goto st50;
|
||||
@@ -2010,7 +2012,7 @@ st75:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof75;
|
||||
case 75:
|
||||
#line 2014 "shortcodes.c"
|
||||
#line 2016 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st75;
|
||||
case 34: goto tr156;
|
||||
@@ -2040,7 +2042,7 @@ st76:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof76;
|
||||
case 76:
|
||||
#line 2044 "shortcodes.c"
|
||||
#line 2046 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr159;
|
||||
case 34: goto st50;
|
||||
@@ -2061,7 +2063,7 @@ st77:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof77;
|
||||
case 77:
|
||||
#line 2065 "shortcodes.c"
|
||||
#line 2067 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr160;
|
||||
case 34: goto st50;
|
||||
@@ -2091,7 +2093,7 @@ st78:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof78;
|
||||
case 78:
|
||||
#line 2095 "shortcodes.c"
|
||||
#line 2097 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr160;
|
||||
case 34: goto st50;
|
||||
@@ -2123,7 +2125,7 @@ st79:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof79;
|
||||
case 79:
|
||||
#line 2127 "shortcodes.c"
|
||||
#line 2129 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr156;
|
||||
case 123: goto tr106;
|
||||
@@ -2147,7 +2149,7 @@ st80:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof80;
|
||||
case 80:
|
||||
#line 2151 "shortcodes.c"
|
||||
#line 2153 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr164;
|
||||
case 34: goto st22;
|
||||
@@ -2177,7 +2179,7 @@ st81:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof81;
|
||||
case 81:
|
||||
#line 2181 "shortcodes.c"
|
||||
#line 2183 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr164;
|
||||
case 34: goto st22;
|
||||
@@ -2209,7 +2211,7 @@ st82:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof82;
|
||||
case 82:
|
||||
#line 2213 "shortcodes.c"
|
||||
#line 2215 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr98;
|
||||
case 123: goto tr51;
|
||||
@@ -2233,7 +2235,7 @@ st83:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof83;
|
||||
case 83:
|
||||
#line 2237 "shortcodes.c"
|
||||
#line 2239 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr168;
|
||||
case 37: goto tr115;
|
||||
@@ -2262,7 +2264,7 @@ st84:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof84;
|
||||
case 84:
|
||||
#line 2266 "shortcodes.c"
|
||||
#line 2268 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr168;
|
||||
case 37: goto tr115;
|
||||
@@ -2293,7 +2295,7 @@ st85:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof85;
|
||||
case 85:
|
||||
#line 2297 "shortcodes.c"
|
||||
#line 2299 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr44;
|
||||
case 123: goto tr25;
|
||||
@@ -2335,7 +2337,7 @@ st87:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof87;
|
||||
case 87:
|
||||
#line 2339 "shortcodes.c"
|
||||
#line 2341 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr173;
|
||||
case 37: goto tr42;
|
||||
@@ -2381,7 +2383,7 @@ st88:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof88;
|
||||
case 88:
|
||||
#line 2385 "shortcodes.c"
|
||||
#line 2387 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 123: goto tr1;
|
||||
case 125: goto st89;
|
||||
@@ -2406,7 +2408,7 @@ st90:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof90;
|
||||
case 90:
|
||||
#line 2410 "shortcodes.c"
|
||||
#line 2412 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st7;
|
||||
case 123: goto tr177;
|
||||
@@ -2422,7 +2424,7 @@ st91:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof91;
|
||||
case 91:
|
||||
#line 2426 "shortcodes.c"
|
||||
#line 2428 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st7;
|
||||
case 37: goto st92;
|
||||
@@ -2458,7 +2460,7 @@ st93:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof93;
|
||||
case 93:
|
||||
#line 2462 "shortcodes.c"
|
||||
#line 2464 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr181;
|
||||
case 34: goto st7;
|
||||
@@ -2505,7 +2507,7 @@ st94:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof94;
|
||||
case 94:
|
||||
#line 2509 "shortcodes.c"
|
||||
#line 2511 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st94;
|
||||
case 34: goto tr186;
|
||||
@@ -2535,7 +2537,7 @@ st95:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof95;
|
||||
case 95:
|
||||
#line 2539 "shortcodes.c"
|
||||
#line 2541 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr191;
|
||||
case 34: goto st7;
|
||||
@@ -2573,7 +2575,7 @@ st96:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof96;
|
||||
case 96:
|
||||
#line 2577 "shortcodes.c"
|
||||
#line 2579 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st7;
|
||||
case 123: goto tr18;
|
||||
@@ -2617,7 +2619,7 @@ st98:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof98;
|
||||
case 98:
|
||||
#line 2621 "shortcodes.c"
|
||||
#line 2623 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st7;
|
||||
case 123: goto tr18;
|
||||
@@ -2649,7 +2651,7 @@ st145:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof145;
|
||||
case 145:
|
||||
#line 2653 "shortcodes.c"
|
||||
#line 2655 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st7;
|
||||
case 123: goto tr18;
|
||||
@@ -2665,7 +2667,7 @@ st100:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof100;
|
||||
case 100:
|
||||
#line 2669 "shortcodes.c"
|
||||
#line 2671 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr197;
|
||||
case 34: goto st7;
|
||||
@@ -2695,7 +2697,7 @@ st101:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof101;
|
||||
case 101:
|
||||
#line 2699 "shortcodes.c"
|
||||
#line 2701 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr197;
|
||||
case 34: goto st7;
|
||||
@@ -2727,7 +2729,7 @@ st102:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof102;
|
||||
case 102:
|
||||
#line 2731 "shortcodes.c"
|
||||
#line 2733 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr186;
|
||||
case 123: goto tr18;
|
||||
@@ -2769,7 +2771,7 @@ st104:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof104;
|
||||
case 104:
|
||||
#line 2773 "shortcodes.c"
|
||||
#line 2775 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr204;
|
||||
case 34: goto st7;
|
||||
@@ -2816,7 +2818,7 @@ st105:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof105;
|
||||
case 105:
|
||||
#line 2820 "shortcodes.c"
|
||||
#line 2822 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st105;
|
||||
case 34: goto tr207;
|
||||
@@ -2846,7 +2848,7 @@ st106:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof106;
|
||||
case 106:
|
||||
#line 2850 "shortcodes.c"
|
||||
#line 2852 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr211;
|
||||
case 34: goto st108;
|
||||
@@ -2867,7 +2869,7 @@ st107:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof107;
|
||||
case 107:
|
||||
#line 2871 "shortcodes.c"
|
||||
#line 2873 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st108;
|
||||
case 123: goto tr215;
|
||||
@@ -2913,7 +2915,7 @@ st109:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof109;
|
||||
case 109:
|
||||
#line 2917 "shortcodes.c"
|
||||
#line 2919 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st109;
|
||||
case 34: goto tr218;
|
||||
@@ -2943,7 +2945,7 @@ st110:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof110;
|
||||
case 110:
|
||||
#line 2947 "shortcodes.c"
|
||||
#line 2949 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr221;
|
||||
case 37: goto tr222;
|
||||
@@ -2972,7 +2974,7 @@ st111:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof111;
|
||||
case 111:
|
||||
#line 2976 "shortcodes.c"
|
||||
#line 2978 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr221;
|
||||
case 37: goto tr222;
|
||||
@@ -3003,7 +3005,7 @@ st112:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof112;
|
||||
case 112:
|
||||
#line 3007 "shortcodes.c"
|
||||
#line 3009 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr218;
|
||||
case 123: goto tr1;
|
||||
@@ -3027,7 +3029,7 @@ st113:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof113;
|
||||
case 113:
|
||||
#line 3031 "shortcodes.c"
|
||||
#line 3033 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st108;
|
||||
case 123: goto tr227;
|
||||
@@ -3043,7 +3045,7 @@ st114:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof114;
|
||||
case 114:
|
||||
#line 3047 "shortcodes.c"
|
||||
#line 3049 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st108;
|
||||
case 37: goto st115;
|
||||
@@ -3079,7 +3081,7 @@ st116:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof116;
|
||||
case 116:
|
||||
#line 3083 "shortcodes.c"
|
||||
#line 3085 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr231;
|
||||
case 34: goto st108;
|
||||
@@ -3126,7 +3128,7 @@ st117:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof117;
|
||||
case 117:
|
||||
#line 3130 "shortcodes.c"
|
||||
#line 3132 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st117;
|
||||
case 34: goto tr236;
|
||||
@@ -3156,7 +3158,7 @@ st118:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof118;
|
||||
case 118:
|
||||
#line 3160 "shortcodes.c"
|
||||
#line 3162 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr241;
|
||||
case 34: goto st7;
|
||||
@@ -3194,7 +3196,7 @@ st119:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof119;
|
||||
case 119:
|
||||
#line 3198 "shortcodes.c"
|
||||
#line 3200 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st108;
|
||||
case 123: goto tr215;
|
||||
@@ -3221,7 +3223,7 @@ st121:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof121;
|
||||
case 121:
|
||||
#line 3225 "shortcodes.c"
|
||||
#line 3227 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr243;
|
||||
case 34: goto st108;
|
||||
@@ -3268,7 +3270,7 @@ st122:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof122;
|
||||
case 122:
|
||||
#line 3272 "shortcodes.c"
|
||||
#line 3274 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st108;
|
||||
case 123: goto tr215;
|
||||
@@ -3300,7 +3302,7 @@ st146:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof146;
|
||||
case 146:
|
||||
#line 3304 "shortcodes.c"
|
||||
#line 3306 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto st108;
|
||||
case 123: goto tr215;
|
||||
@@ -3316,7 +3318,7 @@ st124:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof124;
|
||||
case 124:
|
||||
#line 3320 "shortcodes.c"
|
||||
#line 3322 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr243;
|
||||
case 34: goto st108;
|
||||
@@ -3348,7 +3350,7 @@ st125:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof125;
|
||||
case 125:
|
||||
#line 3352 "shortcodes.c"
|
||||
#line 3354 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr236;
|
||||
case 123: goto tr215;
|
||||
@@ -3390,7 +3392,7 @@ st127:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof127;
|
||||
case 127:
|
||||
#line 3394 "shortcodes.c"
|
||||
#line 3396 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr252;
|
||||
case 34: goto st108;
|
||||
@@ -3437,7 +3439,7 @@ st128:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof128;
|
||||
case 128:
|
||||
#line 3441 "shortcodes.c"
|
||||
#line 3443 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto st128;
|
||||
case 34: goto tr255;
|
||||
@@ -3467,7 +3469,7 @@ st129:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof129;
|
||||
case 129:
|
||||
#line 3471 "shortcodes.c"
|
||||
#line 3473 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr258;
|
||||
case 34: goto st108;
|
||||
@@ -3488,7 +3490,7 @@ st130:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof130;
|
||||
case 130:
|
||||
#line 3492 "shortcodes.c"
|
||||
#line 3494 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr259;
|
||||
case 34: goto st108;
|
||||
@@ -3518,7 +3520,7 @@ st131:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof131;
|
||||
case 131:
|
||||
#line 3522 "shortcodes.c"
|
||||
#line 3524 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr259;
|
||||
case 34: goto st108;
|
||||
@@ -3550,7 +3552,7 @@ st132:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof132;
|
||||
case 132:
|
||||
#line 3554 "shortcodes.c"
|
||||
#line 3556 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr255;
|
||||
case 123: goto tr215;
|
||||
@@ -3574,7 +3576,7 @@ st133:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof133;
|
||||
case 133:
|
||||
#line 3578 "shortcodes.c"
|
||||
#line 3580 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr263;
|
||||
case 34: goto st7;
|
||||
@@ -3604,7 +3606,7 @@ st134:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof134;
|
||||
case 134:
|
||||
#line 3608 "shortcodes.c"
|
||||
#line 3610 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr263;
|
||||
case 34: goto st7;
|
||||
@@ -3636,7 +3638,7 @@ st135:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof135;
|
||||
case 135:
|
||||
#line 3640 "shortcodes.c"
|
||||
#line 3642 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr207;
|
||||
case 123: goto tr18;
|
||||
@@ -3660,7 +3662,7 @@ st136:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof136;
|
||||
case 136:
|
||||
#line 3664 "shortcodes.c"
|
||||
#line 3666 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr267;
|
||||
case 37: goto tr224;
|
||||
@@ -3689,7 +3691,7 @@ st137:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof137;
|
||||
case 137:
|
||||
#line 3693 "shortcodes.c"
|
||||
#line 3695 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr267;
|
||||
case 37: goto tr224;
|
||||
@@ -3720,7 +3722,7 @@ st138:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof138;
|
||||
case 138:
|
||||
#line 3724 "shortcodes.c"
|
||||
#line 3726 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 34: goto tr11;
|
||||
case 123: goto tr1;
|
||||
@@ -3761,7 +3763,7 @@ st140:
|
||||
if ( ++p == pe )
|
||||
goto _test_eof140;
|
||||
case 140:
|
||||
#line 3765 "shortcodes.c"
|
||||
#line 3767 "shortcodes.c"
|
||||
switch( (*p) ) {
|
||||
case 32: goto tr272;
|
||||
case 37: goto tr9;
|
||||
@@ -3932,7 +3934,7 @@ case 140:
|
||||
_test_eof: {}
|
||||
}
|
||||
|
||||
#line 132 "shortcodes.rl"
|
||||
#line 134 "shortcodes.rl"
|
||||
|
||||
result.sccount = c_sc;
|
||||
return result;
|
||||
|
@@ -1,6 +1,5 @@
|
||||
@[Link(ldflags: "#{__DIR__}/shortcodes.o")]
|
||||
lib Shortcodes
|
||||
|
||||
lib LibShortcodes
|
||||
struct Chunk
|
||||
start : UInt32
|
||||
len : UInt32
|
||||
@@ -28,5 +27,92 @@ lib Shortcodes
|
||||
errcount : UInt32
|
||||
end
|
||||
|
||||
fun parse(input : Pointer(LibC::Char)) : ScResult;
|
||||
fun parse(input : Pointer(LibC::Char), len : UInt32) : ScResult
|
||||
end
|
||||
|
||||
module Shortcodes
|
||||
struct Arg
|
||||
property name : String = ""
|
||||
property value : String = ""
|
||||
|
||||
def initialize(@name, @value)
|
||||
end
|
||||
end
|
||||
|
||||
struct Error
|
||||
property position : UInt32
|
||||
property code : UInt32
|
||||
|
||||
def initialize(@position, @code)
|
||||
end
|
||||
end
|
||||
|
||||
struct Shortcode
|
||||
property name : String = ""
|
||||
property data : String = ""
|
||||
property matching : Int32 = 0
|
||||
property args : Array(Arg) = [] of Arg
|
||||
property whole : String = ""
|
||||
|
||||
def initialize(
|
||||
@name,
|
||||
@data,
|
||||
@matching,
|
||||
@args,
|
||||
@whole
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
struct Result
|
||||
property shortcodes : Array(Shortcode) = [] of Shortcode
|
||||
property errors : Array(Error) = [] of Error
|
||||
end
|
||||
|
||||
def extract(c : LibShortcodes::Chunk, s : String)
|
||||
s[c.start, c.len]
|
||||
end
|
||||
|
||||
def parse(input : String)
|
||||
r = LibShortcodes.parse(input.to_unsafe, input.bytesize)
|
||||
result = Result.new
|
||||
|
||||
(0...r.sccount).each do |i|
|
||||
sc = r.shortcodes[i]
|
||||
args = [] of Arg
|
||||
(0...sc.argcount).each do |j|
|
||||
args << Arg.new(
|
||||
extract(sc.argnames[j], input),
|
||||
extract(sc.argvals[j], input),
|
||||
)
|
||||
end
|
||||
|
||||
result.shortcodes << Shortcode.new(
|
||||
extract(sc.name, input),
|
||||
extract(sc.data, input),
|
||||
sc.matching,
|
||||
args,
|
||||
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
|
||||
#
|
||||
# You are closing the wrong shortcode.
|
||||
# Example:
|
||||
# {{% foo %}} {{% /bar %}}
|
||||
ERR_MISMATCHED_CLOSING_TAG = 1
|
||||
|
||||
# You are using mismatched brackets.
|
||||
# Example:
|
||||
# {{% foo >}}
|
||||
ERR_MISMATCHED_BRACKET = 2
|
||||
end
|
@@ -57,4 +57,4 @@ Example:
|
||||
#define ERR_MISMATCHED_BRACKET 2
|
||||
|
||||
|
||||
sc_result parse(char *);
|
||||
sc_result parse(char *, unsigned int);
|
||||
|
@@ -110,17 +110,19 @@
|
||||
}%%
|
||||
|
||||
|
||||
sc_result parse(char *input) {
|
||||
sc_result parse(char *input, unsigned int len) {
|
||||
|
||||
%%write data;
|
||||
char *eof, *ts, *te = 0;
|
||||
char *eof = input + len;
|
||||
char *ts, *te = 0;
|
||||
int cs, act = 0;
|
||||
|
||||
char *start = input;
|
||||
char *p = input;
|
||||
char *pe = p + strlen(input);
|
||||
char *pe = p + len;
|
||||
|
||||
sc_result result;
|
||||
result.errcount = 0;
|
||||
shortcode *sc_list = result.sc;
|
||||
int c_sc = 0;
|
||||
|
||||
|
226
tests.c
226
tests.c
@@ -1,226 +0,0 @@
|
||||
#include <cgreen/cgreen.h>
|
||||
#include <bglibs/str.h>
|
||||
#include "shortcodes.h"
|
||||
|
||||
Describe(parse);
|
||||
BeforeEach(parse) {}
|
||||
AfterEach(parse) {}
|
||||
|
||||
sc_result result;
|
||||
str s;
|
||||
|
||||
void chunk_s(char *buffer, chunk c)
|
||||
{
|
||||
str_copyb(&s, buffer + c.start, c.len);
|
||||
}
|
||||
|
||||
Ensure(parse, empty_string)
|
||||
{
|
||||
char *input = "";
|
||||
result = parse(input);
|
||||
// This means no shortcodes in it
|
||||
assert_that(result.sccount, is_equal_to(0));
|
||||
assert_that(result.errcount, is_equal_to(0));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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_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, 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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
Ensure(parse, multiple_shortcodes)
|
||||
{
|
||||
char *input = "foobar {{% shortcode %}}blah {{<sc2 >}}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("{{<sc2 >}}"));
|
||||
assert_that(result.errcount, is_equal_to(0));
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
// 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));
|
||||
|
||||
// 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));
|
||||
|
||||
// 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));
|
||||
}
|
||||
|
||||
// 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));
|
||||
// }
|
Reference in New Issue
Block a user