; --==[[########################################################################################################]]==-- ; --==[[ Script : KennySpeak Lua ]]==-- ; --==[[ Author : Imagine Programming ]]==-- ; --==[[ Website : www.imagine-programming.com ]]==-- ; --==[[ Functions : ]]==-- ; --==[[ IsInArray() Checks if a certain integer exists within an array. ]]==-- ; --==[[ TranslateKenny() Translates normal text to kennyspeak, and back. ]]==-- ; --==[[ Designed and coded for PureBasic 4.41 and later ]]==-- ; --==[[########################################################################################################]]==-- Declare.i IsInArray (Array arr.c(1), intValue.i) Declare.s TranslateKenny(szKennyText.s) ; Global array for all allowed characters for the normal dialect. Global Dim arrCharacters.c(0) ; A compiler macro to make things easier, this one adds a character to the array and redim's it. Macro AddChar(c) arrCharacters(ArraySize(arrCharacters()))=c ReDim arrCharacters(ArraySize(arrCharacters())+1) EndMacro Define c.c ; Add all the normal characters to the array, leaving out the kennyspeak ones. For c=65 To 90 :If(c<>'M')And(c<>'P')And(c<>'F'):AddChar(c):EndIf:Next c For c=97 To 122:If(c<>'m')And(c<>'p')And(c<>'f'):AddChar(c):EndIf:Next c Procedure.i IsInArray (Array arr.c(1), intValue.i) Protected intArraySize.i = ArraySize(arr()) Protected i.i If intArraySize For i=0 To intArraySize-1 If(arr(i)=intValue) ProcedureReturn #True ; or simply, 1 EndIf Next i EndIf ProcedureReturn #False ; or simply, 0 EndProcedure Procedure.s TranslateKenny(szKennyText.s) ; Define the protected variables used inside this procedure. ; The memory used for all protected variables will be freed at ; the end of this functioncall. Protected szDialect.s = "KENNYSPEAK" Protected szTranslated.s = "" Protected intSzLen.i = StringByteLength(szKennyText) Protected i.i,c.c,b.s For i=0 To intSzLen-1 If(IsInArray(arrCharacters(),PeekC(@szKennyText+i))) szDialect = "NORMAL" Break EndIf Next i Select szDialect Case "NORMAL" For i=0 To intSzLen-1 c = PeekC(@szKennyText+i) Select c ; "" is a string, '' is a number in ascii form, converted to a number by the compiler. ;- Lower case characters ;{ Case 'e' : szTranslated + "mpp" Case 't' : szTranslated + "fmp" Case 'a' : szTranslated + "mmm" Case 'o' : szTranslated + "ppf" Case 'i' : szTranslated + "mff" Case 'n' : szTranslated + "ppp" Case 's' : szTranslated + "fmm" Case 'h' : szTranslated + "mfp" Case 'r' : szTranslated + "pff" Case 'd' : szTranslated + "mpm" Case 'l' : szTranslated + "pmf" Case 'c' : szTranslated + "mmf" Case 'u' : szTranslated + "fmf" Case 'm' : szTranslated + "ppm" Case 'w' : szTranslated + "fpp" Case 'f' : szTranslated + "mpf" Case 'g' : szTranslated + "mfm" Case 'y' : szTranslated + "ffm" Case 'p' : szTranslated + "pfm" Case 'b' : szTranslated + "mmp" Case 'v' : szTranslated + "fpm" Case 'k' : szTranslated + "pmp" Case 'j' : szTranslated + "pmm" Case 'x' : szTranslated + "fpf" Case 'q' : szTranslated + "pfp" Case 'z' : szTranslated + "ffp" ;} ;- Uppser case characters ;{ Case 'E' : szTranslated + "Mpp" Case 'T' : szTranslated + "Fmp" Case 'A' : szTranslated + "Mmm" Case 'O' : szTranslated + "Ppf" Case 'I' : szTranslated + "Mff" Case 'N' : szTranslated + "Ppp" Case 'S' : szTranslated + "Fmm" Case 'H' : szTranslated + "Mfp" Case 'R' : szTranslated + "Pff" Case 'D' : szTranslated + "Mpm" Case 'L' : szTranslated + "Pmf" Case 'C' : szTranslated + "Mmf" Case 'U' : szTranslated + "Fmf" Case 'M' : szTranslated + "Ppm" Case 'W' : szTranslated + "Fpp" Case 'F' : szTranslated + "Mpf" Case 'G' : szTranslated + "Mfm" Case 'Y' : szTranslated + "Ffm" Case 'P' : szTranslated + "Pfm" Case 'B' : szTranslated + "Mmp" Case 'V' : szTranslated + "Fpm" Case 'K' : szTranslated + "Pmp" Case 'J' : szTranslated + "Pmm" Case 'X' : szTranslated + "Fpf" Case 'Q' : szTranslated + "Pfp" Case 'Z' : szTranslated + "Ffp" Default : szTranslated + Chr(c) ;} EndSelect Next i Case "KENNYSPEAK" For i=0 To intSzLen-1 c = PeekC(@szKennyText+i) b = PeekS(@szKennyText+i+1,2) Select c ;- Lower case kenny words Case 'm' ;{ Select b Case "pp" : szTranslated + "e" : i+2 Case "mm" : szTranslated + "a" : i+2 Case "ff" : szTranslated + "i" : i+2 Case "fp" : szTranslated + "h" : i+2 Case "pm" : szTranslated + "d" : i+2 Case "mf" : szTranslated + "c" : i+2 Case "pf" : szTranslated + "f" : i+2 Case "fm" : szTranslated + "g" : i+2 Case "mp" : szTranslated + "b" : i+2 EndSelect ;} Case 'p' ;{ Select b Case "pf" : szTranslated + "o" : i+2 Case "pp" : szTranslated + "n" : i+2 Case "ff" : szTranslated + "r" : i+2 Case "mf" : szTranslated + "l" : i+2 Case "pm" : szTranslated + "m" : i+2 Case "fm" : szTranslated + "p" : i+2 Case "mp" : szTranslated + "k" : i+2 Case "mm" : szTranslated + "j" : i+2 Case "fp" : szTranslated + "q" : i+2 EndSelect ;} Case 'f' ;{ Select b Case "mp" : szTranslated + "t" : i+2 Case "mm" : szTranslated + "s" : i+2 Case "mf" : szTranslated + "u" : i+2 Case "pp" : szTranslated + "w" : i+2 Case "fm" : szTranslated + "y" : i+2 Case "pm" : szTranslated + "v" : i+2 Case "pf" : szTranslated + "x" : i+2 Case "fp" : szTranslated + "z" : i+2 EndSelect ;} ;- Upper case kenny words Case 'M' ;{ Select b Case "pp" : szTranslated + "E" : i+2 Case "mm" : szTranslated + "A" : i+2 Case "ff" : szTranslated + "I" : i+2 Case "fp" : szTranslated + "H" : i+2 Case "pm" : szTranslated + "D" : i+2 Case "mf" : szTranslated + "C" : i+2 Case "pf" : szTranslated + "F" : i+2 Case "fm" : szTranslated + "G" : i+2 Case "mp" : szTranslated + "B" : i+2 EndSelect ;} Case 'P' ;{ Select b Case "pf" : szTranslated + "O" : i+2 Case "pp" : szTranslated + "N" : i+2 Case "ff" : szTranslated + "R" : i+2 Case "mf" : szTranslated + "L" : i+2 Case "pm" : szTranslated + "M" : i+2 Case "fm" : szTranslated + "P" : i+2 Case "mp" : szTranslated + "K" : i+2 Case "mm" : szTranslated + "J" : i+2 Case "fp" : szTranslated + "Q" : i+2 EndSelect ;} Case 'F' ;{ Select b Case "mp" : szTranslated + "T" : i+2 Case "mm" : szTranslated + "S" : i+2 Case "mf" : szTranslated + "U" : i+2 Case "pp" : szTranslated + "W" : i+2 Case "fm" : szTranslated + "Y" : i+2 Case "pm" : szTranslated + "V" : i+2 Case "pf" : szTranslated + "X" : i+2 Case "fp" : szTranslated + "Z" : i+2 EndSelect ;} Default szTranslated + Chr(c) EndSelect Next i EndSelect ProcedureReturn szTranslated EndProcedure ;- Example usage: Define szKennyfiedText.s = PeekS(?KennyfiedText) ; Peek the data as a string. Debug szKennyfiedText ; Show the user the string, before we convert it back to the NORMAL dialect. Debug TranslateKenny(szKennyfiedText) ; Translate the string into NORMAL dialect and show it. DataSection KennyfiedText: ; Some kennyfied text generated using the online translator. ; Contents: Fmpmfpmfffmm fmpmppfpffmp mfpmmmfmm mmpmppmppppp mfmmpppppmpppffmmmfmpmppmpm fmffmmmffpppmfm fmpmfpmpp ppmmpfmpfpfmppmpfm pmpmppppppppffmfmmpfmmppmmmpmp mfmmpppppmpppffmmmfmpppfpff ppfppp pppmmmppmmppfmmfmfpffpfmpffmppfmmfmmmppmpm.mmfppfppm! Data.q $666D70666D706D46, $706D66206D6D6666, $6D6666706670706D, $6D6D6D70666D2070, $6D706D6D206D6D66, $70707070706D7070 Data.q $7070706D6D666D20, $66667070706D7070, $706D706D666D6D6D, $666D66206D706D70, $707066666D6D6D66, $706D66206D666D70 Data.q $702070706D70666D, $66706D66706D6D70, $66706D70706D6670, $70706D706D70206D, $6666707070707070, $6D6D66706D6D666D Data.q $706D706D6D6D7070, $7070706D6D666D20, $66667070706D7070, $7070706D666D6D6D, $6670702066667066, $6D70707020707070 Data.q $70706D6D70706D6D, $6670666D666D6D66, $6D6666706D667066, $6D6D666D6D667070, $6D2E6D706D70706D, $6D7070667070666D Data.q $3437303237340021 Data.c 0 ; Ending 0 character EndDataSection ; IDE Options = PureBasic 4.50 (Windows - x86) ; CursorPosition = 15 ; Folding = -- ; EnableXP ; CompileSourceDirectory