Go to file
Alex Schmitt d6c036c621
Remove support for EOL Ruby versions (#42)
Support for 1.9 ended on Feb 23, 2015 - https://www.ruby-lang.org/en/news/2014/01/10/ruby-1-9-3-will-end-on-2015/
Support for 2.4 ended on April 5, 2020 - https://www.ruby-lang.org/en/news/2020/04/05/support-of-ruby-2-4-has-ended/
2020-10-09 08:16:20 -07:00
benchmark Yet another rename (more consistent with other FFI projects) 2010-05-10 20:28:20 +02:00
lib Remove support for EOL Ruby versions (#42) 2020-10-09 08:16:20 -07:00
spec Remove support for EOL Ruby versions (#42) 2020-10-09 08:16:20 -07:00
.document Initial commit to icu-chardet-ffi. 2010-05-09 19:04:44 +02:00
.gitignore Bundler + RSpec 2 2011-05-27 16:49:47 +02:00
.rspec Update RSpec to 3.9 and address deprecation warnings (#40) 2020-10-07 11:27:02 -07:00
.travis.yml Remove support for EOL Ruby versions (#42) 2020-10-09 08:16:20 -07:00
Gemfile Fix gemfile source 2014-03-26 21:28:10 +01:00
LICENSE Bump copyright year. 2015-01-16 19:15:13 +01:00
README.md Remove support for EOL Ruby versions (#42) 2020-10-09 08:16:20 -07:00
Rakefile full backtrace 2014-10-22 18:00:21 +02:00
ffi-icu.gemspec Update RSpec to 3.9 and address deprecation warnings (#40) 2020-10-07 11:27:02 -07:00
test.c Fix failing transliteration spec 2010-05-29 01:44:12 +02:00

README.md

ffi-icu Build Status

Simple FFI wrappers for ICU. Checkout the renovated ICU gem instead which supports various of encoding and distributed with packaged source. FFI-ICU needs some love with ICU gem's transcoding method.

Gem

Rubygem

gem install ffi-icu

Dependencies

ICU.

If you get messages that the library or functions are not found, you can set some environment varibles to tell ffi-icu where to find it, e.g.:

$ export FFI_ICU_LIB="icui18n.so"
$ export FFI_ICU_VERSION_SUFFIX="_3_8"
$ ruby -r ffi-icu program.rb

Features

Character Encoding Detection

Examples:


    match = ICU::CharDet.detect(str)
    match.name       # => "UTF-8"
    match.confidence # => 80

or

    detector = ICU::CharDet::Detector.new
    detector.detect(str) => #<struct ICU::CharDet::Detector::Match ...>

Why not just use rchardet?

  • speed

Locale Sensitive Collation

Examples:

    ICU::Collation.collate("nb", %w[å æ ø]) == %w[æ ø å] #=> true

or

    collator = ICU::Collation::Collator.new("nb")
    collator.compare("a", "b")  #=> -1
    collator.greater?("z", "a") #=> true
    collator.collate(%w[å æ ø]) #=> ["æ", "ø", "å"]

Text Boundary Analysis

Examples:

    iterator = ICU::BreakIterator.new(:word, "en_US")
    iterator.text = "This is a sentence."
    iterator.to_a  #=> [0, 4, 5, 7, 8, 9, 10, 18, 19]

Number/Currency Formatting

Examples:

    # class method interface
    ICU::NumberFormatting.format_number("en", 1_000) #=> "1,000"
    ICU::NumberFormatting.format_number("de-DE", 1234.56) #=> "1.234,56"
    ICU::NumberFormatting.format_currency("en", 123.45, 'USD') #=> "$123.45"
    ICU::NumberFormatting.format_percent("en", 0.53, 'USD') #=> "53%"
    ICU::NumberFormatting.spell("en_US", 1_000) #=> "one thousand"

    # reusable formatting objects
    numf = ICU::NumberFormatting.create('fr-CA')
    numf.format(1000) #=> "1 000"

    curf = ICU::NumberFormatting.create('en-US', :currency)
    curf.format(1234.56, 'USD') #=> "$1,234.56"

Time Formatting/Parsing

Examples:

    # class method interface
    f = ICU::TimeFormatting.format(Time.mktime(2015, 11, 12, 15, 21, 16), {:locale => 'cs_CZ', :zone => 'Europe/Prague', :date => :short, :time => :short})
    f #=> "12.11.15 15:21"

    # reusable formatting objects
    formater = ICU::TimeFormatting.create(:locale => 'cs_CZ', :zone => 'Europe/Prague', :date => :long , :time => :none)
    formater.format(Time.now)  #=> "25. února 2015"
    # reusable formatting objects
    formater = ICU::TimeFormatting.create(:locale => 'cs_CZ', :zone => 'Europe/Prague', :date => :long , :time => :none)
    formater.parse("25. února 2015") #=> Wed Feb 25 00:00:00 +0100 2015

Tested on:

Platforms:

  • OS X 10.6 - 10.10
  • Travis' Linux

Rubies:

  • 2.5
  • 2.6
  • 2.7
  • ruby-head

TODO:

  • Any other useful part of ICU?
  • Windows?!

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2010-2015 Jari Bakken. See LICENSE for details.