147 lines
6.7 KiB
Lua
147 lines
6.7 KiB
Lua
|
-- Copyright 2006-2019 Robert Gieseke. See License.txt.
|
||
|
-- NSIS LPeg lexer
|
||
|
-- Based on NSIS 2.46 docs: http://nsis.sourceforge.net/Docs/.
|
||
|
|
||
|
local lexer = require('lexer')
|
||
|
local token, word_match = lexer.token, lexer.word_match
|
||
|
local P, R, S = lpeg.P, lpeg.R, lpeg.S
|
||
|
|
||
|
local lex = lexer.new('nsis')
|
||
|
|
||
|
-- Whitespace.
|
||
|
lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
|
||
|
|
||
|
-- Comments (4.1).
|
||
|
local line_comment = (P(';') + '#') * lexer.nonnewline^0
|
||
|
local block_comment = '/*' * (lexer.any - '*/')^0 * '*/'
|
||
|
lex:add_rule('comment', token(lexer.COMMENT, line_comment + block_comment))
|
||
|
|
||
|
-- Strings.
|
||
|
lex:add_rule('string', token(lexer.STRING, lexer.delimited_range("'") +
|
||
|
lexer.delimited_range('"') +
|
||
|
lexer.delimited_range('`')))
|
||
|
|
||
|
-- Constants (4.2.3).
|
||
|
lex:add_rule('constant', token(lexer.CONSTANT, word_match[[
|
||
|
$PROGRAMFILES $PROGRAMFILES32 $PROGRAMFILES64 $COMMONFILES $COMMONFILES32
|
||
|
$COMMONFILES64 $DESKTOP $EXEDIR $EXEFILE $EXEPATH ${NSISDIR} $WINDIR $SYSDIR
|
||
|
$TEMP $STARTMENU $SMPROGRAMS $SMSTARTUP $QUICKLAUNCH$DOCUMENTS $SENDTO $RECENT
|
||
|
$FAVORITES $MUSIC $PICTURES $VIDEOS $NETHOOD $FONTS $TEMPLATES $APPDATA
|
||
|
$LOCALAPPDATA $PRINTHOOD $INTERNET_CACHE $COOKIES $HISTORY $PROFILE
|
||
|
$ADMINTOOLS $RESOURCES $RESOURCES_LOCALIZED $CDBURN_AREA $HWNDPARENT
|
||
|
$PLUGINSDIR
|
||
|
]]))
|
||
|
-- TODO? Constants used in strings: $$ $\r $\n $\t
|
||
|
|
||
|
-- Variables (4.2).
|
||
|
lex:add_rule('variable', token(lexer.VARIABLE, word_match[[
|
||
|
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $R0 $R1 $R2 $R3 $R4 $R5 $R6 $R7 $R8 $R9
|
||
|
$INSTDIR $OUTDIR $CMDLINE $LANGUAGE Var /GLOBAL
|
||
|
]]) + '$' * lexer.word)
|
||
|
|
||
|
-- Keywords.
|
||
|
lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[
|
||
|
-- Pages (4.5).
|
||
|
Page UninstPage PageEx PageEnd PageExEnd
|
||
|
-- Section commands (4.6).
|
||
|
AddSize Section SectionEnd SectionIn SectionGroup SectionGroupEnd
|
||
|
-- Functions (4.7).
|
||
|
Function FunctionEnd
|
||
|
-- Callbacks (4.7.2).
|
||
|
.onGUIInit .onInit .onInstFailed .onInstSuccess .onGUIEnd .onMouseOverSection
|
||
|
.onRebootFailed .onSelChange .onUserAbort .onVerifyInstDir un.onGUIInit
|
||
|
un.onInit un.onUninstFailed un.onUninstSuccess un.onGUIEnd un.onRebootFailed
|
||
|
un.onSelChange un.onUserAbort
|
||
|
-- General Attributes (4.8.1).
|
||
|
AddBrandingImage AllowRootDirInstall AutoCloseWindow BGFont BGFont
|
||
|
BrandingText /TRIMLEFT /TRIMRIGHT /TRIMCENTER Caption ChangeUI CheckBitmap
|
||
|
CompletedText ComponentText CRCCheck DetailsButtonText DirText DirVar
|
||
|
DirVerify FileErrorText Icon InstallButtonText InstallColors InstallDir
|
||
|
InstallDirRegKey InstProgressFlags InstType LicenseBkColor LicenseData
|
||
|
LicenseForceSelection LicenseText MiscButtonText Name OutFile
|
||
|
RequestExecutionLevel SetFont ShowInstDetails ShowUninstDetails SilentInstall
|
||
|
SilentUnInstall SpaceTexts SubCaption UninstallButtonText UninstallCaption
|
||
|
UninstallIcon UninstallSubCaption UninstallText WindowIcon XPStyle admin auto
|
||
|
bottom checkbox false force height hide highest leave left nevershow none
|
||
|
normal off on radiobuttons right show silent silentlog top true user width
|
||
|
-- Compiler Flags (4.8.2).
|
||
|
AllowSkipFiles FileBufSize SetCompress SetCompressor /SOLID /FINAL zlib bzip2
|
||
|
lzma SetCompressorDictSize SetDatablockOptimize SetDateSave SetOverwrite
|
||
|
ifnewer ifdiff lastused try
|
||
|
-- Version Information (4.8.3).
|
||
|
VIAddVersionKey VIProductVersion /LANG ProductName Comments CompanyName
|
||
|
LegalCopyright FileDescription FileVersion ProductVersion InternalName
|
||
|
LegalTrademarks OriginalFilename PrivateBuild SpecialBuild
|
||
|
-- Basic Instructions (4.9.1).
|
||
|
Delete /REBOOTOK Exec ExecShell ExecShell File /nonfatal Rename ReserveFile
|
||
|
RMDir SetOutPath
|
||
|
-- Registry INI File Instructions (4.9.2).
|
||
|
DeleteINISec DeleteINIStr DeleteRegKey /ifempty DeleteRegValue EnumRegKey
|
||
|
EnumRegValue ExpandEnvStrings FlushINI ReadEnvStr ReadINIStr ReadRegDWORD
|
||
|
ReadRegStr WriteINIStr WriteRegBin WriteRegDWORD WriteRegStr WriteRegExpandStr
|
||
|
HKCR HKEY_CLASSES_ROOT HKLM HKEY_LOCAL_MACHINE HKCU HKEY_CURRENT_USER HKU
|
||
|
HKEY_USERS HKCC HKEY_CURRENT_CONFIG HKDD HKEY_DYN_DATA HKPD
|
||
|
HKEY_PERFORMANCE_DATA SHCTX SHELL_CONTEXT
|
||
|
-- General Purpose Instructions (4.9.3).
|
||
|
CallInstDLL CopyFiles /SILENT /FILESONLY CreateDirectory CreateShortCut
|
||
|
GetDLLVersion GetDLLVersionLocal GetFileTime GetFileTimeLocal GetFullPathName
|
||
|
/SHORT GetTempFileName SearchPath SetFileAttributes RegDLL UnRegDLL
|
||
|
-- Flow Control Instructions (4.9.4).
|
||
|
Abort Call ClearErrors GetCurrentAddress GetFunctionAddress GetLabelAddress
|
||
|
Goto IfAbort IfErrors IfFileExists IfRebootFlag IfSilent IntCmp IntCmpU
|
||
|
MessageBox MB_OK MB_OKCANCEL MB_ABORTRETRYIGNORE MB_RETRYCANCEL MB_YESNO
|
||
|
MB_YESNOCANCEL MB_ICONEXCLAMATION MB_ICONINFORMATION MB_ICONQUESTION
|
||
|
MB_ICONSTOP MB_USERICON MB_TOPMOST MB_SETFOREGROUND MB_RIGHT MB_RTLREADING
|
||
|
MB_DEFBUTTON1 MB_DEFBUTTON2 MB_DEFBUTTON3 MB_DEFBUTTON4 IDABORT IDCANCEL
|
||
|
IDIGNORE IDNO IDOK IDRETRY IDYES Return Quit SetErrors StrCmp StrCmpS
|
||
|
-- File Instructions (4.9.5).
|
||
|
FileClose FileOpen FileRead FileReadByte FileSeek FileWrite FileWriteByte
|
||
|
FindClose FindFirst FindNext
|
||
|
-- Uninstaller Instructions (4.9.6).
|
||
|
WriteUninstaller
|
||
|
-- Miscellaneous Instructions (4.9.7).
|
||
|
GetErrorLevel GetInstDirError InitPluginsDir Nop SetErrorLevel SetRegView
|
||
|
SetShellVarContext all current Sleep
|
||
|
-- String Manipulation Instructions (4.9.8).
|
||
|
StrCpy StrLen
|
||
|
-- Stack Support (4.9.9).
|
||
|
Exch Pop Push
|
||
|
-- Integer Support (4.9.10).
|
||
|
IntFmt IntOp
|
||
|
-- Reboot Instructions (4.9.11).
|
||
|
Reboot SetRebootFlag
|
||
|
-- Install Logging Instructions (4.9.12).
|
||
|
LogSet LogText
|
||
|
-- Section Management (4.9.13).
|
||
|
SectionSetFlags SectionGetFlags SectionGetFlags SectionSetText SectionGetText
|
||
|
SectionSetInstTypes SectionGetInstTypes SectionSetSize SectionGetSize
|
||
|
SetCurInstType GetCurInstType InstTypeSetText InstTypeGetText
|
||
|
-- User Interface Instructions (4.9.14).
|
||
|
BringToFront CreateFont DetailPrint EnableWindow FindWindow GetDlgItem
|
||
|
HideWindow IsWindow LockWindow SendMessage SetAutoClose SetBrandingImage
|
||
|
SetDetailsView SetDetailsPrint listonlytextonly both SetCtlColors /BRANDING
|
||
|
SetSilent ShowWindow
|
||
|
-- Multiple Languages Instructions (4.9.15).
|
||
|
LoadLanguageFile LangString LicenseLangString
|
||
|
-- Compile time commands (5).
|
||
|
!include !addincludedir !addplugindir !appendfile !cd !delfile !echo !error
|
||
|
!execute !packhdr !system !tempfile !warning !verbose {__FILE__} {__LINE__}
|
||
|
{__DATE__} {__TIME__} {__TIMESTAMP__} {NSIS_VERSION} !define !undef !ifdef
|
||
|
!ifndef !if !ifmacrodef !ifmacrondef !else !endif !insertmacro !macro
|
||
|
!macroend !searchparse !searchreplace
|
||
|
]]))
|
||
|
|
||
|
-- Numbers.
|
||
|
lex:add_rule('number', token(lexer.NUMBER, lexer.integer))
|
||
|
|
||
|
-- Operators.
|
||
|
lex:add_rule('operator', token(lexer.OPERATOR, S('+-*/%|&^~!<>')))
|
||
|
|
||
|
-- Labels (4.3).
|
||
|
lex:add_rule('label', token(lexer.LABEL, lexer.word * ':'))
|
||
|
|
||
|
-- Identifiers.
|
||
|
lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))
|
||
|
|
||
|
return lex
|