Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; AZJIO преобразование текста набранного в неправильной раскладке клавиатуры
- ; создайте горячие клавиши и команды "text-correction -r" (исправление раскладки) и "text-correction -m" (меню действий)
- ; [set]
- ; strsel=xdotool key ctrl+shift+0xff51
- ; strpaste=xdotool key ctrl+v
- ; strcopy=xdotool key ctrl+c
- ; Select=1
- ; paste=1
- ; lang1=`qwertyuiop[]asdfghjkl;'zxcvbnm,./~QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?@#$^&
- ; lang2=ёйцукенгшщзхъфывапролджэячсмитьбю.ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"№;:?
- ; DetectLang1=qwertyuiopasdfghjklzxcvbnm@#$^&
- ; DetectLang2=ёйцукенгшщзхъфывапролджэячсмитьбю№
- ; TranslitLang1=SHC shc YO yo ZH zh Y' y' KH kh CH ch TC tc SH sh E' e' YU yu YA ya A a B b V v G g D d E e Z z I i K k L l M m N n O o P p R r S s T t U u F f `` ` Y y '' '
- ; TranslitLang2=ЩщЁёЖжЙйХхЧчЦцШшЭэЮюЯяАаБбВвГгДдЕеЗзИиКкЛлМмНнОоПпРрСсТтУуФфЬьЫыЪъ
- ; CRLF=~
- EnableExplicit
- ; ImportC "-"
- ; kbhit()
- ; EndImport
- Declare.s ReadOutput(prog$="xsel", key$="")
- Declare SaveFile_Buff(File.s, *Buff, Size)
- Declare StrToArrLetter(Array Arr.s{1}(1), String$)
- Declare StrToArrLetter2(Array Arr.s(1), String$)
- Declare Replace()
- Declare EventUser()
- Declare ForceDirectories(Dir.s)
- Declare Split(String.s, Array StringArray.s(1), Separator.s = " ")
- Declare GetLangStr(Str$, LengthSel)
- Declare TestNext(i, code, num)
- Procedure SaveFile_Buff(File.s, *Buff, Size)
- Protected Result = #False
- Protected ID = CreateFile(#PB_Any, File)
- If ID
- If WriteData(ID, *Buff, Size) = Size
- Result = #True
- EndIf
- CloseFile(ID)
- EndIf
- ProcedureReturn Result
- EndProcedure
- Global PathReplace$ = GetHomeDirectory() + ".config/text-correction/replace.ini"
- Global PathHelp$ = "/usr/share/help/ru/text-correction/index.html"
- ; Global Help = 0
- ; If FileSize(PathHelp$) > 0
- ; Help = 1
- ; EndIf
- ; Global NotParam = 0 ; удалить флаг
- ; Прога не портабельная, так как требует регистрации горячих клавиш, поэтому отказываемся от ini рядом с исполняемым
- Global ini$ = GetHomeDirectory() + ".config/text-correction/text-correction.ini"
- If FileSize(ini$) < 8 And ForceDirectories(GetPathPart(ini$))
- SaveFile_Buff(ini$, ?ini, ?iniend - ?ini)
- EndIf
- ; флаги для вкл/откл нестабильного функционала эмуляции горячих клавиш
- Global AutoSelect = 0
- Global AutoPaste = 0
- Global RusCor = 1
- ; Global ClipBoard = 0
- ; Global ClipNoSelect = 0
- Global strsel$="xdotool key ctrl+shift+0xff51"
- Global strsel2$="xdotool key shift+0xff50"
- Global strpaste$="xdotool key ctrl+v"
- Global strcopy$="xdotool key ctrl+c"
- Global En$ = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./~QWERTYUIOP{}ASDFGHJKL:" + Chr(34) + "|ZXCVBNM<>?@#$^&"
- Global Ru$ = "ёйцукенгшщзхъфывапролджэячсмитьбю.ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ," + Chr(34) + "№;:?"
- Global EnT$ = "qwertyuiopasdfghjklzxcvbnm@#$^&"
- Global RuT$ = "ёйцукенгшщзхъфывапролджэячсмитьбю№"
- Global Translit1$="SHC shc YO yo ZH zh Y' y' KH kh CH ch TC tc SH sh E' e' YU yu YA ya A a B b V v G g D d E e Z z I i K k L l M m N n O o P p R r S s T t U u F f `` ` Y y '' '"
- Global Translit2$="ЩщЁёЖжЙйХхЧчЦцШшЭэЮюЯяАаБбВвГгДдЕеЗзИиКкЛлМмНнОоПпРрСсТтУуФфЬьЫыЪъ"
- ; у выше варианта буквы "qwhjxc" игнорируются, а у ниже варианта из RU в EN повторное не восстанавливает оригинал и для него над о 65 заменить на 77 в 17-ой строке
- ; Global Translit1$="SHC shc YO yo ZH zh Y' y' KH kh CH ch TC tc SH sh E' e' YU yu YA ya A a B b V v G g D d E e Z z I i K k L l M m N n O o P p R r S s T t U u F f `` ` Y y '' ' Q q W w H h J j X x C c"
- ; Global Translit2$="ЩщЁёЖжЙйХхЧчЦцШшЭэЮюЯяАаБбВвГгДдЕеЗзИиКкЛлМмНнОоПпРрСсТтУуФфЬьЫыЪъКкВвХхЖжХхСс"
- Global CRLF$="~"
- ; читаем настройки
- If FileSize(ini$) > 3 And OpenPreferences(ini$) And PreferenceGroup("set")
- AutoSelect = ReadPreferenceInteger("select", AutoSelect)
- AutoPaste = ReadPreferenceInteger("paste", AutoPaste)
- ; ClipBoard = ReadPreferenceInteger("clipboard", ClipBoard)
- ; ClipNoSelect = ReadPreferenceInteger("clipnoselect", ClipNoSelect)
- RusCor = ReadPreferenceInteger("rus", RusCor) ; коррекция для русского языка в режиме "инвертирование"
- strsel$ = ReadPreferenceString("strsel", strsel$)
- strsel2$ = ReadPreferenceString("strsel2", strsel2$)
- strpaste$ = ReadPreferenceString("strpaste", strpaste$)
- strcopy$ = ReadPreferenceString("strcopy", strcopy$)
- En$ = ReadPreferenceString("lang1", En$)
- Ru$ = ReadPreferenceString("lang2", Ru$)
- EnT$ = ReadPreferenceString("DetectLang1", EnT$)
- RuT$ = ReadPreferenceString("DetectLang2", RuT$)
- Translit1$ = ReadPreferenceString("TranslitLang1", Translit1$)
- Translit2$ = ReadPreferenceString("TranslitLang2", Translit2$)
- CRLF$ = ReadPreferenceString("CRLF", CRLF$)
- ClosePreferences()
- EndIf
- ; Поддержка ком-строки
- ; If Not CountProgramParameters()
- ; NotParam = 1
- ; EndIf
- ; Теперь это проверяется при эмуляции клавиш
- ; If FileSize("/usr/bin/xsel") < 1
- ; If ReadOutput("xsel", "--version") = ""
- ; MessageRequester("", "Пакет xsel не установлен.")
- ; EndIf
- ; Теперь это проверяется при эмуляции клавиш
- ; If FileSize("/usr/bin/xdotool") < 1
- ; If (AutoPaste Or AutoSelect) And ReadOutput("xdotool", "version") = ""
- ; MessageRequester("", "Пакет xdotool не установлен. Вы можете установить флаги AutoPaste=0 и AutoSelect=0 и работать без xdotool.")
- ; EndIf
- ; MessageRequester("ответ", "запуск выполнен")
- Global tmp
- Global Lang, LengthSel
- Global Dim aSel.s{1}(0)
- Global Dim aTranslit1.s(1)
- Global Dim aTranslit2.s(1)
- Global Selected_Text$, New_Text$
- Define i
- Procedure StrToArrLetter2(Array Arr.s(1), String$)
- Protected LenStr, i
- LenStr = Len(String$)
- If LenStr
- ReDim Arr(LenStr - 1)
- For i=0 To LenStr-1
- Arr(i) = Mid(String$, i+1, 1)
- Next
- EndIf
- EndProcedure
- Procedure.s ReadOutput(prog$="xsel", key$="")
- Protected tmp, res$
- tmp = RunProgram(prog$, key$, "", #PB_Program_Open | #PB_Program_Read)
- res$ = ""
- If tmp
- While ProgramRunning(tmp)
- If AvailableProgramOutput(tmp)
- res$ + ReadProgramString(tmp)
- EndIf
- Wend
- CloseProgram(tmp)
- EndIf
- ProcedureReturn res$
- EndProcedure
- Procedure Execute(comstr$)
- Protected Pos, Pos2, Command$
- comstr$ = LTrim(comstr$)
- If comstr$ = ""
- ProcedureReturn
- EndIf
- Pos = FindString(comstr$ , " ")
- If Pos
- Command$ = Mid(comstr$, 1, Pos-1)
- If Not RunProgram(Command$, Mid(comstr$, Pos+1), "", #PB_Program_Hide | #PB_Program_Wait) ; выделение работает
- MessageRequester("Ошибка", "Не удалось выполнить команду " + Command$ + ". Проверте что эта программа установлена.")
- ; MessageRequester("|" +Mid(comstr$, 1, Pos-1) + "|", "|" +Mid(comstr$, Pos+1) + "|")
- EndIf
- EndIf
- EndProcedure
- Procedure _Re(mode)
- Protected Old_bufer$, i, n, Layout, CountFor, Pos
- ; Old_bufer$ = GetClipboardText()
- ClearClipboard()
- ; Execute("xsel -c") ; очистка всех буферов
- Delay(90)
- Execute(strcopy$)
- Delay(30)
- Selected_Text$ = GetClipboardText()
- If AutoSelect And Selected_Text$=""
- Delay(10)
- If CountProgramParameters() = 2 And ProgramParameter(1)="-s"
- ; Execute("xdotool keyup ctrl") ; shift+home - выделить строку"
- Execute(strsel2$) ; shift+home - выделить строку
- Else
- Execute(strsel$) ; ctrl+shift+Left
- EndIf
- Delay(300)
- Selected_Text$ = ReadOutput()
- EndIf
- If Selected_Text$ = ""
- MessageRequester("Ошибка", "Нет выделенного текста")
- End
- EndIf
- LengthSel =Len(Selected_Text$)
- ; Язык определяем только для режимов 0 и 1 (ракскладка)
- If mode < 2 Or mode = 6
- GetLangStr(Selected_Text$, LengthSel)
- If Not Lang
- MessageRequester("Ошибка", "Не определён язык")
- End
- EndIf
- EndIf
- StrToArrLetter(aSel(), Selected_Text$) ; написать правильную безопасную функцию, в Linux (коррекция -1) работает иначе чем в Windows
- New_Text$ = ""
- Select mode
- Case 0
- ; если русский, то меняем на англ.
- If Lang = 419
- For i = 0 To ArraySize(aSel()) ; -1 коррекция для Linux
- n = FindString(Ru$, aSel(i), 1, #PB_String_CaseSensitive)
- If n = 0
- New_Text$ + aSel(i)
- Else
- New_Text$ + Mid(En$, n, 1)
- EndIf
- Next
- ; Layout = LoadKeyboardLayout_("00000409", #KLF_ACTIVATE)
- ; SendMessage_(GetForegroundWindow_(), #WM_INPUTLANGCHANGEREQUEST, 1, Layout)
- ; если английский, то меняем на русс.
- ElseIf Lang = 409
- For i = 0 To ArraySize(aSel()) ; -1 коррекция для Linux
- n = FindString(En$, aSel(i), 1, #PB_String_CaseSensitive)
- If n = 0
- New_Text$ + aSel(i)
- ; MessageRequester("выделенное", "|" + aSel(i) + "|")
- Else
- New_Text$ + Mid(Ru$, n, 1)
- EndIf
- Next
- ; Layout = LoadKeyboardLayout_("00000419", #KLF_ACTIVATE)
- ; SendMessage_(GetForegroundWindow_(), #WM_INPUTLANGCHANGEREQUEST, 1, Layout)
- EndIf
- Case 1 ; инвертирование раскладки
- If Lang
- For i = 0 To ArraySize(aSel()) ; -1 коррекция для Linux
- ;===========================================================
- ; если после запятой идёт слитно англ буква, то запятую следует преобразовать в "б", так как после запятой должен быть пробел
- ; особое распознавание в смешанном тексте для ;:? по левому символу (для русского языка), а также ,.<> для бюБЮ (бюдет юбка)
- If RusCor
- Select aSel(i)
- Case ","
- If TestNext(i, 32, 2)
- Continue
- EndIf
- Case "."
- If TestNext(i, 33, 2)
- Continue
- EndIf
- Case "<"
- If TestNext(i, 67, 1)
- Continue
- EndIf
- Case ">"
- If TestNext(i, 68, 1)
- Continue
- EndIf
- EndSelect
- If FindString(";:?", aSel(i))
- tmp = 1
- Pos = 0
- While i - tmp > 0 And Pos=0 And tmp < 3 ; ищем справа 2 символа, чтобы определить язык на участке
- Pos = FindString(EnT$, aSel(i - tmp))
- If Pos
- Select aSel(i)
- Case ";"
- New_Text$ + Mid(Ru$, 23, 1)
- Case ":"
- New_Text$ + Mid(Ru$, 57, 1)
- Case "?"
- New_Text$ + Mid(Ru$, 69, 1)
- EndSelect
- Break
- Else
- Pos = FindString(RuT$, aSel(i - tmp))
- If Pos
- Select aSel(i)
- Case ";"
- New_Text$ + Mid(En$, 72, 1)
- Case ":"
- New_Text$ + Mid(En$, 73, 1)
- Case "?"
- New_Text$ + Mid(En$, 74, 1)
- EndSelect
- Break
- EndIf
- EndIf
- tmp + 1
- Wend
- If Pos
- Continue
- EndIf
- ;`knsq
- tmp = 1
- Pos = 0
- ; Debug Str(i + tmp)
- ; Debug Str(LengthSel-1)
- While i + tmp < LengthSel-1 And Pos=0 And tmp < 3 ; ищем слева 2 символа, чтобы определить язык на участке
- Pos = FindString(EnT$, aSel(i + tmp))
- Debug aSel(i + tmp)
- If Pos
- Select aSel(i)
- Case ";"
- New_Text$ + Mid(Ru$, 23, 1)
- Case ":"
- New_Text$ + Mid(Ru$, 57, 1)
- Case "?"
- New_Text$ + Mid(Ru$, 69, 1)
- EndSelect
- Break
- Else
- Pos = FindString(RuT$, aSel(i + tmp))
- If Pos
- Select aSel(i)
- Case ";"
- New_Text$ + Mid(En$, 72, 1)
- Case ":"
- New_Text$ + Mid(En$, 73, 1)
- Case "?"
- New_Text$ + Mid(En$, 74, 1)
- EndSelect
- Break
- EndIf
- EndIf
- tmp + 1
- Wend
- If Not Pos
- New_Text$ + aSel(i)
- EndIf
- Continue
- EndIf
- EndIf
- ;===========================================================
- n = FindString(Ru$, aSel(i), 1, #PB_String_CaseSensitive)
- If n
- New_Text$ + Mid(En$, n, 1)
- Else
- n = FindString(En$, aSel(i), 1, #PB_String_CaseSensitive)
- If n
- New_Text$ + Mid(Ru$, n, 1)
- Else
- New_Text$ + aSel(i)
- EndIf
- EndIf
- Next
- EndIf
- Case 2 ; Замена
- Replace()
- ; 1 открыть файл
- ; 2 найти слово начинающееся на перенос заканчивающееся на =
- ; 3 найти конец строки
- ; 4 отправить в буфер
- Case 3 ; Красная строка
- New_Text$ = UCase(Left(Selected_Text$, 1)) + LCase(Mid(Selected_Text$, 2))
- Case 4 ; Нижний регистр
- New_Text$ = LCase(Selected_Text$)
- Case 5 ; Верхний регистр
- New_Text$ = UCase(Selected_Text$)
- Case 6 ; Транслитерация
- New_Text$ = Selected_Text$
- If FindString(Translit1$ , " ")
- Split(Translit1$, aTranslit1())
- Else
- StrToArrLetter2(aTranslit1(), Translit1$)
- EndIf
- If FindString(Translit2$ , " ")
- Split(Translit2$, aTranslit2())
- Else
- StrToArrLetter2(aTranslit2(), Translit2$)
- EndIf
- If ArraySize(aTranslit1()) > ArraySize(aTranslit2())
- CountFor = ArraySize(aTranslit2())
- Else
- CountFor = ArraySize(aTranslit1())
- EndIf
- If Lang = 409
- For i = 0 To CountFor
- New_Text$ = ReplaceString(New_Text$, aTranslit1(i), aTranslit2(i), #PB_String_CaseSensitive)
- Next
- ElseIf Lang = 419
- For i = 0 To CountFor
- New_Text$ = ReplaceString(New_Text$, aTranslit2(i), aTranslit1(i), #PB_String_CaseSensitive)
- Next
- EndIf
- Case 10 ; Диалог выбора действий
- ; MessageRequester("выделенное", "||")
- ; If OpenWindow(0, 0, 0, 300, 70, "Меню", #PB_Window_Tool | #PB_Window_ScreenCentered)
- ; заголовок теперь показывает начало выделенного текста, даёт пользователю контроль
- AutoSelect=0
- If OpenWindow(0, 0, 0, 180, 250, Left(Selected_Text$, 20) + " ...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
- ListViewGadget(0, 0 , 0 , 180, 250)
- AddGadgetItem(0 , -1 , "Раскладка" + #TAB$ + "-r")
- AddGadgetItem(0 , -1 , "Раскладка инверт" + #TAB$ + "-i")
- AddGadgetItem(0 , -1 , "Аббревиатура" + #TAB$ + "-a")
- AddGadgetItem(0 , -1 , "Красная строка" + #TAB$ + "-k")
- AddGadgetItem(0 , -1 , "Регистр вниз" + #TAB$ + "-n")
- AddGadgetItem(0 , -1 , "Регистр ВВЕРХ" + #TAB$ + "-v")
- AddGadgetItem(0 , -1 , "Транслитерация" + #TAB$ + "-t")
- AddGadgetItem(0 , -1 , #TAB$ + "replace.ini")
- AddGadgetItem(0 , -1 , #TAB$ + "text-correction.ini")
- ; If FileSize(PathHelp$) > 0
- AddGadgetItem(0 , -1 , #TAB$ + "Справка")
- ; EndIf
- SetGadgetItemState(0, 0, 1)
- AddKeyboardShortcut(0, #PB_Shortcut_Return , 1)
- AddKeyboardShortcut(0, #PB_Shortcut_Escape, 2)
- AddKeyboardShortcut(0, #PB_Shortcut_Down, 3)
- AddKeyboardShortcut(0, #PB_Shortcut_Up, 4)
- Repeat
- Select WaitWindowEvent()
- Case #PB_Event_Menu
- Select EventMenu()
- Case 1
- EventUser()
- Case 2
- CloseWindow(0)
- End
- Case 3 ; стрелка вниз
- tmp = GetGadgetState(0)
- If tmp <> -1
- tmp + 1
- If tmp > 9
- tmp = 0
- EndIf
- SetGadgetItemState(0, tmp, #PB_ListIcon_Selected)
- EndIf
- Case 4 ; стрелка вверх
- tmp = GetGadgetState(0)
- If tmp <> -1
- tmp - 1
- If tmp < 0
- tmp = 9
- EndIf
- SetGadgetItemState(0, tmp, #PB_ListIcon_Selected)
- EndIf
- EndSelect
- Case #PB_Event_Gadget
- Select EventGadget()
- Case 0
- Select EventType()
- Case #PB_EventType_LeftDoubleClick
- EventUser()
- EndSelect
- EndSelect
- Case #PB_Event_CloseWindow, #PB_Event_DeactivateWindow
- CloseWindow(0)
- End
- EndSelect
- ForEver
- EndIf
- EndSelect
- ; из-за нестабильности эмуляции горячих клавиш используются флаги запрета фцнкционала
- ; Вставляем текст, если активирован флаг АвтоВставить
- If (New_Text$ <> Selected_Text$)
- SetClipboardText(New_Text$) ; в функционале неиспользовано восстановление буфера обмена, так как это замусоривает Parsellito
- If AutoPaste
- Delay(40)
- Execute(strpaste$)
- ; Delay(2000)
- ; SetClipboardText(Old_bufer$) ; восстанавливаем буфер обмена
- EndIf
- ElseIf AutoSelect ; если был активирован функционал АвтоВыделение текста, то сбрасываем выделение горячей клавишей "стрелка вправо"
- ; RunProgram("xdotool", "key right", "")
- Delay(90)
- RunProgram("xdotool", "key 0xff53", "", #PB_Program_Hide | #PB_Program_Wait)
- ; RunProgram("xdotool", "--clearmodifiers", "")
- EndIf
- ; Delay(90)
- EndProcedure
- Procedure EventUser()
- tmp = GetGadgetState(0)
- CloseWindow(0)
- Delay(90)
- Select tmp
- Case 0 To 6
- _Re(tmp)
- ; Case 1
- ; _Re(1)
- ; Case 2
- ; _Re(2)
- ; Case 3
- ; _Re(3)
- ; Case 4
- ; _Re(4)
- ; Case 5
- ; _Re(5)
- ; Case 6
- ; _Re(6)
- Case 7
- ; Так как ini-файл создан, то не требуется принудительной генерации папок пути
- If FileSize(PathReplace$) < 8
- SaveFile_Buff(PathReplace$, ?replace, ?replaceend - ?replace)
- EndIf
- RunProgram("xdg-open", PathReplace$, GetPathPart(PathReplace$))
- Case 8
- RunProgram("xdg-open", ini$, GetPathPart(ini$))
- Case 9
- If FileSize(PathHelp$) > 0
- RunProgram("xdg-open", PathHelp$, GetPathPart(PathHelp$))
- ; RunProgram(PathHelp$)
- ; RunProgram("firefox", PathHelp$, GetPathPart(PathHelp$)) ; что если firefox не браузер по умолчанию?
- ; тут наверно преобразование HTML в формат man, чтобы использовать и без флага --html=firefox
- ; RunProgram("man", "--html=firefox " + PathHelp$, GetPathPart(PathHelp$))
- EndIf
- EndSelect
- End
- EndProcedure
- Select ProgramParameter()
- Case "-r"
- _Re(0)
- Case "-i"
- _Re(1)
- Case "-a"
- _Re(2)
- Case "-k"
- _Re(3)
- Case "-n"
- _Re(4)
- Case "-v"
- _Re(5)
- Case "-t"
- _Re(6)
- Case "-?", "-h"
- If FileSize(PathHelp$) > 0
- RunProgram("xdg-open", PathHelp$, GetPathPart(PathHelp$))
- EndIf
- Case "-v"
- MessageRequester("Версия", "0.5")
- Case "-m"
- _Re(10)
- Default
- _Re(10)
- EndSelect
- Procedure Replace()
- Protected Pos, Pos2, TextReplace$
- If ReadFile(0, PathReplace$)
- TextReplace$ = ReadString(0, #PB_UTF8 | #PB_File_IgnoreEOL)
- CloseFile(0)
- Pos = FindString(TextReplace$, #CRLF$ + Selected_Text$ + "=", 1, #PB_String_NoCase)
- If Pos
- Pos + 3 + Len(Selected_Text$)
- Pos2 = FindString(TextReplace$, #CRLF$, Pos)
- If Pos2
- ; MessageRequester("", "|" + Mid(TextReplace$, Pos, Pos2 - Pos) + "|")
- New_Text$ = ReplaceString(Mid(TextReplace$, Pos, Pos2 - Pos) , CRLF$ , #LF$, #PB_String_CaseSensitive)
- EndIf
- EndIf
- Else
- SaveFile_Buff(PathReplace$, ?replace, ?replaceend - ?replace)
- EndIf
- EndProcedure
- ; ищем справа-налево последний валидный символ в тексте, по которому можно определить язык
- Procedure GetLangStr(Str$, LengthSel)
- Protected i, bykva$
- For i = LengthSel To 1 Step -1
- bykva$ = Mid(Str$, i, 1)
- If FindString(EnT$, LCase(bykva$), 1, #PB_String_NoCase)
- Lang = 409
- Break
- EndIf
- If FindString(RuT$, LCase(bykva$), 1, #PB_String_NoCase)
- Lang = 419
- Break
- EndIf
- Next
- EndProcedure
- Procedure TestNext(i, code, num)
- Protected n
- For n = 1 To num
- If i < LengthSel-n And FindString(Left(EnT$, 26), LCase(aSel(i + n))) ; проверяем чтобы не превысить размер массива и поиск символа
- New_Text$ + Mid(Ru$, code, 1)
- ProcedureReturn 1
- EndIf
- Next
- ProcedureReturn 0
- EndProcedure
- ;==================================================================
- ;
- ; Author: ts-soft
- ; Date: March 5th, 2010
- ; Explain:
- ; modified version from IBSoftware (CodeArchiv)
- ; on vista and above check the Request for "User mode" or "Administrator mode" in compileroptions
- ; (no virtualisation!)
- ;==================================================================
- Procedure ForceDirectories(Dir.s)
- Static tmpDir.s, Init, delim$
- Protected result
- CompilerSelect #PB_Compiler_OS
- CompilerCase #PB_OS_Windows
- delim$ = "\"
- CompilerCase #PB_OS_Linux
- delim$ = "/"
- CompilerEndSelect
- If Len(Dir) = 0
- ProcedureReturn #False
- Else
- If Not Init
- tmpDir = Dir
- Init = #True
- EndIf
- If (Right(Dir, 1) = delim$)
- Dir = Left(Dir, Len(Dir) - 1)
- EndIf
- If (Len(Dir) < 3) Or FileSize(Dir) = -2 Or GetPathPart(Dir) = Dir
- If FileSize(tmpDir) = -2
- result = #True
- EndIf
- tmpDir = ""
- Init = #False
- ProcedureReturn result
- EndIf
- ForceDirectories(GetPathPart(Dir))
- ProcedureReturn CreateDirectory(Dir)
- EndIf
- EndProcedure
- ; wilbert
- ; https://www.purebasic.fr/english/viewtopic.php?p=486382#p486382
- Procedure Split(String.s, Array StringArray.s(1), Separator.s = " ")
- Protected S.String, *S.Integer = @S
- Protected.i asize, i, p, slen
- asize = CountString(String, Separator)
- slen = Len(Separator)
- ReDim StringArray(asize)
- *S\i = @String
- While i < asize
- p = FindString(S\s, Separator)
- StringArray(i) = PeekS(*S\i, p - 1)
- *S\i + (p + slen - 1) << #PB_Compiler_Unicode
- i + 1
- Wend
- StringArray(i) = S\s
- *S\i = 0
- EndProcedure
- Procedure StrToArrLetter(Array Arr.s{1}(1), String$)
- Protected LenStr, i
- LenStr = Len(String$)
- If LenStr
- ReDim Arr(LenStr - 1)
- PokeS(Arr(), String$, -1, #PB_String_NoZero)
- EndIf
- ProcedureReturn
- EndProcedure
- DataSection
- ini:
- IncludeBinary "sample.ini"
- iniend:
- replace:
- IncludeBinary "sample-replace.ini"
- replaceend:
- EndDataSection
Add Comment
Please, Sign In to add comment