Packages

ex_cldr

0.0.12
2.47.5 2.47.4 2.47.3 2.47.2 2.47.1 2.47.0 2.46.0 2.45.2 2.45.1 2.45.0 2.44.1 2.44.0 2.43.2 2.43.1 2.43.0 2.42.0 2.41.1 2.41.0 2.40.4 2.40.3 2.40.2 2.40.1 2.40.0 2.39.2 2.39.1 2.39.0 2.38.1 2.38.0 2.37.5 2.37.4 2.37.3 retired 2.37.2 2.37.1 2.37.0 2.36.0 2.35.1 2.35.0 retired 2.34.2 2.34.1 2.34.0 2.33.2 2.33.1 2.33.1-rc.0 2.33.0 2.32.1 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.1 2.27.0 retired 2.26.3 2.26.2 2.26.1 2.26.0 2.25.0 2.24.2 2.24.1 2.24.0 2.24.0-rc.6 2.24.0-rc.5 2.24.0-rc.4 2.24.0-rc.3 2.24.0-rc.2 2.24.0-rc.1 2.24.0-rc.0 2.23.2 2.23.1 2.23.0 2.22.1 2.22.0 2.21.0 2.20.0 2.20.0-rc.3 2.20.0-rc.2 2.20.0-rc.1 2.20.0-rc.0 2.19.1 2.19.0 2.18.2 2.18.1 2.18.0 2.18.0-rc.0 2.17.2 2.17.1 2.17.0 2.16.2 2.16.1 2.16.1-rc.0 2.16.0 2.15.0 2.14.1 2.14.0 2.14.0-rc.0 2.13.0 2.12.1 2.12.0 2.11.1 2.11.0 2.10.2 2.10.1 2.10.0 retired 2.9.0 2.8.1 2.8.0 2.7.2 2.7.1 2.7.0 2.6.2 2.6.1 2.6.0 2.5.0 2.4.3 2.4.2 2.4.1 2.4.0 2.3.2 2.3.1 2.3.0 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.0 2.0.4 2.0.3 2.0.2 2.0.1 2.0.0 2.0.0-rc.3 retired 2.0.0-rc.2 retired 2.0.0-rc.1 retired 2.0.0-rc.0 retired 1.8.2 1.8.1 1.8.0 1.7.1 1.7.0 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.2 1.5.1 1.5.0 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 retired 1.4.0-rc.3 retired 1.4.0-rc.2 retired 1.4.0-rc.1 retired 1.4.0-rc.0 retired 1.3.2 1.3.1 1.3.0 1.2.0 1.1.0 1.0.0 1.0.0-rc.3 retired 1.0.0-rc.2 retired 1.0.0-rc.1 retired 1.0.0-rc.0 retired 0.13.1 0.13.0 0.12.2 retired 0.12.1 retired 0.12.0 retired 0.11.0 retired 0.10.0 retired 0.9.0 retired 0.8.3 retired 0.8.2 retired 0.8.1 retired 0.8.0 retired 0.7.0 retired 0.6.2 retired 0.6.1 retired 0.6.0 retired 0.5.2 retired 0.5.1 retired 0.5.0 retired 0.4.2 retired 0.4.1 retired 0.4.0 retired 0.3.0 retired 0.2.1 retired 0.2.0 retired 0.1.3 retired 0.1.2 retired 0.1.1 retired 0.1.0 retired 0.0.20 retired 0.0.19 retired 0.0.18 retired 0.0.17 retired 0.0.16 retired 0.0.15 retired 0.0.14 retired 0.0.13 retired 0.0.12 retired 0.0.11 retired 0.0.10 retired 0.0.8 retired 0.0.7 retired 0.0.6 retired 0.0.5 retired 0.0.4 retired 0.0.3 retired

Common Locale Data Repository (CLDR) functions for Elixir to localize and format numbers, dates, lists, messages, languages, territories and units with support for over 700 locales for internationalized (i18n) and localized (L10N) applications.

Retired package: Deprecated

Current section

Files

Jump to
ex_cldr lib cldr number string.ex
Raw

lib/cldr/number/string.ex

defmodule Cldr.Number.String do
@moduledoc """
String helper functions
"""
@doc """
Returns a regex which matches all latin1 characters
"""
@latin1 ~r/([\x00-\x7F])/
def latin1 do
@latin1
end
@doc """
Returns a regex which matches all non-latin1 characters
"""
@not_latin1 ~r/([^\x00-\x7F])/
def not_latin1 do
@not_latin1
end
@doc """
Replace any non-latin1 characters with a \?
"""
def clean(string) do
for char <- String.graphemes(string) do
if Regex.match?(not_latin1(), char) do
"U+" <> Base.encode16(char, case: :lower)
else
char
end
end
|> Enum.join
end
@doc """
Replaces characters with a string hex representation
"""
def hex_string(string) do
String.to_charlist(string)
|> Enum.map(&("\\x" <> Integer.to_string(&1)))
|> Enum.join
end
@doc """
Pad a a string (representing a number) with leading "0"'s to the
specified length.
* `number` is a string representation of a number
* `count` is the final length required of the string
"""
@spec pad_leading_zeros(String.t, integer) :: String.t
def pad_leading_zeros(number_string, count) when count <= 0 do
number_string
end
def pad_leading_zeros(number_string, count) do
String.pad_leading(number_string, count, "0")
end
@doc """
Pad a a string (representing a number) with trailing "0"'s to the
specified length.
* `number` is a string representation of a number
* `count` is the final length required of the string
"""
@spec pad_trailing_zeros(String.t, integer) :: String.t
def pad_trailing_zeros(number_string, count) when count <= 0 do
number_string
end
def pad_trailing_zeros(number_string, count) do
String.pad_trailing(number_string, count, "0")
end
@doc """
Split a string up into fixed size chunks.
Returns a list of strings the size of `size` plus potentially
one more chunk at the end that is the remainder of the string
after chunking.
## Examples
iex> Cldr.Number.String.chunk_string("This is a string", 3)
["Thi", "s i", "s a", " st", "rin", "g"]
iex> Cldr.Number.String.chunk_string("1234", 4)
["1234"]
iex> Cldr.Number.String.chunk_string("1234", 3)
["123","4"]
iex> Cldr.Number.String.chunk_string("1234", 3, :reverse)
["1", "234"]
"""
@spec chunk_string(String.t, integer, :forward | :reverse) :: [String.t]
def chunk_string(string, size, direction \\ :forward)
def chunk_string(string, 0, _direction) do
[string]
end
def chunk_string("", _size, _) do
[""]
end
def chunk_string(string, size, :forward) do
string
|> String.to_charlist
|> Enum.chunk(size, size, [])
|> Enum.map(&List.to_string/1)
end
def chunk_string(string, size, :reverse) do
len = String.length(string)
remainder = rem(len, size)
if remainder > 0 do
{head, last} = String.split_at(string, remainder)
[head] ++ do_chunk_string(last, size)
else
do_chunk_string(string, size)
end
end
defp do_chunk_string("", _size) do
[]
end
defp do_chunk_string(string, size) do
{chunk, rest} = String.split_at(string, size)
[chunk] ++ do_chunk_string(rest, size)
end
end