linkparser 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * linkparser.c - Ruby LinkParser
3
- * $Id: linkparser.c 48 2008-12-19 18:30:33Z deveiant $
3
+ * $Id: linkparser.c,v 53ec62029ee4 2010/10/12 15:45:26 ged $
4
4
  *
5
5
  * Authors:
6
6
  * * Michael Granger <ged@FaerieMUD.org>
@@ -90,6 +90,7 @@ static VALUE
90
90
  rlink_link_grammar_version( VALUE self ) {
91
91
  #ifdef HAVE_LINKGRAMMAR_GET_VERSION
92
92
  const char *version = linkgrammar_get_version();
93
+ if ( !version ) rb_bug( "linkgrammar_get_version returned NULL pointer" );
93
94
  return rb_str_new2( version );
94
95
  #else
95
96
  return rb_str_new2( "link-grammar-4.3.9-or-earlier" );
@@ -109,7 +110,7 @@ Init_linkparser_ext() {
109
110
 
110
111
  rb_define_singleton_method( rlink_mLinkParser, "link_grammar_version",
111
112
  rlink_link_grammar_version, 0 );
112
-
113
+
113
114
  setlocale( LC_ALL, "" );
114
115
 
115
116
  rlink_init_dict();
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * linkparser.h - Ruby-LinkParser Header
3
- * $Id: linkparser.h 39 2008-11-18 16:18:11Z deveiant $
3
+ * $Id: linkparser.h,v 53ec62029ee4 2010/10/12 15:45:26 ged $
4
4
  *
5
5
  * Authors:
6
6
  * * Michael Granger <ged@FaerieMUD.org>
@@ -16,12 +16,12 @@
16
16
  #include <locale.h>
17
17
  #include <stdlib.h>
18
18
  #include <stdio.h>
19
+ #include <assert.h>
19
20
 
20
- #include <ruby.h>
21
- #include <intern.h> /* For rb_dbl2big() */
22
-
23
- #include <link-grammar/link-includes.h>
21
+ #include "ruby.h"
22
+ #include "ruby/intern.h"
24
23
 
24
+ #include "link-grammar/link-includes.h"
25
25
 
26
26
 
27
27
  /* Debugging functions/macros */
@@ -62,18 +62,22 @@ extern VALUE rlink_eLpError;
62
62
 
63
63
  /*
64
64
  * Structures
65
- */
66
- typedef struct {
65
+ */
66
+ struct rlink_dictionary {
67
+ Dictionary dict;
68
+ };
69
+
70
+ struct rlink_sentence {
67
71
  Sentence sentence;
68
72
  VALUE dictionary;
69
73
  VALUE parsed_p;
70
74
  VALUE options;
71
- } rlink_SENTENCE;
75
+ };
72
76
 
73
- typedef struct {
77
+ struct rlink_linkage {
74
78
  Linkage linkage;
75
79
  VALUE sentence;
76
- } rlink_LINKAGE;
80
+ };
77
81
 
78
82
 
79
83
 
@@ -98,15 +102,15 @@ typedef struct {
98
102
  /* -------------------------------------------------------
99
103
  * Initializer functions
100
104
  * ------------------------------------------------------- */
101
- extern void rlink_init_dict _(( void ));
102
- extern void rlink_init_sentence _(( void ));
103
- extern void rlink_init_linkage _(( void ));
104
- extern void rlink_init_parseoptions _(( void ));
105
+ extern void rlink_init_dict _(( void ));
106
+ extern void rlink_init_sentence _(( void ));
107
+ extern void rlink_init_linkage _(( void ));
108
+ extern void rlink_init_parseoptions _(( void ));
105
109
 
106
110
  /* Fetchers */
107
- extern Dictionary rlink_get_dict _(( VALUE ));
108
- extern rlink_SENTENCE *rlink_get_sentence _(( VALUE ));
109
- extern Parse_Options rlink_get_parseopts _(( VALUE ));
111
+ extern struct rlink_dictionary * rlink_get_dict _(( VALUE ));
112
+ extern struct rlink_sentence *rlink_get_sentence _(( VALUE ));
113
+ extern Parse_Options rlink_get_parseopts _(( VALUE ));
110
114
 
111
115
  #endif /* _R_LINKPARSER_H */
112
116
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * parseoptions.c - Ruby LinkParser::ParseOptions class
3
- * $Id: parseoptions.c 53 2009-06-03 12:52:13Z deveiant $
3
+ * $Id: parseoptions.c,v 53ec62029ee4 2010/10/12 15:45:26 ged $
4
4
  *
5
5
  * Authors:
6
6
  * * Michael Granger <ged@FaerieMUD.org>
@@ -48,7 +48,7 @@ check_parseopts( VALUE self ) {
48
48
  rb_raise( rb_eTypeError, "wrong argument type %s (expected LinkParser::ParseOptions)",
49
49
  rb_class2name(CLASS_OF( self )) );
50
50
  }
51
-
51
+
52
52
  return DATA_PTR( self );
53
53
  }
54
54
 
@@ -114,7 +114,7 @@ rlink_parseopts_init( int argc, VALUE *argv, VALUE self ) {
114
114
  if ( ! check_parseopts(self) ) {
115
115
  Parse_Options opts;
116
116
  VALUE opthash = Qnil;
117
-
117
+
118
118
  debugMsg(( "Initializing a ParseOptions: %p", self ));
119
119
  DATA_PTR( self ) = opts = parse_options_create();
120
120
 
@@ -124,7 +124,7 @@ rlink_parseopts_init( int argc, VALUE *argv, VALUE self ) {
124
124
  rb_iterate( rb_each, opthash, rlink_parseopts_each_opthash_i, self );
125
125
  }
126
126
  }
127
-
127
+
128
128
  else {
129
129
  rb_raise( rb_eRuntimeError, "Cannot re-initialize a Dictionary object." );
130
130
  }
@@ -142,19 +142,19 @@ rlink_parseopts_each_opthash_i( VALUE pair, VALUE self ) {
142
142
  VALUE key, val, keystring;
143
143
  char *method_name;
144
144
  ID method;
145
-
145
+
146
146
  key = rb_ary_entry( pair, 0 );
147
147
  val = rb_ary_entry( pair, 1 );
148
148
 
149
149
  keystring = rb_obj_as_string( key );
150
-
151
- method_name = ALLOCA_N( char, RSTRING(keystring)->len + 1 );
152
- strncpy( method_name, RSTRING(keystring)->ptr, RSTRING(keystring)->len + 1 );
150
+
151
+ method_name = ALLOCA_N( char, RSTRING_LEN(keystring) + 1 );
152
+ strncpy( method_name, RSTRING_PTR(keystring), RSTRING_LEN(keystring) + 1 );
153
153
  strncat( method_name, "=", 1 );
154
-
154
+
155
155
  debugMsg(( "Calling method %s", method_name ));
156
156
  method = rb_intern( method_name );
157
-
157
+
158
158
  return rb_funcall( self, method, 1, val );
159
159
  }
160
160
 
@@ -168,7 +168,7 @@ rlink_parseopts_each_opthash_i( VALUE pair, VALUE self ) {
168
168
  */
169
169
  /*static VALUE
170
170
  rlink_parseopts_merge( VALUE self, other ) {
171
-
171
+
172
172
  }
173
173
  */
174
174
 
@@ -1105,7 +1105,7 @@ rlink_parseopts_reset_resources( VALUE self ) {
1105
1105
  */
1106
1106
  void
1107
1107
  rlink_init_parseoptions() {
1108
- rlink_cParseOptions = rb_define_class_under( rlink_mLinkParser,
1108
+ rlink_cParseOptions = rb_define_class_under( rlink_mLinkParser,
1109
1109
  "ParseOptions", rb_cObject );
1110
1110
 
1111
1111
  rb_define_alloc_func( rlink_cParseOptions, rlink_parseopts_s_alloc );
@@ -1114,113 +1114,113 @@ rlink_init_parseoptions() {
1114
1114
  rb_define_method( rlink_cParseOptions, "merge", rlink_parseopts_merge, 1 );
1115
1115
  rb_define_method( rlink_cParseOptions, "merge!", rlink_parseopts_merge_bang, 1 );
1116
1116
  */
1117
- rb_define_method( rlink_cParseOptions, "verbosity=",
1117
+ rb_define_method( rlink_cParseOptions, "verbosity=",
1118
1118
  rlink_parseopts_set_verbosity, 1 );
1119
- rb_define_method( rlink_cParseOptions, "verbosity",
1119
+ rb_define_method( rlink_cParseOptions, "verbosity",
1120
1120
  rlink_parseopts_get_verbosity, 0 );
1121
- rb_define_method( rlink_cParseOptions, "linkage_limit=",
1121
+ rb_define_method( rlink_cParseOptions, "linkage_limit=",
1122
1122
  rlink_parseopts_set_linkage_limit, 1 );
1123
- rb_define_method( rlink_cParseOptions, "linkage_limit",
1123
+ rb_define_method( rlink_cParseOptions, "linkage_limit",
1124
1124
  rlink_parseopts_get_linkage_limit, 0 );
1125
- rb_define_method( rlink_cParseOptions, "disjunct_cost=",
1125
+ rb_define_method( rlink_cParseOptions, "disjunct_cost=",
1126
1126
  rlink_parseopts_set_disjunct_cost, 1 );
1127
- rb_define_method( rlink_cParseOptions, "disjunct_cost",
1127
+ rb_define_method( rlink_cParseOptions, "disjunct_cost",
1128
1128
  rlink_parseopts_get_disjunct_cost, 0 );
1129
- rb_define_method( rlink_cParseOptions, "min_null_count=",
1129
+ rb_define_method( rlink_cParseOptions, "min_null_count=",
1130
1130
  rlink_parseopts_set_min_null_count, 1 );
1131
- rb_define_method( rlink_cParseOptions, "min_null_count",
1131
+ rb_define_method( rlink_cParseOptions, "min_null_count",
1132
1132
  rlink_parseopts_get_min_null_count, 0 );
1133
- rb_define_method( rlink_cParseOptions, "max_null_count=",
1133
+ rb_define_method( rlink_cParseOptions, "max_null_count=",
1134
1134
  rlink_parseopts_set_max_null_count, 1 );
1135
- rb_define_method( rlink_cParseOptions, "max_null_count",
1135
+ rb_define_method( rlink_cParseOptions, "max_null_count",
1136
1136
  rlink_parseopts_get_max_null_count, 0 );
1137
- rb_define_method( rlink_cParseOptions, "null_block=",
1137
+ rb_define_method( rlink_cParseOptions, "null_block=",
1138
1138
  rlink_parseopts_set_null_block, 1 );
1139
- rb_define_method( rlink_cParseOptions, "null_block",
1139
+ rb_define_method( rlink_cParseOptions, "null_block",
1140
1140
  rlink_parseopts_get_null_block, 0 );
1141
- rb_define_method( rlink_cParseOptions, "islands_ok=",
1141
+ rb_define_method( rlink_cParseOptions, "islands_ok=",
1142
1142
  rlink_parseopts_set_islands_ok, 1 );
1143
- rb_define_method( rlink_cParseOptions, "islands_ok?",
1143
+ rb_define_method( rlink_cParseOptions, "islands_ok?",
1144
1144
  rlink_parseopts_get_islands_ok_p, 0 );
1145
- rb_define_method( rlink_cParseOptions, "short_length=",
1145
+ rb_define_method( rlink_cParseOptions, "short_length=",
1146
1146
  rlink_parseopts_set_short_length, 1 );
1147
- rb_define_method( rlink_cParseOptions, "short_length",
1147
+ rb_define_method( rlink_cParseOptions, "short_length",
1148
1148
  rlink_parseopts_get_short_length, 0 );
1149
- rb_define_method( rlink_cParseOptions, "max_memory=",
1149
+ rb_define_method( rlink_cParseOptions, "max_memory=",
1150
1150
  rlink_parseopts_set_max_memory, 1 );
1151
- rb_define_method( rlink_cParseOptions, "max_memory",
1151
+ rb_define_method( rlink_cParseOptions, "max_memory",
1152
1152
  rlink_parseopts_get_max_memory, 0 );
1153
- rb_define_method( rlink_cParseOptions, "max_sentence_length=",
1153
+ rb_define_method( rlink_cParseOptions, "max_sentence_length=",
1154
1154
  rlink_parseopts_set_max_sentence_length, 1 );
1155
- rb_define_method( rlink_cParseOptions, "max_sentence_length",
1155
+ rb_define_method( rlink_cParseOptions, "max_sentence_length",
1156
1156
  rlink_parseopts_get_max_sentence_length, 0 );
1157
- rb_define_method( rlink_cParseOptions, "max_parse_time=",
1157
+ rb_define_method( rlink_cParseOptions, "max_parse_time=",
1158
1158
  rlink_parseopts_set_max_parse_time, 1 );
1159
- rb_define_method( rlink_cParseOptions, "max_parse_time",
1159
+ rb_define_method( rlink_cParseOptions, "max_parse_time",
1160
1160
  rlink_parseopts_get_max_parse_time, 0 );
1161
- rb_define_method( rlink_cParseOptions, "screen_width=",
1161
+ rb_define_method( rlink_cParseOptions, "screen_width=",
1162
1162
  rlink_parseopts_set_screen_width, 1 );
1163
- rb_define_method( rlink_cParseOptions, "screen_width",
1163
+ rb_define_method( rlink_cParseOptions, "screen_width",
1164
1164
  rlink_parseopts_get_screen_width, 0 );
1165
- rb_define_method( rlink_cParseOptions, "allow_null=",
1165
+ rb_define_method( rlink_cParseOptions, "allow_null=",
1166
1166
  rlink_parseopts_set_allow_null, 1 );
1167
- rb_define_method( rlink_cParseOptions, "allow_null?",
1167
+ rb_define_method( rlink_cParseOptions, "allow_null?",
1168
1168
  rlink_parseopts_get_allow_null_p, 0 );
1169
- rb_define_method( rlink_cParseOptions, "display_walls=",
1169
+ rb_define_method( rlink_cParseOptions, "display_walls=",
1170
1170
  rlink_parseopts_set_display_walls, 1 );
1171
- rb_define_method( rlink_cParseOptions, "display_walls?",
1171
+ rb_define_method( rlink_cParseOptions, "display_walls?",
1172
1172
  rlink_parseopts_get_display_walls_p, 0 );
1173
- rb_define_method( rlink_cParseOptions, "all_short_connectors=",
1173
+ rb_define_method( rlink_cParseOptions, "all_short_connectors=",
1174
1174
  rlink_parseopts_set_all_short_connectors, 1 );
1175
- rb_define_method( rlink_cParseOptions, "all_short_connectors?",
1175
+ rb_define_method( rlink_cParseOptions, "all_short_connectors?",
1176
1176
  rlink_parseopts_get_all_short_connectors_p, 0 );
1177
- rb_define_method( rlink_cParseOptions, "cost_model_type=",
1177
+ rb_define_method( rlink_cParseOptions, "cost_model_type=",
1178
1178
  rlink_parseopts_set_cost_model_type, 1 );
1179
1179
 
1180
1180
  /* (No way to get the cost_model_type from the API)
1181
1181
 
1182
- rb_define_method( rlink_cParseOptions, "cost_model_type",
1182
+ rb_define_method( rlink_cParseOptions, "cost_model_type",
1183
1183
  rlink_parseopts_get_cost_model_type, 0 );
1184
1184
  */
1185
- rb_define_method( rlink_cParseOptions, "batch_mode=",
1185
+ rb_define_method( rlink_cParseOptions, "batch_mode=",
1186
1186
  rlink_parseopts_set_batch_mode, 1 );
1187
- rb_define_method( rlink_cParseOptions, "batch_mode?",
1187
+ rb_define_method( rlink_cParseOptions, "batch_mode?",
1188
1188
  rlink_parseopts_get_batch_mode_p, 0 );
1189
- rb_define_method( rlink_cParseOptions, "panic_mode=",
1189
+ rb_define_method( rlink_cParseOptions, "panic_mode=",
1190
1190
  rlink_parseopts_set_panic_mode, 1 );
1191
- rb_define_method( rlink_cParseOptions, "panic_mode?",
1191
+ rb_define_method( rlink_cParseOptions, "panic_mode?",
1192
1192
  rlink_parseopts_get_panic_mode_p, 0 );
1193
- rb_define_method( rlink_cParseOptions, "display_on=",
1193
+ rb_define_method( rlink_cParseOptions, "display_on=",
1194
1194
  rlink_parseopts_set_display_on, 1 );
1195
- rb_define_method( rlink_cParseOptions, "display_on?",
1195
+ rb_define_method( rlink_cParseOptions, "display_on?",
1196
1196
  rlink_parseopts_get_display_on_p, 0 );
1197
- rb_define_method( rlink_cParseOptions, "display_postscript=",
1197
+ rb_define_method( rlink_cParseOptions, "display_postscript=",
1198
1198
  rlink_parseopts_set_display_postscript, 1 );
1199
- rb_define_method( rlink_cParseOptions, "display_postscript?",
1199
+ rb_define_method( rlink_cParseOptions, "display_postscript?",
1200
1200
  rlink_parseopts_get_display_postscript_p, 0 );
1201
- rb_define_method( rlink_cParseOptions, "display_constituents=",
1201
+ rb_define_method( rlink_cParseOptions, "display_constituents=",
1202
1202
  rlink_parseopts_set_display_constituents, 1 );
1203
- rb_define_method( rlink_cParseOptions, "display_constituents?",
1203
+ rb_define_method( rlink_cParseOptions, "display_constituents?",
1204
1204
  rlink_parseopts_get_display_constituents_p, 0 );
1205
- rb_define_method( rlink_cParseOptions, "display_bad=",
1205
+ rb_define_method( rlink_cParseOptions, "display_bad=",
1206
1206
  rlink_parseopts_set_display_bad, 1 );
1207
- rb_define_method( rlink_cParseOptions, "display_bad?",
1207
+ rb_define_method( rlink_cParseOptions, "display_bad?",
1208
1208
  rlink_parseopts_get_display_bad_p, 0 );
1209
- rb_define_method( rlink_cParseOptions, "display_links=",
1209
+ rb_define_method( rlink_cParseOptions, "display_links=",
1210
1210
  rlink_parseopts_set_display_links, 1 );
1211
- rb_define_method( rlink_cParseOptions, "display_links?",
1211
+ rb_define_method( rlink_cParseOptions, "display_links?",
1212
1212
  rlink_parseopts_get_display_links_p, 0 );
1213
- rb_define_method( rlink_cParseOptions, "display_union=",
1213
+ rb_define_method( rlink_cParseOptions, "display_union=",
1214
1214
  rlink_parseopts_set_display_union, 1 );
1215
- rb_define_method( rlink_cParseOptions, "display_union?",
1215
+ rb_define_method( rlink_cParseOptions, "display_union?",
1216
1216
  rlink_parseopts_get_display_union_p, 0 );
1217
- rb_define_method( rlink_cParseOptions, "echo_on=",
1217
+ rb_define_method( rlink_cParseOptions, "echo_on=",
1218
1218
  rlink_parseopts_set_echo_on, 1 );
1219
- rb_define_method( rlink_cParseOptions, "echo_on?",
1219
+ rb_define_method( rlink_cParseOptions, "echo_on?",
1220
1220
  rlink_parseopts_get_echo_on_p, 0 );
1221
- rb_define_method( rlink_cParseOptions, "spell_guessing_enabled=",
1221
+ rb_define_method( rlink_cParseOptions, "spell_guessing_enabled=",
1222
1222
  rlink_parseopts_set_spell_guess, 1 );
1223
- rb_define_method( rlink_cParseOptions, "spell_guessing_enabled?",
1223
+ rb_define_method( rlink_cParseOptions, "spell_guessing_enabled?",
1224
1224
  rlink_parseopts_get_spell_guess_p, 0 );
1225
1225
 
1226
1226
  rb_define_method( rlink_cParseOptions, "timer_expired?",
@@ -1231,6 +1231,6 @@ rlink_init_parseoptions() {
1231
1231
  rlink_parseopts_resources_exhausted_p, 0 );
1232
1232
  rb_define_method( rlink_cParseOptions, "reset_resources",
1233
1233
  rlink_parseopts_reset_resources, 0 );
1234
-
1234
+
1235
1235
  }
1236
1236
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * sentence.c - Ruby LinkParser
3
- * $Id: sentence.c 53 2009-06-03 12:52:13Z deveiant $
3
+ * $Id: sentence.c,v 53ec62029ee4 2010/10/12 15:45:26 ged $
4
4
  *
5
5
  * Authors:
6
6
  * * Michael Granger <ged@FaerieMUD.org>
@@ -29,16 +29,16 @@
29
29
  /*
30
30
  * Allocation function
31
31
  */
32
- static rlink_SENTENCE *
32
+ static struct rlink_sentence *
33
33
  rlink_sentence_alloc() {
34
- rlink_SENTENCE *ptr = ALLOC( rlink_SENTENCE );
35
-
34
+ struct rlink_sentence *ptr = ALLOC( struct rlink_sentence );
35
+
36
36
  ptr->sentence = NULL;
37
37
  ptr->dictionary = Qnil;
38
38
  ptr->parsed_p = Qfalse;
39
39
  ptr->options = Qnil;
40
-
41
- debugMsg(( "Initialized an rlink_SENTENCE <%p>", ptr ));
40
+
41
+ debugMsg(( "Initialized an rlink_sentence <%p>", ptr ));
42
42
  return ptr;
43
43
  }
44
44
 
@@ -47,16 +47,16 @@ rlink_sentence_alloc() {
47
47
  * GC Mark function
48
48
  */
49
49
  static void
50
- rlink_sentence_gc_mark( rlink_SENTENCE *ptr ) {
50
+ rlink_sentence_gc_mark( struct rlink_sentence *ptr ) {
51
51
  debugMsg(( "Marking LinkParser::Sentence %p", ptr ));
52
-
52
+
53
53
  if ( ptr ) {
54
54
  rb_gc_mark( ptr->dictionary );
55
55
  rb_gc_mark( ptr->options );
56
56
  }
57
-
57
+
58
58
  else {
59
- debugMsg(( "Not marking uninitialized rlink_SENTENCE" ));
59
+ debugMsg(( "Not marking uninitialized rlink_sentence struct" ));
60
60
  }
61
61
  }
62
62
 
@@ -65,24 +65,35 @@ rlink_sentence_gc_mark( rlink_SENTENCE *ptr ) {
65
65
  * GC Free function
66
66
  */
67
67
  static void
68
- rlink_sentence_gc_free( rlink_SENTENCE *ptr ) {
68
+ rlink_sentence_gc_free( struct rlink_sentence *ptr ) {
69
69
  if ( ptr ) {
70
70
  debugMsg(( "In free function of Sentence <%p>", ptr ));
71
-
72
- if ( rlink_get_dict(ptr->dictionary) ) {
73
- debugMsg(( "Freeing Sentence <%p>", ptr->sentence ));
74
- sentence_delete( (Sentence)ptr->sentence );
71
+
72
+ if ( ptr->dictionary && TYPE(ptr->dictionary) == T_DATA ) {
73
+ struct rlink_dictionary *dictionary = rlink_get_dict( ptr->dictionary );
74
+ debugMsg(( " sentence's dictionary is: <%p>", dictionary ));
75
+
76
+ /* Freeing the dictionary automatically frees the sentences it belongs to, so
77
+ don't double-free if the dictionary struct or its pointer is done. */
78
+ if ( dictionary->dict ) {
79
+ debugMsg(( " deleting Sentence <%p>", ptr->sentence ));
80
+ sentence_delete( (Sentence)ptr->sentence );
81
+ }
75
82
  } else {
76
- debugMsg(( "Not freeing a Sentence belonging to an already-freed dictionary." ));
83
+ debugMsg(( " not deleting a Sentence belonging to an already-freed dictionary." ));
77
84
  }
78
85
 
79
86
  ptr->sentence = NULL;
80
87
  ptr->options = Qnil;
81
88
  ptr->dictionary = Qnil;
89
+
90
+ debugMsg(( " freeing rlink_sentence <%p>", ptr ));
91
+ xfree( ptr );
92
+ ptr = NULL;
82
93
  }
83
-
94
+
84
95
  else {
85
- debugMsg(( "Not freeing an uninitialized rlink_SENTENCE" ));
96
+ debugMsg(( "Not freeing an uninitialized rlink_sentence struct" ));
86
97
  }
87
98
  }
88
99
 
@@ -90,7 +101,7 @@ rlink_sentence_gc_free( rlink_SENTENCE *ptr ) {
90
101
  /*
91
102
  * Object validity checker. Returns the data pointer.
92
103
  */
93
- static rlink_SENTENCE *
104
+ static struct rlink_sentence *
94
105
  check_sentence( VALUE self ) {
95
106
  Check_Type( self, T_DATA );
96
107
 
@@ -98,7 +109,7 @@ check_sentence( VALUE self ) {
98
109
  rb_raise( rb_eTypeError, "wrong argument type %s (expected LinkParser::Sentence)",
99
110
  rb_class2name(CLASS_OF( self )) );
100
111
  }
101
-
112
+
102
113
  return DATA_PTR( self );
103
114
  }
104
115
 
@@ -106,9 +117,9 @@ check_sentence( VALUE self ) {
106
117
  /*
107
118
  * Fetch the data pointer and check it for sanity.
108
119
  */
109
- static rlink_SENTENCE *
120
+ static struct rlink_sentence *
110
121
  get_sentence( VALUE self ) {
111
- rlink_SENTENCE *ptr = check_sentence( self );
122
+ struct rlink_sentence *ptr = check_sentence( self );
112
123
 
113
124
  if ( !ptr )
114
125
  rb_raise( rb_eRuntimeError, "uninitialized Sentence" );
@@ -120,7 +131,7 @@ get_sentence( VALUE self ) {
120
131
  /*
121
132
  * Publicly-usable sentence-fetcher
122
133
  */
123
- rlink_SENTENCE *
134
+ struct rlink_sentence *
124
135
  rlink_get_sentence( VALUE self ) {
125
136
  return get_sentence( self );
126
137
  }
@@ -162,19 +173,19 @@ rlink_sentence_s_alloc( VALUE klass ) {
162
173
  static VALUE
163
174
  rlink_sentence_init( VALUE self, VALUE input_string, VALUE dictionary ) {
164
175
  if ( !check_sentence(self) ) {
165
- rlink_SENTENCE *ptr;
176
+ struct rlink_sentence *ptr;
166
177
  Sentence sent;
167
- Dictionary dict = rlink_get_dict( dictionary );
168
-
169
- if ( !(sent = sentence_create( StringValueCStr(input_string), dict )) )
178
+ struct rlink_dictionary *dictptr = rlink_get_dict( dictionary );
179
+
180
+ if ( !(sent = sentence_create( StringValueCStr(input_string), dictptr->dict )) )
170
181
  rlink_raise_lp_error();
171
182
 
172
183
  DATA_PTR( self ) = ptr = rlink_sentence_alloc();
173
-
184
+
174
185
  ptr->sentence = sent;
175
186
  ptr->dictionary = dictionary;
176
187
  ptr->options = Qnil;
177
-
188
+
178
189
  } else {
179
190
  rb_raise( rb_eRuntimeError,
180
191
  "Cannot re-initialize a sentence once it's been created." );
@@ -195,7 +206,7 @@ rlink_sentence_init( VALUE self, VALUE input_string, VALUE dictionary ) {
195
206
  */
196
207
  static VALUE
197
208
  rlink_sentence_parse( int argc, VALUE *argv, VALUE self ) {
198
- rlink_SENTENCE *ptr = get_sentence( self );
209
+ struct rlink_sentence *ptr = get_sentence( self );
199
210
  Parse_Options opts;
200
211
  VALUE defopts = Qnil;
201
212
  VALUE options = Qnil;
@@ -223,7 +234,7 @@ rlink_sentence_parse( int argc, VALUE *argv, VALUE self ) {
223
234
 
224
235
  ptr->options = options;
225
236
  ptr->parsed_p = Qtrue;
226
-
237
+
227
238
  return INT2FIX( link_count );
228
239
  }
229
240
 
@@ -240,7 +251,7 @@ rlink_sentence_parse( int argc, VALUE *argv, VALUE self ) {
240
251
  */
241
252
  static VALUE
242
253
  rlink_sentence_parsed_p( VALUE self ) {
243
- rlink_SENTENCE *ptr = get_sentence( self );
254
+ struct rlink_sentence *ptr = get_sentence( self );
244
255
  return ptr->parsed_p;
245
256
  }
246
257
 
@@ -256,7 +267,7 @@ rlink_sentence_parsed_p( VALUE self ) {
256
267
  */
257
268
  static VALUE
258
269
  rlink_sentence_options( VALUE self ) {
259
- rlink_SENTENCE *ptr = get_sentence( self );
270
+ struct rlink_sentence *ptr = get_sentence( self );
260
271
  return ptr->options;
261
272
  }
262
273
 
@@ -273,7 +284,7 @@ rlink_sentence_options( VALUE self ) {
273
284
  */
274
285
  static VALUE
275
286
  rlink_sentence_linkages( VALUE self ) {
276
- rlink_SENTENCE *ptr = get_sentence( self );
287
+ struct rlink_sentence *ptr = get_sentence( self );
277
288
  int i, count = 0;
278
289
  VALUE rary;
279
290
 
@@ -282,18 +293,18 @@ rlink_sentence_linkages( VALUE self ) {
282
293
 
283
294
  count = sentence_num_valid_linkages( (Sentence)ptr->sentence );
284
295
  rary = rb_ary_new2( count );
285
-
296
+
286
297
  for ( i = 0; i < count; i++ ) {
287
298
  VALUE linkage;
288
299
  VALUE args[2];
289
-
300
+
290
301
  args[0] = INT2FIX( i );
291
302
  args[1] = self;
292
-
303
+
293
304
  linkage = rb_class_new_instance( 2, args, rlink_cLinkage );
294
305
  rb_ary_store( rary, i, linkage );
295
306
  }
296
-
307
+
297
308
  return rary;
298
309
  }
299
310
 
@@ -309,14 +320,14 @@ rlink_sentence_linkages( VALUE self ) {
309
320
 
310
321
  static VALUE
311
322
  rlink_sentence_length( VALUE self ) {
312
- rlink_SENTENCE *ptr = get_sentence( self );
323
+ struct rlink_sentence *ptr = get_sentence( self );
313
324
 
314
325
  if ( !RTEST(ptr->parsed_p) )
315
326
  rlink_sentence_parse( 0, 0, self );
316
327
 
317
328
  return INT2FIX( sentence_length((Sentence)ptr->sentence) );
318
329
  }
319
-
330
+
320
331
 
321
332
  /*
322
333
  * call-seq:
@@ -327,9 +338,9 @@ rlink_sentence_length( VALUE self ) {
327
338
  */
328
339
  static VALUE
329
340
  rlink_sentence_word( VALUE self, VALUE n ) {
330
- rlink_SENTENCE *ptr = get_sentence( self );
341
+ struct rlink_sentence *ptr = get_sentence( self );
331
342
  const char *word;
332
-
343
+
333
344
  if ( !RTEST(ptr->parsed_p) )
334
345
  rlink_sentence_parse( 0, 0, self );
335
346
 
@@ -349,11 +360,11 @@ rlink_sentence_word( VALUE self, VALUE n ) {
349
360
  */
350
361
  static VALUE
351
362
  rlink_sentence_words( VALUE self ) {
352
- rlink_SENTENCE *ptr = get_sentence( self );
363
+ struct rlink_sentence *ptr = get_sentence( self );
353
364
  const char *word;
354
365
  int i, length;
355
366
  VALUE words = rb_ary_new();
356
-
367
+
357
368
  if ( !RTEST(ptr->parsed_p) )
358
369
  rlink_sentence_parse( 0, 0, self );
359
370
 
@@ -363,7 +374,7 @@ rlink_sentence_words( VALUE self ) {
363
374
  debugMsg(( "Word %d: <%s>", i, word ));
364
375
  rb_ary_push( words, rb_str_new2(word) );
365
376
  }
366
-
377
+
367
378
  return words;
368
379
  }
369
380
 
@@ -406,16 +417,16 @@ rlink_sentence_aref( argc, argv, self )
406
417
  */
407
418
  static VALUE
408
419
  rlink_sentence_null_count( VALUE self ) {
409
- rlink_SENTENCE *ptr = get_sentence( self );
420
+ struct rlink_sentence *ptr = get_sentence( self );
410
421
  int count;
411
-
422
+
412
423
  if ( !RTEST(ptr->parsed_p) )
413
424
  rlink_sentence_parse( 0, 0, self );
414
425
 
415
426
  count = sentence_null_count( (Sentence)ptr->sentence );
416
427
  return INT2FIX( count );
417
428
  }
418
-
429
+
419
430
 
420
431
  /*
421
432
  * call-seq:
@@ -426,14 +437,14 @@ rlink_sentence_null_count( VALUE self ) {
426
437
  */
427
438
  static VALUE
428
439
  rlink_sentence_num_linkages_found( VALUE self ) {
429
- rlink_SENTENCE *ptr = get_sentence( self );
440
+ struct rlink_sentence *ptr = get_sentence( self );
430
441
  int i = 0;
431
-
442
+
432
443
  if ( !RTEST(ptr->parsed_p) )
433
444
  rlink_sentence_parse( 0, 0, self );
434
445
 
435
446
  i = sentence_num_linkages_found( (Sentence)ptr->sentence );
436
-
447
+
437
448
  return INT2FIX( i );
438
449
  }
439
450
 
@@ -446,16 +457,16 @@ rlink_sentence_num_linkages_found( VALUE self ) {
446
457
  */
447
458
  static VALUE
448
459
  rlink_sentence_num_valid_linkages( VALUE self ) {
449
- rlink_SENTENCE *ptr = get_sentence( self );
460
+ struct rlink_sentence *ptr = get_sentence( self );
450
461
  int count;
451
-
462
+
452
463
  if ( !RTEST(ptr->parsed_p) )
453
464
  rlink_sentence_parse( 0, 0, self );
454
465
 
455
466
  count = sentence_num_valid_linkages( (Sentence)ptr->sentence );
456
467
  return INT2FIX( count );
457
468
  }
458
-
469
+
459
470
 
460
471
  /*
461
472
  * call-seq:
@@ -466,16 +477,16 @@ rlink_sentence_num_valid_linkages( VALUE self ) {
466
477
  */
467
478
  static VALUE
468
479
  rlink_sentence_num_linkages_post_processed( VALUE self ) {
469
- rlink_SENTENCE *ptr = get_sentence( self );
480
+ struct rlink_sentence *ptr = get_sentence( self );
470
481
  int count;
471
-
482
+
472
483
  if ( !RTEST(ptr->parsed_p) )
473
484
  rlink_sentence_parse( 0, 0, self );
474
485
 
475
486
  count = sentence_num_linkages_post_processed( (Sentence)ptr->sentence );
476
487
  return INT2FIX( count );
477
488
  }
478
-
489
+
479
490
 
480
491
  /*
481
492
  * call-seq:
@@ -486,16 +497,16 @@ rlink_sentence_num_linkages_post_processed( VALUE self ) {
486
497
  */
487
498
  static VALUE
488
499
  rlink_sentence_num_violations( VALUE self, VALUE i ) {
489
- rlink_SENTENCE *ptr = get_sentence( self );
500
+ struct rlink_sentence *ptr = get_sentence( self );
490
501
  int count;
491
-
502
+
492
503
  if ( !RTEST(ptr->parsed_p) )
493
504
  rlink_sentence_parse( 0, 0, self );
494
505
 
495
506
  count = sentence_num_violations( (Sentence)ptr->sentence, FIX2INT(i) );
496
507
  return INT2FIX( count );
497
508
  }
498
-
509
+
499
510
 
500
511
  /*
501
512
  * call-seq:
@@ -505,16 +516,16 @@ rlink_sentence_num_violations( VALUE self, VALUE i ) {
505
516
  */
506
517
  static VALUE
507
518
  rlink_sentence_disjunct_cost( VALUE self, VALUE i ) {
508
- rlink_SENTENCE *ptr = get_sentence( self );
519
+ struct rlink_sentence *ptr = get_sentence( self );
509
520
  int count;
510
-
521
+
511
522
  if ( !RTEST(ptr->parsed_p) )
512
523
  rlink_sentence_parse( 0, 0, self );
513
524
 
514
525
  count = sentence_disjunct_cost( (Sentence)ptr->sentence, FIX2INT(i) );
515
526
  return INT2FIX( count );
516
527
  }
517
-
528
+
518
529
 
519
530
  /*
520
531
  * Document-class: LinkParser::Sentence
@@ -529,7 +540,7 @@ void
529
540
  rlink_init_sentence() {
530
541
  rlink_cSentence = rb_define_class_under( rlink_mLinkParser, "Sentence",
531
542
  rb_cObject );
532
-
543
+
533
544
  rb_define_alloc_func( rlink_cSentence, rlink_sentence_s_alloc );
534
545
 
535
546
  rb_define_method( rlink_cSentence, "initialize", rlink_sentence_init, 2 );