###############################################################################
# Name: nsis.py #
# Purpose: Define NSIS syntax for highlighting and other features #
# Author: Cody Precord <cprecord@editra.org> #
# Copyright: (c) 2007 Cody Precord <staff@editra.org> #
# License: wxWindows License #
###############################################################################
"""
FILE: nsis.py
AUTHOR: Cody Precord
@summary: Lexer configuration module for Nullsoft Installer Scripts.
@todo: Add User Defined KW
"""
__author__ = "Cody Precord <cprecord@editra.org>"
__svnid__ = "$Id: _nsis.py 63834 2010-04-03 06:04:33Z CJP $"
__revision__ = "$Revision: 63834 $"
#-----------------------------------------------------------------------------#
# Imports
import wx.stc as stc
# Local Imports
import synglob
import syndata
#-----------------------------------------------------------------------------#
#---- Keyword Specifications ----#
# NSIS Functions
NSIS_FUNCT = (0, "!addincludedir !addplugindir MakeNSIS Portions Contributors: "
"Abort AddBrandingImage AddSize AutoCloseWindow BGFont "
"BrandingText BringToFront Call CallInstDLL Caption ChangeUI "
"ClearErrors ComponentText GetDLLVersion GetDLLVersionLocal "
"GetFileTime GetFileTimeLocal CopyFiles CRCCheck FileRead "
"CreateFont CreateShortCut SetDatablockOptimize DeleteINISec "
"DeleteINIStr DeleteRegKey DeleteRegValue Delete DetailPrint "
"DirText DirShow DirVar DirVerify GetInstDirError BGGradient"
"AllowRootDirInstall CheckBitmap EnableWindow EnumRegKey "
"EnumRegValue Exch Exec ExecWait ExecShell ExpandEnvStrings "
"FindWindow FindClose FindFirst FindNext File FileBufSize "
"FlushINI ReserveFile FileClose FileErrorText FileOpen IntCmp "
"FileWrite FileReadByte FileWriteByte FileSeek Function Page "
"GetDlgItem GetFullPathName GetTempFileName HideWindow Icon "
"IfErrors IfFileExists IfRebootFlag IfSilent InstallDirRegKey "
"InstallColors InstallDir InstProgressFlags InstType IntOp "
"IntCmpU IntFmt IsWindow Goto LangString LangStringUP Return "
"LicenseForceSelection LicenseLangString LicenseText "
"LoadLanguageFile LogSet LogText MessageBox Nop Name OutFile "
"PageCallbacks PageEx PageExEnd Pop Push Quit ReadINIStr "
"ReadRegDWORD ReadRegStr ReadEnvStr Reboot RegDLL Rename "
"RMDir Section SectionEnd SectionIn SubSection SectionGroup "
"SubSectionEnd SectionGroupEnd SearchPath SectionSetFlags "
"SectionGetFlags SectionSetInstTypes SectionGetInstTypes "
"SectionGetText SectionSetText SectionGetSize SectionSetSize "
"GetCurInstType SetCurInstType InstTypeSetText SetCompress"
"SendMessage SetAutoClose SetCtlColors SetBrandingImage "
"SetCompressor SetCompressorDictSize SetCompressionLevel "
"SetDateSave SetDetailsView SetDetailsPrint SetErrors "
"GetErrorLevel SetFileAttributes SetFont SetOutPath "
"SetPluginUnload SetRebootFlag SetShellVarContext SetSilent "
"ShowInstDetails ShowUninstDetails ShowWindow SilentInstall "
"SilentUnInstall Sleep StrCmp StrCpy StrLen SubCaption "
"UninstallExeName UninstallCaption UninstallIcon UninstPage "
"UninstallText UninstallSubCaption UnRegDLL WindowIcon "
"WriteRegBin WriteRegDWORD WriteRegStr WriteRegExpandStr "
"WriteUninstaller XPStyle !packhdr !system !execute !echo "
"!include !cd !ifdef !ifndef !endif !define !undef !else "
"!warning !error !verbose !macro !macroend !insertmacro "
"!ifmacrondef MiscButtonText DetailsButtonText "
"InstallButtonText SpaceTexts CompletedText InitPluginsDir "
"GetLabelAddress GetCurrentAddress !AddPluginDir LockWindow "
"AllowSkipFiles Var VIAddVersionKey VIProductVersion "
"ShowUnInstDetails WriteIniStr CreateDirectory FunctionEnd "
"IfAbort LicenseData LicenseBkColor InstTypeGetText "
"SetErrorLevel SetOverwrite WriteINIStr !AddIncludeDir "
"!ifmacrodef UninstallButtonText GetFunctionAddress ")
# NSIS Variables/Constants
NSIS_VAR = (1, "$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $R0 $R1 $R2 $R3 $R4 $R5 $R6 $R7 "
"$R8 $R9 $\t $\" $\' $\` $VARNAME $0, $INSTDIR $OUTDIR $CMDLINE "
"$LANGUAGE $PROGRAMFILES $COMMONFILES $DESKTOP $EXEDIR "
"${NSISDIR} $WINDIR $SYSDIR $TEMP $STARTMENU $SMPROGRAMS "
"$SMSTARTUP $QUICKLAUNCH $DOCUMENTS $SENDTO $RECENT $FAVORITES "
"$MUSIC $PICTURES $VIDEOS $NETHOOD $FONTS $TEMPLATES $APPDATA "
"$PRINTHOOD $INTERNET_CACHE $COOKIES $HISTORY $PROFILE "
"$ADMINTOOLS $RESOURCES $RESOURCES_LOCALIZED $CDBURN_AREA "
"$HWNDPARENT $PLUGINSDIR $$ $\r $\n")
# NSIS Lables (Attributes)
NSIS_LBL = (2, "ARCHIVE FILE_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_HIDDEN LEFT "
"FILE_ATTRIBUTE_NORMAL FILE_ATTRIBUTE_OFFLINE lastused HKCR "
"FILE_ATTRIBUTE_SYSTEM FILE_ATTRIBUTE_TEMPORARY HIDDEN HKCC "
"HKCU HKDD HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG IDYES SYSTEM "
"HKEY_DYN_DATA HKEY_LOCAL_MACHINE MB_ICONQUESTION OFFLINE "
"HKLM HKPD HKU IDABORT IDCANCEL IDIGNORE IDNO IDOK IDRETRY "
"MB_ABORTRETRYIGNORE MB_DEFBUTTON1 MB_DEFBUTTON2 MB_DEFBUTTON3 "
"MB_DEFBUTTON4 MB_ICONEXCLAMATION MB_ICONINFORMATION normal off "
"MB_ICONSTOP MB_OK MB_OKCANCEL MB_RETRYCANCEL MB_RIGHT listonly "
"MB_SETFOREGROUND MB_TOPMOST MB_YESNO MB_YESNOCANCEL NORMAL "
"READONLY SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWNORMAL "
"TEMPORARY auto colored false force hide ifnewer nevershow "
"on show silent silentlog smooth true try lzma zlib bzip2 none "
"textonly both top left bottom right license components "
"instfiles uninstConfirm custom all leave current ifdiff "
"RIGHT CENTER dlg_id ALT CONTROL EXT SHIFT open print manual "
"alwaysoff FILE_ATTRIBUTE_READONLY HKEY_CURRENT_USER directory "
"HKEY_PERFORMANCE_DATA HKEY_USERS ")
# NSIS User Defined (Not sure need help)
NSIS_DEF = (3, "")
#---- Syntax Style Specs ----#
SYNTAX_ITEMS = [ (stc.STC_NSIS_DEFAULT, 'default_style'),
(stc.STC_NSIS_COMMENT, 'comment_style'),
(stc.STC_NSIS_FUNCTION, 'funct_style'),
(stc.STC_NSIS_FUNCTIONDEF, 'keyword_style'),
(stc.STC_NSIS_IFDEFINEDEF, 'pre_style'),
(stc.STC_NSIS_LABEL, 'class_style'),
(stc.STC_NSIS_MACRODEF, 'pre_style'),
(stc.STC_NSIS_NUMBER, 'number_style'),
(stc.STC_NSIS_SECTIONDEF, 'keyword_style'),
(stc.STC_NSIS_STRINGDQ, 'string_style'),
(stc.STC_NSIS_STRINGLQ, 'string_style'),
(stc.STC_NSIS_STRINGRQ, 'string_style'),
(stc.STC_NSIS_STRINGVAR, 'string_style'),
(stc.STC_NSIS_SUBSECTIONDEF, 'keyword_style'),
(stc.STC_NSIS_USERDEFINED, 'pre_style'),
(stc.STC_NSIS_VARIABLE, 'scalar_style') ]
#---- Extra Properties ----#
FOLD = ("fold", "1")
#-----------------------------------------------------------------------------#
class SyntaxData(syndata.SyntaxDataBase):
"""SyntaxData object for NSIS"""
def __init__(self, langid):
syndata.SyntaxDataBase.__init__(self, langid)
# Setup
self.SetLexer(stc.STC_LEX_NSIS)
def GetKeywords(self):
"""Returns Specified Keywords List """
return [NSIS_FUNCT, NSIS_VAR, NSIS_LBL]
def GetSyntaxSpec(self):
"""Syntax Specifications """
return SYNTAX_ITEMS
def GetProperties(self):
"""Returns a list of Extra Properties to set """
return [FOLD]
def GetCommentPattern(self):
"""Returns a list of characters used to comment a block of code """
return [u';']
|