Android Question Php2B4X Permalink Generator

ykucuk

Well-Known Member
Licensed User
Longtime User
Hi ,

is there any way to convert below function(PHP) to B4X ?

B4X:
function permalink($str, $options = array()){
$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
$defaults = array(
'delimiter' => '-',
'limit' => null,
'lowercase' => true,
'replacements' => array(),
'transliterate' => true
);
$options = array_merge($defaults, $options);
$char_map = array(
// Latin
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O',
'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
'ß' => 'ss',
'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o',
'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th',
'ÿ' => 'y',
// Latin symbols
'©' => '(c)',
// Greek
'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8',
'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P',
'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W',
'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I',
'Ϋ' => 'Y',
'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8',
'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p',
'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w',
'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's',
'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i',
// Turkish
'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G',
'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g',
// Russian
'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh',
'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O',
'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu',
'Я' => 'Ya',
'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh',
'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu',
'я' => 'ya',
// Ukrainian
'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G',
'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g',
// Czech
'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U',
'Ž' => 'Z',
'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u',
'ž' => 'z',
// Polish
'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z',
'Ż' => 'Z',
'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
'ż' => 'z',
// Latvian
'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N',
'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z',
'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n',
'š' => 's', 'ū' => 'u', 'ž' => 'z'
);
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
if ($options['transliterate']) {
$str = str_replace(array_keys($char_map), $char_map, $str);
}
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
$str = trim($str, $options['delimiter']);
return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
}
 

emexes

Expert
Licensed User
Here is the bulk of it done:
B4X:
Dim TranslateMap As Map = CreateTranslateMap    'do once rather than for every translation
 
Dim Test As String = "©2019"
 
Log(Test)
Log(Translate(Test, TranslateMap))

Sub Translate(S As String, TranslateMap As Map) As String
 
    Dim T As String = S
 
    For I = 0 To TranslateMap.Size - 1
        T = T.Replace(TranslateMap.GetKeyAt(I), TranslateMap.GetValueAt(I))
    Next
 
    Return T
 
End Sub

Sub AddToMap(M As Map, S() As String)

    If (S.Length Mod 2) <> 0 Then
        Log("Array should be an even number of elements long")
        Log(S)
    End If
 
    For I = 0 To S.Length - 2 Step 2
        M.Put(S(I), S(I + 1))
    Next
 
End Sub

