#include <File.au3>
#include <Array.au3>
Global $bDebug = False
Global $Pattern[6], $Path = @ScriptDir
If Not FileExists(@ScriptDir & '\7z.exe') Then
MsgBox(0, 'Сообщение', 'Файл 7z.exe в каталоге скрипта не найден')
Exit
EndIf
; x - извлечь со структурой каталога
; -r - включая подкаталоги
; -o - куда извлекаем
; -y - ответ "Да" при замене одноимённых файлов
; AutoIt3.chm - извлекаемый файл
; html\* путь и маска указывающая что извлекать внутри архива
If FileExists($Path & '\UDFs3.chm') Then ; если не найдено, то выход
If $bDebug Then ToolTip('Извлечение файла UDFs3.chm', Default, Default, 'Создание онлайн справки (1-2 минуты)', 1)
RunWait(@ScriptDir & '\7z.exe x "' & $Path & '\UDFs3.chm" -o"' & $Path & '" html\* -r -y', '', @SW_HIDE) ; можно заккомментировать, чтобы пропустить извлечение UDFs3.chm
If FileExists($Path & '\AutoIt3.chm') Then ; файл AutoIt3.chm извлекается при условии извлечения UDFs3.chm
If $bDebug Then ToolTip('Извлечение файла AutoIt3.chm')
RunWait(@ScriptDir & '\7z.exe x "' & $Path & '\AutoIt3.chm" -o"' & $Path & '" html\* -r -y', '', @SW_HIDE)
Else
MsgBox(0, 'Сообщение', 'Файл AutoIt3.chm не найден')
Exit
EndIf
Else
MsgBox(0, 'Сообщение', 'Файл UDFs3.chm не найден')
Exit
EndIf
$Path &= '\html'
FileCopy(@ScriptDir & '\default.css', $Path & '\css\', 9) ; копирование стилевого файла default.css для онлайн версии
$Pattern[0] = 3 ; обрабатывание до 3-го индекса. Если 5, то удалит кнопки "Копировать"
; текст для удаления кнопки "Открыть" сверху
$Pattern[1] = '<a href="JavaScript:hhctrl.Click()"><IMG NAME="botton" title="Открыть" style=''margin: 5px 4px 4px 10px;'' src=''../images/Open.gif''" border="0" align=''right''></a>'
; текст для удаления кнопки "Открыть" снизу
$Pattern[2] = '<a href="JavaScript:hhctrl.Click()"><IMG NAME="botton" title="Открыть" style=''margin: 20px 4px 4px 10px;'' src=''../images/Open.gif''" border="0" align=''right''></a>'
$Pattern[3] = '<a href="JavaScript:hhctrl.Click()"><IMG NAME="botton" title="Открыть" style=''margin: 0px 4px 4px 10px;'' src=''../images/Open.gif''" border="0" align=''right''></a>'
; текст для удаления кнопки "Копировать в буфер"
$Pattern[4] = '<a href="javascript:ClipBoard();"><IMG NAME="botton" title="Копировать в буфер" style=''margin: 5px 4px 4px 10px;'' src=''../images/copy.gif''" border="0" align=''right''></a>'
$Pattern[5] = '<a href="javascript:ClipBoard();"><IMG NAME="botton" title="Копировать в буфер" style=''margin: 20px 4px 4px 10px;'' src=''../images/copy.gif''" border="0" align=''right''></a>'
$FileList = _FileListToArray($Path & '\libfunctions')
If Not @error Then
; переводим тексты в нижний регистр
For $i = 1 To $FileList[0]
$FileList[$i] = StringLower($FileList[$i])
Next
$hTimer = TimerInit()
; переименовываем файлы
$err = 0
For $i = 1 To $FileList[0]
If FileMove($Path & '\libfunctions\' & $FileList[$i], $Path & '\libfunctions\#@%' & $FileList[$i]) Then
If Not FileMove($Path & '\libfunctions\#@%' & $FileList[$i], $Path & '\libfunctions\' & $FileList[$i]) Then $err += 1
EndIf
If $bDebug And Not Mod($i, 10) Then ToolTip('ReName ' & $i & ' - ' & $FileList[$i]) ; вывод каждого 10 файла, чтобы не тратило скорость на вывод
Next
If $bDebug Then
If $err > 0 Then MsgBox(0, '', 'Была ошибка при переименовании файлов')
MsgBox(0, '', 'Переименование выполнено за ' & Round(TimerDiff($hTimer) / 1000, 2) & ' сек')
EndIf
$hTimer = TimerInit()
$kTotal = _Processing($FileList, 'libfunctions', 'UDF', 1)
If $bDebug Then MsgBox(0, '', 'Количество замен в UDF - libfunctions = ' & $kTotal & @CRLF & 'выполнено за ' & Round(TimerDiff($hTimer) / 1000, 2) & ' сек')
EndIf
$FileList = _FileListToArray($Path & '\keywords')
If Not @error Then
$hTimer = TimerInit()
$kTotal = _Processing($FileList, 'keywords', 'KEY', 0)
If $bDebug Then MsgBox(0, '', 'Количество замен в keywords = ' & $kTotal & @CRLF & 'выполнено за ' & Round(TimerDiff($hTimer) / 1000, 2) & ' сек')
EndIf
Local $FileList[2] = [1, 'libfunctions.htm'] ; массив индивидуально выбранных файлов
If Not @error Then
$hTimer = TimerInit()
$kTotal = _Processing($FileList, '', 'Другие', 1)
MsgBox(0, '', 'Количество замен в "другие" = ' & $kTotal & @CRLF & 'выполнено за ' & Round(TimerDiff($hTimer) / 1000, 2) & ' сек')
EndIf
$FileList = _FileListToArray($Path & '\functions')
If Not @error Then
$hTimer = TimerInit()
$kTotal = _Processing($FileList, 'functions', 'FUNC', 2)
MsgBox(0, 'Готово', 'Количество замен functions = ' & $kTotal & @CRLF & 'выполнено за ' & Round(TimerDiff($hTimer) / 1000, 2) & ' сек' & @CRLF & @CRLF & 'Создание справки завершено!')
Else
MsgBox(0, 'Готово', 'Создание справки завершено!')
EndIf
Func _Processing($FileList, $folder, $text, $Tr = 0)
Local $i, $kTotal = 0, $aLink, $k, $j, $hFile, $Path0
If $folder Then
$Path0 = $Path & '\' & $folder
Else
$Path0 = $Path
EndIf
; заменяем все тексты на тексты в нижнем регистре
For $i = 1 To $FileList[0]
$html = FileRead($Path0 & '\' & $FileList[$i])
$k = 0
If $bDebug And Not Mod($i, 10) Then ToolTip($text & ' ' & $i & ' - ' & $FileList[$i]) ; вывод каждого 10 файла, чтобы не тратило скорость на вывод
$aLink = StringRegExp($html, '(<a href=".*?\.htm")', 3)
If Not @error Then
For $j = 0 To UBound($aLink) - 1
If $Tr Then
; заменит без учёта регистра в нижний регистр и заменит обратную черту на нормальную
$html = StringReplace($html, $aLink[$j], StringReplace(StringLower($aLink[$j]), '\', '/'))
$k += @extended
Else
$html = StringReplace($html, $aLink[$j], StringReplace($aLink[$j], '\', '/'))
$k += @extended
EndIf
Next
EndIf
$html = StringReplace($html, '::/html/', '../') ; заменит внутренние пути CHM на внешние
$k += @extended
For $j = 1 To $Pattern[0]
$html = StringReplace($html, $Pattern[$j], '') ;
$k += @extended
Next
; если изменения произошли, то сохраняем в файл
If $k > 0 Then
$hFile = FileOpen($Path0 & '\' & $FileList[$i], 2)
FileWrite($hFile, $html)
FileClose($hFile)
EndIf
$kTotal += $k
Next
Return $kTotal
EndFunc