precious

Package Version Hex Docs

Precious is a port of precis_i18n to Gleam.

To add Precious to your Gleam project:

gleam add precious@1

Here’s some examples of how to call Precious in Gleam.

import precious

pub fn main() {
  let profile = profile.username_case_preserved()
  let _ = profile.enforce("Juliet", profile) |> echo
  // Ok("Juliet")
  profile.enforce("E\u{0301}\u{0301}\u{0301}", profile) |> echo
  // Ok("\u{00C9}\u{0301}\u{0301}") or Ok("É́́")
  profile.enforce("", profile) |> echo
  // Error(Empty)
  profile.enforce(" J", profile) |> echo
  // Error(CategoryError(FreePVal(Spaces), 0))
}

Further documentation can be found at https://hexdocs.pm/precious.

Gotchas

The Erlang lowercase and casemap functions don’t implement the full Unicode casing algorithm.

1> string:lowercase(<<"ΒόλοΣ"/utf8>>).
<<"βόλοσ"/utf8>>
2> string:casefold(<<"ΒόλοΣ"/utf8>>).
<<"βόλοσ"/utf8>>

The example above should generate βόλος. A future version of Precious may implement the Unicode lowercase and casefold algorithms from scratch. This also solves an issue where the underlying Erlang runtime uses a different Unicode version than Precious

Development

Only the Erlang target is currently supported.

gleam dev   # Run code generation against the Unicode spec (only needed once)
gleam build # Build precious
gleam test  # Run the tests
Search Document