Что нового

Нераспознанные элементы и ляпы при подсветке AutoIt синтаксиса

VladUs

Скриптер
Сообщения
621
Репутация
181
CreatoR теперь нижнее подчеркивание подсвечивается, если оно служит началом имени пользовательской функции
Вот
Код:
_Myfunc()
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
CreatoR приношу свои извинения за то, что пропал после последнего сообщения в 17:55:42.
Провайдер :Censored: ушёл в down на пять с половиной часов.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
Теперь должно подсвечиваться.
Супер. Я сам тоже заметил что там используется [!+...]+ вместо [!+...]*.

Но проблема с подчёркиванием на которую указал VladUs действительно есть, есть идеи как это обойти?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR [?]
Супер. Я сам тоже заметил что там используется [!+...]+ вместо [!+...]*.
Да, не доглядел :-[

Но проблема с подчёркиванием на которую указал VladUs действительно есть, есть идеи как это обойти?
Как раз сейчас над этим думаю.
Полагаю что можно в файле autoit.php в секции REGEXPS это дело обыграть.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR вот новый вариант подсветки.
В этом варианте я постарался исправить проблему, на которую указывал VladUs, а так же поменял цвета и стили для UDF и пользовательских функций, но оставил старые, закомментировав их. Так что если вдруг не понравится, можно будет вернуть назад.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
В этом варианте я постарался исправить проблему, на которую указывал VladUs
Да, вроде исправлено.

так же поменял цвета и стили для UDF и пользовательских функций, но оставил старые, закомментировав их
Если честно мне больше нравились старые.

Изменил немного RegExp для UDF, т.к это не совсем правильно:

PHP:
        3 => '_\w+\s*\(',
        //3 => '_[a-zA-Z][a-zA-Z0-9_]+(?:\()',

И ещё одна проблема подсветки, не уверен, но я кажется её уже исправлял раньше, теперь снова появилась (хотя могу ошибаться). Вообщем вот пример:

Код:
$iVar = ToolTip('')&MsgBox(0, '', '')


Функция (это касается и операторов) не подсвечивается из за тесного прикасания с амперсандом.

Попытался исправить так:
Код:
    'PARSER_CONTROL' => array(
        'KEYWORDS' => array(
            2 => array(
                'DISALLOWED_BEFORE' => '(?<![\w&])',
                'DISALLOWED_AFTER' => '(?![\w])'
            ),
            3 => array(
                'DISALLOWED_BEFORE' => '(?<!&)',
                'DISALLOWED_AFTER' => '(?!=&)'
            ),
            4 => array(
                'DISALLOWED_BEFORE' => '(?<!\w)\_'
            ),
            5 => array(
                'DISALLOWED_BEFORE' => '(?<!\w)\#'
            ),
            6 => array(
                'DISALLOWED_BEFORE' => '(?<!\w)\#'
            ),
        )
    )

но в таком случае подсветка некоторых UDF нарушается, например в _SendMessage, Send подсвечивается как встроенная функция: _SendMessage
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR
Код:
    'PARSER_CONTROL' => array(
        'KEYWORDS' => array(
            2 => array(
                'DISALLOWED_BEFORE' => '(?<![\w&])',
                'DISALLOWED_AFTER' => '(?![\w])'
            ),
            3 => array(
                'DISALLOWED_BEFORE' => '(?<![\w&])',
                'DISALLOWED_AFTER' => '(?![\w])'
            ),
            4 => array(
                'DISALLOWED_BEFORE' => '(?<!\w)\_'
            ),
            5 => array(
                'DISALLOWED_BEFORE' => '(?<!\w)\#'
            ),
            6 => array(
                'DISALLOWED_BEFORE' => '(?<!\w)\#'
            ),
        )
    )
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
Func WM_NOTIFY()


"NOTIFY" с наклоном, а "WM" нет. А зачем вообще делать названия пользовательских функций наклонным шрифтом?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
"NOTIFY" с наклоном, а "WM" нет.
Где? :whistle:

А зачем вообще делать названия пользовательских функций наклонным шрифтом?
Я вот тоже не очень понял, да и цвет им не нужен.

Код:
_MyFunc


Мда, но проблема с подсветкой дефиса снова не даёт покоя, я уже запутался что к чему, одно исправил, другое поламалось... :wacko:

Снова RegExp подвёл. Нужно было так:
PHP:
				//User-defined functions variant 2
        3 => '_\w+?\s*\(?',
это на случай если круглые скобки не указаны.
 
Автор
CreatoR

CreatoR

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

Код:
#AutoIt3Wrapper_Run_After=Upx.exe --best

#Region Global number(s)

#EndRegion Global number(s)


:'(

Garrett? :whistle:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR
Бьюсь с GeShi, но пока нет нужного результата :(
В общем "Орешек знаний твёрд, но всё же мы не привыкли отступать!" ;)
Думаю, одолею его ;D
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Еще "косячок" нашел: :-[
Код:
$oHTTP.Send('')
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Код:
ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" &  $strComputer & "\root\cimv2")

Фрагмент {impersonationLevel=impersonate} почему - то выделяется другим цветом, хотя должна быть цветом, как текст :scratch:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
VladUs
Это издержки синтаксиса Autoit.
Дело в том, что GeSHi, все, что находится в "" воспринимает как текст. Изначально весь текст подсвечивался сиреневым цветом, но тогда комбинация с горячими клавишами тоже подсвечивалась как текст
Код:
Send("{F1}")

После редактирования мной GeSHi, горячие клавиши стали подсвечиваться как нужно, но если в тексте попадаются фигурные скобки, то возникает вот такой эффект. Казалось бы, чего проще, учесть этот нюанс в паттерне, но не так всё просто, в этом случае нужно достаточно серьёзно править логику движка GeSHi.
 
Верх