iup-stack/iup/etc/lexlua/nsis.lua

147 lines
6.7 KiB
Lua
Raw Normal View History

2023-02-20 16:44:45 +00:00
-- 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