<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AutoHotkey: скрипт для создания подсветки синтаксиса для PSPad'а]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=452&amp;type=atom" />
	<updated>2007-05-07T00:06:00Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=452</id>
		<entry>
			<title type="html"><![CDATA[AutoHotkey: скрипт для создания подсветки синтаксиса для PSPad'а]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=2784#p2784" />
			<content type="html"><![CDATA[<p>Я пишу и читаю скрипты в PSPad&#039;е. Помимо прочего, из-за подсветки синтаксиса. Но поставляемый с этим редактором файл подсветки AHK ИМХО никуда не годится. Немного лучше обстоит дело с файлом подсветки, идущим в комплекте с AutoHotkey. Но и этот файл кривоват, т.к. создаётся устаревшим скриптом (...\AutoHotkey\Extras\Editors\Syntax\Scripts\Generate PSPad.ahk). Существует <a href="http://www.autohotkey.com/forum/topic9294.html">скрипт</a> <strong>toralf</strong>&#039;а, создающий и файл подсветки, и шаблон автозавершения ключевых слов, команд, директив и функций. Скрипт любопытный и неслабый. Но меня не устраивают оба создаваемых этим скриптом файла (подсветка неполная, а шаблон - с ошибками). В общем, накатал я свой скрипт для создания подсветки. Скрипт простой, но полезный. И работает лучше обоих упомянутых (создаваемый файл подсветки более полный).</p><div class="codebox"><pre><code>;*******************************************************************************
; AutoHotkey Version:    1.0.46.06+
; Автор:                Androgen Belkin
; Имя скрипта:            Generate PSPad (mod).ahk (v.1.0)
;*******************************************************************************
; Скрипт создаёт файл подсветки синтаксиса AutoHotkey для PSPad&#039;а.
; Созданный скриптом файл (имя задаётся ниже) 
; нужно поместить в папку подсветок PSPad&#039;а (...\PSPad\Syntax\).
;
; Этот скрипт является улучшенной версией поставляемого с AutoHotkey скрипта:
; (...\AutoHotkey\Extras\Editors\Syntax\Scripts\Generate PSPad.ahk)
; По сравнению с исходным скриптом:
; - добавляются ключевые слова для подсветки функций AHK
; - не создаются дубликаты ключевых слов
; - не создаются всяческие мусорные строки
; - ключевые слова корректнее распределяются по секциям
; - скрипт можно хранить и запускать из любого места 
;  (исходный - только оттуда, где он лежит по умолчанию)
;*******************************************************************************
SetBatchLines, -1    ; максимальная скорость для скрипта
#NoEnv                ; запрещаем имена переменных как у переменных окружения
SplitPath, A_AHKPath,, AHK_Dir ; получаем папку AutoHotkey

; ========== НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ ===============
NeededAHKFilesPath = %AHK_Dir%\Extras\Editors\Syntax ; путь к нужным файлам
TargetFile = %A_ScriptDir%\AutoHotkey.ini ; имя создаваемого файла
; ========== КОНЕЦ НАСТРОЕК ПОЛЬЗОВАТЕЛЯ ==========

; Проверяем наличие нужных файлов
NeededAHKFiles = ; список нужных файлов
(LTrim
    %NeededAHKFilesPath%\Commands.txt
    %NeededAHKFilesPath%\Functions.txt
    %NeededAHKFilesPath%\Keys.txt
    %NeededAHKFilesPath%\Keywords.txt
    %NeededAHKFilesPath%\Variables.txt
)
Loop, Parse, NeededAHKFiles, `n
    If ( NOT FileExist( A_LoopField ) )
        MissingAHKFiles = %MissingAHKFiles%%A_LoopField%`n
If MissingAHKFiles
{
    MsgBox, 48, Не найдены файлы, ; показываем сообщение
    ( LTrim
        Не найдены следующие необходимые файлы:
        %MissingAHKFiles%
        Проверьте в настройках скрипта пути к этим файлам.
    )
    ExitApp ; конец скрипта
}


; AHK команды и директивы
; Из файла Commands.txt строки помещаются в секцию [KeyWords]
Loop, Read, %NeededAHKFilesPath%\Commands.txt
{
    ; если строка пуста или это комментарий, то...
    If ( A_LoopReadLine = &quot;&quot; OR InStr( A_LoopReadLine, &quot;;&quot; ) = 1 )
        Continue ; пропускаем строку
    StringReplace, CurrCmd, A_LoopReadLine, `,, %A_Space%, All ; заменяем все запятые на пробелы
    StringReplace, CurrCmd, CurrCmd, [, %A_Space%, All ; заменяем все [ на пробелы
    StringSplit, CurrCmd, CurrCmd, %A_Space% ; разбиваем строку на части, разделённые пробелом
    If ( InStr( CurrCmd1, &quot;#&quot; ) = 1 ) ; если это директива
        StringTrimLeft, CurrCmd1, CurrCmd1, 1 ; удаляем символ &quot;#&quot;
    AHKCommands = %AHKCommands%%CurrCmd1%=`n ; добавляем первое слово к общему списку
}


; AHK функции
; Из файла Functions.txt строки тоже помещаются в секцию [KeyWords]
Loop, Read, %NeededAHKFilesPath%\Functions.txt
{
    ; если строка пуста или это комментарий, то...
    If ( A_LoopReadLine = &quot;&quot; OR InStr( A_LoopReadLine, &quot;;&quot; ) = 1 )
        Continue ; пропускаем строку
    StringSplit, CurrCmd, A_LoopReadLine, ( ; разбиваем строку на части, разделённые скобкой (
    AHKFunctions = %AHKFunctions%%CurrCmd1%=`n ; добавляем первое слово к общему списку
}
AHKCommands = %AHKCommands%%AHKFunctions% ; соединяем списки команд и функций
Sort, AHKCommands, U ; сортируем список, удаляем дубликаты


; AHK ключевые слова
; Из файла Keywords.txt строки помещаются в секцию [ReservedWords]
Loop, Read, %NeededAHKFilesPath%\Keywords.txt
{
    ; если строка пуста или это комментарий или названия клавиш для Send, то...
    ; (названия клавиш для Send исключаются, так как эти клавиши перечислены в Keys.txt)
    If ( A_LoopReadLine = &quot;&quot; OR InStr( A_LoopReadLine, &quot;;&quot; ) = 1 OR InStr( A_LoopReadLine,&quot;{&quot; ) = 1 )
        Continue ; пропускаем строку
    StringReplace, CurrCmd, A_LoopReadLine, `,, %A_Space%, All ; заменяем все запятые на пробелы
    StringReplace, CurrCmd, CurrCmd, [, %A_Space%, All ; заменяем все [ на пробелы
    StringSplit, CurrCmd, CurrCmd, %A_Space% ; разбиваем строку на части, разделённые пробелом
    AHKKeywords = %AHKKeywords%%CurrCmd1%=`n ; добавляем первое слово к общему списку
}
Sort, AHKKeywords, U ; сортируем список, удаляем дубликаты


; AHK переменные
; Из файла Variables.txt строки помещаются в секцию [KeyWords2]
Loop, Read, %NeededAHKFilesPath%\Variables.txt
{
    ; если строка пуста или это комментарий, то...
    If ( A_LoopReadLine = &quot;&quot; OR InStr( A_LoopReadLine, &quot;;&quot; ) = 1 )
        Continue ; пропускаем строку
    AHKVariables = %AHKVariables%%A_LoopReadLine%=`n ; добавляем строку к общему списку
}
Sort, AHKVariables, U ; сортируем список, удаляем дубликаты


; AHK клавиши
; Из файла Keys.txt строки помещаются в секцию [KeyWords3]
Loop, Read, %NeededAHKFilesPath%\Keys.txt
{
    ; если строка пуста или это комментарий, то...
    If ( A_LoopReadLine = &quot;&quot; OR InStr( A_LoopReadLine, &quot;;&quot; ) = 1 )
        Continue ; пропускаем строку
    AHKKeys = %AHKKeys%%A_LoopReadLine%=`n ; добавляем строку к общему списку
}
Sort, AHKKeys, U ; сортируем список, удаляем дубликаты

; Бэкапим предыдущий файл
SplitPath, TargetFile,, Dir, Ext, Name
BackUp = %Dir%\%Name%_backup_%A_YYYY%-%A_MM%-%A_DD% (%A_Hour%-%A_Min%-%A_Sec%).%Ext%
FileMove, %TargetFile%, %BackUp%, 1

; Пишем результирующий файл
FileAppend,
(LTrim Com
    `; Файл подсветки синтаксиса AutoHotkey v%A_AhkVersion% для PSPad&#039;а
    `; Создан скриптом &quot;%A_ScriptName%&quot; (by Androgen)
    `; (%A_ScriptDir%\)
    `; Дата создания: %A_DD%-%A_MMMM%-%A_YYYY%, %A_Hour%:%A_Min%:%A_Sec%

    [Settings]
    Name=AutoHotkey
    HTMLGroup=0
    FileType=*.ahk
    CommentString=`;~
    CComment=1
    BasComment=1
    IndentChar={
    UnIndentChar=}
    TabWidth=0
    DoubleQuote=1
;~     Preprocessors=1
    KeyWordChars=_

    [KeyWords]
    %AHKCommands%
    [ReservedWords]
    %AHKKeywords%
    [KeyWords2]
    %AHKVariables%
    [KeyWords3]
    %AHKKeys%
), %TargetFile%</code></pre></div><p><strong>Примечание</strong>: я бы выложил уже готовые файл подсветки и шаблон, но особого смысла в этом нет, т.к. синтаксис AutoHotkey постоянно пополняется/изменяется. В этом и заключается главное достоинство этого скрипта: файл подсветки генерируется на основании самых свежих ключевых строк AutoHotkey.</p>]]></content>
			<author>
				<name><![CDATA[Androgen]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=4</uri>
			</author>
			<updated>2007-05-07T00:06:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=2784#p2784</id>
		</entry>
</feed>
