Packages

Glingify your strings!

Current section

Files

Jump to
gling src gling.gleam
Raw

src/gling.gleam

// SPDX-FileCopyrightText: Gordon Leung <pirateclip@protonmail.com>
// SPDX-License-Identifier: MPL-2.0
import gleam/string
import internal/regexing
/// Glingify your strings
pub fn glingify_en(str: String) -> String {
regexing.glingify_by_regex(str, "([a-zA-Z]*)([^a-zA-Z]*)", glingify_word_en)
}
/// Glingify a single word
pub fn glingify_word_en(word: String) -> String {
case string.pop_grapheme(word) {
Ok(#("e", _))
| Ok(#("a", _))
| Ok(#("i", _))
| Ok(#("o", _))
| Ok(#("u", _)) -> string.append("gl", word)
Ok(#("r", rest))
| Ok(#("h", rest))
| Ok(#("j", rest))
| Ok(#("l", rest))
| Ok(#("m", rest))
| Ok(#("n", rest))
| Ok(#("v", rest))
| Ok(#("x", rest))
| Ok(#("y", rest))
| Ok(#("z", rest)) -> string.append("gl", rest)
Ok(#("b", rest)) | Ok(#("d", rest)) | Ok(#("f", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("r", tail)) -> string.append("gl", tail)
Ok(#(_, _)) -> string.append("gl", rest)
Error(_) -> "gl"
}
Ok(#("c", rest))
| Ok(#("g", rest))
| Ok(#("k", rest))
| Ok(#("p", rest))
| Ok(#("q", rest))
| Ok(#("t", rest))
| Ok(#("w", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("h", tail)) | Ok(#("r", tail)) | Ok(#("l", tail)) ->
string.append("gl", tail)
Ok(#(_, _)) -> string.append("gl", rest)
Error(_) -> "gl"
}
Ok(#("s", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("t", tail)) | Ok(#("h", tail)) -> string.append("gl", tail)
Ok(#(_, _)) -> string.append("gl", rest)
Error(_) -> "gl"
}
Ok(#("E", rest))
| Ok(#("A", rest))
| Ok(#("I", rest))
| Ok(#("O", rest))
| Ok(#("U", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("A", _))
| Ok(#("B", _))
| Ok(#("C", _))
| Ok(#("D", _))
| Ok(#("E", _))
| Ok(#("F", _))
| Ok(#("G", _))
| Ok(#("H", _))
| Ok(#("I", _))
| Ok(#("J", _))
| Ok(#("K", _))
| Ok(#("L", _))
| Ok(#("M", _))
| Ok(#("N", _))
| Ok(#("O", _))
| Ok(#("P", _))
| Ok(#("Q", _))
| Ok(#("R", _))
| Ok(#("S", _))
| Ok(#("T", _))
| Ok(#("U", _))
| Ok(#("V", _))
| Ok(#("W", _))
| Ok(#("X", _))
| Ok(#("Y", _))
| Ok(#("Z", _)) -> string.append("GL", word)
Ok(#(_, _)) -> string.append("Gl", word)
Error(_) -> "Gl"
}
Ok(#("R", rest))
| Ok(#("H", rest))
| Ok(#("J", rest))
| Ok(#("L", rest))
| Ok(#("M", rest))
| Ok(#("N", rest))
| Ok(#("V", rest))
| Ok(#("X", rest))
| Ok(#("Y", rest))
| Ok(#("Z", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("A", _))
| Ok(#("B", _))
| Ok(#("C", _))
| Ok(#("D", _))
| Ok(#("E", _))
| Ok(#("F", _))
| Ok(#("G", _))
| Ok(#("H", _))
| Ok(#("I", _))
| Ok(#("J", _))
| Ok(#("K", _))
| Ok(#("L", _))
| Ok(#("M", _))
| Ok(#("N", _))
| Ok(#("O", _))
| Ok(#("P", _))
| Ok(#("Q", _))
| Ok(#("R", _))
| Ok(#("S", _))
| Ok(#("T", _))
| Ok(#("U", _))
| Ok(#("V", _))
| Ok(#("W", _))
| Ok(#("X", _))
| Ok(#("Y", _))
| Ok(#("Z", _)) -> string.append("GL", rest)
Ok(#(_, _)) -> string.append("Gl", rest)
Error(_) -> "Gl"
}
Ok(#("B", rest)) | Ok(#("D", rest)) | Ok(#("F", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("r", tail)) -> string.append("Gl", tail)
Ok(#("A", _))
| Ok(#("B", _))
| Ok(#("C", _))
| Ok(#("D", _))
| Ok(#("E", _))
| Ok(#("F", _))
| Ok(#("G", _))
| Ok(#("H", _))
| Ok(#("I", _))
| Ok(#("J", _))
| Ok(#("K", _))
| Ok(#("L", _))
| Ok(#("M", _))
| Ok(#("N", _))
| Ok(#("O", _))
| Ok(#("P", _))
| Ok(#("Q", _))
| Ok(#("S", _))
| Ok(#("T", _))
| Ok(#("U", _))
| Ok(#("V", _))
| Ok(#("W", _))
| Ok(#("X", _))
| Ok(#("Y", _))
| Ok(#("Z", _)) -> string.append("GL", rest)
Ok(#("R", tail)) -> string.append("GL", tail)
Ok(#(_, _)) -> string.append("Gl", rest)
Error(_) -> "Gl"
}
Ok(#("C", rest))
| Ok(#("G", rest))
| Ok(#("K", rest))
| Ok(#("P", rest))
| Ok(#("Q", rest))
| Ok(#("T", rest))
| Ok(#("W", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("h", tail)) | Ok(#("r", tail)) | Ok(#("r", tail)) ->
string.append("Gl", tail)
Ok(#("A", _))
| Ok(#("B", _))
| Ok(#("C", _))
| Ok(#("D", _))
| Ok(#("E", _))
| Ok(#("F", _))
| Ok(#("G", _))
| Ok(#("I", _))
| Ok(#("J", _))
| Ok(#("K", _))
| Ok(#("M", _))
| Ok(#("N", _))
| Ok(#("O", _))
| Ok(#("P", _))
| Ok(#("Q", _))
| Ok(#("S", _))
| Ok(#("T", _))
| Ok(#("U", _))
| Ok(#("V", _))
| Ok(#("W", _))
| Ok(#("X", _))
| Ok(#("Y", _))
| Ok(#("Z", _)) -> string.append("GL", rest)
Ok(#("H", tail)) | Ok(#("R", tail)) | Ok(#("L", tail)) ->
string.append("GL", tail)
Ok(#(_, _)) -> string.append("Gl", rest)
Error(_) -> "Gl"
}
Ok(#("S", rest)) ->
case string.pop_grapheme(rest) {
Ok(#("t", tail)) | Ok(#("h", tail)) -> string.append("Gl", tail)
Ok(#("A", _))
| Ok(#("B", _))
| Ok(#("C", _))
| Ok(#("D", _))
| Ok(#("E", _))
| Ok(#("F", _))
| Ok(#("G", _))
| Ok(#("I", _))
| Ok(#("J", _))
| Ok(#("K", _))
| Ok(#("L", _))
| Ok(#("M", _))
| Ok(#("N", _))
| Ok(#("O", _))
| Ok(#("P", _))
| Ok(#("Q", _))
| Ok(#("R", _))
| Ok(#("S", _))
| Ok(#("U", _))
| Ok(#("V", _))
| Ok(#("W", _))
| Ok(#("X", _))
| Ok(#("Y", _))
| Ok(#("Z", _)) -> string.append("GL", rest)
Ok(#("T", tail)) | Ok(#("H", tail)) -> string.append("GL", tail)
Ok(#(_, _)) -> string.append("Gl", rest)
Error(_) -> "Gl"
}
Ok(_) -> word
Error(_) -> ""
}
}