Что нового

AutoItSyntaxHighlight - Библиотека для подсветки синтаксиса AutoIt-кода

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Версия AutoIt
3.3.14.5
Версия
1.2
Данная библиотека предназначена для подсветки синтаксиса AutoIt-кода.
Поддерживается преобразование в Html формат (по умолчанию), а также в BBCode формат, для отправки на разные форумы.

Примечания:
  • Как бы удивительно это не звучало, библиотека написана полностью на чистом AutoIt'е (даже не использует не одной подключаемой библиотеки), и поскольку библиотека довольно интенсивно использует регулярные выражения, в неё добавлена система отладки обработки регулярных выражений (которая естественно замедляет работу обработки).
    Для включения данной системы достаточно выставить «True» у следующих параметров в файле библиотеки (AutoItSyntaxHighlight.au3) под #Region User Variables:

    Код:
    Global $fAu3SH_Debug_RE_Patterns = True ; Включает отладчик регулярных выражений
    Global $fAu3SH_Debug_RE_WriteLog = True ; Включает запись отладки в log-файл (по завершению обработки)

    Уже неактуально.
  • Пользовательская переменная $AU3SH_ADD_URLS используется для включения/отключения ссылок для ключ. слов.
  • Используйте скрипт Add missing keywords.au3 (прилагается в архиве) для добавления недостающих ключ. слов из новых версии AutoIt.

Код/Пример:
Код:
#include <Au3SyntaxHighlight.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

$sSciTE_Dir = @AutoItExe & '\..\SciTE'

$AU3SH_ADD_URLS = True
$AU3SH_KEYWORDS_FILE = $sSciTE_Dir & '\properties\au3.keywords.properties'
$AU3SH_API_FILE = $sSciTE_Dir & '\api\au3.api'

$sInitDir = ''
$sFilter = '*.au3'

$sMRUList = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\au3', 'MRUList')
$sLastFileOpenPath = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\au3', StringLeft($sMRUList, 1))

If Not FileExists($sLastFileOpenPath) Then
    $sInitDir = @ScriptDir
    $sFilter = 'Test Script.au3'
EndIf

$sFile = FileOpenDialog('Open Au3 Script File', $sInitDir, 'AutoIt Script (' & $sFilter & ')')
If @error Then Exit

$sAu3Code = FileRead($sFile)
$sAu3Syntax_HighlightedCode = _Au3_SyntaxHighlight($sAu3Code, 0)

$sTmp_File = @TempDir & '\Au3_HighlightSyntax.htm'

$hFile = FileOpen($sTmp_File, 2)
FileWrite($hFile, $sAu3Syntax_HighlightedCode)
FileClose($hFile)

_IEErrorHandlerRegister()

$oIE = _IECreateEmbedded()

$iGUI_Width = @DesktopWidth - 40
$iGUI_Height = @DesktopHeight - 150

