Looks like I broke compilation???
This commit is contained in:
parent
817eea895a
commit
ca9ef0d4f7
@ -1,12 +1,15 @@
|
||||
require "./spec_helper"
|
||||
include Shortcodes
|
||||
|
||||
describe "Shortcodes" do
|
||||
# TODO: Write tests
|
||||
|
||||
it "works" do
|
||||
result = Shortcodes.parse("foo{{% bar %}}baz{{% /bar %}}qux")
|
||||
result.sccount.should eq 1
|
||||
result.shortcodes[0].matching.should eq 1
|
||||
parse("foo{{% bar %}}baz{{% /bar %}}qux")
|
||||
# p! result.shortcodes
|
||||
# result.shortcodes.size.should eq 1
|
||||
# result.shortcodes[0].args.size.should eq 0
|
||||
# result.shortcodes[0].name.should eq "bar"
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
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/**"
|
@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
|
||||
sc_result parse(char *input) {
|
||||
sc_result parse(char *input, unsigned int len) {
|
||||
|
||||
|
||||
#line 15 "shortcodes.c"
|
||||
@ -25,7 +25,7 @@ static const int shortcode_en_main = 141;
|
||||
|
||||
char *start = input;
|
||||
char *p = input;
|
||||
char *pe = p + strlen(input);
|
||||
char *pe = p + len;
|
||||
|
||||
sc_result result;
|
||||
shortcode *sc_list = result.sc;
|
||||
|
@ -1,5 +1,5 @@
|
||||
@[Link(ldflags: "#{__DIR__}/shortcodes.o")]
|
||||
lib Shortcodes
|
||||
lib LibShortcodes
|
||||
struct Chunk
|
||||
start : UInt32
|
||||
len : UInt32
|
||||
@ -27,5 +27,59 @@ 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 Shortcode
|
||||
property name : String = ""
|
||||
property data : String = ""
|
||||
property matching : Int32 = 0
|
||||
property args : Array(Arg) = [] of Arg
|
||||
|
||||
def initialize(@name, @data, @matching, @args)
|
||||
end
|
||||
end
|
||||
|
||||
struct Result
|
||||
property shortcodes : Array(Shortcode) = [] of Shortcode
|
||||
end
|
||||
|
||||
def extract(c : LibShortcodes::Chunk, s : String)
|
||||
s[c.start, c.len]
|
||||
end
|
||||
|
||||
def parse(input : String)
|
||||
p! 111
|
||||
r = LibShortcodes.parse(input.to_unsafe, input.bytesize)
|
||||
p! 222
|
||||
result = Result.new
|
||||
|
||||
r.shortcodes.each_with_index.map do |sc, i|
|
||||
next if i >= r.sccount
|
||||
args = [] of Arg
|
||||
sc.argnames.each_with_index.map do |_, j|
|
||||
next if i >= sc.argcount
|
||||
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,
|
||||
)
|
||||
end
|
||||
r
|
||||
end
|
||||
end
|
||||
|
@ -57,4 +57,4 @@ Example:
|
||||
#define ERR_MISMATCHED_BRACKET 2
|
||||
|
||||
|
||||
sc_result parse(char *);
|
||||
sc_result parse(char *, unsigned int);
|
||||
|
@ -110,7 +110,7 @@
|
||||
}%%
|
||||
|
||||
|
||||
sc_result parse(char *input) {
|
||||
sc_result parse(char *input, unsigned int len) {
|
||||
|
||||
%%write data;
|
||||
char *eof, *ts, *te = 0;
|
||||
@ -118,7 +118,7 @@ sc_result parse(char *input) {
|
||||
|
||||
char *start = input;
|
||||
char *p = input;
|
||||
char *pe = p + strlen(input);
|
||||
char *pe = p + len;
|
||||
|
||||
sc_result result;
|
||||
shortcode *sc_list = result.sc;
|
||||
|
Loading…
Reference in New Issue
Block a user