Автор Тема: Нераспознанные элементы и ляпы при подсветке AutoIt синтаксиса  (Прочитано 56760 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Прошу сообщество быть бдительными в этом плане и сообщать в этой теме о проблемах в подсветке синтаксиса...

* Не подсвеченные или плохо/неправильно подсвеченные элементы (ориентироваться на подсветке в SciTE что идёт вместе с последней версией AutoIt'а)
* Любые найденные недоделки в подсветке.

Прошу писать коротко и ясно, ничего лишнего, пожелания и прочее тут писать не нужно.
Также прежде чем сообщать о проблеме, прочтите ниже список известных проблем.

Спасибо.



Известные проблемы:
* Числа некорректно подсвечиваются.
* Не подсвечиваются ключевые слова макросы обрамлённые амперсандом (&).
* Не подсвечиваются горячие клавиши в полукруглых скобках. Спасибо Garrett!
* В #include имя файла подсвечивается некорректно.
* Не подсвечивается символ подчёркивания (нижний дефис). Спасибо Garrett!
* Не отображается часть кода при использовании больших пробелов в выражении.
« Последнее редактирование: Апрель 16, 2012, 06:35:26 от CreatoR »


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt

Нераспознанные элементы и ляпы при подсветке AutoIt синтаксиса
« Ответ #75 Отправлен: Апрель 23, 2010, 15:00:02 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809

  • Автор темы
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Z_Lenar  [?]
Цитировать
У меня нет версий файлов которые использовались для подсветки синтаксиса на форуме
У меня тоже нет :P.
Для подсветки синтаксиса на форуме не используются подобные файлы, там в php зашито...
Ладно позже я сделаю сравнение, а ещё нужно предотвратить повторы, т.к я руками добавлял новые функции и ключ. слова пока выходили бета версии (плохая была идея).


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн Z_Lenar [?]

  • Продвинутый
  • ***
  • Сообщений: 209
  • Репутация: 52
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Хотя есть еще вариант. Выписать все кейворды с последней версии сюда на форум с обрамлением с тегом [autoit]. То что не подсвечивается - зло.  8)

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809

  • Автор темы
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Z_Lenar  [?]
Цитировать
Выписать все кейворды с последней версии сюда на форум с обрамлением с тегом [autoit]. То что не подсвечивается - зло.
Идея неплохая, но придётся руками выписывать нужные функции...

Русское сообщество AutoIt


Оффлайн Z_Lenar [?]

  • Продвинутый
  • ***
  • Сообщений: 209
  • Репутация: 52
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Получается как-то так:
(нажмите для показа/скрытия)
Об этом речь?

В версии 3.3.12.0, содержимое au3.userudfs.properties переместилось в au3.keywords.properties, сам же файл au3.userudfs.properties пропал. Выходит все не подсвеченные кейворды сверху.

CreatoR  [?]
Цитировать
но придётся руками выписывать нужные функции
В смысле?
« Последнее редактирование: Июнь 05, 2014, 21:03:38 от Z_Lenar »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809

  • Автор темы
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Z_Lenar  [?]
Цитировать
В смысле?
Мне в Geshi их нужно вписать...
В любом случае, написал небольшой скрипт который "сделает всё(?) за меня":

Код: AutoIt [Выделить]
#include <Array.au3>

Global $bDebug = False
Global $bLog = False

Global $sExclude_Keywords = 'Opt'
Global $aExclude_Keywords = StringSplit($sExclude_Keywords, '|')

Global $sSciTE_Kwrds_File = @ScriptDir & '\au3.keywords.properties'
Global $sSciTE_API_File = @ScriptDir & '\au3.api'
Global $sGeshi_File = @ScriptDir & '\autoit.php'

Global $sSciTE_Kwrds_Data = FileRead($sSciTE_Kwrds_File)
Global $sSciTE_API_File_Data = FileRead($sSciTE_API_File)
Global $sGeshi_File_Data = FileRead($sGeshi_File)

_Geshi_Sync_Keywords('Keywords', 1, '', False)
_Geshi_Sync_Keywords('Macros', 2, '', False)
_Geshi_Sync_Keywords('Functions', 3, '', False)
_Geshi_Sync_Keywords('UDFs', 4, '_', False)
_Geshi_Sync_Keywords('PreProcessor', 5, '#', False)
_Geshi_Sync_Keywords('Special', 8, '#', False)

Func _Geshi_Sync_Keywords($sKeyword, $iKeyword, $sPrefix = '', $bRemoveUnUsed = True)
    Local $aGeshi_Keywords = _Geshi_GetKeywords($iKeyword, $sPrefix)
    Local $aSciTE_Keywords = _SciTE_GetKeywords($sKeyword)
   
    Local $iRemoved_Count = 0
    Local $iAdded_Count = 0
   
    If $bDebug Then
        _ArrayDisplay($aGeshi_Keywords, 'Geshi - Before')
        _ArrayDisplay($aSciTE_Keywords, 'SciTE - Before')
    EndIf
   
    ;Check in SciTE keywords to ensure that we don't have unused keywords in Geshi
    If $bRemoveUnUsed Then
        _LogOutput('Removing "%s"...', $sKeyword, '')
       
        For $i = $aGeshi_Keywords[0] To 1 Step -1
            ;Geshi Keyword not found in SciTE keywords - remove it from list
            If _ArraySearch($aSciTE_Keywords, $aGeshi_Keywords[$i], 1, 0, 0, 2) = -1 Then
                _LogOutput('Geshi Keyword.%s "%s" not found in SciTE Keywords (removed)', $sKeyword, $aGeshi_Keywords[$i], '')
                _ArrayDelete($aGeshi_Keywords, $i)
                $aGeshi_Keywords[0] -= 1
                $iRemoved_Count += 1
            EndIf
        Next
    EndIf
   
    _LogOutput('Adding "%s"...', $sKeyword, '')
   
    ;Check in Geshi keywords to ensure that we have all used keywords from SciTE
    For $i = 1 To $aSciTE_Keywords[0]
        ;SciTE Keyword not found in Geshi keywords - add it to the list
        If _ArraySearch($aGeshi_Keywords, $aSciTE_Keywords[$i], 1, 0, 0, 2) = -1 Then
            ;If it's in keywords exclude list, then skip it
            If _ArraySearch($aExclude_Keywords, $aSciTE_Keywords[$i], 1, 0, 0, 2) <> -1 Then
                ContinueLoop
            EndIf
           
            _LogOutput('SciTE Keyword.%s "%s" not found in Geshi Keywords (added)', $sKeyword, $aSciTE_Keywords[$i], '')
            _ArrayAdd($aGeshi_Keywords, _Geshi_GetKeywordRealName($aSciTE_Keywords[$i]))
            $aGeshi_Keywords[0] += 1
            $iAdded_Count += 1
        EndIf
    Next
   
    If $bDebug Then
        _ArrayDisplay($aGeshi_Keywords, 'Geshi - After')
        _ArrayDisplay($aSciTE_Keywords, 'SciTE - After')
    EndIf
   
    Local $sGeshi_Kwrds_Str = ''
    Local $sGeshi_Kwrds_Set = ''
    Local $sGeshi_Kwrds = ''
   
    For $i = 1 To $aGeshi_Keywords[0]
        If StringLeft($aGeshi_Keywords[$i], 1) == $sPrefix Then
            $aGeshi_Keywords[$i] = StringTrimLeft($aGeshi_Keywords[$i], 1)
        EndIf
       
        $sGeshi_Kwrds_Set &= "'" & $aGeshi_Keywords[$i] & "',"
       
        If StringLen($sGeshi_Kwrds_Set) >= 75 Or $i = $aGeshi_Keywords[0] Then
            $sGeshi_Kwrds_Str &= @TAB & @TAB & @TAB & @TAB & @TAB & @TAB & $sGeshi_Kwrds_Set & @CRLF
            $sGeshi_Kwrds_Set = ''
        EndIf
    Next
   
    $sGeshi_Kwrds_Str = StringStripWS(StringRegExpReplace($sGeshi_Kwrds_Str, ',+$', ''), 2)
    $sGeshi_Kwrds = StringRegExpReplace($sGeshi_File_Data, _
        "(?si)(.*?'KEYWORDS' => array\(\s+.*?" & $iKeyword & " => array\(\r?\n)\s+(.*?)(\s+\),?.*?)", "\1" & $sGeshi_Kwrds_Str & "\3", 1)
   
    _LogOutput('Total Keywords.%s Added: %i', $sKeyword, $iAdded_Count)
    _LogOutput('Total Keywords.%s Removed: %i', $sKeyword, $iRemoved_Count, '')
    _LogOutput('')
   
    If $bDebug Then
        ConsoleWrite($sGeshi_Kwrds_Str & @LF)
        ;ConsoleWrite($sGeshi_Kwrds & @LF)
    ElseIf $iAdded_Count > 0 Or $iRemoved_Count > 0 Then
        FileCopy($sGeshi_File, $sGeshi_File & '.bak')
       
        $hFile = FileOpen($sGeshi_File, 2)
        FileWrite($hFile, $sGeshi_Kwrds)
        FileClose($hFile)
    EndIf
EndFunc

Func _LogOutput($sData, $vParam1 = '', $vParam2 = '', $sPrefix = '----------------')
    If $bLog Then
        ConsoleWrite($sPrefix & ($sPrefix = '' ? '' : @LF) & StringFormat($sData, $vParam1, $vParam2) & @LF)
    EndIf
EndFunc

Func _SciTE_GetKeywords($sKeyword)
    Local $aKeywords = StringRegExp($sSciTE_Kwrds_Data, "(?si)au3\.keywords\." & $sKeyword & "=(.*?)(?:au3\.keywords\.|\z)", 1)
    $aKeywords = StringSplit(StringStripWS(StringReplace($aKeywords[0], '\', ''), 7), ' ')
   
    Return $aKeywords
EndFunc

Func _Geshi_GetKeywords($iKeyword, $sPrefix = '')
    Local $aKeywords = StringRegExp($sGeshi_File_Data, "(?si)'KEYWORDS' => array\(\s+.*?" & $iKeyword & " => array\(\s+(.*?)\),?", 1)
   
    $aKeywords = StringSplit(StringStripWS($aKeywords[0], 8), ',')
   
    For $i = 1 To $aKeywords[0]
        $aKeywords[$i] = $sPrefix & StringRegExpReplace($aKeywords[$i], "^'+|'+$", "")
    Next
   
    Return $aKeywords
EndFunc

Func _Geshi_GetKeywordRealName($sKeyword)
    If StringRegExp($sSciTE_API_File_Data, '(?i)(\r?\n|^)\s*(' & $sKeyword & ')(\?|\s*\()') Then
        $sKeyword = StringRegExp($sSciTE_API_File_Data, '(?i)(?:\r?\n|^)\s*(' & $sKeyword & ')(?:\?|\s*\()', 1)[0]
    EndIf
   
    Return $sKeyword
EndFunc


Рядом со скриптом нужно положить файлы:
SciTE\api\au3.api
SciTE\properties\au3.keywords.properties
Server/Geshi/autoit.php
« Последнее редактирование: Июнь 05, 2014, 22:44:42 от CreatoR »

Оффлайн Z_Lenar [?]

  • Продвинутый
  • ***
  • Сообщений: 209
  • Репутация: 52
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
CreatoR
Сначала парсил не подсвеченные кейворды, потом решил сделать через буффер (перехват Ctrl+C). Вручную т.е. К нужному регистру переводил проще:
Код: AutoIt [Выделить]
For $i = 0 To UBound($aText)-1
    $sText &= StringRegExp($sAu3API, '(?im)^' & $aText[$i], 2)[0] & @CRLF
Next


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809

  • Автор темы
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Z_Lenar  [?]
Цитировать
К нужному регистру переводил проще
Это может не сработать если ключ. слово это часть другого.

Сейчас всё нормально подсвечивает?

Русское сообщество AutoIt


Оффлайн Z_Lenar [?]

  • Продвинутый
  • ***
  • Сообщений: 209
  • Репутация: 52
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
CreatoR
Мда, и вправду не заметил ;)
Ну у нас, программистов, негласное правило: сделал быстрее остальных - стал Биллом Гейтсом. А то как работает и что будет потом - никому не интересно...

В спойлере выше вроде все верно.

Кстати насчет 'removed'. Может их стоит оставить?
« Последнее редактирование: Июнь 05, 2014, 22:23:43 от Z_Lenar »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7809

  • Автор темы
  • Репутация: 2281
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Z_Lenar  [?]
Цитировать
насчет 'removed'. Может их стоит оставить?
Так это, я их и не удалял :think:.
В моём скрипте предусмотрена такая возможность, но отключена.

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
17 Ответов
13076 Просмотров
Последний ответ Апрель 13, 2015, 19:55:25
от CreatoR
1 Ответов
3804 Просмотров
Последний ответ Май 29, 2011, 13:30:36
от Yashied
13 Ответов
6527 Просмотров
Последний ответ Февраль 02, 2012, 18:56:42
от winstan
1 Ответов
5324 Просмотров
Последний ответ Январь 17, 2014, 00:33:21
от Skif_off
3 Ответов
5227 Просмотров
Последний ответ Август 28, 2014, 18:06:39
от Skif_off
0 Ответов
1956 Просмотров
Последний ответ Сентябрь 02, 2013, 13:48:48
от inververs
7 Ответов
2845 Просмотров
Последний ответ Ноябрь 16, 2013, 23:13:25
от InnI
2 Ответов
1015 Просмотров
Последний ответ Ноябрь 22, 2015, 05:49:27
от ВиталийВВ
11 Ответов
1773 Просмотров
Последний ответ Декабрь 28, 2015, 21:05:33
от Δαηy Δαηy
5 Ответов
536 Просмотров
Последний ответ Апрель 03, 2017, 14:02:49
от pvnn