Class: MatchData

Inherits:
Object show all
Defined in:
.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb,
.doc_tmp/iij/mruby-regexp-pcre/src/mruby_regexp_pcre.c

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeObject



239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File '.doc_tmp/iij/mruby-regexp-pcre/src/mruby_regexp_pcre.c', line 239

mrb_value
mrb_matchdata_init(mrb_state *mrb, mrb_value self)
{
  struct mrb_matchdata *mrb_md;

  mrb_md = (struct mrb_matchdata *)DATA_PTR(self);
  if (mrb_md) {
    mrb_matchdata_free(mrb, mrb_md);
  }
  DATA_TYPE(self) = &mrb_matchdata_type;
  DATA_PTR(self) = NULL;

  mrb_md = (struct mrb_matchdata *)mrb_malloc(mrb, sizeof(*mrb_md));
  mrb_md->ovector = NULL;
  mrb_md->length = -1;
  DATA_PTR(self) = mrb_md;

  return self;
}

Instance Attribute Details

#regexpObject (readonly)

Returns the value of attribute regexp.



150
151
152
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 150

def regexp
  @regexp
end

#stringObject (readonly)

Returns the value of attribute string.



151
152
153
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 151

def string
  @string
end

Instance Method Details

#[](n, m = nil) ⇒ Object



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 153

def [](n,m=nil)
  if m
    return self.to_a[n,m]
  end

  if n.kind_of?(String) || n.kind_of?(Symbol)
    indexes = regexp.named_captures[n.to_s]
    if indexes
      self[indexes.last]
    else
      nil
    end
  elsif n.kind_of?(Range)
    return self.to_a[n]
  elsif n.respond_to?(:to_i)
    n = n.to_i
    if n < 0
      n += self.length
      return nil if n < 0
    elsif n >= self.length
      return nil
    end
    b = self.begin(n)
    e = self.end(n)
    if b and e
      @string[b, e-b]
    else
      nil
    end
  else
    raise TypeError.new("No implicit conversion of #{n.class} into integer")
  end
end

#beginObject



317
318
319
320
321
# File '.doc_tmp/iij/mruby-regexp-pcre/src/mruby_regexp_pcre.c', line 317

mrb_value
mrb_matchdata_begin(mrb_state *mrb, mrb_value self)
{
  return matchdata_beginend(mrb, self, 0);
}

#capturesObject



187
188
189
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 187

def captures
  self.to_a[1, self.length-1]
end

#endObject



323
324
325
326
327
# File '.doc_tmp/iij/mruby-regexp-pcre/src/mruby_regexp_pcre.c', line 323

mrb_value
mrb_matchdata_end(mrb_state *mrb, mrb_value self)
{
  return matchdata_beginend(mrb, self, 1);
}

#initialize_copyObject



259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
# File '.doc_tmp/iij/mruby-regexp-pcre/src/mruby_regexp_pcre.c', line 259

mrb_value
mrb_matchdata_init_copy(mrb_state *mrb, mrb_value copy)
{
  mrb_value src;
  struct mrb_matchdata *mrb_md_copy, *mrb_md_src;
  int vecsize;

  mrb_get_args(mrb, "o", &src);

  if (mrb_obj_equal(mrb, copy, src)) return copy;
  if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) {
    mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
  }

  mrb_md_copy = (struct mrb_matchdata *)mrb_malloc(mrb, sizeof(*mrb_md_copy));
  mrb_md_src  = DATA_PTR(src);

  if (mrb_md_src->ovector == NULL) {
    mrb_md_copy->ovector = NULL;
    mrb_md_copy->length = -1;
  } else {
    vecsize = sizeof(int) * mrb_md_src->length * 3;
    mrb_md_copy->ovector = mrb_malloc(mrb, vecsize);
    memcpy(mrb_md_copy->ovector, mrb_md_src->ovector, vecsize);
    mrb_md_copy->length = mrb_md_src->length;
  }

  if (DATA_PTR(copy) != NULL) {
    mrb_matchdata_free(mrb, DATA_PTR(copy));
  }
  DATA_PTR(copy) = mrb_md_copy;

  mrb_iv_set(mrb, copy, mrb_intern_lit(mrb, "@regexp"), mrb_iv_get(mrb, src, mrb_intern_lit(mrb, "@regexp")));
  mrb_iv_set(mrb, copy, mrb_intern_lit(mrb, "@string"), mrb_iv_get(mrb, src, mrb_intern_lit(mrb, "@string")));

  return copy;
}

#inspectObject



191
192
193
194
195
196
197
198
199
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 191

def inspect
  if self.length == 1
    "#<MatchData \"#{self[0]}\">"
  else
    idx = 0 
    capts = self.captures.map! { |s| "#{idx += 1}:#{s.inspect}" }.join(' ')
    "#<MatchData \"#{self[0]}\" #{capts}>"
  end 
end

#lengthObject Also known as: size



329
330
331
332
333
334
335
336
337
338
# File '.doc_tmp/iij/mruby-regexp-pcre/src/mruby_regexp_pcre.c', line 329

mrb_value
mrb_matchdata_length(mrb_state *mrb, mrb_value self)
{
  struct mrb_matchdata *mrb_md;

  mrb_md = (struct mrb_matchdata *)mrb_get_datatype(mrb, self, &mrb_matchdata_type);
  if (!mrb_md) return mrb_nil_value();

  return mrb_fixnum_value(mrb_md->length);
}

#namesObject



201
202
203
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 201

def names
  self.regexp.names
end

#offset(n) ⇒ Object



205
206
207
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 205

def offset(n)
  [self.begin(n), self.end(n)]
end

#post_matchObject



209
210
211
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 209

def post_match
  @string[self.end(0), @string.length]
end

#pre_matchObject



213
214
215
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 213

def pre_match
  @string[0, self.begin(0)]
end

#push(start = nil, finish = nil) ⇒ Object



217
218
219
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 217

def push(start = nil, finish = nil)
  @data.push({start: start, finish: finish})
end

#to_aObject



221
222
223
224
225
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 221

def to_a
  a = []
  self.length.times { |i| a << self[i] }
  a
end

#to_sObject



227
228
229
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 227

def to_s
  self[0]
end

#values_at(*args) ⇒ Object



231
232
233
# File '.doc_tmp/iij/mruby-regexp-pcre/mrblib/regexp_pcre.rb', line 231

def values_at(*args)
  args.map { |i| if i == -self.length then nil else self[i] end }
end