aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexlua/nsis.lua
diff options
context:
space:
mode:
authormitchell <unknown>2018-03-11 23:04:41 -0400
committermitchell <unknown>2018-03-11 23:04:41 -0400
commit519b7328b66c4c84f03893a31e4be5ba6b1395f2 (patch)
tree2055cd79006357e94c185f341d0df17b9a8769eb /lexlua/nsis.lua
parentc0373e036e965a70045971e2abc582cb4bf12a4e (diff)
downloadscintilla-mirror-519b7328b66c4c84f03893a31e4be5ba6b1395f2.tar.gz
Added optional Lua lexer support.
This support is disabled by default and must be enabled via compile-time option.
Diffstat (limited to 'lexlua/nsis.lua')
-rw-r--r--lexlua/nsis.lua146
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