Sha256: 675b0c1d45e1250a0c97ab03c284da6fbd3543ca8082326fb85813ed6086f873

Contents?: true

Size: 1.21 KB

Versions: 13

Compression:

Stored size: 1.21 KB

Contents

module ICU
  class Normalizer
    # support for newer ICU normalization API

    def initialize(package_name = nil, name = 'nfc', mode = :decompose)
      Lib.check_error do |error|
        @instance = Lib.unorm2_getInstance(package_name, name, mode, error)
      end
    end

    def normalize(input)
      input_length  = input.jlength
      in_ptr        = UCharPointer.from_string(input)
      needed_length = capacity = 0
      out_ptr       = UCharPointer.new(needed_length)

      retried = false
      begin
        Lib.check_error do |error|
          needed_length = Lib.unorm2_normalize(@instance, in_ptr, input_length, out_ptr, capacity, error)
        end
      rescue BufferOverflowError
        raise BufferOverflowError, "needed: #{needed_length}" if retried

        capacity = needed_length
        out_ptr = out_ptr.resized_to needed_length

        retried = true
        retry
      end

      out_ptr.string
    end

    def is_normailzed?(input)
      input_length  = input.jlength
      in_ptr        = UCharPointer.from_string(input)

      Lib.check_error do |error|
        result = Lib.unorm2_isNormalized(@instance, in_ptr, input_length, error)
      end

      result
    end

  end # Normalizer
end # ICU

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
ffi-icu-0.5.3 lib/ffi-icu/normalizer.rb
ffi-icu-0.5.2 lib/ffi-icu/normalizer.rb
ffi-icu-0.5.1 lib/ffi-icu/normalizer.rb
ffi-icu-0.5.0 lib/ffi-icu/normalizer.rb
ffi-icu-0.4.3 lib/ffi-icu/normalizer.rb
ffi-icu-0.4.2 lib/ffi-icu/normalizer.rb
ffi-icu-0.4.1 lib/ffi-icu/normalizer.rb
ffi-icu-0.4.0 lib/ffi-icu/normalizer.rb
ffi-icu-0.3.0 lib/ffi-icu/normalizer.rb
ffi-icu-0.2.0 lib/ffi-icu/normalizer.rb
ffi-icu-0.1.10 lib/ffi-icu/normalizer.rb
ffi-icu-0.1.9 lib/ffi-icu/normalizer.rb
ffi-icu-0.1.8 lib/ffi-icu/normalizer.rb