Packages
ex_cldr_numbers
2.15.4
2.38.3
2.38.2
2.38.1
2.38.0
2.37.0
2.36.0
2.35.2
2.35.1
2.35.0
2.34.1
2.34.0
2.33.6
2.33.5
2.33.4
2.33.3
2.33.2
2.33.1
2.33.0
2.32.4
2.32.3
2.32.2
2.32.1
2.32.0
retired
2.31.3
retired
2.31.2
2.31.1
2.31.0
2.30.1
2.30.0
2.29.0
2.28.0
2.27.3
2.27.2
2.27.1
2.27.0
2.26.0
2.25.2
2.25.1
2.25.0
2.24.0
2.23.3
2.23.2
2.23.1
2.23.0
2.23.0-rc.4
2.23.0-rc.3
2.23.0-rc.2
2.23.0-rc.1
2.23.0-rc.0
2.22.1
2.22.0
2.21.0
2.20.0
2.19.0
2.18.4
2.18.3
2.18.2
2.18.1
2.18.0
2.17.0
2.17.0-rc.1
2.17.0-rc.0
2.16.1
2.16.0
2.16.0-rc.0
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.0
2.13.2
2.13.1
2.13.0
2.13.0-rc.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.4
2.6.3
2.6.2
2.6.1
2.6.0
2.5.0
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
2.0.0-rc.0
1.6.0
1.5.2
1.5.1
1.5.0
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.1
1.3.0
1.3.0-rc.1
1.3.0-rc.0
retired
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.0
retired
0.3.3
0.3.2
retired
0.3.1
retired
0.3.0
retired
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Number and currency localization and formatting functions for the Common Locale Data Repository (CLDR).
Current section
Files
Jump to
Current section
Files
lib/cldr/number/string.ex
defmodule Cldr.Number.String do
@moduledoc false
@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 """
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.
## Options
* `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
:binary.copy("0", count - byte_size(number_string)) <> number_string
end
@doc """
Pad a a string (representing a number) with trailing "0"'s to the
specified length.
## Options
* `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
number_string <> :binary.copy("0", count - byte_size(number_string))
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
if Version.compare(System.version(), "1.6.0") in [:gt, :eq] do
def chunk_string(string, size, :forward) do
string
|> String.to_charlist()
|> Enum.chunk_every(size, size, [])
|> Enum.map(&List.to_string/1)
end
else
def chunk_string(string, size, :forward) do
string
|> String.to_charlist()
|> Enum.chunk(size, size, [])
|> Enum.map(&List.to_string/1)
end
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