// SPDX-FileCopyrightText: Gordon Leung // 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(_) -> "" } }