39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/langscan/javascript.rb', line 39
def scan_unsorted(input, &block)
pm = LangScan::PairMatcher.new(1,0,0,1)
pm.define_intertoken_fragment :space, nil
pm.define_intertoken_fragment :comment, nil
pm.define_pair :paren, :punct, "(", :punct, ")"
pm.define_pair :brace, :punct, "{", :punct, "}"
pm.define_pair :bracket, :punct, "[", :punct, "]"
pm.parse(LangScan::JavaScript::Tokenizer.new(input), lambda {|f|
if f.type == :ident
f.type = IdentType[f.text]
end
yield f
}) {|pair|
if pair.pair_type == :paren &&
1 <= pair.before_open_length &&
pair.around_open(-1).type == :ident && IdentType[pair.around_open(-1).text] == :ident
before_open_token = pair.around_open(-1)
if !KeywordsHash[before_open_token.text]
if !(outer = pair.outer) || !outer.outer
if 1 <= pair.after_close_length &&
pair.around_close(1).type == :punct &&
pair.around_close(1).text == '{'
before_open_token.type = :fundef
else
before_open_token.type = :funcall
end
else
before_open_token.type = :funcall
end
end
end
}
end
|