Ok, here is a mod of Tekls script.
- It adss or updates AHK syntax highlight for UltraEdit
- It uses the systax files directly, which are coming with AHK.
- It doesn't write or read to/from Registry
- You can extend the highlight with extra syntax files (containing keywords or substrings)
@Chris: You can add this to AHK distribution, if you want
@All: Please report bugs or improvements, thanks.
Code:
;##############################################################################
;#
;# Add or update syntaxhiglighting for AutoHotKey scripts in UltraEdit
;#
;# Mod of a script done by Tekl (although not much has survived)
;# Mod done by toralf, 2005-02-15
;#
;# Tested with: AHK 1.0.26.00, Windows XP Pro, UltraEdit 10.10c/10.20
;#
;# Requirements
;# - Syntax files for AHK in one directory
;# - UltraEdit uses standard file for highlighting => wordfile.txt
;#
;# Customize:
;# - The default color for strings is gray, change it to any color
;# you want to have "%var%" to appeer => Extra->Option->syntaxhiglighting
;# - Change the default color for up to 8 keyword groups
;# => Extra->Option->syntaxhiglighting
;# -specify up to 8 syntax files, each containing one keywords per line
;# => you can add your own files, for keywords that you want to highlight
;# Personally I use 3 additional: Operators, Separators and Special
;# Operators.txt => "=`n<`n>`n*`n/`n+`n-"
;# Separators.txt => "``n`n``r`n|`n,`n{`n}"
;# Special.txt => "** x y w h r v g`nis`nnot`nCBlue`ncRed"
;#
; Specify a list of up to 8 syntax files; the order influences the color given to them by UE by default
SyntaxFileNameList = CommandNames|Keywords|Variables|Keys ; e.g. add |Operators|Separators|Special
;Default colors in UE: blue |red |orange |green |brown |blue |blue |blue
SyntaxExtention = .txt
; Edit this to help this script to find AHK and UltraEdit
PathProgramFiles = %ProgramFiles%
PathSyntaxFiles = %PathProgramFiles%\AutoHotkey\Extras\Editors\Syntax
FileUEWordFile = %PathProgramFiles%\UltraEdit\wordfile.txt
;############# END of Custamization Area ##################################
;############# Ask and Check for valid input ###############################
;Search or ask for Wordfile, when it doesn't exist -> exit
IfNotExist, %FileUEWordFile%
FileSelectFile, FileUEWordFile, 1, %PathProgramFiles%, Select UltraEdit wordfile, *.txt
ifNotExist, %FileUEWordFile%
{
MsgBox, 16,, UltraEdit Wordfile cannot be found.
ExitApp
}
;Search or ask for specified syntax folder and files, when they don't exist -> exit
IfNotExist, %PathSyntaxFiles%
FileSelectFolder, PathSyntaxFiles, %PathProgramFiles%,2, Select Folder of Syntax Files
MissingFile =
FileCount = 0
Loop, Parse, SyntaxFileNameList, |
{
FileCount += 1
ifNotExist, %PathSyntaxFiles%\%A_LoopField%%SyntaxExtention%
MissingFile = %MissingFile%`n%A_LoopField%%SyntaxExtention%
}
If MissingFile is not space
{
MsgBox, 16,, AHK Syntax file(s)`n%MissingFile%`n`ncannot be found in`n`n%PathSyntaxFiles%\.
ExitApp
}
If FileCount > 8
{
MsgBox, 16,, You have specified %FileCount% Syntax files.`nOnly 8 are supported be UltraEdit.`nPlease shorten the list.
ExitApp
}
;Check the number of languages in the current wordfile, if more than 19 without AHK -> exit
NumberOfLanguages = 0
Loop, Read, %FileUEWordFile%
{
StringLeft, WFdef, A_LoopReadLine, 2
if WFdef = /L
StringSplit, WFname, A_LoopReadLine, "
LanguageName = %WFname2%
if LanguageName <> AutoHotkey
NumberOfLanguages +=1
}
If NumberOfLanguages > 19
{
MsgBox, 48,, The wordfile has %NumberOfLanguages% syntax-schemes. UltraEdit does only support 20 schemes.`nPlease delete one scheme from the file!
ExitApp
}
;############# Read keywords from syntax files into arrays ################
Loop, Parse, SyntaxFileNameList, | ;Read all syntax files
{
SyntaxFileName = %A_LoopField%
GoSub, ReadSyntaxFromFile ;SyntaxFileName will become string with keywords
}
;############# Build language specific highlight for AHK ##################
StrgAHKwf = "AutoHotkey" Nocase
StrgAHKwf = %StrgAHKwf% Line Comment = `;
StrgAHKwf = %StrgAHKwf% Line Comment Preceding Chars = [~``] ;to escape escaped ;
StrgAHKwf = %StrgAHKwf% Escape Char = ``
StrgAHKwf = %StrgAHKwf% String Chars = `%
StrgAHKwf = %StrgAHKwf% Block Comment On = /*
StrgAHKwf = %StrgAHKwf% Block Comment Off = */
StrgAHKwf = %StrgAHKwf% File Extensions = ini ahk`n
StrgAHKwf = %StrgAHKwf%/Delimiters = ~!@`%^&*()-+=|\/{}[];``:"'<%A_TAB%> ,.?`n
StrgAHKwf = %StrgAHKwf%/Indent Strings = "{" ":"`n
StrgAHKwf = %StrgAHKwf%/Unindent Strings = "}" "Return" "Else"`n
StrgAHKwf = %StrgAHKwf%/Function String = "`%[^t ]++^(:++[a-zA-Z0-9]++:++[a-zA-Z0-9_äöüß<>^~!$#+.*^^^[^]]++:+^)"`n
Loop, Parse, SyntaxFileNameList, | ;Add the keywords from syntax strings into their sections
{
StrgAHKwf = %StrgAHKwf%/C%A_Index%"%A_LoopField%" ;section definition
SyntaxString = %A_LoopField% ;which section/syntax
GoSub, ParseSyntaxString ;parse through string and add to list
}
;############# Add or Update Wordfile #####################################
;Name of a file for temporary store the word file
TemporaryUEwordFile = TempUEwordFile.txt
FileDelete, %TemporaryUEwordFile%
Loop, Read, %FileUEWordFile%, %TemporaryUEwordFile% ;Read through Wordfile
{
StringLeft, WFdef, A_LoopReadLine, 2
if WFdef = /L
{
StringSplit, WFname, A_LoopReadLine, "
LanguageName = %WFname2%
LanguageNumber = %WFname1%
StringTrimLeft,LanguageNumber,LanguageNumber,2
if LanguageName = AutoHotkey ;when AHK section found, place new section at same location
{
FileAppend, /L%LanguageNumber%%StrgAHKwf%
AHKLanguageFound := True
}
}
if LanguageName <> AutoHotkey ;everything that does not belong to AHK, gets unchanged to file
FileAppend, %A_LoopReadLine%`n
}
if not AHKLanguageFound ;when AHK section not found, append AHK section
{
LanguageNumber += 1
FileAppend, /L%LanguageNumber%%StrgAHKwf%, %TemporaryUEwordFile%
}
FileCopy, %FileUEWordFile%, %FileUEWordFile%.ahk.bak, 1 ;Create Backup of current wordfile
FileMove, %TemporaryUEwordFile%, %FileUEWordFile%, 1 ;Replace wordfile with temporary file
; Tell user what has been done
if AHKLanguageFound
MsgBox, 64,, The AutoHotkey-Syntax for UltraEdit has been updated in your wordfile:`n`n%FileUEWordFile%`n`nA backup has been created in the same folder.
else
MsgBox, 64,, The AutoHotkey-Syntax for UltraEdit has been added to your wordfile:`n`n%FileUEWordFile%`n`nA backup has been created in the same folder.
ExitApp ; That's it, exit
;############# SubRoutines ################################################
ReadSyntaxFromFile:
TempString =
Loop, Read , %PathSyntaxFiles%\%SyntaxFileName%%SyntaxExtention% ;read syntax file
{
StringLeft,Char, A_LoopReadLine ,1
If Char <> `; ;if line is comment, don't bother
TempString = %TempString%%A_LoopReadLine%`n ;otherwise add keyword to string
}
%SyntaxFileName% = %TempString% ;Assign string to syntax filename
Sort, %SyntaxFileName%, U ;Sort keywords in string
return
ParseSyntaxString:
Loop, Parse, %SyntaxString%, `n ;parse through syntax string
{
StringLeft, Char, A_LoopField,1
If (Char = PrevChar) ;add keyword to line when first character is same with previous keyword
StrgAHKwf = %StrgAHKwf% %A_LoopField%
else ;for every keyword with a new first letter, start a new row
StrgAHKwf = %StrgAHKwf%`n%A_LoopField%
PrevChar = %Char% ;remember first character of keyword
}
return
;############# END of File ################################################