Sub CreateTranslateMap As Map
 
    Dim FromTo As Map
    FromTo.Initialize
 
    'Latin
    AddToMap(FromTo, Array As String("À", "A", "Á", "A", "Â", "A", "Ã", "A", "Ä", "A", "Å", "A", "Æ", "AE", "Ç", "C"))
    AddToMap(FromTo, Array As String("È", "E", "É", "E", "Ê", "E", "Ë", "E", "Ì", "I", "Í", "I", "Î", "I", "Ï", "I"))
    AddToMap(FromTo, Array As String("Ð", "D", "Ñ", "N", "Ò", "O", "Ó", "O", "Ô", "O", "Õ", "O", "Ö", "O", "Ő", "O"))
    AddToMap(FromTo, Array As String("Ø", "O", "Ù", "U", "Ú", "U", "Û", "U", "Ü", "U", "Ű", "U", "Ý", "Y", "Þ", "TH"))
    AddToMap(FromTo, Array As String("ß", "ss"))
    AddToMap(FromTo, Array As String("à", "a", "á", "a", "â", "a", "ã", "a", "ä", "a", "å", "a", "æ", "ae", "ç", "c"))
    AddToMap(FromTo, Array As String("è", "e", "é", "e", "ê", "e", "ë", "e", "ì", "i", "í", "i", "î", "i", "ï", "i"))
    AddToMap(FromTo, Array As String("ð", "d", "ñ", "n", "ò", "o", "ó", "o", "ô", "o", "õ", "o", "ö", "o", "ő", "o"))
    AddToMap(FromTo, Array As String("ø", "o", "ù", "u", "ú", "u", "û", "u", "ü", "u", "ű", "u", "ý", "y", "þ", "th"))
    AddToMap(FromTo, Array As String("ÿ", "y"))
    'Latin symbols
    AddToMap(FromTo, Array As String("©", "(c)"))
    'Greek
    AddToMap(FromTo, Array As String("Α", "A", "Β", "B", "Γ", "G", "Δ", "D", "Ε", "E", "Ζ", "Z", "Η", "H", "Θ", "8"))
    AddToMap(FromTo, Array As String("Ι", "I", "Κ", "K", "Λ", "L", "Μ", "M", "Ν", "N", "Ξ", "3", "Ο", "O", "Π", "P"))
    AddToMap(FromTo, Array As String("Ρ", "R", "Σ", "S", "Τ", "T", "Υ", "Y", "Φ", "F", "Χ", "X", "Ψ", "PS", "Ω", "W"))
    AddToMap(FromTo, Array As String("Ά", "A", "Έ", "E", "Ί", "I", "Ό", "O", "Ύ", "Y", "Ή", "H", "Ώ", "W", "Ϊ", "I"))
    AddToMap(FromTo, Array As String("Ϋ", "Y"))
    AddToMap(FromTo, Array As String("α", "a", "β", "b", "γ", "g", "δ", "d", "ε", "e", "ζ", "z", "η", "h", "θ", "8"))
    AddToMap(FromTo, Array As String("ι", "i", "κ", "k", "λ", "l", "μ", "m", "ν", "n", "ξ", "3", "ο", "o", "π", "p"))
    AddToMap(FromTo, Array As String("ρ", "r", "σ", "s", "τ", "t", "υ", "y", "φ", "f", "χ", "x", "ψ", "ps", "ω", "w"))
    AddToMap(FromTo, Array As String("ά", "a", "έ", "e", "ί", "i", "ό", "o", "ύ", "y", "ή", "h", "ώ", "w", "ς", "s"))
    AddToMap(FromTo, Array As String("ϊ", "i", "ΰ", "y", "ϋ", "y", "ΐ", "i"))
    'Turkish
    AddToMap(FromTo, Array As String("Ş", "S", "İ", "I", "Ç", "C", "Ü", "U", "Ö", "O", "Ğ", "G"))
    AddToMap(FromTo, Array As String("ş", "s", "ı", "i", "ç", "c", "ü", "u", "ö", "o", "ğ", "g"))
    'Russian
    AddToMap(FromTo, Array As String("А", "A", "Б", "B", "В", "V", "Г", "G", "Д", "D", "Е", "E", "Ё", "Yo", "Ж", "Zh"))
    AddToMap(FromTo, Array As String("З", "Z", "И", "I", "Й", "J", "К", "K", "Л", "L", "М", "M", "Н", "N", "О", "O"))
    AddToMap(FromTo, Array As String("П", "P", "Р", "R", "С", "S", "Т", "T", "У", "U", "Ф", "F", "Х", "H", "Ц", "C"))
    AddToMap(FromTo, Array As String("Ч", "Ch", "Ш", "Sh", "Щ", "Sh", "Ъ", "", "Ы", "Y", "Ь", "", "Э", "E", "Ю", "Yu"))
    AddToMap(FromTo, Array As String("Я", "Ya"))
    AddToMap(FromTo, Array As String("а", "a", "б", "b", "в", "v", "г", "g", "д", "d", "е", "e", "ё", "yo", "ж", "zh"))
    AddToMap(FromTo, Array As String("з", "z", "и", "i", "й", "j", "к", "k", "л", "l", "м", "m", "н", "n", "о", "o"))
    AddToMap(FromTo, Array As String("п", "p", "р", "r", "с", "s", "т", "t", "у", "u", "ф", "f", "х", "h", "ц", "c"))
    AddToMap(FromTo, Array As String("ч", "ch", "ш", "sh", "щ", "sh", "ъ", "", "ы", "y", "ь", "", "э", "e", "ю", "yu"))
    AddToMap(FromTo, Array As String("я", "ya"))
    'Ukrainian
    AddToMap(FromTo, Array As String("Є", "Ye", "І", "I", "Ї", "Yi", "Ґ", "G"))
    AddToMap(FromTo, Array As String("є", "ye", "і", "i", "ї", "yi", "ґ", "g"))
    'Czech
    AddToMap(FromTo, Array As String("Č", "C", "Ď", "D", "Ě", "E", "Ň", "N", "Ř", "R", "Š", "S", "Ť", "T", "Ů", "U"))
    AddToMap(FromTo, Array As String("Ž", "Z"))
    AddToMap(FromTo, Array As String("č", "c", "ď", "d", "ě", "e", "ň", "n", "ř", "r", "š", "s", "ť", "t", "ů", "u"))
    AddToMap(FromTo, Array As String("ž", "z"))
    'Polish
    AddToMap(FromTo, Array As String("Ą", "A", "Ć", "C", "Ę", "e", "Ł", "L", "Ń", "N", "Ó", "o", "Ś", "S", "Ź", "Z"))
    AddToMap(FromTo, Array As String("Ż", "Z"))
    AddToMap(FromTo, Array As String("ą", "a", "ć", "c", "ę", "e", "ł", "l", "ń", "n", "ó", "o", "ś", "s", "ź", "z"))
    AddToMap(FromTo, Array As String("ż", "z"))
    'Latvian
    AddToMap(FromTo, Array As String("Ā", "A", "Č", "C", "Ē", "E", "Ģ", "G", "Ī", "i", "Ķ", "k", "Ļ", "L", "Ņ", "N"))
    AddToMap(FromTo, Array As String("Š", "S", "Ū", "u", "Ž", "Z"))
    AddToMap(FromTo, Array As String("ā", "a", "č", "c", "ē", "e", "ģ", "g", "ī", "i", "ķ", "k", "ļ", "l", "ņ", "n"))
    AddToMap(FromTo, Array As String("š", "s", "ū", "u", "ž", "z"))
 
    Return FromTo

End Sub
I have left the fun bits for you to do...

:)
 
Upvote 0
Top