Class: ICU::BreakIterator

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/ffi-icu/break_iterator.rb

Constant Summary collapse

DONE =
-1

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, locale) ⇒ BreakIterator

Returns a new instance of BreakIterator.



15
16
17
18
# File 'lib/ffi-icu/break_iterator.rb', line 15

def initialize(type, locale)
  ptr = Lib.check_error { |err| Lib.ubrk_open(type, locale, nil, 0, err) }
  @iterator = FFI::AutoPointer.new(ptr, Lib.method(:ubrk_close))
end

Instance Attribute Details

#textObject

Returns the value of attribute text.



5
6
7
# File 'lib/ffi-icu/break_iterator.rb', line 5

def text
  @text
end

Class Method Details

.available_localesObject



9
10
11
12
13
# File 'lib/ffi-icu/break_iterator.rb', line 9

def self.available_locales
  (0...Lib.ubrk_countAvailable).map do |idx|
    Lib.ubrk_getAvailable idx
  end
end

Instance Method Details

#boundary?(offset) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/ffi-icu/break_iterator.rb', line 88

def boundary?(offset)
  Lib.ubrk_isBoundary(@iterator, Integer(offset)) != 0
end

#currentObject



84
85
86
# File 'lib/ffi-icu/break_iterator.rb', line 84

def current
  Lib.ubrk_current @iterator
end

#each(&blk) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ffi-icu/break_iterator.rb', line 28

def each(&blk)
  return to_enum(:each) unless block_given?

  int = first

  while int != DONE
    yield int
    int = self.next
  end

  self
end

#each_substring(&blk) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ffi-icu/break_iterator.rb', line 41

def each_substring(&blk)
  return to_enum(:each_substring) unless block_given?

  # each_char needed for 1.8, where String#[] works on bytes, not characters
  chars = text.each_char.to_a
  low   = first

  while (high = self.next) != DONE
    yield chars[low...high].join
    low = high
  end

  self
end

#firstObject



68
69
70
# File 'lib/ffi-icu/break_iterator.rb', line 68

def first
  Lib.ubrk_first @iterator
end

#following(offset) ⇒ Object



80
81
82
# File 'lib/ffi-icu/break_iterator.rb', line 80

def following(offset)
  Lib.ubrk_following @iterator, Integer(offset)
end

#lastObject



72
73
74
# File 'lib/ffi-icu/break_iterator.rb', line 72

def last
  Lib.ubrk_last @iterator
end

#nextObject



60
61
62
# File 'lib/ffi-icu/break_iterator.rb', line 60

def next
  Lib.ubrk_next @iterator
end

#preceding(offset) ⇒ Object



76
77
78
# File 'lib/ffi-icu/break_iterator.rb', line 76

def preceding(offset)
  Lib.ubrk_preceding @iterator, Integer(offset)
end

#previousObject



64
65
66
# File 'lib/ffi-icu/break_iterator.rb', line 64

def previous
  Lib.ubrk_next @iterator
end

#substringsObject



56
57
58
# File 'lib/ffi-icu/break_iterator.rb', line 56

def substrings
  each_substring.to_a
end