Current section
Files
Jump to
Current section
Files
lib/fonticode.ex
defmodule Fonticode do
@moduledoc """
Small library that takes a string and reformats it into a pseudofont.
This is accomplished by using Unicode codepoints that resemble a font.
|Format mode | Example |
|------------|-----------|
|:noop | ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 1234567890 |
|:sans_serif | ๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐น ๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐๐๐๐๐๐
๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ข |
|:cursive | ๐โฌ๐๐โฐโฑ๐ขโโ๐ฅ๐ฆโโณ๐ฉ๐ช๐ซ๐ฌโ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต ๐ถ๐ท๐ธ๐นโฏ๐ปโ๐ฝ๐พ๐ฟ๐๐๐๐โด๐
๐๐๐๐๐๐๐๐๐๐ 1234567890 |
|:blackboard_bold | ๐ธ๐นโ๐ป๐ผ๐ฝ๐พโ๐๐๐๐๐โ๐โโโ๐๐๐๐๐๐๐โค ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ ๐๐๐๐๐๐๐๐ ๐ก๐ |
|:block | ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
1234567890 |
|:block_filled | ๐
ฐ๐
ฑ๐
ฒ๐
ณ๐
ด๐
ต๐
ถ๐
ท๐
ธ๐
น๐
บ๐
ป๐
ผ๐
ฝ๐
พ๐
ฟ๐๐๐๐๐๐
๐๐๐๐ ๐
ฐ๐
ฑ๐
ฒ๐
ณ๐
ด๐
ต๐
ถ๐
ท๐
ธ๐
น๐
บ๐
ป๐
ผ๐
ฝ๐
พ๐
ฟ๐๐๐๐๐๐
๐๐๐๐ 1234567890 |
|:bubble | โถโทโธโนโบโปโผโฝโพโฟโโโโโโ
โโโโโโโโโโ โโโโโโโโโโโโโโโโโ โกโขโฃโคโฅโฆโงโจโฉ โ โกโขโฃโคโฅโฆโงโจโช |
|:bubble_filled | ๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
ก๐
ข๐
ฃ๐
ค๐
ฅ๐
ฆ๐
ง๐
จ๐
ฉ ๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
๐
ก๐
ข๐
ฃ๐
ค๐
ฅ๐
ฆ๐
ง๐
จ๐
ฉ โโโโโโโโโโฟ|
|:gothic | ๐๐
โญ๐๐๐๐โโ๐๐๐๐๐๐๐๐โ๐๐๐๐๐๐๐โจ ๐๐๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท 1234567890 |
|:small_caps | ABCDEFGHIJKLMNOPQRSTUVWXYZ แดสแดแด
แดาษขสษชแดแดสแดษดแดแดวซสsแดแดแด แดกxสแดข 1234567890 |
|:aesthetic | ๏ผก๏ผข๏ผฃ๏ผค๏ผฅ๏ผฆ๏ผง๏ผจ๏ผฉ๏ผช๏ผซ๏ผฌ๏ผญ๏ผฎ๏ผฏ๏ผฐ๏ผฑ๏ผฒ๏ผณ๏ผด๏ผต๏ผถ๏ผท๏ผธ๏ผน๏ผบ ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ
๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ ๏ผ๏ผ๏ผ๏ผ๏ผผ๏ผ๏ผ๏ผ๏ผ๏ผ ๏ฝ๏ผ๏ผ ๏ผ๏ผ๏ผ
๏ผพ๏ผ๏ผ๏ผ๏ผ๏ผฟ๏ผ |
|:monospace | ๐ฐ๐ฑ๐ฒ๐ณ๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐๐๐๐๐๐
๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐ก๐ข๐ฃ ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ0 |
|:bold | ๐๐๐๐๐๐
๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ฐ๐ฑ๐ฒ๐ณ ๐๐๐๐๐๐๐๐๐๐ |
|:superscript | แดฌแดฎ๊ฒแดฐแดฑ๊ณแดณแดดแดตแดถแดทแดธแดนแดบแดผแดพ๊ดแดฟหขแตแตโฑฝแตหฃสธแถป แตแตแถแตแตแถ แตสฐแถฆสฒแตหกแตโฟแตแต๐ฅสณหขแตแตแตสทหฃสธแถป ยนยฒยณโดโตโถโทโธโนโฐ |
|:italic | ๐ด๐ต๐ถ๐ท๐ธ๐น๐บ๐ป๐ผ๐ฝ๐พ๐ฟ๐๐๐๐๐๐
๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐โ๐๐๐๐๐๐๐๐๐๐๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง 1234567890 |
"""
@type format_mode ::
:noop
| :sans_serif
| :cursive
| :blackboard_bold
| :block
| :block_filled
| :bubble
| :bubble_filled
| :gothic
| :small_caps
| :aesthetic
| :monospace
| :bold
| :superscript
| :italic
@type substitution_map :: %{String.t() => String.t()}
@doc """
Gets the available formatting modes.
## Examples
iex> Fonticode.modes()
[ :noop,
:sans_serif,
:cursive,
:blackboard_bold,
:block,
:block_filled,
:bubble,
:bubble_filled,
:gothic,
:small_caps,
:aesthetic,
:monospace,
:bold,
:superscript,
:italic]
"""
def modes() do
[
:noop,
:sans_serif,
:cursive,
:blackboard_bold,
:block,
:block_filled,
:bubble,
:bubble_filled,
:gothic,
:small_caps,
:aesthetic,
:monospace,
:bold,
:superscript,
:italic
]
end
@doc """
Formats a string, replacing codepoints to mimic a pseudostyle.
Use `modes/0` to get available options.
## Examples
iex> Fonticode.format("ABC", :noop)
"ABC"
iex> Fonticode.format("ABC", :gothic)
"๐๐
โญ"
"""
@spec format(String.t(), format_mode) :: String.t()
def format(text, :noop), do: text
def format(text, :sans_serif) do
substitute(text, %{
"a" => "๐บ",
"A" => "๐ ",
"b" => "๐ป",
"B" => "๐ก",
"c" => "๐ผ",
"C" => "๐ข",
"d" => "๐ฝ",
"D" => "๐ฃ",
"e" => "๐พ",
"E" => "๐ค",
"f" => "๐ฟ",
"F" => "๐ฅ",
"g" => "๐",
"G" => "๐ฆ",
"h" => "๐",
"H" => "๐ง",
"i" => "๐",
"I" => "๐จ",
"j" => "๐",
"J" => "๐ฉ",
"k" => "๐",
"K" => "๐ช",
"l" => "๐
",
"L" => "๐ซ",
"m" => "๐",
"M" => "๐ฌ",
"n" => "๐",
"N" => "๐ญ",
"o" => "๐",
"O" => "๐ฎ",
"p" => "๐",
"P" => "๐ฏ",
"q" => "๐",
"Q" => "๐ฐ",
"r" => "๐",
"R" => "๐ฑ",
"s" => "๐",
"S" => "๐ฒ",
"t" => "๐",
"T" => "๐ณ",
"u" => "๐",
"U" => "๐ด",
"v" => "๐",
"V" => "๐ต",
"w" => "๐",
"W" => "๐ถ",
"x" => "๐",
"X" => "๐ท",
"y" => "๐",
"Y" => "๐ธ",
"z" => "๐",
"Z" => "๐น",
"1" => "๐ฃ",
"2" => "๐ค",
"3" => "๐ฅ",
"4" => "๐ฆ",
"5" => "๐ง",
"6" => "๐จ",
"7" => "๐ฉ",
"8" => "๐ช",
"9" => "๐ซ",
"0" => "๐ข"
})
end
def format(text, :cursive) do
substitute(text, %{
"a" => "๐ถ",
"A" => "๐",
"b" => "๐ท",
"B" => "โฌ",
"c" => "๐ธ",
"C" => "๐",
"d" => "๐น",
"D" => "๐",
"e" => "โฏ",
"E" => "โฐ",
"f" => "๐ป",
"F" => "โฑ",
"g" => "โ",
"G" => "๐ข",
"h" => "๐ฝ",
"H" => "โ",
"i" => "๐พ",
"I" => "โ",
"j" => "๐ฟ",
"J" => "๐ฅ",
"k" => "๐",
"K" => "๐ฆ",
"l" => "๐",
"L" => "โ",
"m" => "๐",
"M" => "โณ",
"n" => "๐",
"N" => "๐ฉ",
"o" => "โด",
"O" => "๐ช",
"p" => "๐
",
"P" => "๐ซ",
"q" => "๐",
"Q" => "๐ฌ",
"r" => "๐",
"R" => "โ",
"s" => "๐",
"S" => "๐ฎ",
"t" => "๐",
"T" => "๐ฏ",
"u" => "๐",
"U" => "๐ฐ",
"v" => "๐",
"V" => "๐ฑ",
"w" => "๐",
"W" => "๐ฒ",
"x" => "๐",
"X" => "๐ณ",
"y" => "๐",
"Y" => "๐ด",
"z" => "๐",
"Z" => "๐ต"
})
end
def format(text, :blackboard_bold) do
substitute(text, %{
"a" => "๐",
"A" => "๐ธ",
"b" => "๐",
"B" => "๐น",
"c" => "๐",
"C" => "โ",
"d" => "๐",
"D" => "๐ป",
"e" => "๐",
"E" => "๐ผ",
"f" => "๐",
"F" => "๐ฝ",
"g" => "๐",
"G" => "๐พ",
"h" => "๐",
"H" => "โ",
"i" => "๐",
"I" => "๐",
"j" => "๐",
"J" => "๐",
"k" => "๐",
"K" => "๐",
"l" => "๐",
"L" => "๐",
"m" => "๐",
"M" => "๐",
"n" => "๐",
"N" => "โ",
"o" => "๐ ",
"O" => "๐",
"p" => "๐ก",
"P" => "โ",
"q" => "๐ข",
"Q" => "โ",
"r" => "๐ฃ",
"R" => "โ",
"s" => "๐ค",
"S" => "๐",
"t" => "๐ฅ",
"T" => "๐",
"u" => "๐ฆ",
"U" => "๐",
"v" => "๐ง",
"V" => "๐",
"w" => "๐จ",
"W" => "๐",
"x" => "๐ฉ",
"X" => "๐",
"y" => "๐ช",
"Y" => "๐",
"z" => "๐ซ",
"Z" => "โค",
"1" => "๐",
"2" => "๐",
"3" => "๐",
"4" => "๐",
"5" => "๐",
"6" => "๐",
"7" => "๐",
"8" => "๐ ",
"9" => "๐ก",
"0" => "๐"
})
end
def format(text, :block) do
substitute(text, %{
"a" => "๐ฐ",
"A" => "๐ฐ",
"b" => "๐ฑ",
"B" => "๐ฑ",
"c" => "๐ฒ",
"C" => "๐ฒ",
"d" => "๐ณ",
"D" => "๐ณ",
"e" => "๐ด",
"E" => "๐ด",
"f" => "๐ต",
"F" => "๐ต",
"g" => "๐ถ",
"G" => "๐ถ",
"h" => "๐ท",
"H" => "๐ท",
"i" => "๐ธ",
"I" => "๐ธ",
"j" => "๐น",
"J" => "๐น",
"k" => "๐บ",
"K" => "๐บ",
"l" => "๐ป",
"L" => "๐ป",
"m" => "๐ผ",
"M" => "๐ผ",
"n" => "๐ฝ",
"N" => "๐ฝ",
"o" => "๐พ",
"O" => "๐พ",
"p" => "๐ฟ",
"P" => "๐ฟ",
"q" => "๐
",
"Q" => "๐
",
"r" => "๐
",
"R" => "๐
",
"s" => "๐
",
"S" => "๐
",
"t" => "๐
",
"T" => "๐
",
"u" => "๐
",
"U" => "๐
",
"v" => "๐
",
"V" => "๐
",
"w" => "๐
",
"W" => "๐
",
"x" => "๐
",
"X" => "๐
",
"y" => "๐
",
"Y" => "๐
",
"z" => "๐
",
"Z" => "๐
"
})
end
def format(text, :block_filled) do
substitute(text, %{
"a" => "๐
ฐ",
"A" => "๐
ฐ",
"b" => "๐
ฑ",
"B" => "๐
ฑ",
"c" => "๐
ฒ",
"C" => "๐
ฒ",
"d" => "๐
ณ",
"D" => "๐
ณ",
"e" => "๐
ด",
"E" => "๐
ด",
"f" => "๐
ต",
"F" => "๐
ต",
"g" => "๐
ถ",
"G" => "๐
ถ",
"h" => "๐
ท",
"H" => "๐
ท",
"i" => "๐
ธ",
"I" => "๐
ธ",
"j" => "๐
น",
"J" => "๐
น",
"k" => "๐
บ",
"K" => "๐
บ",
"l" => "๐
ป",
"L" => "๐
ป",
"m" => "๐
ผ",
"M" => "๐
ผ",
"n" => "๐
ฝ",
"N" => "๐
ฝ",
"o" => "๐
พ",
"O" => "๐
พ",
"p" => "๐
ฟ",
"P" => "๐
ฟ",
"q" => "๐",
"Q" => "๐",
"r" => "๐",
"R" => "๐",
"s" => "๐",
"S" => "๐",
"t" => "๐",
"T" => "๐",
"u" => "๐",
"U" => "๐",
"v" => "๐
",
"V" => "๐
",
"w" => "๐",
"W" => "๐",
"x" => "๐",
"X" => "๐",
"y" => "๐",
"Y" => "๐",
"z" => "๐",
"Z" => "๐"
})
end
def format(text, :bubble) do
substitute(text, %{
"a" => "โ",
"A" => "โถ",
"b" => "โ",
"B" => "โท",
"c" => "โ",
"C" => "โธ",
"d" => "โ",
"D" => "โน",
"e" => "โ",
"E" => "โบ",
"f" => "โ",
"F" => "โป",
"g" => "โ",
"G" => "โผ",
"h" => "โ",
"H" => "โฝ",
"i" => "โ",
"I" => "โพ",
"j" => "โ",
"J" => "โฟ",
"k" => "โ",
"K" => "โ",
"l" => "โ",
"L" => "โ",
"m" => "โ",
"M" => "โ",
"n" => "โ",
"N" => "โ",
"o" => "โ",
"O" => "โ",
"p" => "โ",
"P" => "โ
",
"q" => "โ ",
"Q" => "โ",
"r" => "โก",
"R" => "โ",
"s" => "โข",
"S" => "โ",
"t" => "โฃ",
"T" => "โ",
"u" => "โค",
"U" => "โ",
"v" => "โฅ",
"V" => "โ",
"w" => "โฆ",
"W" => "โ",
"x" => "โง",
"X" => "โ",
"y" => "โจ",
"Y" => "โ",
"z" => "โฉ",
"Z" => "โ",
"1" => "โ ",
"2" => "โก",
"3" => "โข",
"4" => "โฃ",
"5" => "โค",
"6" => "โฅ",
"7" => "โฆ",
"8" => "โง",
"9" => "โจ",
"0" => "โช"
})
end
def format(text, :bubble_filled) do
substitute(text, %{
"a" => "๐
",
"A" => "๐
",
"b" => "๐
",
"B" => "๐
",
"c" => "๐
",
"C" => "๐
",
"d" => "๐
",
"D" => "๐
",
"e" => "๐
",
"E" => "๐
",
"f" => "๐
",
"F" => "๐
",
"g" => "๐
",
"G" => "๐
",
"h" => "๐
",
"H" => "๐
",
"i" => "๐
",
"I" => "๐
",
"j" => "๐
",
"J" => "๐
",
"k" => "๐
",
"K" => "๐
",
"l" => "๐
",
"L" => "๐
",
"m" => "๐
",
"M" => "๐
",
"n" => "๐
",
"N" => "๐
",
"o" => "๐
",
"O" => "๐
",
"p" => "๐
",
"P" => "๐
",
"q" => "๐
",
"Q" => "๐
",
"r" => "๐
ก",
"R" => "๐
ก",
"s" => "๐
ข",
"S" => "๐
ข",
"t" => "๐
ฃ",
"T" => "๐
ฃ",
"u" => "๐
ค",
"U" => "๐
ค",
"v" => "๐
ฅ",
"V" => "๐
ฅ",
"w" => "๐
ฆ",
"W" => "๐
ฆ",
"x" => "๐
ง",
"X" => "๐
ง",
"y" => "๐
จ",
"Y" => "๐
จ",
"z" => "๐
ฉ",
"Z" => "๐
ฉ",
"1" => "โ",
"2" => "โ",
"3" => "โ",
"4" => "โ",
"5" => "โ",
"6" => "โ",
"7" => "โ",
"8" => "โ",
"9" => "โ",
"0" => "โฟ"
})
end
def format(text, :gothic) do
substitute(text, %{
"a" => "๐",
"A" => "๐",
"b" => "๐",
"B" => "๐
",
"c" => "๐ ",
"C" => "โญ",
"d" => "๐ก",
"D" => "๐",
"e" => "๐ข",
"E" => "๐",
"f" => "๐ฃ",
"F" => "๐",
"g" => "๐ค",
"G" => "๐",
"h" => "๐ฅ",
"H" => "โ",
"i" => "๐ฆ",
"I" => "โ",
"j" => "๐ง",
"J" => "๐",
"k" => "๐จ",
"K" => "๐",
"l" => "๐ฉ",
"L" => "๐",
"m" => "๐ช",
"M" => "๐",
"n" => "๐ซ",
"N" => "๐",
"o" => "๐ฌ",
"O" => "๐",
"p" => "๐ญ",
"P" => "๐",
"q" => "๐ฎ",
"Q" => "๐",
"r" => "๐ฏ",
"R" => "โ",
"s" => "๐ฐ",
"S" => "๐",
"t" => "๐ฑ",
"T" => "๐",
"u" => "๐ฒ",
"U" => "๐",
"v" => "๐ณ",
"V" => "๐",
"w" => "๐ด",
"W" => "๐",
"x" => "๐ต",
"X" => "๐",
"y" => "๐ถ",
"Y" => "๐",
"z" => "๐ท",
"Z" => "โจ"
})
end
def format(text, :small_caps) do
substitute(text, %{
"a" => "แด",
"b" => "ส",
"c" => "แด",
"d" => "แด
",
"e" => "แด",
"f" => "า",
"g" => "ษข",
"h" => "ส",
"i" => "ษช",
"j" => "แด",
"k" => "แด",
"l" => "ส",
"m" => "แด",
"n" => "ษด",
"o" => "แด",
"p" => "แด",
"q" => "วซ",
"r" => "ส",
"s" => "s",
"t" => "แด",
"u" => "แด",
"v" => "แด ",
"w" => "แดก",
"x" => "x",
"y" => "ส",
"z" => "แดข"
})
end
def format(text, :aesthetic) do
substitute(text, %{
"a" => "๏ฝ",
"A" => "๏ผก",
"b" => "๏ฝ",
"B" => "๏ผข",
"c" => "๏ฝ",
"C" => "๏ผฃ",
"d" => "๏ฝ",
"D" => "๏ผค",
"e" => "๏ฝ
",
"E" => "๏ผฅ",
"f" => "๏ฝ",
"F" => "๏ผฆ",
"g" => "๏ฝ",
"G" => "๏ผง",
"h" => "๏ฝ",
"H" => "๏ผจ",
"i" => "๏ฝ",
"I" => "๏ผฉ",
"j" => "๏ฝ",
"J" => "๏ผช",
"k" => "๏ฝ",
"K" => "๏ผซ",
"l" => "๏ฝ",
"L" => "๏ผฌ",
"m" => "๏ฝ",
"M" => "๏ผญ",
"n" => "๏ฝ",
"N" => "๏ผฎ",
"o" => "๏ฝ",
"O" => "๏ผฏ",
"p" => "๏ฝ",
"P" => "๏ผฐ",
"q" => "๏ฝ",
"Q" => "๏ผฑ",
"r" => "๏ฝ",
"R" => "๏ผฒ",
"s" => "๏ฝ",
"S" => "๏ผณ",
"t" => "๏ฝ",
"T" => "๏ผด",
"u" => "๏ฝ",
"U" => "๏ผต",
"v" => "๏ฝ",
"V" => "๏ผถ",
"w" => "๏ฝ",
"W" => "๏ผท",
"x" => "๏ฝ",
"X" => "๏ผธ",
"y" => "๏ฝ",
"Y" => "๏ผน",
"z" => "๏ฝ",
"Z" => "๏ผบ",
"1" => "๏ผ",
"2" => "๏ผ",
"3" => "๏ผ",
"4" => "๏ผ",
"5" => "๏ผ",
"6" => "๏ผ",
"7" => "๏ผ",
"8" => "๏ผ",
"9" => "๏ผ",
"0" => "๏ผ",
"<" => "๏ผ",
"~" => "๏ฝ",
">" => "๏ผ",
"!" => "๏ผ",
"." => "๏ผ",
"@" => "๏ผ ",
"/" => "๏ผ",
"#" => "๏ผ",
"\\" => "๏ผผ",
"$" => "๏ผ",
"?" => "๏ผ",
"%" => "๏ผ
",
";" => "๏ผ",
"^" => "๏ผพ",
":" => "๏ผ",
"&" => "๏ผ",
"'" => "๏ผ",
"*" => "๏ผ",
"\"" => "๏ผ",
"(" => "๏ผ",
")" => "๏ผ",
"_" => "๏ผฟ",
"+" => "๏ผ"
})
end
def format(text, :monospace) do
substitute(text, %{
"a" => "๐",
"A" => "๐ฐ",
"b" => "๐",
"B" => "๐ฑ",
"c" => "๐",
"C" => "๐ฒ",
"d" => "๐",
"D" => "๐ณ",
"e" => "๐",
"E" => "๐ด",
"f" => "๐",
"F" => "๐ต",
"g" => "๐",
"G" => "๐ถ",
"h" => "๐",
"H" => "๐ท",
"i" => "๐",
"I" => "๐ธ",
"j" => "๐",
"J" => "๐น",
"k" => "๐",
"K" => "๐บ",
"l" => "๐",
"L" => "๐ป",
"m" => "๐",
"M" => "๐ผ",
"n" => "๐",
"N" => "๐ฝ",
"o" => "๐",
"O" => "๐พ",
"p" => "๐",
"P" => "๐ฟ",
"q" => "๐",
"Q" => "๐",
"r" => "๐",
"R" => "๐",
"s" => "๐",
"S" => "๐",
"t" => "๐",
"T" => "๐",
"u" => "๐",
"U" => "๐",
"v" => "๐",
"V" => "๐
",
"w" => "๐ ",
"W" => "๐",
"x" => "๐ก",
"X" => "๐",
"y" => "๐ข",
"Y" => "๐",
"z" => "๐ฃ",
"Z" => "๐",
"1" => "๐ท",
"2" => "๐ธ",
"3" => "๐น",
"4" => "๐บ",
"5" => "๐ป",
"6" => "๐ผ",
"7" => "๐ฝ",
"8" => "๐พ",
"9" => "๐ฟ"
})
end
def format(text, :bold) do
substitute(text, %{
"a" => "๐",
"A" => "๐",
"b" => "๐",
"B" => "๐",
"c" => "๐",
"C" => "๐",
"d" => "๐",
"D" => "๐",
"e" => "๐",
"E" => "๐",
"f" => "๐",
"F" => "๐
",
"g" => "๐ ",
"G" => "๐",
"h" => "๐ก",
"H" => "๐",
"i" => "๐ข",
"I" => "๐",
"j" => "๐ฃ",
"J" => "๐",
"k" => "๐ค",
"K" => "๐",
"l" => "๐ฅ",
"L" => "๐",
"m" => "๐ฆ",
"M" => "๐",
"n" => "๐ง",
"N" => "๐",
"o" => "๐จ",
"O" => "๐",
"p" => "๐ฉ",
"P" => "๐",
"q" => "๐ช",
"Q" => "๐",
"r" => "๐ซ",
"R" => "๐",
"s" => "๐ฌ",
"S" => "๐",
"t" => "๐ญ",
"T" => "๐",
"u" => "๐ฎ",
"U" => "๐",
"v" => "๐ฏ",
"V" => "๐",
"w" => "๐ฐ",
"W" => "๐",
"x" => "๐ฑ",
"X" => "๐",
"y" => "๐ฒ",
"Y" => "๐",
"z" => "๐ณ",
"Z" => "๐",
"1" => "๐",
"2" => "๐",
"3" => "๐",
"4" => "๐",
"5" => "๐",
"6" => "๐",
"7" => "๐",
"8" => "๐",
"9" => "๐",
"0" => "๐"
})
end
def format(text, :superscript) do
substitute(text, %{
"a" => "แต",
"A" => "แดฌ",
"b" => "แต",
"B" => "แดฎ",
"c" => "แถ",
"C" => "๊ฒ",
"d" => "แต",
"D" => "แดฐ",
"e" => "แต",
"E" => "แดฑ",
"f" => "แถ ",
"F" => "๊ณ",
"g" => "แต",
"G" => "แดณ",
"h" => "สฐ",
"H" => "แดด",
"i" => "แถฆ",
"I" => "แดต",
"j" => "สฒ",
"J" => "แดถ",
"k" => "แต",
"K" => "แดท",
"l" => "หก",
"L" => "แดธ",
"m" => "แต",
"M" => "แดน",
"n" => "โฟ",
"N" => "แดบ",
"o" => "แต",
"O" => "แดผ",
"p" => "แต",
"P" => "แดพ",
"q" => "๐ฅ",
"Q" => "๊ด",
"r" => "สณ",
"R" => "แดฟ",
"s" => "หข",
"S" => "หข",
"t" => "แต",
"T" => "แต",
"u" => "แต",
"U" => "แต",
"v" => "แต",
"V" => "โฑฝ",
"w" => "สท",
"W" => "แต",
"x" => "หฃ",
"X" => "หฃ",
"y" => "สธ",
"Y" => "สธ",
"z" => "แถป",
"Z" => "แถป",
"1" => "ยน",
"2" => "ยฒ",
"3" => "ยณ",
"4" => "โด",
"5" => "โต",
"6" => "โถ",
"7" => "โท",
"8" => "โธ",
"9" => "โน",
"0" => "โฐ",
"(" => "โฝ",
")" => "โพ",
"+" => "โบ"
})
end
def format(text, :italic) do
substitute(text, %{
"a" => "๐",
"A" => "๐ด",
"b" => "๐",
"B" => "๐ต",
"c" => "๐",
"C" => "๐ถ",
"d" => "๐",
"D" => "๐ท",
"e" => "๐",
"E" => "๐ธ",
"f" => "๐",
"F" => "๐น",
"g" => "๐",
"G" => "๐บ",
"h" => "โ",
"H" => "๐ป",
"i" => "๐",
"I" => "๐ผ",
"j" => "๐",
"J" => "๐ฝ",
"k" => "๐",
"K" => "๐พ",
"l" => "๐",
"L" => "๐ฟ",
"m" => "๐",
"M" => "๐",
"n" => "๐",
"N" => "๐",
"o" => "๐",
"O" => "๐",
"p" => "๐",
"P" => "๐",
"q" => "๐",
"Q" => "๐",
"r" => "๐",
"R" => "๐
",
"s" => "๐ ",
"S" => "๐",
"t" => "๐ก",
"T" => "๐",
"u" => "๐ข",
"U" => "๐",
"v" => "๐ฃ",
"V" => "๐",
"w" => "๐ค",
"W" => "๐",
"x" => "๐ฅ",
"X" => "๐",
"y" => "๐ฆ",
"Y" => "๐",
"z" => "๐ง",
"Z" => "๐"
})
end
# taken from:
#
# TODO: I suspect this could be replaced with macro douchebaggery. -crertel
@doc """
Given a binary and a map of codepoint replacements, does so.
Implementation cribbed from [here](https://elixirforum.com/t/is-there-a-faster-way-to-write-this-code/18486/3).
## Examples
iex> Fonticode.substitute("ABCDE", %{"C" => "X", "D" => "Y"})
"ABXYE"
iex> Fonticode.substitute("ABCDE", %{"C" => "D", "D" => "C"})
"ABDCE"
"""
@spec substitute(String.t(), substitution_map) :: String.t()
def substitute(data, subs) when is_binary(data) and is_map(subs) do
match_list = :binary.matches(data, Map.keys(subs))
IO.iodata_to_binary(do_replace(data, match_list, subs, 0))
end
@spec do_replace(String.t(), [{non_neg_integer, integer}], substitution_map, non_neg_integer) ::
[any]
defp do_replace(h, [], _, n)
when is_binary(h) and is_integer(n) do
[:binary.part(h, {n, byte_size(h) - n})]
end
defp do_replace(h, [{a, b} | t], subs, n)
when is_binary(h) and
is_map(subs) and
is_list(t) and
is_integer(a) and
is_integer(b) and
is_integer(n) do
[
:binary.part(h, {n, a - n}),
Map.get(subs, :binary.part(h, {a, b}))
| do_replace(h, t, subs, a + b)
]
end
end