diff options
Diffstat (limited to 'lexlua/nsis.lua')
-rw-r--r-- | lexlua/nsis.lua | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/lexlua/nsis.lua b/lexlua/nsis.lua new file mode 100644 index 000000000..0387791bc --- /dev/null +++ b/lexlua/nsis.lua @@ -0,0 +1,146 @@ +-- Copyright 2006-2018 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 |