$hGUI = GUICreate('AutoIt Syntax Highlighter [' & $sFile & ']', $iGUI_Width, $iGUI_Height, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
GUICtrlCreateObj($oIE, 10, 20, $iGUI_Width - 20, $iGUI_Height - 70)
$iBack_Bttn = GUICtrlCreateButton('Back', 10, $iGUI_Height - 40, 100, 30)
$iForward_Bttn = GUICtrlCreateButton('Forward', 120, $iGUI_Height - 40, 100, 30)
$iHome_Bttn = GUICtrlCreateButton('Home', 230, $iGUI_Height - 40, 100, 30)
$iStop_Bttn = GUICtrlCreateButton('Stop', 340, $iGUI_Height - 40, 100, 30)

GUISetState(@SW_SHOW, $hGUI)

_IENavigate($oIE, $sTmp_File)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            GUIDelete($hGUI)
            Exit
        Case $iHome_Bttn
            _IENavigate($oIE, $sTmp_File)
        Case $iBack_Bttn
            _IEAction($oIE, 'back')
        Case $iForward_Bttn
            _IEAction($oIE, 'forward')
        Case $iStop_Bttn
            _IEAction($oIE, 'stop')
    EndSwitch
WEnd

Файл: AutoItSyntaxHighlight.zip

Снимок:
AutoItSyntaxHighlight.png

История версий:
[1.2]
+ Добавлена поддержка списка файлов для Keywords и API
(в $AU3SH_KEYWORDS_FILE и $AU3SH_API_FILE теперь можно указать более одного пути к файлу Keywords и API разделив их символом ;)
+ Добавлены пользовательские переменные $AU3SH_KEYWORDS_FUNCS/UDFS/KWRDS/MACROS/PREPROC/SPECIAL/SNDKEYS для того чтобы указывать ключи для чтения с файла(ов) в $AU3SH_KEYWORDS_FILE.
(можно разделить строку с помощью ; для указания списка ключей (будет использован первый найденный))
* Исправлена подсветка Send Keys.
* Исправлена обработка строк содержащих часть уникальной строки используемой для замены строк (такой как '%@~@%').

[1.1] @ДАННАЯ ВЕРСИЯ "ЛОМАЕТ" ОБРАТНУЮ СОВМЕСТИМОСТЬ@
* Пользовательская переменная $iAu3SH_AddURLs переименована в $AU3SH_ADD_URLS.
* Пользовательская переменная $iAu3SH_AbortHighlight переименована в $AU3SH_HIGHLIGHT_ABORT.
ВНИМАНИЕ: В случае если True (отмена обработки), то после обработки _Au3_SyntaxHighlight нужно установить эту переменную в значение False.
+ Добавлены новые пользовательские переменные для указания ссылок при использовании $AU3SH_ADD_URLS: $AU3SH_FUNCS_URL, $AU3SH_UDFS_URL, $AU3SH_KEYWORDS_URL, $AU3SH_MACROS_URL, $AU3SH_PREPROC_URL.
+ Добавлена пользовательская переменная $AU3SH_KEYWORDS_FILE для указания пути к файлу au3.keywords.properties, если не найдено, то используется тот что в папке Resources (может быть устаревшим).
+ Добавлена пользовательская переменная $AU3SH_API_FILE для указания пути к файлу au3.api, если не найдено, то используется тот что в папке Resources (может быть устаревшим).
* _Au3_SyntaxHighlight_Proc переименована в _Au3_SyntaxHighlight.
* Имена функции были немного укорочены.
* Оптимизация скорости.
- Убрана система отладки ($fAu3SH_Debug_RE_Patterns и $fAu3SH_Debug_RE_WriteLog также были убраны).

[1.0]
* Значительная оптимизация скорости

[0.9]
+ Совместимость с AutoIt 3.3.12.0.
+ Добавлен скрипт Add missing keywords.au3 для добавления недостающих ключ. слов из новых версии AutoIt.
* Пользовательская переменная $iDebug_RegExp_Patterns переименована в $fAu3SH_Debug_RE_Patterns.
* Пользовательская переменная $iDebug_RegExp_WriteLog переименована в $fAu3SH_Debug_RE_WriteLog.
* Изменены примеры.

[0.8]
* Исправлена проблема с подсветкой кода внутри специальных ключевых слов (#region, #forceref и т.д.).

[0.7]
* Исправлена проблема с обработкой кода при включённой опции добавления ссылок ($iAu3SH_AddURLs = 1).

[0.6]
* Исправлена проблема с неверным восстановлением строк.

[0.5]
* Исправлен баг с подсветкой строк внутри блока комментариев.
* Исправлены некоторые проблемы с подсветкой спец. ключевых слов.

[0.4]
* Исправлен баг с (пере)подсветкой ключевых слов и функции внутри методах и свойствах COM объекта.
* Обновление документации.

v0.3
* Исправлена проблема когда строки и «send keys» подсвечивались внутри закомментированных строк.
* Мелкая оптимизация кода.

v0.2
+ Добавлен глобальный параметр ($iAu3SH_AbortHighlight) для отмены обработки кода (остановка выполнения функции подсветки).
-Если этой переменной присвоено значение 1, то функция вернёт исходный код AutoIt и установит @error на -1.
+ Добавлена поддержка стиля "#White space" (теперь вы можете указать этот стиль в файле au3.styles.properties).
+ Добавлена поддержка стиля "#Background", используется только для подсветки в режиме Html тегов (этот стиль также указывается в au3.styles.properties).
* Классы стилей для заголовка переименованы, к ним добавлен префикс "au3_".
* Исправлена проблема с подсветкой COM объектов.
* Исправлена проблема с подсветкой ключевых слов (keywords) внутри переменных.
* Исправлена проблема с подсветкой более одного Препроцессора (Preprocessor) когда вместо <Include.au3> используются двойные/одиночные кавычки ("Include.au3").
* Исправлена проблема с подсветкой закомментированных строк/блоков кода внутри литеральных (сплошных) строк.
* Исправлена проблема с не (корректной) подсветкой закомментированных строк.
* Исправлена проблема с преобразованием в формат BBCode.
* Теперь Препроцессор (Preprocessor) и специальные ключ. слова (keywords) подсвечиваются более корректно (удаляются все вложенные теги).

v0.1
Первая публичная версия
 
Автор
G.Sandler (CreatoR)
Источник
Ссылка на источник

Вложения

  • AutoItSyntaxHighlight_1.2.zip
    126.6 КБ · Просмотры: 19
Последнее редактирование:
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
gregaz [?]
А подробнее про нее можно ?
А что конкретно интересует, а то я подробнее могу расказать на 5 страниц :laugh:

В кратце - выводит в консоль (и/или в файл) нужную информацию о выполнении регулярных выражений (полный шаблон, время выполнения, заметки), записи где указываются номера строк скрипта (это там где выполняется рег. выражение) имеют свойство “прыгать” на нужную строку, достаточно два раза кликнуть на выделенной записи.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
CreatoR [?]
А что конкретно интересует, а то я подробнее могу расказать на 5 страниц
Да вобщем пока достаточно , посмотрел на работе примера.Спасибо.Классная б-ка получилась. :IL_AutoIt_1:
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Попробовал параметр 3 для _Au3_SyntaxHighlight_Proc
3 - Return the result as BBCode formatted string (html tags replaced with bbcode tags).

результат без переходов на новую строку.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
В 23 строке Example.au3 поменял 0 на 3
$sAu3Syntax_HighlightedCode = _Au3_SyntaxHighlight_Proc($sAu3Code, 3)
Чтоб получить BBCode и всё появилось, но без переходов на новую строку.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AZJIO [?]
В 23 строке Example.au3 поменял 0 на 3
В примере из шапки? ;D Это пример для Html, конечно он не распознаёт @CRLF, в html нужно заменять на
.

Код:
#include <Au3SyntaxHighlight.au3>

$iAu3SH_AddURLs = 1

If $CmdLine[0] = 0 Then
	$sInitDir = ""
	$sFilter = "*.au3"
	
	$sMRUList = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\au3", "MRUList")
	$sLastFileOpenPath = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\au3", StringLeft($sMRUList, 1))
	
	If Not FileExists($sLastFileOpenPath) Then
		$sInitDir = @ScriptDir
		$sFilter = "Test Script.au3"
	EndIf
	
	$sFile = FileOpenDialog("Open Au3 Script File", $sInitDir, "AutoIt Script (" & $sFilter & ")")
	If @error Then Exit
ElseIf FileExists($CmdLine[1]) Then
	$sFile = $CmdLine[1]
Else
	Exit
EndIf

$sAu3Code = FileRead($sFile)
$sAu3HighlightedCode = _Au3_SyntaxHighlight_Proc($sAu3Code, 3)

ClipPut($sAu3HighlightedCode)

MsgBox(64, 'Au3SyntaxHighlight', 'Highlighted code as BBCode format have been placed to clipboard')


хотя есть другая бага, остаётся лишний <span class="S..."> (вложенный)...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Себе на заметку...

Свойства/методы у COM объектов не совсем корректно подсвечиваются:

AutoIt Код (с парсированием BB-кодов):
$oIE.Document.Body.Scroll


подсвечиваются только через один.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление:

v0.2
+ Добавлен глобальный параметр ($iAu3SH_AbortHighlight) для отмены обработки кода (остановка выполнения функции подсветки).
-Если этой переменной присвоено значение 1, то функция вернёт исходный код AutoIt и установит @error на -1.
+ Добавлена поддержка стиля "#White space" (теперь вы можете указать этот стиль в файле au3.styles.properties).
+ Добавлена поддержка стиля "#Background", используется только для подсветки в режиме Html тегов (этот стиль также указывается в au3.styles.properties).
* Классы стилей для заголовка переименованы, к ним добавлен префикс "au3_".
* Исправлена проблема с подсветкой COM объектов.
* Исправлена проблема с подсветкой ключевых слов (keywords) внутри переменных.
* Исправлена проблема с подсветкой более одного Препроцессора (Preprocessor) когда вместо <Include.au3> используются двойные/одиночные кавычки ("Include.au3").
* Исправлена проблема с подсветкой закомментированных строк/блоков кода внутри литеральных (сплошных) строк.
* Исправлена проблема с не (корректной) подсветкой закомментированных строк.
* Исправлена проблема с преобразованием в формат BBCode.
* Теперь Препроцессор (Preprocessor) и специальные ключ. слова (keywords) подсвечиваются более корректно (удаляются все вложенные теги).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновил немного библиотеку (в связи с этим), но версия таже.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление:

v0.3
* Исправлена проблема когда строки и «send keys» подсвечивались внутри закомментированных строк.
* Мелкая оптимизация кода.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление...

[0.5]
* Исправлен баг с подсветкой строк внутри блока комментариев.
* Исправлены некоторые проблемы с подсветкой спец. ключевых слов.

[0.4]
* Исправлен баг с (пере)подсветкой ключевых слов и функции внутри методах и свойствах COM объекта.
* Обновление документации.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
И ещё одно небольшое, но критичное обновление:

[0.6]
* Исправлена проблема с неверным восстановлением строк.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление...

[0.7]
* Исправлена проблема с обработкой кода при включённой опции добавления ссылок ($iAu3SH_AddURLs = 1).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Небольшое обновление:

[0.8]
* Исправлена проблема с подсветкой кода внутри специальных ключевых слов (#region, #forceref и т.д.).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление:

[0.9]
+ Совместимость с AutoIt 3.3.12.0.
+ Добавлен скрипт Add missing keywords.au3 для добавления недостающих ключ. слов из новых версии AutoIt.
* Пользовательская переменная $iDebug_RegExp_Patterns переименована в $fAu3SH_Debug_RE_Patterns.
* Пользовательская переменная $iDebug_RegExp_WriteLog переименована в $fAu3SH_Debug_RE_WriteLog.
* Изменены примеры.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление!

[1.1] @ДАННАЯ ВЕРСИЯ "ЛОМАЕТ" ОБРАТНУЮ СОВМЕСТИМОСТЬ@
* Пользовательская переменная $iAu3SH_AddURLs переименована в $AU3SH_ADD_URLS.
* Пользовательская переменная $iAu3SH_AbortHighlight переименована в $AU3SH_HIGHLIGHT_ABORT.
ВНИМАНИЕ: В случае если True (отмена обработки), то после обработки _Au3_SyntaxHighlight нужно установить эту переменную в значение False.
+ Добавлены новые пользовательские переменные для указания ссылок при использовании $AU3SH_ADD_URLS: $AU3SH_FUNCS_URL, $AU3SH_UDFS_URL, $AU3SH_KEYWORDS_URL, $AU3SH_MACROS_URL, $AU3SH_PREPROC_URL.
+ Добавлена пользовательская переменная $AU3SH_KEYWORDS_FILE для указания пути к файлу au3.keywords.properties, если не найдено, то используется тот что в папке Resources (может быть устаревшим).
+ Добавлена пользовательская переменная $AU3SH_API_FILE для указания пути к файлу au3.api, если не найдено, то используется тот что в папке Resources (может быть устаревшим).
* _Au3_SyntaxHighlight_Proc переименована в _Au3_SyntaxHighlight.
* Имена функции были немного укорочены.
* Оптимизация скорости.
- Убрана система отладки ($fAu3SH_Debug_RE_Patterns и $fAu3SH_Debug_RE_WriteLog также были убраны).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Обновление...

[1.2]
+ Добавлена поддержка списка файлов для Keywords и API
(в $AU3SH_KEYWORDS_FILE и $AU3SH_API_FILE теперь можно указать более одного пути к файлу Keywords и API разделив их символом ;)
+ Добавлены пользовательские переменные $AU3SH_KEYWORDS_FUNCS/UDFS/KWRDS/MACROS/PREPROC/SPECIAL/SNDKEYS для того чтобы указывать ключи для чтения с файла(ов) в $AU3SH_KEYWORDS_FILE.
(можно разделить строку с помощью ; для указания списка ключей (будет использован первый найденный))
* Исправлена подсветка Send Keys.
* Исправлена обработка строк содержащих часть уникальной строки используемой для замены строк (такой как '%@~@%').
 
Верх