]>
Commit | Line | Data |
---|---|---|
0d23b6e5 BB |
1 | // Copyright 2010 Wincent Colaiuta. All rights reserved. |
2 | // | |
3 | // Redistribution and use in source and binary forms, with or without | |
4 | // modification, are permitted provided that the following conditions are met: | |
5 | // | |
6 | // 1. Redistributions of source code must retain the above copyright notice, | |
7 | // this list of conditions and the following disclaimer. | |
8 | // 2. Redistributions in binary form must reproduce the above copyright notice, | |
9 | // this list of conditions and the following disclaimer in the documentation | |
10 | // and/or other materials provided with the distribution. | |
11 | // | |
12 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
13 | // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
14 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
15 | // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE | |
16 | // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
17 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
18 | // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
19 | // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
20 | // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
21 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
22 | // POSSIBILITY OF SUCH DAMAGE. | |
23 | ||
24 | #include "match.h" | |
25 | #include "matcher.h" | |
26 | ||
27 | VALUE mCommandT = 0; // module CommandT | |
28 | VALUE cCommandTMatch = 0; // class CommandT::Match | |
29 | VALUE cCommandTMatcher = 0; // class CommandT::Matcher | |
30 | ||
31 | VALUE CommandT_option_from_hash(const char *option, VALUE hash) | |
32 | { | |
33 | if (NIL_P(hash)) | |
34 | return Qnil; | |
35 | VALUE key = ID2SYM(rb_intern(option)); | |
36 | if (rb_funcall(hash, rb_intern("has_key?"), 1, key) == Qtrue) | |
37 | return rb_hash_aref(hash, key); | |
38 | else | |
39 | return Qnil; | |
40 | } | |
41 | ||
42 | void Init_ext() | |
43 | { | |
44 | // module CommandT | |
45 | mCommandT = rb_define_module("CommandT"); | |
46 | ||
47 | // class CommandT::Match | |
48 | cCommandTMatch = rb_define_class_under(mCommandT, "Match", rb_cObject); | |
49 | ||
50 | // methods | |
51 | rb_define_method(cCommandTMatch, "initialize", CommandTMatch_initialize, -1); | |
52 | rb_define_method(cCommandTMatch, "matches?", CommandTMatch_matches, 0); | |
53 | rb_define_method(cCommandTMatch, "to_s", CommandTMatch_to_s, 0); | |
54 | ||
55 | // attributes | |
56 | rb_define_attr(cCommandTMatch, "score", Qtrue, Qfalse); // reader: true, writer: false | |
57 | ||
58 | // class CommandT::Matcher | |
59 | cCommandTMatcher = rb_define_class_under(mCommandT, "Matcher", rb_cObject); | |
60 | ||
61 | // methods | |
62 | rb_define_method(cCommandTMatcher, "initialize", CommandTMatcher_initialize, -1); | |
63 | rb_define_method(cCommandTMatcher, "sorted_matches_for", CommandTMatcher_sorted_matches_for, 2); | |
64 | rb_define_method(cCommandTMatcher, "matches_for", CommandTMatcher_matches_for, 1); | |
65 | } |