Crystal binding/wrapper to the ICU library
Debian/Ubuntu
apt-get install -y libicu-dev
macOS
brew install icu4c
brew link --force icu4c
Add this to your application's shard.yml
:
dependencies:
icu:
github: olbat/icu.cr
Then require the lib in your Crystal code:
require "icu"
uregex
, Regular Expressions (uregex.h)uloc
, Locales (uloc.h, ulocdata.h)unum
, Number Formatting/Spellout (unum.h)ubidi
, Bidirectional Algorithm (ubidi.h)ucnv
, Codepage Conversion (ucnv.h, ucnvsel.h)ucal
, Calendars (ucal.h)udat
, Date and Time Formatting (udat.h, udatpg.h, udateintervalformat.h)upluralrules
, Plural rules (upluralrules.h)Internals
ustring
, Strings and Character Iteration (ustring.h, uiter.h)utext
, Abstract Unicode Text API (utext.h)uset
, Sets of Unicode Code Points and Strings (uset.h)ures
, Resource Bundles (ures.h)usprep
, StringPrep (usprep.h)uspoof
, Identifier Spoofing & Confusability (uspoof.h)udata
, Data loading interface (udata.h)This binding is compatible with the ICU library starting from version 4.8
.
It has been generated using ICU version 57.1
so every additions in the API from this version will not be present in this binding.
The Crystal wrapper's (the ICU
class) class and methods are enabled dynamically at compile-time depending on the version of the ICU library that's installed.
Please make sure that the class/feature you want to use is supported by your version ICU by checking the API documentation.
To be sure that the LibICU
binding fits with the version of the lib that's installed, it's possible to regenerate the binding by:
make generate_lib
src/lib_icu
: this directory contains the binding to the ICU library, it's generated by libgen & a transformation programsrc/icu
: this directory contains the wrapper to the LibICU
crystal lib that eases the usage of the bindingsrc/icu_info.cr
: this small program is used to determine which version of ICU is installed on the system (see #1)src/lib_transformer.cr
: this small program is used to fix the binding generated by libgen (see #3)For implementation and technical details about the binding's generation, see #1 & #3.