diff --git a/src/CodeBlocks_wx30-unix.workspace b/src/CodeBlocks_wx30-unix.workspace index dda7b8a9f4..895c3e51b5 100644 --- a/src/CodeBlocks_wx30-unix.workspace +++ b/src/CodeBlocks_wx30-unix.workspace @@ -15,6 +15,9 @@ + + + diff --git a/src/CodeBlocks_wx30.workspace b/src/CodeBlocks_wx30.workspace index 83a80f5c06..b15fde36b4 100644 --- a/src/CodeBlocks_wx30.workspace +++ b/src/CodeBlocks_wx30.workspace @@ -1,7 +1,7 @@ - + @@ -16,6 +16,7 @@ + @@ -33,7 +34,6 @@ - diff --git a/src/plugins/contrib/wxSmithSTC/Makefile.am b/src/plugins/contrib/wxSmithSTC/Makefile.am index 506bc1e527..cf4fefdb7c 100644 --- a/src/plugins/contrib/wxSmithSTC/Makefile.am +++ b/src/plugins/contrib/wxSmithSTC/Makefile.am @@ -3,5 +3,4 @@ EXTRA_DIST = $(srcdir)/*.cpp \ $(srcdir)/*.cbp \ $(srcdir)/manifest.xml \ $(srcdir)/images \ - $(srcdir)/stc \ $(srcdir)/stedit diff --git a/src/plugins/contrib/wxSmithSTC/stc/Makefile.in b/src/plugins/contrib/wxSmithSTC/stc/Makefile.in deleted file mode 100644 index a2bb3b895d..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/Makefile.in +++ /dev/null @@ -1,956 +0,0 @@ -# ========================================================================= -# This makefile was generated by -# Bakefile 0.2.9 (http://www.bakefile.org) -# Do not modify, all changes will be overwritten! -# ========================================================================= - - -@MAKE_SET@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -datarootdir = @datarootdir@ -INSTALL = @INSTALL@ -SHARED_LD_CXX = @SHARED_LD_CXX@ -LIBEXT = @LIBEXT@ -LIBPREFIX = @LIBPREFIX@ -SO_SUFFIX = @SO_SUFFIX@ -DLLIMP_SUFFIX = @DLLIMP_SUFFIX@ -LN_S = @LN_S@ -WINDRES = @WINDRES@ -PIC_FLAG = @PIC_FLAG@ -SONAME_FLAG = @SONAME_FLAG@ -STRIP = @STRIP@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_DIR = @INSTALL_DIR@ -BK_DEPS = @BK_DEPS@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -libdir = @libdir@ -includedir = @includedir@ -DLLPREFIX = @DLLPREFIX@ -LIBS = @LIBS@ -AR = @AR@ -AROPTIONS = @AROPTIONS@ -RANLIB = @RANLIB@ -CXX = @CXX@ -CXXFLAGS = @CXXFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -VENDOR = @VENDOR@ -WX_FLAVOUR = @WX_FLAVOUR@ -WX_LIB_FLAVOUR = @WX_LIB_FLAVOUR@ -TOOLKIT = @TOOLKIT@ -TOOLKIT_LOWERCASE = @TOOLKIT_LOWERCASE@ -TOOLKIT_VERSION = @TOOLKIT_VERSION@ -TOOLCHAIN_FULLNAME = @TOOLCHAIN_FULLNAME@ -EXTRALIBS = @EXTRALIBS@ -EXTRALIBS_GUI = @EXTRALIBS_GUI@ -HOST_SUFFIX = @HOST_SUFFIX@ -wx_top_builddir = @wx_top_builddir@ - -### Variables: ### - -DESTDIR = -WX_RELEASE = 2.8 -WX_RELEASE_NODOT = 28 -LIBDIRNAME = $(wx_top_builddir)/lib -STCDLL_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ - $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \ - -DWXBUILDING -I$(srcdir)/../../include -I$(srcdir)/scintilla/include \ - -I$(srcdir)/scintilla/src -D__WX__ -DSCI_LEXER -DLINK_LEXERS -DWXUSINGDLL \ - -DWXMAKINGDLL_STC $(PIC_FLAG) $(CPPFLAGS) $(CXXFLAGS) -STCDLL_OBJECTS = \ - stcdll_PlatWX.o \ - stcdll_ScintillaWX.o \ - stcdll_stc.o \ - stcdll_AutoComplete.o \ - stcdll_CallTip.o \ - stcdll_CellBuffer.o \ - stcdll_CharClassify.o \ - stcdll_ContractionState.o \ - stcdll_Document.o \ - stcdll_DocumentAccessor.o \ - stcdll_Editor.o \ - stcdll_ExternalLexer.o \ - stcdll_Indicator.o \ - stcdll_KeyMap.o \ - stcdll_KeyWords.o \ - stcdll_LexAPDL.o \ - stcdll_LexAU3.o \ - stcdll_LexAVE.o \ - stcdll_LexAda.o \ - stcdll_LexAsm.o \ - stcdll_LexAsn1.o \ - stcdll_LexBaan.o \ - stcdll_LexBash.o \ - stcdll_LexBasic.o \ - stcdll_LexBullant.o \ - stcdll_LexCLW.o \ - stcdll_LexCPP.o \ - stcdll_LexCSS.o \ - stcdll_LexCaml.o \ - stcdll_LexCsound.o \ - stcdll_LexConf.o \ - stcdll_LexCrontab.o \ - stcdll_LexEScript.o \ - stcdll_LexEiffel.o \ - stcdll_LexErlang.o \ - stcdll_LexFlagship.o \ - stcdll_LexForth.o \ - stcdll_LexFortran.o \ - stcdll_LexGui4Cli.o \ - stcdll_LexHTML.o \ - stcdll_LexHaskell.o \ - stcdll_LexInno.o \ - stcdll_LexKix.o \ - stcdll_LexLisp.o \ - stcdll_LexLout.o \ - stcdll_LexLua.o \ - stcdll_LexMMIXAL.o \ - stcdll_LexMPT.o \ - stcdll_LexMSSQL.o \ - stcdll_LexMatlab.o \ - stcdll_LexMetapost.o \ - stcdll_LexNsis.o \ - stcdll_LexOpal.o \ - stcdll_LexOthers.o \ - stcdll_LexPB.o \ - stcdll_LexPOV.o \ - stcdll_LexPS.o \ - stcdll_LexPascal.o \ - stcdll_LexPerl.o \ - stcdll_LexPython.o \ - stcdll_LexRebol.o \ - stcdll_LexRuby.o \ - stcdll_LexSQL.o \ - stcdll_LexSmalltalk.o \ - stcdll_LexTADS3.o \ - stcdll_LexScriptol.o \ - stcdll_LexSpecman.o \ - stcdll_LexSpice.o \ - stcdll_LexTCL.o \ - stcdll_LexTeX.o \ - stcdll_LexVB.o \ - stcdll_LexVHDL.o \ - stcdll_LexVerilog.o \ - stcdll_LexYAML.o \ - stcdll_LineMarker.o \ - stcdll_PropSet.o \ - stcdll_RESearch.o \ - stcdll_ScintillaBase.o \ - stcdll_Style.o \ - stcdll_StyleContext.o \ - stcdll_UniConversion.o \ - stcdll_ViewStyle.o \ - stcdll_WindowAccessor.o \ - stcdll_XPM.o \ - $(__stcdll___win32rc) -STCLIB_CXXFLAGS = -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ - $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \ - -DWXBUILDING -I$(srcdir)/../../include -I$(srcdir)/scintilla/include \ - -I$(srcdir)/scintilla/src -D__WX__ -DSCI_LEXER -DLINK_LEXERS $(CPPFLAGS) \ - $(CXXFLAGS) -STCLIB_OBJECTS = \ - stclib_PlatWX.o \ - stclib_ScintillaWX.o \ - stclib_stc.o \ - stclib_AutoComplete.o \ - stclib_CallTip.o \ - stclib_CellBuffer.o \ - stclib_CharClassify.o \ - stclib_ContractionState.o \ - stclib_Document.o \ - stclib_DocumentAccessor.o \ - stclib_Editor.o \ - stclib_ExternalLexer.o \ - stclib_Indicator.o \ - stclib_KeyMap.o \ - stclib_KeyWords.o \ - stclib_LexAPDL.o \ - stclib_LexAU3.o \ - stclib_LexAVE.o \ - stclib_LexAda.o \ - stclib_LexAsm.o \ - stclib_LexAsn1.o \ - stclib_LexBaan.o \ - stclib_LexBash.o \ - stclib_LexBasic.o \ - stclib_LexBullant.o \ - stclib_LexCLW.o \ - stclib_LexCPP.o \ - stclib_LexCSS.o \ - stclib_LexCaml.o \ - stclib_LexCsound.o \ - stclib_LexConf.o \ - stclib_LexCrontab.o \ - stclib_LexEScript.o \ - stclib_LexEiffel.o \ - stclib_LexErlang.o \ - stclib_LexFlagship.o \ - stclib_LexForth.o \ - stclib_LexFortran.o \ - stclib_LexGui4Cli.o \ - stclib_LexHTML.o \ - stclib_LexHaskell.o \ - stclib_LexInno.o \ - stclib_LexKix.o \ - stclib_LexLisp.o \ - stclib_LexLout.o \ - stclib_LexLua.o \ - stclib_LexMMIXAL.o \ - stclib_LexMPT.o \ - stclib_LexMSSQL.o \ - stclib_LexMatlab.o \ - stclib_LexMetapost.o \ - stclib_LexNsis.o \ - stclib_LexOpal.o \ - stclib_LexOthers.o \ - stclib_LexPB.o \ - stclib_LexPOV.o \ - stclib_LexPS.o \ - stclib_LexPascal.o \ - stclib_LexPerl.o \ - stclib_LexPython.o \ - stclib_LexRebol.o \ - stclib_LexRuby.o \ - stclib_LexSQL.o \ - stclib_LexSmalltalk.o \ - stclib_LexTADS3.o \ - stclib_LexScriptol.o \ - stclib_LexSpecman.o \ - stclib_LexSpice.o \ - stclib_LexTCL.o \ - stclib_LexTeX.o \ - stclib_LexVB.o \ - stclib_LexVHDL.o \ - stclib_LexVerilog.o \ - stclib_LexYAML.o \ - stclib_LineMarker.o \ - stclib_PropSet.o \ - stclib_RESearch.o \ - stclib_ScintillaBase.o \ - stclib_Style.o \ - stclib_StyleContext.o \ - stclib_UniConversion.o \ - stclib_ViewStyle.o \ - stclib_WindowAccessor.o \ - stclib_XPM.o - -### Conditionally set variables: ### - -@COND_DEPS_TRACKING_0@CXXC = $(CXX) -@COND_DEPS_TRACKING_1@CXXC = $(BK_DEPS) $(CXX) -@COND_PLATFORM_MACOSX_1@WXMACVERSION_CMD = \ -@COND_PLATFORM_MACOSX_1@ -compatibility_version 9.0 -current_version 9.0 -@COND_USE_GUI_0@PORTNAME = base -@COND_USE_GUI_1@PORTNAME = $(TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) -@COND_TOOLKIT_MAC@WXBASEPORT = _carbon -@COND_PLATFORM_WIN32_1@WXCOMPILER = _gcc -@COND_OFFICIAL_BUILD_0_PLATFORM_WIN32_1@VENDORTAG = _$(VENDOR) -@COND_OFFICIAL_BUILD_1_PLATFORM_WIN32_1@VENDORTAG = -@COND_BUILD_debug_DEBUG_FLAG_default@WXDEBUGFLAG = d -@COND_DEBUG_FLAG_1@WXDEBUGFLAG = d -@COND_UNICODE_1@WXUNICODEFLAG = u -@COND_WXUNIV_1@WXUNIVNAME = univ -@COND_PLATFORM_WIN32_0@WXDLLNAMEPREFIXGUI = wx_$(PORTNAME)$(WXUNIVNAME) -@COND_PLATFORM_WIN32_1@WXDLLNAMEPREFIXGUI = \ -@COND_PLATFORM_WIN32_1@ wx$(PORTNAME)$(WXUNIVNAME)$(WX_RELEASE_NODOT) -@COND_PLATFORM_WIN32_0@WXDLLVERSIONTAG = -$(WX_RELEASE) -@COND_PLATFORM_WIN32_1@WXDLLVERSIONTAG = -@COND_MONOLITHIC_0@EXTRALIBS_FOR_BASE = $(EXTRALIBS) -@COND_MONOLITHIC_1@EXTRALIBS_FOR_BASE = $(EXTRALIBS) $(EXTRALIBS_GUI) -@COND_MONOLITHIC_0@EXTRALIBS_FOR_GUI = $(EXTRALIBS_GUI) -@COND_MONOLITHIC_1@EXTRALIBS_FOR_GUI = -COND_SHARED_1___stcdll___depname = \ - $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) -@COND_SHARED_1@__stcdll___depname = $(COND_SHARED_1___stcdll___depname) -@COND_WXUNIV_1@__WXUNIV_DEFINE_p_1 = --define __WXUNIVERSAL__ -@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p_1 = --define wxNO_EXCEPTIONS -@COND_USE_RTTI_0@__RTTI_DEFINE_p_1 = --define wxNO_RTTI -@COND_USE_THREADS_0@__THREAD_DEFINE_p_1 = --define wxNO_THREADS -@COND_SHARED_1@__install_stcdll___depname = install_stcdll -@COND_SHARED_1@__uninstall_stcdll___depname = uninstall_stcdll -COND_PLATFORM_MACOSX_1___stcdll___macinstnamecmd = -install_name \ - $(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2) -@COND_PLATFORM_MACOSX_1@__stcdll___macinstnamecmd = $(COND_PLATFORM_MACOSX_1___stcdll___macinstnamecmd) -COND_PLATFORM_OS2_1___stcdll___importlib = -import \ - $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) -@COND_PLATFORM_OS2_1@__stcdll___importlib = $(COND_PLATFORM_OS2_1___stcdll___importlib) -COND_WINDOWS_IMPLIB_1___stcdll___importlib = \ - -Wl,--out-implib=$(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) -@COND_WINDOWS_IMPLIB_1@__stcdll___importlib = $(COND_WINDOWS_IMPLIB_1___stcdll___importlib) -@COND_PLATFORM_MACOSX_0_USE_SOVERSION_1@__stcdll___targetsuf2 \ -@COND_PLATFORM_MACOSX_0_USE_SOVERSION_1@ = .$(SO_SUFFIX).0 -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@__stcdll___targetsuf2 \ -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@ = .0.$(SO_SUFFIX) -@COND_USE_SOVERSION_0@__stcdll___targetsuf2 = .$(SO_SUFFIX) -@COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1@__stcdll___targetsuf3 \ -@COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1@ = \ -@COND_PLATFORM_MACOSX_0_USE_SOVERCYGWIN_0_USE_SOVERSION_1@ .$(SO_SUFFIX).0.8.0 -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@__stcdll___targetsuf3 \ -@COND_PLATFORM_MACOSX_1_USE_SOVERSION_1@ = .0.8.0.$(SO_SUFFIX) -@COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1@__stcdll___targetsuf3 \ -@COND_USE_SOVERSION_1_USE_SOVERSOLARIS_1@ = .$(SO_SUFFIX).0 -@COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1@__stcdll___targetsuf3 \ -@COND_USE_SOVERCYGWIN_1_USE_SOVERSION_1@ = -0.$(SO_SUFFIX) -@COND_USE_SOVERSION_0@__stcdll___targetsuf3 = .$(SO_SUFFIX) -COND_USE_SOVERLINUX_1___stcdll___soname_flags = \ - $(SONAME_FLAG)$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2) -@COND_USE_SOVERLINUX_1@__stcdll___soname_flags = $(COND_USE_SOVERLINUX_1___stcdll___soname_flags) -COND_USE_SOVERSOLARIS_1___stcdll___soname_flags = \ - $(SONAME_FLAG)$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) -@COND_USE_SOVERSOLARIS_1@__stcdll___soname_flags = $(COND_USE_SOVERSOLARIS_1___stcdll___soname_flags) -COND_USE_SOTWOSYMLINKS_1___stcdll___so_symlinks_cmd = (cd $(LIBDIRNAME)/; rm -f \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2) \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)) -@COND_USE_SOTWOSYMLINKS_1@__stcdll___so_symlinks_cmd = $(COND_USE_SOTWOSYMLINKS_1___stcdll___so_symlinks_cmd) -COND_USE_SOVERSOLARIS_1___stcdll___so_symlinks_cmd = (cd $(LIBDIRNAME)/; rm -f \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX); \ - $(LN_S) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX)) -@COND_USE_SOVERSOLARIS_1@__stcdll___so_symlinks_cmd = $(COND_USE_SOVERSOLARIS_1___stcdll___so_symlinks_cmd) -COND_USE_SOTWOSYMLINKS_1___stcdll___so_symlinks_inst_cmd = rm -f \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2); \ - $(LN_S) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2) \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) -@COND_USE_SOTWOSYMLINKS_1@__stcdll___so_symlinks_inst_cmd = $(COND_USE_SOTWOSYMLINKS_1___stcdll___so_symlinks_inst_cmd) -COND_USE_SOVERSOLARIS_1___stcdll___so_symlinks_inst_cmd = rm -f \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX); \ - $(LN_S) \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX); -@COND_USE_SOVERSOLARIS_1@__stcdll___so_symlinks_inst_cmd = $(COND_USE_SOVERSOLARIS_1___stcdll___so_symlinks_inst_cmd) -COND_USE_SOTWOSYMLINKS_1___stcdll___so_symlinks_uninst_cmd = rm -f \ - $(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2) \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) -@COND_USE_SOTWOSYMLINKS_1@__stcdll___so_symlinks_uninst_cmd = $(COND_USE_SOTWOSYMLINKS_1___stcdll___so_symlinks_uninst_cmd) -COND_USE_SOVERSOLARIS_1___stcdll___so_symlinks_uninst_cmd = rm -f \ - $(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) -@COND_USE_SOVERSOLARIS_1@__stcdll___so_symlinks_uninst_cmd = $(COND_USE_SOVERSOLARIS_1___stcdll___so_symlinks_uninst_cmd) -@COND_TOOLKIT_MSW@__RCDEFDIR_p = --include-dir \ -@COND_TOOLKIT_MSW@ $(LIBDIRNAME)/wx/include/$(TOOLCHAIN_FULLNAME) -COND_MONOLITHIC_1___WXLIB_MONO_p = \ - -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_MONOLITHIC_1@__WXLIB_MONO_p = $(COND_MONOLITHIC_1___WXLIB_MONO_p) -@COND_USE_GUI_1_wxUSE_LIBTIFF_builtin@__LIB_TIFF_p \ -@COND_USE_GUI_1_wxUSE_LIBTIFF_builtin@ = \ -@COND_USE_GUI_1_wxUSE_LIBTIFF_builtin@ -lwxtiff$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_USE_GUI_1_wxUSE_LIBJPEG_builtin@__LIB_JPEG_p \ -@COND_USE_GUI_1_wxUSE_LIBJPEG_builtin@ = \ -@COND_USE_GUI_1_wxUSE_LIBJPEG_builtin@ -lwxjpeg$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_USE_GUI_1_wxUSE_LIBPNG_builtin@__LIB_PNG_p \ -@COND_USE_GUI_1_wxUSE_LIBPNG_builtin@ = \ -@COND_USE_GUI_1_wxUSE_LIBPNG_builtin@ -lwxpng$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_wxUSE_ZLIB_builtin@__LIB_ZLIB_p = \ -@COND_wxUSE_ZLIB_builtin@ -lwxzlib$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_wxUSE_ODBC_builtin@__LIB_ODBC_p = \ -@COND_wxUSE_ODBC_builtin@ -lwxodbc$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -COND_wxUSE_REGEX_builtin___LIB_REGEX_p = \ - -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_wxUSE_REGEX_builtin@__LIB_REGEX_p = $(COND_wxUSE_REGEX_builtin___LIB_REGEX_p) -@COND_wxUSE_EXPAT_builtin@__LIB_EXPAT_p = \ -@COND_wxUSE_EXPAT_builtin@ -lwxexpat$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_PLATFORM_WIN32_1@__stcdll___win32rc = stcdll_version_rc.o -COND_MONOLITHIC_0___WXLIB_CORE_p = \ - -lwx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_core-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_MONOLITHIC_0@__WXLIB_CORE_p = $(COND_MONOLITHIC_0___WXLIB_CORE_p) -COND_MONOLITHIC_0___WXLIB_BASE_p = \ - -lwx_base$(WXBASEPORT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)-$(WX_RELEASE)$(HOST_SUFFIX) -@COND_MONOLITHIC_0@__WXLIB_BASE_p = $(COND_MONOLITHIC_0___WXLIB_BASE_p) -COND_SHARED_0___stclib___depname = \ - $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT) -@COND_SHARED_0@__stclib___depname = $(COND_SHARED_0___stclib___depname) -@COND_SHARED_0@__install_stclib___depname = install_stclib -@COND_SHARED_0@__uninstall_stclib___depname = uninstall_stclib -@COND_WXUNIV_1@__WXUNIV_DEFINE_p = -D__WXUNIVERSAL__ -@COND_USE_EXCEPTIONS_0@__EXCEPTIONS_DEFINE_p = -DwxNO_EXCEPTIONS -@COND_USE_RTTI_0@__RTTI_DEFINE_p = -DwxNO_RTTI -@COND_USE_THREADS_0@__THREAD_DEFINE_p = -DwxNO_THREADS - -### Targets: ### - -all: $(__stcdll___depname) $(__stclib___depname) - -install: $(__install_stcdll___depname) $(__install_stclib___depname) - $(INSTALL_DIR) $(DESTDIR)$(includedir)/wx-$(WX_RELEASE)$(WX_FLAVOUR) - for f in wx/stc/stc.h; do \ - if test ! -d $(DESTDIR)$(includedir)/wx-$(WX_RELEASE)$(WX_FLAVOUR)/`dirname $$f` ; then \ - $(INSTALL_DIR) $(DESTDIR)$(includedir)/wx-$(WX_RELEASE)$(WX_FLAVOUR)/`dirname $$f`; \ - fi; \ - $(INSTALL_DATA) $(srcdir)/../../include/$$f $(DESTDIR)$(includedir)/wx-$(WX_RELEASE)$(WX_FLAVOUR)/$$f; \ - done - -uninstall: $(__uninstall_stcdll___depname) $(__uninstall_stclib___depname) - for f in wx/stc/stc.h; do \ - rm -f $(DESTDIR)$(includedir)/wx-$(WX_RELEASE)$(WX_FLAVOUR)/$$f; \ - done - -install-strip: install - $(STRIP) $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) - -clean: - rm -rf ./.deps ./.pch - rm -f ./*.o - rm -f $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) - rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) - rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf2) - rm -f $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT) - -distclean: clean - rm -f config.cache config.log config.status bk-deps bk-make-pch shared-ld-sh Makefile - -@COND_SHARED_1@$(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3): $(STCDLL_OBJECTS) $(__stcdll___win32rc) -@COND_SHARED_1@ $(SHARED_LD_CXX) $@ $(STCDLL_OBJECTS) -L$(LIBDIRNAME) $(__stcdll___macinstnamecmd) $(__stcdll___importlib) $(__stcdll___soname_flags) $(WXMACVERSION_CMD) $(LDFLAGS) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(EXTRALIBS_FOR_GUI) $(__LIB_ZLIB_p) $(__LIB_ODBC_p) $(__LIB_REGEX_p) $(__LIB_EXPAT_p) $(EXTRALIBS_FOR_BASE) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(LIBS) -@COND_SHARED_1@ -@COND_SHARED_1@ $(__stcdll___so_symlinks_cmd) - -@COND_SHARED_1@install_stcdll: $(__stcdll___depname) -@COND_SHARED_1@ $(INSTALL_DIR) $(DESTDIR)$(libdir) -@COND_SHARED_1@ $(INSTALL_DATA) $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) $(DESTDIR)$(libdir) -@COND_SHARED_1@ $(INSTALL_PROGRAM) $(LIBDIRNAME)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) $(DESTDIR)$(libdir) -@COND_SHARED_1@ (cd $(DESTDIR)$(libdir) ; $(__stcdll___so_symlinks_inst_cmd)) - -@COND_SHARED_1@uninstall_stcdll: -@COND_SHARED_1@ rm -f $(DESTDIR)$(libdir)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX).$(DLLIMP_SUFFIX) -@COND_SHARED_1@ rm -f $(DESTDIR)$(libdir)/$(DLLPREFIX)$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG)$(__stcdll___targetsuf3) -@COND_SHARED_1@ (cd $(DESTDIR)$(libdir) ; $(__stcdll___so_symlinks_uninst_cmd)) - -@COND_SHARED_0@$(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT): $(STCLIB_OBJECTS) -@COND_SHARED_0@ rm -f $@ -@COND_SHARED_0@ $(AR) $(AROPTIONS) $@ $(STCLIB_OBJECTS) -@COND_SHARED_0@ $(RANLIB) $@ - -@COND_SHARED_0@install_stclib: $(__stclib___depname) -@COND_SHARED_0@ $(INSTALL_DIR) $(DESTDIR)$(libdir) -@COND_SHARED_0@ $(INSTALL_DATA) $(LIBDIRNAME)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT) $(DESTDIR)$(libdir) - -@COND_SHARED_0@uninstall_stclib: -@COND_SHARED_0@ rm -f $(DESTDIR)$(libdir)/$(LIBPREFIX)wx_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc-$(WX_RELEASE)$(HOST_SUFFIX)$(LIBEXT) - -stcdll_PlatWX.o: $(srcdir)/PlatWX.cpp - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/PlatWX.cpp - -stcdll_ScintillaWX.o: $(srcdir)/ScintillaWX.cpp - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/ScintillaWX.cpp - -stcdll_stc.o: $(srcdir)/stc.cpp - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/stc.cpp - -stcdll_AutoComplete.o: $(srcdir)/scintilla/src/AutoComplete.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/AutoComplete.cxx - -stcdll_CallTip.o: $(srcdir)/scintilla/src/CallTip.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/CallTip.cxx - -stcdll_CellBuffer.o: $(srcdir)/scintilla/src/CellBuffer.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/CellBuffer.cxx - -stcdll_CharClassify.o: $(srcdir)/scintilla/src/CharClassify.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/CharClassify.cxx - -stcdll_ContractionState.o: $(srcdir)/scintilla/src/ContractionState.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/ContractionState.cxx - -stcdll_Document.o: $(srcdir)/scintilla/src/Document.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/Document.cxx - -stcdll_DocumentAccessor.o: $(srcdir)/scintilla/src/DocumentAccessor.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/DocumentAccessor.cxx - -stcdll_Editor.o: $(srcdir)/scintilla/src/Editor.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/Editor.cxx - -stcdll_ExternalLexer.o: $(srcdir)/scintilla/src/ExternalLexer.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/ExternalLexer.cxx - -stcdll_Indicator.o: $(srcdir)/scintilla/src/Indicator.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/Indicator.cxx - -stcdll_KeyMap.o: $(srcdir)/scintilla/src/KeyMap.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/KeyMap.cxx - -stcdll_KeyWords.o: $(srcdir)/scintilla/src/KeyWords.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/KeyWords.cxx - -stcdll_LexAPDL.o: $(srcdir)/scintilla/src/LexAPDL.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexAPDL.cxx - -stcdll_LexAU3.o: $(srcdir)/scintilla/src/LexAU3.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexAU3.cxx - -stcdll_LexAVE.o: $(srcdir)/scintilla/src/LexAVE.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexAVE.cxx - -stcdll_LexAda.o: $(srcdir)/scintilla/src/LexAda.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexAda.cxx - -stcdll_LexAsm.o: $(srcdir)/scintilla/src/LexAsm.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexAsm.cxx - -stcdll_LexAsn1.o: $(srcdir)/scintilla/src/LexAsn1.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexAsn1.cxx - -stcdll_LexBaan.o: $(srcdir)/scintilla/src/LexBaan.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexBaan.cxx - -stcdll_LexBash.o: $(srcdir)/scintilla/src/LexBash.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexBash.cxx - -stcdll_LexBasic.o: $(srcdir)/scintilla/src/LexBasic.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexBasic.cxx - -stcdll_LexBullant.o: $(srcdir)/scintilla/src/LexBullant.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexBullant.cxx - -stcdll_LexCLW.o: $(srcdir)/scintilla/src/LexCLW.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexCLW.cxx - -stcdll_LexCPP.o: $(srcdir)/scintilla/src/LexCPP.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexCPP.cxx - -stcdll_LexCSS.o: $(srcdir)/scintilla/src/LexCSS.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexCSS.cxx - -stcdll_LexCaml.o: $(srcdir)/scintilla/src/LexCaml.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexCaml.cxx - -stcdll_LexCsound.o: $(srcdir)/scintilla/src/LexCsound.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexCsound.cxx - -stcdll_LexConf.o: $(srcdir)/scintilla/src/LexConf.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexConf.cxx - -stcdll_LexCrontab.o: $(srcdir)/scintilla/src/LexCrontab.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexCrontab.cxx - -stcdll_LexEScript.o: $(srcdir)/scintilla/src/LexEScript.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexEScript.cxx - -stcdll_LexEiffel.o: $(srcdir)/scintilla/src/LexEiffel.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexEiffel.cxx - -stcdll_LexErlang.o: $(srcdir)/scintilla/src/LexErlang.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexErlang.cxx - -stcdll_LexFlagship.o: $(srcdir)/scintilla/src/LexFlagship.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexFlagship.cxx - -stcdll_LexForth.o: $(srcdir)/scintilla/src/LexForth.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexForth.cxx - -stcdll_LexFortran.o: $(srcdir)/scintilla/src/LexFortran.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexFortran.cxx - -stcdll_LexGui4Cli.o: $(srcdir)/scintilla/src/LexGui4Cli.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexGui4Cli.cxx - -stcdll_LexHTML.o: $(srcdir)/scintilla/src/LexHTML.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexHTML.cxx - -stcdll_LexHaskell.o: $(srcdir)/scintilla/src/LexHaskell.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexHaskell.cxx - -stcdll_LexInno.o: $(srcdir)/scintilla/src/LexInno.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexInno.cxx - -stcdll_LexKix.o: $(srcdir)/scintilla/src/LexKix.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexKix.cxx - -stcdll_LexLisp.o: $(srcdir)/scintilla/src/LexLisp.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexLisp.cxx - -stcdll_LexLout.o: $(srcdir)/scintilla/src/LexLout.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexLout.cxx - -stcdll_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexLua.cxx - -stcdll_LexMMIXAL.o: $(srcdir)/scintilla/src/LexMMIXAL.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexMMIXAL.cxx - -stcdll_LexMPT.o: $(srcdir)/scintilla/src/LexMPT.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexMPT.cxx - -stcdll_LexMSSQL.o: $(srcdir)/scintilla/src/LexMSSQL.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexMSSQL.cxx - -stcdll_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexMatlab.cxx - -stcdll_LexMetapost.o: $(srcdir)/scintilla/src/LexMetapost.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexMetapost.cxx - -stcdll_LexNsis.o: $(srcdir)/scintilla/src/LexNsis.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexNsis.cxx - -stcdll_LexOpal.o: $(srcdir)/scintilla/src/LexOpal.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexOpal.cxx - -stcdll_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexOthers.cxx - -stcdll_LexPB.o: $(srcdir)/scintilla/src/LexPB.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexPB.cxx - -stcdll_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexPOV.cxx - -stcdll_LexPS.o: $(srcdir)/scintilla/src/LexPS.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexPS.cxx - -stcdll_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexPascal.cxx - -stcdll_LexPerl.o: $(srcdir)/scintilla/src/LexPerl.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexPerl.cxx - -stcdll_LexPython.o: $(srcdir)/scintilla/src/LexPython.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexPython.cxx - -stcdll_LexRebol.o: $(srcdir)/scintilla/src/LexRebol.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexRebol.cxx - -stcdll_LexRuby.o: $(srcdir)/scintilla/src/LexRuby.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexRuby.cxx - -stcdll_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexSQL.cxx - -stcdll_LexSmalltalk.o: $(srcdir)/scintilla/src/LexSmalltalk.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexSmalltalk.cxx - -stcdll_LexTADS3.o: $(srcdir)/scintilla/src/LexTADS3.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexTADS3.cxx - -stcdll_LexScriptol.o: $(srcdir)/scintilla/src/LexScriptol.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexScriptol.cxx - -stcdll_LexSpecman.o: $(srcdir)/scintilla/src/LexSpecman.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexSpecman.cxx - -stcdll_LexSpice.o: $(srcdir)/scintilla/src/LexSpice.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexSpice.cxx - -stcdll_LexTCL.o: $(srcdir)/scintilla/src/LexTCL.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexTCL.cxx - -stcdll_LexTeX.o: $(srcdir)/scintilla/src/LexTeX.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexTeX.cxx - -stcdll_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexVB.cxx - -stcdll_LexVHDL.o: $(srcdir)/scintilla/src/LexVHDL.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexVHDL.cxx - -stcdll_LexVerilog.o: $(srcdir)/scintilla/src/LexVerilog.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexVerilog.cxx - -stcdll_LexYAML.o: $(srcdir)/scintilla/src/LexYAML.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LexYAML.cxx - -stcdll_LineMarker.o: $(srcdir)/scintilla/src/LineMarker.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/LineMarker.cxx - -stcdll_PropSet.o: $(srcdir)/scintilla/src/PropSet.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/PropSet.cxx - -stcdll_RESearch.o: $(srcdir)/scintilla/src/RESearch.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/RESearch.cxx - -stcdll_ScintillaBase.o: $(srcdir)/scintilla/src/ScintillaBase.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/ScintillaBase.cxx - -stcdll_Style.o: $(srcdir)/scintilla/src/Style.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/Style.cxx - -stcdll_StyleContext.o: $(srcdir)/scintilla/src/StyleContext.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/StyleContext.cxx - -stcdll_UniConversion.o: $(srcdir)/scintilla/src/UniConversion.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/UniConversion.cxx - -stcdll_ViewStyle.o: $(srcdir)/scintilla/src/ViewStyle.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/ViewStyle.cxx - -stcdll_WindowAccessor.o: $(srcdir)/scintilla/src/WindowAccessor.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/WindowAccessor.cxx - -stcdll_XPM.o: $(srcdir)/scintilla/src/XPM.cxx - $(CXXC) -c -o $@ $(STCDLL_CXXFLAGS) $(srcdir)/scintilla/src/XPM.cxx - -stcdll_version_rc.o: $(srcdir)/../../../src/msw/version.rc - $(WINDRES) -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) --define WXBUILDING --define WXDLLNAME=$(WXDLLNAMEPREFIXGUI)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR)_stc$(WXCOMPILER)$(VENDORTAG)$(WXDLLVERSIONTAG) $(__RCDEFDIR_p) --include-dir $(top_srcdir)/include --include-dir $(srcdir)/../../include --include-dir $(srcdir)/scintilla/include --include-dir $(srcdir)/scintilla/src --define __WX__ --define SCI_LEXER --define LINK_LEXERS --define WXUSINGDLL --define WXMAKINGDLL_STC - -stclib_PlatWX.o: $(srcdir)/PlatWX.cpp - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/PlatWX.cpp - -stclib_ScintillaWX.o: $(srcdir)/ScintillaWX.cpp - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/ScintillaWX.cpp - -stclib_stc.o: $(srcdir)/stc.cpp - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/stc.cpp - -stclib_AutoComplete.o: $(srcdir)/scintilla/src/AutoComplete.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/AutoComplete.cxx - -stclib_CallTip.o: $(srcdir)/scintilla/src/CallTip.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/CallTip.cxx - -stclib_CellBuffer.o: $(srcdir)/scintilla/src/CellBuffer.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/CellBuffer.cxx - -stclib_CharClassify.o: $(srcdir)/scintilla/src/CharClassify.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/CharClassify.cxx - -stclib_ContractionState.o: $(srcdir)/scintilla/src/ContractionState.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/ContractionState.cxx - -stclib_Document.o: $(srcdir)/scintilla/src/Document.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/Document.cxx - -stclib_DocumentAccessor.o: $(srcdir)/scintilla/src/DocumentAccessor.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/DocumentAccessor.cxx - -stclib_Editor.o: $(srcdir)/scintilla/src/Editor.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/Editor.cxx - -stclib_ExternalLexer.o: $(srcdir)/scintilla/src/ExternalLexer.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/ExternalLexer.cxx - -stclib_Indicator.o: $(srcdir)/scintilla/src/Indicator.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/Indicator.cxx - -stclib_KeyMap.o: $(srcdir)/scintilla/src/KeyMap.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/KeyMap.cxx - -stclib_KeyWords.o: $(srcdir)/scintilla/src/KeyWords.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/KeyWords.cxx - -stclib_LexAPDL.o: $(srcdir)/scintilla/src/LexAPDL.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexAPDL.cxx - -stclib_LexAU3.o: $(srcdir)/scintilla/src/LexAU3.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexAU3.cxx - -stclib_LexAVE.o: $(srcdir)/scintilla/src/LexAVE.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexAVE.cxx - -stclib_LexAda.o: $(srcdir)/scintilla/src/LexAda.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexAda.cxx - -stclib_LexAsm.o: $(srcdir)/scintilla/src/LexAsm.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexAsm.cxx - -stclib_LexAsn1.o: $(srcdir)/scintilla/src/LexAsn1.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexAsn1.cxx - -stclib_LexBaan.o: $(srcdir)/scintilla/src/LexBaan.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexBaan.cxx - -stclib_LexBash.o: $(srcdir)/scintilla/src/LexBash.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexBash.cxx - -stclib_LexBasic.o: $(srcdir)/scintilla/src/LexBasic.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexBasic.cxx - -stclib_LexBullant.o: $(srcdir)/scintilla/src/LexBullant.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexBullant.cxx - -stclib_LexCLW.o: $(srcdir)/scintilla/src/LexCLW.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexCLW.cxx - -stclib_LexCPP.o: $(srcdir)/scintilla/src/LexCPP.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexCPP.cxx - -stclib_LexCSS.o: $(srcdir)/scintilla/src/LexCSS.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexCSS.cxx - -stclib_LexCaml.o: $(srcdir)/scintilla/src/LexCaml.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexCaml.cxx - -stclib_LexCsound.o: $(srcdir)/scintilla/src/LexCsound.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexCsound.cxx - -stclib_LexConf.o: $(srcdir)/scintilla/src/LexConf.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexConf.cxx - -stclib_LexCrontab.o: $(srcdir)/scintilla/src/LexCrontab.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexCrontab.cxx - -stclib_LexEScript.o: $(srcdir)/scintilla/src/LexEScript.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexEScript.cxx - -stclib_LexEiffel.o: $(srcdir)/scintilla/src/LexEiffel.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexEiffel.cxx - -stclib_LexErlang.o: $(srcdir)/scintilla/src/LexErlang.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexErlang.cxx - -stclib_LexFlagship.o: $(srcdir)/scintilla/src/LexFlagship.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexFlagship.cxx - -stclib_LexForth.o: $(srcdir)/scintilla/src/LexForth.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexForth.cxx - -stclib_LexFortran.o: $(srcdir)/scintilla/src/LexFortran.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexFortran.cxx - -stclib_LexGui4Cli.o: $(srcdir)/scintilla/src/LexGui4Cli.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexGui4Cli.cxx - -stclib_LexHTML.o: $(srcdir)/scintilla/src/LexHTML.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexHTML.cxx - -stclib_LexHaskell.o: $(srcdir)/scintilla/src/LexHaskell.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexHaskell.cxx - -stclib_LexInno.o: $(srcdir)/scintilla/src/LexInno.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexInno.cxx - -stclib_LexKix.o: $(srcdir)/scintilla/src/LexKix.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexKix.cxx - -stclib_LexLisp.o: $(srcdir)/scintilla/src/LexLisp.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexLisp.cxx - -stclib_LexLout.o: $(srcdir)/scintilla/src/LexLout.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexLout.cxx - -stclib_LexLua.o: $(srcdir)/scintilla/src/LexLua.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexLua.cxx - -stclib_LexMMIXAL.o: $(srcdir)/scintilla/src/LexMMIXAL.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexMMIXAL.cxx - -stclib_LexMPT.o: $(srcdir)/scintilla/src/LexMPT.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexMPT.cxx - -stclib_LexMSSQL.o: $(srcdir)/scintilla/src/LexMSSQL.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexMSSQL.cxx - -stclib_LexMatlab.o: $(srcdir)/scintilla/src/LexMatlab.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexMatlab.cxx - -stclib_LexMetapost.o: $(srcdir)/scintilla/src/LexMetapost.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexMetapost.cxx - -stclib_LexNsis.o: $(srcdir)/scintilla/src/LexNsis.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexNsis.cxx - -stclib_LexOpal.o: $(srcdir)/scintilla/src/LexOpal.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexOpal.cxx - -stclib_LexOthers.o: $(srcdir)/scintilla/src/LexOthers.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexOthers.cxx - -stclib_LexPB.o: $(srcdir)/scintilla/src/LexPB.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexPB.cxx - -stclib_LexPOV.o: $(srcdir)/scintilla/src/LexPOV.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexPOV.cxx - -stclib_LexPS.o: $(srcdir)/scintilla/src/LexPS.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexPS.cxx - -stclib_LexPascal.o: $(srcdir)/scintilla/src/LexPascal.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexPascal.cxx - -stclib_LexPerl.o: $(srcdir)/scintilla/src/LexPerl.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexPerl.cxx - -stclib_LexPython.o: $(srcdir)/scintilla/src/LexPython.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexPython.cxx - -stclib_LexRebol.o: $(srcdir)/scintilla/src/LexRebol.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexRebol.cxx - -stclib_LexRuby.o: $(srcdir)/scintilla/src/LexRuby.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexRuby.cxx - -stclib_LexSQL.o: $(srcdir)/scintilla/src/LexSQL.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexSQL.cxx - -stclib_LexSmalltalk.o: $(srcdir)/scintilla/src/LexSmalltalk.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexSmalltalk.cxx - -stclib_LexTADS3.o: $(srcdir)/scintilla/src/LexTADS3.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexTADS3.cxx - -stclib_LexScriptol.o: $(srcdir)/scintilla/src/LexScriptol.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexScriptol.cxx - -stclib_LexSpecman.o: $(srcdir)/scintilla/src/LexSpecman.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexSpecman.cxx - -stclib_LexSpice.o: $(srcdir)/scintilla/src/LexSpice.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexSpice.cxx - -stclib_LexTCL.o: $(srcdir)/scintilla/src/LexTCL.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexTCL.cxx - -stclib_LexTeX.o: $(srcdir)/scintilla/src/LexTeX.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexTeX.cxx - -stclib_LexVB.o: $(srcdir)/scintilla/src/LexVB.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexVB.cxx - -stclib_LexVHDL.o: $(srcdir)/scintilla/src/LexVHDL.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexVHDL.cxx - -stclib_LexVerilog.o: $(srcdir)/scintilla/src/LexVerilog.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexVerilog.cxx - -stclib_LexYAML.o: $(srcdir)/scintilla/src/LexYAML.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LexYAML.cxx - -stclib_LineMarker.o: $(srcdir)/scintilla/src/LineMarker.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/LineMarker.cxx - -stclib_PropSet.o: $(srcdir)/scintilla/src/PropSet.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/PropSet.cxx - -stclib_RESearch.o: $(srcdir)/scintilla/src/RESearch.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/RESearch.cxx - -stclib_ScintillaBase.o: $(srcdir)/scintilla/src/ScintillaBase.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/ScintillaBase.cxx - -stclib_Style.o: $(srcdir)/scintilla/src/Style.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/Style.cxx - -stclib_StyleContext.o: $(srcdir)/scintilla/src/StyleContext.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/StyleContext.cxx - -stclib_UniConversion.o: $(srcdir)/scintilla/src/UniConversion.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/UniConversion.cxx - -stclib_ViewStyle.o: $(srcdir)/scintilla/src/ViewStyle.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/ViewStyle.cxx - -stclib_WindowAccessor.o: $(srcdir)/scintilla/src/WindowAccessor.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/WindowAccessor.cxx - -stclib_XPM.o: $(srcdir)/scintilla/src/XPM.cxx - $(CXXC) -c -o $@ $(STCLIB_CXXFLAGS) $(srcdir)/scintilla/src/XPM.cxx - - -# Include dependency info, if present: -@IF_GNU_MAKE@-include ./.deps/*.d - -.PHONY: all install uninstall clean distclean install_stcdll uninstall_stcdll \ - install_stclib uninstall_stclib diff --git a/src/plugins/contrib/wxSmithSTC/stc/PlatWX.cpp b/src/plugins/contrib/wxSmithSTC/stc/PlatWX.cpp deleted file mode 100644 index 18faa7ae1f..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/PlatWX.cpp +++ /dev/null @@ -1,1581 +0,0 @@ -// Scintilla source code edit control -// PlatWX.cxx - implementation of platform facilities on wxWidgets -// Copyright 1998-1999 by Neil Hodgson -// Robin Dunn -// The License.txt file describes the conditions under which this software may be distributed. - -#include - -#include "wx/wx.h" -#include "wx/encconv.h" -#include "wx/listctrl.h" -#include "wx/mstream.h" -#include "wx/image.h" -#include "wx/imaglist.h" -#include "wx/tokenzr.h" - -#ifdef wxHAVE_RAW_BITMAP -#include "wx/rawbmp.h" -#endif -#if wxUSE_GRAPHICS_CONTEXT -#include "wx/dcgraph.h" -#endif - -#include "Platform.h" -#include "PlatWX.h" -#include "wx/stc/stc.h" - - - -Point Point::FromLong(long lpoint) { - return Point(lpoint & 0xFFFF, lpoint >> 16); -} - -wxRect wxRectFromPRectangle(PRectangle prc) { - wxRect r(prc.left, prc.top, - prc.Width(), prc.Height()); - return r; -} - -PRectangle PRectangleFromwxRect(wxRect rc) { - return PRectangle(rc.GetLeft(), rc.GetTop(), - rc.GetRight()+1, rc.GetBottom()+1); -} - -wxColour wxColourFromCA(const ColourAllocated& ca) { - ColourDesired cd(ca.AsLong()); - return wxColour((unsigned char)cd.GetRed(), - (unsigned char)cd.GetGreen(), - (unsigned char)cd.GetBlue()); -} - -wxColour wxColourFromCAandAlpha(const ColourAllocated& ca, int alpha) { - ColourDesired cd(ca.AsLong()); - return wxColour((unsigned char)cd.GetRed(), - (unsigned char)cd.GetGreen(), - (unsigned char)cd.GetBlue(), - (unsigned char)alpha); -} - -//---------------------------------------------------------------------- - -Palette::Palette() { - used = 0; - allowRealization = false; - size = 100; - entries = new ColourPair[size]; -} - -Palette::~Palette() { - Release(); - delete [] entries; - entries = 0; -} - -void Palette::Release() { - used = 0; - delete [] entries; - size = 100; - entries = new ColourPair[size]; -} - -// This method either adds a colour to the list of wanted colours (want==true) -// or retrieves the allocated colour back to the ColourPair. -// This is one method to make it easier to keep the code for wanting and retrieving in sync. -void Palette::WantFind(ColourPair &cp, bool want) { - if (want) { - for (int i=0; i < used; i++) { - if (entries[i].desired == cp.desired) - return; - } - - if (used >= size) { - int sizeNew = size * 2; - ColourPair *entriesNew = new ColourPair[sizeNew]; - for (int j=0; jSetNoAntiAliasing(!extraFontFlag); - id = font; -} - - -void Font::Release() { - if (id) - delete (wxFont*)id; - id = 0; -} - -//---------------------------------------------------------------------- - -class SurfaceImpl : public Surface { -private: - wxDC* hdc; - bool hdcOwned; - wxBitmap* bitmap; - int x; - int y; - bool unicodeMode; - -public: - SurfaceImpl(); - ~SurfaceImpl(); - - virtual void Init(WindowID wid); - virtual void Init(SurfaceID sid, WindowID wid); - virtual void InitPixMap(int width, int height, Surface *surface_, WindowID wid); - - virtual void Release(); - virtual bool Initialised(); - virtual void PenColour(ColourAllocated fore); - virtual int LogPixelsY(); - virtual int DeviceHeightFont(int points); - virtual void MoveTo(int x_, int y_); - virtual void LineTo(int x_, int y_); - virtual void Polygon(Point *pts, int npts, ColourAllocated fore, ColourAllocated back); - virtual void RectangleDraw(PRectangle rc, ColourAllocated fore, ColourAllocated back); - virtual void FillRectangle(PRectangle rc, ColourAllocated back); - virtual void FillRectangle(PRectangle rc, Surface &surfacePattern); - virtual void RoundedRectangle(PRectangle rc, ColourAllocated fore, ColourAllocated back); - virtual void AlphaRectangle(PRectangle rc, int cornerSize, ColourAllocated fill, int alphaFill, - ColourAllocated outline, int alphaOutline, int flags); - virtual void Ellipse(PRectangle rc, ColourAllocated fore, ColourAllocated back); - virtual void Copy(PRectangle rc, Point from, Surface &surfaceSource); - - virtual void DrawTextNoClip(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back); - virtual void DrawTextClipped(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back); - virtual void DrawTextTransparent(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore); - virtual void MeasureWidths(Font &font_, const char *s, int len, int *positions); - virtual int WidthText(Font &font_, const char *s, int len); - virtual int WidthChar(Font &font_, char ch); - virtual int Ascent(Font &font_); - virtual int Descent(Font &font_); - virtual int InternalLeading(Font &font_); - virtual int ExternalLeading(Font &font_); - virtual int Height(Font &font_); - virtual int AverageCharWidth(Font &font_); - - virtual int SetPalette(Palette *pal, bool inBackGround); - virtual void SetClip(PRectangle rc); - virtual void FlushCachedState(); - - virtual void SetUnicodeMode(bool unicodeMode_); - virtual void SetDBCSMode(int codePage); - - void BrushColour(ColourAllocated back); - void SetFont(Font &font_); -}; - - - -SurfaceImpl::SurfaceImpl() : - hdc(0), hdcOwned(0), bitmap(0), - x(0), y(0), unicodeMode(0) -{} - -SurfaceImpl::~SurfaceImpl() { - Release(); -} - -void SurfaceImpl::Init(WindowID wid) { -#if 0 - Release(); - hdc = new wxMemoryDC(); - hdcOwned = true; -#else - // On Mac and GTK the DC is not really valid until it has a bitmap - // selected into it. So instead of just creating the DC with no bitmap, - // go ahead and give it one. - InitPixMap(1,1,NULL,wid); -#endif -} - -void SurfaceImpl::Init(SurfaceID hdc_, WindowID) { - Release(); - hdc = (wxDC*)hdc_; -} - -void SurfaceImpl::InitPixMap(int width, int height, Surface *WXUNUSED(surface_), WindowID) { - Release(); - hdc = new wxMemoryDC(); - hdcOwned = true; - if (width < 1) width = 1; - if (height < 1) height = 1; - bitmap = new wxBitmap(width, height); - ((wxMemoryDC*)hdc)->SelectObject(*bitmap); -} - - -void SurfaceImpl::Release() { - if (bitmap) { - ((wxMemoryDC*)hdc)->SelectObject(wxNullBitmap); - delete bitmap; - bitmap = 0; - } - if (hdcOwned) { - delete hdc; - hdc = 0; - hdcOwned = false; - } -} - - -bool SurfaceImpl::Initialised() { - return hdc != 0; -} - - -void SurfaceImpl::PenColour(ColourAllocated fore) { - hdc->SetPen(wxPen(wxColourFromCA(fore), 1, wxSOLID)); -} - -void SurfaceImpl::BrushColour(ColourAllocated back) { - hdc->SetBrush(wxBrush(wxColourFromCA(back), wxSOLID)); -} - -void SurfaceImpl::SetFont(Font &font_) { - if (font_.GetID()) { - hdc->SetFont(*((wxFont*)font_.GetID())); - } -} - -int SurfaceImpl::LogPixelsY() { - return hdc->GetPPI().y; -} - -int SurfaceImpl::DeviceHeightFont(int points) { - return points; -} - -void SurfaceImpl::MoveTo(int x_, int y_) { - x = x_; - y = y_; -} - -void SurfaceImpl::LineTo(int x_, int y_) { - hdc->DrawLine(x,y, x_,y_); - x = x_; - y = y_; -} - -void SurfaceImpl::Polygon(Point *pts, int npts, ColourAllocated fore, ColourAllocated back) { - PenColour(fore); - BrushColour(back); - hdc->DrawPolygon(npts, (wxPoint*)pts); -} - -void SurfaceImpl::RectangleDraw(PRectangle rc, ColourAllocated fore, ColourAllocated back) { - PenColour(fore); - BrushColour(back); - hdc->DrawRectangle(wxRectFromPRectangle(rc)); -} - -void SurfaceImpl::FillRectangle(PRectangle rc, ColourAllocated back) { - BrushColour(back); - hdc->SetPen(*wxTRANSPARENT_PEN); - hdc->DrawRectangle(wxRectFromPRectangle(rc)); -} - -void SurfaceImpl::FillRectangle(PRectangle rc, Surface &surfacePattern) { - wxBrush br; - if (((SurfaceImpl&)surfacePattern).bitmap) - br = wxBrush(*((SurfaceImpl&)surfacePattern).bitmap); - else // Something is wrong so display in red - br = wxBrush(*wxRED, wxSOLID); - hdc->SetPen(*wxTRANSPARENT_PEN); - hdc->SetBrush(br); - hdc->DrawRectangle(wxRectFromPRectangle(rc)); -} - -void SurfaceImpl::RoundedRectangle(PRectangle rc, ColourAllocated fore, ColourAllocated back) { - PenColour(fore); - BrushColour(back); - hdc->DrawRoundedRectangle(wxRectFromPRectangle(rc), 4); -} - -#ifdef __WXMSW__ -#define wxPy_premultiply(p, a) ((p) * (a) / 0xff) -#else -#define wxPy_premultiply(p, a) (p) -#endif - -void SurfaceImpl::AlphaRectangle(PRectangle rc, int cornerSize, - ColourAllocated fill, int alphaFill, - ColourAllocated outline, int alphaOutline, - int /*flags*/) { -#if wxUSE_GRAPHICS_CONTEXT - wxGCDC dc(*(wxMemoryDC*)hdc); - wxColour penColour(wxColourFromCAandAlpha(outline, alphaOutline)); - wxColour brushColour(wxColourFromCAandAlpha(fill, alphaFill)); - dc.SetPen(wxPen(penColour)); - dc.SetBrush(wxBrush(brushColour)); - dc.DrawRoundedRectangle(wxRectFromPRectangle(rc), cornerSize); - return; -#else - -#ifdef wxHAVE_RAW_BITMAP - - // TODO: do something with cornerSize - wxUnusedVar(cornerSize); - - int x, y; - wxRect r = wxRectFromPRectangle(rc); - wxBitmap bmp(r.width, r.height, 32); - wxAlphaPixelData pixData(bmp); - pixData.UseAlpha(); - - // Set the fill pixels - ColourDesired cdf(fill.AsLong()); - int red = cdf.GetRed(); - int green = cdf.GetGreen(); - int blue = cdf.GetBlue(); - - wxAlphaPixelData::Iterator p(pixData); - for (y=0; yDrawBitmap(bmp, r.x, r.y, true); - -#else - wxUnusedVar(cornerSize); - wxUnusedVar(alphaFill); - wxUnusedVar(alphaOutline); - RectangleDraw(rc, outline, fill); -#endif -#endif -} - -void SurfaceImpl::Ellipse(PRectangle rc, ColourAllocated fore, ColourAllocated back) { - PenColour(fore); - BrushColour(back); - hdc->DrawEllipse(wxRectFromPRectangle(rc)); -} - -void SurfaceImpl::Copy(PRectangle rc, Point from, Surface &surfaceSource) { - wxRect r = wxRectFromPRectangle(rc); - hdc->Blit(r.x, r.y, r.width, r.height, - ((SurfaceImpl&)surfaceSource).hdc, - from.x, from.y, wxCOPY); -} - -void SurfaceImpl::DrawTextNoClip(PRectangle rc, Font &font, int ybase, - const char *s, int len, - ColourAllocated fore, ColourAllocated back) { - SetFont(font); - hdc->SetTextForeground(wxColourFromCA(fore)); - hdc->SetTextBackground(wxColourFromCA(back)); - FillRectangle(rc, back); - - // ybase is where the baseline should be, but wxWin uses the upper left - // corner, so I need to calculate the real position for the text... - hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent); -} - -void SurfaceImpl::DrawTextClipped(PRectangle rc, Font &font, int ybase, - const char *s, int len, - ColourAllocated fore, ColourAllocated back) { - SetFont(font); - hdc->SetTextForeground(wxColourFromCA(fore)); - hdc->SetTextBackground(wxColourFromCA(back)); - FillRectangle(rc, back); - hdc->SetClippingRegion(wxRectFromPRectangle(rc)); - - // see comments above - hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent); - hdc->DestroyClippingRegion(); -} - - -void SurfaceImpl::DrawTextTransparent(PRectangle rc, Font &font, int ybase, - const char *s, int len, - ColourAllocated fore) { - - SetFont(font); - hdc->SetTextForeground(wxColourFromCA(fore)); - hdc->SetBackgroundMode(wxTRANSPARENT); - - // ybase is where the baseline should be, but wxWin uses the upper left - // corner, so I need to calculate the real position for the text... - hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent); - - hdc->SetBackgroundMode(wxSOLID); -} - - -void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positions) { - - wxString str = stc2wx(s, len); - wxArrayInt tpos; - - SetFont(font); - - hdc->GetPartialTextExtents(str, tpos); - -#if wxUSE_UNICODE - // Map the widths for UCS-2 characters back to the UTF-8 input string - // NOTE: I don't think this is right for when sizeof(wxChar) > 2, ie wxGTK2 - // so figure it out and fix it! - size_t i = 0; - size_t ui = 0; - while ((int)i < len) { - unsigned char uch = (unsigned char)s[i]; - positions[i++] = tpos[ui]; - if (uch >= 0x80) { - if (uch < (0x80 + 0x40 + 0x20)) { - positions[i++] = tpos[ui]; - } else { - positions[i++] = tpos[ui]; - positions[i++] = tpos[ui]; - } - } - ui++; - } -#else - - // If not unicode then just use the widths we have -#if wxUSE_STL - std::copy(tpos.begin(), tpos.end(), positions); -#else - memcpy(positions, tpos.begin(), len * sizeof(int)); -#endif -#endif -} - - -int SurfaceImpl::WidthText(Font &font, const char *s, int len) { - SetFont(font); - int w; - int h; - - hdc->GetTextExtent(stc2wx(s, len), &w, &h); - return w; -} - - -int SurfaceImpl::WidthChar(Font &font, char ch) { - SetFont(font); - int w; - int h; - char s[2] = { ch, 0 }; - - hdc->GetTextExtent(stc2wx(s, 1), &w, &h); - return w; -} - -#define EXTENT_TEST wxT(" `~!@#$%^&*()-_=+\\|[]{};:\"\'<,>.?/1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") - -int SurfaceImpl::Ascent(Font &font) { - SetFont(font); - int w, h, d, e; - hdc->GetTextExtent(EXTENT_TEST, &w, &h, &d, &e); - font.ascent = h - d; - return font.ascent; -} - -int SurfaceImpl::Descent(Font &font) { - SetFont(font); - int w, h, d, e; - hdc->GetTextExtent(EXTENT_TEST, &w, &h, &d, &e); - return d; -} - -int SurfaceImpl::InternalLeading(Font &WXUNUSED(font)) { - return 0; -} - -int SurfaceImpl::ExternalLeading(Font &font) { - SetFont(font); - int w, h, d, e; - hdc->GetTextExtent(EXTENT_TEST, &w, &h, &d, &e); - return e; -} - -int SurfaceImpl::Height(Font &font) { - SetFont(font); - return hdc->GetCharHeight() + 1; -} - -int SurfaceImpl::AverageCharWidth(Font &font) { - SetFont(font); - return hdc->GetCharWidth(); -} - -int SurfaceImpl::SetPalette(Palette *WXUNUSED(pal), bool WXUNUSED(inBackGround)) { - return 0; -} - -void SurfaceImpl::SetClip(PRectangle rc) { - hdc->SetClippingRegion(wxRectFromPRectangle(rc)); -} - -void SurfaceImpl::FlushCachedState() { -} - -void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) { - unicodeMode=unicodeMode_; -} - -void SurfaceImpl::SetDBCSMode(int WXUNUSED(codePage)) { - // dbcsMode = codePage == SC_CP_DBCS; -} - - -Surface *Surface::Allocate() { - return new SurfaceImpl; -} - - -//---------------------------------------------------------------------- - - -inline wxWindow* GETWIN(WindowID id) { return (wxWindow*)id; } - -Window::~Window() { -} - -void Window::Destroy() { - if (id) { - Show(false); - GETWIN(id)->Destroy(); - } - id = 0; -} - -bool Window::HasFocus() { - return wxWindow::FindFocus() == GETWIN(id); -} - -PRectangle Window::GetPosition() { - if (! id) return PRectangle(); - wxRect rc(GETWIN(id)->GetPosition(), GETWIN(id)->GetSize()); - return PRectangleFromwxRect(rc); -} - -void Window::SetPosition(PRectangle rc) { - wxRect r = wxRectFromPRectangle(rc); - GETWIN(id)->SetSize(r); -} - -void Window::SetPositionRelative(PRectangle rc, Window) { - SetPosition(rc); // ???? -} - -PRectangle Window::GetClientPosition() { - if (! id) return PRectangle(); - wxSize sz = GETWIN(id)->GetClientSize(); - return PRectangle(0, 0, sz.x, sz.y); -} - -void Window::Show(bool show) { - GETWIN(id)->Show(show); -} - -void Window::InvalidateAll() { - GETWIN(id)->Refresh(false); -} - -void Window::InvalidateRectangle(PRectangle rc) { - wxRect r = wxRectFromPRectangle(rc); - GETWIN(id)->Refresh(false, &r); -} - -void Window::SetFont(Font &font) { - GETWIN(id)->SetFont(*((wxFont*)font.GetID())); -} - -void Window::SetCursor(Cursor curs) { - int cursorId; - - switch (curs) { - case cursorText: - cursorId = wxCURSOR_IBEAM; - break; - case cursorArrow: - cursorId = wxCURSOR_ARROW; - break; - case cursorUp: - cursorId = wxCURSOR_ARROW; // ** no up arrow... wxCURSOR_UPARROW; - break; - case cursorWait: - cursorId = wxCURSOR_WAIT; - break; - case cursorHoriz: - cursorId = wxCURSOR_SIZEWE; - break; - case cursorVert: - cursorId = wxCURSOR_SIZENS; - break; - case cursorReverseArrow: - cursorId = wxCURSOR_RIGHT_ARROW; - break; - case cursorHand: - cursorId = wxCURSOR_HAND; - break; - default: - cursorId = wxCURSOR_ARROW; - break; - } -#ifdef __WXMOTIF__ - wxCursor wc = wxStockCursor(cursorId) ; -#else - wxCursor wc = wxCursor(cursorId) ; -#endif - if(curs != cursorLast) - { - GETWIN(id)->SetCursor(wc); - cursorLast = curs; - } -} - - -void Window::SetTitle(const char *s) { - GETWIN(id)->SetLabel(stc2wx(s)); -} - - -//---------------------------------------------------------------------- -// Helper classes for ListBox - - -// This is a simple subclass of wxListView that just resets focus to the -// parent when it gets it. -class wxSTCListBox : public wxListView { -public: - wxSTCListBox(wxWindow* parent, wxWindowID id, - const wxPoint& pos, const wxSize& size, - long style) - : wxListView() - { -#ifdef __WXMSW__ - Hide(); // don't flicker as we move it around... -#endif - Create(parent, id, pos, size, style); - } - - - void OnFocus(wxFocusEvent& event) { - GetParent()->SetFocus(); - event.Skip(); - } - - void OnKillFocus(wxFocusEvent& WXUNUSED(event)) { - // Do nothing. Prevents base class from resetting the colors... - } - -#ifdef __WXMAC__ - // For some reason I don't understand yet the focus doesn't really leave - // the listbox like it should, so if we get any events feed them back to - // the wxSTC - void OnKeyDown(wxKeyEvent& event) { - GetGrandParent()->GetEventHandler()->ProcessEvent(event); - } - void OnChar(wxKeyEvent& event) { - GetGrandParent()->GetEventHandler()->ProcessEvent(event); - } - - // And we need to force the focus back when being destroyed - ~wxSTCListBox() { - GetGrandParent()->SetFocus(); - } -#endif - -private: - DECLARE_EVENT_TABLE() -}; - -BEGIN_EVENT_TABLE(wxSTCListBox, wxListView) - EVT_SET_FOCUS( wxSTCListBox::OnFocus) - EVT_KILL_FOCUS(wxSTCListBox::OnKillFocus) -#ifdef __WXMAC__ - EVT_KEY_DOWN( wxSTCListBox::OnKeyDown) - EVT_CHAR( wxSTCListBox::OnChar) -#endif -END_EVENT_TABLE() - - - -#if wxUSE_POPUPWIN //----------------------------------- -#include - - -// -// TODO: Refactor these two classes to have a common base (or a mix-in) to get -// rid of the code duplication. (Either that or convince somebody to -// implement wxPopupWindow for the Mac!!) -// -// In the meantime, be careful to duplicate any changes as needed... -// - -// A popup window to place the wxSTCListBox upon -class wxSTCListBoxWin : public wxPopupWindow -{ -private: - wxListView* lv; - CallBackAction doubleClickAction; - void* doubleClickActionData; -public: - wxSTCListBoxWin(wxWindow* parent, wxWindowID id, Point WXUNUSED(location)) : - wxPopupWindow(parent, wxBORDER_NONE) - { - - SetBackgroundColour(*wxBLACK); // for our simple border - - lv = new wxSTCListBox(parent, id, wxPoint(-50,-50), wxDefaultSize, - wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER | wxBORDER_NONE); - lv->SetCursor(wxCursor(wxCURSOR_ARROW)); - lv->InsertColumn(0, wxEmptyString); - lv->InsertColumn(1, wxEmptyString); - - // NOTE: We need to fool the wxListView into thinking that it has the - // focus so it will use the normal selection colour and will look - // "right" to the user. But since the wxPopupWindow or its children - // can't receive focus then we have to pull a fast one and temporarily - // parent the listctrl on the STC window and then call SetFocus and - // then reparent it back to the popup. - lv->SetFocus(); - lv->Reparent(this); -#ifdef __WXMSW__ - lv->Show(); -#endif - } - - - // Set position in client coords - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO) { - if (x != wxDefaultCoord) { - GetParent()->ClientToScreen(&x, NULL); - } - if (y != wxDefaultCoord) { - GetParent()->ClientToScreen(NULL, &y); - } - wxPopupWindow::DoSetSize(x, y, width, height, sizeFlags); - } - - // return position as if it were in client coords - virtual void DoGetPosition( int *x, int *y ) const { - int sx, sy; - wxPopupWindow::DoGetPosition(&sx, &sy); - GetParent()->ScreenToClient(&sx, &sy); - if (x) *x = sx; - if (y) *y = sy; - } - - - bool Destroy() { - if ( !wxPendingDelete.Member(this) ) - wxPendingDelete.Append(this); - return true; - } - - - int IconWidth() { - wxImageList* il = lv->GetImageList(wxIMAGE_LIST_SMALL); - if (il != NULL) { - int w, h; - il->GetSize(0, w, h); - return w; - } - return 0; - } - - - void SetDoubleClickAction(CallBackAction action, void *data) { - doubleClickAction = action; - doubleClickActionData = data; - } - - - void OnFocus(wxFocusEvent& event) { - GetParent()->SetFocus(); - event.Skip(); - } - - void OnSize(wxSizeEvent& event) { - // resize the child - wxSize sz = GetSize(); - sz.x -= 2; - sz.y -= 2; - lv->SetSize(1, 1, sz.x, sz.y); - // reset the column widths - lv->SetColumnWidth(0, IconWidth()+4); - lv->SetColumnWidth(1, sz.x - 2 - lv->GetColumnWidth(0) - - wxSystemSettings::GetMetric(wxSYS_VSCROLL_X)); - event.Skip(); - } - - void OnActivate(wxListEvent& WXUNUSED(event)) { - doubleClickAction(doubleClickActionData); - } - - wxListView* GetLB() { return lv; } - -private: - DECLARE_EVENT_TABLE() - -}; - -BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxPopupWindow) - EVT_SET_FOCUS ( wxSTCListBoxWin::OnFocus) - EVT_SIZE ( wxSTCListBoxWin::OnSize) - EVT_LIST_ITEM_ACTIVATED(wxID_ANY, wxSTCListBoxWin::OnActivate) -END_EVENT_TABLE() - - - -#else // !wxUSE_POPUPWIN ----------------------------------- - -// A normal window to place the wxSTCListBox upon, but make it behave as much -// like a wxPopupWindow as possible -class wxSTCListBoxWin : public wxFrame { -private: - wxListView* lv; - CallBackAction doubleClickAction; - void* doubleClickActionData; -public: - wxSTCListBoxWin(wxWindow* parent, wxWindowID id, Point location) : - wxFrame(parent, id, wxEmptyString, wxPoint(location.x, location.y), wxSize(0,0), - wxFRAME_NO_TASKBAR - | wxFRAME_FLOAT_ON_PARENT -#ifdef __WXMAC__ - | wxPOPUP_WINDOW - | wxNO_BORDER -#else - | wxSIMPLE_BORDER -#endif - ) - { - - lv = new wxSTCListBox(this, id, wxDefaultPosition, wxDefaultSize, - wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER | wxNO_BORDER); - lv->SetCursor(wxCursor(wxCURSOR_ARROW)); - lv->InsertColumn(0, wxEmptyString); - lv->InsertColumn(1, wxEmptyString); - - // Eventhough we immediately reset the focus to the parent, this helps - // things to look right... - lv->SetFocus(); - - Hide(); - } - - - // On OSX and (possibly others) there can still be pending - // messages/events for the list control when Scintilla wants to - // close it, so do a pending delete of it instead of destroying - // immediately. - bool Destroy() - { -#ifdef __WXMAC__ - // The bottom edge of this window is not getting properly - // refreshed upon deletion, so help it out... - wxWindow* p = GetParent(); - wxRect r(GetPosition(), GetSize()); - r.SetHeight(r.GetHeight()+1); - p->Refresh(false, &r); -#endif - if ( !wxPendingDelete.Member(this) ) - wxPendingDelete.Append(this); - return true; - } - - - int IconWidth() - { - wxImageList* il = lv->GetImageList(wxIMAGE_LIST_SMALL); - if (il != NULL) { - int w, h; - il->GetSize(0, w, h); - return w; - } - return 0; - } - - - void SetDoubleClickAction(CallBackAction action, void *data) - { - doubleClickAction = action; - doubleClickActionData = data; - } - - - void OnFocus(wxFocusEvent& event) - { - ActivateParent(); - GetParent()->SetFocus(); - event.Skip(); - } - - void OnSize(wxSizeEvent& event) - { - // resize the child - wxSize sz = GetClientSize(); - lv->SetSize(sz); - // reset the column widths - lv->SetColumnWidth(0, IconWidth()+4); - lv->SetColumnWidth(1, sz.x - 2 - lv->GetColumnWidth(0) - - wxSystemSettings::GetMetric(wxSYS_VSCROLL_X)); - event.Skip(); - } - - void ActivateParent() - { - // Although we're a frame, we always want the parent to be active, so - // raise it whenever we get shown, focused, etc. - wxTopLevelWindow *frame = wxDynamicCast( - wxGetTopLevelParent(GetParent()), wxTopLevelWindow); - if (frame) - frame->Raise(); - } - - - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO) - { - // convert coords to screen coords since we're a top-level window - if (x != wxDefaultCoord) { - GetParent()->ClientToScreen(&x, NULL); - } - if (y != wxDefaultCoord) { - GetParent()->ClientToScreen(NULL, &y); - } - wxFrame::DoSetSize(x, y, width, height, sizeFlags); - } - - virtual bool Show(bool show = true) - { - bool rv = wxFrame::Show(show); - if (rv && show) - ActivateParent(); -#ifdef __WXMAC__ - GetParent()->Refresh(false); -#endif - return rv; - } - - void OnActivate(wxListEvent& WXUNUSED(event)) - { - doubleClickAction(doubleClickActionData); - } - - wxListView* GetLB() { return lv; } - -private: - DECLARE_EVENT_TABLE() -}; - - -BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxWindow) - EVT_SET_FOCUS ( wxSTCListBoxWin::OnFocus) - EVT_SIZE ( wxSTCListBoxWin::OnSize) - EVT_LIST_ITEM_ACTIVATED(wxID_ANY, wxSTCListBoxWin::OnActivate) -END_EVENT_TABLE() - -#endif // wxUSE_POPUPWIN ----------------------------------- - - -inline wxSTCListBoxWin* GETLBW(WindowID win) { - return ((wxSTCListBoxWin*)win); -} - -inline wxListView* GETLB(WindowID win) { - return GETLBW(win)->GetLB(); -} - -//---------------------------------------------------------------------- - -class ListBoxImpl : public ListBox { -private: - int lineHeight; - bool unicodeMode; - int desiredVisibleRows; - int aveCharWidth; - size_t maxStrWidth; - Point location; // Caret location at which the list is opened - wxImageList* imgList; - wxArrayInt* imgTypeMap; - -public: - ListBoxImpl(); - ~ListBoxImpl(); - - virtual void SetFont(Font &font); - virtual void Create(Window &parent, int ctrlID, Point location_, int lineHeight_, bool unicodeMode_); - virtual void SetAverageCharWidth(int width); - virtual void SetVisibleRows(int rows); - virtual int GetVisibleRows() const; - virtual PRectangle GetDesiredRect(); - virtual int CaretFromEdge(); - virtual void Clear(); - virtual void Append(char *s, int type = -1); - void Append(const wxString& text, int type); - virtual int Length(); - virtual void Select(int n); - virtual int GetSelection(); - virtual int Find(const char *prefix); - virtual void GetValue(int n, char *value, int len); - virtual void RegisterImage(int type, const char *xpm_data); - virtual void ClearRegisteredImages(); - virtual void SetDoubleClickAction(CallBackAction, void *); - virtual void SetList(const char* list, char separator, char typesep); -}; - - -ListBoxImpl::ListBoxImpl() - : lineHeight(10), unicodeMode(false), - desiredVisibleRows(5), aveCharWidth(8), maxStrWidth(0), - imgList(NULL), imgTypeMap(NULL) -{ -} - -ListBoxImpl::~ListBoxImpl() { - if (imgList) { - delete imgList; - imgList = NULL; - } - if (imgTypeMap) { - delete imgTypeMap; - imgTypeMap = NULL; - } -} - - -void ListBoxImpl::SetFont(Font &font) { - GETLB(id)->SetFont(*((wxFont*)font.GetID())); -} - - -void ListBoxImpl::Create(Window &parent, int ctrlID, Point location_, int lineHeight_, bool unicodeMode_) { - location = location_; - lineHeight = lineHeight_; - unicodeMode = unicodeMode_; - maxStrWidth = 0; - id = new wxSTCListBoxWin(GETWIN(parent.GetID()), ctrlID, location); - if (imgList != NULL) - GETLB(id)->SetImageList(imgList, wxIMAGE_LIST_SMALL); -} - - -void ListBoxImpl::SetAverageCharWidth(int width) { - aveCharWidth = width; -} - - -void ListBoxImpl::SetVisibleRows(int rows) { - desiredVisibleRows = rows; -} - - -int ListBoxImpl::GetVisibleRows() const { - return desiredVisibleRows; -} - -PRectangle ListBoxImpl::GetDesiredRect() { - // wxListCtrl doesn't have a DoGetBestSize, so instead we kept track of - // the max size in Append and calculate it here... - int maxw = maxStrWidth * aveCharWidth; - int maxh ; - - // give it a default if there are no lines, and/or add a bit more - if (maxw == 0) maxw = 100; - maxw += aveCharWidth * 3 + - GETLBW(id)->IconWidth() + wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); - if (maxw > 350) - maxw = 350; - - // estimate a desired height - int count = GETLB(id)->GetItemCount(); - if (count) { - wxRect rect; - GETLB(id)->GetItemRect(0, rect); - maxh = count * rect.GetHeight(); - if (maxh > 140) // TODO: Use desiredVisibleRows?? - maxh = 140; - - // Try to make the size an exact multiple of some number of lines - int lines = maxh / rect.GetHeight(); - maxh = (lines + 1) * rect.GetHeight() + 2; - } - else - maxh = 100; - - PRectangle rc; - rc.top = 0; - rc.left = 0; - rc.right = maxw; - rc.bottom = maxh; - return rc; -} - - -int ListBoxImpl::CaretFromEdge() { - return 4 + GETLBW(id)->IconWidth(); -} - - -void ListBoxImpl::Clear() { - GETLB(id)->DeleteAllItems(); -} - - -void ListBoxImpl::Append(char *s, int type) { - Append(stc2wx(s), type); -} - -void ListBoxImpl::Append(const wxString& text, int type) { - long count = GETLB(id)->GetItemCount(); - long itemID = GETLB(id)->InsertItem(count, wxEmptyString); - long idx = -1; - GETLB(id)->SetItem(itemID, 1, text); - maxStrWidth = wxMax(maxStrWidth, text.length()); - if (type != -1) { - wxCHECK_RET(imgTypeMap, wxT("Unexpected NULL imgTypeMap")); - idx = imgTypeMap->Item(type); - } - GETLB(id)->SetItemImage(itemID, idx, idx); -} - -void ListBoxImpl::SetList(const char* list, char separator, char typesep) { - GETLB(id)->Freeze(); - Clear(); - wxStringTokenizer tkzr(stc2wx(list), (wxChar)separator); - while ( tkzr.HasMoreTokens() ) { - wxString token = tkzr.GetNextToken(); - long type = -1; - int pos = token.Find(typesep); - if (pos != -1) { - token.Mid(pos+1).ToLong(&type); - token.Truncate(pos); - } - Append(token, (int)type); - } - GETLB(id)->Thaw(); -} - - -int ListBoxImpl::Length() { - return GETLB(id)->GetItemCount(); -} - - -void ListBoxImpl::Select(int n) { - bool select = true; - if (n == -1) { - n = 0; - select = false; - } - GETLB(id)->EnsureVisible(n); - GETLB(id)->Select(n, select); -} - - -int ListBoxImpl::GetSelection() { - return GETLB(id)->GetFirstSelected(); -} - - -int ListBoxImpl::Find(const char *WXUNUSED(prefix)) { - // No longer used - return wxNOT_FOUND; -} - - -void ListBoxImpl::GetValue(int n, char *value, int len) { - wxListItem item; - item.SetId(n); - item.SetColumn(1); - item.SetMask(wxLIST_MASK_TEXT); - GETLB(id)->GetItem(item); - strncpy(value, wx2stc(item.GetText()), len); - value[len-1] = '\0'; -} - - -void ListBoxImpl::RegisterImage(int type, const char *xpm_data) { - wxMemoryInputStream stream(xpm_data, strlen(xpm_data)+1); - wxImage img(stream, wxBITMAP_TYPE_XPM); - wxBitmap bmp(img); - - if (! imgList) { - // assumes all images are the same size - imgList = new wxImageList(bmp.GetWidth(), bmp.GetHeight(), true); - imgTypeMap = new wxArrayInt; - } - - int idx = imgList->Add(bmp); - - // do we need to extend the mapping array? - wxArrayInt& itm = *imgTypeMap; - if ( itm.GetCount() < (size_t)type+1) - itm.Add(-1, type - itm.GetCount() + 1); - - // Add an item that maps type to the image index - itm[type] = idx; -} - -void ListBoxImpl::ClearRegisteredImages() { - if (imgList) { - delete imgList; - imgList = NULL; - } - if (imgTypeMap) { - delete imgTypeMap; - imgTypeMap = NULL; - } - if (id) - GETLB(id)->SetImageList(NULL, wxIMAGE_LIST_SMALL); -} - - -void ListBoxImpl::SetDoubleClickAction(CallBackAction action, void *data) { - GETLBW(id)->SetDoubleClickAction(action, data); -} - - -ListBox::ListBox() { -} - -ListBox::~ListBox() { -} - -ListBox *ListBox::Allocate() { - return new ListBoxImpl(); -} - -//---------------------------------------------------------------------- - -Menu::Menu() : id(0) { -} - -void Menu::CreatePopUp() { - Destroy(); - id = new wxMenu(); -} - -void Menu::Destroy() { - if (id) - delete (wxMenu*)id; - id = 0; -} - -void Menu::Show(Point pt, Window &w) { - GETWIN(w.GetID())->PopupMenu((wxMenu*)id, pt.x - 4, pt.y); - Destroy(); -} - -//---------------------------------------------------------------------- - -DynamicLibrary *DynamicLibrary::Load(const char *WXUNUSED(modulePath)) { - wxFAIL_MSG(wxT("Dynamic lexer loading not implemented yet")); - return NULL; -} - -//---------------------------------------------------------------------- - -ColourDesired Platform::Chrome() { - wxColour c; - c = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); - return ColourDesired(c.Red(), c.Green(), c.Blue()); -} - -ColourDesired Platform::ChromeHighlight() { - wxColour c; - c = wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT); - return ColourDesired(c.Red(), c.Green(), c.Blue()); -} - -const char *Platform::DefaultFont() { - static char buf[128]; - strcpy(buf, wxNORMAL_FONT->GetFaceName().mbc_str()); - return buf; -} - -int Platform::DefaultFontSize() { - return wxNORMAL_FONT->GetPointSize(); -} - -unsigned int Platform::DoubleClickTime() { - return 500; // **** ::GetDoubleClickTime(); -} - -bool Platform::MouseButtonBounce() { - return false; -} - -bool Platform::IsKeyDown(int WXUNUSED(key)) { - return false; // I don't think we'll need this. -} - -long Platform::SendScintilla(WindowID w, - unsigned int msg, - unsigned long wParam, - long lParam) { - - wxStyledTextCtrl* stc = (wxStyledTextCtrl*)w; - return stc->SendMsg(msg, wParam, lParam); -} - -long Platform::SendScintillaPointer(WindowID w, - unsigned int msg, - unsigned long wParam, - void *lParam) { - - wxStyledTextCtrl* stc = (wxStyledTextCtrl*)w; - return stc->SendMsg(msg, wParam, (wxIntPtr)lParam); -} - - -// These are utility functions not really tied to a platform - -int Platform::Minimum(int a, int b) { - if (a < b) - return a; - else - return b; -} - -int Platform::Maximum(int a, int b) { - if (a > b) - return a; - else - return b; -} - -//#define TRACE - -void Platform::DebugDisplay(const char *s) { -#ifdef TRACE - wxLogDebug(stc2wx(s)); -#else - wxUnusedVar(s); -#endif -} - -void Platform::DebugPrintf(const char *format, ...) { -#ifdef TRACE - char buffer[2000]; - va_list pArguments; - va_start(pArguments, format); - vsprintf(buffer,format,pArguments); - va_end(pArguments); - Platform::DebugDisplay(buffer); -#endif -} - - -static bool assertionPopUps = true; - -bool Platform::ShowAssertionPopUps(bool assertionPopUps_) { - bool ret = assertionPopUps; - assertionPopUps = assertionPopUps_; - return ret; -} - -void Platform::Assert(const char *c, const char *file, int line) { -#ifdef TRACE - char buffer[2000]; - sprintf(buffer, "Assertion [%s] failed at %s %d", c, file, line); - if (assertionPopUps) { - /*int idButton = */ - wxMessageBox(stc2wx(buffer), - wxT("Assertion failure"), - wxICON_HAND | wxOK); - } else { - strcat(buffer, "\r\n"); - Platform::DebugDisplay(buffer); - abort(); - } -#else - wxUnusedVar(c); - wxUnusedVar(file); - wxUnusedVar(line); -#endif -} - - -int Platform::Clamp(int val, int minVal, int maxVal) { - if (val > maxVal) - val = maxVal; - if (val < minVal) - val = minVal; - return val; -} - - -bool Platform::IsDBCSLeadByte(int WXUNUSED(codePage), char WXUNUSED(ch)) { - return false; -} - -int Platform::DBCSCharLength(int WXUNUSED(codePage), const char *WXUNUSED(s)) { - return 1; -} - -int Platform::DBCSCharMaxLength() { - return 1; -} - - -//---------------------------------------------------------------------- - -ElapsedTime::ElapsedTime() { - wxLongLong localTime = wxGetLocalTimeMillis(); - littleBit = localTime.GetLo(); - bigBit = localTime.GetHi(); -} - -double ElapsedTime::Duration(bool reset) { - wxLongLong prevTime(bigBit, littleBit); - wxLongLong localTime = wxGetLocalTimeMillis(); - if(reset) { - littleBit = localTime.GetLo(); - bigBit = localTime.GetHi(); - } - wxLongLong duration = localTime - prevTime; - double result = duration.ToDouble(); - result /= 1000.0; - return result; -} - - -//---------------------------------------------------------------------- - -#if wxUSE_UNICODE - -#include "UniConversion.h" - -// Convert using Scintilla's functions instead of wx's, Scintilla's are more -// forgiving and won't assert... - -wxString stc2wx(const char* str, size_t len) -{ - if (!len) - return wxEmptyString; - - size_t wclen = UCS2Length(str, len); - wxWCharBuffer buffer(wclen+1); - - size_t actualLen = UCS2FromUTF8(str, len, buffer.data(), wclen+1); - return wxString(buffer.data(), actualLen); -} - - - -wxString stc2wx(const char* str) -{ - return stc2wx(str, strlen(str)); -} - - -const wxWX2MBbuf wx2stc(const wxString& str) -{ - const wchar_t* wcstr = str.c_str(); - size_t wclen = str.length(); - size_t len = UTF8Length(wcstr, wclen); - - wxCharBuffer buffer(len+1); - UTF8FromUCS2(wcstr, wclen, buffer.data(), len); - - // TODO check NULL termination!! - - return buffer; -} - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/PlatWX.h b/src/plugins/contrib/wxSmithSTC/stc/PlatWX.h deleted file mode 100644 index e658a67f65..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/PlatWX.h +++ /dev/null @@ -1,8 +0,0 @@ - - - - -wxRect wxRectFromPRectangle(PRectangle prc); -PRectangle PRectangleFromwxRect(wxRect rc); -wxColour wxColourFromCA(const ColourAllocated& ca); - diff --git a/src/plugins/contrib/wxSmithSTC/stc/README.txt b/src/plugins/contrib/wxSmithSTC/stc/README.txt deleted file mode 100644 index 4b66121e64..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/README.txt +++ /dev/null @@ -1,55 +0,0 @@ -This contrib is the wxStyledTextCtrl, which is a wrapper around the -Scintilla edit control. (See www.scintilla.org) - -There is still VERY MUCH to be done, most notable of which is a more -advanced sample that exercises more of the code. (I havn't tested -AutoComplete or CallTips, or most of the event types at all yet.) And -also documentation, adding wrappers for some new scintilla -functionality, building and testing on wxGTK, etc. Be patient, it all -will get there soon. - - - -Let me describe a bit about the architecture I am implementing... -Obviously there is the Platform layer which implements the varioius -platform classes by using wxWindows classes and filling in where -needed. Then there is a ScintillaWX class that is derived from -ScintillaBase and implements the necessary virtual methods that -Scintilla needs to fully funciton. This class however is not meant to -ever be used directly by wx programmers. I call it one end of the -bridge between the wx and Scintilla worlds. The other end of the -bridge is a class called wxStyledTextCtrl that looks, feels and acts -like other classes in wxWindows. Here is a diagram: - - - +------------------+ +-------------------+ - | wxStyledTextCtrl |--bridge--| ScintillaWX | - +------------------+ +-------------------+ - | ScintillaBase | - +-------------------+ - | Editor | - +-------------------+ - | PlatWX | - +-------------------+ - - -wxStyledTextCtrl derives from wxControl so it has a window that can be -drawn upon. When a wxStyledTextCtrl is constructed it constructs a -ScintillaWX for itself and passes itself to the scintilla object to be -set as the wMain and wDraw attributes. All method calls on the STC -are sent over the bridge in the form of calls to ScintiallWX::WndProc. -All notifications are sent back over the bridge and turned into -wxEvents. - - -Robin - -[SOLARIS NOTE - ellers@iinet.net.au - June 2002] - -On sunos5 (sparc) the stc code breaks if optimisation is turned on (the -default). If your release build breaks but the debug build is fine, -try reconfiguring with --disable-optimise and rebuilding. If you are using -wxPython you will also need to disable optimised compiling. To do this I -had to hand modify the python makefile in (prefix)/lib/python2.2/config/Makefile -to remove optimisation flags. - diff --git a/src/plugins/contrib/wxSmithSTC/stc/ScintillaWX.cpp b/src/plugins/contrib/wxSmithSTC/stc/ScintillaWX.cpp deleted file mode 100644 index 2a6f2936f8..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/ScintillaWX.cpp +++ /dev/null @@ -1,1151 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// Name: ScintillaWX.cxx -// Purpose: A wxWidgets implementation of Scintilla. A class derived -// from ScintillaBase that uses the "wx platform" defined in -// PlatformWX.cxx This class is one end of a bridge between -// the wx world and the Scintilla world. It needs a peer -// object of type wxStyledTextCtrl to function. -// -// Author: Robin Dunn -// -// Created: 13-Jan-2000 -// RCS-ID: $Id$ -// Copyright: (c) 2000 by Total Control Software -// Licence: wxWindows license -///////////////////////////////////////////////////////////////////////////// - -#include "wx/wx.h" -#include "wx/textbuf.h" -#include "wx/dataobj.h" -#include "wx/clipbrd.h" -#include "wx/dnd.h" - -#include "ScintillaWX.h" -#include "ExternalLexer.h" -#include "wx/stc/stc.h" -#include "PlatWX.h" - -#ifdef __WXMSW__ - // GetHwndOf() - #include "wx/msw/private.h" -#endif - -//---------------------------------------------------------------------- -// Helper classes - -class wxSTCTimer : public wxTimer { -public: - wxSTCTimer(ScintillaWX* swx) { - this->swx = swx; - } - - void Notify() { - swx->DoTick(); - } - -private: - ScintillaWX* swx; -}; - - -#if wxUSE_DRAG_AND_DROP -class wxStartDragTimer : public wxTimer { -public: - wxStartDragTimer(ScintillaWX* swx) { - this->swx = swx; - } - - void Notify() { - swx->DoStartDrag(); - } - -private: - ScintillaWX* swx; -}; - - -bool wxSTCDropTarget::OnDropText(wxCoord x, wxCoord y, const wxString& data) { - return swx->DoDropText(x, y, data); -} - -wxDragResult wxSTCDropTarget::OnEnter(wxCoord x, wxCoord y, wxDragResult def) { - return swx->DoDragEnter(x, y, def); -} - -wxDragResult wxSTCDropTarget::OnDragOver(wxCoord x, wxCoord y, wxDragResult def) { - return swx->DoDragOver(x, y, def); -} - -void wxSTCDropTarget::OnLeave() { - swx->DoDragLeave(); -} -#endif // wxUSE_DRAG_AND_DROP - - -#if wxUSE_POPUPWIN && wxSTC_USE_POPUP -#include -#define wxSTCCallTipBase wxPopupWindow -#define param2 wxBORDER_NONE // popup's 2nd param is flags -#else -#define wxSTCCallTipBase wxFrame -#define param2 -1 // wxWindow's 2nd param is ID -#endif - -#include "wx/dcbuffer.h" - -class wxSTCCallTip : public wxSTCCallTipBase { -public: - wxSTCCallTip(wxWindow* parent, CallTip* ct, ScintillaWX* swx) : -#if wxUSE_POPUPWIN && wxSTC_USE_POPUP - wxSTCCallTipBase(parent, wxBORDER_NONE), -#else - wxSTCCallTipBase(parent, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize, - wxFRAME_NO_TASKBAR - | wxFRAME_FLOAT_ON_PARENT - | wxBORDER_NONE -#ifdef __WXMAC__ - | wxPOPUP_WINDOW -#endif - ), -#endif - m_ct(ct), m_swx(swx), m_cx(wxDefaultCoord), m_cy(wxDefaultCoord) - { - } - - ~wxSTCCallTip() { -#if wxUSE_POPUPWIN && wxSTC_USE_POPUP && defined(__WXGTK__) - wxRect rect = GetRect(); - rect.x = m_cx; - rect.y = m_cy; - GetParent()->Refresh(false, &rect); -#endif - } - - bool AcceptsFocus() const { return false; } - - void OnPaint(wxPaintEvent& WXUNUSED(evt)) - { - wxBufferedPaintDC dc(this); - Surface* surfaceWindow = Surface::Allocate(); - surfaceWindow->Init(&dc, m_ct->wDraw.GetID()); - m_ct->PaintCT(surfaceWindow); - surfaceWindow->Release(); - delete surfaceWindow; - } - - void OnFocus(wxFocusEvent& event) - { - GetParent()->SetFocus(); - event.Skip(); - } - - void OnLeftDown(wxMouseEvent& event) - { - wxPoint pt = event.GetPosition(); - Point p(pt.x, pt.y); - m_ct->MouseClick(p); - m_swx->CallTipClick(); - } - - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO) - { - // convert coords to screen coords since we're a top-level window - if (x != wxDefaultCoord) { - m_cx = x; - GetParent()->ClientToScreen(&x, NULL); - } - if (y != wxDefaultCoord) { - m_cy = y; - GetParent()->ClientToScreen(NULL, &y); - } - wxSTCCallTipBase::DoSetSize(x, y, width, height, sizeFlags); - } - -#if wxUSE_POPUPWIN && wxSTC_USE_POPUP -#else - virtual bool Show( bool show = true ) - { - // Although we're a frame, we always want the parent to be active, so - // raise it whenever we get shown. - bool rv = wxSTCCallTipBase::Show(show); - if (rv && show) - { - wxTopLevelWindow *frame = wxDynamicCast( - wxGetTopLevelParent(GetParent()), wxTopLevelWindow); - if (frame) - frame->Raise(); - } - return rv; - } -#endif - - wxPoint GetMyPosition() - { - return wxPoint(m_cx, m_cy); - } - -private: - CallTip* m_ct; - ScintillaWX* m_swx; - int m_cx, m_cy; - DECLARE_EVENT_TABLE() -}; - -BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase) - EVT_PAINT(wxSTCCallTip::OnPaint) - EVT_SET_FOCUS(wxSTCCallTip::OnFocus) - EVT_LEFT_DOWN(wxSTCCallTip::OnLeftDown) -END_EVENT_TABLE() - - -//---------------------------------------------------------------------- - -#if wxUSE_DATAOBJ -static wxTextFileType wxConvertEOLMode(int scintillaMode) -{ - wxTextFileType type; - - switch (scintillaMode) { - case wxSTC_EOL_CRLF: - type = wxTextFileType_Dos; - break; - - case wxSTC_EOL_CR: - type = wxTextFileType_Mac; - break; - - case wxSTC_EOL_LF: - type = wxTextFileType_Unix; - break; - - default: - type = wxTextBuffer::typeDefault; - break; - } - return type; -} -#endif // wxUSE_DATAOBJ - - -//---------------------------------------------------------------------- -// Constructor/Destructor - - -ScintillaWX::ScintillaWX(wxStyledTextCtrl* win) { - capturedMouse = false; - focusEvent = false; - wMain = win; - stc = win; - wheelRotation = 0; - Initialise(); -#ifdef __WXMSW__ - sysCaretBitmap = 0; - sysCaretWidth = 0; - sysCaretHeight = 0; -#endif -#if wxUSE_DRAG_AND_DROP - startDragTimer = new wxStartDragTimer(this); -#endif // wxUSE_DRAG_AND_DROP -} - - -ScintillaWX::~ScintillaWX() { -#if wxUSE_DRAG_AND_DROP - delete startDragTimer; -#endif // wxUSE_DRAG_AND_DROP - Finalise(); -} - -//---------------------------------------------------------------------- -// base class virtuals - - -void ScintillaWX::Initialise() { - //ScintillaBase::Initialise(); -#if wxUSE_DRAG_AND_DROP - dropTarget = new wxSTCDropTarget; - dropTarget->SetScintilla(this); - stc->SetDropTarget(dropTarget); -#endif // wxUSE_DRAG_AND_DROP -#ifdef __WXMAC__ - vs.extraFontFlag = false; // UseAntiAliasing -#else - vs.extraFontFlag = true; // UseAntiAliasing -#endif -} - - -void ScintillaWX::Finalise() { - ScintillaBase::Finalise(); - SetTicking(false); - SetIdle(false); - DestroySystemCaret(); -} - - -void ScintillaWX::StartDrag() { -#if wxUSE_DRAG_AND_DROP - // We defer the starting of the DnD, otherwise the LeftUp of a normal - // click could be lost and the STC will think it is doing a DnD when the - // user just wanted a normal click. - startDragTimer->Start(200, true); -#endif // wxUSE_DRAG_AND_DROP -} - -void ScintillaWX::DoStartDrag() { -#if wxUSE_DRAG_AND_DROP - wxString dragText = stc2wx(drag.s, drag.len); - - // Send an event to allow the drag text to be changed - wxStyledTextEvent evt(wxEVT_STC_START_DRAG, stc->GetId()); - evt.SetEventObject(stc); - evt.SetDragText(dragText); - evt.SetDragAllowMove(true); - evt.SetPosition(wxMin(stc->GetSelectionStart(), - stc->GetSelectionEnd())); - stc->GetEventHandler()->ProcessEvent(evt); - dragText = evt.GetDragText(); - - if (dragText.length()) { - wxDropSource source(stc); - wxTextDataObject data(dragText); - wxDragResult result; - - source.SetData(data); - dropWentOutside = true; - result = source.DoDragDrop(evt.GetDragAllowMove()); - if (result == wxDragMove && dropWentOutside) - ClearSelection(); - inDragDrop = false; - SetDragPosition(invalidPosition); - } -#endif // wxUSE_DRAG_AND_DROP -} - - -bool ScintillaWX::SetIdle(bool on) { - if (idler.state != on) { - // connect or disconnect the EVT_IDLE handler - if (on) - stc->Connect(wxID_ANY, wxEVT_IDLE, - (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle); - else - stc->Disconnect(wxID_ANY, wxEVT_IDLE, - (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle); - idler.state = on; - } - return idler.state; -} - - -void ScintillaWX::SetTicking(bool on) { - wxSTCTimer* steTimer; - if (timer.ticking != on) { - timer.ticking = on; - if (timer.ticking) { - steTimer = new wxSTCTimer(this); - steTimer->Start(timer.tickSize); - timer.tickerID = steTimer; - } else { - steTimer = (wxSTCTimer*)timer.tickerID; - steTimer->Stop(); - delete steTimer; - timer.tickerID = 0; - } - } - timer.ticksToWait = caret.period; -} - - -void ScintillaWX::SetMouseCapture(bool on) { - if (mouseDownCaptures) { - if (on && !capturedMouse) - stc->CaptureMouse(); - else if (!on && capturedMouse && stc->HasCapture()) - stc->ReleaseMouse(); - capturedMouse = on; - } -} - - -bool ScintillaWX::HaveMouseCapture() { - return capturedMouse; -} - - -void ScintillaWX::ScrollText(int linesToMove) { - int dy = vs.lineHeight * (linesToMove); - stc->ScrollWindow(0, dy); - stc->Update(); -} - -void ScintillaWX::SetVerticalScrollPos() { - if (stc->m_vScrollBar == NULL) { // Use built-in scrollbar - stc->SetScrollPos(wxVERTICAL, topLine); - } - else { // otherwise use the one that's been given to us - stc->m_vScrollBar->SetThumbPosition(topLine); - } -} - -void ScintillaWX::SetHorizontalScrollPos() { - if (stc->m_hScrollBar == NULL) { // Use built-in scrollbar - stc->SetScrollPos(wxHORIZONTAL, xOffset); - } - else { // otherwise use the one that's been given to us - stc->m_hScrollBar->SetThumbPosition(xOffset); - } -} - - -const int H_SCROLL_STEP = 20; - -bool ScintillaWX::ModifyScrollBars(int nMax, int nPage) { - bool modified = false; - - int vertEnd = nMax; - if (!verticalScrollBarVisible) - vertEnd = 0; - - // Check the vertical scrollbar - if (stc->m_vScrollBar == NULL) { // Use built-in scrollbar - int sbMax = stc->GetScrollRange(wxVERTICAL); - int sbThumb = stc->GetScrollThumb(wxVERTICAL); - int sbPos = stc->GetScrollPos(wxVERTICAL); - if (sbMax != vertEnd || sbThumb != nPage) { - stc->SetScrollbar(wxVERTICAL, sbPos, nPage, vertEnd+1); - modified = true; - } - } - else { // otherwise use the one that's been given to us - int sbMax = stc->m_vScrollBar->GetRange(); - int sbPage = stc->m_vScrollBar->GetPageSize(); - int sbPos = stc->m_vScrollBar->GetThumbPosition(); - if (sbMax != vertEnd || sbPage != nPage) { - stc->m_vScrollBar->SetScrollbar(sbPos, nPage, vertEnd+1, nPage); - modified = true; - } - } - - - // Check the horizontal scrollbar - PRectangle rcText = GetTextRectangle(); - int horizEnd = scrollWidth; - if (horizEnd < 0) - horizEnd = 0; - if (!horizontalScrollBarVisible || (wrapState != eWrapNone)) - horizEnd = 0; - int pageWidth = rcText.Width(); - - if (stc->m_hScrollBar == NULL) { // Use built-in scrollbar - int sbMax = stc->GetScrollRange(wxHORIZONTAL); - int sbThumb = stc->GetScrollThumb(wxHORIZONTAL); - int sbPos = stc->GetScrollPos(wxHORIZONTAL); - if ((sbMax != horizEnd) || (sbThumb != pageWidth) || (sbPos != 0)) { - stc->SetScrollbar(wxHORIZONTAL, sbPos, pageWidth, horizEnd); - modified = true; - if (scrollWidth < pageWidth) { - HorizontalScrollTo(0); - } - } - } - else { // otherwise use the one that's been given to us - int sbMax = stc->m_hScrollBar->GetRange(); - int sbThumb = stc->m_hScrollBar->GetPageSize(); - int sbPos = stc->m_hScrollBar->GetThumbPosition(); - if ((sbMax != horizEnd) || (sbThumb != pageWidth) || (sbPos != 0)) { - stc->m_hScrollBar->SetScrollbar(sbPos, pageWidth, horizEnd, pageWidth); - modified = true; - if (scrollWidth < pageWidth) { - HorizontalScrollTo(0); - } - } - } - - return modified; -} - - -void ScintillaWX::NotifyChange() { - stc->NotifyChange(); -} - - -void ScintillaWX::NotifyParent(SCNotification scn) { - stc->NotifyParent(&scn); -} - - -// This method is overloaded from ScintillaBase in order to prevent the -// AutoComplete window from being destroyed when it gets the focus. There is -// a side effect that the AutoComp will also not be destroyed when switching -// to another window, but I think that is okay. -void ScintillaWX::CancelModes() { - if (! focusEvent) - AutoCompleteCancel(); - ct.CallTipCancel(); - Editor::CancelModes(); -} - - - -void ScintillaWX::Copy() { - if (currentPos != anchor) { - SelectionText st; - CopySelectionRange(&st); - CopyToClipboard(st); - } -} - - -void ScintillaWX::Paste() { - pdoc->BeginUndoAction(); - ClearSelection(); - -#if wxUSE_DATAOBJ - wxTextDataObject data; - bool gotData = false; - - if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(false); - gotData = wxTheClipboard->GetData(data); - wxTheClipboard->Close(); - } - if (gotData) { - wxString text = wxTextBuffer::Translate(data.GetText(), - wxConvertEOLMode(pdoc->eolMode)); - wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); - -#if wxUSE_UNICODE - // free up the old character buffer in case the text is real big - data.SetText(wxEmptyString); - text = wxEmptyString; -#endif - int len = strlen(buf); - pdoc->InsertString(currentPos, buf, len); - SetEmptySelection(currentPos + len); - } -#endif // wxUSE_DATAOBJ - - pdoc->EndUndoAction(); - NotifyChange(); - Redraw(); -} - - -void ScintillaWX::CopyToClipboard(const SelectionText& st) { -#if wxUSE_CLIPBOARD - if ( !st.len ) - return; - if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(false); - wxString text = wxTextBuffer::Translate(stc2wx(st.s, st.len-1)); - wxTheClipboard->SetData(new wxTextDataObject(text)); - wxTheClipboard->Close(); - } -#else - wxUnusedVar(st); -#endif // wxUSE_CLIPBOARD -} - - -bool ScintillaWX::CanPaste() { -#if wxUSE_CLIPBOARD - bool canPaste = false; - bool didOpen; - - if (Editor::CanPaste()) { - didOpen = !wxTheClipboard->IsOpened(); - if ( didOpen ) - wxTheClipboard->Open(); - - if (wxTheClipboard->IsOpened()) { - wxTheClipboard->UsePrimarySelection(false); - canPaste = wxTheClipboard->IsSupported(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT); - if (didOpen) - wxTheClipboard->Close(); - } - } - return canPaste; -#else - return false; -#endif // wxUSE_CLIPBOARD -} - -void ScintillaWX::CreateCallTipWindow(PRectangle) { - if (! ct.wCallTip.Created() ) { - ct.wCallTip = new wxSTCCallTip(stc, &ct, this); - ct.wDraw = ct.wCallTip; - } -} - - -void ScintillaWX::AddToPopUp(const char *label, int cmd, bool enabled) { - if (!label[0]) - ((wxMenu*)popup.GetID())->AppendSeparator(); - else - ((wxMenu*)popup.GetID())->Append(cmd, wxGetTranslation(stc2wx(label))); - - if (!enabled) - ((wxMenu*)popup.GetID())->Enable(cmd, enabled); -} - - -// This is called by the Editor base class whenever something is selected -void ScintillaWX::ClaimSelection() { -#if 0 - // Until wxGTK is able to support using both the primary selection and the - // clipboard at the same time I think it causes more problems than it is - // worth to implement this method. Selecting text should not clear the - // clipboard. --Robin -#ifdef __WXGTK__ - // Put the selected text in the PRIMARY selection - if (currentPos != anchor) { - SelectionText st; - CopySelectionRange(&st); - if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(true); - wxString text = stc2wx(st.s, st.len); - wxTheClipboard->SetData(new wxTextDataObject(text)); - wxTheClipboard->UsePrimarySelection(false); - wxTheClipboard->Close(); - } - } -#endif -#endif -} - - -void ScintillaWX::UpdateSystemCaret() { -#ifdef __WXMSW__ - if (hasFocus) { - if (HasCaretSizeChanged()) { - DestroySystemCaret(); - CreateSystemCaret(); - } - Point pos = LocationFromPosition(currentPos); - ::SetCaretPos(pos.x, pos.y); - } -#endif -} - - -bool ScintillaWX::HasCaretSizeChanged() { -#ifdef __WXMSW__ - if (( (0 != vs.caretWidth) && (sysCaretWidth != vs.caretWidth) ) - || (0 != vs.lineHeight) && (sysCaretHeight != vs.lineHeight)) { - return true; - } -#endif - return false; -} - -bool ScintillaWX::CreateSystemCaret() { -#ifdef __WXMSW__ - sysCaretWidth = vs.caretWidth; - if (0 == sysCaretWidth) { - sysCaretWidth = 1; - } - sysCaretHeight = vs.lineHeight; - int bitmapSize = (((sysCaretWidth + 15) & ~15) >> 3) * sysCaretHeight; - char *bits = new char[bitmapSize]; - memset(bits, 0, bitmapSize); - sysCaretBitmap = ::CreateBitmap(sysCaretWidth, sysCaretHeight, 1, - 1, reinterpret_cast(bits)); - delete [] bits; - BOOL retval = ::CreateCaret(GetHwndOf(stc), sysCaretBitmap, - sysCaretWidth, sysCaretHeight); - ::ShowCaret(GetHwndOf(stc)); - return retval != 0; -#else - return false; -#endif -} - -bool ScintillaWX::DestroySystemCaret() { -#ifdef __WXMSW__ - ::HideCaret(GetHwndOf(stc)); - BOOL retval = ::DestroyCaret(); - if (sysCaretBitmap) { - ::DeleteObject(sysCaretBitmap); - sysCaretBitmap = 0; - } - return retval != 0; -#else - return false; -#endif -} - - -//---------------------------------------------------------------------- - - -sptr_t ScintillaWX::DefWndProc(unsigned int /*iMessage*/, - uptr_t /*wParam*/, - sptr_t /*lParam*/) { - return 0; -} - -sptr_t ScintillaWX::WndProc(unsigned int iMessage, - uptr_t wParam, - sptr_t lParam) { - switch (iMessage) { - case SCI_CALLTIPSHOW: { - // NOTE: This is copied here from scintilla/src/ScintillaBase.cxx - // because of the little tweak that needs done below for wxGTK. - // When updating new versions double check that this is still - // needed, and that any new code there is copied here too. - Point pt = LocationFromPosition(wParam); - char* defn = reinterpret_cast(lParam); - AutoCompleteCancel(); - pt.y += vs.lineHeight; - int ctStyle = ct.UseStyleCallTip() ? STYLE_CALLTIP : STYLE_DEFAULT; - if (ct.UseStyleCallTip()) - { - ct.SetForeBack(vs.styles[STYLE_CALLTIP].fore, vs.styles[STYLE_CALLTIP].back); - - } - PRectangle rc = ct.CallTipStart(currentPos, pt, - defn, - vs.styles[ctStyle].fontName, - vs.styles[ctStyle].sizeZoomed, - CodePage(), - vs.styles[ctStyle].characterSet, - wMain); - // If the call-tip window would be out of the client - // space, adjust so it displays above the text. - PRectangle rcClient = GetClientRectangle(); - if (rc.bottom > rcClient.bottom) { -#ifdef __WXGTK__ - int offset = int(vs.lineHeight * 1.25) + rc.Height(); -#else - int offset = vs.lineHeight + rc.Height(); -#endif - rc.top -= offset; - rc.bottom -= offset; - } - // Now display the window. - CreateCallTipWindow(rc); - ct.wCallTip.SetPositionRelative(rc, wMain); - ct.wCallTip.Show(); - break; - } - -#ifdef SCI_LEXER - case SCI_LOADLEXERLIBRARY: - LexerManager::GetInstance()->Load((const char*)lParam); - break; -#endif - - default: - return ScintillaBase::WndProc(iMessage, wParam, lParam); - } - return 0; -} - - - -//---------------------------------------------------------------------- -// Event delegates - -void ScintillaWX::DoPaint(wxDC* dc, wxRect rect) { - - paintState = painting; - Surface* surfaceWindow = Surface::Allocate(); - surfaceWindow->Init(dc, wMain.GetID()); - rcPaint = PRectangleFromwxRect(rect); - PRectangle rcClient = GetClientRectangle(); - paintingAllText = rcPaint.Contains(rcClient); - - ClipChildren(*dc, rcPaint); - Paint(surfaceWindow, rcPaint); - - delete surfaceWindow; - if (paintState == paintAbandoned) { - // Painting area was insufficient to cover new styling or brace - // highlight positions - FullPaint(); - } - paintState = notPainting; -} - - -void ScintillaWX::DoHScroll(int type, int pos) { - int xPos = xOffset; - PRectangle rcText = GetTextRectangle(); - int pageWidth = rcText.Width() * 2 / 3; - if (type == wxEVT_SCROLLWIN_LINEUP || type == wxEVT_SCROLL_LINEUP) - xPos -= H_SCROLL_STEP; - else if (type == wxEVT_SCROLLWIN_LINEDOWN || type == wxEVT_SCROLL_LINEDOWN) - xPos += H_SCROLL_STEP; - else if (type == wxEVT_SCROLLWIN_PAGEUP || type == wxEVT_SCROLL_PAGEUP) - xPos -= pageWidth; - else if (type == wxEVT_SCROLLWIN_PAGEDOWN || type == wxEVT_SCROLL_PAGEDOWN) { - xPos += pageWidth; - if (xPos > scrollWidth - rcText.Width()) { - xPos = scrollWidth - rcText.Width(); - } - } - else if (type == wxEVT_SCROLLWIN_TOP || type == wxEVT_SCROLL_TOP) - xPos = 0; - else if (type == wxEVT_SCROLLWIN_BOTTOM || type == wxEVT_SCROLL_BOTTOM) - xPos = scrollWidth; - else if (type == wxEVT_SCROLLWIN_THUMBTRACK || type == wxEVT_SCROLL_THUMBTRACK) - xPos = pos; - - HorizontalScrollTo(xPos); -} - -void ScintillaWX::DoVScroll(int type, int pos) { - int topLineNew = topLine; - if (type == wxEVT_SCROLLWIN_LINEUP || type == wxEVT_SCROLL_LINEUP) - topLineNew -= 1; - else if (type == wxEVT_SCROLLWIN_LINEDOWN || type == wxEVT_SCROLL_LINEDOWN) - topLineNew += 1; - else if (type == wxEVT_SCROLLWIN_PAGEUP || type == wxEVT_SCROLL_PAGEUP) - topLineNew -= LinesToScroll(); - else if (type == wxEVT_SCROLLWIN_PAGEDOWN || type == wxEVT_SCROLL_PAGEDOWN) - topLineNew += LinesToScroll(); - else if (type == wxEVT_SCROLLWIN_TOP || type == wxEVT_SCROLL_TOP) - topLineNew = 0; - else if (type == wxEVT_SCROLLWIN_BOTTOM || type == wxEVT_SCROLL_BOTTOM) - topLineNew = MaxScrollPos(); - else if (type == wxEVT_SCROLLWIN_THUMBTRACK || type == wxEVT_SCROLL_THUMBTRACK) - topLineNew = pos; - - ScrollTo(topLineNew); -} - -void ScintillaWX::DoMouseWheel(int rotation, int delta, - int linesPerAction, int ctrlDown, - bool isPageScroll ) { - int topLineNew = topLine; - int lines; - - if (ctrlDown) { // Zoom the fonts if Ctrl key down - if (rotation < 0) { - KeyCommand(SCI_ZOOMIN); - } - else { - KeyCommand(SCI_ZOOMOUT); - } - } - else { // otherwise just scroll the window - if ( !delta ) - delta = 120; - wheelRotation += rotation; - lines = wheelRotation / delta; - wheelRotation -= lines * delta; - if (lines != 0) { - if (isPageScroll) - lines = lines * LinesOnScreen(); // lines is either +1 or -1 - else - lines *= linesPerAction; - topLineNew -= lines; - ScrollTo(topLineNew); - } - } -} - - -void ScintillaWX::DoSize(int WXUNUSED(width), int WXUNUSED(height)) { - ChangeSize(); -} - -void ScintillaWX::DoLoseFocus(){ - focusEvent = true; - SetFocusState(false); - focusEvent = false; - DestroySystemCaret(); -} - -void ScintillaWX::DoGainFocus(){ - focusEvent = true; - SetFocusState(true); - focusEvent = false; - DestroySystemCaret(); - CreateSystemCaret(); -} - -void ScintillaWX::DoSysColourChange() { - InvalidateStyleData(); -} - -void ScintillaWX::DoLeftButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) { - ButtonDown(pt, curTime, shift, ctrl, alt); -} - -void ScintillaWX::DoLeftButtonUp(Point pt, unsigned int curTime, bool ctrl) { - ButtonUp(pt, curTime, ctrl); -#if wxUSE_DRAG_AND_DROP - if (startDragTimer->IsRunning()) { - startDragTimer->Stop(); - SetDragPosition(invalidPosition); - SetEmptySelection(PositionFromLocation(pt)); - ShowCaretAtCurrentPosition(); - } -#endif // wxUSE_DRAG_AND_DROP -} - -void ScintillaWX::DoLeftButtonMove(Point pt) { - ButtonMove(pt); -} - -#ifdef __WXGTK__ -void ScintillaWX::DoMiddleButtonUp(Point pt) { - // Set the current position to the mouse click point and - // then paste in the PRIMARY selection, if any. wxGTK only. - int newPos = PositionFromLocation(pt); - MovePositionTo(newPos, noSel, true); - - pdoc->BeginUndoAction(); - wxTextDataObject data; - bool gotData = false; - if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(true); - gotData = wxTheClipboard->GetData(data); - wxTheClipboard->UsePrimarySelection(false); - wxTheClipboard->Close(); - } - if (gotData) { - wxString text = wxTextBuffer::Translate(data.GetText(), - wxConvertEOLMode(pdoc->eolMode)); - wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); - int len = strlen(buf); - pdoc->InsertString(currentPos, buf, len); - SetEmptySelection(currentPos + len); - } - pdoc->EndUndoAction(); - NotifyChange(); - Redraw(); - - ShowCaretAtCurrentPosition(); - EnsureCaretVisible(); -} -#else -void ScintillaWX::DoMiddleButtonUp(Point WXUNUSED(pt)) { -} -#endif - - -void ScintillaWX::DoAddChar(int key) { -#if wxUSE_UNICODE - wxChar wszChars[2]; - wszChars[0] = (wxChar)key; - wszChars[1] = 0; - wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(wszChars); - AddCharUTF((char*)buf.data(), strlen(buf)); -#else - AddChar((char)key); -#endif -} - - -int ScintillaWX::DoKeyDown(const wxKeyEvent& evt, bool* consumed) -{ - int key = evt.GetKeyCode(); - bool shift = evt.ShiftDown(), - ctrl = evt.ControlDown(), - alt = evt.AltDown(); - - if (ctrl && key >= 1 && key <= 26 && key != WXK_BACK) - key += 'A' - 1; - - switch (key) { - case WXK_DOWN: key = SCK_DOWN; break; - case WXK_UP: key = SCK_UP; break; - case WXK_LEFT: key = SCK_LEFT; break; - case WXK_RIGHT: key = SCK_RIGHT; break; - case WXK_HOME: key = SCK_HOME; break; - case WXK_END: key = SCK_END; break; - case WXK_PAGEUP: key = SCK_PRIOR; break; - case WXK_PAGEDOWN: key = SCK_NEXT; break; - case WXK_NUMPAD_DOWN: key = SCK_DOWN; break; - case WXK_NUMPAD_UP: key = SCK_UP; break; - case WXK_NUMPAD_LEFT: key = SCK_LEFT; break; - case WXK_NUMPAD_RIGHT: key = SCK_RIGHT; break; - case WXK_NUMPAD_HOME: key = SCK_HOME; break; - case WXK_NUMPAD_END: key = SCK_END; break; - case WXK_NUMPAD_PAGEUP: key = SCK_PRIOR; break; - case WXK_NUMPAD_PAGEDOWN: key = SCK_NEXT; break; - case WXK_NUMPAD_DELETE: key = SCK_DELETE; break; - case WXK_NUMPAD_INSERT: key = SCK_INSERT; break; - case WXK_DELETE: key = SCK_DELETE; break; - case WXK_INSERT: key = SCK_INSERT; break; - case WXK_ESCAPE: key = SCK_ESCAPE; break; - case WXK_BACK: key = SCK_BACK; break; - case WXK_TAB: key = SCK_TAB; break; - case WXK_NUMPAD_ENTER: // fall through - case WXK_RETURN: key = SCK_RETURN; break; - case WXK_ADD: // fall through - case WXK_NUMPAD_ADD: key = SCK_ADD; break; - case WXK_SUBTRACT: // fall through - case WXK_NUMPAD_SUBTRACT: key = SCK_SUBTRACT; break; - case WXK_DIVIDE: // fall through - case WXK_NUMPAD_DIVIDE: key = SCK_DIVIDE; break; - case WXK_CONTROL: key = 0; break; - case WXK_ALT: key = 0; break; - case WXK_SHIFT: key = 0; break; - case WXK_MENU: key = 0; break; - } - -#ifdef __WXMAC__ - if ( evt.MetaDown() ) { - // check for a few common Mac Meta-key combos and remap them to Ctrl - // for Scintilla - switch ( key ) { - case 'Z': // Undo - case 'X': // Cut - case 'C': // Copy - case 'V': // Paste - case 'A': // Select All - ctrl = true; - break; - } - } -#endif - - int rv = KeyDown(key, shift, ctrl, alt, consumed); - - if (key) - return rv; - else - return 1; -} - - -void ScintillaWX::DoCommand(int ID) { - Command(ID); -} - - -void ScintillaWX::DoContextMenu(Point pt) { - if (displayPopupMenu) - ContextMenu(pt); -} - -void ScintillaWX::DoOnListBox() { - AutoCompleteCompleted(); -} - - -void ScintillaWX::DoOnIdle(wxIdleEvent& evt) { - - if ( Idle() ) - evt.RequestMore(); - else - SetIdle(false); -} - -//---------------------------------------------------------------------- - -#if wxUSE_DRAG_AND_DROP -bool ScintillaWX::DoDropText(long x, long y, const wxString& data) { - SetDragPosition(invalidPosition); - - wxString text = wxTextBuffer::Translate(data, - wxConvertEOLMode(pdoc->eolMode)); - - // Send an event to allow the drag details to be changed - wxStyledTextEvent evt(wxEVT_STC_DO_DROP, stc->GetId()); - evt.SetEventObject(stc); - evt.SetDragResult(dragResult); - evt.SetX(x); - evt.SetY(y); - evt.SetPosition(PositionFromLocation(Point(x,y))); - evt.SetDragText(text); - stc->GetEventHandler()->ProcessEvent(evt); - - dragResult = evt.GetDragResult(); - if (dragResult == wxDragMove || dragResult == wxDragCopy) { - DropAt(evt.GetPosition(), - wx2stc(evt.GetDragText()), - dragResult == wxDragMove, - false); // TODO: rectangular? - return true; - } - return false; -} - - -wxDragResult ScintillaWX::DoDragEnter(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), wxDragResult def) { - dragResult = def; - return dragResult; -} - - -wxDragResult ScintillaWX::DoDragOver(wxCoord x, wxCoord y, wxDragResult def) { - SetDragPosition(PositionFromLocation(Point(x, y))); - - // Send an event to allow the drag result to be changed - wxStyledTextEvent evt(wxEVT_STC_DRAG_OVER, stc->GetId()); - evt.SetEventObject(stc); - evt.SetDragResult(def); - evt.SetX(x); - evt.SetY(y); - evt.SetPosition(PositionFromLocation(Point(x,y))); - stc->GetEventHandler()->ProcessEvent(evt); - - dragResult = evt.GetDragResult(); - return dragResult; -} - - -void ScintillaWX::DoDragLeave() { - SetDragPosition(invalidPosition); -} -#endif // wxUSE_DRAG_AND_DROP -//---------------------------------------------------------------------- - -// Force the whole window to be repainted -void ScintillaWX::FullPaint() { -#ifndef __WXMAC__ - stc->Refresh(false); -#endif - stc->Update(); -} - - -void ScintillaWX::DoScrollToLine(int line) { - ScrollTo(line); -} - - -void ScintillaWX::DoScrollToColumn(int column) { - HorizontalScrollTo(column * vs.spaceWidth); -} - -// wxGTK doesn't appear to need this explicit clipping code any longer, but I -// will leave it here commented out for a while just in case... -void ScintillaWX::ClipChildren(wxDC& WXUNUSED(dc), PRectangle WXUNUSED(rect)) -{ -// wxRegion rgn(wxRectFromPRectangle(rect)); -// if (ac.Active()) { -// wxRect childRect = ((wxWindow*)ac.lb->GetID())->GetRect(); -// rgn.Subtract(childRect); -// } -// if (ct.inCallTipMode) { -// wxSTCCallTip* tip = (wxSTCCallTip*)ct.wCallTip.GetID(); -// wxRect childRect = tip->GetRect(); -// #if wxUSE_POPUPWIN && wxSTC_USE_POPUP -// childRect.SetPosition(tip->GetMyPosition()); -// #endif -// rgn.Subtract(childRect); -// } -// dc.SetClippingRegion(rgn); -} - - -void ScintillaWX::SetUseAntiAliasing(bool useAA) { - vs.extraFontFlag = useAA; - InvalidateStyleRedraw(); -} - -bool ScintillaWX::GetUseAntiAliasing() { - return vs.extraFontFlag; -} - -//---------------------------------------------------------------------- -//---------------------------------------------------------------------- diff --git a/src/plugins/contrib/wxSmithSTC/stc/ScintillaWX.h b/src/plugins/contrib/wxSmithSTC/stc/ScintillaWX.h deleted file mode 100644 index 8b1e1f82e7..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/ScintillaWX.h +++ /dev/null @@ -1,196 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// Name: ScintillaWX.h -// Purpose: A wxWidgets implementation of Scintilla. A class derived -// from ScintillaBase that uses the "wx platform" defined in -// PlatWX.cpp. This class is one end of a bridge between -// the wx world and the Scintilla world. It needs a peer -// object of type wxStyledTextCtrl to function. -// -// Author: Robin Dunn -// -// Created: 13-Jan-2000 -// RCS-ID: $Id$ -// Copyright: (c) 2000 by Total Control Software -// Licence: wxWindows license -///////////////////////////////////////////////////////////////////////////// - -#ifndef __ScintillaWX_h__ -#define __ScintillaWX_h__ - -//---------------------------------------------------------------------- - -#include -#include -#include -#include - -#include "Platform.h" - -#include "Scintilla.h" -#include "CharClassify.h" -#include "XPM.h" -#ifdef SCI_LEXER -#include "SciLexer.h" -#include "PropSet.h" -#include "Accessor.h" -#include "KeyWords.h" -#endif -#include "ContractionState.h" -#include "SVector.h" -#include "CellBuffer.h" -#include "CallTip.h" -#include "KeyMap.h" -#include "Indicator.h" -#include "LineMarker.h" -#include "Style.h" -#include "ViewStyle.h" -#include "AutoComplete.h" -#include "Document.h" -#include "Editor.h" -#include "ScintillaBase.h" - -//---------------------------------------------------------------------- - -#ifdef WXMAKINGDLL_STC - #define WXDLLIMPEXP_STC WXEXPORT -#elif defined(WXUSINGDLL) - #define WXDLLIMPEXP_STC WXIMPORT -#else // not making nor using DLL - #define WXDLLIMPEXP_STC -#endif - -class WXDLLIMPEXP_STC wxStyledTextCtrl; // forward -class ScintillaWX; - - -//---------------------------------------------------------------------- -// Helper classes - -#if wxUSE_DRAG_AND_DROP -class wxSTCDropTarget : public wxTextDropTarget { -public: - void SetScintilla(ScintillaWX* swx) { - this->swx = swx; - } - - bool OnDropText(wxCoord x, wxCoord y, const wxString& data); - wxDragResult OnEnter(wxCoord x, wxCoord y, wxDragResult def); - wxDragResult OnDragOver(wxCoord x, wxCoord y, wxDragResult def); - void OnLeave(); - -private: - ScintillaWX* swx; -}; -#endif - -//---------------------------------------------------------------------- - -class ScintillaWX : public ScintillaBase { -public: - - ScintillaWX(wxStyledTextCtrl* win); - ~ScintillaWX(); - - // base class virtuals - virtual void Initialise(); - virtual void Finalise(); - virtual void StartDrag(); - virtual bool SetIdle(bool on); - virtual void SetTicking(bool on); - virtual void SetMouseCapture(bool on); - virtual bool HaveMouseCapture(); - virtual void ScrollText(int linesToMove); - virtual void SetVerticalScrollPos(); - virtual void SetHorizontalScrollPos(); - virtual bool ModifyScrollBars(int nMax, int nPage); - virtual void Copy(); - virtual void Paste(); - virtual void CopyToClipboard(const SelectionText &selectedText); - - virtual void CreateCallTipWindow(PRectangle rc); - virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true); - virtual void ClaimSelection(); - - virtual sptr_t DefWndProc(unsigned int iMessage, - uptr_t wParam, - sptr_t lParam); - virtual sptr_t WndProc(unsigned int iMessage, - uptr_t wParam, - sptr_t lParam); - - virtual void NotifyChange(); - virtual void NotifyParent(SCNotification scn); - - virtual void CancelModes(); - - virtual void UpdateSystemCaret(); - - // Event delegates - void DoPaint(wxDC* dc, wxRect rect); - void DoHScroll(int type, int pos); - void DoVScroll(int type, int pos); - void DoSize(int width, int height); - void DoLoseFocus(); - void DoGainFocus(); - void DoSysColourChange(); - void DoLeftButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt); - void DoLeftButtonUp(Point pt, unsigned int curTime, bool ctrl); - void DoLeftButtonMove(Point pt); - void DoMiddleButtonUp(Point pt); - void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll); - void DoAddChar(int key); - int DoKeyDown(const wxKeyEvent& event, bool* consumed); - void DoTick() { Tick(); } - void DoOnIdle(wxIdleEvent& evt); - void DoStartDrag(); - -#if wxUSE_DRAG_AND_DROP - bool DoDropText(long x, long y, const wxString& data); - wxDragResult DoDragEnter(wxCoord x, wxCoord y, wxDragResult def); - wxDragResult DoDragOver(wxCoord x, wxCoord y, wxDragResult def); - void DoDragLeave(); -#endif - - void DoCommand(int ID); - void DoContextMenu(Point pt); - void DoOnListBox(); - - - // helpers - void FullPaint(); - bool CanPaste(); - bool GetHideSelection() { return hideSelection; } - void DoScrollToLine(int line); - void DoScrollToColumn(int column); - void ClipChildren(wxDC& dc, PRectangle rect); - void SetUseAntiAliasing(bool useAA); - bool GetUseAntiAliasing(); - -private: - bool capturedMouse; - bool focusEvent; - wxStyledTextCtrl* stc; - -#if wxUSE_DRAG_AND_DROP - wxSTCDropTarget* dropTarget; - wxDragResult dragResult; - wxTimer* startDragTimer; -#endif - - int wheelRotation; - - // For use in creating a system caret - bool HasCaretSizeChanged(); - bool CreateSystemCaret(); - bool DestroySystemCaret(); -#ifdef __WXMSW__ - HBITMAP sysCaretBitmap; - int sysCaretWidth; - int sysCaretHeight; -#endif - - friend class wxSTCCallTip; -}; - -//---------------------------------------------------------------------- -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/include/wx/stc/stc.h b/src/plugins/contrib/wxSmithSTC/stc/include/wx/stc/stc.h deleted file mode 100644 index 5b5d509cca..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/include/wx/stc/stc.h +++ /dev/null @@ -1,3621 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// Name: stc.h -// Purpose: A wxWidgets implementation of Scintilla. This class is the -// one meant to be used directly by wx applications. It does not -// derive directly from the Scintilla classes, and in fact there -// is no mention of Scintilla classes at all in this header. -// This class delegates all method calls and events to the -// Scintilla objects and so forth. This allows the use of -// Scintilla without polluting the namespace with all the -// classes and itentifiers from Scintilla. -// -// Author: Robin Dunn -// -// Created: 13-Jan-2000 -// RCS-ID: $Id$ -// Copyright: (c) 2000 by Total Control Software -// Licence: wxWindows license -///////////////////////////////////////////////////////////////////////////// - -#ifndef __stc_h__ -#define __stc_h__ - - -#include "wx/wx.h" -#include "wx/dnd.h" - - -#ifdef WXMAKINGDLL_STC - #define WXDLLIMPEXP_STC WXEXPORT -#elif defined(WXUSINGDLL) - #define WXDLLIMPEXP_STC WXIMPORT -#else // not making nor using DLL - #define WXDLLIMPEXP_STC -#endif - - -// SWIG can't handle "#if" type of conditionals, only "#ifdef" -#ifdef SWIG -#define STC_USE_DND 1 -#else -#if wxUSE_DRAG_AND_DROP -#define STC_USE_DND 1 -#endif -#endif - -//---------------------------------------------------------------------- - -// Should a wxPopupWindow be used for the call tips and autocomplete windows? -#ifndef wxSTC_USE_POPUP -#define wxSTC_USE_POPUP 1 -#endif - -//---------------------------------------------------------------------- -// BEGIN generated section. The following code is automatically generated -// by gen_iface.py. Do not edit this file. Edit stc.h.in instead -// and regenerate - -#define wxSTC_INVALID_POSITION -1 - -// Define start of Scintilla messages to be greater than all Windows edit (EM_*) messages -// as many EM_ messages can be used although that use is deprecated. -#define wxSTC_START 2000 -#define wxSTC_OPTIONAL_START 3000 -#define wxSTC_LEXER_START 4000 -#define wxSTC_WS_INVISIBLE 0 -#define wxSTC_WS_VISIBLEALWAYS 1 -#define wxSTC_WS_VISIBLEAFTERINDENT 2 -#define wxSTC_EOL_CRLF 0 -#define wxSTC_EOL_CR 1 -#define wxSTC_EOL_LF 2 - -// The SC_CP_UTF8 value can be used to enter Unicode mode. -// This is the same value as CP_UTF8 in Windows -#define wxSTC_CP_UTF8 65001 - -// The SC_CP_DBCS value can be used to indicate a DBCS mode for GTK+. -#define wxSTC_CP_DBCS 1 -#define wxSTC_MARKER_MAX 31 -#define wxSTC_MARK_CIRCLE 0 -#define wxSTC_MARK_ROUNDRECT 1 -#define wxSTC_MARK_ARROW 2 -#define wxSTC_MARK_SMALLRECT 3 -#define wxSTC_MARK_SHORTARROW 4 -#define wxSTC_MARK_EMPTY 5 -#define wxSTC_MARK_ARROWDOWN 6 -#define wxSTC_MARK_MINUS 7 -#define wxSTC_MARK_PLUS 8 - -// Shapes used for outlining column. -#define wxSTC_MARK_VLINE 9 -#define wxSTC_MARK_LCORNER 10 -#define wxSTC_MARK_TCORNER 11 -#define wxSTC_MARK_BOXPLUS 12 -#define wxSTC_MARK_BOXPLUSCONNECTED 13 -#define wxSTC_MARK_BOXMINUS 14 -#define wxSTC_MARK_BOXMINUSCONNECTED 15 -#define wxSTC_MARK_LCORNERCURVE 16 -#define wxSTC_MARK_TCORNERCURVE 17 -#define wxSTC_MARK_CIRCLEPLUS 18 -#define wxSTC_MARK_CIRCLEPLUSCONNECTED 19 -#define wxSTC_MARK_CIRCLEMINUS 20 -#define wxSTC_MARK_CIRCLEMINUSCONNECTED 21 - -// Invisible mark that only sets the line background color. -#define wxSTC_MARK_BACKGROUND 22 -#define wxSTC_MARK_DOTDOTDOT 23 -#define wxSTC_MARK_ARROWS 24 -#define wxSTC_MARK_PIXMAP 25 -#define wxSTC_MARK_FULLRECT 26 -#define wxSTC_MARK_CHARACTER 10000 - -// Markers used for outlining column. -#define wxSTC_MARKNUM_FOLDEREND 25 -#define wxSTC_MARKNUM_FOLDEROPENMID 26 -#define wxSTC_MARKNUM_FOLDERMIDTAIL 27 -#define wxSTC_MARKNUM_FOLDERTAIL 28 -#define wxSTC_MARKNUM_FOLDERSUB 29 -#define wxSTC_MARKNUM_FOLDER 30 -#define wxSTC_MARKNUM_FOLDEROPEN 31 -#define wxSTC_MASK_FOLDERS 0xFE000000 -#define wxSTC_MARGIN_SYMBOL 0 -#define wxSTC_MARGIN_NUMBER 1 -#define wxSTC_MARGIN_BACK 2 -#define wxSTC_MARGIN_FORE 3 - -// Styles in range 32..38 are predefined for parts of the UI and are not used as normal styles. -// Style 39 is for future use. -#define wxSTC_STYLE_DEFAULT 32 -#define wxSTC_STYLE_LINENUMBER 33 -#define wxSTC_STYLE_BRACELIGHT 34 -#define wxSTC_STYLE_BRACEBAD 35 -#define wxSTC_STYLE_CONTROLCHAR 36 -#define wxSTC_STYLE_INDENTGUIDE 37 -#define wxSTC_STYLE_CALLTIP 38 -#define wxSTC_STYLE_LASTPREDEFINED 39 -#define wxSTC_STYLE_MAX 127 - -// Character set identifiers are used in StyleSetCharacterSet. -// The values are the same as the Windows *_CHARSET values. -#define wxSTC_CHARSET_ANSI 0 -#define wxSTC_CHARSET_DEFAULT 1 -#define wxSTC_CHARSET_BALTIC 186 -#define wxSTC_CHARSET_CHINESEBIG5 136 -#define wxSTC_CHARSET_EASTEUROPE 238 -#define wxSTC_CHARSET_GB2312 134 -#define wxSTC_CHARSET_GREEK 161 -#define wxSTC_CHARSET_HANGUL 129 -#define wxSTC_CHARSET_MAC 77 -#define wxSTC_CHARSET_OEM 255 -#define wxSTC_CHARSET_RUSSIAN 204 -#define wxSTC_CHARSET_CYRILLIC 1251 -#define wxSTC_CHARSET_SHIFTJIS 128 -#define wxSTC_CHARSET_SYMBOL 2 -#define wxSTC_CHARSET_TURKISH 162 -#define wxSTC_CHARSET_JOHAB 130 -#define wxSTC_CHARSET_HEBREW 177 -#define wxSTC_CHARSET_ARABIC 178 -#define wxSTC_CHARSET_VIETNAMESE 163 -#define wxSTC_CHARSET_THAI 222 -#define wxSTC_CHARSET_8859_15 1000 -#define wxSTC_CASE_MIXED 0 -#define wxSTC_CASE_UPPER 1 -#define wxSTC_CASE_LOWER 2 -#define wxSTC_INDIC_MAX 7 -#define wxSTC_INDIC_PLAIN 0 -#define wxSTC_INDIC_SQUIGGLE 1 -#define wxSTC_INDIC_TT 2 -#define wxSTC_INDIC_DIAGONAL 3 -#define wxSTC_INDIC_STRIKE 4 -#define wxSTC_INDIC_HIDDEN 5 -#define wxSTC_INDIC_BOX 6 -#define wxSTC_INDIC_ROUNDBOX 7 -#define wxSTC_INDIC0_MASK 0x20 -#define wxSTC_INDIC1_MASK 0x40 -#define wxSTC_INDIC2_MASK 0x80 -#define wxSTC_INDICS_MASK 0xE0 - -// PrintColourMode - use same colours as screen. -#define wxSTC_PRINT_NORMAL 0 - -// PrintColourMode - invert the light value of each style for printing. -#define wxSTC_PRINT_INVERTLIGHT 1 - -// PrintColourMode - force black text on white background for printing. -#define wxSTC_PRINT_BLACKONWHITE 2 - -// PrintColourMode - text stays coloured, but all background is forced to be white for printing. -#define wxSTC_PRINT_COLOURONWHITE 3 - -// PrintColourMode - only the default-background is forced to be white for printing. -#define wxSTC_PRINT_COLOURONWHITEDEFAULTBG 4 -#define wxSTC_FIND_WHOLEWORD 2 -#define wxSTC_FIND_MATCHCASE 4 -#define wxSTC_FIND_WORDSTART 0x00100000 -#define wxSTC_FIND_REGEXP 0x00200000 -#define wxSTC_FIND_POSIX 0x00400000 -#define wxSTC_FOLDLEVELBASE 0x400 -#define wxSTC_FOLDLEVELWHITEFLAG 0x1000 -#define wxSTC_FOLDLEVELHEADERFLAG 0x2000 -#define wxSTC_FOLDLEVELBOXHEADERFLAG 0x4000 -#define wxSTC_FOLDLEVELBOXFOOTERFLAG 0x8000 -#define wxSTC_FOLDLEVELCONTRACTED 0x10000 -#define wxSTC_FOLDLEVELUNINDENT 0x20000 -#define wxSTC_FOLDLEVELNUMBERMASK 0x0FFF -#define wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED 0x0002 -#define wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED 0x0004 -#define wxSTC_FOLDFLAG_LINEAFTER_EXPANDED 0x0008 -#define wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED 0x0010 -#define wxSTC_FOLDFLAG_LEVELNUMBERS 0x0040 -#define wxSTC_FOLDFLAG_BOX 0x0001 -#define wxSTC_TIME_FOREVER 10000000 -#define wxSTC_WRAP_NONE 0 -#define wxSTC_WRAP_WORD 1 -#define wxSTC_WRAP_CHAR 2 -#define wxSTC_WRAPVISUALFLAG_NONE 0x0000 -#define wxSTC_WRAPVISUALFLAG_END 0x0001 -#define wxSTC_WRAPVISUALFLAG_START 0x0002 -#define wxSTC_WRAPVISUALFLAGLOC_DEFAULT 0x0000 -#define wxSTC_WRAPVISUALFLAGLOC_END_BY_TEXT 0x0001 -#define wxSTC_WRAPVISUALFLAGLOC_START_BY_TEXT 0x0002 -#define wxSTC_CACHE_NONE 0 -#define wxSTC_CACHE_CARET 1 -#define wxSTC_CACHE_PAGE 2 -#define wxSTC_CACHE_DOCUMENT 3 -#define wxSTC_EDGE_NONE 0 -#define wxSTC_EDGE_LINE 1 -#define wxSTC_EDGE_BACKGROUND 2 -#define wxSTC_CURSORNORMAL -1 -#define wxSTC_CURSORWAIT 4 - -// Constants for use with SetVisiblePolicy, similar to SetCaretPolicy. -#define wxSTC_VISIBLE_SLOP 0x01 -#define wxSTC_VISIBLE_STRICT 0x04 - -// Caret policy, used by SetXCaretPolicy and SetYCaretPolicy. -// If CARET_SLOP is set, we can define a slop value: caretSlop. -// This value defines an unwanted zone (UZ) where the caret is... unwanted. -// This zone is defined as a number of pixels near the vertical margins, -// and as a number of lines near the horizontal margins. -// By keeping the caret away from the edges, it is seen within its context, -// so it is likely that the identifier that the caret is on can be completely seen, -// and that the current line is seen with some of the lines following it which are -// often dependent on that line. -#define wxSTC_CARET_SLOP 0x01 - -// If CARET_STRICT is set, the policy is enforced... strictly. -// The caret is centred on the display if slop is not set, -// and cannot go in the UZ if slop is set. -#define wxSTC_CARET_STRICT 0x04 - -// If CARET_JUMPS is set, the display is moved more energetically -// so the caret can move in the same direction longer before the policy is applied again. -#define wxSTC_CARET_JUMPS 0x10 - -// If CARET_EVEN is not set, instead of having symmetrical UZs, -// the left and bottom UZs are extended up to right and top UZs respectively. -// This way, we favour the displaying of useful information: the begining of lines, -// where most code reside, and the lines after the caret, eg. the body of a function. -#define wxSTC_CARET_EVEN 0x08 - -// Selection modes -#define wxSTC_SEL_STREAM 0 -#define wxSTC_SEL_RECTANGLE 1 -#define wxSTC_SEL_LINES 2 -#define wxSTC_ALPHA_TRANSPARENT 0 -#define wxSTC_ALPHA_OPAQUE 255 -#define wxSTC_ALPHA_NOALPHA 256 - -// Maximum value of keywordSet parameter of SetKeyWords. -#define wxSTC_KEYWORDSET_MAX 8 - -// Notifications -// Type of modification and the action which caused the modification. -// These are defined as a bit mask to make it easy to specify which notifications are wanted. -// One bit is set from each of SC_MOD_* and SC_PERFORMED_*. -#define wxSTC_MOD_INSERTTEXT 0x1 -#define wxSTC_MOD_DELETETEXT 0x2 -#define wxSTC_MOD_CHANGESTYLE 0x4 -#define wxSTC_MOD_CHANGEFOLD 0x8 -#define wxSTC_PERFORMED_USER 0x10 -#define wxSTC_PERFORMED_UNDO 0x20 -#define wxSTC_PERFORMED_REDO 0x40 -#define wxSTC_MULTISTEPUNDOREDO 0x80 -#define wxSTC_LASTSTEPINUNDOREDO 0x100 -#define wxSTC_MOD_CHANGEMARKER 0x200 -#define wxSTC_MOD_BEFOREINSERT 0x400 -#define wxSTC_MOD_BEFOREDELETE 0x800 -#define wxSTC_MULTILINEUNDOREDO 0x1000 -#define wxSTC_MODEVENTMASKALL 0x1FFF - -// Symbolic key codes and modifier flags. -// ASCII and other printable characters below 256. -// Extended keys above 300. -#define wxSTC_KEY_DOWN 300 -#define wxSTC_KEY_UP 301 -#define wxSTC_KEY_LEFT 302 -#define wxSTC_KEY_RIGHT 303 -#define wxSTC_KEY_HOME 304 -#define wxSTC_KEY_END 305 -#define wxSTC_KEY_PRIOR 306 -#define wxSTC_KEY_NEXT 307 -#define wxSTC_KEY_DELETE 308 -#define wxSTC_KEY_INSERT 309 -#define wxSTC_KEY_ESCAPE 7 -#define wxSTC_KEY_BACK 8 -#define wxSTC_KEY_TAB 9 -#define wxSTC_KEY_RETURN 13 -#define wxSTC_KEY_ADD 310 -#define wxSTC_KEY_SUBTRACT 311 -#define wxSTC_KEY_DIVIDE 312 -#define wxSTC_SCMOD_NORM 0 -#define wxSTC_SCMOD_SHIFT 1 -#define wxSTC_SCMOD_CTRL 2 -#define wxSTC_SCMOD_ALT 4 - -// For SciLexer.h -#define wxSTC_LEX_CONTAINER 0 -#define wxSTC_LEX_NULL 1 -#define wxSTC_LEX_PYTHON 2 -#define wxSTC_LEX_CPP 3 -#define wxSTC_LEX_HTML 4 -#define wxSTC_LEX_XML 5 -#define wxSTC_LEX_PERL 6 -#define wxSTC_LEX_SQL 7 -#define wxSTC_LEX_VB 8 -#define wxSTC_LEX_PROPERTIES 9 -#define wxSTC_LEX_ERRORLIST 10 -#define wxSTC_LEX_MAKEFILE 11 -#define wxSTC_LEX_BATCH 12 -#define wxSTC_LEX_XCODE 13 -#define wxSTC_LEX_LATEX 14 -#define wxSTC_LEX_LUA 15 -#define wxSTC_LEX_DIFF 16 -#define wxSTC_LEX_CONF 17 -#define wxSTC_LEX_PASCAL 18 -#define wxSTC_LEX_AVE 19 -#define wxSTC_LEX_ADA 20 -#define wxSTC_LEX_LISP 21 -#define wxSTC_LEX_RUBY 22 -#define wxSTC_LEX_EIFFEL 23 -#define wxSTC_LEX_EIFFELKW 24 -#define wxSTC_LEX_TCL 25 -#define wxSTC_LEX_NNCRONTAB 26 -#define wxSTC_LEX_BULLANT 27 -#define wxSTC_LEX_VBSCRIPT 28 -#define wxSTC_LEX_BAAN 31 -#define wxSTC_LEX_MATLAB 32 -#define wxSTC_LEX_SCRIPTOL 33 -#define wxSTC_LEX_ASM 34 -#define wxSTC_LEX_CPPNOCASE 35 -#define wxSTC_LEX_FORTRAN 36 -#define wxSTC_LEX_F77 37 -#define wxSTC_LEX_CSS 38 -#define wxSTC_LEX_POV 39 -#define wxSTC_LEX_LOUT 40 -#define wxSTC_LEX_ESCRIPT 41 -#define wxSTC_LEX_PS 42 -#define wxSTC_LEX_NSIS 43 -#define wxSTC_LEX_MMIXAL 44 -#define wxSTC_LEX_CLW 45 -#define wxSTC_LEX_CLWNOCASE 46 -#define wxSTC_LEX_LOT 47 -#define wxSTC_LEX_YAML 48 -#define wxSTC_LEX_TEX 49 -#define wxSTC_LEX_METAPOST 50 -#define wxSTC_LEX_POWERBASIC 51 -#define wxSTC_LEX_FORTH 52 -#define wxSTC_LEX_ERLANG 53 -#define wxSTC_LEX_OCTAVE 54 -#define wxSTC_LEX_MSSQL 55 -#define wxSTC_LEX_VERILOG 56 -#define wxSTC_LEX_KIX 57 -#define wxSTC_LEX_GUI4CLI 58 -#define wxSTC_LEX_SPECMAN 59 -#define wxSTC_LEX_AU3 60 -#define wxSTC_LEX_APDL 61 -#define wxSTC_LEX_BASH 62 -#define wxSTC_LEX_ASN1 63 -#define wxSTC_LEX_VHDL 64 -#define wxSTC_LEX_CAML 65 -#define wxSTC_LEX_BLITZBASIC 66 -#define wxSTC_LEX_PUREBASIC 67 -#define wxSTC_LEX_HASKELL 68 -#define wxSTC_LEX_PHPSCRIPT 69 -#define wxSTC_LEX_TADS3 70 -#define wxSTC_LEX_REBOL 71 -#define wxSTC_LEX_SMALLTALK 72 -#define wxSTC_LEX_FLAGSHIP 73 -#define wxSTC_LEX_CSOUND 74 -#define wxSTC_LEX_FREEBASIC 75 -#define wxSTC_LEX_INNOSETUP 76 -#define wxSTC_LEX_OPAL 77 -#define wxSTC_LEX_SPICE 78 - -// When a lexer specifies its language as SCLEX_AUTOMATIC it receives a -// value assigned in sequence from SCLEX_AUTOMATIC+1. -#define wxSTC_LEX_AUTOMATIC 1000 - -// Lexical states for SCLEX_PYTHON -#define wxSTC_P_DEFAULT 0 -#define wxSTC_P_COMMENTLINE 1 -#define wxSTC_P_NUMBER 2 -#define wxSTC_P_STRING 3 -#define wxSTC_P_CHARACTER 4 -#define wxSTC_P_WORD 5 -#define wxSTC_P_TRIPLE 6 -#define wxSTC_P_TRIPLEDOUBLE 7 -#define wxSTC_P_CLASSNAME 8 -#define wxSTC_P_DEFNAME 9 -#define wxSTC_P_OPERATOR 10 -#define wxSTC_P_IDENTIFIER 11 -#define wxSTC_P_COMMENTBLOCK 12 -#define wxSTC_P_STRINGEOL 13 -#define wxSTC_P_WORD2 14 -#define wxSTC_P_DECORATOR 15 - -// Lexical states for SCLEX_CPP -#define wxSTC_C_DEFAULT 0 -#define wxSTC_C_COMMENT 1 -#define wxSTC_C_COMMENTLINE 2 -#define wxSTC_C_COMMENTDOC 3 -#define wxSTC_C_NUMBER 4 -#define wxSTC_C_WORD 5 -#define wxSTC_C_STRING 6 -#define wxSTC_C_CHARACTER 7 -#define wxSTC_C_UUID 8 -#define wxSTC_C_PREPROCESSOR 9 -#define wxSTC_C_OPERATOR 10 -#define wxSTC_C_IDENTIFIER 11 -#define wxSTC_C_STRINGEOL 12 -#define wxSTC_C_VERBATIM 13 -#define wxSTC_C_REGEX 14 -#define wxSTC_C_COMMENTLINEDOC 15 -#define wxSTC_C_WORD2 16 -#define wxSTC_C_COMMENTDOCKEYWORD 17 -#define wxSTC_C_COMMENTDOCKEYWORDERROR 18 -#define wxSTC_C_GLOBALCLASS 19 - -// Lexical states for SCLEX_TCL -#define wxSTC_TCL_DEFAULT 0 -#define wxSTC_TCL_COMMENT 1 -#define wxSTC_TCL_COMMENTLINE 2 -#define wxSTC_TCL_NUMBER 3 -#define wxSTC_TCL_WORD_IN_QUOTE 4 -#define wxSTC_TCL_IN_QUOTE 5 -#define wxSTC_TCL_OPERATOR 6 -#define wxSTC_TCL_IDENTIFIER 7 -#define wxSTC_TCL_SUBSTITUTION 8 -#define wxSTC_TCL_SUB_BRACE 9 -#define wxSTC_TCL_MODIFIER 10 -#define wxSTC_TCL_EXPAND 11 -#define wxSTC_TCL_WORD 12 -#define wxSTC_TCL_WORD2 13 -#define wxSTC_TCL_WORD3 14 -#define wxSTC_TCL_WORD4 15 -#define wxSTC_TCL_WORD5 16 -#define wxSTC_TCL_WORD6 17 -#define wxSTC_TCL_WORD7 18 -#define wxSTC_TCL_WORD8 19 -#define wxSTC_TCL_COMMENT_BOX 20 -#define wxSTC_TCL_BLOCK_COMMENT 21 - -// Lexical states for SCLEX_HTML, SCLEX_XML -#define wxSTC_H_DEFAULT 0 -#define wxSTC_H_TAG 1 -#define wxSTC_H_TAGUNKNOWN 2 -#define wxSTC_H_ATTRIBUTE 3 -#define wxSTC_H_ATTRIBUTEUNKNOWN 4 -#define wxSTC_H_NUMBER 5 -#define wxSTC_H_DOUBLESTRING 6 -#define wxSTC_H_SINGLESTRING 7 -#define wxSTC_H_OTHER 8 -#define wxSTC_H_COMMENT 9 -#define wxSTC_H_ENTITY 10 - -// XML and ASP -#define wxSTC_H_TAGEND 11 -#define wxSTC_H_XMLSTART 12 -#define wxSTC_H_XMLEND 13 -#define wxSTC_H_SCRIPT 14 -#define wxSTC_H_ASP 15 -#define wxSTC_H_ASPAT 16 -#define wxSTC_H_CDATA 17 -#define wxSTC_H_QUESTION 18 - -// More HTML -#define wxSTC_H_VALUE 19 - -// X-Code -#define wxSTC_H_XCCOMMENT 20 - -// SGML -#define wxSTC_H_SGML_DEFAULT 21 -#define wxSTC_H_SGML_COMMAND 22 -#define wxSTC_H_SGML_1ST_PARAM 23 -#define wxSTC_H_SGML_DOUBLESTRING 24 -#define wxSTC_H_SGML_SIMPLESTRING 25 -#define wxSTC_H_SGML_ERROR 26 -#define wxSTC_H_SGML_SPECIAL 27 -#define wxSTC_H_SGML_ENTITY 28 -#define wxSTC_H_SGML_COMMENT 29 -#define wxSTC_H_SGML_1ST_PARAM_COMMENT 30 -#define wxSTC_H_SGML_BLOCK_DEFAULT 31 - -// Embedded Javascript -#define wxSTC_HJ_START 40 -#define wxSTC_HJ_DEFAULT 41 -#define wxSTC_HJ_COMMENT 42 -#define wxSTC_HJ_COMMENTLINE 43 -#define wxSTC_HJ_COMMENTDOC 44 -#define wxSTC_HJ_NUMBER 45 -#define wxSTC_HJ_WORD 46 -#define wxSTC_HJ_KEYWORD 47 -#define wxSTC_HJ_DOUBLESTRING 48 -#define wxSTC_HJ_SINGLESTRING 49 -#define wxSTC_HJ_SYMBOLS 50 -#define wxSTC_HJ_STRINGEOL 51 -#define wxSTC_HJ_REGEX 52 - -// ASP Javascript -#define wxSTC_HJA_START 55 -#define wxSTC_HJA_DEFAULT 56 -#define wxSTC_HJA_COMMENT 57 -#define wxSTC_HJA_COMMENTLINE 58 -#define wxSTC_HJA_COMMENTDOC 59 -#define wxSTC_HJA_NUMBER 60 -#define wxSTC_HJA_WORD 61 -#define wxSTC_HJA_KEYWORD 62 -#define wxSTC_HJA_DOUBLESTRING 63 -#define wxSTC_HJA_SINGLESTRING 64 -#define wxSTC_HJA_SYMBOLS 65 -#define wxSTC_HJA_STRINGEOL 66 -#define wxSTC_HJA_REGEX 67 - -// Embedded VBScript -#define wxSTC_HB_START 70 -#define wxSTC_HB_DEFAULT 71 -#define wxSTC_HB_COMMENTLINE 72 -#define wxSTC_HB_NUMBER 73 -#define wxSTC_HB_WORD 74 -#define wxSTC_HB_STRING 75 -#define wxSTC_HB_IDENTIFIER 76 -#define wxSTC_HB_STRINGEOL 77 - -// ASP VBScript -#define wxSTC_HBA_START 80 -#define wxSTC_HBA_DEFAULT 81 -#define wxSTC_HBA_COMMENTLINE 82 -#define wxSTC_HBA_NUMBER 83 -#define wxSTC_HBA_WORD 84 -#define wxSTC_HBA_STRING 85 -#define wxSTC_HBA_IDENTIFIER 86 -#define wxSTC_HBA_STRINGEOL 87 - -// Embedded Python -#define wxSTC_HP_START 90 -#define wxSTC_HP_DEFAULT 91 -#define wxSTC_HP_COMMENTLINE 92 -#define wxSTC_HP_NUMBER 93 -#define wxSTC_HP_STRING 94 -#define wxSTC_HP_CHARACTER 95 -#define wxSTC_HP_WORD 96 -#define wxSTC_HP_TRIPLE 97 -#define wxSTC_HP_TRIPLEDOUBLE 98 -#define wxSTC_HP_CLASSNAME 99 -#define wxSTC_HP_DEFNAME 100 -#define wxSTC_HP_OPERATOR 101 -#define wxSTC_HP_IDENTIFIER 102 - -// PHP -#define wxSTC_HPHP_COMPLEX_VARIABLE 104 - -// ASP Python -#define wxSTC_HPA_START 105 -#define wxSTC_HPA_DEFAULT 106 -#define wxSTC_HPA_COMMENTLINE 107 -#define wxSTC_HPA_NUMBER 108 -#define wxSTC_HPA_STRING 109 -#define wxSTC_HPA_CHARACTER 110 -#define wxSTC_HPA_WORD 111 -#define wxSTC_HPA_TRIPLE 112 -#define wxSTC_HPA_TRIPLEDOUBLE 113 -#define wxSTC_HPA_CLASSNAME 114 -#define wxSTC_HPA_DEFNAME 115 -#define wxSTC_HPA_OPERATOR 116 -#define wxSTC_HPA_IDENTIFIER 117 - -// PHP -#define wxSTC_HPHP_DEFAULT 118 -#define wxSTC_HPHP_HSTRING 119 -#define wxSTC_HPHP_SIMPLESTRING 120 -#define wxSTC_HPHP_WORD 121 -#define wxSTC_HPHP_NUMBER 122 -#define wxSTC_HPHP_VARIABLE 123 -#define wxSTC_HPHP_COMMENT 124 -#define wxSTC_HPHP_COMMENTLINE 125 -#define wxSTC_HPHP_HSTRING_VARIABLE 126 -#define wxSTC_HPHP_OPERATOR 127 - -// Lexical states for SCLEX_PERL -#define wxSTC_PL_DEFAULT 0 -#define wxSTC_PL_ERROR 1 -#define wxSTC_PL_COMMENTLINE 2 -#define wxSTC_PL_POD 3 -#define wxSTC_PL_NUMBER 4 -#define wxSTC_PL_WORD 5 -#define wxSTC_PL_STRING 6 -#define wxSTC_PL_CHARACTER 7 -#define wxSTC_PL_PUNCTUATION 8 -#define wxSTC_PL_PREPROCESSOR 9 -#define wxSTC_PL_OPERATOR 10 -#define wxSTC_PL_IDENTIFIER 11 -#define wxSTC_PL_SCALAR 12 -#define wxSTC_PL_ARRAY 13 -#define wxSTC_PL_HASH 14 -#define wxSTC_PL_SYMBOLTABLE 15 -#define wxSTC_PL_VARIABLE_INDEXER 16 -#define wxSTC_PL_REGEX 17 -#define wxSTC_PL_REGSUBST 18 -#define wxSTC_PL_LONGQUOTE 19 -#define wxSTC_PL_BACKTICKS 20 -#define wxSTC_PL_DATASECTION 21 -#define wxSTC_PL_HERE_DELIM 22 -#define wxSTC_PL_HERE_Q 23 -#define wxSTC_PL_HERE_QQ 24 -#define wxSTC_PL_HERE_QX 25 -#define wxSTC_PL_STRING_Q 26 -#define wxSTC_PL_STRING_QQ 27 -#define wxSTC_PL_STRING_QX 28 -#define wxSTC_PL_STRING_QR 29 -#define wxSTC_PL_STRING_QW 30 -#define wxSTC_PL_POD_VERB 31 - -// Lexical states for SCLEX_RUBY -#define wxSTC_RB_DEFAULT 0 -#define wxSTC_RB_ERROR 1 -#define wxSTC_RB_COMMENTLINE 2 -#define wxSTC_RB_POD 3 -#define wxSTC_RB_NUMBER 4 -#define wxSTC_RB_WORD 5 -#define wxSTC_RB_STRING 6 -#define wxSTC_RB_CHARACTER 7 -#define wxSTC_RB_CLASSNAME 8 -#define wxSTC_RB_DEFNAME 9 -#define wxSTC_RB_OPERATOR 10 -#define wxSTC_RB_IDENTIFIER 11 -#define wxSTC_RB_REGEX 12 -#define wxSTC_RB_GLOBAL 13 -#define wxSTC_RB_SYMBOL 14 -#define wxSTC_RB_MODULE_NAME 15 -#define wxSTC_RB_INSTANCE_VAR 16 -#define wxSTC_RB_CLASS_VAR 17 -#define wxSTC_RB_BACKTICKS 18 -#define wxSTC_RB_DATASECTION 19 -#define wxSTC_RB_HERE_DELIM 20 -#define wxSTC_RB_HERE_Q 21 -#define wxSTC_RB_HERE_QQ 22 -#define wxSTC_RB_HERE_QX 23 -#define wxSTC_RB_STRING_Q 24 -#define wxSTC_RB_STRING_QQ 25 -#define wxSTC_RB_STRING_QX 26 -#define wxSTC_RB_STRING_QR 27 -#define wxSTC_RB_STRING_QW 28 -#define wxSTC_RB_WORD_DEMOTED 29 -#define wxSTC_RB_STDIN 30 -#define wxSTC_RB_STDOUT 31 -#define wxSTC_RB_STDERR 40 -#define wxSTC_RB_UPPER_BOUND 41 - -// Lexical states for SCLEX_VB, SCLEX_VBSCRIPT, SCLEX_POWERBASIC -#define wxSTC_B_DEFAULT 0 -#define wxSTC_B_COMMENT 1 -#define wxSTC_B_NUMBER 2 -#define wxSTC_B_KEYWORD 3 -#define wxSTC_B_STRING 4 -#define wxSTC_B_PREPROCESSOR 5 -#define wxSTC_B_OPERATOR 6 -#define wxSTC_B_IDENTIFIER 7 -#define wxSTC_B_DATE 8 -#define wxSTC_B_STRINGEOL 9 -#define wxSTC_B_KEYWORD2 10 -#define wxSTC_B_KEYWORD3 11 -#define wxSTC_B_KEYWORD4 12 -#define wxSTC_B_CONSTANT 13 -#define wxSTC_B_ASM 14 -#define wxSTC_B_LABEL 15 -#define wxSTC_B_ERROR 16 -#define wxSTC_B_HEXNUMBER 17 -#define wxSTC_B_BINNUMBER 18 - -// Lexical states for SCLEX_PROPERTIES -#define wxSTC_PROPS_DEFAULT 0 -#define wxSTC_PROPS_COMMENT 1 -#define wxSTC_PROPS_SECTION 2 -#define wxSTC_PROPS_ASSIGNMENT 3 -#define wxSTC_PROPS_DEFVAL 4 -#define wxSTC_PROPS_KEY 5 - -// Lexical states for SCLEX_LATEX -#define wxSTC_L_DEFAULT 0 -#define wxSTC_L_COMMAND 1 -#define wxSTC_L_TAG 2 -#define wxSTC_L_MATH 3 -#define wxSTC_L_COMMENT 4 - -// Lexical states for SCLEX_LUA -#define wxSTC_LUA_DEFAULT 0 -#define wxSTC_LUA_COMMENT 1 -#define wxSTC_LUA_COMMENTLINE 2 -#define wxSTC_LUA_COMMENTDOC 3 -#define wxSTC_LUA_NUMBER 4 -#define wxSTC_LUA_WORD 5 -#define wxSTC_LUA_STRING 6 -#define wxSTC_LUA_CHARACTER 7 -#define wxSTC_LUA_LITERALSTRING 8 -#define wxSTC_LUA_PREPROCESSOR 9 -#define wxSTC_LUA_OPERATOR 10 -#define wxSTC_LUA_IDENTIFIER 11 -#define wxSTC_LUA_STRINGEOL 12 -#define wxSTC_LUA_WORD2 13 -#define wxSTC_LUA_WORD3 14 -#define wxSTC_LUA_WORD4 15 -#define wxSTC_LUA_WORD5 16 -#define wxSTC_LUA_WORD6 17 -#define wxSTC_LUA_WORD7 18 -#define wxSTC_LUA_WORD8 19 - -// Lexical states for SCLEX_ERRORLIST -#define wxSTC_ERR_DEFAULT 0 -#define wxSTC_ERR_PYTHON 1 -#define wxSTC_ERR_GCC 2 -#define wxSTC_ERR_MS 3 -#define wxSTC_ERR_CMD 4 -#define wxSTC_ERR_BORLAND 5 -#define wxSTC_ERR_PERL 6 -#define wxSTC_ERR_NET 7 -#define wxSTC_ERR_LUA 8 -#define wxSTC_ERR_CTAG 9 -#define wxSTC_ERR_DIFF_CHANGED 10 -#define wxSTC_ERR_DIFF_ADDITION 11 -#define wxSTC_ERR_DIFF_DELETION 12 -#define wxSTC_ERR_DIFF_MESSAGE 13 -#define wxSTC_ERR_PHP 14 -#define wxSTC_ERR_ELF 15 -#define wxSTC_ERR_IFC 16 -#define wxSTC_ERR_IFORT 17 -#define wxSTC_ERR_ABSF 18 -#define wxSTC_ERR_TIDY 19 -#define wxSTC_ERR_JAVA_STACK 20 - -// Lexical states for SCLEX_BATCH -#define wxSTC_BAT_DEFAULT 0 -#define wxSTC_BAT_COMMENT 1 -#define wxSTC_BAT_WORD 2 -#define wxSTC_BAT_LABEL 3 -#define wxSTC_BAT_HIDE 4 -#define wxSTC_BAT_COMMAND 5 -#define wxSTC_BAT_IDENTIFIER 6 -#define wxSTC_BAT_OPERATOR 7 - -// Lexical states for SCLEX_MAKEFILE -#define wxSTC_MAKE_DEFAULT 0 -#define wxSTC_MAKE_COMMENT 1 -#define wxSTC_MAKE_PREPROCESSOR 2 -#define wxSTC_MAKE_IDENTIFIER 3 -#define wxSTC_MAKE_OPERATOR 4 -#define wxSTC_MAKE_TARGET 5 -#define wxSTC_MAKE_IDEOL 9 - -// Lexical states for SCLEX_DIFF -#define wxSTC_DIFF_DEFAULT 0 -#define wxSTC_DIFF_COMMENT 1 -#define wxSTC_DIFF_COMMAND 2 -#define wxSTC_DIFF_HEADER 3 -#define wxSTC_DIFF_POSITION 4 -#define wxSTC_DIFF_DELETED 5 -#define wxSTC_DIFF_ADDED 6 - -// Lexical states for SCLEX_CONF (Apache Configuration Files Lexer) -#define wxSTC_CONF_DEFAULT 0 -#define wxSTC_CONF_COMMENT 1 -#define wxSTC_CONF_NUMBER 2 -#define wxSTC_CONF_IDENTIFIER 3 -#define wxSTC_CONF_EXTENSION 4 -#define wxSTC_CONF_PARAMETER 5 -#define wxSTC_CONF_STRING 6 -#define wxSTC_CONF_OPERATOR 7 -#define wxSTC_CONF_IP 8 -#define wxSTC_CONF_DIRECTIVE 9 - -// Lexical states for SCLEX_AVE, Avenue -#define wxSTC_AVE_DEFAULT 0 -#define wxSTC_AVE_COMMENT 1 -#define wxSTC_AVE_NUMBER 2 -#define wxSTC_AVE_WORD 3 -#define wxSTC_AVE_STRING 6 -#define wxSTC_AVE_ENUM 7 -#define wxSTC_AVE_STRINGEOL 8 -#define wxSTC_AVE_IDENTIFIER 9 -#define wxSTC_AVE_OPERATOR 10 -#define wxSTC_AVE_WORD1 11 -#define wxSTC_AVE_WORD2 12 -#define wxSTC_AVE_WORD3 13 -#define wxSTC_AVE_WORD4 14 -#define wxSTC_AVE_WORD5 15 -#define wxSTC_AVE_WORD6 16 - -// Lexical states for SCLEX_ADA -#define wxSTC_ADA_DEFAULT 0 -#define wxSTC_ADA_WORD 1 -#define wxSTC_ADA_IDENTIFIER 2 -#define wxSTC_ADA_NUMBER 3 -#define wxSTC_ADA_DELIMITER 4 -#define wxSTC_ADA_CHARACTER 5 -#define wxSTC_ADA_CHARACTEREOL 6 -#define wxSTC_ADA_STRING 7 -#define wxSTC_ADA_STRINGEOL 8 -#define wxSTC_ADA_LABEL 9 -#define wxSTC_ADA_COMMENTLINE 10 -#define wxSTC_ADA_ILLEGAL 11 - -// Lexical states for SCLEX_BAAN -#define wxSTC_BAAN_DEFAULT 0 -#define wxSTC_BAAN_COMMENT 1 -#define wxSTC_BAAN_COMMENTDOC 2 -#define wxSTC_BAAN_NUMBER 3 -#define wxSTC_BAAN_WORD 4 -#define wxSTC_BAAN_STRING 5 -#define wxSTC_BAAN_PREPROCESSOR 6 -#define wxSTC_BAAN_OPERATOR 7 -#define wxSTC_BAAN_IDENTIFIER 8 -#define wxSTC_BAAN_STRINGEOL 9 -#define wxSTC_BAAN_WORD2 10 - -// Lexical states for SCLEX_LISP -#define wxSTC_LISP_DEFAULT 0 -#define wxSTC_LISP_COMMENT 1 -#define wxSTC_LISP_NUMBER 2 -#define wxSTC_LISP_KEYWORD 3 -#define wxSTC_LISP_KEYWORD_KW 4 -#define wxSTC_LISP_SYMBOL 5 -#define wxSTC_LISP_STRING 6 -#define wxSTC_LISP_STRINGEOL 8 -#define wxSTC_LISP_IDENTIFIER 9 -#define wxSTC_LISP_OPERATOR 10 -#define wxSTC_LISP_SPECIAL 11 -#define wxSTC_LISP_MULTI_COMMENT 12 - -// Lexical states for SCLEX_EIFFEL and SCLEX_EIFFELKW -#define wxSTC_EIFFEL_DEFAULT 0 -#define wxSTC_EIFFEL_COMMENTLINE 1 -#define wxSTC_EIFFEL_NUMBER 2 -#define wxSTC_EIFFEL_WORD 3 -#define wxSTC_EIFFEL_STRING 4 -#define wxSTC_EIFFEL_CHARACTER 5 -#define wxSTC_EIFFEL_OPERATOR 6 -#define wxSTC_EIFFEL_IDENTIFIER 7 -#define wxSTC_EIFFEL_STRINGEOL 8 - -// Lexical states for SCLEX_NNCRONTAB (nnCron crontab Lexer) -#define wxSTC_NNCRONTAB_DEFAULT 0 -#define wxSTC_NNCRONTAB_COMMENT 1 -#define wxSTC_NNCRONTAB_TASK 2 -#define wxSTC_NNCRONTAB_SECTION 3 -#define wxSTC_NNCRONTAB_KEYWORD 4 -#define wxSTC_NNCRONTAB_MODIFIER 5 -#define wxSTC_NNCRONTAB_ASTERISK 6 -#define wxSTC_NNCRONTAB_NUMBER 7 -#define wxSTC_NNCRONTAB_STRING 8 -#define wxSTC_NNCRONTAB_ENVIRONMENT 9 -#define wxSTC_NNCRONTAB_IDENTIFIER 10 - -// Lexical states for SCLEX_FORTH (Forth Lexer) -#define wxSTC_FORTH_DEFAULT 0 -#define wxSTC_FORTH_COMMENT 1 -#define wxSTC_FORTH_COMMENT_ML 2 -#define wxSTC_FORTH_IDENTIFIER 3 -#define wxSTC_FORTH_CONTROL 4 -#define wxSTC_FORTH_KEYWORD 5 -#define wxSTC_FORTH_DEFWORD 6 -#define wxSTC_FORTH_PREWORD1 7 -#define wxSTC_FORTH_PREWORD2 8 -#define wxSTC_FORTH_NUMBER 9 -#define wxSTC_FORTH_STRING 10 -#define wxSTC_FORTH_LOCALE 11 - -// Lexical states for SCLEX_MATLAB -#define wxSTC_MATLAB_DEFAULT 0 -#define wxSTC_MATLAB_COMMENT 1 -#define wxSTC_MATLAB_COMMAND 2 -#define wxSTC_MATLAB_NUMBER 3 -#define wxSTC_MATLAB_KEYWORD 4 - -// single quoted string -#define wxSTC_MATLAB_STRING 5 -#define wxSTC_MATLAB_OPERATOR 6 -#define wxSTC_MATLAB_IDENTIFIER 7 -#define wxSTC_MATLAB_DOUBLEQUOTESTRING 8 - -// Lexical states for SCLEX_SCRIPTOL -#define wxSTC_SCRIPTOL_DEFAULT 0 -#define wxSTC_SCRIPTOL_WHITE 1 -#define wxSTC_SCRIPTOL_COMMENTLINE 2 -#define wxSTC_SCRIPTOL_PERSISTENT 3 -#define wxSTC_SCRIPTOL_CSTYLE 4 -#define wxSTC_SCRIPTOL_COMMENTBLOCK 5 -#define wxSTC_SCRIPTOL_NUMBER 6 -#define wxSTC_SCRIPTOL_STRING 7 -#define wxSTC_SCRIPTOL_CHARACTER 8 -#define wxSTC_SCRIPTOL_STRINGEOL 9 -#define wxSTC_SCRIPTOL_KEYWORD 10 -#define wxSTC_SCRIPTOL_OPERATOR 11 -#define wxSTC_SCRIPTOL_IDENTIFIER 12 -#define wxSTC_SCRIPTOL_TRIPLE 13 -#define wxSTC_SCRIPTOL_CLASSNAME 14 -#define wxSTC_SCRIPTOL_PREPROCESSOR 15 - -// Lexical states for SCLEX_ASM -#define wxSTC_ASM_DEFAULT 0 -#define wxSTC_ASM_COMMENT 1 -#define wxSTC_ASM_NUMBER 2 -#define wxSTC_ASM_STRING 3 -#define wxSTC_ASM_OPERATOR 4 -#define wxSTC_ASM_IDENTIFIER 5 -#define wxSTC_ASM_CPUINSTRUCTION 6 -#define wxSTC_ASM_MATHINSTRUCTION 7 -#define wxSTC_ASM_REGISTER 8 -#define wxSTC_ASM_DIRECTIVE 9 -#define wxSTC_ASM_DIRECTIVEOPERAND 10 -#define wxSTC_ASM_COMMENTBLOCK 11 -#define wxSTC_ASM_CHARACTER 12 -#define wxSTC_ASM_STRINGEOL 13 -#define wxSTC_ASM_EXTINSTRUCTION 14 - -// Lexical states for SCLEX_FORTRAN -#define wxSTC_F_DEFAULT 0 -#define wxSTC_F_COMMENT 1 -#define wxSTC_F_NUMBER 2 -#define wxSTC_F_STRING1 3 -#define wxSTC_F_STRING2 4 -#define wxSTC_F_STRINGEOL 5 -#define wxSTC_F_OPERATOR 6 -#define wxSTC_F_IDENTIFIER 7 -#define wxSTC_F_WORD 8 -#define wxSTC_F_WORD2 9 -#define wxSTC_F_WORD3 10 -#define wxSTC_F_PREPROCESSOR 11 -#define wxSTC_F_OPERATOR2 12 -#define wxSTC_F_LABEL 13 -#define wxSTC_F_CONTINUATION 14 - -// Lexical states for SCLEX_CSS -#define wxSTC_CSS_DEFAULT 0 -#define wxSTC_CSS_TAG 1 -#define wxSTC_CSS_CLASS 2 -#define wxSTC_CSS_PSEUDOCLASS 3 -#define wxSTC_CSS_UNKNOWN_PSEUDOCLASS 4 -#define wxSTC_CSS_OPERATOR 5 -#define wxSTC_CSS_IDENTIFIER 6 -#define wxSTC_CSS_UNKNOWN_IDENTIFIER 7 -#define wxSTC_CSS_VALUE 8 -#define wxSTC_CSS_COMMENT 9 -#define wxSTC_CSS_ID 10 -#define wxSTC_CSS_IMPORTANT 11 -#define wxSTC_CSS_DIRECTIVE 12 -#define wxSTC_CSS_DOUBLESTRING 13 -#define wxSTC_CSS_SINGLESTRING 14 -#define wxSTC_CSS_IDENTIFIER2 15 -#define wxSTC_CSS_ATTRIBUTE 16 - -// Lexical states for SCLEX_POV -#define wxSTC_POV_DEFAULT 0 -#define wxSTC_POV_COMMENT 1 -#define wxSTC_POV_COMMENTLINE 2 -#define wxSTC_POV_NUMBER 3 -#define wxSTC_POV_OPERATOR 4 -#define wxSTC_POV_IDENTIFIER 5 -#define wxSTC_POV_STRING 6 -#define wxSTC_POV_STRINGEOL 7 -#define wxSTC_POV_DIRECTIVE 8 -#define wxSTC_POV_BADDIRECTIVE 9 -#define wxSTC_POV_WORD2 10 -#define wxSTC_POV_WORD3 11 -#define wxSTC_POV_WORD4 12 -#define wxSTC_POV_WORD5 13 -#define wxSTC_POV_WORD6 14 -#define wxSTC_POV_WORD7 15 -#define wxSTC_POV_WORD8 16 - -// Lexical states for SCLEX_LOUT -#define wxSTC_LOUT_DEFAULT 0 -#define wxSTC_LOUT_COMMENT 1 -#define wxSTC_LOUT_NUMBER 2 -#define wxSTC_LOUT_WORD 3 -#define wxSTC_LOUT_WORD2 4 -#define wxSTC_LOUT_WORD3 5 -#define wxSTC_LOUT_WORD4 6 -#define wxSTC_LOUT_STRING 7 -#define wxSTC_LOUT_OPERATOR 8 -#define wxSTC_LOUT_IDENTIFIER 9 -#define wxSTC_LOUT_STRINGEOL 10 - -// Lexical states for SCLEX_ESCRIPT -#define wxSTC_ESCRIPT_DEFAULT 0 -#define wxSTC_ESCRIPT_COMMENT 1 -#define wxSTC_ESCRIPT_COMMENTLINE 2 -#define wxSTC_ESCRIPT_COMMENTDOC 3 -#define wxSTC_ESCRIPT_NUMBER 4 -#define wxSTC_ESCRIPT_WORD 5 -#define wxSTC_ESCRIPT_STRING 6 -#define wxSTC_ESCRIPT_OPERATOR 7 -#define wxSTC_ESCRIPT_IDENTIFIER 8 -#define wxSTC_ESCRIPT_BRACE 9 -#define wxSTC_ESCRIPT_WORD2 10 -#define wxSTC_ESCRIPT_WORD3 11 - -// Lexical states for SCLEX_PS -#define wxSTC_PS_DEFAULT 0 -#define wxSTC_PS_COMMENT 1 -#define wxSTC_PS_DSC_COMMENT 2 -#define wxSTC_PS_DSC_VALUE 3 -#define wxSTC_PS_NUMBER 4 -#define wxSTC_PS_NAME 5 -#define wxSTC_PS_KEYWORD 6 -#define wxSTC_PS_LITERAL 7 -#define wxSTC_PS_IMMEVAL 8 -#define wxSTC_PS_PAREN_ARRAY 9 -#define wxSTC_PS_PAREN_DICT 10 -#define wxSTC_PS_PAREN_PROC 11 -#define wxSTC_PS_TEXT 12 -#define wxSTC_PS_HEXSTRING 13 -#define wxSTC_PS_BASE85STRING 14 -#define wxSTC_PS_BADSTRINGCHAR 15 - -// Lexical states for SCLEX_NSIS -#define wxSTC_NSIS_DEFAULT 0 -#define wxSTC_NSIS_COMMENT 1 -#define wxSTC_NSIS_STRINGDQ 2 -#define wxSTC_NSIS_STRINGLQ 3 -#define wxSTC_NSIS_STRINGRQ 4 -#define wxSTC_NSIS_FUNCTION 5 -#define wxSTC_NSIS_VARIABLE 6 -#define wxSTC_NSIS_LABEL 7 -#define wxSTC_NSIS_USERDEFINED 8 -#define wxSTC_NSIS_SECTIONDEF 9 -#define wxSTC_NSIS_SUBSECTIONDEF 10 -#define wxSTC_NSIS_IFDEFINEDEF 11 -#define wxSTC_NSIS_MACRODEF 12 -#define wxSTC_NSIS_STRINGVAR 13 -#define wxSTC_NSIS_NUMBER 14 -#define wxSTC_NSIS_SECTIONGROUP 15 -#define wxSTC_NSIS_PAGEEX 16 -#define wxSTC_NSIS_FUNCTIONDEF 17 -#define wxSTC_NSIS_COMMENTBOX 18 - -// Lexical states for SCLEX_MMIXAL -#define wxSTC_MMIXAL_LEADWS 0 -#define wxSTC_MMIXAL_COMMENT 1 -#define wxSTC_MMIXAL_LABEL 2 -#define wxSTC_MMIXAL_OPCODE 3 -#define wxSTC_MMIXAL_OPCODE_PRE 4 -#define wxSTC_MMIXAL_OPCODE_VALID 5 -#define wxSTC_MMIXAL_OPCODE_UNKNOWN 6 -#define wxSTC_MMIXAL_OPCODE_POST 7 -#define wxSTC_MMIXAL_OPERANDS 8 -#define wxSTC_MMIXAL_NUMBER 9 -#define wxSTC_MMIXAL_REF 10 -#define wxSTC_MMIXAL_CHAR 11 -#define wxSTC_MMIXAL_STRING 12 -#define wxSTC_MMIXAL_REGISTER 13 -#define wxSTC_MMIXAL_HEX 14 -#define wxSTC_MMIXAL_OPERATOR 15 -#define wxSTC_MMIXAL_SYMBOL 16 -#define wxSTC_MMIXAL_INCLUDE 17 - -// Lexical states for SCLEX_CLW -#define wxSTC_CLW_DEFAULT 0 -#define wxSTC_CLW_LABEL 1 -#define wxSTC_CLW_COMMENT 2 -#define wxSTC_CLW_STRING 3 -#define wxSTC_CLW_USER_IDENTIFIER 4 -#define wxSTC_CLW_INTEGER_CONSTANT 5 -#define wxSTC_CLW_REAL_CONSTANT 6 -#define wxSTC_CLW_PICTURE_STRING 7 -#define wxSTC_CLW_KEYWORD 8 -#define wxSTC_CLW_COMPILER_DIRECTIVE 9 -#define wxSTC_CLW_RUNTIME_EXPRESSIONS 10 -#define wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION 11 -#define wxSTC_CLW_STRUCTURE_DATA_TYPE 12 -#define wxSTC_CLW_ATTRIBUTE 13 -#define wxSTC_CLW_STANDARD_EQUATE 14 -#define wxSTC_CLW_ERROR 15 -#define wxSTC_CLW_DEPRECATED 16 - -// Lexical states for SCLEX_LOT -#define wxSTC_LOT_DEFAULT 0 -#define wxSTC_LOT_HEADER 1 -#define wxSTC_LOT_BREAK 2 -#define wxSTC_LOT_SET 3 -#define wxSTC_LOT_PASS 4 -#define wxSTC_LOT_FAIL 5 -#define wxSTC_LOT_ABORT 6 - -// Lexical states for SCLEX_YAML -#define wxSTC_YAML_DEFAULT 0 -#define wxSTC_YAML_COMMENT 1 -#define wxSTC_YAML_IDENTIFIER 2 -#define wxSTC_YAML_KEYWORD 3 -#define wxSTC_YAML_NUMBER 4 -#define wxSTC_YAML_REFERENCE 5 -#define wxSTC_YAML_DOCUMENT 6 -#define wxSTC_YAML_TEXT 7 -#define wxSTC_YAML_ERROR 8 - -// Lexical states for SCLEX_TEX -#define wxSTC_TEX_DEFAULT 0 -#define wxSTC_TEX_SPECIAL 1 -#define wxSTC_TEX_GROUP 2 -#define wxSTC_TEX_SYMBOL 3 -#define wxSTC_TEX_COMMAND 4 -#define wxSTC_TEX_TEXT 5 -#define wxSTC_METAPOST_DEFAULT 0 -#define wxSTC_METAPOST_SPECIAL 1 -#define wxSTC_METAPOST_GROUP 2 -#define wxSTC_METAPOST_SYMBOL 3 -#define wxSTC_METAPOST_COMMAND 4 -#define wxSTC_METAPOST_TEXT 5 -#define wxSTC_METAPOST_EXTRA 6 - -// Lexical states for SCLEX_ERLANG -#define wxSTC_ERLANG_DEFAULT 0 -#define wxSTC_ERLANG_COMMENT 1 -#define wxSTC_ERLANG_VARIABLE 2 -#define wxSTC_ERLANG_NUMBER 3 -#define wxSTC_ERLANG_KEYWORD 4 -#define wxSTC_ERLANG_STRING 5 -#define wxSTC_ERLANG_OPERATOR 6 -#define wxSTC_ERLANG_ATOM 7 -#define wxSTC_ERLANG_FUNCTION_NAME 8 -#define wxSTC_ERLANG_CHARACTER 9 -#define wxSTC_ERLANG_MACRO 10 -#define wxSTC_ERLANG_RECORD 11 -#define wxSTC_ERLANG_SEPARATOR 12 -#define wxSTC_ERLANG_NODE_NAME 13 -#define wxSTC_ERLANG_UNKNOWN 31 - -// Lexical states for SCLEX_OCTAVE are identical to MatLab -// Lexical states for SCLEX_MSSQL -#define wxSTC_MSSQL_DEFAULT 0 -#define wxSTC_MSSQL_COMMENT 1 -#define wxSTC_MSSQL_LINE_COMMENT 2 -#define wxSTC_MSSQL_NUMBER 3 -#define wxSTC_MSSQL_STRING 4 -#define wxSTC_MSSQL_OPERATOR 5 -#define wxSTC_MSSQL_IDENTIFIER 6 -#define wxSTC_MSSQL_VARIABLE 7 -#define wxSTC_MSSQL_COLUMN_NAME 8 -#define wxSTC_MSSQL_STATEMENT 9 -#define wxSTC_MSSQL_DATATYPE 10 -#define wxSTC_MSSQL_SYSTABLE 11 -#define wxSTC_MSSQL_GLOBAL_VARIABLE 12 -#define wxSTC_MSSQL_FUNCTION 13 -#define wxSTC_MSSQL_STORED_PROCEDURE 14 -#define wxSTC_MSSQL_DEFAULT_PREF_DATATYPE 15 -#define wxSTC_MSSQL_COLUMN_NAME_2 16 - -// Lexical states for SCLEX_VERILOG -#define wxSTC_V_DEFAULT 0 -#define wxSTC_V_COMMENT 1 -#define wxSTC_V_COMMENTLINE 2 -#define wxSTC_V_COMMENTLINEBANG 3 -#define wxSTC_V_NUMBER 4 -#define wxSTC_V_WORD 5 -#define wxSTC_V_STRING 6 -#define wxSTC_V_WORD2 7 -#define wxSTC_V_WORD3 8 -#define wxSTC_V_PREPROCESSOR 9 -#define wxSTC_V_OPERATOR 10 -#define wxSTC_V_IDENTIFIER 11 -#define wxSTC_V_STRINGEOL 12 -#define wxSTC_V_USER 19 - -// Lexical states for SCLEX_KIX -#define wxSTC_KIX_DEFAULT 0 -#define wxSTC_KIX_COMMENT 1 -#define wxSTC_KIX_STRING1 2 -#define wxSTC_KIX_STRING2 3 -#define wxSTC_KIX_NUMBER 4 -#define wxSTC_KIX_VAR 5 -#define wxSTC_KIX_MACRO 6 -#define wxSTC_KIX_KEYWORD 7 -#define wxSTC_KIX_FUNCTIONS 8 -#define wxSTC_KIX_OPERATOR 9 -#define wxSTC_KIX_IDENTIFIER 31 - -// Lexical states for SCLEX_GUI4CLI -#define wxSTC_GC_DEFAULT 0 -#define wxSTC_GC_COMMENTLINE 1 -#define wxSTC_GC_COMMENTBLOCK 2 -#define wxSTC_GC_GLOBAL 3 -#define wxSTC_GC_EVENT 4 -#define wxSTC_GC_ATTRIBUTE 5 -#define wxSTC_GC_CONTROL 6 -#define wxSTC_GC_COMMAND 7 -#define wxSTC_GC_STRING 8 -#define wxSTC_GC_OPERATOR 9 - -// Lexical states for SCLEX_SPECMAN -#define wxSTC_SN_DEFAULT 0 -#define wxSTC_SN_CODE 1 -#define wxSTC_SN_COMMENTLINE 2 -#define wxSTC_SN_COMMENTLINEBANG 3 -#define wxSTC_SN_NUMBER 4 -#define wxSTC_SN_WORD 5 -#define wxSTC_SN_STRING 6 -#define wxSTC_SN_WORD2 7 -#define wxSTC_SN_WORD3 8 -#define wxSTC_SN_PREPROCESSOR 9 -#define wxSTC_SN_OPERATOR 10 -#define wxSTC_SN_IDENTIFIER 11 -#define wxSTC_SN_STRINGEOL 12 -#define wxSTC_SN_REGEXTAG 13 -#define wxSTC_SN_SIGNAL 14 -#define wxSTC_SN_USER 19 - -// Lexical states for SCLEX_AU3 -#define wxSTC_AU3_DEFAULT 0 -#define wxSTC_AU3_COMMENT 1 -#define wxSTC_AU3_COMMENTBLOCK 2 -#define wxSTC_AU3_NUMBER 3 -#define wxSTC_AU3_FUNCTION 4 -#define wxSTC_AU3_KEYWORD 5 -#define wxSTC_AU3_MACRO 6 -#define wxSTC_AU3_STRING 7 -#define wxSTC_AU3_OPERATOR 8 -#define wxSTC_AU3_VARIABLE 9 -#define wxSTC_AU3_SENT 10 -#define wxSTC_AU3_PREPROCESSOR 11 -#define wxSTC_AU3_SPECIAL 12 -#define wxSTC_AU3_EXPAND 13 -#define wxSTC_AU3_COMOBJ 14 -#define wxSTC_AU3_UDF 15 - -// Lexical states for SCLEX_APDL -#define wxSTC_APDL_DEFAULT 0 -#define wxSTC_APDL_COMMENT 1 -#define wxSTC_APDL_COMMENTBLOCK 2 -#define wxSTC_APDL_NUMBER 3 -#define wxSTC_APDL_STRING 4 -#define wxSTC_APDL_OPERATOR 5 -#define wxSTC_APDL_WORD 6 -#define wxSTC_APDL_PROCESSOR 7 -#define wxSTC_APDL_COMMAND 8 -#define wxSTC_APDL_SLASHCOMMAND 9 -#define wxSTC_APDL_STARCOMMAND 10 -#define wxSTC_APDL_ARGUMENT 11 -#define wxSTC_APDL_FUNCTION 12 - -// Lexical states for SCLEX_BASH -#define wxSTC_SH_DEFAULT 0 -#define wxSTC_SH_ERROR 1 -#define wxSTC_SH_COMMENTLINE 2 -#define wxSTC_SH_NUMBER 3 -#define wxSTC_SH_WORD 4 -#define wxSTC_SH_STRING 5 -#define wxSTC_SH_CHARACTER 6 -#define wxSTC_SH_OPERATOR 7 -#define wxSTC_SH_IDENTIFIER 8 -#define wxSTC_SH_SCALAR 9 -#define wxSTC_SH_PARAM 10 -#define wxSTC_SH_BACKTICKS 11 -#define wxSTC_SH_HERE_DELIM 12 -#define wxSTC_SH_HERE_Q 13 - -// Lexical states for SCLEX_ASN1 -#define wxSTC_ASN1_DEFAULT 0 -#define wxSTC_ASN1_COMMENT 1 -#define wxSTC_ASN1_IDENTIFIER 2 -#define wxSTC_ASN1_STRING 3 -#define wxSTC_ASN1_OID 4 -#define wxSTC_ASN1_SCALAR 5 -#define wxSTC_ASN1_KEYWORD 6 -#define wxSTC_ASN1_ATTRIBUTE 7 -#define wxSTC_ASN1_DESCRIPTOR 8 -#define wxSTC_ASN1_TYPE 9 -#define wxSTC_ASN1_OPERATOR 10 - -// Lexical states for SCLEX_VHDL -#define wxSTC_VHDL_DEFAULT 0 -#define wxSTC_VHDL_COMMENT 1 -#define wxSTC_VHDL_COMMENTLINEBANG 2 -#define wxSTC_VHDL_NUMBER 3 -#define wxSTC_VHDL_STRING 4 -#define wxSTC_VHDL_OPERATOR 5 -#define wxSTC_VHDL_IDENTIFIER 6 -#define wxSTC_VHDL_STRINGEOL 7 -#define wxSTC_VHDL_KEYWORD 8 -#define wxSTC_VHDL_STDOPERATOR 9 -#define wxSTC_VHDL_ATTRIBUTE 10 -#define wxSTC_VHDL_STDFUNCTION 11 -#define wxSTC_VHDL_STDPACKAGE 12 -#define wxSTC_VHDL_STDTYPE 13 -#define wxSTC_VHDL_USERWORD 14 - -// Lexical states for SCLEX_CAML -#define wxSTC_CAML_DEFAULT 0 -#define wxSTC_CAML_IDENTIFIER 1 -#define wxSTC_CAML_TAGNAME 2 -#define wxSTC_CAML_KEYWORD 3 -#define wxSTC_CAML_KEYWORD2 4 -#define wxSTC_CAML_KEYWORD3 5 -#define wxSTC_CAML_LINENUM 6 -#define wxSTC_CAML_OPERATOR 7 -#define wxSTC_CAML_NUMBER 8 -#define wxSTC_CAML_CHAR 9 -#define wxSTC_CAML_STRING 11 -#define wxSTC_CAML_COMMENT 12 -#define wxSTC_CAML_COMMENT1 13 -#define wxSTC_CAML_COMMENT2 14 -#define wxSTC_CAML_COMMENT3 15 - -// Lexical states for SCLEX_HASKELL -#define wxSTC_HA_DEFAULT 0 -#define wxSTC_HA_IDENTIFIER 1 -#define wxSTC_HA_KEYWORD 2 -#define wxSTC_HA_NUMBER 3 -#define wxSTC_HA_STRING 4 -#define wxSTC_HA_CHARACTER 5 -#define wxSTC_HA_CLASS 6 -#define wxSTC_HA_MODULE 7 -#define wxSTC_HA_CAPITAL 8 -#define wxSTC_HA_DATA 9 -#define wxSTC_HA_IMPORT 10 -#define wxSTC_HA_OPERATOR 11 -#define wxSTC_HA_INSTANCE 12 -#define wxSTC_HA_COMMENTLINE 13 -#define wxSTC_HA_COMMENTBLOCK 14 -#define wxSTC_HA_COMMENTBLOCK2 15 -#define wxSTC_HA_COMMENTBLOCK3 16 - -// Lexical states of SCLEX_TADS3 -#define wxSTC_T3_DEFAULT 0 -#define wxSTC_T3_X_DEFAULT 1 -#define wxSTC_T3_PREPROCESSOR 2 -#define wxSTC_T3_BLOCK_COMMENT 3 -#define wxSTC_T3_LINE_COMMENT 4 -#define wxSTC_T3_OPERATOR 5 -#define wxSTC_T3_KEYWORD 6 -#define wxSTC_T3_NUMBER 7 -#define wxSTC_T3_IDENTIFIER 8 -#define wxSTC_T3_S_STRING 9 -#define wxSTC_T3_D_STRING 10 -#define wxSTC_T3_X_STRING 11 -#define wxSTC_T3_LIB_DIRECTIVE 12 -#define wxSTC_T3_MSG_PARAM 13 -#define wxSTC_T3_HTML_TAG 14 -#define wxSTC_T3_HTML_DEFAULT 15 -#define wxSTC_T3_HTML_STRING 16 -#define wxSTC_T3_USER1 17 -#define wxSTC_T3_USER2 18 -#define wxSTC_T3_USER3 19 - -// Lexical states for SCLEX_REBOL -#define wxSTC_REBOL_DEFAULT 0 -#define wxSTC_REBOL_COMMENTLINE 1 -#define wxSTC_REBOL_COMMENTBLOCK 2 -#define wxSTC_REBOL_PREFACE 3 -#define wxSTC_REBOL_OPERATOR 4 -#define wxSTC_REBOL_CHARACTER 5 -#define wxSTC_REBOL_QUOTEDSTRING 6 -#define wxSTC_REBOL_BRACEDSTRING 7 -#define wxSTC_REBOL_NUMBER 8 -#define wxSTC_REBOL_PAIR 9 -#define wxSTC_REBOL_TUPLE 10 -#define wxSTC_REBOL_BINARY 11 -#define wxSTC_REBOL_MONEY 12 -#define wxSTC_REBOL_ISSUE 13 -#define wxSTC_REBOL_TAG 14 -#define wxSTC_REBOL_FILE 15 -#define wxSTC_REBOL_EMAIL 16 -#define wxSTC_REBOL_URL 17 -#define wxSTC_REBOL_DATE 18 -#define wxSTC_REBOL_TIME 19 -#define wxSTC_REBOL_IDENTIFIER 20 -#define wxSTC_REBOL_WORD 21 -#define wxSTC_REBOL_WORD2 22 -#define wxSTC_REBOL_WORD3 23 -#define wxSTC_REBOL_WORD4 24 -#define wxSTC_REBOL_WORD5 25 -#define wxSTC_REBOL_WORD6 26 -#define wxSTC_REBOL_WORD7 27 -#define wxSTC_REBOL_WORD8 28 - -// Lexical states for SCLEX_SQL -#define wxSTC_SQL_DEFAULT 0 -#define wxSTC_SQL_COMMENT 1 -#define wxSTC_SQL_COMMENTLINE 2 -#define wxSTC_SQL_COMMENTDOC 3 -#define wxSTC_SQL_NUMBER 4 -#define wxSTC_SQL_WORD 5 -#define wxSTC_SQL_STRING 6 -#define wxSTC_SQL_CHARACTER 7 -#define wxSTC_SQL_SQLPLUS 8 -#define wxSTC_SQL_SQLPLUS_PROMPT 9 -#define wxSTC_SQL_OPERATOR 10 -#define wxSTC_SQL_IDENTIFIER 11 -#define wxSTC_SQL_SQLPLUS_COMMENT 13 -#define wxSTC_SQL_COMMENTLINEDOC 15 -#define wxSTC_SQL_WORD2 16 -#define wxSTC_SQL_COMMENTDOCKEYWORD 17 -#define wxSTC_SQL_COMMENTDOCKEYWORDERROR 18 -#define wxSTC_SQL_USER1 19 -#define wxSTC_SQL_USER2 20 -#define wxSTC_SQL_USER3 21 -#define wxSTC_SQL_USER4 22 -#define wxSTC_SQL_QUOTEDIDENTIFIER 23 - -// Lexical states for SCLEX_SMALLTALK -#define wxSTC_ST_DEFAULT 0 -#define wxSTC_ST_STRING 1 -#define wxSTC_ST_NUMBER 2 -#define wxSTC_ST_COMMENT 3 -#define wxSTC_ST_SYMBOL 4 -#define wxSTC_ST_BINARY 5 -#define wxSTC_ST_BOOL 6 -#define wxSTC_ST_SELF 7 -#define wxSTC_ST_SUPER 8 -#define wxSTC_ST_NIL 9 -#define wxSTC_ST_GLOBAL 10 -#define wxSTC_ST_RETURN 11 -#define wxSTC_ST_SPECIAL 12 -#define wxSTC_ST_KWSEND 13 -#define wxSTC_ST_ASSIGN 14 -#define wxSTC_ST_CHARACTER 15 -#define wxSTC_ST_SPEC_SEL 16 - -// Lexical states for SCLEX_FLAGSHIP (clipper) -#define wxSTC_FS_DEFAULT 0 -#define wxSTC_FS_COMMENT 1 -#define wxSTC_FS_COMMENTLINE 2 -#define wxSTC_FS_COMMENTDOC 3 -#define wxSTC_FS_COMMENTLINEDOC 4 -#define wxSTC_FS_COMMENTDOCKEYWORD 5 -#define wxSTC_FS_COMMENTDOCKEYWORDERROR 6 -#define wxSTC_FS_KEYWORD 7 -#define wxSTC_FS_KEYWORD2 8 -#define wxSTC_FS_KEYWORD3 9 -#define wxSTC_FS_KEYWORD4 10 -#define wxSTC_FS_NUMBER 11 -#define wxSTC_FS_STRING 12 -#define wxSTC_FS_PREPROCESSOR 13 -#define wxSTC_FS_OPERATOR 14 -#define wxSTC_FS_IDENTIFIER 15 -#define wxSTC_FS_DATE 16 -#define wxSTC_FS_STRINGEOL 17 -#define wxSTC_FS_CONSTANT 18 -#define wxSTC_FS_ASM 19 -#define wxSTC_FS_LABEL 20 -#define wxSTC_FS_ERROR 21 -#define wxSTC_FS_HEXNUMBER 22 -#define wxSTC_FS_BINNUMBER 23 - -// Lexical states for SCLEX_CSOUND -#define wxSTC_CSOUND_DEFAULT 0 -#define wxSTC_CSOUND_COMMENT 1 -#define wxSTC_CSOUND_NUMBER 2 -#define wxSTC_CSOUND_OPERATOR 3 -#define wxSTC_CSOUND_INSTR 4 -#define wxSTC_CSOUND_IDENTIFIER 5 -#define wxSTC_CSOUND_OPCODE 6 -#define wxSTC_CSOUND_HEADERSTMT 7 -#define wxSTC_CSOUND_USERKEYWORD 8 -#define wxSTC_CSOUND_COMMENTBLOCK 9 -#define wxSTC_CSOUND_PARAM 10 -#define wxSTC_CSOUND_ARATE_VAR 11 -#define wxSTC_CSOUND_KRATE_VAR 12 -#define wxSTC_CSOUND_IRATE_VAR 13 -#define wxSTC_CSOUND_GLOBAL_VAR 14 -#define wxSTC_CSOUND_STRINGEOL 15 - -// Lexical states for SCLEX_INNOSETUP -#define wxSTC_INNO_DEFAULT 0 -#define wxSTC_INNO_COMMENT 1 -#define wxSTC_INNO_KEYWORD 2 -#define wxSTC_INNO_PARAMETER 3 -#define wxSTC_INNO_SECTION 4 -#define wxSTC_INNO_PREPROC 5 -#define wxSTC_INNO_PREPROC_INLINE 6 -#define wxSTC_INNO_COMMENT_PASCAL 7 -#define wxSTC_INNO_KEYWORD_PASCAL 8 -#define wxSTC_INNO_KEYWORD_USER 9 -#define wxSTC_INNO_STRING_DOUBLE 10 -#define wxSTC_INNO_STRING_SINGLE 11 -#define wxSTC_INNO_IDENTIFIER 12 - -// Lexical states for SCLEX_OPAL -#define wxSTC_OPAL_SPACE 0 -#define wxSTC_OPAL_COMMENT_BLOCK 1 -#define wxSTC_OPAL_COMMENT_LINE 2 -#define wxSTC_OPAL_INTEGER 3 -#define wxSTC_OPAL_KEYWORD 4 -#define wxSTC_OPAL_SORT 5 -#define wxSTC_OPAL_STRING 6 -#define wxSTC_OPAL_PAR 7 -#define wxSTC_OPAL_BOOL_CONST 8 -#define wxSTC_OPAL_DEFAULT 32 - -// Lexical states for SCLEX_SPICE -#define wxSTC_SPICE_DEFAULT 0 -#define wxSTC_SPICE_IDENTIFIER 1 -#define wxSTC_SPICE_KEYWORD 2 -#define wxSTC_SPICE_KEYWORD2 3 -#define wxSTC_SPICE_KEYWORD3 4 -#define wxSTC_SPICE_NUMBER 5 -#define wxSTC_SPICE_DELIMITER 6 -#define wxSTC_SPICE_VALUE 7 -#define wxSTC_SPICE_COMMENTLINE 8 - - -//----------------------------------------- -// Commands that can be bound to keystrokes - - -// Redoes the next action on the undo history. -#define wxSTC_CMD_REDO 2011 - -// Select all the text in the document. -#define wxSTC_CMD_SELECTALL 2013 - -// Undo one action in the undo history. -#define wxSTC_CMD_UNDO 2176 - -// Cut the selection to the clipboard. -#define wxSTC_CMD_CUT 2177 - -// Copy the selection to the clipboard. -#define wxSTC_CMD_COPY 2178 - -// Paste the contents of the clipboard into the document replacing the selection. -#define wxSTC_CMD_PASTE 2179 - -// Clear the selection. -#define wxSTC_CMD_CLEAR 2180 - -// Move caret down one line. -#define wxSTC_CMD_LINEDOWN 2300 - -// Move caret down one line extending selection to new caret position. -#define wxSTC_CMD_LINEDOWNEXTEND 2301 - -// Move caret up one line. -#define wxSTC_CMD_LINEUP 2302 - -// Move caret up one line extending selection to new caret position. -#define wxSTC_CMD_LINEUPEXTEND 2303 - -// Move caret left one character. -#define wxSTC_CMD_CHARLEFT 2304 - -// Move caret left one character extending selection to new caret position. -#define wxSTC_CMD_CHARLEFTEXTEND 2305 - -// Move caret right one character. -#define wxSTC_CMD_CHARRIGHT 2306 - -// Move caret right one character extending selection to new caret position. -#define wxSTC_CMD_CHARRIGHTEXTEND 2307 - -// Move caret left one word. -#define wxSTC_CMD_WORDLEFT 2308 - -// Move caret left one word extending selection to new caret position. -#define wxSTC_CMD_WORDLEFTEXTEND 2309 - -// Move caret right one word. -#define wxSTC_CMD_WORDRIGHT 2310 - -// Move caret right one word extending selection to new caret position. -#define wxSTC_CMD_WORDRIGHTEXTEND 2311 - -// Move caret to first position on line. -#define wxSTC_CMD_HOME 2312 - -// Move caret to first position on line extending selection to new caret position. -#define wxSTC_CMD_HOMEEXTEND 2313 - -// Move caret to last position on line. -#define wxSTC_CMD_LINEEND 2314 - -// Move caret to last position on line extending selection to new caret position. -#define wxSTC_CMD_LINEENDEXTEND 2315 - -// Move caret to first position in document. -#define wxSTC_CMD_DOCUMENTSTART 2316 - -// Move caret to first position in document extending selection to new caret position. -#define wxSTC_CMD_DOCUMENTSTARTEXTEND 2317 - -// Move caret to last position in document. -#define wxSTC_CMD_DOCUMENTEND 2318 - -// Move caret to last position in document extending selection to new caret position. -#define wxSTC_CMD_DOCUMENTENDEXTEND 2319 - -// Move caret one page up. -#define wxSTC_CMD_PAGEUP 2320 - -// Move caret one page up extending selection to new caret position. -#define wxSTC_CMD_PAGEUPEXTEND 2321 - -// Move caret one page down. -#define wxSTC_CMD_PAGEDOWN 2322 - -// Move caret one page down extending selection to new caret position. -#define wxSTC_CMD_PAGEDOWNEXTEND 2323 - -// Switch from insert to overtype mode or the reverse. -#define wxSTC_CMD_EDITTOGGLEOVERTYPE 2324 - -// Cancel any modes such as call tip or auto-completion list display. -#define wxSTC_CMD_CANCEL 2325 - -// Delete the selection or if no selection, the character before the caret. -#define wxSTC_CMD_DELETEBACK 2326 - -// If selection is empty or all on one line replace the selection with a tab character. -// If more than one line selected, indent the lines. -#define wxSTC_CMD_TAB 2327 - -// Dedent the selected lines. -#define wxSTC_CMD_BACKTAB 2328 - -// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. -#define wxSTC_CMD_NEWLINE 2329 - -// Insert a Form Feed character. -#define wxSTC_CMD_FORMFEED 2330 - -// Move caret to before first visible character on line. -// If already there move to first character on line. -#define wxSTC_CMD_VCHOME 2331 - -// Like VCHome but extending selection to new caret position. -#define wxSTC_CMD_VCHOMEEXTEND 2332 - -// Magnify the displayed text by increasing the sizes by 1 point. -#define wxSTC_CMD_ZOOMIN 2333 - -// Make the displayed text smaller by decreasing the sizes by 1 point. -#define wxSTC_CMD_ZOOMOUT 2334 - -// Delete the word to the left of the caret. -#define wxSTC_CMD_DELWORDLEFT 2335 - -// Delete the word to the right of the caret. -#define wxSTC_CMD_DELWORDRIGHT 2336 - -// Cut the line containing the caret. -#define wxSTC_CMD_LINECUT 2337 - -// Delete the line containing the caret. -#define wxSTC_CMD_LINEDELETE 2338 - -// Switch the current line with the previous. -#define wxSTC_CMD_LINETRANSPOSE 2339 - -// Duplicate the current line. -#define wxSTC_CMD_LINEDUPLICATE 2404 - -// Transform the selection to lower case. -#define wxSTC_CMD_LOWERCASE 2340 - -// Transform the selection to upper case. -#define wxSTC_CMD_UPPERCASE 2341 - -// Scroll the document down, keeping the caret visible. -#define wxSTC_CMD_LINESCROLLDOWN 2342 - -// Scroll the document up, keeping the caret visible. -#define wxSTC_CMD_LINESCROLLUP 2343 - -// Delete the selection or if no selection, the character before the caret. -// Will not delete the character before at the start of a line. -#define wxSTC_CMD_DELETEBACKNOTLINE 2344 - -// Move caret to first position on display line. -#define wxSTC_CMD_HOMEDISPLAY 2345 - -// Move caret to first position on display line extending selection to -// new caret position. -#define wxSTC_CMD_HOMEDISPLAYEXTEND 2346 - -// Move caret to last position on display line. -#define wxSTC_CMD_LINEENDDISPLAY 2347 - -// Move caret to last position on display line extending selection to new -// caret position. -#define wxSTC_CMD_LINEENDDISPLAYEXTEND 2348 - -// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? -// except they behave differently when word-wrap is enabled: -// They go first to the start / end of the display line, like (Home|LineEnd)Display -// The difference is that, the cursor is already at the point, it goes on to the start -// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. -#define wxSTC_CMD_HOMEWRAP 2349 -#define wxSTC_CMD_HOMEWRAPEXTEND 2450 -#define wxSTC_CMD_LINEENDWRAP 2451 -#define wxSTC_CMD_LINEENDWRAPEXTEND 2452 -#define wxSTC_CMD_VCHOMEWRAP 2453 -#define wxSTC_CMD_VCHOMEWRAPEXTEND 2454 - -// Copy the line containing the caret. -#define wxSTC_CMD_LINECOPY 2455 - -// Move to the previous change in capitalisation. -#define wxSTC_CMD_WORDPARTLEFT 2390 - -// Move to the previous change in capitalisation extending selection -// to new caret position. -#define wxSTC_CMD_WORDPARTLEFTEXTEND 2391 - -// Move to the change next in capitalisation. -#define wxSTC_CMD_WORDPARTRIGHT 2392 - -// Move to the next change in capitalisation extending selection -// to new caret position. -#define wxSTC_CMD_WORDPARTRIGHTEXTEND 2393 - -// Delete back from the current position to the start of the line. -#define wxSTC_CMD_DELLINELEFT 2395 - -// Delete forwards from the current position to the end of the line. -#define wxSTC_CMD_DELLINERIGHT 2396 - -// Move caret between paragraphs (delimited by empty lines). -#define wxSTC_CMD_PARADOWN 2413 -#define wxSTC_CMD_PARADOWNEXTEND 2414 -#define wxSTC_CMD_PARAUP 2415 -#define wxSTC_CMD_PARAUPEXTEND 2416 - -// Move caret down one line, extending rectangular selection to new caret position. -#define wxSTC_CMD_LINEDOWNRECTEXTEND 2426 - -// Move caret up one line, extending rectangular selection to new caret position. -#define wxSTC_CMD_LINEUPRECTEXTEND 2427 - -// Move caret left one character, extending rectangular selection to new caret position. -#define wxSTC_CMD_CHARLEFTRECTEXTEND 2428 - -// Move caret right one character, extending rectangular selection to new caret position. -#define wxSTC_CMD_CHARRIGHTRECTEXTEND 2429 - -// Move caret to first position on line, extending rectangular selection to new caret position. -#define wxSTC_CMD_HOMERECTEXTEND 2430 - -// Move caret to before first visible character on line. -// If already there move to first character on line. -// In either case, extend rectangular selection to new caret position. -#define wxSTC_CMD_VCHOMERECTEXTEND 2431 - -// Move caret to last position on line, extending rectangular selection to new caret position. -#define wxSTC_CMD_LINEENDRECTEXTEND 2432 - -// Move caret one page up, extending rectangular selection to new caret position. -#define wxSTC_CMD_PAGEUPRECTEXTEND 2433 - -// Move caret one page down, extending rectangular selection to new caret position. -#define wxSTC_CMD_PAGEDOWNRECTEXTEND 2434 - -// Move caret to top of page, or one page up if already at top of page. -#define wxSTC_CMD_STUTTEREDPAGEUP 2435 - -// Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. -#define wxSTC_CMD_STUTTEREDPAGEUPEXTEND 2436 - -// Move caret to bottom of page, or one page down if already at bottom of page. -#define wxSTC_CMD_STUTTEREDPAGEDOWN 2437 - -// Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. -#define wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND 2438 - -// Move caret left one word, position cursor at end of word. -#define wxSTC_CMD_WORDLEFTEND 2439 - -// Move caret left one word, position cursor at end of word, extending selection to new caret position. -#define wxSTC_CMD_WORDLEFTENDEXTEND 2440 - -// Move caret right one word, position cursor at end of word. -#define wxSTC_CMD_WORDRIGHTEND 2441 - -// Move caret right one word, position cursor at end of word, extending selection to new caret position. -#define wxSTC_CMD_WORDRIGHTENDEXTEND 2442 - - -// END of generated section -//---------------------------------------------------------------------- - -class ScintillaWX; // forward declare -class WordList; -struct SCNotification; - -#ifndef SWIG -extern WXDLLIMPEXP_STC const wxChar* wxSTCNameStr; -class WXDLLIMPEXP_STC wxStyledTextCtrl; -class WXDLLIMPEXP_STC wxStyledTextEvent; -#endif - -//---------------------------------------------------------------------- - -class WXDLLIMPEXP_STC wxStyledTextCtrl : public wxControl { -public: - -#ifdef SWIG - %pythonAppend wxStyledTextCtrl "self._setOORInfo(self)" - %pythonAppend wxStyledTextCtrl() "" - - wxStyledTextCtrl(wxWindow *parent, wxWindowID id=wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxPySTCNameStr); - %RenameCtor(PreStyledTextCtrl, wxStyledTextCtrl()); - -#else - wxStyledTextCtrl(wxWindow *parent, wxWindowID id=wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxSTCNameStr); - wxStyledTextCtrl() { m_swx = NULL; } - ~wxStyledTextCtrl(); - -#endif - - bool Create(wxWindow *parent, wxWindowID id=wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxSTCNameStr); - - -//---------------------------------------------------------------------- -// BEGIN generated section. The following code is automatically generated -// by gen_iface.py. Do not edit this file. Edit stc.h.in instead -// and regenerate - - - // Add text to the document at current position. - void AddText(const wxString& text); - - // Add array of cells to document. - void AddStyledText(const wxMemoryBuffer& data); - - // Insert string at a position. - void InsertText(int pos, const wxString& text); - - // Delete all text in the document. - void ClearAll(); - - // Set all style bytes to 0, remove all folding information. - void ClearDocumentStyle(); - - // Returns the number of characters in the document. - int GetLength(); - - // Returns the character byte at the position. - int GetCharAt(int pos); - - // Returns the position of the caret. - int GetCurrentPos(); - - // Returns the position of the opposite end of the selection to the caret. - int GetAnchor(); - - // Returns the style byte at the position. - int GetStyleAt(int pos); - - // Redoes the next action on the undo history. - void Redo(); - - // Choose between collecting actions into the undo - // history and discarding them. - void SetUndoCollection(bool collectUndo); - - // Select all the text in the document. - void SelectAll(); - - // Remember the current position in the undo history as the position - // at which the document was saved. - void SetSavePoint(); - - // Retrieve a buffer of cells. - wxMemoryBuffer GetStyledText(int startPos, int endPos); - - // Are there any redoable actions in the undo history? - bool CanRedo(); - - // Retrieve the line number at which a particular marker is located. - int MarkerLineFromHandle(int handle); - - // Delete a marker. - void MarkerDeleteHandle(int handle); - - // Is undo history being collected? - bool GetUndoCollection(); - - // Are white space characters currently visible? - // Returns one of SCWS_* constants. - int GetViewWhiteSpace(); - - // Make white space characters invisible, always visible or visible outside indentation. - void SetViewWhiteSpace(int viewWS); - - // Find the position from a point within the window. - int PositionFromPoint(wxPoint pt); - - // Find the position from a point within the window but return - // INVALID_POSITION if not close to text. - int PositionFromPointClose(int x, int y); - - // Set caret to start of a line and ensure it is visible. - void GotoLine(int line); - - // Set caret to a position and ensure it is visible. - void GotoPos(int pos); - - // Set the selection anchor to a position. The anchor is the opposite - // end of the selection from the caret. - void SetAnchor(int posAnchor); - - // Retrieve the text of the line containing the caret. - // Returns the index of the caret on the line. - #ifdef SWIG - wxString GetCurLine(int* OUTPUT); -#else - wxString GetCurLine(int* linePos=NULL); -#endif - - // Retrieve the position of the last correctly styled character. - int GetEndStyled(); - - // Convert all line endings in the document to one mode. - void ConvertEOLs(int eolMode); - - // Retrieve the current end of line mode - one of CRLF, CR, or LF. - int GetEOLMode(); - - // Set the current end of line mode. - void SetEOLMode(int eolMode); - - // Set the current styling position to pos and the styling mask to mask. - // The styling mask can be used to protect some bits in each styling byte from modification. - void StartStyling(int pos, int mask); - - // Change style from current styling position for length characters to a style - // and move the current styling position to after this newly styled segment. - void SetStyling(int length, int style); - - // Is drawing done first into a buffer or direct to the screen? - bool GetBufferedDraw(); - - // If drawing is buffered then each line of text is drawn into a bitmap buffer - // before drawing it to the screen to avoid flicker. - void SetBufferedDraw(bool buffered); - - // Change the visible size of a tab to be a multiple of the width of a space character. - void SetTabWidth(int tabWidth); - - // Retrieve the visible size of a tab. - int GetTabWidth(); - - // Set the code page used to interpret the bytes of the document as characters. - void SetCodePage(int codePage); - - // Set the symbol used for a particular marker number, - // and optionally the fore and background colours. - void MarkerDefine(int markerNumber, int markerSymbol, - const wxColour& foreground = wxNullColour, - const wxColour& background = wxNullColour); - - // Set the foreground colour used for a particular marker number. - void MarkerSetForeground(int markerNumber, const wxColour& fore); - - // Set the background colour used for a particular marker number. - void MarkerSetBackground(int markerNumber, const wxColour& back); - - // Add a marker to a line, returning an ID which can be used to find or delete the marker. - int MarkerAdd(int line, int markerNumber); - - // Delete a marker from a line. - void MarkerDelete(int line, int markerNumber); - - // Delete all markers with a particular number from all lines. - void MarkerDeleteAll(int markerNumber); - - // Get a bit mask of all the markers set on a line. - int MarkerGet(int line); - - // Find the next line after lineStart that includes a marker in mask. - int MarkerNext(int lineStart, int markerMask); - - // Find the previous line before lineStart that includes a marker in mask. - int MarkerPrevious(int lineStart, int markerMask); - - // Define a marker from a bitmap - void MarkerDefineBitmap(int markerNumber, const wxBitmap& bmp); - - // Add a set of markers to a line. - void MarkerAddSet(int line, int set); - - // Set the alpha used for a marker that is drawn in the text area, not the margin. - void MarkerSetAlpha(int markerNumber, int alpha); - - // Set a margin to be either numeric or symbolic. - void SetMarginType(int margin, int marginType); - - // Retrieve the type of a margin. - int GetMarginType(int margin); - - // Set the width of a margin to a width expressed in pixels. - void SetMarginWidth(int margin, int pixelWidth); - - // Retrieve the width of a margin in pixels. - int GetMarginWidth(int margin); - - // Set a mask that determines which markers are displayed in a margin. - void SetMarginMask(int margin, int mask); - - // Retrieve the marker mask of a margin. - int GetMarginMask(int margin); - - // Make a margin sensitive or insensitive to mouse clicks. - void SetMarginSensitive(int margin, bool sensitive); - - // Retrieve the mouse click sensitivity of a margin. - bool GetMarginSensitive(int margin); - - // Clear all the styles and make equivalent to the global default style. - void StyleClearAll(); - - // Set the foreground colour of a style. - void StyleSetForeground(int style, const wxColour& fore); - - // Set the background colour of a style. - void StyleSetBackground(int style, const wxColour& back); - - // Set a style to be bold or not. - void StyleSetBold(int style, bool bold); - - // Set a style to be italic or not. - void StyleSetItalic(int style, bool italic); - - // Set the size of characters of a style. - void StyleSetSize(int style, int sizePoints); - - // Set the font of a style. - void StyleSetFaceName(int style, const wxString& fontName); - - // Set a style to have its end of line filled or not. - void StyleSetEOLFilled(int style, bool filled); - - // Reset the default style to its state at startup - void StyleResetDefault(); - - // Set a style to be underlined or not. - void StyleSetUnderline(int style, bool underline); - - // Set a style to be mixed case, or to force upper or lower case. - void StyleSetCase(int style, int caseForce); - - // Set a style to be a hotspot or not. - void StyleSetHotSpot(int style, bool hotspot); - - // Set the foreground colour of the selection and whether to use this setting. - void SetSelForeground(bool useSetting, const wxColour& fore); - - // Set the background colour of the selection and whether to use this setting. - void SetSelBackground(bool useSetting, const wxColour& back); - - // Get the alpha of the selection. - int GetSelAlpha(); - - // Set the alpha of the selection. - void SetSelAlpha(int alpha); - - // Set the foreground colour of the caret. - void SetCaretForeground(const wxColour& fore); - - // When key+modifier combination km is pressed perform msg. - void CmdKeyAssign(int key, int modifiers, int cmd); - - // When key+modifier combination km is pressed do nothing. - void CmdKeyClear(int key, int modifiers); - - // Drop all key mappings. - void CmdKeyClearAll(); - - // Set the styles for a segment of the document. - void SetStyleBytes(int length, char* styleBytes); - - // Set a style to be visible or not. - void StyleSetVisible(int style, bool visible); - - // Get the time in milliseconds that the caret is on and off. - int GetCaretPeriod(); - - // Get the time in milliseconds that the caret is on and off. 0 = steady on. - void SetCaretPeriod(int periodMilliseconds); - - // Set the set of characters making up words for when moving or selecting by word. - // First sets deaults like SetCharsDefault. - void SetWordChars(const wxString& characters); - - // Start a sequence of actions that is undone and redone as a unit. - // May be nested. - void BeginUndoAction(); - - // End a sequence of actions that is undone and redone as a unit. - void EndUndoAction(); - - // Set an indicator to plain, squiggle or TT. - void IndicatorSetStyle(int indic, int style); - - // Retrieve the style of an indicator. - int IndicatorGetStyle(int indic); - - // Set the foreground colour of an indicator. - void IndicatorSetForeground(int indic, const wxColour& fore); - - // Retrieve the foreground colour of an indicator. - wxColour IndicatorGetForeground(int indic); - - // Set the foreground colour of all whitespace and whether to use this setting. - void SetWhitespaceForeground(bool useSetting, const wxColour& fore); - - // Set the background colour of all whitespace and whether to use this setting. - void SetWhitespaceBackground(bool useSetting, const wxColour& back); - - // Divide each styling byte into lexical class bits (default: 5) and indicator - // bits (default: 3). If a lexer requires more than 32 lexical states, then this - // is used to expand the possible states. - void SetStyleBits(int bits); - - // Retrieve number of bits in style bytes used to hold the lexical state. - int GetStyleBits(); - - // Used to hold extra styling information for each line. - void SetLineState(int line, int state); - - // Retrieve the extra styling information for a line. - int GetLineState(int line); - - // Retrieve the last line number that has line state. - int GetMaxLineState(); - - // Is the background of the line containing the caret in a different colour? - bool GetCaretLineVisible(); - - // Display the background of the line containing the caret in a different colour. - void SetCaretLineVisible(bool show); - - // Get the colour of the background of the line containing the caret. - wxColour GetCaretLineBackground(); - - // Set the colour of the background of the line containing the caret. - void SetCaretLineBackground(const wxColour& back); - - // Set a style to be changeable or not (read only). - // Experimental feature, currently buggy. - void StyleSetChangeable(int style, bool changeable); - - // Display a auto-completion list. - // The lenEntered parameter indicates how many characters before - // the caret should be used to provide context. - void AutoCompShow(int lenEntered, const wxString& itemList); - - // Remove the auto-completion list from the screen. - void AutoCompCancel(); - - // Is there an auto-completion list visible? - bool AutoCompActive(); - - // Retrieve the position of the caret when the auto-completion list was displayed. - int AutoCompPosStart(); - - // User has selected an item so remove the list and insert the selection. - void AutoCompComplete(); - - // Define a set of character that when typed cancel the auto-completion list. - void AutoCompStops(const wxString& characterSet); - - // Change the separator character in the string setting up an auto-completion list. - // Default is space but can be changed if items contain space. - void AutoCompSetSeparator(int separatorCharacter); - - // Retrieve the auto-completion list separator character. - int AutoCompGetSeparator(); - - // Select the item in the auto-completion list that starts with a string. - void AutoCompSelect(const wxString& text); - - // Should the auto-completion list be cancelled if the user backspaces to a - // position before where the box was created. - void AutoCompSetCancelAtStart(bool cancel); - - // Retrieve whether auto-completion cancelled by backspacing before start. - bool AutoCompGetCancelAtStart(); - - // Define a set of characters that when typed will cause the autocompletion to - // choose the selected item. - void AutoCompSetFillUps(const wxString& characterSet); - - // Should a single item auto-completion list automatically choose the item. - void AutoCompSetChooseSingle(bool chooseSingle); - - // Retrieve whether a single item auto-completion list automatically choose the item. - bool AutoCompGetChooseSingle(); - - // Set whether case is significant when performing auto-completion searches. - void AutoCompSetIgnoreCase(bool ignoreCase); - - // Retrieve state of ignore case flag. - bool AutoCompGetIgnoreCase(); - - // Display a list of strings and send notification when user chooses one. - void UserListShow(int listType, const wxString& itemList); - - // Set whether or not autocompletion is hidden automatically when nothing matches. - void AutoCompSetAutoHide(bool autoHide); - - // Retrieve whether or not autocompletion is hidden automatically when nothing matches. - bool AutoCompGetAutoHide(); - - // Set whether or not autocompletion deletes any word characters - // after the inserted text upon completion. - void AutoCompSetDropRestOfWord(bool dropRestOfWord); - - // Retrieve whether or not autocompletion deletes any word characters - // after the inserted text upon completion. - bool AutoCompGetDropRestOfWord(); - - // Register an image for use in autocompletion lists. - void RegisterImage(int type, const wxBitmap& bmp); - - // Clear all the registered images. - void ClearRegisteredImages(); - - // Retrieve the auto-completion list type-separator character. - int AutoCompGetTypeSeparator(); - - // Change the type-separator character in the string setting up an auto-completion list. - // Default is '?' but can be changed if items contain '?'. - void AutoCompSetTypeSeparator(int separatorCharacter); - - // Set the maximum width, in characters, of auto-completion and user lists. - // Set to 0 to autosize to fit longest item, which is the default. - void AutoCompSetMaxWidth(int characterCount); - - // Get the maximum width, in characters, of auto-completion and user lists. - int AutoCompGetMaxWidth(); - - // Set the maximum height, in rows, of auto-completion and user lists. - // The default is 5 rows. - void AutoCompSetMaxHeight(int rowCount); - - // Set the maximum height, in rows, of auto-completion and user lists. - int AutoCompGetMaxHeight(); - - // Set the number of spaces used for one level of indentation. - void SetIndent(int indentSize); - - // Retrieve indentation size. - int GetIndent(); - - // Indentation will only use space characters if useTabs is false, otherwise - // it will use a combination of tabs and spaces. - void SetUseTabs(bool useTabs); - - // Retrieve whether tabs will be used in indentation. - bool GetUseTabs(); - - // Change the indentation of a line to a number of columns. - void SetLineIndentation(int line, int indentSize); - - // Retrieve the number of columns that a line is indented. - int GetLineIndentation(int line); - - // Retrieve the position before the first non indentation character on a line. - int GetLineIndentPosition(int line); - - // Retrieve the column number of a position, taking tab width into account. - int GetColumn(int pos); - - // Show or hide the horizontal scroll bar. - void SetUseHorizontalScrollBar(bool show); - - // Is the horizontal scroll bar visible? - bool GetUseHorizontalScrollBar(); - - // Show or hide indentation guides. - void SetIndentationGuides(bool show); - - // Are the indentation guides visible? - bool GetIndentationGuides(); - - // Set the highlighted indentation guide column. - // 0 = no highlighted guide. - void SetHighlightGuide(int column); - - // Get the highlighted indentation guide column. - int GetHighlightGuide(); - - // Get the position after the last visible characters on a line. - int GetLineEndPosition(int line); - - // Get the code page used to interpret the bytes of the document as characters. - int GetCodePage(); - - // Get the foreground colour of the caret. - wxColour GetCaretForeground(); - - // In read-only mode? - bool GetReadOnly(); - - // Sets the position of the caret. - void SetCurrentPos(int pos); - - // Sets the position that starts the selection - this becomes the anchor. - void SetSelectionStart(int pos); - - // Returns the position at the start of the selection. - int GetSelectionStart(); - - // Sets the position that ends the selection - this becomes the currentPosition. - void SetSelectionEnd(int pos); - - // Returns the position at the end of the selection. - int GetSelectionEnd(); - - // Sets the print magnification added to the point size of each style for printing. - void SetPrintMagnification(int magnification); - - // Returns the print magnification. - int GetPrintMagnification(); - - // Modify colours when printing for clearer printed text. - void SetPrintColourMode(int mode); - - // Returns the print colour mode. - int GetPrintColourMode(); - - // Find some text in the document. - int FindText(int minPos, int maxPos, const wxString& text, int flags=0); - - // On Windows, will draw the document into a display context such as a printer. - int FormatRange(bool doDraw, - int startPos, - int endPos, - wxDC* draw, - wxDC* target, - wxRect renderRect, - wxRect pageRect); - - // Retrieve the display line at the top of the display. - int GetFirstVisibleLine(); - - // Retrieve the contents of a line. - wxString GetLine(int line); - - // Returns the number of lines in the document. There is always at least one. - int GetLineCount(); - - // Sets the size in pixels of the left margin. - void SetMarginLeft(int pixelWidth); - - // Returns the size in pixels of the left margin. - int GetMarginLeft(); - - // Sets the size in pixels of the right margin. - void SetMarginRight(int pixelWidth); - - // Returns the size in pixels of the right margin. - int GetMarginRight(); - - // Is the document different from when it was last saved? - bool GetModify(); - - // Select a range of text. - void SetSelection(int start, int end); - - // Retrieve the selected text. - wxString GetSelectedText(); - - // Retrieve a range of text. - wxString GetTextRange(int startPos, int endPos); - - // Draw the selection in normal style or with selection highlighted. - void HideSelection(bool normal); - - // Retrieve the line containing a position. - int LineFromPosition(int pos); - - // Retrieve the position at the start of a line. - int PositionFromLine(int line); - - // Scroll horizontally and vertically. - void LineScroll(int columns, int lines); - - // Ensure the caret is visible. - void EnsureCaretVisible(); - - // Replace the selected text with the argument text. - void ReplaceSelection(const wxString& text); - - // Set to read only or read write. - void SetReadOnly(bool readOnly); - - // Will a paste succeed? - bool CanPaste(); - - // Are there any undoable actions in the undo history? - bool CanUndo(); - - // Delete the undo history. - void EmptyUndoBuffer(); - - // Undo one action in the undo history. - void Undo(); - - // Cut the selection to the clipboard. - void Cut(); - - // Copy the selection to the clipboard. - void Copy(); - - // Paste the contents of the clipboard into the document replacing the selection. - void Paste(); - - // Clear the selection. - void Clear(); - - // Replace the contents of the document with the argument text. - void SetText(const wxString& text); - - // Retrieve all the text in the document. - wxString GetText(); - - // Retrieve the number of characters in the document. - int GetTextLength(); - - // Set to overtype (true) or insert mode. - void SetOvertype(bool overtype); - - // Returns true if overtype mode is active otherwise false is returned. - bool GetOvertype(); - - // Set the width of the insert mode caret. - void SetCaretWidth(int pixelWidth); - - // Returns the width of the insert mode caret. - int GetCaretWidth(); - - // Sets the position that starts the target which is used for updating the - // document without affecting the scroll position. - void SetTargetStart(int pos); - - // Get the position that starts the target. - int GetTargetStart(); - - // Sets the position that ends the target which is used for updating the - // document without affecting the scroll position. - void SetTargetEnd(int pos); - - // Get the position that ends the target. - int GetTargetEnd(); - - // Replace the target text with the argument text. - // Text is counted so it can contain NULs. - // Returns the length of the replacement text. - int ReplaceTarget(const wxString& text); - - // Replace the target text with the argument text after \d processing. - // Text is counted so it can contain NULs. - // Looks for \d where d is between 1 and 9 and replaces these with the strings - // matched in the last search operation which were surrounded by \( and \). - // Returns the length of the replacement text including any change - // caused by processing the \d patterns. - int ReplaceTargetRE(const wxString& text); - - // Search for a counted string in the target and set the target to the found - // range. Text is counted so it can contain NULs. - // Returns length of range or -1 for failure in which case target is not moved. - int SearchInTarget(const wxString& text); - - // Set the search flags used by SearchInTarget. - void SetSearchFlags(int flags); - - // Get the search flags used by SearchInTarget. - int GetSearchFlags(); - - // Show a call tip containing a definition near position pos. - void CallTipShow(int pos, const wxString& definition); - - // Remove the call tip from the screen. - void CallTipCancel(); - - // Is there an active call tip? - bool CallTipActive(); - - // Retrieve the position where the caret was before displaying the call tip. - int CallTipPosAtStart(); - - // Highlight a segment of the definition. - void CallTipSetHighlight(int start, int end); - - // Set the background colour for the call tip. - void CallTipSetBackground(const wxColour& back); - - // Set the foreground colour for the call tip. - void CallTipSetForeground(const wxColour& fore); - - // Set the foreground colour for the highlighted part of the call tip. - void CallTipSetForegroundHighlight(const wxColour& fore); - - // Enable use of STYLE_CALLTIP and set call tip tab size in pixels. - void CallTipUseStyle(int tabSize); - - // Find the display line of a document line taking hidden lines into account. - int VisibleFromDocLine(int line); - - // Find the document line of a display line taking hidden lines into account. - int DocLineFromVisible(int lineDisplay); - - // The number of display lines needed to wrap a document line - int WrapCount(int line); - - // Set the fold level of a line. - // This encodes an integer level along with flags indicating whether the - // line is a header and whether it is effectively white space. - void SetFoldLevel(int line, int level); - - // Retrieve the fold level of a line. - int GetFoldLevel(int line); - - // Find the last child line of a header line. - int GetLastChild(int line, int level); - - // Find the parent line of a child line. - int GetFoldParent(int line); - - // Make a range of lines visible. - void ShowLines(int lineStart, int lineEnd); - - // Make a range of lines invisible. - void HideLines(int lineStart, int lineEnd); - - // Is a line visible? - bool GetLineVisible(int line); - - // Show the children of a header line. - void SetFoldExpanded(int line, bool expanded); - - // Is a header line expanded? - bool GetFoldExpanded(int line); - - // Switch a header line between expanded and contracted. - void ToggleFold(int line); - - // Ensure a particular line is visible by expanding any header line hiding it. - void EnsureVisible(int line); - - // Set some style options for folding. - void SetFoldFlags(int flags); - - // Ensure a particular line is visible by expanding any header line hiding it. - // Use the currently set visibility policy to determine which range to display. - void EnsureVisibleEnforcePolicy(int line); - - // Sets whether a tab pressed when caret is within indentation indents. - void SetTabIndents(bool tabIndents); - - // Does a tab pressed when caret is within indentation indent? - bool GetTabIndents(); - - // Sets whether a backspace pressed when caret is within indentation unindents. - void SetBackSpaceUnIndents(bool bsUnIndents); - - // Does a backspace pressed when caret is within indentation unindent? - bool GetBackSpaceUnIndents(); - - // Sets the time the mouse must sit still to generate a mouse dwell event. - void SetMouseDwellTime(int periodMilliseconds); - - // Retrieve the time the mouse must sit still to generate a mouse dwell event. - int GetMouseDwellTime(); - - // Get position of start of word. - int WordStartPosition(int pos, bool onlyWordCharacters); - - // Get position of end of word. - int WordEndPosition(int pos, bool onlyWordCharacters); - - // Sets whether text is word wrapped. - void SetWrapMode(int mode); - - // Retrieve whether text is word wrapped. - int GetWrapMode(); - - // Set the display mode of visual flags for wrapped lines. - void SetWrapVisualFlags(int wrapVisualFlags); - - // Retrive the display mode of visual flags for wrapped lines. - int GetWrapVisualFlags(); - - // Set the location of visual flags for wrapped lines. - void SetWrapVisualFlagsLocation(int wrapVisualFlagsLocation); - - // Retrive the location of visual flags for wrapped lines. - int GetWrapVisualFlagsLocation(); - - // Set the start indent for wrapped lines. - void SetWrapStartIndent(int indent); - - // Retrive the start indent for wrapped lines. - int GetWrapStartIndent(); - - // Sets the degree of caching of layout information. - void SetLayoutCache(int mode); - - // Retrieve the degree of caching of layout information. - int GetLayoutCache(); - - // Sets the document width assumed for scrolling. - void SetScrollWidth(int pixelWidth); - - // Retrieve the document width assumed for scrolling. - int GetScrollWidth(); - - // Measure the pixel width of some text in a particular style. - // NUL terminated text argument. - // Does not handle tab or control characters. - int TextWidth(int style, const wxString& text); - - // Sets the scroll range so that maximum scroll position has - // the last line at the bottom of the view (default). - // Setting this to false allows scrolling one page below the last line. - void SetEndAtLastLine(bool endAtLastLine); - - // Retrieve whether the maximum scroll position has the last - // line at the bottom of the view. - bool GetEndAtLastLine(); - - // Retrieve the height of a particular line of text in pixels. - int TextHeight(int line); - - // Show or hide the vertical scroll bar. - void SetUseVerticalScrollBar(bool show); - - // Is the vertical scroll bar visible? - bool GetUseVerticalScrollBar(); - - // Append a string to the end of the document without changing the selection. - void AppendText(const wxString& text); - - // Is drawing done in two phases with backgrounds drawn before foregrounds? - bool GetTwoPhaseDraw(); - - // In twoPhaseDraw mode, drawing is performed in two phases, first the background - // and then the foreground. This avoids chopping off characters that overlap the next run. - void SetTwoPhaseDraw(bool twoPhase); - - // Make the target range start and end be the same as the selection range start and end. - void TargetFromSelection(); - - // Join the lines in the target. - void LinesJoin(); - - // Split the lines in the target into lines that are less wide than pixelWidth - // where possible. - void LinesSplit(int pixelWidth); - - // Set the colours used as a chequerboard pattern in the fold margin - void SetFoldMarginColour(bool useSetting, const wxColour& back); - void SetFoldMarginHiColour(bool useSetting, const wxColour& fore); - - // Move caret down one line. - void LineDown(); - - // Move caret down one line extending selection to new caret position. - void LineDownExtend(); - - // Move caret up one line. - void LineUp(); - - // Move caret up one line extending selection to new caret position. - void LineUpExtend(); - - // Move caret left one character. - void CharLeft(); - - // Move caret left one character extending selection to new caret position. - void CharLeftExtend(); - - // Move caret right one character. - void CharRight(); - - // Move caret right one character extending selection to new caret position. - void CharRightExtend(); - - // Move caret left one word. - void WordLeft(); - - // Move caret left one word extending selection to new caret position. - void WordLeftExtend(); - - // Move caret right one word. - void WordRight(); - - // Move caret right one word extending selection to new caret position. - void WordRightExtend(); - - // Move caret to first position on line. - void Home(); - - // Move caret to first position on line extending selection to new caret position. - void HomeExtend(); - - // Move caret to last position on line. - void LineEnd(); - - // Move caret to last position on line extending selection to new caret position. - void LineEndExtend(); - - // Move caret to first position in document. - void DocumentStart(); - - // Move caret to first position in document extending selection to new caret position. - void DocumentStartExtend(); - - // Move caret to last position in document. - void DocumentEnd(); - - // Move caret to last position in document extending selection to new caret position. - void DocumentEndExtend(); - - // Move caret one page up. - void PageUp(); - - // Move caret one page up extending selection to new caret position. - void PageUpExtend(); - - // Move caret one page down. - void PageDown(); - - // Move caret one page down extending selection to new caret position. - void PageDownExtend(); - - // Switch from insert to overtype mode or the reverse. - void EditToggleOvertype(); - - // Cancel any modes such as call tip or auto-completion list display. - void Cancel(); - - // Delete the selection or if no selection, the character before the caret. - void DeleteBack(); - - // If selection is empty or all on one line replace the selection with a tab character. - // If more than one line selected, indent the lines. - void Tab(); - - // Dedent the selected lines. - void BackTab(); - - // Insert a new line, may use a CRLF, CR or LF depending on EOL mode. - void NewLine(); - - // Insert a Form Feed character. - void FormFeed(); - - // Move caret to before first visible character on line. - // If already there move to first character on line. - void VCHome(); - - // Like VCHome but extending selection to new caret position. - void VCHomeExtend(); - - // Magnify the displayed text by increasing the sizes by 1 point. - void ZoomIn(); - - // Make the displayed text smaller by decreasing the sizes by 1 point. - void ZoomOut(); - - // Delete the word to the left of the caret. - void DelWordLeft(); - - // Delete the word to the right of the caret. - void DelWordRight(); - - // Cut the line containing the caret. - void LineCut(); - - // Delete the line containing the caret. - void LineDelete(); - - // Switch the current line with the previous. - void LineTranspose(); - - // Duplicate the current line. - void LineDuplicate(); - - // Transform the selection to lower case. - void LowerCase(); - - // Transform the selection to upper case. - void UpperCase(); - - // Scroll the document down, keeping the caret visible. - void LineScrollDown(); - - // Scroll the document up, keeping the caret visible. - void LineScrollUp(); - - // Delete the selection or if no selection, the character before the caret. - // Will not delete the character before at the start of a line. - void DeleteBackNotLine(); - - // Move caret to first position on display line. - void HomeDisplay(); - - // Move caret to first position on display line extending selection to - // new caret position. - void HomeDisplayExtend(); - - // Move caret to last position on display line. - void LineEndDisplay(); - - // Move caret to last position on display line extending selection to new - // caret position. - void LineEndDisplayExtend(); - - // These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? - // except they behave differently when word-wrap is enabled: - // They go first to the start / end of the display line, like (Home|LineEnd)Display - // The difference is that, the cursor is already at the point, it goes on to the start - // or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. - void HomeWrap(); - void HomeWrapExtend(); - void LineEndWrap(); - void LineEndWrapExtend(); - void VCHomeWrap(); - void VCHomeWrapExtend(); - - // Copy the line containing the caret. - void LineCopy(); - - // Move the caret inside current view if it's not there already. - void MoveCaretInsideView(); - - // How many characters are on a line, not including end of line characters? - int LineLength(int line); - - // Highlight the characters at two positions. - void BraceHighlight(int pos1, int pos2); - - // Highlight the character at a position indicating there is no matching brace. - void BraceBadLight(int pos); - - // Find the position of a matching brace or INVALID_POSITION if no match. - int BraceMatch(int pos); - - // Are the end of line characters visible? - bool GetViewEOL(); - - // Make the end of line characters visible or invisible. - void SetViewEOL(bool visible); - - // Retrieve a pointer to the document object. - void* GetDocPointer(); - - // Change the document object used. - void SetDocPointer(void* docPointer); - - // Set which document modification events are sent to the container. - void SetModEventMask(int mask); - - // Retrieve the column number which text should be kept within. - int GetEdgeColumn(); - - // Set the column number of the edge. - // If text goes past the edge then it is highlighted. - void SetEdgeColumn(int column); - - // Retrieve the edge highlight mode. - int GetEdgeMode(); - - // The edge may be displayed by a line (EDGE_LINE) or by highlighting text that - // goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). - void SetEdgeMode(int mode); - - // Retrieve the colour used in edge indication. - wxColour GetEdgeColour(); - - // Change the colour used in edge indication. - void SetEdgeColour(const wxColour& edgeColour); - - // Sets the current caret position to be the search anchor. - void SearchAnchor(); - - // Find some text starting at the search anchor. - // Does not ensure the selection is visible. - int SearchNext(int flags, const wxString& text); - - // Find some text starting at the search anchor and moving backwards. - // Does not ensure the selection is visible. - int SearchPrev(int flags, const wxString& text); - - // Retrieves the number of lines completely visible. - int LinesOnScreen(); - - // Set whether a pop up menu is displayed automatically when the user presses - // the wrong mouse button. - void UsePopUp(bool allowPopUp); - - // Is the selection rectangular? The alternative is the more common stream selection. - bool SelectionIsRectangle(); - - // Set the zoom level. This number of points is added to the size of all fonts. - // It may be positive to magnify or negative to reduce. - void SetZoom(int zoom); - - // Retrieve the zoom level. - int GetZoom(); - - // Create a new document object. - // Starts with reference count of 1 and not selected into editor. - void* CreateDocument(); - - // Extend life of document. - void AddRefDocument(void* docPointer); - - // Release a reference to the document, deleting document if it fades to black. - void ReleaseDocument(void* docPointer); - - // Get which document modification events are sent to the container. - int GetModEventMask(); - - // Change internal focus flag. - void SetSTCFocus(bool focus); - - // Get internal focus flag. - bool GetSTCFocus(); - - // Change error status - 0 = OK. - void SetStatus(int statusCode); - - // Get error status. - int GetStatus(); - - // Set whether the mouse is captured when its button is pressed. - void SetMouseDownCaptures(bool captures); - - // Get whether mouse gets captured. - bool GetMouseDownCaptures(); - - // Sets the cursor to one of the SC_CURSOR* values. - void SetSTCCursor(int cursorType); - - // Get cursor type. - int GetSTCCursor(); - - // Change the way control characters are displayed: - // If symbol is < 32, keep the drawn way, else, use the given character. - void SetControlCharSymbol(int symbol); - - // Get the way control characters are displayed. - int GetControlCharSymbol(); - - // Move to the previous change in capitalisation. - void WordPartLeft(); - - // Move to the previous change in capitalisation extending selection - // to new caret position. - void WordPartLeftExtend(); - - // Move to the change next in capitalisation. - void WordPartRight(); - - // Move to the next change in capitalisation extending selection - // to new caret position. - void WordPartRightExtend(); - - // Set the way the display area is determined when a particular line - // is to be moved to by Find, FindNext, GotoLine, etc. - void SetVisiblePolicy(int visiblePolicy, int visibleSlop); - - // Delete back from the current position to the start of the line. - void DelLineLeft(); - - // Delete forwards from the current position to the end of the line. - void DelLineRight(); - - // Get and Set the xOffset (ie, horizonal scroll position). - void SetXOffset(int newOffset); - int GetXOffset(); - - // Set the last x chosen value to be the caret x position. - void ChooseCaretX(); - - // Set the way the caret is kept visible when going sideway. - // The exclusion zone is given in pixels. - void SetXCaretPolicy(int caretPolicy, int caretSlop); - - // Set the way the line the caret is on is kept visible. - // The exclusion zone is given in lines. - void SetYCaretPolicy(int caretPolicy, int caretSlop); - - // Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). - void SetPrintWrapMode(int mode); - - // Is printing line wrapped? - int GetPrintWrapMode(); - - // Set a fore colour for active hotspots. - void SetHotspotActiveForeground(bool useSetting, const wxColour& fore); - - // Set a back colour for active hotspots. - void SetHotspotActiveBackground(bool useSetting, const wxColour& back); - - // Enable / Disable underlining active hotspots. - void SetHotspotActiveUnderline(bool underline); - - // Limit hotspots to single line so hotspots on two lines don't merge. - void SetHotspotSingleLine(bool singleLine); - - // Move caret between paragraphs (delimited by empty lines). - void ParaDown(); - void ParaDownExtend(); - void ParaUp(); - void ParaUpExtend(); - - // Given a valid document position, return the previous position taking code - // page into account. Returns 0 if passed 0. - int PositionBefore(int pos); - - // Given a valid document position, return the next position taking code - // page into account. Maximum value returned is the last position in the document. - int PositionAfter(int pos); - - // Copy a range of text to the clipboard. Positions are clipped into the document. - void CopyRange(int start, int end); - - // Copy argument text to the clipboard. - void CopyText(int length, const wxString& text); - - // Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE) or - // by lines (SC_SEL_LINES). - void SetSelectionMode(int mode); - - // Get the mode of the current selection. - int GetSelectionMode(); - - // Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). - int GetLineSelStartPosition(int line); - - // Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line). - int GetLineSelEndPosition(int line); - - // Move caret down one line, extending rectangular selection to new caret position. - void LineDownRectExtend(); - - // Move caret up one line, extending rectangular selection to new caret position. - void LineUpRectExtend(); - - // Move caret left one character, extending rectangular selection to new caret position. - void CharLeftRectExtend(); - - // Move caret right one character, extending rectangular selection to new caret position. - void CharRightRectExtend(); - - // Move caret to first position on line, extending rectangular selection to new caret position. - void HomeRectExtend(); - - // Move caret to before first visible character on line. - // If already there move to first character on line. - // In either case, extend rectangular selection to new caret position. - void VCHomeRectExtend(); - - // Move caret to last position on line, extending rectangular selection to new caret position. - void LineEndRectExtend(); - - // Move caret one page up, extending rectangular selection to new caret position. - void PageUpRectExtend(); - - // Move caret one page down, extending rectangular selection to new caret position. - void PageDownRectExtend(); - - // Move caret to top of page, or one page up if already at top of page. - void StutteredPageUp(); - - // Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. - void StutteredPageUpExtend(); - - // Move caret to bottom of page, or one page down if already at bottom of page. - void StutteredPageDown(); - - // Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. - void StutteredPageDownExtend(); - - // Move caret left one word, position cursor at end of word. - void WordLeftEnd(); - - // Move caret left one word, position cursor at end of word, extending selection to new caret position. - void WordLeftEndExtend(); - - // Move caret right one word, position cursor at end of word. - void WordRightEnd(); - - // Move caret right one word, position cursor at end of word, extending selection to new caret position. - void WordRightEndExtend(); - - // Set the set of characters making up whitespace for when moving or selecting by word. - // Should be called after SetWordChars. - void SetWhitespaceChars(const wxString& characters); - - // Reset the set of characters for whitespace and word characters to the defaults. - void SetCharsDefault(); - - // Get currently selected item position in the auto-completion list - int AutoCompGetCurrent(); - - // Enlarge the document to a particular size of text bytes. - void Allocate(int bytes); - - // Find the position of a column on a line taking into account tabs and - // multi-byte characters. If beyond end of line, return line end position. - int FindColumn(int line, int column); - - // Can the caret preferred x position only be changed by explicit movement commands? - bool GetCaretSticky(); - - // Stop the caret preferred x position changing when the user types. - void SetCaretSticky(bool useCaretStickyBehaviour); - - // Switch between sticky and non-sticky: meant to be bound to a key. - void ToggleCaretSticky(); - - // Enable/Disable convert-on-paste for line endings - void SetPasteConvertEndings(bool convert); - - // Get convert-on-paste setting - bool GetPasteConvertEndings(); - - // Duplicate the selection. If selection empty duplicate the line containing the caret. - void SelectionDuplicate(); - - // Set background alpha of the caret line. - void SetCaretLineBackAlpha(int alpha); - - // Get the background alpha of the caret line. - int GetCaretLineBackAlpha(); - - // Start notifying the container of all key presses and commands. - void StartRecord(); - - // Stop notifying the container of all key presses and commands. - void StopRecord(); - - // Set the lexing language of the document. - void SetLexer(int lexer); - - // Retrieve the lexing language of the document. - int GetLexer(); - - // Colourise a segment of the document using the current lexing language. - void Colourise(int start, int end); - - // Set up a value that may be used by a lexer for some optional feature. - void SetProperty(const wxString& key, const wxString& value); - - // Set up the key words used by the lexer. - void SetKeyWords(int keywordSet, const wxString& keyWords); - - // Set the lexing language of the document based on string name. - void SetLexerLanguage(const wxString& language); - - // Retrieve a 'property' value previously set with SetProperty. - wxString GetProperty(const wxString& key); - - // Retrieve a 'property' value previously set with SetProperty, - // with '$()' variable replacement on returned buffer. - wxString GetPropertyExpanded(const wxString& key); - - // Retrieve a 'property' value previously set with SetProperty, - // interpreted as an int AFTER any '$()' variable replacement. - int GetPropertyInt(const wxString& key); - - // Retrieve the number of bits the current lexer needs for styling. - int GetStyleBitsNeeded(); - -// END of generated section -//---------------------------------------------------------------------- -// Others... - - - // Returns the line number of the line with the caret. - int GetCurrentLine(); - - // Extract style settings from a spec-string which is composed of one or - // more of the following comma separated elements: - // - // bold turns on bold - // italic turns on italics - // fore:[name or #RRGGBB] sets the foreground colour - // back:[name or #RRGGBB] sets the background colour - // face:[facename] sets the font face name to use - // size:[num] sets the font size in points - // eol turns on eol filling - // underline turns on underlining - // - void StyleSetSpec(int styleNum, const wxString& spec); - - - - // Set style size, face, bold, italic, and underline attributes from - // a wxFont's attributes. - void StyleSetFont(int styleNum, wxFont& font); - - - - // Set all font style attributes at once. - void StyleSetFontAttr(int styleNum, int size, - const wxString& faceName, - bool bold, bool italic, - bool underline, - wxFontEncoding encoding=wxFONTENCODING_DEFAULT); - - - // Set the character set of the font in a style. Converts the Scintilla - // character set values to a wxFontEncoding. - void StyleSetCharacterSet(int style, int characterSet); - - // Set the font encoding to be used by a style. - void StyleSetFontEncoding(int style, wxFontEncoding encoding); - - - // Perform one of the operations defined by the wxSTC_CMD_* constants. - void CmdKeyExecute(int cmd); - - - // Set the left and right margin in the edit area, measured in pixels. - void SetMargins(int left, int right); - - - // Retrieve the start and end positions of the current selection. -#ifdef SWIG - void GetSelection(int* OUTPUT, int* OUTPUT); -#else - void GetSelection(int* startPos, int* endPos); -#endif - - // Retrieve the point in the window where a position is displayed. - wxPoint PointFromPosition(int pos); - - - // Scroll enough to make the given line visible - void ScrollToLine(int line); - - - // Scroll enough to make the given column visible - void ScrollToColumn(int column); - - - // Send a message to Scintilla - wxIntPtr SendMsg(int msg, wxUIntPtr wp=0, wxIntPtr lp=0); - - - // Set the vertical scrollbar to use instead of the ont that's built-in. - void SetVScrollBar(wxScrollBar* bar); - - - // Set the horizontal scrollbar to use instead of the ont that's built-in. - void SetHScrollBar(wxScrollBar* bar); - - // Can be used to prevent the EVT_CHAR handler from adding the char - bool GetLastKeydownProcessed() { return m_lastKeyDownConsumed; } - void SetLastKeydownProcessed(bool val) { m_lastKeyDownConsumed = val; } - - // Write the contents of the editor to filename - bool SaveFile(const wxString& filename); - - // Load the contents of filename into the editor - bool LoadFile(const wxString& filename); - -#ifdef STC_USE_DND - // Allow for simulating a DnD DragOver - wxDragResult DoDragOver(wxCoord x, wxCoord y, wxDragResult def); - - // Allow for simulating a DnD DropText - bool DoDropText(long x, long y, const wxString& data); -#endif - - // Specify whether anti-aliased fonts should be used. Will have no effect - // on some platforms, but on some (wxMac for example) can greatly improve - // performance. - void SetUseAntiAliasing(bool useAA); - - // Returns the current UseAntiAliasing setting. - bool GetUseAntiAliasing(); - - - - // The following methods are nearly equivallent to their similarly named - // cousins above. The difference is that these methods bypass wxString - // and always use a char* even if used in a unicode build of wxWidgets. - // In that case the character data will be utf-8 encoded since that is - // what is used internally by Scintilla in unicode builds. - - // Add text to the document at current position. - void AddTextRaw(const char* text); - - // Insert string at a position. - void InsertTextRaw(int pos, const char* text); - - // Retrieve the text of the line containing the caret. - // Returns the index of the caret on the line. -#ifdef SWIG - wxCharBuffer GetCurLineRaw(int* OUTPUT); -#else - wxCharBuffer GetCurLineRaw(int* linePos=NULL); -#endif - - // Retrieve the contents of a line. - wxCharBuffer GetLineRaw(int line); - - // Retrieve the selected text. - wxCharBuffer GetSelectedTextRaw(); - - // Retrieve a range of text. - wxCharBuffer GetTextRangeRaw(int startPos, int endPos); - - // Replace the contents of the document with the argument text. - void SetTextRaw(const char* text); - - // Retrieve all the text in the document. - wxCharBuffer GetTextRaw(); - - // Append a string to the end of the document without changing the selection. - void AppendTextRaw(const char* text); - -#ifdef SWIG - %pythoncode "_stc_utf8_methods.py" -#endif -//---------------------------------------------------------------------- - - -#ifndef SWIG -protected: - // Event handlers - void OnPaint(wxPaintEvent& evt); - void OnScrollWin(wxScrollWinEvent& evt); - void OnScroll(wxScrollEvent& evt); - void OnSize(wxSizeEvent& evt); - void OnMouseLeftDown(wxMouseEvent& evt); - void OnMouseMove(wxMouseEvent& evt); - void OnMouseLeftUp(wxMouseEvent& evt); - void OnMouseRightUp(wxMouseEvent& evt); - void OnMouseMiddleUp(wxMouseEvent& evt); - void OnContextMenu(wxContextMenuEvent& evt); - void OnMouseWheel(wxMouseEvent& evt); - void OnChar(wxKeyEvent& evt); - void OnKeyDown(wxKeyEvent& evt); - void OnLoseFocus(wxFocusEvent& evt); - void OnGainFocus(wxFocusEvent& evt); - void OnSysColourChanged(wxSysColourChangedEvent& evt); - void OnEraseBackground(wxEraseEvent& evt); - void OnMenu(wxCommandEvent& evt); - void OnListBox(wxCommandEvent& evt); - void OnIdle(wxIdleEvent& evt); - - virtual wxSize DoGetBestSize() const; - - // Turn notifications from Scintilla into events - void NotifyChange(); - void NotifyParent(SCNotification* scn); - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxStyledTextCtrl) - -protected: - - ScintillaWX* m_swx; - wxStopWatch m_stopWatch; - wxScrollBar* m_vScrollBar; - wxScrollBar* m_hScrollBar; - - bool m_lastKeyDownConsumed; - - friend class ScintillaWX; - friend class Platform; -#endif -}; - -//---------------------------------------------------------------------- - -class WXDLLIMPEXP_STC wxStyledTextEvent : public wxCommandEvent { -public: - wxStyledTextEvent(wxEventType commandType=0, int id=0); -#ifndef SWIG - wxStyledTextEvent(const wxStyledTextEvent& event); -#endif - ~wxStyledTextEvent() {} - - void SetPosition(int pos) { m_position = pos; } - void SetKey(int k) { m_key = k; } - void SetModifiers(int m) { m_modifiers = m; } - void SetModificationType(int t) { m_modificationType = t; } - void SetText(const wxString& t) { m_text = t; } - void SetLength(int len) { m_length = len; } - void SetLinesAdded(int num) { m_linesAdded = num; } - void SetLine(int val) { m_line = val; } - void SetFoldLevelNow(int val) { m_foldLevelNow = val; } - void SetFoldLevelPrev(int val) { m_foldLevelPrev = val; } - void SetMargin(int val) { m_margin = val; } - void SetMessage(int val) { m_message = val; } - void SetWParam(int val) { m_wParam = val; } - void SetLParam(int val) { m_lParam = val; } - void SetListType(int val) { m_listType = val; } - void SetX(int val) { m_x = val; } - void SetY(int val) { m_y = val; } - void SetDragText(const wxString& val) { m_dragText = val; } - void SetDragAllowMove(bool val) { m_dragAllowMove = val; } -#ifdef STC_USE_DND - void SetDragResult(wxDragResult val) { m_dragResult = val; } -#endif - - int GetPosition() const { return m_position; } - int GetKey() const { return m_key; } - int GetModifiers() const { return m_modifiers; } - int GetModificationType() const { return m_modificationType; } - wxString GetText() const { return m_text; } - int GetLength() const { return m_length; } - int GetLinesAdded() const { return m_linesAdded; } - int GetLine() const { return m_line; } - int GetFoldLevelNow() const { return m_foldLevelNow; } - int GetFoldLevelPrev() const { return m_foldLevelPrev; } - int GetMargin() const { return m_margin; } - int GetMessage() const { return m_message; } - int GetWParam() const { return m_wParam; } - int GetLParam() const { return m_lParam; } - int GetListType() const { return m_listType; } - int GetX() const { return m_x; } - int GetY() const { return m_y; } - wxString GetDragText() { return m_dragText; } - bool GetDragAllowMove() { return m_dragAllowMove; } -#ifdef STC_USE_DND - wxDragResult GetDragResult() { return m_dragResult; } -#endif - - bool GetShift() const; - bool GetControl() const; - bool GetAlt() const; - - virtual wxEvent* Clone() const { return new wxStyledTextEvent(*this); } - -#ifndef SWIG -private: - DECLARE_DYNAMIC_CLASS(wxStyledTextEvent) - - int m_position; - int m_key; - int m_modifiers; - - int m_modificationType; // wxEVT_STC_MODIFIED - wxString m_text; - int m_length; - int m_linesAdded; - int m_line; - int m_foldLevelNow; - int m_foldLevelPrev; - - int m_margin; // wxEVT_STC_MARGINCLICK - - int m_message; // wxEVT_STC_MACRORECORD - int m_wParam; - int m_lParam; - - int m_listType; - int m_x; - int m_y; - - wxString m_dragText; // wxEVT_STC_START_DRAG, wxEVT_STC_DO_DROP - bool m_dragAllowMove; // wxEVT_STC_START_DRAG - -#if wxUSE_DRAG_AND_DROP - wxDragResult m_dragResult; // wxEVT_STC_DRAG_OVER,wxEVT_STC_DO_DROP -#endif -#endif -}; - - - -#ifndef SWIG -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_CHANGE, 1650) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_STYLENEEDED, 1651) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_CHARADDED, 1652) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_SAVEPOINTREACHED, 1653) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_SAVEPOINTLEFT, 1654) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_ROMODIFYATTEMPT, 1655) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_KEY, 1656) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_DOUBLECLICK, 1657) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_UPDATEUI, 1658) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_MODIFIED, 1659) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_MACRORECORD, 1660) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_MARGINCLICK, 1661) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_NEEDSHOWN, 1662) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_PAINTED, 1664) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_USERLISTSELECTION, 1665) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_URIDROPPED, 1666) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_DWELLSTART, 1667) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_DWELLEND, 1668) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_START_DRAG, 1669) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_DRAG_OVER, 1670) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_DO_DROP, 1671) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_ZOOM, 1672) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_HOTSPOT_CLICK, 1673) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_HOTSPOT_DCLICK, 1674) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_CALLTIP_CLICK, 1675) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_STC, wxEVT_STC_AUTOCOMP_SELECTION, 1676) -END_DECLARE_EVENT_TYPES() -#else - enum { - wxEVT_STC_CHANGE, - wxEVT_STC_STYLENEEDED, - wxEVT_STC_CHARADDED, - wxEVT_STC_SAVEPOINTREACHED, - wxEVT_STC_SAVEPOINTLEFT, - wxEVT_STC_ROMODIFYATTEMPT, - wxEVT_STC_KEY, - wxEVT_STC_DOUBLECLICK, - wxEVT_STC_UPDATEUI, - wxEVT_STC_MODIFIED, - wxEVT_STC_MACRORECORD, - wxEVT_STC_MARGINCLICK, - wxEVT_STC_NEEDSHOWN, - wxEVT_STC_PAINTED, - wxEVT_STC_USERLISTSELECTION, - wxEVT_STC_URIDROPPED, - wxEVT_STC_DWELLSTART, - wxEVT_STC_DWELLEND, - wxEVT_STC_START_DRAG, - wxEVT_STC_DRAG_OVER, - wxEVT_STC_DO_DROP, - wxEVT_STC_ZOOM, - wxEVT_STC_HOTSPOT_CLICK, - wxEVT_STC_HOTSPOT_DCLICK, - wxEVT_STC_CALLTIP_CLICK, - wxEVT_STC_AUTOCOMP_SELECTION - }; -#endif - - - -#ifndef SWIG -typedef void (wxEvtHandler::*wxStyledTextEventFunction)(wxStyledTextEvent&); - -#define EVT_STC_CHANGE(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_CHANGE, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_STYLENEEDED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_STYLENEEDED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_CHARADDED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_CHARADDED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_SAVEPOINTREACHED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_SAVEPOINTREACHED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_SAVEPOINTLEFT(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_SAVEPOINTLEFT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_ROMODIFYATTEMPT(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_ROMODIFYATTEMPT, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_KEY(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_KEY, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_DOUBLECLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DOUBLECLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_UPDATEUI(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_UPDATEUI, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_MODIFIED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_MODIFIED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_MACRORECORD(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_MACRORECORD, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_MARGINCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_MARGINCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_NEEDSHOWN(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_NEEDSHOWN, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_PAINTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_PAINTED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_USERLISTSELECTION(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_USERLISTSELECTION, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_URIDROPPED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_URIDROPPED, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_DWELLSTART(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DWELLSTART, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_DWELLEND(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DWELLEND, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_START_DRAG(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_START_DRAG, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_DRAG_OVER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DRAG_OVER, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_DO_DROP(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DO_DROP, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_ZOOM(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_ZOOM, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_HOTSPOT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_HOTSPOT_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_HOTSPOT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_HOTSPOT_DCLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_CALLTIP_CLICK(id, fn)) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_CALLTIP_CLICK, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#define EVT_STC_AUTOCOMP_SELECTION(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_AUTOCOMP_SELECTION, id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxStyledTextEventFunction, & fn ), (wxObject *) NULL ), -#endif - -//---------------------------------------------------------------------- -// Utility functions used within wxSTC - -#ifndef SWIG -#if wxUSE_UNICODE - -WXDLLIMPEXP_STC wxString stc2wx(const char* str); -WXDLLIMPEXP_STC wxString stc2wx(const char* str, size_t len); -WXDLLIMPEXP_STC const wxWX2MBbuf wx2stc(const wxString& str); - -#else // not UNICODE - -inline wxString stc2wx(const char* str) { - return wxString(str); -} -inline wxString stc2wx(const char* str, size_t len) { - return wxString(str, len); -} -inline const wxWX2MBbuf wx2stc(const wxString& str) { - return str.mbc_str(); -} - -#endif // UNICODE -#endif // SWIG - -//---------------------------------------------------------------------- -#endif - - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/README.txt b/src/plugins/contrib/wxSmithSTC/stc/scintilla/README.txt deleted file mode 100644 index 89ff867d44..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/README.txt +++ /dev/null @@ -1,7 +0,0 @@ -This directory contains copies of the scintilla/src and -scintilla/include directories from the Scintilla/SCiTE source -distribution. All other code needed to implement Scintilla on top of -wxWindows is located in the directory above this one. - -The current version of the Scintilla code is 1.70 - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Accessor.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Accessor.h deleted file mode 100644 index 0b2c4baee2..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Accessor.h +++ /dev/null @@ -1,78 +0,0 @@ -// Scintilla source code edit control -/** @file Accessor.h - ** Rapid easy access to contents of a Scintilla. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -enum { wsSpace = 1, wsTab = 2, wsSpaceTab = 4, wsInconsistent=8}; - -class Accessor; - -typedef bool (*PFNIsCommentLeader)(Accessor &styler, int pos, int len); - -/** - * Interface to data in a Scintilla. - */ -class Accessor { -protected: - enum {extremePosition=0x7FFFFFFF}; - /** @a bufferSize is a trade off between time taken to copy the characters - * and retrieval overhead. - * @a slopSize positions the buffer before the desired position - * in case there is some backtracking. */ - enum {bufferSize=4000, slopSize=bufferSize/8}; - char buf[bufferSize+1]; - int startPos; - int endPos; - int codePage; - - virtual bool InternalIsLeadByte(char ch)=0; - virtual void Fill(int position)=0; - -public: - Accessor() : startPos(extremePosition), endPos(0), codePage(0) {} - virtual ~Accessor() {} - char operator[](int position) { - if (position < startPos || position >= endPos) { - Fill(position); - } - return buf[position - startPos]; - } - /** Safe version of operator[], returning a defined value for invalid position. */ - char SafeGetCharAt(int position, char chDefault=' ') { - if (position < startPos || position >= endPos) { - Fill(position); - if (position < startPos || position >= endPos) { - // Position is outside range of document - return chDefault; - } - } - return buf[position - startPos]; - } - bool IsLeadByte(char ch) { - return codePage && InternalIsLeadByte(ch); - } - void SetCodePage(int codePage_) { codePage = codePage_; } - - virtual bool Match(int pos, const char *s)=0; - virtual char StyleAt(int position)=0; - virtual int GetLine(int position)=0; - virtual int LineStart(int line)=0; - virtual int LevelAt(int line)=0; - virtual int Length()=0; - virtual void Flush()=0; - virtual int GetLineState(int line)=0; - virtual int SetLineState(int line, int state)=0; - virtual int GetPropertyInt(const char *key, int defaultValue=0)=0; - virtual char *GetProperties()=0; - - // Style setting - virtual void StartAt(unsigned int start, char chMask=31)=0; - virtual void SetFlags(char chFlags_, char chWhile_)=0; - virtual unsigned int GetStartSegment()=0; - virtual void StartSegment(unsigned int pos)=0; - virtual void ColourTo(unsigned int pos, int chAttr)=0; - virtual void SetLevel(int line, int level)=0; - virtual int IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader = 0)=0; -}; diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/KeyWords.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/KeyWords.h deleted file mode 100644 index 059ac0da0f..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/KeyWords.h +++ /dev/null @@ -1,82 +0,0 @@ -// Scintilla source code edit control -/** @file KeyWords.h - ** Colourise for particular languages. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -typedef void (*LexerFunction)(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler); - -/** - * A LexerModule is responsible for lexing and folding a particular language. - * The class maintains a list of LexerModules which can be searched to find a - * module appropriate to a particular language. - */ -class LexerModule { -protected: - const LexerModule *next; - int language; - LexerFunction fnLexer; - LexerFunction fnFolder; - const char * const * wordListDescriptions; - int styleBits; - - static const LexerModule *base; - static int nextLanguage; - -public: - const char *languageName; - LexerModule(int language_, - LexerFunction fnLexer_, - const char *languageName_=0, - LexerFunction fnFolder_=0, - const char * const wordListDescriptions_[] = NULL, - int styleBits_=5); - virtual ~LexerModule() { - } - int GetLanguage() const { return language; } - - // -1 is returned if no WordList information is available - int GetNumWordLists() const; - const char *GetWordListDescription(int index) const; - - int GetStyleBitsNeeded() const; - - virtual void Lex(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const; - virtual void Fold(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const; - static const LexerModule *Find(int language); - static const LexerModule *Find(const char *languageName); -}; - -/** - * Check if a character is a space. - * This is ASCII specific but is safe with chars >= 0x80. - */ -inline bool isspacechar(unsigned char ch) { - return (ch == ' ') || ((ch >= 0x09) && (ch <= 0x0d)); -} - -inline bool iswordchar(char ch) { - return isascii(ch) && (isalnum(ch) || ch == '.' || ch == '_'); -} - -inline bool iswordstart(char ch) { - return isascii(ch) && (isalnum(ch) || ch == '_'); -} - -inline bool isoperator(char ch) { - if (isascii(ch) && isalnum(ch)) - return false; - // '.' left out as it is used to make up numbers - if (ch == '%' || ch == '^' || ch == '&' || ch == '*' || - ch == '(' || ch == ')' || ch == '-' || ch == '+' || - ch == '=' || ch == '|' || ch == '{' || ch == '}' || - ch == '[' || ch == ']' || ch == ':' || ch == ';' || - ch == '<' || ch == '>' || ch == ',' || ch == '/' || - ch == '?' || ch == '!' || ch == '.' || ch == '~') - return true; - return false; -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Platform.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Platform.h deleted file mode 100644 index 9dafa9f7d6..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Platform.h +++ /dev/null @@ -1,517 +0,0 @@ -// Scintilla source code edit control -/** @file Platform.h - ** Interface to platform facilities. Also includes some basic utilities. - ** Implemented in PlatGTK.cxx for GTK+/Linux, PlatWin.cxx for Windows, and PlatWX.cxx for wxWidgets. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef PLATFORM_H -#define PLATFORM_H - -// PLAT_GTK = GTK+ on Linux or Win32 -// PLAT_GTK_WIN32 is defined additionally when running PLAT_GTK under Win32 -// PLAT_WIN = Win32 API on Win32 OS -// PLAT_WX is wxWidgets on any supported platform - -#define PLAT_GTK 0 -#define PLAT_GTK_WIN32 0 -#define PLAT_WIN 0 -#define PLAT_WX 0 -#define PLAT_FOX 0 - -#if defined(FOX) -#undef PLAT_FOX -#define PLAT_FOX 1 - -#elif defined(__WX__) -#undef PLAT_WX -#define PLAT_WX 1 - -#elif defined(GTK) -#undef PLAT_GTK -#define PLAT_GTK 1 - -#ifdef _MSC_VER -#undef PLAT_GTK_WIN32 -#define PLAT_GTK_WIN32 1 -#endif - -#else -#undef PLAT_WIN -#define PLAT_WIN 1 - -#endif - - -// Underlying the implementation of the platform classes are platform specific types. -// Sometimes these need to be passed around by client code so they are defined here - -typedef void *FontID; -typedef void *SurfaceID; -typedef void *WindowID; -typedef void *MenuID; -typedef void *TickerID; -typedef void *Function; -typedef void *IdlerID; - -/** - * A geometric point class. - * Point is exactly the same as the Win32 POINT and GTK+ GdkPoint so can be used interchangeably. - */ -class Point { -public: - int x; - int y; - - explicit Point(int x_=0, int y_=0) : x(x_), y(y_) { - } - - // Other automatically defined methods (assignment, copy constructor, destructor) are fine - - static Point FromLong(long lpoint); -}; - -/** - * A geometric rectangle class. - * PRectangle is exactly the same as the Win32 RECT so can be used interchangeably. - * PRectangles contain their top and left sides, but not their right and bottom sides. - */ -class PRectangle { -public: - int left; - int top; - int right; - int bottom; - - PRectangle(int left_=0, int top_=0, int right_=0, int bottom_ = 0) : - left(left_), top(top_), right(right_), bottom(bottom_) { - } - - // Other automatically defined methods (assignment, copy constructor, destructor) are fine - - bool operator==(PRectangle &rc) { - return (rc.left == left) && (rc.right == right) && - (rc.top == top) && (rc.bottom == bottom); - } - bool Contains(Point pt) { - return (pt.x >= left) && (pt.x <= right) && - (pt.y >= top) && (pt.y <= bottom); - } - bool Contains(PRectangle rc) { - return (rc.left >= left) && (rc.right <= right) && - (rc.top >= top) && (rc.bottom <= bottom); - } - bool Intersects(PRectangle other) { - return (right > other.left) && (left < other.right) && - (bottom > other.top) && (top < other.bottom); - } - void Move(int xDelta, int yDelta) { - left += xDelta; - top += yDelta; - right += xDelta; - bottom += yDelta; - } - int Width() { return right - left; } - int Height() { return bottom - top; } -}; - -/** - * In some circumstances, including Win32 in paletted mode and GTK+, each colour - * must be allocated before use. The desired colours are held in the ColourDesired class, - * and after allocation the allocation entry is stored in the ColourAllocated class. In other - * circumstances, such as Win32 in true colour mode, the allocation process just copies - * the RGB values from the desired to the allocated class. - * As each desired colour requires allocation before it can be used, the ColourPair class - * holds both a ColourDesired and a ColourAllocated - * The Palette class is responsible for managing the palette of colours which contains a - * list of ColourPair objects and performs the allocation. - */ - -/** - * Holds a desired RGB colour. - */ -class ColourDesired { - long co; -public: - ColourDesired(long lcol=0) { - co = lcol; - } - - ColourDesired(unsigned int red, unsigned int green, unsigned int blue) { - Set(red, green, blue); - } - - bool operator==(const ColourDesired &other) const { - return co == other.co; - } - - void Set(long lcol) { - co = lcol; - } - - void Set(unsigned int red, unsigned int green, unsigned int blue) { - co = red | (green << 8) | (blue << 16); - } - - static inline unsigned int ValueOfHex(const char ch) { - if (ch >= '0' && ch <= '9') - return ch - '0'; - else if (ch >= 'A' && ch <= 'F') - return ch - 'A' + 10; - else if (ch >= 'a' && ch <= 'f') - return ch - 'a' + 10; - else - return 0; - } - - void Set(const char *val) { - if (*val == '#') { - val++; - } - unsigned int r = ValueOfHex(val[0]) * 16 + ValueOfHex(val[1]); - unsigned int g = ValueOfHex(val[2]) * 16 + ValueOfHex(val[3]); - unsigned int b = ValueOfHex(val[4]) * 16 + ValueOfHex(val[5]); - Set(r, g, b); - } - - long AsLong() const { - return co; - } - - unsigned int GetRed() { - return co & 0xff; - } - - unsigned int GetGreen() { - return (co >> 8) & 0xff; - } - - unsigned int GetBlue() { - return (co >> 16) & 0xff; - } -}; - -/** - * Holds an allocated RGB colour which may be an approximation to the desired colour. - */ -class ColourAllocated { - long coAllocated; - -public: - - ColourAllocated(long lcol=0) { - coAllocated = lcol; - } - - void Set(long lcol) { - coAllocated = lcol; - } - - long AsLong() const { - return coAllocated; - } -}; - -/** - * Colour pairs hold a desired colour and an allocated colour. - */ -struct ColourPair { - ColourDesired desired; - ColourAllocated allocated; - - ColourPair(ColourDesired desired_=ColourDesired(0,0,0)) { - desired = desired_; - allocated.Set(desired.AsLong()); - } - void Copy() { - allocated.Set(desired.AsLong()); - } -}; - -class Window; // Forward declaration for Palette - -/** - * Colour palette management. - */ -class Palette { - int used; - int size; - ColourPair *entries; -#if PLAT_GTK - void *allocatedPalette; // GdkColor * - int allocatedLen; -#endif - // Private so Palette objects can not be copied - Palette(const Palette &) {} - Palette &operator=(const Palette &) { return *this; } -public: -#if PLAT_WIN - void *hpal; -#endif - bool allowRealization; - - Palette(); - ~Palette(); - - void Release(); - - /** - * This method either adds a colour to the list of wanted colours (want==true) - * or retrieves the allocated colour back to the ColourPair. - * This is one method to make it easier to keep the code for wanting and retrieving in sync. - */ - void WantFind(ColourPair &cp, bool want); - - void Allocate(Window &w); -}; - -/** - * Font management. - */ -class Font { -protected: - FontID id; -#if PLAT_WX - int ascent; -#endif - // Private so Font objects can not be copied - Font(const Font &) {} - Font &operator=(const Font &) { id=0; return *this; } -public: - Font(); - virtual ~Font(); - - virtual void Create(const char *faceName, int characterSet, int size, - bool bold, bool italic, bool extraFontFlag=false); - virtual void Release(); - - FontID GetID() { return id; } - // Alias another font - caller guarantees not to Release - void SetID(FontID id_) { id = id_; } - friend class Surface; - friend class SurfaceImpl; -}; - -/** - * A surface abstracts a place to draw. - */ -class Surface { -private: - // Private so Surface objects can not be copied - Surface(const Surface &) {} - Surface &operator=(const Surface &) { return *this; } -public: - Surface() {}; - virtual ~Surface() {}; - static Surface *Allocate(); - - virtual void Init(WindowID wid)=0; - virtual void Init(SurfaceID sid, WindowID wid)=0; - virtual void InitPixMap(int width, int height, Surface *surface_, WindowID wid)=0; - - virtual void Release()=0; - virtual bool Initialised()=0; - virtual void PenColour(ColourAllocated fore)=0; - virtual int LogPixelsY()=0; - virtual int DeviceHeightFont(int points)=0; - virtual void MoveTo(int x_, int y_)=0; - virtual void LineTo(int x_, int y_)=0; - virtual void Polygon(Point *pts, int npts, ColourAllocated fore, ColourAllocated back)=0; - virtual void RectangleDraw(PRectangle rc, ColourAllocated fore, ColourAllocated back)=0; - virtual void FillRectangle(PRectangle rc, ColourAllocated back)=0; - virtual void FillRectangle(PRectangle rc, Surface &surfacePattern)=0; - virtual void RoundedRectangle(PRectangle rc, ColourAllocated fore, ColourAllocated back)=0; - virtual void AlphaRectangle(PRectangle rc, int cornerSize, ColourAllocated fill, int alphaFill, - ColourAllocated outline, int alphaOutline, int flags)=0; - virtual void Ellipse(PRectangle rc, ColourAllocated fore, ColourAllocated back)=0; - virtual void Copy(PRectangle rc, Point from, Surface &surfaceSource)=0; - - virtual void DrawTextNoClip(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back)=0; - virtual void DrawTextClipped(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back)=0; - virtual void DrawTextTransparent(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore)=0; - virtual void MeasureWidths(Font &font_, const char *s, int len, int *positions)=0; - virtual int WidthText(Font &font_, const char *s, int len)=0; - virtual int WidthChar(Font &font_, char ch)=0; - virtual int Ascent(Font &font_)=0; - virtual int Descent(Font &font_)=0; - virtual int InternalLeading(Font &font_)=0; - virtual int ExternalLeading(Font &font_)=0; - virtual int Height(Font &font_)=0; - virtual int AverageCharWidth(Font &font_)=0; - - virtual int SetPalette(Palette *pal, bool inBackGround)=0; - virtual void SetClip(PRectangle rc)=0; - virtual void FlushCachedState()=0; - - virtual void SetUnicodeMode(bool unicodeMode_)=0; - virtual void SetDBCSMode(int codePage)=0; -}; - -/** - * A simple callback action passing one piece of untyped user data. - */ -typedef void (*CallBackAction)(void*); - -/** - * Class to hide the details of window manipulation. - * Does not own the window which will normally have a longer life than this object. - */ -class Window { -protected: - WindowID id; -public: - Window() : id(0), cursorLast(cursorInvalid) {} - Window(const Window &source) : id(source.id), cursorLast(cursorInvalid) {} - virtual ~Window(); - Window &operator=(WindowID id_) { - id = id_; - return *this; - } - WindowID GetID() const { return id; } - bool Created() const { return id != 0; } - void Destroy(); - bool HasFocus(); - PRectangle GetPosition(); - void SetPosition(PRectangle rc); - void SetPositionRelative(PRectangle rc, Window relativeTo); - PRectangle GetClientPosition(); - void Show(bool show=true); - void InvalidateAll(); - void InvalidateRectangle(PRectangle rc); - virtual void SetFont(Font &font); - enum Cursor { cursorInvalid, cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow, cursorHand }; - void SetCursor(Cursor curs); - void SetTitle(const char *s); -private: - Cursor cursorLast; -}; - -/** - * Listbox management. - */ - -class ListBox : public Window { -public: - ListBox(); - virtual ~ListBox(); - static ListBox *Allocate(); - - virtual void SetFont(Font &font)=0; - virtual void Create(Window &parent, int ctrlID, Point location, int lineHeight_, bool unicodeMode_)=0; - virtual void SetAverageCharWidth(int width)=0; - virtual void SetVisibleRows(int rows)=0; - virtual int GetVisibleRows() const=0; - virtual PRectangle GetDesiredRect()=0; - virtual int CaretFromEdge()=0; - virtual void Clear()=0; - virtual void Append(char *s, int type = -1)=0; - virtual int Length()=0; - virtual void Select(int n)=0; - virtual int GetSelection()=0; - virtual int Find(const char *prefix)=0; - virtual void GetValue(int n, char *value, int len)=0; - virtual void RegisterImage(int type, const char *xpm_data)=0; - virtual void ClearRegisteredImages()=0; - virtual void SetDoubleClickAction(CallBackAction, void *)=0; - virtual void SetList(const char* list, char separator, char typesep)=0; -}; - -/** - * Menu management. - */ -class Menu { - MenuID id; -public: - Menu(); - MenuID GetID() { return id; } - void CreatePopUp(); - void Destroy(); - void Show(Point pt, Window &w); -}; - -class ElapsedTime { - long bigBit; - long littleBit; -public: - ElapsedTime(); - double Duration(bool reset=false); -}; - -/** - * Dynamic Library (DLL/SO/...) loading - */ -class DynamicLibrary { -public: - virtual ~DynamicLibrary() {}; - - /// @return Pointer to function "name", or NULL on failure. - virtual Function FindFunction(const char *name) = 0; - - /// @return true if the library was loaded successfully. - virtual bool IsValid() = 0; - - /// @return An instance of a DynamicLibrary subclass with "modulePath" loaded. - static DynamicLibrary *Load(const char *modulePath); -}; - -/** - * Platform class used to retrieve system wide parameters such as double click speed - * and chrome colour. Not a creatable object, more of a module with several functions. - */ -class Platform { - // Private so Platform objects can not be copied - Platform(const Platform &) {} - Platform &operator=(const Platform &) { return *this; } -public: - // Should be private because no new Platforms are ever created - // but gcc warns about this - Platform() {} - ~Platform() {} - static ColourDesired Chrome(); - static ColourDesired ChromeHighlight(); - static const char *DefaultFont(); - static int DefaultFontSize(); - static unsigned int DoubleClickTime(); - static bool MouseButtonBounce(); - static void DebugDisplay(const char *s); - static bool IsKeyDown(int key); - static long SendScintilla( - WindowID w, unsigned int msg, unsigned long wParam=0, long lParam=0); - static long SendScintillaPointer( - WindowID w, unsigned int msg, unsigned long wParam=0, void *lParam=0); - static bool IsDBCSLeadByte(int codePage, char ch); - static int DBCSCharLength(int codePage, const char *s); - static int DBCSCharMaxLength(); - - // These are utility functions not really tied to a platform - static int Minimum(int a, int b); - static int Maximum(int a, int b); - // Next three assume 16 bit shorts and 32 bit longs - static long LongFromTwoShorts(short a,short b) { - return (a) | ((b) << 16); - } - static short HighShortFromLong(long x) { - return static_cast(x >> 16); - } - static short LowShortFromLong(long x) { - return static_cast(x & 0xffff); - } - static void DebugPrintf(const char *format, ...); - static bool ShowAssertionPopUps(bool assertionPopUps_); - static void Assert(const char *c, const char *file, int line); - static int Clamp(int val, int minVal, int maxVal); -}; - -#ifdef NDEBUG -#define PLATFORM_ASSERT(c) ((void)0) -#else -#define PLATFORM_ASSERT(c) ((c) ? (void)(0) : Platform::Assert(#c, __FILE__, __LINE__)) -#endif - -// Shut up annoying Visual C++ warnings: -#ifdef _MSC_VER -#pragma warning(disable: 4244 4309 4514 4710) -#endif - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/PropSet.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/PropSet.h deleted file mode 100644 index e38de7dc40..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/PropSet.h +++ /dev/null @@ -1,114 +0,0 @@ -// Scintilla source code edit control -/** @file PropSet.h - ** A Java style properties file module. - **/ -// Copyright 1998-2002 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef PROPSET_H -#define PROPSET_H -#include "SString.h" - -bool EqualCaseInsensitive(const char *a, const char *b); - -bool isprefix(const char *target, const char *prefix); - -struct Property { - unsigned int hash; - char *key; - char *val; - Property *next; - Property() : hash(0), key(0), val(0), next(0) {} -}; - -/** - */ -class PropSet { -protected: - enum { hashRoots=31 }; - Property *props[hashRoots]; - Property *enumnext; - int enumhash; - static bool caseSensitiveFilenames; - static unsigned int HashString(const char *s, size_t len) { - unsigned int ret = 0; - while (len--) { - ret <<= 4; - ret ^= *s; - s++; - } - return ret; - } - static bool IncludesVar(const char *value, const char *key); - -public: - PropSet *superPS; - PropSet(); - ~PropSet(); - void Set(const char *key, const char *val, int lenKey=-1, int lenVal=-1); - void Set(const char *keyVal); - void Unset(const char *key, int lenKey=-1); - void SetMultiple(const char *s); - SString Get(const char *key); - SString GetExpanded(const char *key); - SString Expand(const char *withVars, int maxExpands=100); - int GetInt(const char *key, int defaultValue=0); - SString GetWild(const char *keybase, const char *filename); - SString GetNewExpand(const char *keybase, const char *filename=""); - void Clear(); - char *ToString(); // Caller must delete[] the return value - bool GetFirst(char **key, char **val); - bool GetNext(char **key, char **val); - static void SetCaseSensitiveFilenames(bool caseSensitiveFilenames_) { - caseSensitiveFilenames = caseSensitiveFilenames_; - } - -private: - // copy-value semantics not implemented - PropSet(const PropSet ©); - void operator=(const PropSet &assign); -}; - -/** - */ -class WordList { -public: - // Each word contains at least one character - a empty word acts as sentinel at the end. - char **words; - char **wordsNoCase; - char *list; - int len; - bool onlyLineEnds; ///< Delimited by any white space or only line ends - bool sorted; - bool sortedNoCase; - int starts[256]; - WordList(bool onlyLineEnds_ = false) : - words(0), wordsNoCase(0), list(0), len(0), onlyLineEnds(onlyLineEnds_), - sorted(false), sortedNoCase(false) {} - ~WordList() { Clear(); } - operator bool() { return len ? true : false; } - char *operator[](int ind) { return words[ind]; } - void Clear(); - void Set(const char *s); - char *Allocate(int size); - void SetFromAllocated(); - bool InList(const char *s); - bool InListAbbreviated(const char *s, const char marker); - const char *GetNearestWord(const char *wordStart, int searchLen, - bool ignoreCase = false, SString wordCharacters="", int wordIndex = -1); - char *GetNearestWords(const char *wordStart, int searchLen, - bool ignoreCase=false, char otherSeparator='\0', bool exactLen=false); -}; - -inline bool IsAlphabetic(unsigned int ch) { - return ((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z')); -} - - -#ifdef _MSC_VER -// Visual C++ doesn't like the private copy idiom for disabling -// the default copy constructor and operator=, but it's fine. -#pragma warning(disable: 4511 4512) -#endif - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/SString.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/SString.h deleted file mode 100644 index 38a206ccf2..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/SString.h +++ /dev/null @@ -1,280 +0,0 @@ -// SciTE - Scintilla based Text Editor -/** @file SString.h - ** A simple string class. - **/ -// Copyright 1998-2004 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef SSTRING_H -#define SSTRING_H - -// These functions are implemented because each platform calls them something different. -int CompareCaseInsensitive(const char *a, const char *b); -int CompareNCaseInsensitive(const char *a, const char *b, size_t len); -bool EqualCaseInsensitive(const char *a, const char *b); - -// Define another string class. -// While it would be 'better' to use std::string, that doubles the executable size. -// An SString may contain embedded nul characters. - -/** - * Base class from which the two other classes (SBuffer & SString) - * are derived. - */ -class SContainer { -public: - /** Type of string lengths (sizes) and positions (indexes). */ - typedef size_t lenpos_t; - /** Out of bounds value indicating that the string argument should be measured. */ - enum { measure_length=0xffffffffU}; - -protected: - char *s; ///< The C string - lenpos_t sSize; ///< The size of the buffer, less 1: ie. the maximum size of the string - - SContainer() : s(0), sSize(0) {} - ~SContainer() { - delete []s; // Suppose it was allocated using StringAllocate - s = 0; - sSize = 0; - } - /** Size of buffer. */ - lenpos_t size() const { - if (s) { - return sSize; - } else { - return 0; - } - } -public: - /** - * Allocate uninitialized memory big enough to fit a string of the given length. - * @return the pointer to the new string - */ - static char *StringAllocate(lenpos_t len); - /** - * Duplicate a buffer/C string. - * Allocate memory of the given size, or big enough to fit the string if length isn't given; - * then copy the given string in the allocated memory. - * @return the pointer to the new string - */ - static char *StringAllocate( - const char *s, ///< The string to duplicate - lenpos_t len=measure_length); ///< The length of memory to allocate. Optional. -}; - - -/** - * @brief A string buffer class. - * - * Main use is to ask an API the length of a string it can provide, - * then to allocate a buffer of the given size, and to provide this buffer - * to the API to put the string. - * This class is intended to be shortlived, to be transformed as SString - * as soon as it holds the string, so it has little members. - * Note: we assume the buffer is filled by the API. If the length can be shorter, - * we should set sLen to strlen(sb.ptr()) in related SString constructor and assignment. - */ -class SBuffer : protected SContainer { -public: - SBuffer(lenpos_t len) { - s = StringAllocate(len); - if (s) { - *s = '\0'; - sSize = len; - } else { - sSize = 0; - } - } -private: - /// Copy constructor - // Here only to be on the safe size, user should avoid returning SBuffer values. - SBuffer(const SBuffer &source) : SContainer() { - s = StringAllocate(source.s, source.sSize); - sSize = (s) ? source.sSize : 0; - } - /// Default assignment operator - // Same here, shouldn't be used - SBuffer &operator=(const SBuffer &source) { - if (this != &source) { - delete []s; - s = StringAllocate(source.s, source.sSize); - sSize = (s) ? source.sSize : 0; - } - return *this; - } -public: - /** Provide direct read/write access to buffer. */ - char *ptr() { - return s; - } - /** Ownership of the buffer have been taken, so release it. */ - void reset() { - s = 0; - sSize = 0; - } - /** Size of buffer. */ - lenpos_t size() const { - return SContainer::size(); - } -}; - - -/** - * @brief A simple string class. - * - * Hold the length of the string for quick operations, - * can have a buffer bigger than the string to avoid too many memory allocations and copies. - * May have embedded zeroes as a result of @a substitute, but relies too heavily on C string - * functions to allow reliable manipulations of these strings, other than simple appends, etc. - */ -class SString : protected SContainer { - lenpos_t sLen; ///< The size of the string in s - lenpos_t sizeGrowth; ///< Minimum growth size when appending strings - enum { sizeGrowthDefault = 64 }; - - bool grow(lenpos_t lenNew); - SString &assign(const char *sOther, lenpos_t sSize_=measure_length); - -public: - SString() : sLen(0), sizeGrowth(sizeGrowthDefault) {} - SString(const SString &source) : SContainer(), sizeGrowth(sizeGrowthDefault) { - s = StringAllocate(source.s, source.sLen); - sSize = sLen = (s) ? source.sLen : 0; - } - SString(const char *s_) : sizeGrowth(sizeGrowthDefault) { - s = StringAllocate(s_); - sSize = sLen = (s) ? strlen(s) : 0; - } - SString(SBuffer &buf) : sizeGrowth(sizeGrowthDefault) { - s = buf.ptr(); - sSize = sLen = buf.size(); - // Consumes the given buffer! - buf.reset(); - } - SString(const char *s_, lenpos_t first, lenpos_t last) : sizeGrowth(sizeGrowthDefault) { - // note: expects the "last" argument to point one beyond the range end (a la STL iterators) - s = StringAllocate(s_ + first, last - first); - sSize = sLen = (s) ? last - first : 0; - } - SString(int i); - SString(double d, int precision); - ~SString() { - sLen = 0; - } - void clear() { - if (s) { - *s = '\0'; - } - sLen = 0; - } - /** Size of buffer. */ - lenpos_t size() const { - return SContainer::size(); - } - /** Size of string in buffer. */ - lenpos_t length() const { - return sLen; - } - /** Read access to a character of the string. */ - char operator[](lenpos_t i) const { - return (s && i < sSize) ? s[i] : '\0'; - } - SString &operator=(const char *source) { - return assign(source); - } - SString &operator=(const SString &source) { - if (this != &source) { - assign(source.s, source.sLen); - } - return *this; - } - bool operator==(const SString &sOther) const; - bool operator!=(const SString &sOther) const { - return !operator==(sOther); - } - bool operator==(const char *sOther) const; - bool operator!=(const char *sOther) const { - return !operator==(sOther); - } - bool contains(char ch) const { - return (s && *s) ? strchr(s, ch) != 0 : false; - } - void setsizegrowth(lenpos_t sizeGrowth_) { - sizeGrowth = sizeGrowth_; - } - const char *c_str() const { - return s ? s : ""; - } - /** Give ownership of buffer to caller which must use delete[] to free buffer. */ - char *detach() { - char *sRet = s; - s = 0; - sSize = 0; - sLen = 0; - return sRet; - } - SString substr(lenpos_t subPos, lenpos_t subLen=measure_length) const; - SString &lowercase(lenpos_t subPos = 0, lenpos_t subLen=measure_length); - SString &uppercase(lenpos_t subPos = 0, lenpos_t subLen=measure_length); - SString &append(const char *sOther, lenpos_t sLenOther=measure_length, char sep = '\0'); - SString &operator+=(const char *sOther) { - return append(sOther, static_cast(measure_length)); - } - SString &operator+=(const SString &sOther) { - return append(sOther.s, sOther.sLen); - } - SString &operator+=(char ch) { - return append(&ch, 1); - } - SString &appendwithseparator(const char *sOther, char sep) { - return append(sOther, strlen(sOther), sep); - } - SString &insert(lenpos_t pos, const char *sOther, lenpos_t sLenOther=measure_length); - - /** - * Remove @a len characters from the @a pos position, included. - * Characters at pos + len and beyond replace characters at pos. - * If @a len is 0, or greater than the length of the string - * starting at @a pos, the string is just truncated at @a pos. - */ - void remove(lenpos_t pos, lenpos_t len); - - SString &change(lenpos_t pos, char ch) { - if (pos < sLen) { // character changed must be in string bounds - *(s + pos) = ch; - } - return *this; - } - /** Read an integral numeric value from the string. */ - int value() const { - return s ? atoi(s) : 0; - } - bool startswith(const char *prefix); - bool endswith(const char *suffix); - int search(const char *sFind, lenpos_t start=0) const; - bool contains(const char *sFind) const { - return search(sFind) >= 0; - } - int substitute(char chFind, char chReplace); - int substitute(const char *sFind, const char *sReplace); - int remove(const char *sFind) { - return substitute(sFind, ""); - } -}; - - -/** - * Duplicate a C string. - * Allocate memory of the given size, or big enough to fit the string if length isn't given; - * then copy the given string in the allocated memory. - * @return the pointer to the new string - */ -inline char *StringDup( - const char *s, ///< The string to duplicate - SContainer::lenpos_t len=SContainer::measure_length) ///< The length of memory to allocate. Optional. -{ - return SContainer::StringAllocate(s, len); -} - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/SciLexer.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/SciLexer.h deleted file mode 100644 index 22d016d21c..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/SciLexer.h +++ /dev/null @@ -1,1074 +0,0 @@ -// Scintilla source code edit control -/** @file SciLexer.h - ** Interface to the added lexer functions in the SciLexer version of the edit control. - **/ -// Copyright 1998-2002 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -// Most of this file is automatically generated from the Scintilla.iface interface definition -// file which contains any comments about the definitions. HFacer.py does the generation. - -#ifndef SCILEXER_H -#define SCILEXER_H - -// SciLexer features - not in standard Scintilla - -//++Autogenerated -- start of section automatically generated from Scintilla.iface -#define SCLEX_CONTAINER 0 -#define SCLEX_NULL 1 -#define SCLEX_PYTHON 2 -#define SCLEX_CPP 3 -#define SCLEX_HTML 4 -#define SCLEX_XML 5 -#define SCLEX_PERL 6 -#define SCLEX_SQL 7 -#define SCLEX_VB 8 -#define SCLEX_PROPERTIES 9 -#define SCLEX_ERRORLIST 10 -#define SCLEX_MAKEFILE 11 -#define SCLEX_BATCH 12 -#define SCLEX_XCODE 13 -#define SCLEX_LATEX 14 -#define SCLEX_LUA 15 -#define SCLEX_DIFF 16 -#define SCLEX_CONF 17 -#define SCLEX_PASCAL 18 -#define SCLEX_AVE 19 -#define SCLEX_ADA 20 -#define SCLEX_LISP 21 -#define SCLEX_RUBY 22 -#define SCLEX_EIFFEL 23 -#define SCLEX_EIFFELKW 24 -#define SCLEX_TCL 25 -#define SCLEX_NNCRONTAB 26 -#define SCLEX_BULLANT 27 -#define SCLEX_VBSCRIPT 28 -#define SCLEX_BAAN 31 -#define SCLEX_MATLAB 32 -#define SCLEX_SCRIPTOL 33 -#define SCLEX_ASM 34 -#define SCLEX_CPPNOCASE 35 -#define SCLEX_FORTRAN 36 -#define SCLEX_F77 37 -#define SCLEX_CSS 38 -#define SCLEX_POV 39 -#define SCLEX_LOUT 40 -#define SCLEX_ESCRIPT 41 -#define SCLEX_PS 42 -#define SCLEX_NSIS 43 -#define SCLEX_MMIXAL 44 -#define SCLEX_CLW 45 -#define SCLEX_CLWNOCASE 46 -#define SCLEX_LOT 47 -#define SCLEX_YAML 48 -#define SCLEX_TEX 49 -#define SCLEX_METAPOST 50 -#define SCLEX_POWERBASIC 51 -#define SCLEX_FORTH 52 -#define SCLEX_ERLANG 53 -#define SCLEX_OCTAVE 54 -#define SCLEX_MSSQL 55 -#define SCLEX_VERILOG 56 -#define SCLEX_KIX 57 -#define SCLEX_GUI4CLI 58 -#define SCLEX_SPECMAN 59 -#define SCLEX_AU3 60 -#define SCLEX_APDL 61 -#define SCLEX_BASH 62 -#define SCLEX_ASN1 63 -#define SCLEX_VHDL 64 -#define SCLEX_CAML 65 -#define SCLEX_BLITZBASIC 66 -#define SCLEX_PUREBASIC 67 -#define SCLEX_HASKELL 68 -#define SCLEX_PHPSCRIPT 69 -#define SCLEX_TADS3 70 -#define SCLEX_REBOL 71 -#define SCLEX_SMALLTALK 72 -#define SCLEX_FLAGSHIP 73 -#define SCLEX_CSOUND 74 -#define SCLEX_FREEBASIC 75 -#define SCLEX_INNOSETUP 76 -#define SCLEX_OPAL 77 -#define SCLEX_SPICE 78 -#define SCLEX_AUTOMATIC 1000 -#define SCE_P_DEFAULT 0 -#define SCE_P_COMMENTLINE 1 -#define SCE_P_NUMBER 2 -#define SCE_P_STRING 3 -#define SCE_P_CHARACTER 4 -#define SCE_P_WORD 5 -#define SCE_P_TRIPLE 6 -#define SCE_P_TRIPLEDOUBLE 7 -#define SCE_P_CLASSNAME 8 -#define SCE_P_DEFNAME 9 -#define SCE_P_OPERATOR 10 -#define SCE_P_IDENTIFIER 11 -#define SCE_P_COMMENTBLOCK 12 -#define SCE_P_STRINGEOL 13 -#define SCE_P_WORD2 14 -#define SCE_P_DECORATOR 15 -#define SCE_C_DEFAULT 0 -#define SCE_C_COMMENT 1 -#define SCE_C_COMMENTLINE 2 -#define SCE_C_COMMENTDOC 3 -#define SCE_C_NUMBER 4 -#define SCE_C_WORD 5 -#define SCE_C_STRING 6 -#define SCE_C_CHARACTER 7 -#define SCE_C_UUID 8 -#define SCE_C_PREPROCESSOR 9 -#define SCE_C_OPERATOR 10 -#define SCE_C_IDENTIFIER 11 -#define SCE_C_STRINGEOL 12 -#define SCE_C_VERBATIM 13 -#define SCE_C_REGEX 14 -#define SCE_C_COMMENTLINEDOC 15 -#define SCE_C_WORD2 16 -#define SCE_C_COMMENTDOCKEYWORD 17 -#define SCE_C_COMMENTDOCKEYWORDERROR 18 -#define SCE_C_GLOBALCLASS 19 -#define SCE_TCL_DEFAULT 0 -#define SCE_TCL_COMMENT 1 -#define SCE_TCL_COMMENTLINE 2 -#define SCE_TCL_NUMBER 3 -#define SCE_TCL_WORD_IN_QUOTE 4 -#define SCE_TCL_IN_QUOTE 5 -#define SCE_TCL_OPERATOR 6 -#define SCE_TCL_IDENTIFIER 7 -#define SCE_TCL_SUBSTITUTION 8 -#define SCE_TCL_SUB_BRACE 9 -#define SCE_TCL_MODIFIER 10 -#define SCE_TCL_EXPAND 11 -#define SCE_TCL_WORD 12 -#define SCE_TCL_WORD2 13 -#define SCE_TCL_WORD3 14 -#define SCE_TCL_WORD4 15 -#define SCE_TCL_WORD5 16 -#define SCE_TCL_WORD6 17 -#define SCE_TCL_WORD7 18 -#define SCE_TCL_WORD8 19 -#define SCE_TCL_COMMENT_BOX 20 -#define SCE_TCL_BLOCK_COMMENT 21 -#define SCE_H_DEFAULT 0 -#define SCE_H_TAG 1 -#define SCE_H_TAGUNKNOWN 2 -#define SCE_H_ATTRIBUTE 3 -#define SCE_H_ATTRIBUTEUNKNOWN 4 -#define SCE_H_NUMBER 5 -#define SCE_H_DOUBLESTRING 6 -#define SCE_H_SINGLESTRING 7 -#define SCE_H_OTHER 8 -#define SCE_H_COMMENT 9 -#define SCE_H_ENTITY 10 -#define SCE_H_TAGEND 11 -#define SCE_H_XMLSTART 12 -#define SCE_H_XMLEND 13 -#define SCE_H_SCRIPT 14 -#define SCE_H_ASP 15 -#define SCE_H_ASPAT 16 -#define SCE_H_CDATA 17 -#define SCE_H_QUESTION 18 -#define SCE_H_VALUE 19 -#define SCE_H_XCCOMMENT 20 -#define SCE_H_SGML_DEFAULT 21 -#define SCE_H_SGML_COMMAND 22 -#define SCE_H_SGML_1ST_PARAM 23 -#define SCE_H_SGML_DOUBLESTRING 24 -#define SCE_H_SGML_SIMPLESTRING 25 -#define SCE_H_SGML_ERROR 26 -#define SCE_H_SGML_SPECIAL 27 -#define SCE_H_SGML_ENTITY 28 -#define SCE_H_SGML_COMMENT 29 -#define SCE_H_SGML_1ST_PARAM_COMMENT 30 -#define SCE_H_SGML_BLOCK_DEFAULT 31 -#define SCE_HJ_START 40 -#define SCE_HJ_DEFAULT 41 -#define SCE_HJ_COMMENT 42 -#define SCE_HJ_COMMENTLINE 43 -#define SCE_HJ_COMMENTDOC 44 -#define SCE_HJ_NUMBER 45 -#define SCE_HJ_WORD 46 -#define SCE_HJ_KEYWORD 47 -#define SCE_HJ_DOUBLESTRING 48 -#define SCE_HJ_SINGLESTRING 49 -#define SCE_HJ_SYMBOLS 50 -#define SCE_HJ_STRINGEOL 51 -#define SCE_HJ_REGEX 52 -#define SCE_HJA_START 55 -#define SCE_HJA_DEFAULT 56 -#define SCE_HJA_COMMENT 57 -#define SCE_HJA_COMMENTLINE 58 -#define SCE_HJA_COMMENTDOC 59 -#define SCE_HJA_NUMBER 60 -#define SCE_HJA_WORD 61 -#define SCE_HJA_KEYWORD 62 -#define SCE_HJA_DOUBLESTRING 63 -#define SCE_HJA_SINGLESTRING 64 -#define SCE_HJA_SYMBOLS 65 -#define SCE_HJA_STRINGEOL 66 -#define SCE_HJA_REGEX 67 -#define SCE_HB_START 70 -#define SCE_HB_DEFAULT 71 -#define SCE_HB_COMMENTLINE 72 -#define SCE_HB_NUMBER 73 -#define SCE_HB_WORD 74 -#define SCE_HB_STRING 75 -#define SCE_HB_IDENTIFIER 76 -#define SCE_HB_STRINGEOL 77 -#define SCE_HBA_START 80 -#define SCE_HBA_DEFAULT 81 -#define SCE_HBA_COMMENTLINE 82 -#define SCE_HBA_NUMBER 83 -#define SCE_HBA_WORD 84 -#define SCE_HBA_STRING 85 -#define SCE_HBA_IDENTIFIER 86 -#define SCE_HBA_STRINGEOL 87 -#define SCE_HP_START 90 -#define SCE_HP_DEFAULT 91 -#define SCE_HP_COMMENTLINE 92 -#define SCE_HP_NUMBER 93 -#define SCE_HP_STRING 94 -#define SCE_HP_CHARACTER 95 -#define SCE_HP_WORD 96 -#define SCE_HP_TRIPLE 97 -#define SCE_HP_TRIPLEDOUBLE 98 -#define SCE_HP_CLASSNAME 99 -#define SCE_HP_DEFNAME 100 -#define SCE_HP_OPERATOR 101 -#define SCE_HP_IDENTIFIER 102 -#define SCE_HPHP_COMPLEX_VARIABLE 104 -#define SCE_HPA_START 105 -#define SCE_HPA_DEFAULT 106 -#define SCE_HPA_COMMENTLINE 107 -#define SCE_HPA_NUMBER 108 -#define SCE_HPA_STRING 109 -#define SCE_HPA_CHARACTER 110 -#define SCE_HPA_WORD 111 -#define SCE_HPA_TRIPLE 112 -#define SCE_HPA_TRIPLEDOUBLE 113 -#define SCE_HPA_CLASSNAME 114 -#define SCE_HPA_DEFNAME 115 -#define SCE_HPA_OPERATOR 116 -#define SCE_HPA_IDENTIFIER 117 -#define SCE_HPHP_DEFAULT 118 -#define SCE_HPHP_HSTRING 119 -#define SCE_HPHP_SIMPLESTRING 120 -#define SCE_HPHP_WORD 121 -#define SCE_HPHP_NUMBER 122 -#define SCE_HPHP_VARIABLE 123 -#define SCE_HPHP_COMMENT 124 -#define SCE_HPHP_COMMENTLINE 125 -#define SCE_HPHP_HSTRING_VARIABLE 126 -#define SCE_HPHP_OPERATOR 127 -#define SCE_PL_DEFAULT 0 -#define SCE_PL_ERROR 1 -#define SCE_PL_COMMENTLINE 2 -#define SCE_PL_POD 3 -#define SCE_PL_NUMBER 4 -#define SCE_PL_WORD 5 -#define SCE_PL_STRING 6 -#define SCE_PL_CHARACTER 7 -#define SCE_PL_PUNCTUATION 8 -#define SCE_PL_PREPROCESSOR 9 -#define SCE_PL_OPERATOR 10 -#define SCE_PL_IDENTIFIER 11 -#define SCE_PL_SCALAR 12 -#define SCE_PL_ARRAY 13 -#define SCE_PL_HASH 14 -#define SCE_PL_SYMBOLTABLE 15 -#define SCE_PL_VARIABLE_INDEXER 16 -#define SCE_PL_REGEX 17 -#define SCE_PL_REGSUBST 18 -#define SCE_PL_LONGQUOTE 19 -#define SCE_PL_BACKTICKS 20 -#define SCE_PL_DATASECTION 21 -#define SCE_PL_HERE_DELIM 22 -#define SCE_PL_HERE_Q 23 -#define SCE_PL_HERE_QQ 24 -#define SCE_PL_HERE_QX 25 -#define SCE_PL_STRING_Q 26 -#define SCE_PL_STRING_QQ 27 -#define SCE_PL_STRING_QX 28 -#define SCE_PL_STRING_QR 29 -#define SCE_PL_STRING_QW 30 -#define SCE_PL_POD_VERB 31 -#define SCE_RB_DEFAULT 0 -#define SCE_RB_ERROR 1 -#define SCE_RB_COMMENTLINE 2 -#define SCE_RB_POD 3 -#define SCE_RB_NUMBER 4 -#define SCE_RB_WORD 5 -#define SCE_RB_STRING 6 -#define SCE_RB_CHARACTER 7 -#define SCE_RB_CLASSNAME 8 -#define SCE_RB_DEFNAME 9 -#define SCE_RB_OPERATOR 10 -#define SCE_RB_IDENTIFIER 11 -#define SCE_RB_REGEX 12 -#define SCE_RB_GLOBAL 13 -#define SCE_RB_SYMBOL 14 -#define SCE_RB_MODULE_NAME 15 -#define SCE_RB_INSTANCE_VAR 16 -#define SCE_RB_CLASS_VAR 17 -#define SCE_RB_BACKTICKS 18 -#define SCE_RB_DATASECTION 19 -#define SCE_RB_HERE_DELIM 20 -#define SCE_RB_HERE_Q 21 -#define SCE_RB_HERE_QQ 22 -#define SCE_RB_HERE_QX 23 -#define SCE_RB_STRING_Q 24 -#define SCE_RB_STRING_QQ 25 -#define SCE_RB_STRING_QX 26 -#define SCE_RB_STRING_QR 27 -#define SCE_RB_STRING_QW 28 -#define SCE_RB_WORD_DEMOTED 29 -#define SCE_RB_STDIN 30 -#define SCE_RB_STDOUT 31 -#define SCE_RB_STDERR 40 -#define SCE_RB_UPPER_BOUND 41 -#define SCE_B_DEFAULT 0 -#define SCE_B_COMMENT 1 -#define SCE_B_NUMBER 2 -#define SCE_B_KEYWORD 3 -#define SCE_B_STRING 4 -#define SCE_B_PREPROCESSOR 5 -#define SCE_B_OPERATOR 6 -#define SCE_B_IDENTIFIER 7 -#define SCE_B_DATE 8 -#define SCE_B_STRINGEOL 9 -#define SCE_B_KEYWORD2 10 -#define SCE_B_KEYWORD3 11 -#define SCE_B_KEYWORD4 12 -#define SCE_B_CONSTANT 13 -#define SCE_B_ASM 14 -#define SCE_B_LABEL 15 -#define SCE_B_ERROR 16 -#define SCE_B_HEXNUMBER 17 -#define SCE_B_BINNUMBER 18 -#define SCE_PROPS_DEFAULT 0 -#define SCE_PROPS_COMMENT 1 -#define SCE_PROPS_SECTION 2 -#define SCE_PROPS_ASSIGNMENT 3 -#define SCE_PROPS_DEFVAL 4 -#define SCE_PROPS_KEY 5 -#define SCE_L_DEFAULT 0 -#define SCE_L_COMMAND 1 -#define SCE_L_TAG 2 -#define SCE_L_MATH 3 -#define SCE_L_COMMENT 4 -#define SCE_LUA_DEFAULT 0 -#define SCE_LUA_COMMENT 1 -#define SCE_LUA_COMMENTLINE 2 -#define SCE_LUA_COMMENTDOC 3 -#define SCE_LUA_NUMBER 4 -#define SCE_LUA_WORD 5 -#define SCE_LUA_STRING 6 -#define SCE_LUA_CHARACTER 7 -#define SCE_LUA_LITERALSTRING 8 -#define SCE_LUA_PREPROCESSOR 9 -#define SCE_LUA_OPERATOR 10 -#define SCE_LUA_IDENTIFIER 11 -#define SCE_LUA_STRINGEOL 12 -#define SCE_LUA_WORD2 13 -#define SCE_LUA_WORD3 14 -#define SCE_LUA_WORD4 15 -#define SCE_LUA_WORD5 16 -#define SCE_LUA_WORD6 17 -#define SCE_LUA_WORD7 18 -#define SCE_LUA_WORD8 19 -#define SCE_ERR_DEFAULT 0 -#define SCE_ERR_PYTHON 1 -#define SCE_ERR_GCC 2 -#define SCE_ERR_MS 3 -#define SCE_ERR_CMD 4 -#define SCE_ERR_BORLAND 5 -#define SCE_ERR_PERL 6 -#define SCE_ERR_NET 7 -#define SCE_ERR_LUA 8 -#define SCE_ERR_CTAG 9 -#define SCE_ERR_DIFF_CHANGED 10 -#define SCE_ERR_DIFF_ADDITION 11 -#define SCE_ERR_DIFF_DELETION 12 -#define SCE_ERR_DIFF_MESSAGE 13 -#define SCE_ERR_PHP 14 -#define SCE_ERR_ELF 15 -#define SCE_ERR_IFC 16 -#define SCE_ERR_IFORT 17 -#define SCE_ERR_ABSF 18 -#define SCE_ERR_TIDY 19 -#define SCE_ERR_JAVA_STACK 20 -#define SCE_BAT_DEFAULT 0 -#define SCE_BAT_COMMENT 1 -#define SCE_BAT_WORD 2 -#define SCE_BAT_LABEL 3 -#define SCE_BAT_HIDE 4 -#define SCE_BAT_COMMAND 5 -#define SCE_BAT_IDENTIFIER 6 -#define SCE_BAT_OPERATOR 7 -#define SCE_MAKE_DEFAULT 0 -#define SCE_MAKE_COMMENT 1 -#define SCE_MAKE_PREPROCESSOR 2 -#define SCE_MAKE_IDENTIFIER 3 -#define SCE_MAKE_OPERATOR 4 -#define SCE_MAKE_TARGET 5 -#define SCE_MAKE_IDEOL 9 -#define SCE_DIFF_DEFAULT 0 -#define SCE_DIFF_COMMENT 1 -#define SCE_DIFF_COMMAND 2 -#define SCE_DIFF_HEADER 3 -#define SCE_DIFF_POSITION 4 -#define SCE_DIFF_DELETED 5 -#define SCE_DIFF_ADDED 6 -#define SCE_CONF_DEFAULT 0 -#define SCE_CONF_COMMENT 1 -#define SCE_CONF_NUMBER 2 -#define SCE_CONF_IDENTIFIER 3 -#define SCE_CONF_EXTENSION 4 -#define SCE_CONF_PARAMETER 5 -#define SCE_CONF_STRING 6 -#define SCE_CONF_OPERATOR 7 -#define SCE_CONF_IP 8 -#define SCE_CONF_DIRECTIVE 9 -#define SCE_AVE_DEFAULT 0 -#define SCE_AVE_COMMENT 1 -#define SCE_AVE_NUMBER 2 -#define SCE_AVE_WORD 3 -#define SCE_AVE_STRING 6 -#define SCE_AVE_ENUM 7 -#define SCE_AVE_STRINGEOL 8 -#define SCE_AVE_IDENTIFIER 9 -#define SCE_AVE_OPERATOR 10 -#define SCE_AVE_WORD1 11 -#define SCE_AVE_WORD2 12 -#define SCE_AVE_WORD3 13 -#define SCE_AVE_WORD4 14 -#define SCE_AVE_WORD5 15 -#define SCE_AVE_WORD6 16 -#define SCE_ADA_DEFAULT 0 -#define SCE_ADA_WORD 1 -#define SCE_ADA_IDENTIFIER 2 -#define SCE_ADA_NUMBER 3 -#define SCE_ADA_DELIMITER 4 -#define SCE_ADA_CHARACTER 5 -#define SCE_ADA_CHARACTEREOL 6 -#define SCE_ADA_STRING 7 -#define SCE_ADA_STRINGEOL 8 -#define SCE_ADA_LABEL 9 -#define SCE_ADA_COMMENTLINE 10 -#define SCE_ADA_ILLEGAL 11 -#define SCE_BAAN_DEFAULT 0 -#define SCE_BAAN_COMMENT 1 -#define SCE_BAAN_COMMENTDOC 2 -#define SCE_BAAN_NUMBER 3 -#define SCE_BAAN_WORD 4 -#define SCE_BAAN_STRING 5 -#define SCE_BAAN_PREPROCESSOR 6 -#define SCE_BAAN_OPERATOR 7 -#define SCE_BAAN_IDENTIFIER 8 -#define SCE_BAAN_STRINGEOL 9 -#define SCE_BAAN_WORD2 10 -#define SCE_LISP_DEFAULT 0 -#define SCE_LISP_COMMENT 1 -#define SCE_LISP_NUMBER 2 -#define SCE_LISP_KEYWORD 3 -#define SCE_LISP_KEYWORD_KW 4 -#define SCE_LISP_SYMBOL 5 -#define SCE_LISP_STRING 6 -#define SCE_LISP_STRINGEOL 8 -#define SCE_LISP_IDENTIFIER 9 -#define SCE_LISP_OPERATOR 10 -#define SCE_LISP_SPECIAL 11 -#define SCE_LISP_MULTI_COMMENT 12 -#define SCE_EIFFEL_DEFAULT 0 -#define SCE_EIFFEL_COMMENTLINE 1 -#define SCE_EIFFEL_NUMBER 2 -#define SCE_EIFFEL_WORD 3 -#define SCE_EIFFEL_STRING 4 -#define SCE_EIFFEL_CHARACTER 5 -#define SCE_EIFFEL_OPERATOR 6 -#define SCE_EIFFEL_IDENTIFIER 7 -#define SCE_EIFFEL_STRINGEOL 8 -#define SCE_NNCRONTAB_DEFAULT 0 -#define SCE_NNCRONTAB_COMMENT 1 -#define SCE_NNCRONTAB_TASK 2 -#define SCE_NNCRONTAB_SECTION 3 -#define SCE_NNCRONTAB_KEYWORD 4 -#define SCE_NNCRONTAB_MODIFIER 5 -#define SCE_NNCRONTAB_ASTERISK 6 -#define SCE_NNCRONTAB_NUMBER 7 -#define SCE_NNCRONTAB_STRING 8 -#define SCE_NNCRONTAB_ENVIRONMENT 9 -#define SCE_NNCRONTAB_IDENTIFIER 10 -#define SCE_FORTH_DEFAULT 0 -#define SCE_FORTH_COMMENT 1 -#define SCE_FORTH_COMMENT_ML 2 -#define SCE_FORTH_IDENTIFIER 3 -#define SCE_FORTH_CONTROL 4 -#define SCE_FORTH_KEYWORD 5 -#define SCE_FORTH_DEFWORD 6 -#define SCE_FORTH_PREWORD1 7 -#define SCE_FORTH_PREWORD2 8 -#define SCE_FORTH_NUMBER 9 -#define SCE_FORTH_STRING 10 -#define SCE_FORTH_LOCALE 11 -#define SCE_MATLAB_DEFAULT 0 -#define SCE_MATLAB_COMMENT 1 -#define SCE_MATLAB_COMMAND 2 -#define SCE_MATLAB_NUMBER 3 -#define SCE_MATLAB_KEYWORD 4 -#define SCE_MATLAB_STRING 5 -#define SCE_MATLAB_OPERATOR 6 -#define SCE_MATLAB_IDENTIFIER 7 -#define SCE_MATLAB_DOUBLEQUOTESTRING 8 -#define SCE_SCRIPTOL_DEFAULT 0 -#define SCE_SCRIPTOL_WHITE 1 -#define SCE_SCRIPTOL_COMMENTLINE 2 -#define SCE_SCRIPTOL_PERSISTENT 3 -#define SCE_SCRIPTOL_CSTYLE 4 -#define SCE_SCRIPTOL_COMMENTBLOCK 5 -#define SCE_SCRIPTOL_NUMBER 6 -#define SCE_SCRIPTOL_STRING 7 -#define SCE_SCRIPTOL_CHARACTER 8 -#define SCE_SCRIPTOL_STRINGEOL 9 -#define SCE_SCRIPTOL_KEYWORD 10 -#define SCE_SCRIPTOL_OPERATOR 11 -#define SCE_SCRIPTOL_IDENTIFIER 12 -#define SCE_SCRIPTOL_TRIPLE 13 -#define SCE_SCRIPTOL_CLASSNAME 14 -#define SCE_SCRIPTOL_PREPROCESSOR 15 -#define SCE_ASM_DEFAULT 0 -#define SCE_ASM_COMMENT 1 -#define SCE_ASM_NUMBER 2 -#define SCE_ASM_STRING 3 -#define SCE_ASM_OPERATOR 4 -#define SCE_ASM_IDENTIFIER 5 -#define SCE_ASM_CPUINSTRUCTION 6 -#define SCE_ASM_MATHINSTRUCTION 7 -#define SCE_ASM_REGISTER 8 -#define SCE_ASM_DIRECTIVE 9 -#define SCE_ASM_DIRECTIVEOPERAND 10 -#define SCE_ASM_COMMENTBLOCK 11 -#define SCE_ASM_CHARACTER 12 -#define SCE_ASM_STRINGEOL 13 -#define SCE_ASM_EXTINSTRUCTION 14 -#define SCE_F_DEFAULT 0 -#define SCE_F_COMMENT 1 -#define SCE_F_NUMBER 2 -#define SCE_F_STRING1 3 -#define SCE_F_STRING2 4 -#define SCE_F_STRINGEOL 5 -#define SCE_F_OPERATOR 6 -#define SCE_F_IDENTIFIER 7 -#define SCE_F_WORD 8 -#define SCE_F_WORD2 9 -#define SCE_F_WORD3 10 -#define SCE_F_PREPROCESSOR 11 -#define SCE_F_OPERATOR2 12 -#define SCE_F_LABEL 13 -#define SCE_F_CONTINUATION 14 -#define SCE_CSS_DEFAULT 0 -#define SCE_CSS_TAG 1 -#define SCE_CSS_CLASS 2 -#define SCE_CSS_PSEUDOCLASS 3 -#define SCE_CSS_UNKNOWN_PSEUDOCLASS 4 -#define SCE_CSS_OPERATOR 5 -#define SCE_CSS_IDENTIFIER 6 -#define SCE_CSS_UNKNOWN_IDENTIFIER 7 -#define SCE_CSS_VALUE 8 -#define SCE_CSS_COMMENT 9 -#define SCE_CSS_ID 10 -#define SCE_CSS_IMPORTANT 11 -#define SCE_CSS_DIRECTIVE 12 -#define SCE_CSS_DOUBLESTRING 13 -#define SCE_CSS_SINGLESTRING 14 -#define SCE_CSS_IDENTIFIER2 15 -#define SCE_CSS_ATTRIBUTE 16 -#define SCE_POV_DEFAULT 0 -#define SCE_POV_COMMENT 1 -#define SCE_POV_COMMENTLINE 2 -#define SCE_POV_NUMBER 3 -#define SCE_POV_OPERATOR 4 -#define SCE_POV_IDENTIFIER 5 -#define SCE_POV_STRING 6 -#define SCE_POV_STRINGEOL 7 -#define SCE_POV_DIRECTIVE 8 -#define SCE_POV_BADDIRECTIVE 9 -#define SCE_POV_WORD2 10 -#define SCE_POV_WORD3 11 -#define SCE_POV_WORD4 12 -#define SCE_POV_WORD5 13 -#define SCE_POV_WORD6 14 -#define SCE_POV_WORD7 15 -#define SCE_POV_WORD8 16 -#define SCE_LOUT_DEFAULT 0 -#define SCE_LOUT_COMMENT 1 -#define SCE_LOUT_NUMBER 2 -#define SCE_LOUT_WORD 3 -#define SCE_LOUT_WORD2 4 -#define SCE_LOUT_WORD3 5 -#define SCE_LOUT_WORD4 6 -#define SCE_LOUT_STRING 7 -#define SCE_LOUT_OPERATOR 8 -#define SCE_LOUT_IDENTIFIER 9 -#define SCE_LOUT_STRINGEOL 10 -#define SCE_ESCRIPT_DEFAULT 0 -#define SCE_ESCRIPT_COMMENT 1 -#define SCE_ESCRIPT_COMMENTLINE 2 -#define SCE_ESCRIPT_COMMENTDOC 3 -#define SCE_ESCRIPT_NUMBER 4 -#define SCE_ESCRIPT_WORD 5 -#define SCE_ESCRIPT_STRING 6 -#define SCE_ESCRIPT_OPERATOR 7 -#define SCE_ESCRIPT_IDENTIFIER 8 -#define SCE_ESCRIPT_BRACE 9 -#define SCE_ESCRIPT_WORD2 10 -#define SCE_ESCRIPT_WORD3 11 -#define SCE_PS_DEFAULT 0 -#define SCE_PS_COMMENT 1 -#define SCE_PS_DSC_COMMENT 2 -#define SCE_PS_DSC_VALUE 3 -#define SCE_PS_NUMBER 4 -#define SCE_PS_NAME 5 -#define SCE_PS_KEYWORD 6 -#define SCE_PS_LITERAL 7 -#define SCE_PS_IMMEVAL 8 -#define SCE_PS_PAREN_ARRAY 9 -#define SCE_PS_PAREN_DICT 10 -#define SCE_PS_PAREN_PROC 11 -#define SCE_PS_TEXT 12 -#define SCE_PS_HEXSTRING 13 -#define SCE_PS_BASE85STRING 14 -#define SCE_PS_BADSTRINGCHAR 15 -#define SCE_NSIS_DEFAULT 0 -#define SCE_NSIS_COMMENT 1 -#define SCE_NSIS_STRINGDQ 2 -#define SCE_NSIS_STRINGLQ 3 -#define SCE_NSIS_STRINGRQ 4 -#define SCE_NSIS_FUNCTION 5 -#define SCE_NSIS_VARIABLE 6 -#define SCE_NSIS_LABEL 7 -#define SCE_NSIS_USERDEFINED 8 -#define SCE_NSIS_SECTIONDEF 9 -#define SCE_NSIS_SUBSECTIONDEF 10 -#define SCE_NSIS_IFDEFINEDEF 11 -#define SCE_NSIS_MACRODEF 12 -#define SCE_NSIS_STRINGVAR 13 -#define SCE_NSIS_NUMBER 14 -#define SCE_NSIS_SECTIONGROUP 15 -#define SCE_NSIS_PAGEEX 16 -#define SCE_NSIS_FUNCTIONDEF 17 -#define SCE_NSIS_COMMENTBOX 18 -#define SCE_MMIXAL_LEADWS 0 -#define SCE_MMIXAL_COMMENT 1 -#define SCE_MMIXAL_LABEL 2 -#define SCE_MMIXAL_OPCODE 3 -#define SCE_MMIXAL_OPCODE_PRE 4 -#define SCE_MMIXAL_OPCODE_VALID 5 -#define SCE_MMIXAL_OPCODE_UNKNOWN 6 -#define SCE_MMIXAL_OPCODE_POST 7 -#define SCE_MMIXAL_OPERANDS 8 -#define SCE_MMIXAL_NUMBER 9 -#define SCE_MMIXAL_REF 10 -#define SCE_MMIXAL_CHAR 11 -#define SCE_MMIXAL_STRING 12 -#define SCE_MMIXAL_REGISTER 13 -#define SCE_MMIXAL_HEX 14 -#define SCE_MMIXAL_OPERATOR 15 -#define SCE_MMIXAL_SYMBOL 16 -#define SCE_MMIXAL_INCLUDE 17 -#define SCE_CLW_DEFAULT 0 -#define SCE_CLW_LABEL 1 -#define SCE_CLW_COMMENT 2 -#define SCE_CLW_STRING 3 -#define SCE_CLW_USER_IDENTIFIER 4 -#define SCE_CLW_INTEGER_CONSTANT 5 -#define SCE_CLW_REAL_CONSTANT 6 -#define SCE_CLW_PICTURE_STRING 7 -#define SCE_CLW_KEYWORD 8 -#define SCE_CLW_COMPILER_DIRECTIVE 9 -#define SCE_CLW_RUNTIME_EXPRESSIONS 10 -#define SCE_CLW_BUILTIN_PROCEDURES_FUNCTION 11 -#define SCE_CLW_STRUCTURE_DATA_TYPE 12 -#define SCE_CLW_ATTRIBUTE 13 -#define SCE_CLW_STANDARD_EQUATE 14 -#define SCE_CLW_ERROR 15 -#define SCE_CLW_DEPRECATED 16 -#define SCE_LOT_DEFAULT 0 -#define SCE_LOT_HEADER 1 -#define SCE_LOT_BREAK 2 -#define SCE_LOT_SET 3 -#define SCE_LOT_PASS 4 -#define SCE_LOT_FAIL 5 -#define SCE_LOT_ABORT 6 -#define SCE_YAML_DEFAULT 0 -#define SCE_YAML_COMMENT 1 -#define SCE_YAML_IDENTIFIER 2 -#define SCE_YAML_KEYWORD 3 -#define SCE_YAML_NUMBER 4 -#define SCE_YAML_REFERENCE 5 -#define SCE_YAML_DOCUMENT 6 -#define SCE_YAML_TEXT 7 -#define SCE_YAML_ERROR 8 -#define SCE_TEX_DEFAULT 0 -#define SCE_TEX_SPECIAL 1 -#define SCE_TEX_GROUP 2 -#define SCE_TEX_SYMBOL 3 -#define SCE_TEX_COMMAND 4 -#define SCE_TEX_TEXT 5 -#define SCE_METAPOST_DEFAULT 0 -#define SCE_METAPOST_SPECIAL 1 -#define SCE_METAPOST_GROUP 2 -#define SCE_METAPOST_SYMBOL 3 -#define SCE_METAPOST_COMMAND 4 -#define SCE_METAPOST_TEXT 5 -#define SCE_METAPOST_EXTRA 6 -#define SCE_ERLANG_DEFAULT 0 -#define SCE_ERLANG_COMMENT 1 -#define SCE_ERLANG_VARIABLE 2 -#define SCE_ERLANG_NUMBER 3 -#define SCE_ERLANG_KEYWORD 4 -#define SCE_ERLANG_STRING 5 -#define SCE_ERLANG_OPERATOR 6 -#define SCE_ERLANG_ATOM 7 -#define SCE_ERLANG_FUNCTION_NAME 8 -#define SCE_ERLANG_CHARACTER 9 -#define SCE_ERLANG_MACRO 10 -#define SCE_ERLANG_RECORD 11 -#define SCE_ERLANG_SEPARATOR 12 -#define SCE_ERLANG_NODE_NAME 13 -#define SCE_ERLANG_UNKNOWN 31 -#define SCE_MSSQL_DEFAULT 0 -#define SCE_MSSQL_COMMENT 1 -#define SCE_MSSQL_LINE_COMMENT 2 -#define SCE_MSSQL_NUMBER 3 -#define SCE_MSSQL_STRING 4 -#define SCE_MSSQL_OPERATOR 5 -#define SCE_MSSQL_IDENTIFIER 6 -#define SCE_MSSQL_VARIABLE 7 -#define SCE_MSSQL_COLUMN_NAME 8 -#define SCE_MSSQL_STATEMENT 9 -#define SCE_MSSQL_DATATYPE 10 -#define SCE_MSSQL_SYSTABLE 11 -#define SCE_MSSQL_GLOBAL_VARIABLE 12 -#define SCE_MSSQL_FUNCTION 13 -#define SCE_MSSQL_STORED_PROCEDURE 14 -#define SCE_MSSQL_DEFAULT_PREF_DATATYPE 15 -#define SCE_MSSQL_COLUMN_NAME_2 16 -#define SCE_V_DEFAULT 0 -#define SCE_V_COMMENT 1 -#define SCE_V_COMMENTLINE 2 -#define SCE_V_COMMENTLINEBANG 3 -#define SCE_V_NUMBER 4 -#define SCE_V_WORD 5 -#define SCE_V_STRING 6 -#define SCE_V_WORD2 7 -#define SCE_V_WORD3 8 -#define SCE_V_PREPROCESSOR 9 -#define SCE_V_OPERATOR 10 -#define SCE_V_IDENTIFIER 11 -#define SCE_V_STRINGEOL 12 -#define SCE_V_USER 19 -#define SCE_KIX_DEFAULT 0 -#define SCE_KIX_COMMENT 1 -#define SCE_KIX_STRING1 2 -#define SCE_KIX_STRING2 3 -#define SCE_KIX_NUMBER 4 -#define SCE_KIX_VAR 5 -#define SCE_KIX_MACRO 6 -#define SCE_KIX_KEYWORD 7 -#define SCE_KIX_FUNCTIONS 8 -#define SCE_KIX_OPERATOR 9 -#define SCE_KIX_IDENTIFIER 31 -#define SCE_GC_DEFAULT 0 -#define SCE_GC_COMMENTLINE 1 -#define SCE_GC_COMMENTBLOCK 2 -#define SCE_GC_GLOBAL 3 -#define SCE_GC_EVENT 4 -#define SCE_GC_ATTRIBUTE 5 -#define SCE_GC_CONTROL 6 -#define SCE_GC_COMMAND 7 -#define SCE_GC_STRING 8 -#define SCE_GC_OPERATOR 9 -#define SCE_SN_DEFAULT 0 -#define SCE_SN_CODE 1 -#define SCE_SN_COMMENTLINE 2 -#define SCE_SN_COMMENTLINEBANG 3 -#define SCE_SN_NUMBER 4 -#define SCE_SN_WORD 5 -#define SCE_SN_STRING 6 -#define SCE_SN_WORD2 7 -#define SCE_SN_WORD3 8 -#define SCE_SN_PREPROCESSOR 9 -#define SCE_SN_OPERATOR 10 -#define SCE_SN_IDENTIFIER 11 -#define SCE_SN_STRINGEOL 12 -#define SCE_SN_REGEXTAG 13 -#define SCE_SN_SIGNAL 14 -#define SCE_SN_USER 19 -#define SCE_AU3_DEFAULT 0 -#define SCE_AU3_COMMENT 1 -#define SCE_AU3_COMMENTBLOCK 2 -#define SCE_AU3_NUMBER 3 -#define SCE_AU3_FUNCTION 4 -#define SCE_AU3_KEYWORD 5 -#define SCE_AU3_MACRO 6 -#define SCE_AU3_STRING 7 -#define SCE_AU3_OPERATOR 8 -#define SCE_AU3_VARIABLE 9 -#define SCE_AU3_SENT 10 -#define SCE_AU3_PREPROCESSOR 11 -#define SCE_AU3_SPECIAL 12 -#define SCE_AU3_EXPAND 13 -#define SCE_AU3_COMOBJ 14 -#define SCE_AU3_UDF 15 -#define SCE_APDL_DEFAULT 0 -#define SCE_APDL_COMMENT 1 -#define SCE_APDL_COMMENTBLOCK 2 -#define SCE_APDL_NUMBER 3 -#define SCE_APDL_STRING 4 -#define SCE_APDL_OPERATOR 5 -#define SCE_APDL_WORD 6 -#define SCE_APDL_PROCESSOR 7 -#define SCE_APDL_COMMAND 8 -#define SCE_APDL_SLASHCOMMAND 9 -#define SCE_APDL_STARCOMMAND 10 -#define SCE_APDL_ARGUMENT 11 -#define SCE_APDL_FUNCTION 12 -#define SCE_SH_DEFAULT 0 -#define SCE_SH_ERROR 1 -#define SCE_SH_COMMENTLINE 2 -#define SCE_SH_NUMBER 3 -#define SCE_SH_WORD 4 -#define SCE_SH_STRING 5 -#define SCE_SH_CHARACTER 6 -#define SCE_SH_OPERATOR 7 -#define SCE_SH_IDENTIFIER 8 -#define SCE_SH_SCALAR 9 -#define SCE_SH_PARAM 10 -#define SCE_SH_BACKTICKS 11 -#define SCE_SH_HERE_DELIM 12 -#define SCE_SH_HERE_Q 13 -#define SCE_ASN1_DEFAULT 0 -#define SCE_ASN1_COMMENT 1 -#define SCE_ASN1_IDENTIFIER 2 -#define SCE_ASN1_STRING 3 -#define SCE_ASN1_OID 4 -#define SCE_ASN1_SCALAR 5 -#define SCE_ASN1_KEYWORD 6 -#define SCE_ASN1_ATTRIBUTE 7 -#define SCE_ASN1_DESCRIPTOR 8 -#define SCE_ASN1_TYPE 9 -#define SCE_ASN1_OPERATOR 10 -#define SCE_VHDL_DEFAULT 0 -#define SCE_VHDL_COMMENT 1 -#define SCE_VHDL_COMMENTLINEBANG 2 -#define SCE_VHDL_NUMBER 3 -#define SCE_VHDL_STRING 4 -#define SCE_VHDL_OPERATOR 5 -#define SCE_VHDL_IDENTIFIER 6 -#define SCE_VHDL_STRINGEOL 7 -#define SCE_VHDL_KEYWORD 8 -#define SCE_VHDL_STDOPERATOR 9 -#define SCE_VHDL_ATTRIBUTE 10 -#define SCE_VHDL_STDFUNCTION 11 -#define SCE_VHDL_STDPACKAGE 12 -#define SCE_VHDL_STDTYPE 13 -#define SCE_VHDL_USERWORD 14 -#define SCE_CAML_DEFAULT 0 -#define SCE_CAML_IDENTIFIER 1 -#define SCE_CAML_TAGNAME 2 -#define SCE_CAML_KEYWORD 3 -#define SCE_CAML_KEYWORD2 4 -#define SCE_CAML_KEYWORD3 5 -#define SCE_CAML_LINENUM 6 -#define SCE_CAML_OPERATOR 7 -#define SCE_CAML_NUMBER 8 -#define SCE_CAML_CHAR 9 -#define SCE_CAML_STRING 11 -#define SCE_CAML_COMMENT 12 -#define SCE_CAML_COMMENT1 13 -#define SCE_CAML_COMMENT2 14 -#define SCE_CAML_COMMENT3 15 -#define SCE_HA_DEFAULT 0 -#define SCE_HA_IDENTIFIER 1 -#define SCE_HA_KEYWORD 2 -#define SCE_HA_NUMBER 3 -#define SCE_HA_STRING 4 -#define SCE_HA_CHARACTER 5 -#define SCE_HA_CLASS 6 -#define SCE_HA_MODULE 7 -#define SCE_HA_CAPITAL 8 -#define SCE_HA_DATA 9 -#define SCE_HA_IMPORT 10 -#define SCE_HA_OPERATOR 11 -#define SCE_HA_INSTANCE 12 -#define SCE_HA_COMMENTLINE 13 -#define SCE_HA_COMMENTBLOCK 14 -#define SCE_HA_COMMENTBLOCK2 15 -#define SCE_HA_COMMENTBLOCK3 16 -#define SCE_T3_DEFAULT 0 -#define SCE_T3_X_DEFAULT 1 -#define SCE_T3_PREPROCESSOR 2 -#define SCE_T3_BLOCK_COMMENT 3 -#define SCE_T3_LINE_COMMENT 4 -#define SCE_T3_OPERATOR 5 -#define SCE_T3_KEYWORD 6 -#define SCE_T3_NUMBER 7 -#define SCE_T3_IDENTIFIER 8 -#define SCE_T3_S_STRING 9 -#define SCE_T3_D_STRING 10 -#define SCE_T3_X_STRING 11 -#define SCE_T3_LIB_DIRECTIVE 12 -#define SCE_T3_MSG_PARAM 13 -#define SCE_T3_HTML_TAG 14 -#define SCE_T3_HTML_DEFAULT 15 -#define SCE_T3_HTML_STRING 16 -#define SCE_T3_USER1 17 -#define SCE_T3_USER2 18 -#define SCE_T3_USER3 19 -#define SCE_REBOL_DEFAULT 0 -#define SCE_REBOL_COMMENTLINE 1 -#define SCE_REBOL_COMMENTBLOCK 2 -#define SCE_REBOL_PREFACE 3 -#define SCE_REBOL_OPERATOR 4 -#define SCE_REBOL_CHARACTER 5 -#define SCE_REBOL_QUOTEDSTRING 6 -#define SCE_REBOL_BRACEDSTRING 7 -#define SCE_REBOL_NUMBER 8 -#define SCE_REBOL_PAIR 9 -#define SCE_REBOL_TUPLE 10 -#define SCE_REBOL_BINARY 11 -#define SCE_REBOL_MONEY 12 -#define SCE_REBOL_ISSUE 13 -#define SCE_REBOL_TAG 14 -#define SCE_REBOL_FILE 15 -#define SCE_REBOL_EMAIL 16 -#define SCE_REBOL_URL 17 -#define SCE_REBOL_DATE 18 -#define SCE_REBOL_TIME 19 -#define SCE_REBOL_IDENTIFIER 20 -#define SCE_REBOL_WORD 21 -#define SCE_REBOL_WORD2 22 -#define SCE_REBOL_WORD3 23 -#define SCE_REBOL_WORD4 24 -#define SCE_REBOL_WORD5 25 -#define SCE_REBOL_WORD6 26 -#define SCE_REBOL_WORD7 27 -#define SCE_REBOL_WORD8 28 -#define SCE_SQL_DEFAULT 0 -#define SCE_SQL_COMMENT 1 -#define SCE_SQL_COMMENTLINE 2 -#define SCE_SQL_COMMENTDOC 3 -#define SCE_SQL_NUMBER 4 -#define SCE_SQL_WORD 5 -#define SCE_SQL_STRING 6 -#define SCE_SQL_CHARACTER 7 -#define SCE_SQL_SQLPLUS 8 -#define SCE_SQL_SQLPLUS_PROMPT 9 -#define SCE_SQL_OPERATOR 10 -#define SCE_SQL_IDENTIFIER 11 -#define SCE_SQL_SQLPLUS_COMMENT 13 -#define SCE_SQL_COMMENTLINEDOC 15 -#define SCE_SQL_WORD2 16 -#define SCE_SQL_COMMENTDOCKEYWORD 17 -#define SCE_SQL_COMMENTDOCKEYWORDERROR 18 -#define SCE_SQL_USER1 19 -#define SCE_SQL_USER2 20 -#define SCE_SQL_USER3 21 -#define SCE_SQL_USER4 22 -#define SCE_SQL_QUOTEDIDENTIFIER 23 -#define SCE_ST_DEFAULT 0 -#define SCE_ST_STRING 1 -#define SCE_ST_NUMBER 2 -#define SCE_ST_COMMENT 3 -#define SCE_ST_SYMBOL 4 -#define SCE_ST_BINARY 5 -#define SCE_ST_BOOL 6 -#define SCE_ST_SELF 7 -#define SCE_ST_SUPER 8 -#define SCE_ST_NIL 9 -#define SCE_ST_GLOBAL 10 -#define SCE_ST_RETURN 11 -#define SCE_ST_SPECIAL 12 -#define SCE_ST_KWSEND 13 -#define SCE_ST_ASSIGN 14 -#define SCE_ST_CHARACTER 15 -#define SCE_ST_SPEC_SEL 16 -#define SCE_FS_DEFAULT 0 -#define SCE_FS_COMMENT 1 -#define SCE_FS_COMMENTLINE 2 -#define SCE_FS_COMMENTDOC 3 -#define SCE_FS_COMMENTLINEDOC 4 -#define SCE_FS_COMMENTDOCKEYWORD 5 -#define SCE_FS_COMMENTDOCKEYWORDERROR 6 -#define SCE_FS_KEYWORD 7 -#define SCE_FS_KEYWORD2 8 -#define SCE_FS_KEYWORD3 9 -#define SCE_FS_KEYWORD4 10 -#define SCE_FS_NUMBER 11 -#define SCE_FS_STRING 12 -#define SCE_FS_PREPROCESSOR 13 -#define SCE_FS_OPERATOR 14 -#define SCE_FS_IDENTIFIER 15 -#define SCE_FS_DATE 16 -#define SCE_FS_STRINGEOL 17 -#define SCE_FS_CONSTANT 18 -#define SCE_FS_ASM 19 -#define SCE_FS_LABEL 20 -#define SCE_FS_ERROR 21 -#define SCE_FS_HEXNUMBER 22 -#define SCE_FS_BINNUMBER 23 -#define SCE_CSOUND_DEFAULT 0 -#define SCE_CSOUND_COMMENT 1 -#define SCE_CSOUND_NUMBER 2 -#define SCE_CSOUND_OPERATOR 3 -#define SCE_CSOUND_INSTR 4 -#define SCE_CSOUND_IDENTIFIER 5 -#define SCE_CSOUND_OPCODE 6 -#define SCE_CSOUND_HEADERSTMT 7 -#define SCE_CSOUND_USERKEYWORD 8 -#define SCE_CSOUND_COMMENTBLOCK 9 -#define SCE_CSOUND_PARAM 10 -#define SCE_CSOUND_ARATE_VAR 11 -#define SCE_CSOUND_KRATE_VAR 12 -#define SCE_CSOUND_IRATE_VAR 13 -#define SCE_CSOUND_GLOBAL_VAR 14 -#define SCE_CSOUND_STRINGEOL 15 -#define SCE_INNO_DEFAULT 0 -#define SCE_INNO_COMMENT 1 -#define SCE_INNO_KEYWORD 2 -#define SCE_INNO_PARAMETER 3 -#define SCE_INNO_SECTION 4 -#define SCE_INNO_PREPROC 5 -#define SCE_INNO_PREPROC_INLINE 6 -#define SCE_INNO_COMMENT_PASCAL 7 -#define SCE_INNO_KEYWORD_PASCAL 8 -#define SCE_INNO_KEYWORD_USER 9 -#define SCE_INNO_STRING_DOUBLE 10 -#define SCE_INNO_STRING_SINGLE 11 -#define SCE_INNO_IDENTIFIER 12 -#define SCE_OPAL_SPACE 0 -#define SCE_OPAL_COMMENT_BLOCK 1 -#define SCE_OPAL_COMMENT_LINE 2 -#define SCE_OPAL_INTEGER 3 -#define SCE_OPAL_KEYWORD 4 -#define SCE_OPAL_SORT 5 -#define SCE_OPAL_STRING 6 -#define SCE_OPAL_PAR 7 -#define SCE_OPAL_BOOL_CONST 8 -#define SCE_OPAL_DEFAULT 32 -#define SCE_SPICE_DEFAULT 0 -#define SCE_SPICE_IDENTIFIER 1 -#define SCE_SPICE_KEYWORD 2 -#define SCE_SPICE_KEYWORD2 3 -#define SCE_SPICE_KEYWORD3 4 -#define SCE_SPICE_NUMBER 5 -#define SCE_SPICE_DELIMITER 6 -#define SCE_SPICE_VALUE 7 -#define SCE_SPICE_COMMENTLINE 8 -#define SCLEX_ASP 29 -#define SCLEX_PHP 30 -//--Autogenerated -- end of section automatically generated from Scintilla.iface - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Scintilla.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Scintilla.h deleted file mode 100644 index 3a57da6ae2..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/Scintilla.h +++ /dev/null @@ -1,780 +0,0 @@ -// Scintilla source code edit control -/** @file Scintilla.h - ** Interface to the edit control. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -// Most of this file is automatically generated from the Scintilla.iface interface definition -// file which contains any comments about the definitions. HFacer.py does the generation. - -#ifndef SCINTILLA_H -#define SCINTILLA_H - -#if defined(LCCWIN) && LCCWIN -typedef BOOL bool; -#endif - -#if PLAT_WIN -// Return false on failure: -bool Scintilla_RegisterClasses(void *hInstance); -bool Scintilla_ReleaseResources(); -#endif -int Scintilla_LinkLexers(); - -// Here should be placed typedefs for uptr_t, an unsigned integer type large enough to -// hold a pointer and sptr_t, a signed integer large enough to hold a pointer. -// May need to be changed for 64 bit platforms. -#if defined(_MSC_VER) && _MSC_VER >= 1300 -#include -#endif -#ifdef MAXULONG_PTR -typedef ULONG_PTR uptr_t; -typedef LONG_PTR sptr_t; -#else -typedef unsigned long uptr_t; -typedef long sptr_t; -#endif - -typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam); - -//++Autogenerated -- start of section automatically generated from Scintilla.iface -#define INVALID_POSITION -1 -#define SCI_START 2000 -#define SCI_OPTIONAL_START 3000 -#define SCI_LEXER_START 4000 -#define SCI_ADDTEXT 2001 -#define SCI_ADDSTYLEDTEXT 2002 -#define SCI_INSERTTEXT 2003 -#define SCI_CLEARALL 2004 -#define SCI_CLEARDOCUMENTSTYLE 2005 -#define SCI_GETLENGTH 2006 -#define SCI_GETCHARAT 2007 -#define SCI_GETCURRENTPOS 2008 -#define SCI_GETANCHOR 2009 -#define SCI_GETSTYLEAT 2010 -#define SCI_REDO 2011 -#define SCI_SETUNDOCOLLECTION 2012 -#define SCI_SELECTALL 2013 -#define SCI_SETSAVEPOINT 2014 -#define SCI_GETSTYLEDTEXT 2015 -#define SCI_CANREDO 2016 -#define SCI_MARKERLINEFROMHANDLE 2017 -#define SCI_MARKERDELETEHANDLE 2018 -#define SCI_GETUNDOCOLLECTION 2019 -#define SCWS_INVISIBLE 0 -#define SCWS_VISIBLEALWAYS 1 -#define SCWS_VISIBLEAFTERINDENT 2 -#define SCI_GETVIEWWS 2020 -#define SCI_SETVIEWWS 2021 -#define SCI_POSITIONFROMPOINT 2022 -#define SCI_POSITIONFROMPOINTCLOSE 2023 -#define SCI_GOTOLINE 2024 -#define SCI_GOTOPOS 2025 -#define SCI_SETANCHOR 2026 -#define SCI_GETCURLINE 2027 -#define SCI_GETENDSTYLED 2028 -#define SC_EOL_CRLF 0 -#define SC_EOL_CR 1 -#define SC_EOL_LF 2 -#define SCI_CONVERTEOLS 2029 -#define SCI_GETEOLMODE 2030 -#define SCI_SETEOLMODE 2031 -#define SCI_STARTSTYLING 2032 -#define SCI_SETSTYLING 2033 -#define SCI_GETBUFFEREDDRAW 2034 -#define SCI_SETBUFFEREDDRAW 2035 -#define SCI_SETTABWIDTH 2036 -#define SCI_GETTABWIDTH 2121 -#define SC_CP_UTF8 65001 -#define SC_CP_DBCS 1 -#define SCI_SETCODEPAGE 2037 -#define SCI_SETUSEPALETTE 2039 -#define MARKER_MAX 31 -#define SC_MARK_CIRCLE 0 -#define SC_MARK_ROUNDRECT 1 -#define SC_MARK_ARROW 2 -#define SC_MARK_SMALLRECT 3 -#define SC_MARK_SHORTARROW 4 -#define SC_MARK_EMPTY 5 -#define SC_MARK_ARROWDOWN 6 -#define SC_MARK_MINUS 7 -#define SC_MARK_PLUS 8 -#define SC_MARK_VLINE 9 -#define SC_MARK_LCORNER 10 -#define SC_MARK_TCORNER 11 -#define SC_MARK_BOXPLUS 12 -#define SC_MARK_BOXPLUSCONNECTED 13 -#define SC_MARK_BOXMINUS 14 -#define SC_MARK_BOXMINUSCONNECTED 15 -#define SC_MARK_LCORNERCURVE 16 -#define SC_MARK_TCORNERCURVE 17 -#define SC_MARK_CIRCLEPLUS 18 -#define SC_MARK_CIRCLEPLUSCONNECTED 19 -#define SC_MARK_CIRCLEMINUS 20 -#define SC_MARK_CIRCLEMINUSCONNECTED 21 -#define SC_MARK_BACKGROUND 22 -#define SC_MARK_DOTDOTDOT 23 -#define SC_MARK_ARROWS 24 -#define SC_MARK_PIXMAP 25 -#define SC_MARK_FULLRECT 26 -#define SC_MARK_CHARACTER 10000 -#define SC_MARKNUM_FOLDEREND 25 -#define SC_MARKNUM_FOLDEROPENMID 26 -#define SC_MARKNUM_FOLDERMIDTAIL 27 -#define SC_MARKNUM_FOLDERTAIL 28 -#define SC_MARKNUM_FOLDERSUB 29 -#define SC_MARKNUM_FOLDER 30 -#define SC_MARKNUM_FOLDEROPEN 31 -#define SC_MASK_FOLDERS 0xFE000000 -#define SCI_MARKERDEFINE 2040 -#define SCI_MARKERSETFORE 2041 -#define SCI_MARKERSETBACK 2042 -#define SCI_MARKERADD 2043 -#define SCI_MARKERDELETE 2044 -#define SCI_MARKERDELETEALL 2045 -#define SCI_MARKERGET 2046 -#define SCI_MARKERNEXT 2047 -#define SCI_MARKERPREVIOUS 2048 -#define SCI_MARKERDEFINEPIXMAP 2049 -#define SCI_MARKERADDSET 2466 -#define SCI_MARKERSETALPHA 2476 -#define SC_MARGIN_SYMBOL 0 -#define SC_MARGIN_NUMBER 1 -#define SC_MARGIN_BACK 2 -#define SC_MARGIN_FORE 3 -#define SCI_SETMARGINTYPEN 2240 -#define SCI_GETMARGINTYPEN 2241 -#define SCI_SETMARGINWIDTHN 2242 -#define SCI_GETMARGINWIDTHN 2243 -#define SCI_SETMARGINMASKN 2244 -#define SCI_GETMARGINMASKN 2245 -#define SCI_SETMARGINSENSITIVEN 2246 -#define SCI_GETMARGINSENSITIVEN 2247 -#define STYLE_DEFAULT 32 -#define STYLE_LINENUMBER 33 -#define STYLE_BRACELIGHT 34 -#define STYLE_BRACEBAD 35 -#define STYLE_CONTROLCHAR 36 -#define STYLE_INDENTGUIDE 37 -#define STYLE_CALLTIP 38 -#define STYLE_LASTPREDEFINED 39 -#define STYLE_MAX 127 -#define SC_CHARSET_ANSI 0 -#define SC_CHARSET_DEFAULT 1 -#define SC_CHARSET_BALTIC 186 -#define SC_CHARSET_CHINESEBIG5 136 -#define SC_CHARSET_EASTEUROPE 238 -#define SC_CHARSET_GB2312 134 -#define SC_CHARSET_GREEK 161 -#define SC_CHARSET_HANGUL 129 -#define SC_CHARSET_MAC 77 -#define SC_CHARSET_OEM 255 -#define SC_CHARSET_RUSSIAN 204 -#define SC_CHARSET_CYRILLIC 1251 -#define SC_CHARSET_SHIFTJIS 128 -#define SC_CHARSET_SYMBOL 2 -#define SC_CHARSET_TURKISH 162 -#define SC_CHARSET_JOHAB 130 -#define SC_CHARSET_HEBREW 177 -#define SC_CHARSET_ARABIC 178 -#define SC_CHARSET_VIETNAMESE 163 -#define SC_CHARSET_THAI 222 -#define SC_CHARSET_8859_15 1000 -#define SCI_STYLECLEARALL 2050 -#define SCI_STYLESETFORE 2051 -#define SCI_STYLESETBACK 2052 -#define SCI_STYLESETBOLD 2053 -#define SCI_STYLESETITALIC 2054 -#define SCI_STYLESETSIZE 2055 -#define SCI_STYLESETFONT 2056 -#define SCI_STYLESETEOLFILLED 2057 -#define SCI_STYLERESETDEFAULT 2058 -#define SCI_STYLESETUNDERLINE 2059 -#define SC_CASE_MIXED 0 -#define SC_CASE_UPPER 1 -#define SC_CASE_LOWER 2 -#define SCI_STYLESETCASE 2060 -#define SCI_STYLESETCHARACTERSET 2066 -#define SCI_STYLESETHOTSPOT 2409 -#define SCI_SETSELFORE 2067 -#define SCI_SETSELBACK 2068 -#define SCI_GETSELALPHA 2477 -#define SCI_SETSELALPHA 2478 -#define SCI_SETCARETFORE 2069 -#define SCI_ASSIGNCMDKEY 2070 -#define SCI_CLEARCMDKEY 2071 -#define SCI_CLEARALLCMDKEYS 2072 -#define SCI_SETSTYLINGEX 2073 -#define SCI_STYLESETVISIBLE 2074 -#define SCI_GETCARETPERIOD 2075 -#define SCI_SETCARETPERIOD 2076 -#define SCI_SETWORDCHARS 2077 -#define SCI_BEGINUNDOACTION 2078 -#define SCI_ENDUNDOACTION 2079 -#define INDIC_MAX 7 -#define INDIC_PLAIN 0 -#define INDIC_SQUIGGLE 1 -#define INDIC_TT 2 -#define INDIC_DIAGONAL 3 -#define INDIC_STRIKE 4 -#define INDIC_HIDDEN 5 -#define INDIC_BOX 6 -#define INDIC_ROUNDBOX 7 -#define INDIC0_MASK 0x20 -#define INDIC1_MASK 0x40 -#define INDIC2_MASK 0x80 -#define INDICS_MASK 0xE0 -#define SCI_INDICSETSTYLE 2080 -#define SCI_INDICGETSTYLE 2081 -#define SCI_INDICSETFORE 2082 -#define SCI_INDICGETFORE 2083 -#define SCI_SETWHITESPACEFORE 2084 -#define SCI_SETWHITESPACEBACK 2085 -#define SCI_SETSTYLEBITS 2090 -#define SCI_GETSTYLEBITS 2091 -#define SCI_SETLINESTATE 2092 -#define SCI_GETLINESTATE 2093 -#define SCI_GETMAXLINESTATE 2094 -#define SCI_GETCARETLINEVISIBLE 2095 -#define SCI_SETCARETLINEVISIBLE 2096 -#define SCI_GETCARETLINEBACK 2097 -#define SCI_SETCARETLINEBACK 2098 -#define SCI_STYLESETCHANGEABLE 2099 -#define SCI_AUTOCSHOW 2100 -#define SCI_AUTOCCANCEL 2101 -#define SCI_AUTOCACTIVE 2102 -#define SCI_AUTOCPOSSTART 2103 -#define SCI_AUTOCCOMPLETE 2104 -#define SCI_AUTOCSTOPS 2105 -#define SCI_AUTOCSETSEPARATOR 2106 -#define SCI_AUTOCGETSEPARATOR 2107 -#define SCI_AUTOCSELECT 2108 -#define SCI_AUTOCSETCANCELATSTART 2110 -#define SCI_AUTOCGETCANCELATSTART 2111 -#define SCI_AUTOCSETFILLUPS 2112 -#define SCI_AUTOCSETCHOOSESINGLE 2113 -#define SCI_AUTOCGETCHOOSESINGLE 2114 -#define SCI_AUTOCSETIGNORECASE 2115 -#define SCI_AUTOCGETIGNORECASE 2116 -#define SCI_USERLISTSHOW 2117 -#define SCI_AUTOCSETAUTOHIDE 2118 -#define SCI_AUTOCGETAUTOHIDE 2119 -#define SCI_AUTOCSETDROPRESTOFWORD 2270 -#define SCI_AUTOCGETDROPRESTOFWORD 2271 -#define SCI_REGISTERIMAGE 2405 -#define SCI_CLEARREGISTEREDIMAGES 2408 -#define SCI_AUTOCGETTYPESEPARATOR 2285 -#define SCI_AUTOCSETTYPESEPARATOR 2286 -#define SCI_AUTOCSETMAXWIDTH 2208 -#define SCI_AUTOCGETMAXWIDTH 2209 -#define SCI_AUTOCSETMAXHEIGHT 2210 -#define SCI_AUTOCGETMAXHEIGHT 2211 -#define SCI_SETINDENT 2122 -#define SCI_GETINDENT 2123 -#define SCI_SETUSETABS 2124 -#define SCI_GETUSETABS 2125 -#define SCI_SETLINEINDENTATION 2126 -#define SCI_GETLINEINDENTATION 2127 -#define SCI_GETLINEINDENTPOSITION 2128 -#define SCI_GETCOLUMN 2129 -#define SCI_SETHSCROLLBAR 2130 -#define SCI_GETHSCROLLBAR 2131 -#define SCI_SETINDENTATIONGUIDES 2132 -#define SCI_GETINDENTATIONGUIDES 2133 -#define SCI_SETHIGHLIGHTGUIDE 2134 -#define SCI_GETHIGHLIGHTGUIDE 2135 -#define SCI_GETLINEENDPOSITION 2136 -#define SCI_GETCODEPAGE 2137 -#define SCI_GETCARETFORE 2138 -#define SCI_GETUSEPALETTE 2139 -#define SCI_GETREADONLY 2140 -#define SCI_SETCURRENTPOS 2141 -#define SCI_SETSELECTIONSTART 2142 -#define SCI_GETSELECTIONSTART 2143 -#define SCI_SETSELECTIONEND 2144 -#define SCI_GETSELECTIONEND 2145 -#define SCI_SETPRINTMAGNIFICATION 2146 -#define SCI_GETPRINTMAGNIFICATION 2147 -#define SC_PRINT_NORMAL 0 -#define SC_PRINT_INVERTLIGHT 1 -#define SC_PRINT_BLACKONWHITE 2 -#define SC_PRINT_COLOURONWHITE 3 -#define SC_PRINT_COLOURONWHITEDEFAULTBG 4 -#define SCI_SETPRINTCOLOURMODE 2148 -#define SCI_GETPRINTCOLOURMODE 2149 -#define SCFIND_WHOLEWORD 2 -#define SCFIND_MATCHCASE 4 -#define SCFIND_WORDSTART 0x00100000 -#define SCFIND_REGEXP 0x00200000 -#define SCFIND_POSIX 0x00400000 -#define SCI_FINDTEXT 2150 -#define SCI_FORMATRANGE 2151 -#define SCI_GETFIRSTVISIBLELINE 2152 -#define SCI_GETLINE 2153 -#define SCI_GETLINECOUNT 2154 -#define SCI_SETMARGINLEFT 2155 -#define SCI_GETMARGINLEFT 2156 -#define SCI_SETMARGINRIGHT 2157 -#define SCI_GETMARGINRIGHT 2158 -#define SCI_GETMODIFY 2159 -#define SCI_SETSEL 2160 -#define SCI_GETSELTEXT 2161 -#define SCI_GETTEXTRANGE 2162 -#define SCI_HIDESELECTION 2163 -#define SCI_POINTXFROMPOSITION 2164 -#define SCI_POINTYFROMPOSITION 2165 -#define SCI_LINEFROMPOSITION 2166 -#define SCI_POSITIONFROMLINE 2167 -#define SCI_LINESCROLL 2168 -#define SCI_SCROLLCARET 2169 -#define SCI_REPLACESEL 2170 -#define SCI_SETREADONLY 2171 -#define SCI_NULL 2172 -#define SCI_CANPASTE 2173 -#define SCI_CANUNDO 2174 -#define SCI_EMPTYUNDOBUFFER 2175 -#define SCI_UNDO 2176 -#define SCI_CUT 2177 -#define SCI_COPY 2178 -#define SCI_PASTE 2179 -#define SCI_CLEAR 2180 -#define SCI_SETTEXT 2181 -#define SCI_GETTEXT 2182 -#define SCI_GETTEXTLENGTH 2183 -#define SCI_GETDIRECTFUNCTION 2184 -#define SCI_GETDIRECTPOINTER 2185 -#define SCI_SETOVERTYPE 2186 -#define SCI_GETOVERTYPE 2187 -#define SCI_SETCARETWIDTH 2188 -#define SCI_GETCARETWIDTH 2189 -#define SCI_SETTARGETSTART 2190 -#define SCI_GETTARGETSTART 2191 -#define SCI_SETTARGETEND 2192 -#define SCI_GETTARGETEND 2193 -#define SCI_REPLACETARGET 2194 -#define SCI_REPLACETARGETRE 2195 -#define SCI_SEARCHINTARGET 2197 -#define SCI_SETSEARCHFLAGS 2198 -#define SCI_GETSEARCHFLAGS 2199 -#define SCI_CALLTIPSHOW 2200 -#define SCI_CALLTIPCANCEL 2201 -#define SCI_CALLTIPACTIVE 2202 -#define SCI_CALLTIPPOSSTART 2203 -#define SCI_CALLTIPSETHLT 2204 -#define SCI_CALLTIPSETBACK 2205 -#define SCI_CALLTIPSETFORE 2206 -#define SCI_CALLTIPSETFOREHLT 2207 -#define SCI_CALLTIPUSESTYLE 2212 -#define SCI_VISIBLEFROMDOCLINE 2220 -#define SCI_DOCLINEFROMVISIBLE 2221 -#define SCI_WRAPCOUNT 2235 -#define SC_FOLDLEVELBASE 0x400 -#define SC_FOLDLEVELWHITEFLAG 0x1000 -#define SC_FOLDLEVELHEADERFLAG 0x2000 -#define SC_FOLDLEVELBOXHEADERFLAG 0x4000 -#define SC_FOLDLEVELBOXFOOTERFLAG 0x8000 -#define SC_FOLDLEVELCONTRACTED 0x10000 -#define SC_FOLDLEVELUNINDENT 0x20000 -#define SC_FOLDLEVELNUMBERMASK 0x0FFF -#define SCI_SETFOLDLEVEL 2222 -#define SCI_GETFOLDLEVEL 2223 -#define SCI_GETLASTCHILD 2224 -#define SCI_GETFOLDPARENT 2225 -#define SCI_SHOWLINES 2226 -#define SCI_HIDELINES 2227 -#define SCI_GETLINEVISIBLE 2228 -#define SCI_SETFOLDEXPANDED 2229 -#define SCI_GETFOLDEXPANDED 2230 -#define SCI_TOGGLEFOLD 2231 -#define SCI_ENSUREVISIBLE 2232 -#define SC_FOLDFLAG_LINEBEFORE_EXPANDED 0x0002 -#define SC_FOLDFLAG_LINEBEFORE_CONTRACTED 0x0004 -#define SC_FOLDFLAG_LINEAFTER_EXPANDED 0x0008 -#define SC_FOLDFLAG_LINEAFTER_CONTRACTED 0x0010 -#define SC_FOLDFLAG_LEVELNUMBERS 0x0040 -#define SC_FOLDFLAG_BOX 0x0001 -#define SCI_SETFOLDFLAGS 2233 -#define SCI_ENSUREVISIBLEENFORCEPOLICY 2234 -#define SCI_SETTABINDENTS 2260 -#define SCI_GETTABINDENTS 2261 -#define SCI_SETBACKSPACEUNINDENTS 2262 -#define SCI_GETBACKSPACEUNINDENTS 2263 -#define SC_TIME_FOREVER 10000000 -#define SCI_SETMOUSEDWELLTIME 2264 -#define SCI_GETMOUSEDWELLTIME 2265 -#define SCI_WORDSTARTPOSITION 2266 -#define SCI_WORDENDPOSITION 2267 -#define SC_WRAP_NONE 0 -#define SC_WRAP_WORD 1 -#define SC_WRAP_CHAR 2 -#define SCI_SETWRAPMODE 2268 -#define SCI_GETWRAPMODE 2269 -#define SC_WRAPVISUALFLAG_NONE 0x0000 -#define SC_WRAPVISUALFLAG_END 0x0001 -#define SC_WRAPVISUALFLAG_START 0x0002 -#define SCI_SETWRAPVISUALFLAGS 2460 -#define SCI_GETWRAPVISUALFLAGS 2461 -#define SC_WRAPVISUALFLAGLOC_DEFAULT 0x0000 -#define SC_WRAPVISUALFLAGLOC_END_BY_TEXT 0x0001 -#define SC_WRAPVISUALFLAGLOC_START_BY_TEXT 0x0002 -#define SCI_SETWRAPVISUALFLAGSLOCATION 2462 -#define SCI_GETWRAPVISUALFLAGSLOCATION 2463 -#define SCI_SETWRAPSTARTINDENT 2464 -#define SCI_GETWRAPSTARTINDENT 2465 -#define SC_CACHE_NONE 0 -#define SC_CACHE_CARET 1 -#define SC_CACHE_PAGE 2 -#define SC_CACHE_DOCUMENT 3 -#define SCI_SETLAYOUTCACHE 2272 -#define SCI_GETLAYOUTCACHE 2273 -#define SCI_SETSCROLLWIDTH 2274 -#define SCI_GETSCROLLWIDTH 2275 -#define SCI_TEXTWIDTH 2276 -#define SCI_SETENDATLASTLINE 2277 -#define SCI_GETENDATLASTLINE 2278 -#define SCI_TEXTHEIGHT 2279 -#define SCI_SETVSCROLLBAR 2280 -#define SCI_GETVSCROLLBAR 2281 -#define SCI_APPENDTEXT 2282 -#define SCI_GETTWOPHASEDRAW 2283 -#define SCI_SETTWOPHASEDRAW 2284 -#define SCI_TARGETFROMSELECTION 2287 -#define SCI_LINESJOIN 2288 -#define SCI_LINESSPLIT 2289 -#define SCI_SETFOLDMARGINCOLOUR 2290 -#define SCI_SETFOLDMARGINHICOLOUR 2291 -#define SCI_LINEDOWN 2300 -#define SCI_LINEDOWNEXTEND 2301 -#define SCI_LINEUP 2302 -#define SCI_LINEUPEXTEND 2303 -#define SCI_CHARLEFT 2304 -#define SCI_CHARLEFTEXTEND 2305 -#define SCI_CHARRIGHT 2306 -#define SCI_CHARRIGHTEXTEND 2307 -#define SCI_WORDLEFT 2308 -#define SCI_WORDLEFTEXTEND 2309 -#define SCI_WORDRIGHT 2310 -#define SCI_WORDRIGHTEXTEND 2311 -#define SCI_HOME 2312 -#define SCI_HOMEEXTEND 2313 -#define SCI_LINEEND 2314 -#define SCI_LINEENDEXTEND 2315 -#define SCI_DOCUMENTSTART 2316 -#define SCI_DOCUMENTSTARTEXTEND 2317 -#define SCI_DOCUMENTEND 2318 -#define SCI_DOCUMENTENDEXTEND 2319 -#define SCI_PAGEUP 2320 -#define SCI_PAGEUPEXTEND 2321 -#define SCI_PAGEDOWN 2322 -#define SCI_PAGEDOWNEXTEND 2323 -#define SCI_EDITTOGGLEOVERTYPE 2324 -#define SCI_CANCEL 2325 -#define SCI_DELETEBACK 2326 -#define SCI_TAB 2327 -#define SCI_BACKTAB 2328 -#define SCI_NEWLINE 2329 -#define SCI_FORMFEED 2330 -#define SCI_VCHOME 2331 -#define SCI_VCHOMEEXTEND 2332 -#define SCI_ZOOMIN 2333 -#define SCI_ZOOMOUT 2334 -#define SCI_DELWORDLEFT 2335 -#define SCI_DELWORDRIGHT 2336 -#define SCI_LINECUT 2337 -#define SCI_LINEDELETE 2338 -#define SCI_LINETRANSPOSE 2339 -#define SCI_LINEDUPLICATE 2404 -#define SCI_LOWERCASE 2340 -#define SCI_UPPERCASE 2341 -#define SCI_LINESCROLLDOWN 2342 -#define SCI_LINESCROLLUP 2343 -#define SCI_DELETEBACKNOTLINE 2344 -#define SCI_HOMEDISPLAY 2345 -#define SCI_HOMEDISPLAYEXTEND 2346 -#define SCI_LINEENDDISPLAY 2347 -#define SCI_LINEENDDISPLAYEXTEND 2348 -#define SCI_HOMEWRAP 2349 -#define SCI_HOMEWRAPEXTEND 2450 -#define SCI_LINEENDWRAP 2451 -#define SCI_LINEENDWRAPEXTEND 2452 -#define SCI_VCHOMEWRAP 2453 -#define SCI_VCHOMEWRAPEXTEND 2454 -#define SCI_LINECOPY 2455 -#define SCI_MOVECARETINSIDEVIEW 2401 -#define SCI_LINELENGTH 2350 -#define SCI_BRACEHIGHLIGHT 2351 -#define SCI_BRACEBADLIGHT 2352 -#define SCI_BRACEMATCH 2353 -#define SCI_GETVIEWEOL 2355 -#define SCI_SETVIEWEOL 2356 -#define SCI_GETDOCPOINTER 2357 -#define SCI_SETDOCPOINTER 2358 -#define SCI_SETMODEVENTMASK 2359 -#define EDGE_NONE 0 -#define EDGE_LINE 1 -#define EDGE_BACKGROUND 2 -#define SCI_GETEDGECOLUMN 2360 -#define SCI_SETEDGECOLUMN 2361 -#define SCI_GETEDGEMODE 2362 -#define SCI_SETEDGEMODE 2363 -#define SCI_GETEDGECOLOUR 2364 -#define SCI_SETEDGECOLOUR 2365 -#define SCI_SEARCHANCHOR 2366 -#define SCI_SEARCHNEXT 2367 -#define SCI_SEARCHPREV 2368 -#define SCI_LINESONSCREEN 2370 -#define SCI_USEPOPUP 2371 -#define SCI_SELECTIONISRECTANGLE 2372 -#define SCI_SETZOOM 2373 -#define SCI_GETZOOM 2374 -#define SCI_CREATEDOCUMENT 2375 -#define SCI_ADDREFDOCUMENT 2376 -#define SCI_RELEASEDOCUMENT 2377 -#define SCI_GETMODEVENTMASK 2378 -#define SCI_SETFOCUS 2380 -#define SCI_GETFOCUS 2381 -#define SCI_SETSTATUS 2382 -#define SCI_GETSTATUS 2383 -#define SCI_SETMOUSEDOWNCAPTURES 2384 -#define SCI_GETMOUSEDOWNCAPTURES 2385 -#define SC_CURSORNORMAL -1 -#define SC_CURSORWAIT 4 -#define SCI_SETCURSOR 2386 -#define SCI_GETCURSOR 2387 -#define SCI_SETCONTROLCHARSYMBOL 2388 -#define SCI_GETCONTROLCHARSYMBOL 2389 -#define SCI_WORDPARTLEFT 2390 -#define SCI_WORDPARTLEFTEXTEND 2391 -#define SCI_WORDPARTRIGHT 2392 -#define SCI_WORDPARTRIGHTEXTEND 2393 -#define VISIBLE_SLOP 0x01 -#define VISIBLE_STRICT 0x04 -#define SCI_SETVISIBLEPOLICY 2394 -#define SCI_DELLINELEFT 2395 -#define SCI_DELLINERIGHT 2396 -#define SCI_SETXOFFSET 2397 -#define SCI_GETXOFFSET 2398 -#define SCI_CHOOSECARETX 2399 -#define SCI_GRABFOCUS 2400 -#define CARET_SLOP 0x01 -#define CARET_STRICT 0x04 -#define CARET_JUMPS 0x10 -#define CARET_EVEN 0x08 -#define SCI_SETXCARETPOLICY 2402 -#define SCI_SETYCARETPOLICY 2403 -#define SCI_SETPRINTWRAPMODE 2406 -#define SCI_GETPRINTWRAPMODE 2407 -#define SCI_SETHOTSPOTACTIVEFORE 2410 -#define SCI_SETHOTSPOTACTIVEBACK 2411 -#define SCI_SETHOTSPOTACTIVEUNDERLINE 2412 -#define SCI_SETHOTSPOTSINGLELINE 2421 -#define SCI_PARADOWN 2413 -#define SCI_PARADOWNEXTEND 2414 -#define SCI_PARAUP 2415 -#define SCI_PARAUPEXTEND 2416 -#define SCI_POSITIONBEFORE 2417 -#define SCI_POSITIONAFTER 2418 -#define SCI_COPYRANGE 2419 -#define SCI_COPYTEXT 2420 -#define SC_SEL_STREAM 0 -#define SC_SEL_RECTANGLE 1 -#define SC_SEL_LINES 2 -#define SCI_SETSELECTIONMODE 2422 -#define SCI_GETSELECTIONMODE 2423 -#define SCI_GETLINESELSTARTPOSITION 2424 -#define SCI_GETLINESELENDPOSITION 2425 -#define SCI_LINEDOWNRECTEXTEND 2426 -#define SCI_LINEUPRECTEXTEND 2427 -#define SCI_CHARLEFTRECTEXTEND 2428 -#define SCI_CHARRIGHTRECTEXTEND 2429 -#define SCI_HOMERECTEXTEND 2430 -#define SCI_VCHOMERECTEXTEND 2431 -#define SCI_LINEENDRECTEXTEND 2432 -#define SCI_PAGEUPRECTEXTEND 2433 -#define SCI_PAGEDOWNRECTEXTEND 2434 -#define SCI_STUTTEREDPAGEUP 2435 -#define SCI_STUTTEREDPAGEUPEXTEND 2436 -#define SCI_STUTTEREDPAGEDOWN 2437 -#define SCI_STUTTEREDPAGEDOWNEXTEND 2438 -#define SCI_WORDLEFTEND 2439 -#define SCI_WORDLEFTENDEXTEND 2440 -#define SCI_WORDRIGHTEND 2441 -#define SCI_WORDRIGHTENDEXTEND 2442 -#define SCI_SETWHITESPACECHARS 2443 -#define SCI_SETCHARSDEFAULT 2444 -#define SCI_AUTOCGETCURRENT 2445 -#define SCI_ALLOCATE 2446 -#define SCI_TARGETASUTF8 2447 -#define SCI_SETLENGTHFORENCODE 2448 -#define SCI_ENCODEDFROMUTF8 2449 -#define SCI_FINDCOLUMN 2456 -#define SCI_GETCARETSTICKY 2457 -#define SCI_SETCARETSTICKY 2458 -#define SCI_TOGGLECARETSTICKY 2459 -#define SCI_SETPASTECONVERTENDINGS 2467 -#define SCI_GETPASTECONVERTENDINGS 2468 -#define SCI_SELECTIONDUPLICATE 2469 -#define SC_ALPHA_TRANSPARENT 0 -#define SC_ALPHA_OPAQUE 255 -#define SC_ALPHA_NOALPHA 256 -#define SCI_SETCARETLINEBACKALPHA 2470 -#define SCI_GETCARETLINEBACKALPHA 2471 -#define SCI_STARTRECORD 3001 -#define SCI_STOPRECORD 3002 -#define SCI_SETLEXER 4001 -#define SCI_GETLEXER 4002 -#define SCI_COLOURISE 4003 -#define SCI_SETPROPERTY 4004 -#define KEYWORDSET_MAX 8 -#define SCI_SETKEYWORDS 4005 -#define SCI_SETLEXERLANGUAGE 4006 -#define SCI_LOADLEXERLIBRARY 4007 -#define SCI_GETPROPERTY 4008 -#define SCI_GETPROPERTYEXPANDED 4009 -#define SCI_GETPROPERTYINT 4010 -#define SCI_GETSTYLEBITSNEEDED 4011 -#define SC_MOD_INSERTTEXT 0x1 -#define SC_MOD_DELETETEXT 0x2 -#define SC_MOD_CHANGESTYLE 0x4 -#define SC_MOD_CHANGEFOLD 0x8 -#define SC_PERFORMED_USER 0x10 -#define SC_PERFORMED_UNDO 0x20 -#define SC_PERFORMED_REDO 0x40 -#define SC_MULTISTEPUNDOREDO 0x80 -#define SC_LASTSTEPINUNDOREDO 0x100 -#define SC_MOD_CHANGEMARKER 0x200 -#define SC_MOD_BEFOREINSERT 0x400 -#define SC_MOD_BEFOREDELETE 0x800 -#define SC_MULTILINEUNDOREDO 0x1000 -#define SC_MODEVENTMASKALL 0x1FFF -#define SCEN_CHANGE 768 -#define SCEN_SETFOCUS 512 -#define SCEN_KILLFOCUS 256 -#define SCK_DOWN 300 -#define SCK_UP 301 -#define SCK_LEFT 302 -#define SCK_RIGHT 303 -#define SCK_HOME 304 -#define SCK_END 305 -#define SCK_PRIOR 306 -#define SCK_NEXT 307 -#define SCK_DELETE 308 -#define SCK_INSERT 309 -#define SCK_ESCAPE 7 -#define SCK_BACK 8 -#define SCK_TAB 9 -#define SCK_RETURN 13 -#define SCK_ADD 310 -#define SCK_SUBTRACT 311 -#define SCK_DIVIDE 312 -#define SCMOD_NORM 0 -#define SCMOD_SHIFT 1 -#define SCMOD_CTRL 2 -#define SCMOD_ALT 4 -#define SCN_STYLENEEDED 2000 -#define SCN_CHARADDED 2001 -#define SCN_SAVEPOINTREACHED 2002 -#define SCN_SAVEPOINTLEFT 2003 -#define SCN_MODIFYATTEMPTRO 2004 -#define SCN_KEY 2005 -#define SCN_DOUBLECLICK 2006 -#define SCN_UPDATEUI 2007 -#define SCN_MODIFIED 2008 -#define SCN_MACRORECORD 2009 -#define SCN_MARGINCLICK 2010 -#define SCN_NEEDSHOWN 2011 -#define SCN_PAINTED 2013 -#define SCN_USERLISTSELECTION 2014 -#define SCN_URIDROPPED 2015 -#define SCN_DWELLSTART 2016 -#define SCN_DWELLEND 2017 -#define SCN_ZOOM 2018 -#define SCN_HOTSPOTCLICK 2019 -#define SCN_HOTSPOTDOUBLECLICK 2020 -#define SCN_CALLTIPCLICK 2021 -#define SCN_AUTOCSELECTION 2022 -//--Autogenerated -- end of section automatically generated from Scintilla.iface - -// These structures are defined to be exactly the same shape as the Win32 -// CHARRANGE, TEXTRANGE, FINDTEXTEX, FORMATRANGE, and NMHDR structs. -// So older code that treats Scintilla as a RichEdit will work. - -struct CharacterRange { - long cpMin; - long cpMax; -}; - -struct TextRange { - struct CharacterRange chrg; - char *lpstrText; -}; - -struct TextToFind { - struct CharacterRange chrg; - char *lpstrText; - struct CharacterRange chrgText; -}; - -#ifdef PLATFORM_H - -// This structure is used in printing and requires some of the graphics types -// from Platform.h. Not needed by most client code. - -struct RangeToFormat { - SurfaceID hdc; - SurfaceID hdcTarget; - PRectangle rc; - PRectangle rcPage; - CharacterRange chrg; -}; - -#endif - -struct NotifyHeader { - // Compatible with Windows NMHDR. - // hwndFrom is really an environment specific window handle or pointer - // but most clients of Scintilla.h do not have this type visible. - void *hwndFrom; - uptr_t idFrom; - unsigned int code; -}; - -struct SCNotification { - struct NotifyHeader nmhdr; - int position; // SCN_STYLENEEDED, SCN_MODIFIED, SCN_DWELLSTART, SCN_DWELLEND - int ch; // SCN_CHARADDED, SCN_KEY - int modifiers; // SCN_KEY - int modificationType; // SCN_MODIFIED - const char *text; // SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION - int length; // SCN_MODIFIED - int linesAdded; // SCN_MODIFIED - int message; // SCN_MACRORECORD - uptr_t wParam; // SCN_MACRORECORD - sptr_t lParam; // SCN_MACRORECORD - int line; // SCN_MODIFIED - int foldLevelNow; // SCN_MODIFIED - int foldLevelPrev; // SCN_MODIFIED - int margin; // SCN_MARGINCLICK - int listType; // SCN_USERLISTSELECTION - int x; // SCN_DWELLSTART, SCN_DWELLEND - int y; // SCN_DWELLSTART, SCN_DWELLEND -}; - -// Deprecation section listing all API features that are deprecated and will -// will be removed completely in a future version. -// To enable these features define INCLUDE_DEPRECATED_FEATURES - -#ifdef INCLUDE_DEPRECATED_FEATURES - -#define SCI_SETCARETPOLICY 2369 -#define CARET_CENTER 0x02 -#define CARET_XEVEN 0x08 -#define CARET_XJUMPS 0x10 - -#define SCN_POSCHANGED 2012 -#define SCN_CHECKBRACE 2007 - -#endif - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/ScintillaWidget.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/ScintillaWidget.h deleted file mode 100644 index 9d23ce2a91..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/ScintillaWidget.h +++ /dev/null @@ -1,59 +0,0 @@ -// Scintilla source code edit control -/** @file ScintillaWidget.h - ** Definition of Scintilla widget for GTK+. - ** Only needed by GTK+ code but is harmless on other platforms. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef SCINTILLAWIDGET_H -#define SCINTILLAWIDGET_H - -#if PLAT_GTK - -#ifdef __cplusplus -extern "C" { -#endif - -#define SCINTILLA(obj) GTK_CHECK_CAST (obj, scintilla_get_type (), ScintillaObject) -#define SCINTILLA_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, scintilla_get_type (), ScintillaClass) -#define IS_SCINTILLA(obj) GTK_CHECK_TYPE (obj, scintilla_get_type ()) - -typedef struct _ScintillaObject ScintillaObject; -typedef struct _ScintillaClass ScintillaClass; - -struct _ScintillaObject { - GtkContainer cont; - void *pscin; -}; - -struct _ScintillaClass { - GtkContainerClass parent_class; - - void (* command) (ScintillaObject *ttt); - void (* notify) (ScintillaObject *ttt); -}; - -#if GLIB_MAJOR_VERSION < 2 -GtkType scintilla_get_type (void); -#else -GType scintilla_get_type (void); -#endif -GtkWidget* scintilla_new (void); -void scintilla_set_id (ScintillaObject *sci, uptr_t id); -sptr_t scintilla_send_message (ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam); -void scintilla_release_resources(void); - -#if GTK_MAJOR_VERSION < 2 -#define SCINTILLA_NOTIFY "notify" -#else -#define SCINTILLA_NOTIFY "sci-notify" -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/WindowAccessor.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/WindowAccessor.h deleted file mode 100644 index 6c16b150f2..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/include/WindowAccessor.h +++ /dev/null @@ -1,57 +0,0 @@ -// Scintilla source code edit control -/** @file WindowAccessor.h - ** Implementation of BufferAccess and StylingAccess on a Scintilla - ** rapid easy access to contents of a Scintilla. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -/** - */ -class WindowAccessor : public Accessor { - // Private so WindowAccessor objects can not be copied - WindowAccessor(const WindowAccessor &source) : Accessor(), props(source.props) {} - WindowAccessor &operator=(const WindowAccessor &) { return *this; } -protected: - WindowID id; - PropSet &props; - int lenDoc; - - char styleBuf[bufferSize]; - int validLen; - char chFlags; - char chWhile; - unsigned int startSeg; - - bool InternalIsLeadByte(char ch); - void Fill(int position); -public: - WindowAccessor(WindowID id_, PropSet &props_) : - Accessor(), id(id_), props(props_), - lenDoc(-1), validLen(0), chFlags(0), chWhile(0) { - } - ~WindowAccessor(); - bool Match(int pos, const char *s); - char StyleAt(int position); - int GetLine(int position); - int LineStart(int line); - int LevelAt(int line); - int Length(); - void Flush(); - int GetLineState(int line); - int SetLineState(int line, int state); - int GetPropertyInt(const char *key, int defaultValue=0) { - return props.GetInt(key, defaultValue); - } - char *GetProperties() { - return props.ToString(); - } - - void StartAt(unsigned int start, char chMask=31); - void SetFlags(char chFlags_, char chWhile_) {chFlags = chFlags_; chWhile = chWhile_; }; - unsigned int GetStartSegment() { return startSeg; } - void StartSegment(unsigned int pos); - void ColourTo(unsigned int pos, int chAttr); - void SetLevel(int line, int level); - int IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader = 0); -}; diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/AutoComplete.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/AutoComplete.cxx deleted file mode 100644 index 753adca779..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/AutoComplete.cxx +++ /dev/null @@ -1,174 +0,0 @@ -// Scintilla source code edit control -/** @file AutoComplete.cxx - ** Defines the auto completion list box. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "AutoComplete.h" - -AutoComplete::AutoComplete() : - active(false), - separator(' '), - typesep('?'), - ignoreCase(false), - chooseSingle(false), - lb(0), - posStart(0), - startLen(0), - cancelAtStartPos(true), - autoHide(true), - dropRestOfWord(false) { - lb = ListBox::Allocate(); - stopChars[0] = '\0'; - fillUpChars[0] = '\0'; -} - -AutoComplete::~AutoComplete() { - if (lb) { - lb->Destroy(); - delete lb; - lb = 0; - } -} - -bool AutoComplete::Active() { - return active; -} - -void AutoComplete::Start(Window &parent, int ctrlID, - int position, Point location, int startLen_, - int lineHeight, bool unicodeMode) { - if (active) { - Cancel(); - } - lb->Create(parent, ctrlID, location, lineHeight, unicodeMode); - lb->Clear(); - active = true; - startLen = startLen_; - posStart = position; -} - -void AutoComplete::SetStopChars(const char *stopChars_) { - strncpy(stopChars, stopChars_, sizeof(stopChars)); - stopChars[sizeof(stopChars) - 1] = '\0'; -} - -bool AutoComplete::IsStopChar(char ch) { - return ch && strchr(stopChars, ch); -} - -void AutoComplete::SetFillUpChars(const char *fillUpChars_) { - strncpy(fillUpChars, fillUpChars_, sizeof(fillUpChars)); - fillUpChars[sizeof(fillUpChars) - 1] = '\0'; -} - -bool AutoComplete::IsFillUpChar(char ch) { - return ch && strchr(fillUpChars, ch); -} - -void AutoComplete::SetSeparator(char separator_) { - separator = separator_; -} - -char AutoComplete::GetSeparator() { - return separator; -} - -void AutoComplete::SetTypesep(char separator_) { - typesep = separator_; -} - -char AutoComplete::GetTypesep() { - return typesep; -} - -void AutoComplete::SetList(const char *list) { - lb->SetList(list, separator, typesep); -} - -void AutoComplete::Show(bool show) { - lb->Show(show); - if (show) - lb->Select(0); -} - -void AutoComplete::Cancel() { - if (lb->Created()) { - lb->Clear(); - lb->Destroy(); - active = false; - } -} - - -void AutoComplete::Move(int delta) { - int count = lb->Length(); - int current = lb->GetSelection(); - current += delta; - if (current >= count) - current = count - 1; - if (current < 0) - current = 0; - lb->Select(current); -} - -void AutoComplete::Select(const char *word) { - size_t lenWord = strlen(word); - int location = -1; - const int maxItemLen=1000; - char item[maxItemLen]; - int start = 0; // lower bound of the api array block to search - int end = lb->Length() - 1; // upper bound of the api array block to search - while ((start <= end) && (location == -1)) { // Binary searching loop - int pivot = (start + end) / 2; - lb->GetValue(pivot, item, maxItemLen); - int cond; - if (ignoreCase) - cond = CompareNCaseInsensitive(word, item, lenWord); - else - cond = strncmp(word, item, lenWord); - if (!cond) { - // Find first match - while (pivot > start) { - lb->GetValue(pivot-1, item, maxItemLen); - if (ignoreCase) - cond = CompareNCaseInsensitive(word, item, lenWord); - else - cond = strncmp(word, item, lenWord); - if (0 != cond) - break; - --pivot; - } - location = pivot; - if (ignoreCase) { - // Check for exact-case match - for (; pivot <= end; pivot++) { - lb->GetValue(pivot, item, maxItemLen); - if (!strncmp(word, item, lenWord)) { - location = pivot; - break; - } - if (CompareNCaseInsensitive(word, item, lenWord)) - break; - } - } - } else if (cond < 0) { - end = pivot - 1; - } else if (cond > 0) { - start = pivot + 1; - } - } - if (location == -1 && autoHide) - Cancel(); - else - lb->Select(location); -} - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/AutoComplete.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/AutoComplete.h deleted file mode 100644 index 10577ca380..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/AutoComplete.h +++ /dev/null @@ -1,70 +0,0 @@ -// Scintilla source code edit control -/** @file AutoComplete.h - ** Defines the auto completion list box. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef AUTOCOMPLETE_H -#define AUTOCOMPLETE_H - -/** - */ -class AutoComplete { - bool active; - char stopChars[256]; - char fillUpChars[256]; - char separator; - char typesep; // Type seperator - -public: - bool ignoreCase; - bool chooseSingle; - ListBox *lb; - int posStart; - int startLen; - /// Should autocompletion be canceled if editor's currentPos <= startPos? - bool cancelAtStartPos; - bool autoHide; - bool dropRestOfWord; - - AutoComplete(); - ~AutoComplete(); - - /// Is the auto completion list displayed? - bool Active(); - - /// Display the auto completion list positioned to be near a character position - void Start(Window &parent, int ctrlID, int position, Point location, - int startLen_, int lineHeight, bool unicodeMode); - - /// The stop chars are characters which, when typed, cause the auto completion list to disappear - void SetStopChars(const char *stopChars_); - bool IsStopChar(char ch); - - /// The fillup chars are characters which, when typed, fill up the selected word - void SetFillUpChars(const char *fillUpChars_); - bool IsFillUpChar(char ch); - - /// The separator character is used when interpreting the list in SetList - void SetSeparator(char separator_); - char GetSeparator(); - - /// The typesep character is used for seperating the word from the type - void SetTypesep(char separator_); - char GetTypesep(); - - /// The list string contains a sequence of words separated by the separator character - void SetList(const char *list); - - void Show(bool show); - void Cancel(); - - /// Move the current list element by delta, scrolling appropriately - void Move(int delta); - - /// Select a list element that starts with word as the current element - void Select(const char *word); -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CallTip.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CallTip.cxx deleted file mode 100644 index f4bc5f83c4..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CallTip.cxx +++ /dev/null @@ -1,314 +0,0 @@ -// Scintilla source code edit control -/** @file CallTip.cxx - ** Code for displaying call tips. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include - -#include "Platform.h" - -#include "Scintilla.h" -#include "CallTip.h" - -static const int insetX = 5; // text inset in x from calltip border -static const int widthArrow = 14; - -CallTip::CallTip() { - wCallTip = 0; - inCallTipMode = false; - posStartCallTip = 0; - val = 0; - rectUp = PRectangle(0,0,0,0); - rectDown = PRectangle(0,0,0,0); - lineHeight = 1; - startHighlight = 0; - endHighlight = 0; - tabSize = 0; - useStyleCallTip = false; // for backwards compatibility - - colourBG.desired = ColourDesired(0xff, 0xff, 0xff); - colourUnSel.desired = ColourDesired(0x80, 0x80, 0x80); - colourSel.desired = ColourDesired(0, 0, 0x80); - colourShade.desired = ColourDesired(0, 0, 0); - colourLight.desired = ColourDesired(0xc0, 0xc0, 0xc0); -} - -CallTip::~CallTip() { - font.Release(); - wCallTip.Destroy(); - delete []val; - val = 0; -} - -void CallTip::RefreshColourPalette(Palette &pal, bool want) { - pal.WantFind(colourBG, want); - pal.WantFind(colourUnSel, want); - pal.WantFind(colourSel, want); - pal.WantFind(colourShade, want); - pal.WantFind(colourLight, want); -} - -// Although this test includes 0, we should never see a \0 character. -static bool IsArrowCharacter(char ch) { - return (ch == 0) || (ch == '\001') || (ch == '\002'); -} - -// We ignore tabs unless a tab width has been set. -bool CallTip::IsTabCharacter(char ch) { - return (tabSize > 0) && (ch == '\t'); -} - -int CallTip::NextTabPos(int x) { - if (tabSize > 0) { // paranoia... not called unless this is true - x -= insetX; // position relative to text - x = (x + tabSize) / tabSize; // tab "number" - return tabSize*x + insetX; // position of next tab - } else { - return x + 1; // arbitrary - } -} - -// Draw a section of the call tip that does not include \n in one colour. -// The text may include up to numEnds tabs or arrow characters. -void CallTip::DrawChunk(Surface *surface, int &x, const char *s, - int posStart, int posEnd, int ytext, PRectangle rcClient, - bool highlight, bool draw) { - s += posStart; - int len = posEnd - posStart; - - // Divide the text into sections that are all text, or that are - // single arrows or single tab characters (if tabSize > 0). - int maxEnd = 0; - const int numEnds = 10; - int ends[numEnds + 2]; - for (int i=0;i 0) - ends[maxEnd++] = i; - ends[maxEnd++] = i+1; - } - } - ends[maxEnd++] = len; - int startSeg = 0; - int xEnd; - for (int seg = 0; seg startSeg) { - if (IsArrowCharacter(s[startSeg])) { - bool upArrow = s[startSeg] == '\001'; - rcClient.left = x; - rcClient.right = rcClient.left + widthArrow; - if (draw) { - const int halfWidth = widthArrow / 2 - 3; - const int centreX = rcClient.left + widthArrow / 2 - 1; - const int centreY = (rcClient.top + rcClient.bottom) / 2; - surface->FillRectangle(rcClient, colourBG.allocated); - PRectangle rcClientInner(rcClient.left + 1, rcClient.top + 1, - rcClient.right - 2, rcClient.bottom - 1); - surface->FillRectangle(rcClientInner, colourUnSel.allocated); - - if (upArrow) { // Up arrow - Point pts[] = { - Point(centreX - halfWidth, centreY + halfWidth / 2), - Point(centreX + halfWidth, centreY + halfWidth / 2), - Point(centreX, centreY - halfWidth + halfWidth / 2), - }; - surface->Polygon(pts, sizeof(pts) / sizeof(pts[0]), - colourBG.allocated, colourBG.allocated); - } else { // Down arrow - Point pts[] = { - Point(centreX - halfWidth, centreY - halfWidth / 2), - Point(centreX + halfWidth, centreY - halfWidth / 2), - Point(centreX, centreY + halfWidth - halfWidth / 2), - }; - surface->Polygon(pts, sizeof(pts) / sizeof(pts[0]), - colourBG.allocated, colourBG.allocated); - } - } - xEnd = rcClient.right; - offsetMain = xEnd; - if (upArrow) { - rectUp = rcClient; - } else { - rectDown = rcClient; - } - } else if (IsTabCharacter(s[startSeg])) { - xEnd = NextTabPos(x); - } else { - xEnd = x + surface->WidthText(font, s + startSeg, endSeg - startSeg); - if (draw) { - rcClient.left = x; - rcClient.right = xEnd; - surface->DrawTextTransparent(rcClient, font, ytext, - s+startSeg, endSeg - startSeg, - highlight ? colourSel.allocated : colourUnSel.allocated); - } - } - x = xEnd; - startSeg = endSeg; - } - } -} - -int CallTip::PaintContents(Surface *surfaceWindow, bool draw) { - PRectangle rcClientPos = wCallTip.GetClientPosition(); - PRectangle rcClientSize(0, 0, rcClientPos.right - rcClientPos.left, - rcClientPos.bottom - rcClientPos.top); - PRectangle rcClient(1, 1, rcClientSize.right - 1, rcClientSize.bottom - 1); - - // To make a nice small call tip window, it is only sized to fit most normal characters without accents - int ascent = surfaceWindow->Ascent(font) - surfaceWindow->InternalLeading(font); - - // For each line... - // Draw the definition in three parts: before highlight, highlighted, after highlight - int ytext = rcClient.top + ascent + 1; - rcClient.bottom = ytext + surfaceWindow->Descent(font) + 1; - char *chunkVal = val; - bool moreChunks = true; - int maxWidth = 0; - while (moreChunks) { - char *chunkEnd = strchr(chunkVal, '\n'); - if (chunkEnd == NULL) { - chunkEnd = chunkVal + strlen(chunkVal); - moreChunks = false; - } - int chunkOffset = chunkVal - val; - int chunkLength = chunkEnd - chunkVal; - int chunkEndOffset = chunkOffset + chunkLength; - int thisStartHighlight = Platform::Maximum(startHighlight, chunkOffset); - thisStartHighlight = Platform::Minimum(thisStartHighlight, chunkEndOffset); - thisStartHighlight -= chunkOffset; - int thisEndHighlight = Platform::Maximum(endHighlight, chunkOffset); - thisEndHighlight = Platform::Minimum(thisEndHighlight, chunkEndOffset); - thisEndHighlight -= chunkOffset; - rcClient.top = ytext - ascent - 1; - - int x = insetX; // start each line at this inset - - DrawChunk(surfaceWindow, x, chunkVal, 0, thisStartHighlight, - ytext, rcClient, false, draw); - DrawChunk(surfaceWindow, x, chunkVal, thisStartHighlight, thisEndHighlight, - ytext, rcClient, true, draw); - DrawChunk(surfaceWindow, x, chunkVal, thisEndHighlight, chunkLength, - ytext, rcClient, false, draw); - - chunkVal = chunkEnd + 1; - ytext += lineHeight; - rcClient.bottom += lineHeight; - maxWidth = Platform::Maximum(maxWidth, x); - } - return maxWidth; -} - -void CallTip::PaintCT(Surface *surfaceWindow) { - if (!val) - return; - PRectangle rcClientPos = wCallTip.GetClientPosition(); - PRectangle rcClientSize(0, 0, rcClientPos.right - rcClientPos.left, - rcClientPos.bottom - rcClientPos.top); - PRectangle rcClient(1, 1, rcClientSize.right - 1, rcClientSize.bottom - 1); - - surfaceWindow->FillRectangle(rcClient, colourBG.allocated); - - offsetMain = insetX; // initial alignment assuming no arrows - PaintContents(surfaceWindow, true); - - // Draw a raised border around the edges of the window - surfaceWindow->MoveTo(0, rcClientSize.bottom - 1); - surfaceWindow->PenColour(colourShade.allocated); - surfaceWindow->LineTo(rcClientSize.right - 1, rcClientSize.bottom - 1); - surfaceWindow->LineTo(rcClientSize.right - 1, 0); - surfaceWindow->PenColour(colourLight.allocated); - surfaceWindow->LineTo(0, 0); - surfaceWindow->LineTo(0, rcClientSize.bottom - 1); -} - -void CallTip::MouseClick(Point pt) { - clickPlace = 0; - if (rectUp.Contains(pt)) - clickPlace = 1; - if (rectDown.Contains(pt)) - clickPlace = 2; -} - -PRectangle CallTip::CallTipStart(int pos, Point pt, const char *defn, - const char *faceName, int size, - int codePage_, int characterSet, Window &wParent) { - clickPlace = 0; - if (val) - delete []val; - val = new char[strlen(defn) + 1]; - if (!val) - return PRectangle(); - strcpy(val, defn); - codePage = codePage_; - Surface *surfaceMeasure = Surface::Allocate(); - if (!surfaceMeasure) - return PRectangle(); - surfaceMeasure->Init(wParent.GetID()); - surfaceMeasure->SetUnicodeMode(SC_CP_UTF8 == codePage); - surfaceMeasure->SetDBCSMode(codePage); - startHighlight = 0; - endHighlight = 0; - inCallTipMode = true; - posStartCallTip = pos; - int deviceHeight = surfaceMeasure->DeviceHeightFont(size); - font.Create(faceName, characterSet, deviceHeight, false, false); - // Look for multiple lines in the text - // Only support \n here - simply means container must avoid \r! - int numLines = 1; - const char *newline; - const char *look = val; - rectUp = PRectangle(0,0,0,0); - rectDown = PRectangle(0,0,0,0); - offsetMain = insetX; // changed to right edge of any arrows - int width = PaintContents(surfaceMeasure, false) + insetX; - while ((newline = strchr(look, '\n')) != NULL) { - look = newline + 1; - numLines++; - } - lineHeight = surfaceMeasure->Height(font); - - // Extra line for border and an empty line at top and bottom. The returned - // rectangle is aligned to the right edge of the last arrow encountered in - // the tip text, else to the tip text left edge. - int height = lineHeight * numLines - surfaceMeasure->InternalLeading(font) + 2 + 2; - delete surfaceMeasure; - return PRectangle(pt.x - offsetMain, pt.y + 1, pt.x + width - offsetMain, pt.y + 1 + height); -} - -void CallTip::CallTipCancel() { - inCallTipMode = false; - if (wCallTip.Created()) { - wCallTip.Destroy(); - } -} - -void CallTip::SetHighlight(int start, int end) { - // Avoid flashing by checking something has really changed - if ((start != startHighlight) || (end != endHighlight)) { - startHighlight = start; - endHighlight = end; - if (wCallTip.Created()) { - wCallTip.InvalidateAll(); - } - } -} - -// Set the tab size (sizes > 0 enable the use of tabs). This also enables the -// use of the STYLE_CALLTIP. -void CallTip::SetTabSize(int tabSz) { - tabSize = tabSz; - useStyleCallTip = true; -} - -// It might be better to have two access functions for this and to use -// them for all settings of colours. -void CallTip::SetForeBack(const ColourPair &fore, const ColourPair &back) { - colourBG = back; - colourUnSel = fore; -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CallTip.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CallTip.h deleted file mode 100644 index 9848a10af9..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CallTip.h +++ /dev/null @@ -1,79 +0,0 @@ -// Scintilla source code edit control -/** @file CallTip.h - ** Interface to the call tip control. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CALLTIP_H -#define CALLTIP_H - -/** - */ -class CallTip { - int startHighlight; // character offset to start and... - int endHighlight; // ...end of highlighted text - char *val; - Font font; - PRectangle rectUp; // rectangle of last up angle in the tip - PRectangle rectDown; // rectangle of last down arrow in the tip - int lineHeight; // vertical line spacing - int offsetMain; // The alignment point of the call tip - int tabSize; // Tab size in pixels, <=0 no TAB expand - bool useStyleCallTip; // if true, STYLE_CALLTIP should be used - - // Private so CallTip objects can not be copied - CallTip(const CallTip &) {} - CallTip &operator=(const CallTip &) { return *this; } - void DrawChunk(Surface *surface, int &x, const char *s, - int posStart, int posEnd, int ytext, PRectangle rcClient, - bool highlight, bool draw); - int PaintContents(Surface *surfaceWindow, bool draw); - bool IsTabCharacter(char c); - int NextTabPos(int x); - -public: - Window wCallTip; - Window wDraw; - bool inCallTipMode; - int posStartCallTip; - ColourPair colourBG; - ColourPair colourUnSel; - ColourPair colourSel; - ColourPair colourShade; - ColourPair colourLight; - int codePage; - int clickPlace; - - CallTip(); - ~CallTip(); - - /// Claim or accept palette entries for the colours required to paint a calltip. - void RefreshColourPalette(Palette &pal, bool want); - - void PaintCT(Surface *surfaceWindow); - - void MouseClick(Point pt); - - /// Setup the calltip and return a rectangle of the area required. - PRectangle CallTipStart(int pos, Point pt, const char *defn, - const char *faceName, int size, int codePage_, - int characterSet, Window &wParent); - - void CallTipCancel(); - - /// Set a range of characters to be displayed in a highlight style. - /// Commonly used to highlight the current parameter. - void SetHighlight(int start, int end); - - /// Set the tab size in pixels for the call tip. 0 or -ve means no tab expand. - void SetTabSize(int tabSz); - - /// Used to determine which STYLE_xxxx to use for call tip information - bool UseStyleCallTip() const { return useStyleCallTip;} - - // Modify foreground and background colours - void SetForeBack(const ColourPair &fore, const ColourPair &back); -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CellBuffer.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CellBuffer.cxx deleted file mode 100644 index 1109a17fbe..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CellBuffer.cxx +++ /dev/null @@ -1,1120 +0,0 @@ -// Scintilla source code edit control -/** @file CellBuffer.cxx - ** Manages a buffer of cells. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include - -#include "Platform.h" - -#include "Scintilla.h" -#include "SVector.h" -#include "CellBuffer.h" - -MarkerHandleSet::MarkerHandleSet() { - root = 0; -} - -MarkerHandleSet::~MarkerHandleSet() { - MarkerHandleNumber *mhn = root; - while (mhn) { - MarkerHandleNumber *mhnToFree = mhn; - mhn = mhn->next; - delete mhnToFree; - } - root = 0; -} - -int MarkerHandleSet::Length() { - int c = 0; - MarkerHandleNumber *mhn = root; - while (mhn) { - c++; - mhn = mhn->next; - } - return c; -} - -int MarkerHandleSet::NumberFromHandle(int handle) { - MarkerHandleNumber *mhn = root; - while (mhn) { - if (mhn->handle == handle) { - return mhn->number; - } - mhn = mhn->next; - } - return - 1; -} - -int MarkerHandleSet::MarkValue() { - unsigned int m = 0; - MarkerHandleNumber *mhn = root; - while (mhn) { - m |= (1 << mhn->number); - mhn = mhn->next; - } - return m; -} - -bool MarkerHandleSet::Contains(int handle) { - MarkerHandleNumber *mhn = root; - while (mhn) { - if (mhn->handle == handle) { - return true; - } - mhn = mhn->next; - } - return false; -} - -bool MarkerHandleSet::InsertHandle(int handle, int markerNum) { - MarkerHandleNumber *mhn = new MarkerHandleNumber; - if (!mhn) - return false; - mhn->handle = handle; - mhn->number = markerNum; - mhn->next = root; - root = mhn; - return true; -} - -void MarkerHandleSet::RemoveHandle(int handle) { - MarkerHandleNumber **pmhn = &root; - while (*pmhn) { - MarkerHandleNumber *mhn = *pmhn; - if (mhn->handle == handle) { - *pmhn = mhn->next; - delete mhn; - return ; - } - pmhn = &((*pmhn)->next); - } -} - -bool MarkerHandleSet::RemoveNumber(int markerNum) { - bool performedDeletion = false; - MarkerHandleNumber **pmhn = &root; - while (*pmhn) { - MarkerHandleNumber *mhn = *pmhn; - if (mhn->number == markerNum) { - *pmhn = mhn->next; - delete mhn; - performedDeletion = true; - } else { - pmhn = &((*pmhn)->next); - } - } - return performedDeletion; -} - -void MarkerHandleSet::CombineWith(MarkerHandleSet *other) { - MarkerHandleNumber **pmhn = &root; - while (*pmhn) { - pmhn = &((*pmhn)->next); - } - *pmhn = other->root; - other->root = 0; -} - -LineVector::LineVector() { - linesData = 0; - lines = 0; - size = 0; - levels = 0; - sizeLevels = 0; - handleCurrent = 1; - growSize = 1000; - - Init(); -} - -LineVector::~LineVector() { - for (int line = 0; line < lines; line++) { - delete linesData[line].handleSet; - linesData[line].handleSet = 0; - } - delete []linesData; - linesData = 0; - delete []levels; - levels = 0; -} - -void LineVector::Init() { - for (int line = 0; line < lines; line++) { - delete linesData[line].handleSet; - linesData[line].handleSet = 0; - } - delete []linesData; - linesData = new LineData[static_cast(growSize)]; - size = growSize; - lines = 1; - delete []levels; - levels = 0; - sizeLevels = 0; -} - -void LineVector::Expand(int sizeNew) { - LineData *linesDataNew = new LineData[sizeNew]; - if (linesDataNew) { - for (int i = 0; i < size; i++) - linesDataNew[i] = linesData[i]; - // Do not delete handleSets here as they are transferred to new linesData - delete []linesData; - linesData = linesDataNew; - size = sizeNew; - } else { - Platform::DebugPrintf("No memory available\n"); - // TODO: Blow up - } - -} - -void LineVector::ExpandLevels(int sizeNew) { - if (sizeNew == -1) - sizeNew = size; - int *levelsNew = new int[sizeNew]; - if (levelsNew) { - int i = 0; - for (; i < sizeLevels; i++) - levelsNew[i] = levels[i]; - for (; i < sizeNew; i++) - levelsNew[i] = SC_FOLDLEVELBASE; - delete []levels; - levels = levelsNew; - sizeLevels = sizeNew; - } else { - Platform::DebugPrintf("No memory available\n"); - // TODO: Blow up - } - -} - -void LineVector::ClearLevels() { - delete []levels; - levels = 0; - sizeLevels = 0; -} - -void LineVector::InsertValue(int pos, int value) { - //Platform::DebugPrintf("InsertValue[%d] = %d\n", pos, value); - if ((lines + 2) >= size) { - if (growSize * 6 < size) - growSize *= 2; - Expand(size + growSize); - if (levels) { - ExpandLevels(size + growSize); - } - } - lines++; - for (int i = lines; i > pos; i--) { - linesData[i] = linesData[i - 1]; - } - linesData[pos].startPosition = value; - linesData[pos].handleSet = 0; - if (levels) { - for (int j = lines; j > pos; j--) { - levels[j] = levels[j - 1]; - } - if (pos == 0) { - levels[pos] = SC_FOLDLEVELBASE; - } else if (pos == (lines - 1)) { // Last line will not be a folder - levels[pos] = SC_FOLDLEVELBASE; - } else { - levels[pos] = levels[pos - 1]; - } - } -} - -void LineVector::SetValue(int pos, int value) { - //Platform::DebugPrintf("SetValue[%d] = %d\n", pos, value); - if ((pos + 2) >= size) { - //Platform::DebugPrintf("Resize %d %d\n", size,pos); - Expand(pos + growSize); - //Platform::DebugPrintf("end Resize %d %d\n", size,pos); - lines = pos; - if (levels) { - ExpandLevels(pos + growSize); - } - } - linesData[pos].startPosition = value; -} - -void LineVector::Remove(int pos) { - //Platform::DebugPrintf("Remove %d\n", pos); - // Retain the markers from the deleted line by oring them into the previous line - if (pos > 0) { - MergeMarkers(pos - 1); - } - for (int i = pos; i < lines; i++) { - linesData[i] = linesData[i + 1]; - } - if (levels) { - // Move up following lines but merge header flag from this line - // to line before to avoid a temporary disappearence causing expansion. - int firstHeader = levels[pos] & SC_FOLDLEVELHEADERFLAG; - for (int j = pos; j < lines; j++) { - levels[j] = levels[j + 1]; - } - if (pos > 0) - levels[pos-1] |= firstHeader; - } - lines--; -} - -int LineVector::LineFromPosition(int pos) { - //Platform::DebugPrintf("LineFromPostion %d lines=%d end = %d\n", pos, lines, linesData[lines].startPosition); - if (lines == 0) - return 0; - //Platform::DebugPrintf("LineFromPosition %d\n", pos); - if (pos >= linesData[lines].startPosition) - return lines - 1; - int lower = 0; - int upper = lines; - do { - int middle = (upper + lower + 1) / 2; // Round high - if (pos < linesData[middle].startPosition) { - upper = middle - 1; - } else { - lower = middle; - } - } while (lower < upper); - //Platform::DebugPrintf("LineFromPostion %d %d %d\n", pos, lower, linesData[lower].startPosition, linesData[lower > 1 ? lower - 1 : 0].startPosition); - return lower; -} - -int LineVector::AddMark(int line, int markerNum) { - handleCurrent++; - if (!linesData[line].handleSet) { - // Need new structure to hold marker handle - linesData[line].handleSet = new MarkerHandleSet; - if (!linesData[line].handleSet) - return - 1; - } - linesData[line].handleSet->InsertHandle(handleCurrent, markerNum); - - return handleCurrent; -} - -void LineVector::MergeMarkers(int pos) { - if (linesData[pos + 1].handleSet != NULL) { - if (linesData[pos].handleSet == NULL ) - linesData[pos].handleSet = new MarkerHandleSet; - linesData[pos].handleSet->CombineWith(linesData[pos + 1].handleSet); - delete linesData[pos + 1].handleSet; - linesData[pos + 1].handleSet = NULL; - } -} - -void LineVector::DeleteMark(int line, int markerNum, bool all) { - if (linesData[line].handleSet) { - if (markerNum == -1) { - delete linesData[line].handleSet; - linesData[line].handleSet = 0; - } else { - bool performedDeletion = - linesData[line].handleSet->RemoveNumber(markerNum); - while (all && performedDeletion) { - performedDeletion = - linesData[line].handleSet->RemoveNumber(markerNum); - } - if (linesData[line].handleSet->Length() == 0) { - delete linesData[line].handleSet; - linesData[line].handleSet = 0; - } - } - } -} - -void LineVector::DeleteMarkFromHandle(int markerHandle) { - int line = LineFromHandle(markerHandle); - if (line >= 0) { - linesData[line].handleSet->RemoveHandle(markerHandle); - if (linesData[line].handleSet->Length() == 0) { - delete linesData[line].handleSet; - linesData[line].handleSet = 0; - } - } -} - -int LineVector::LineFromHandle(int markerHandle) { - for (int line = 0; line < lines; line++) { - if (linesData[line].handleSet) { - if (linesData[line].handleSet->Contains(markerHandle)) { - return line; - } - } - } - return - 1; -} - -Action::Action() { - at = startAction; - position = 0; - data = 0; - lenData = 0; -} - -Action::~Action() { - Destroy(); -} - -void Action::Create(actionType at_, int position_, char *data_, int lenData_, bool mayCoalesce_) { - delete []data; - position = position_; - at = at_; - data = data_; - lenData = lenData_; - mayCoalesce = mayCoalesce_; -} - -void Action::Destroy() { - delete []data; - data = 0; -} - -void Action::Grab(Action *source) { - delete []data; - - position = source->position; - at = source->at; - data = source->data; - lenData = source->lenData; - mayCoalesce = source->mayCoalesce; - - // Ownership of source data transferred to this - source->position = 0; - source->at = startAction; - source->data = 0; - source->lenData = 0; - source->mayCoalesce = true; -} - -// The undo history stores a sequence of user operations that represent the user's view of the -// commands executed on the text. -// Each user operation contains a sequence of text insertion and text deletion actions. -// All the user operations are stored in a list of individual actions with 'start' actions used -// as delimiters between user operations. -// Initially there is one start action in the history. -// As each action is performed, it is recorded in the history. The action may either become -// part of the current user operation or may start a new user operation. If it is to be part of the -// current operation, then it overwrites the current last action. If it is to be part of a new -// operation, it is appended after the current last action. -// After writing the new action, a new start action is appended at the end of the history. -// The decision of whether to start a new user operation is based upon two factors. If a -// compound operation has been explicitly started by calling BeginUndoAction and no matching -// EndUndoAction (these calls nest) has been called, then the action is coalesced into the current -// operation. If there is no outstanding BeginUndoAction call then a new operation is started -// unless it looks as if the new action is caused by the user typing or deleting a stream of text. -// Sequences that look like typing or deletion are coalesced into a single user operation. - -UndoHistory::UndoHistory() { - - lenActions = 100; - actions = new Action[lenActions]; - maxAction = 0; - currentAction = 0; - undoSequenceDepth = 0; - savePoint = 0; - - actions[currentAction].Create(startAction); -} - -UndoHistory::~UndoHistory() { - delete []actions; - actions = 0; -} - -void UndoHistory::EnsureUndoRoom() { - // Have to test that there is room for 2 more actions in the array - // as two actions may be created by the calling function - if (currentAction >= (lenActions - 2)) { - // Run out of undo nodes so extend the array - int lenActionsNew = lenActions * 2; - Action *actionsNew = new Action[lenActionsNew]; - if (!actionsNew) - return ; - for (int act = 0; act <= currentAction; act++) - actionsNew[act].Grab(&actions[act]); - delete []actions; - lenActions = lenActionsNew; - actions = actionsNew; - } -} - -void UndoHistory::AppendAction(actionType at, int position, char *data, int lengthData) { - EnsureUndoRoom(); - //Platform::DebugPrintf("%% %d action %d %d %d\n", at, position, lengthData, currentAction); - //Platform::DebugPrintf("^ %d action %d %d\n", actions[currentAction - 1].at, - // actions[currentAction - 1].position, actions[currentAction - 1].lenData); - if (currentAction < savePoint) { - savePoint = -1; - } - if (currentAction >= 1) { - if (0 == undoSequenceDepth) { - // Top level actions may not always be coalesced - Action &actPrevious = actions[currentAction - 1]; - // See if current action can be coalesced into previous action - // Will work if both are inserts or deletes and position is same - if (at != actPrevious.at) { - currentAction++; - } else if (currentAction == savePoint) { - currentAction++; - } else if ((at == insertAction) && - (position != (actPrevious.position + actPrevious.lenData))) { - // Insertions must be immediately after to coalesce - currentAction++; - } else if (!actions[currentAction].mayCoalesce) { - // Not allowed to coalesce if this set - currentAction++; - } else if (at == removeAction) { - if ((lengthData == 1) || (lengthData == 2)){ - if ((position + lengthData) == actPrevious.position) { - ; // Backspace -> OK - } else if (position == actPrevious.position) { - ; // Delete -> OK - } else { - // Removals must be at same position to coalesce - currentAction++; - } - } else { - // Removals must be of one character to coalesce - currentAction++; - } - } else { - //Platform::DebugPrintf("action coalesced\n"); - } - - } else { - // Actions not at top level are always coalesced unless this is after return to top level - if (!actions[currentAction].mayCoalesce) - currentAction++; - } - } else { - currentAction++; - } - actions[currentAction].Create(at, position, data, lengthData); - currentAction++; - actions[currentAction].Create(startAction); - maxAction = currentAction; -} - -void UndoHistory::BeginUndoAction() { - EnsureUndoRoom(); - if (undoSequenceDepth == 0) { - if (actions[currentAction].at != startAction) { - currentAction++; - actions[currentAction].Create(startAction); - maxAction = currentAction; - } - actions[currentAction].mayCoalesce = false; - } - undoSequenceDepth++; -} - -void UndoHistory::EndUndoAction() { - EnsureUndoRoom(); - undoSequenceDepth--; - if (0 == undoSequenceDepth) { - if (actions[currentAction].at != startAction) { - currentAction++; - actions[currentAction].Create(startAction); - maxAction = currentAction; - } - actions[currentAction].mayCoalesce = false; - } -} - -void UndoHistory::DropUndoSequence() { - undoSequenceDepth = 0; -} - -void UndoHistory::DeleteUndoHistory() { - for (int i = 1; i < maxAction; i++) - actions[i].Destroy(); - maxAction = 0; - currentAction = 0; - actions[currentAction].Create(startAction); - savePoint = 0; -} - -void UndoHistory::SetSavePoint() { - savePoint = currentAction; -} - -bool UndoHistory::IsSavePoint() const { - return savePoint == currentAction; -} - -bool UndoHistory::CanUndo() const { - return (currentAction > 0) && (maxAction > 0); -} - -int UndoHistory::StartUndo() { - // Drop any trailing startAction - if (actions[currentAction].at == startAction && currentAction > 0) - currentAction--; - - // Count the steps in this action - int act = currentAction; - while (actions[act].at != startAction && act > 0) { - act--; - } - return currentAction - act; -} - -const Action &UndoHistory::GetUndoStep() const { - return actions[currentAction]; -} - -void UndoHistory::CompletedUndoStep() { - currentAction--; -} - -bool UndoHistory::CanRedo() const { - return maxAction > currentAction; -} - -int UndoHistory::StartRedo() { - // Drop any leading startAction - if (actions[currentAction].at == startAction && currentAction < maxAction) - currentAction++; - - // Count the steps in this action - int act = currentAction; - while (actions[act].at != startAction && act < maxAction) { - act++; - } - return act - currentAction; -} - -const Action &UndoHistory::GetRedoStep() const { - return actions[currentAction]; -} - -void UndoHistory::CompletedRedoStep() { - currentAction++; -} - -CellBuffer::CellBuffer(int initialLength) { - body = new char[initialLength]; - size = initialLength; - length = 0; - part1len = 0; - gaplen = initialLength; - part2body = body + gaplen; - readOnly = false; - collectingUndo = true; - growSize = 4000; -} - -CellBuffer::~CellBuffer() { - delete []body; - body = 0; -} - -void CellBuffer::GapTo(int position) { - if (position == part1len) - return ; - if (position < part1len) { - int diff = part1len - position; - //Platform::DebugPrintf("Move gap backwards to %d diff = %d part1len=%d length=%d \n", position,diff, part1len, length); - for (int i = 0; i < diff; i++) - body[part1len + gaplen - i - 1] = body[part1len - i - 1]; - } else { // position > part1len - int diff = position - part1len; - //Platform::DebugPrintf("Move gap forwards to %d diff =%d\n", position,diff); - for (int i = 0; i < diff; i++) - body[part1len + i] = body[part1len + gaplen + i]; - } - part1len = position; - part2body = body + gaplen; -} - -void CellBuffer::RoomFor(int insertionLength) { - //Platform::DebugPrintf("need room %d %d\n", gaplen, insertionLength); - if (gaplen <= insertionLength) { - //Platform::DebugPrintf("need room %d %d\n", gaplen, insertionLength); - if (growSize * 6 < size) - growSize *= 2; - int newSize = size + insertionLength + growSize; - Allocate(newSize); - } -} - -// To make it easier to write code that uses ByteAt, a position outside the range of the buffer -// can be retrieved. All characters outside the range have the value '\0'. -char CellBuffer::ByteAt(int position) { - if (position < part1len) { - if (position < 0) { - return '\0'; - } else { - return body[position]; - } - } else { - if (position >= length) { - return '\0'; - } else { - return part2body[position]; - } - } -} - -void CellBuffer::SetByteAt(int position, char ch) { - - if (position < 0) { - //Platform::DebugPrintf("Bad position %d\n",position); - return ; - } - if (position >= length + 11) { - Platform::DebugPrintf("Very Bad position %d of %d\n", position, length); - //exit(2); - return ; - } - if (position >= length) { - //Platform::DebugPrintf("Bad position %d of %d\n",position,length); - return ; - } - - if (position < part1len) { - body[position] = ch; - } else { - part2body[position] = ch; - } -} - -char CellBuffer::CharAt(int position) { - return ByteAt(position*2); -} - -void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) { - if (lengthRetrieve < 0) - return ; - if (position < 0) - return ; - int bytePos = position * 2; - if ((bytePos + lengthRetrieve * 2) > length) { - Platform::DebugPrintf("Bad GetCharRange %d for %d of %d\n", bytePos, - lengthRetrieve, length); - return ; - } - GapTo(0); // Move the buffer so its easy to subscript into it - char *pb = part2body + bytePos; - while (lengthRetrieve--) { - *buffer++ = *pb; - pb += 2; - } -} - -char CellBuffer::StyleAt(int position) { - return ByteAt(position*2 + 1); -} - -const char *CellBuffer::InsertString(int position, char *s, int insertLength) { - char *data = 0; - // InsertString and DeleteChars are the bottleneck though which all changes occur - if (!readOnly) { - if (collectingUndo) { - // Save into the undo/redo stack, but only the characters - not the formatting - // This takes up about half load time - data = new char[insertLength / 2]; - for (int i = 0; i < insertLength / 2; i++) { - data[i] = s[i * 2]; - } - uh.AppendAction(insertAction, position / 2, data, insertLength / 2); - } - - BasicInsertString(position, s, insertLength); - } - return data; -} - -bool CellBuffer::SetStyleAt(int position, char style, char mask) { - style &= mask; - char curVal = ByteAt(position * 2 + 1); - if ((curVal & mask) != style) { - SetByteAt(position*2 + 1, static_cast((curVal & ~mask) | style)); - return true; - } else { - return false; - } -} - -bool CellBuffer::SetStyleFor(int position, int lengthStyle, char style, char mask) { - int bytePos = position * 2 + 1; - bool changed = false; - PLATFORM_ASSERT(lengthStyle == 0 || - (lengthStyle > 0 && lengthStyle + position < length)); - while (lengthStyle--) { - char curVal = ByteAt(bytePos); - if ((curVal & mask) != style) { - SetByteAt(bytePos, static_cast((curVal & ~mask) | style)); - changed = true; - } - bytePos += 2; - } - return changed; -} - -const char *CellBuffer::DeleteChars(int position, int deleteLength) { - // InsertString and DeleteChars are the bottleneck though which all changes occur - PLATFORM_ASSERT(deleteLength > 0); - char *data = 0; - if (!readOnly) { - if (collectingUndo) { - // Save into the undo/redo stack, but only the characters - not the formatting - data = new char[deleteLength / 2]; - for (int i = 0; i < deleteLength / 2; i++) { - data[i] = ByteAt(position + i * 2); - } - uh.AppendAction(removeAction, position / 2, data, deleteLength / 2); - } - - BasicDeleteChars(position, deleteLength); - } - return data; -} - -int CellBuffer::ByteLength() { - return length; -} - -int CellBuffer::Length() { - return ByteLength() / 2; -} - -void CellBuffer::Allocate(int newSize) { - if (newSize > length) { - GapTo(length); - char *newBody = new char[newSize]; - memcpy(newBody, body, length); - delete []body; - body = newBody; - gaplen += newSize - size; - part2body = body + gaplen; - size = newSize; - } -} - -int CellBuffer::Lines() { - //Platform::DebugPrintf("Lines = %d\n", lv.lines); - return lv.lines; -} - -int CellBuffer::LineStart(int line) { - if (line < 0) - return 0; - else if (line > lv.lines) - return Length(); - else - return lv.linesData[line].startPosition; -} - -bool CellBuffer::IsReadOnly() { - return readOnly; -} - -void CellBuffer::SetReadOnly(bool set) { - readOnly = set; -} - -void CellBuffer::SetSavePoint() { - uh.SetSavePoint(); -} - -bool CellBuffer::IsSavePoint() { - return uh.IsSavePoint(); -} - -int CellBuffer::AddMark(int line, int markerNum) { - if ((line >= 0) && (line < lv.lines)) { - return lv.AddMark(line, markerNum); - } - return - 1; -} - -void CellBuffer::DeleteMark(int line, int markerNum) { - if ((line >= 0) && (line < lv.lines)) { - lv.DeleteMark(line, markerNum, false); - } -} - -void CellBuffer::DeleteMarkFromHandle(int markerHandle) { - lv.DeleteMarkFromHandle(markerHandle); -} - -int CellBuffer::GetMark(int line) { - if ((line >= 0) && (line < lv.lines) && (lv.linesData[line].handleSet)) - return lv.linesData[line].handleSet->MarkValue(); - return 0; -} - -void CellBuffer::DeleteAllMarks(int markerNum) { - for (int line = 0; line < lv.lines; line++) { - lv.DeleteMark(line, markerNum, true); - } -} - -int CellBuffer::LineFromHandle(int markerHandle) { - return lv.LineFromHandle(markerHandle); -} - -// Without undo - -void CellBuffer::BasicInsertString(int position, char *s, int insertLength) { - //Platform::DebugPrintf("Inserting at %d for %d\n", position, insertLength); - if (insertLength == 0) - return ; - PLATFORM_ASSERT(insertLength > 0); - RoomFor(insertLength); - GapTo(position); - - memcpy(body + part1len, s, insertLength); - length += insertLength; - part1len += insertLength; - gaplen -= insertLength; - part2body = body + gaplen; - - int lineInsert = lv.LineFromPosition(position / 2) + 1; - // Point all the lines after the insertion point further along in the buffer - for (int lineAfter = lineInsert; lineAfter <= lv.lines; lineAfter++) { - lv.linesData[lineAfter].startPosition += insertLength / 2; - } - char chPrev = ' '; - if ((position - 2) >= 0) - chPrev = ByteAt(position - 2); - char chAfter = ' '; - if ((position + insertLength) < length) - chAfter = ByteAt(position + insertLength); - if (chPrev == '\r' && chAfter == '\n') { - //Platform::DebugPrintf("Splitting a crlf pair at %d\n", lineInsert); - // Splitting up a crlf pair at position - lv.InsertValue(lineInsert, position / 2); - lineInsert++; - } - char ch = ' '; - for (int i = 0; i < insertLength; i += 2) { - ch = s[i]; - if (ch == '\r') { - //Platform::DebugPrintf("Inserting cr at %d\n", lineInsert); - lv.InsertValue(lineInsert, (position + i) / 2 + 1); - lineInsert++; - } else if (ch == '\n') { - if (chPrev == '\r') { - //Platform::DebugPrintf("Patching cr before lf at %d\n", lineInsert-1); - // Patch up what was end of line - lv.SetValue(lineInsert - 1, (position + i) / 2 + 1); - } else { - //Platform::DebugPrintf("Inserting lf at %d\n", lineInsert); - lv.InsertValue(lineInsert, (position + i) / 2 + 1); - lineInsert++; - } - } - chPrev = ch; - } - // Joining two lines where last insertion is cr and following text starts with lf - if (chAfter == '\n') { - if (ch == '\r') { - //Platform::DebugPrintf("Joining cr before lf at %d\n", lineInsert-1); - // End of line already in buffer so drop the newly created one - lv.Remove(lineInsert - 1); - } - } -} - -void CellBuffer::BasicDeleteChars(int position, int deleteLength) { - //Platform::DebugPrintf("Deleting at %d for %d\n", position, deleteLength); - if (deleteLength == 0) - return ; - - if ((position == 0) && (deleteLength == length)) { - // If whole buffer is being deleted, faster to reinitialise lines data - // than to delete each line. - //printf("Whole buffer being deleted\n"); - lv.Init(); - } else { - // Have to fix up line positions before doing deletion as looking at text in buffer - // to work out which lines have been removed - - int lineRemove = lv.LineFromPosition(position / 2) + 1; - // Point all the lines after the insertion point further along in the buffer - for (int lineAfter = lineRemove; lineAfter <= lv.lines; lineAfter++) { - lv.linesData[lineAfter].startPosition -= deleteLength / 2; - } - char chPrev = ' '; - if (position >= 2) - chPrev = ByteAt(position - 2); - char chBefore = chPrev; - char chNext = ' '; - if (position < length) - chNext = ByteAt(position); - bool ignoreNL = false; - if (chPrev == '\r' && chNext == '\n') { - //Platform::DebugPrintf("Deleting lf after cr, move line end to cr at %d\n", lineRemove); - // Move back one - lv.SetValue(lineRemove, position / 2); - lineRemove++; - ignoreNL = true; // First \n is not real deletion - } - - char ch = chNext; - for (int i = 0; i < deleteLength; i += 2) { - chNext = ' '; - if ((position + i + 2) < length) - chNext = ByteAt(position + i + 2); - //Platform::DebugPrintf("Deleting %d %x\n", i, ch); - if (ch == '\r') { - if (chNext != '\n') { - //Platform::DebugPrintf("Removing cr end of line\n"); - lv.Remove(lineRemove); - } - } else if (ch == '\n') { - if (ignoreNL) { - ignoreNL = false; // Further \n are real deletions - } else { - //Platform::DebugPrintf("Removing lf end of line\n"); - lv.Remove(lineRemove); - } - } - - ch = chNext; - } - // May have to fix up end if last deletion causes cr to be next to lf - // or removes one of a crlf pair - char chAfter = ' '; - if ((position + deleteLength) < length) - chAfter = ByteAt(position + deleteLength); - if (chBefore == '\r' && chAfter == '\n') { - //d.printf("Joining cr before lf at %d\n", lineRemove); - // Using lineRemove-1 as cr ended line before start of deletion - lv.Remove(lineRemove - 1); - lv.SetValue(lineRemove - 1, position / 2 + 1); - } - } - GapTo(position); - length -= deleteLength; - gaplen += deleteLength; - part2body = body + gaplen; -} - -bool CellBuffer::SetUndoCollection(bool collectUndo) { - collectingUndo = collectUndo; - uh.DropUndoSequence(); - return collectingUndo; -} - -bool CellBuffer::IsCollectingUndo() { - return collectingUndo; -} - -void CellBuffer::BeginUndoAction() { - uh.BeginUndoAction(); -} - -void CellBuffer::EndUndoAction() { - uh.EndUndoAction(); -} - -void CellBuffer::DeleteUndoHistory() { - uh.DeleteUndoHistory(); -} - -bool CellBuffer::CanUndo() { - return uh.CanUndo(); -} - -int CellBuffer::StartUndo() { - return uh.StartUndo(); -} - -const Action &CellBuffer::GetUndoStep() const { - return uh.GetUndoStep(); -} - -void CellBuffer::PerformUndoStep() { - const Action &actionStep = uh.GetUndoStep(); - if (actionStep.at == insertAction) { - BasicDeleteChars(actionStep.position*2, actionStep.lenData*2); - } else if (actionStep.at == removeAction) { - char *styledData = new char[actionStep.lenData * 2]; - for (int i = 0; i < actionStep.lenData; i++) { - styledData[i*2] = actionStep.data[i]; - styledData[i*2 + 1] = 0; - } - BasicInsertString(actionStep.position*2, styledData, actionStep.lenData*2); - delete []styledData; - } - uh.CompletedUndoStep(); -} - -bool CellBuffer::CanRedo() { - return uh.CanRedo(); -} - -int CellBuffer::StartRedo() { - return uh.StartRedo(); -} - -const Action &CellBuffer::GetRedoStep() const { - return uh.GetRedoStep(); -} - -void CellBuffer::PerformRedoStep() { - const Action &actionStep = uh.GetRedoStep(); - if (actionStep.at == insertAction) { - char *styledData = new char[actionStep.lenData * 2]; - for (int i = 0; i < actionStep.lenData; i++) { - styledData[i*2] = actionStep.data[i]; - styledData[i*2 + 1] = 0; - } - BasicInsertString(actionStep.position*2, styledData, actionStep.lenData*2); - delete []styledData; - } else if (actionStep.at == removeAction) { - BasicDeleteChars(actionStep.position*2, actionStep.lenData*2); - } - uh.CompletedRedoStep(); -} - -int CellBuffer::SetLineState(int line, int state) { - int stateOld = lineStates[line]; - lineStates[line] = state; - return stateOld; -} - -int CellBuffer::GetLineState(int line) { - return lineStates[line]; -} - -int CellBuffer::GetMaxLineState() { - return lineStates.Length(); -} - -int CellBuffer::SetLevel(int line, int level) { - int prev = 0; - if ((line >= 0) && (line < lv.lines)) { - if (!lv.levels) { - lv.ExpandLevels(); - } - prev = lv.levels[line]; - if (lv.levels[line] != level) { - lv.levels[line] = level; - } - } - return prev; -} - -int CellBuffer::GetLevel(int line) { - if (lv.levels && (line >= 0) && (line < lv.lines)) { - return lv.levels[line]; - } else { - return SC_FOLDLEVELBASE; - } -} - -void CellBuffer::ClearLevels() { - lv.ClearLevels(); -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CellBuffer.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CellBuffer.h deleted file mode 100644 index bb81fd5722..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CellBuffer.h +++ /dev/null @@ -1,250 +0,0 @@ -// Scintilla source code edit control -/** @file CellBuffer.h - ** Manages the text of the document. - **/ -// Copyright 1998-2004 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CELLBUFFER_H -#define CELLBUFFER_H - -/** - * This holds the marker identifier and the marker type to display. - * MarkerHandleNumbers are members of lists. - */ -struct MarkerHandleNumber { - int handle; - int number; - MarkerHandleNumber *next; -}; - -/** - * A marker handle set contains any number of MarkerHandleNumbers. - */ -class MarkerHandleSet { - MarkerHandleNumber *root; - -public: - MarkerHandleSet(); - ~MarkerHandleSet(); - int Length(); - int NumberFromHandle(int handle); - int MarkValue(); ///< Bit set of marker numbers. - bool Contains(int handle); - bool InsertHandle(int handle, int markerNum); - void RemoveHandle(int handle); - bool RemoveNumber(int markerNum); - void CombineWith(MarkerHandleSet *other); -}; - -/** - * Each line stores the starting position of the first character of the line in the cell buffer - * and potentially a marker handle set. Often a line will not have any attached markers. - */ -struct LineData { - int startPosition; - MarkerHandleSet *handleSet; - LineData() : startPosition(0), handleSet(0) { - } -}; - -/** - * The line vector contains information about each of the lines in a cell buffer. - */ -class LineVector { -public: - int growSize; - int lines; - LineData *linesData; - int size; - int *levels; - int sizeLevels; - - /// Handles are allocated sequentially and should never have to be reused as 32 bit ints are very big. - int handleCurrent; - - LineVector(); - ~LineVector(); - void Init(); - - void Expand(int sizeNew); - void ExpandLevels(int sizeNew=-1); - void ClearLevels(); - void InsertValue(int pos, int value); - void SetValue(int pos, int value); - void Remove(int pos); - int LineFromPosition(int pos); - - int AddMark(int line, int marker); - void MergeMarkers(int pos); - void DeleteMark(int line, int markerNum, bool all); - void DeleteMarkFromHandle(int markerHandle); - int LineFromHandle(int markerHandle); -}; - -enum actionType { insertAction, removeAction, startAction }; - -/** - * Actions are used to store all the information required to perform one undo/redo step. - */ -class Action { -public: - actionType at; - int position; - char *data; - int lenData; - bool mayCoalesce; - - Action(); - ~Action(); - void Create(actionType at_, int position_=0, char *data_=0, int lenData_=0, bool mayCoalesce_=true); - void Destroy(); - void Grab(Action *source); -}; - -/** - * - */ -class UndoHistory { - Action *actions; - int lenActions; - int maxAction; - int currentAction; - int undoSequenceDepth; - int savePoint; - - void EnsureUndoRoom(); - -public: - UndoHistory(); - ~UndoHistory(); - - void AppendAction(actionType at, int position, char *data, int length); - - void BeginUndoAction(); - void EndUndoAction(); - void DropUndoSequence(); - void DeleteUndoHistory(); - - /// The save point is a marker in the undo stack where the container has stated that - /// the buffer was saved. Undo and redo can move over the save point. - void SetSavePoint(); - bool IsSavePoint() const; - - /// To perform an undo, StartUndo is called to retrieve the number of steps, then UndoStep is - /// called that many times. Similarly for redo. - bool CanUndo() const; - int StartUndo(); - const Action &GetUndoStep() const; - void CompletedUndoStep(); - bool CanRedo() const; - int StartRedo(); - const Action &GetRedoStep() const; - void CompletedRedoStep(); -}; - -/** - * Holder for an expandable array of characters that supports undo and line markers. - * Based on article "Data Structures in a Bit-Mapped Text Editor" - * by Wilfred J. Hansen, Byte January 1987, page 183. - */ -class CellBuffer { -private: - char *body; ///< The cell buffer itself. - int size; ///< Allocated size of the buffer. - int length; ///< Total length of the data. - int part1len; ///< Length of the first part. - int gaplen; ///< Length of the gap between the two parts. - char *part2body; ///< The second part of the cell buffer. - ///< Doesn't point after the gap but set so that - ///< part2body[position] is consistent with body[position]. - bool readOnly; - int growSize; - - bool collectingUndo; - UndoHistory uh; - - LineVector lv; - - SVector lineStates; - - void GapTo(int position); - void RoomFor(int insertionLength); - - inline char ByteAt(int position); - void SetByteAt(int position, char ch); - -public: - - CellBuffer(int initialLength = 4000); - ~CellBuffer(); - - /// Retrieving positions outside the range of the buffer works and returns 0 - char CharAt(int position); - void GetCharRange(char *buffer, int position, int lengthRetrieve); - char StyleAt(int position); - - int ByteLength(); - int Length(); - void Allocate(int newSize); - int Lines(); - int LineStart(int line); - int LineFromPosition(int pos) { return lv.LineFromPosition(pos); } - const char *InsertString(int position, char *s, int insertLength); - - /// Setting styles for positions outside the range of the buffer is safe and has no effect. - /// @return true if the style of a character is changed. - bool SetStyleAt(int position, char style, char mask='\377'); - bool SetStyleFor(int position, int length, char style, char mask); - - const char *DeleteChars(int position, int deleteLength); - - bool IsReadOnly(); - void SetReadOnly(bool set); - - /// The save point is a marker in the undo stack where the container has stated that - /// the buffer was saved. Undo and redo can move over the save point. - void SetSavePoint(); - bool IsSavePoint(); - - /// Line marker functions - int AddMark(int line, int markerNum); - void DeleteMark(int line, int markerNum); - void DeleteMarkFromHandle(int markerHandle); - int GetMark(int line); - void DeleteAllMarks(int markerNum); - int LineFromHandle(int markerHandle); - - /// Actions without undo - void BasicInsertString(int position, char *s, int insertLength); - void BasicDeleteChars(int position, int deleteLength); - - bool SetUndoCollection(bool collectUndo); - bool IsCollectingUndo(); - void BeginUndoAction(); - void EndUndoAction(); - void DeleteUndoHistory(); - - /// To perform an undo, StartUndo is called to retrieve the number of steps, then UndoStep is - /// called that many times. Similarly for redo. - bool CanUndo(); - int StartUndo(); - const Action &GetUndoStep() const; - void PerformUndoStep(); - bool CanRedo(); - int StartRedo(); - const Action &GetRedoStep() const; - void PerformRedoStep(); - - int SetLineState(int line, int state); - int GetLineState(int line); - int GetMaxLineState(); - - int SetLevel(int line, int level); - int GetLevel(int line); - void ClearLevels(); -}; - -#define CELL_SIZE 2 - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CharClassify.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CharClassify.cxx deleted file mode 100644 index acab4b2295..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CharClassify.cxx +++ /dev/null @@ -1,43 +0,0 @@ -// Scintilla source code edit control -/** @file CharClassify.cxx - ** Character classifications used by Document and RESearch. - **/ -// Copyright 2006 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include - -#include "CharClassify.h" - -// Shut up annoying Visual C++ warnings: -#ifdef _MSC_VER -#pragma warning(disable: 4514) -#endif - -CharClassify::CharClassify() { - SetDefaultCharClasses(true); -} - -void CharClassify::SetDefaultCharClasses(bool includeWordClass) { - // Initialize all char classes to default values - for (int ch = 0; ch < 256; ch++) { - if (ch == '\r' || ch == '\n') - charClass[ch] = ccNewLine; - else if (ch < 0x20 || ch == ' ') - charClass[ch] = ccSpace; - else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_')) - charClass[ch] = ccWord; - else - charClass[ch] = ccPunctuation; - } -} - -void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) { - // Apply the newCharClass to the specifed chars - if (chars) { - while (*chars) { - charClass[*chars] = static_cast(newCharClass); - chars++; - } - } -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CharClassify.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CharClassify.h deleted file mode 100644 index 881d3a114b..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/CharClassify.h +++ /dev/null @@ -1,25 +0,0 @@ -// Scintilla source code edit control -/** @file CharClassify.h - ** Character classifications used by Document and RESearch. - **/ -// Copyright 2006 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CHARCLASSIFY_H -#define CHARCLASSIFY_H - -class CharClassify { -public: - CharClassify(); - - enum cc { ccSpace, ccNewLine, ccWord, ccPunctuation }; - void SetDefaultCharClasses(bool includeWordClass); - void SetCharClasses(const unsigned char *chars, cc newCharClass); - cc GetClass(unsigned char ch) const { return static_cast(charClass[ch]);} - bool IsWord(unsigned char ch) const { return static_cast(charClass[ch]) == ccWord;} - -private: - enum { maxChar=256 }; - unsigned char charClass[maxChar]; // not type cc to save space -}; -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ContractionState.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ContractionState.cxx deleted file mode 100644 index 3d021b080b..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ContractionState.cxx +++ /dev/null @@ -1,289 +0,0 @@ -// Scintilla source code edit control -/** @file ContractionState.cxx - ** Manages visibility of lines for folding. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include "Platform.h" - -#include "ContractionState.h" - -OneLine::OneLine() { - displayLine = 0; - //docLine = 0; - visible = true; - height = 1; - expanded = true; -} - -ContractionState::ContractionState() { - lines = 0; - size = 0; - linesInDoc = 1; - linesInDisplay = 1; - valid = false; - docLines = 0; - sizeDocLines = 0; -} - -ContractionState::~ContractionState() { - Clear(); -} - -void ContractionState::MakeValid() const { - if (!valid) { - // Could be cleverer by keeping the index of the last still valid entry - // rather than invalidating all. - linesInDisplay = 0; - for (int lineInDoc=0; lineInDoc= 0) && (lineDoc < linesInDoc)) { - return lines[lineDoc].displayLine; - } - return -1; -} - -int ContractionState::DocFromDisplay(int lineDisplay) const { - if (lineDisplay <= 0) - return 0; - if (lineDisplay >= linesInDisplay) - return linesInDoc; - if (size == 0) - return lineDisplay; - MakeValid(); - if (docLines) { // Valid allocation - return docLines[lineDisplay]; - } else { - return 0; - } -} - -void ContractionState::Grow(int sizeNew) { - OneLine *linesNew = new OneLine[sizeNew]; - if (linesNew) { - int i = 0; - for (; i < size; i++) { - linesNew[i] = lines[i]; - } - for (; i < sizeNew; i++) { - linesNew[i].displayLine = i; - } - delete []lines; - lines = linesNew; - size = sizeNew; - valid = false; - } else { - Platform::DebugPrintf("No memory available\n"); - // TODO: Blow up - } -} - -void ContractionState::InsertLines(int lineDoc, int lineCount) { - if (size == 0) { - linesInDoc += lineCount; - linesInDisplay += lineCount; - return; - } - //Platform::DebugPrintf("InsertLine[%d] = %d\n", lineDoc); - if ((linesInDoc + lineCount + 2) >= size) { - Grow(linesInDoc + lineCount + growSize); - } - linesInDoc += lineCount; - for (int i = linesInDoc; i >= lineDoc + lineCount; i--) { - lines[i].visible = lines[i - lineCount].visible; - lines[i].height = lines[i - lineCount].height; - linesInDisplay += lines[i].height; - lines[i].expanded = lines[i - lineCount].expanded; - } - for (int d=0;d= 0) && (lineDoc < linesInDoc)) { - return lines[lineDoc].visible; - } else { - return false; - } -} - -bool ContractionState::SetVisible(int lineDocStart, int lineDocEnd, bool visible) { - if (lineDocStart == 0) - lineDocStart++; - if (lineDocStart > lineDocEnd) - return false; - if (size == 0) { - Grow(linesInDoc + growSize); - } - // TODO: modify docLine members to mirror displayLine - int delta = 0; - // Change lineDocs - if ((lineDocStart <= lineDocEnd) && (lineDocStart >= 0) && (lineDocEnd < linesInDoc)) { - for (int line=lineDocStart; line <= lineDocEnd; line++) { - if (lines[line].visible != visible) { - delta += visible ? lines[line].height : -lines[line].height; - lines[line].visible = visible; - } - } - } - linesInDisplay += delta; - valid = false; - return delta != 0; -} - -bool ContractionState::GetExpanded(int lineDoc) const { - if (size == 0) - return true; - if ((lineDoc >= 0) && (lineDoc < linesInDoc)) { - return lines[lineDoc].expanded; - } else { - return false; - } -} - -bool ContractionState::SetExpanded(int lineDoc, bool expanded) { - if (size == 0) { - if (expanded) { - // If in completely expanded state then setting - // one line to expanded has no effect. - return false; - } - Grow(linesInDoc + growSize); - } - if ((lineDoc >= 0) && (lineDoc < linesInDoc)) { - if (lines[lineDoc].expanded != expanded) { - lines[lineDoc].expanded = expanded; - return true; - } - } - return false; -} - -int ContractionState::GetHeight(int lineDoc) const { - if (size == 0) - return 1; - if ((lineDoc >= 0) && (lineDoc < linesInDoc)) { - return lines[lineDoc].height; - } else { - return 1; - } -} - -// Set the number of display lines needed for this line. -// Return true if this is a change. -bool ContractionState::SetHeight(int lineDoc, int height) { - if (lineDoc > linesInDoc) - return false; - if (size == 0) { - if (height == 1) { - // If in completely expanded state then all lines - // assumed to have height of one so no effect here. - return false; - } - Grow(linesInDoc + growSize); - } - if (lines[lineDoc].height != height) { - lines[lineDoc].height = height; - valid = false; - return true; - } else { - return false; - } -} - -void ContractionState::ShowAll() { - delete []lines; - lines = 0; - size = 0; - - delete []docLines; - docLines = 0; - sizeDocLines = 0; - - linesInDisplay = linesInDoc; -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ContractionState.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ContractionState.h deleted file mode 100644 index e15ee3bbe6..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ContractionState.h +++ /dev/null @@ -1,65 +0,0 @@ -// Scintilla source code edit control -/** @file ContractionState.h - ** Manages visibility of lines for folding. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef CONTRACTIONSTATE_H -#define CONTRACTIONSTATE_H - -/** - */ -class OneLine { -public: - int displayLine; ///< Position within set of visible lines - //int docLine; ///< Inverse of @a displayLine - int height; ///< Number of display lines needed to show all of the line - bool visible; - bool expanded; - - OneLine(); - virtual ~OneLine() {} -}; - -/** - */ -class ContractionState { - void Grow(int sizeNew); - enum { growSize = 4000 }; - int linesInDoc; - mutable int linesInDisplay; - mutable OneLine *lines; - int size; - mutable int *docLines; - mutable int sizeDocLines; - mutable bool valid; - void MakeValid() const; - -public: - ContractionState(); - virtual ~ContractionState(); - - void Clear(); - - int LinesInDoc() const; - int LinesDisplayed() const; - int DisplayFromDoc(int lineDoc) const; - int DocFromDisplay(int lineDisplay) const; - - void InsertLines(int lineDoc, int lineCount); - void DeleteLines(int lineDoc, int lineCount); - - bool GetVisible(int lineDoc) const; - bool SetVisible(int lineDocStart, int lineDocEnd, bool visible); - - bool GetExpanded(int lineDoc) const; - bool SetExpanded(int lineDoc, bool expanded); - - int GetHeight(int lineDoc) const; - bool SetHeight(int lineDoc, int height); - - void ShowAll(); -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Document.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Document.cxx deleted file mode 100644 index 92be92691c..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Document.cxx +++ /dev/null @@ -1,1577 +0,0 @@ -// Scintilla source code edit control -/** @file Document.cxx - ** Text document that handles notifications, DBCS, styling, words and end of line. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include - -#include "Platform.h" - -#include "Scintilla.h" -#include "SVector.h" -#include "CellBuffer.h" -#include "CharClassify.h" -#include "Document.h" -#include "RESearch.h" - -// This is ASCII specific but is safe with chars >= 0x80 -static inline bool isspacechar(unsigned char ch) { - return (ch == ' ') || ((ch >= 0x09) && (ch <= 0x0d)); -} - -static inline bool IsPunctuation(char ch) { - return isascii(ch) && ispunct(ch); -} - -static inline bool IsADigit(char ch) { - return isascii(ch) && isdigit(ch); -} - -static inline bool IsLowerCase(char ch) { - return isascii(ch) && islower(ch); -} - -static inline bool IsUpperCase(char ch) { - return isascii(ch) && isupper(ch); -} - -Document::Document() { - refCount = 0; -#ifdef unix - eolMode = SC_EOL_LF; -#else - eolMode = SC_EOL_CRLF; -#endif - dbcsCodePage = 0; - stylingBits = 5; - stylingBitsMask = 0x1F; - stylingMask = 0; - endStyled = 0; - styleClock = 0; - enteredCount = 0; - enteredReadOnlyCount = 0; - tabInChars = 8; - indentInChars = 0; - actualIndentInChars = 8; - useTabs = true; - tabIndents = true; - backspaceUnindents = false; - watchers = 0; - lenWatchers = 0; - - matchesValid = false; - pre = 0; - substituted = 0; -} - -Document::~Document() { - for (int i = 0; i < lenWatchers; i++) { - watchers[i].watcher->NotifyDeleted(this, watchers[i].userData); - } - delete []watchers; - watchers = 0; - lenWatchers = 0; - delete pre; - pre = 0; - delete []substituted; - substituted = 0; -} - -// Increase reference count and return its previous value. -int Document::AddRef() { - return refCount++; -} - -// Decrease reference count and return its previous value. -// Delete the document if reference count reaches zero. -int Document::Release() { - int curRefCount = --refCount; - if (curRefCount == 0) - delete this; - return curRefCount; -} - -void Document::SetSavePoint() { - cb.SetSavePoint(); - NotifySavePoint(true); -} - -int Document::AddMark(int line, int markerNum) { - int prev = cb.AddMark(line, markerNum); - DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); - mh.line = line; - NotifyModified(mh); - return prev; -} - -void Document::AddMarkSet(int line, int valueSet) { - unsigned int m = valueSet; - for (int i = 0; m; i++, m >>= 1) - if (m & 1) - cb.AddMark(line, i); - DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); - mh.line = line; - NotifyModified(mh); -} - -void Document::DeleteMark(int line, int markerNum) { - cb.DeleteMark(line, markerNum); - DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); - mh.line = line; - NotifyModified(mh); -} - -void Document::DeleteMarkFromHandle(int markerHandle) { - cb.DeleteMarkFromHandle(markerHandle); - DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0); - mh.line = -1; - NotifyModified(mh); -} - -void Document::DeleteAllMarks(int markerNum) { - cb.DeleteAllMarks(markerNum); - DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0); - mh.line = -1; - NotifyModified(mh); -} - -int Document::LineStart(int line) { - return cb.LineStart(line); -} - -int Document::LineEnd(int line) { - if (line == LinesTotal() - 1) { - return LineStart(line + 1); - } else { - int position = LineStart(line + 1) - 1; - // When line terminator is CR+LF, may need to go back one more - if ((position > LineStart(line)) && (cb.CharAt(position - 1) == '\r')) { - position--; - } - return position; - } -} - -int Document::LineFromPosition(int pos) { - return cb.LineFromPosition(pos); -} - -int Document::LineEndPosition(int position) { - return LineEnd(LineFromPosition(position)); -} - -int Document::VCHomePosition(int position) { - int line = LineFromPosition(position); - int startPosition = LineStart(line); - int endLine = LineStart(line + 1) - 1; - int startText = startPosition; - while (startText < endLine && (cb.CharAt(startText) == ' ' || cb.CharAt(startText) == '\t' ) ) - startText++; - if (position == startText) - return startPosition; - else - return startText; -} - -int Document::SetLevel(int line, int level) { - int prev = cb.SetLevel(line, level); - if (prev != level) { - DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER, - LineStart(line), 0, 0, 0); - mh.line = line; - mh.foldLevelNow = level; - mh.foldLevelPrev = prev; - NotifyModified(mh); - } - return prev; -} - -static bool IsSubordinate(int levelStart, int levelTry) { - if (levelTry & SC_FOLDLEVELWHITEFLAG) - return true; - else - return (levelStart & SC_FOLDLEVELNUMBERMASK) < (levelTry & SC_FOLDLEVELNUMBERMASK); -} - -int Document::GetLastChild(int lineParent, int level) { - if (level == -1) - level = GetLevel(lineParent) & SC_FOLDLEVELNUMBERMASK; - int maxLine = LinesTotal(); - int lineMaxSubord = lineParent; - while (lineMaxSubord < maxLine - 1) { - EnsureStyledTo(LineStart(lineMaxSubord + 2)); - if (!IsSubordinate(level, GetLevel(lineMaxSubord + 1))) - break; - lineMaxSubord++; - } - if (lineMaxSubord > lineParent) { - if (level > (GetLevel(lineMaxSubord + 1) & SC_FOLDLEVELNUMBERMASK)) { - // Have chewed up some whitespace that belongs to a parent so seek back - if (GetLevel(lineMaxSubord) & SC_FOLDLEVELWHITEFLAG) { - lineMaxSubord--; - } - } - } - return lineMaxSubord; -} - -int Document::GetFoldParent(int line) { - int level = GetLevel(line) & SC_FOLDLEVELNUMBERMASK; - int lineLook = line - 1; - while ((lineLook > 0) && ( - (!(GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG)) || - ((GetLevel(lineLook) & SC_FOLDLEVELNUMBERMASK) >= level)) - ) { - lineLook--; - } - if ((GetLevel(lineLook) & SC_FOLDLEVELHEADERFLAG) && - ((GetLevel(lineLook) & SC_FOLDLEVELNUMBERMASK) < level)) { - return lineLook; - } else { - return -1; - } -} - -int Document::ClampPositionIntoDocument(int pos) { - return Platform::Clamp(pos, 0, Length()); -} - -bool Document::IsCrLf(int pos) { - if (pos < 0) - return false; - if (pos >= (Length() - 1)) - return false; - return (cb.CharAt(pos) == '\r') && (cb.CharAt(pos + 1) == '\n'); -} - -static const int maxBytesInDBCSCharacter=5; - -int Document::LenChar(int pos) { - if (pos < 0) { - return 1; - } else if (IsCrLf(pos)) { - return 2; - } else if (SC_CP_UTF8 == dbcsCodePage) { - unsigned char ch = static_cast(cb.CharAt(pos)); - if (ch < 0x80) - return 1; - int len = 2; - if (ch >= (0x80 + 0x40 + 0x20)) - len = 3; - int lengthDoc = Length(); - if ((pos + len) > lengthDoc) - return lengthDoc -pos; - else - return len; - } else if (dbcsCodePage) { - char mbstr[maxBytesInDBCSCharacter+1]; - int i; - for (i=0; i= Length()) - return Length(); - - // PLATFORM_ASSERT(pos > 0 && pos < Length()); - if (checkLineEnd && IsCrLf(pos - 1)) { - if (moveDir > 0) - return pos + 1; - else - return pos - 1; - } - - // Not between CR and LF - - if (dbcsCodePage) { - if (SC_CP_UTF8 == dbcsCodePage) { - unsigned char ch = static_cast(cb.CharAt(pos)); - while ((pos > 0) && (pos < Length()) && (ch >= 0x80) && (ch < (0x80 + 0x40))) { - // ch is a trail byte - if (moveDir > 0) - pos++; - else - pos--; - ch = static_cast(cb.CharAt(pos)); - } - } else { - // Anchor DBCS calculations at start of line because start of line can - // not be a DBCS trail byte. - int posCheck = LineStart(LineFromPosition(pos)); - while (posCheck < pos) { - char mbstr[maxBytesInDBCSCharacter+1]; - int i; - for(i=0;i pos) { - if (moveDir > 0) { - return posCheck + mbsize; - } else { - return posCheck; - } - } - posCheck += mbsize; - } - } - } - - return pos; -} - -void Document::ModifiedAt(int pos) { - if (endStyled > pos) - endStyled = pos; -} - -void Document::CheckReadOnly() { - if (cb.IsReadOnly() && enteredReadOnlyCount == 0) { - enteredReadOnlyCount++; - NotifyModifyAttempt(); - enteredReadOnlyCount--; - } -} - -// Document only modified by gateways DeleteChars, InsertStyledString, Undo, Redo, and SetStyleAt. -// SetStyleAt does not change the persistent state of a document - -// Unlike Undo, Redo, and InsertStyledString, the pos argument is a cell number not a char number -bool Document::DeleteChars(int pos, int len) { - if (len == 0) - return false; - if ((pos + len) > Length()) - return false; - CheckReadOnly(); - if (enteredCount != 0) { - return false; - } else { - enteredCount++; - if (!cb.IsReadOnly()) { - NotifyModified( - DocModification( - SC_MOD_BEFOREDELETE | SC_PERFORMED_USER, - pos, len, - 0, 0)); - int prevLinesTotal = LinesTotal(); - bool startSavePoint = cb.IsSavePoint(); - const char *text = cb.DeleteChars(pos * 2, len * 2); - if (startSavePoint && cb.IsCollectingUndo()) - NotifySavePoint(!startSavePoint); - if ((pos < Length()) || (pos == 0)) - ModifiedAt(pos); - else - ModifiedAt(pos-1); - NotifyModified( - DocModification( - SC_MOD_DELETETEXT | SC_PERFORMED_USER, - pos, len, - LinesTotal() - prevLinesTotal, text)); - } - enteredCount--; - } - return !cb.IsReadOnly(); -} - -/** - * Insert a styled string (char/style pairs) with a length. - */ -bool Document::InsertStyledString(int position, char *s, int insertLength) { - CheckReadOnly(); - if (enteredCount != 0) { - return false; - } else { - enteredCount++; - if (!cb.IsReadOnly()) { - NotifyModified( - DocModification( - SC_MOD_BEFOREINSERT | SC_PERFORMED_USER, - position / 2, insertLength / 2, - 0, s)); - int prevLinesTotal = LinesTotal(); - bool startSavePoint = cb.IsSavePoint(); - const char *text = cb.InsertString(position, s, insertLength); - if (startSavePoint && cb.IsCollectingUndo()) - NotifySavePoint(!startSavePoint); - ModifiedAt(position / 2); - NotifyModified( - DocModification( - SC_MOD_INSERTTEXT | SC_PERFORMED_USER, - position / 2, insertLength / 2, - LinesTotal() - prevLinesTotal, text)); - } - enteredCount--; - } - return !cb.IsReadOnly(); -} - -int Document::Undo() { - int newPos = -1; - CheckReadOnly(); - if (enteredCount == 0) { - enteredCount++; - if (!cb.IsReadOnly()) { - bool startSavePoint = cb.IsSavePoint(); - bool multiLine = false; - int steps = cb.StartUndo(); - //Platform::DebugPrintf("Steps=%d\n", steps); - for (int step = 0; step < steps; step++) { - const int prevLinesTotal = LinesTotal(); - const Action &action = cb.GetUndoStep(); - if (action.at == removeAction) { - NotifyModified(DocModification( - SC_MOD_BEFOREINSERT | SC_PERFORMED_UNDO, action)); - } else { - NotifyModified(DocModification( - SC_MOD_BEFOREDELETE | SC_PERFORMED_UNDO, action)); - } - cb.PerformUndoStep(); - int cellPosition = action.position; - ModifiedAt(cellPosition); - newPos = cellPosition; - - int modFlags = SC_PERFORMED_UNDO; - // With undo, an insertion action becomes a deletion notification - if (action.at == removeAction) { - newPos += action.lenData; - modFlags |= SC_MOD_INSERTTEXT; - } else { - modFlags |= SC_MOD_DELETETEXT; - } - if (steps > 1) - modFlags |= SC_MULTISTEPUNDOREDO; - const int linesAdded = LinesTotal() - prevLinesTotal; - if (linesAdded != 0) - multiLine = true; - if (step == steps - 1) { - modFlags |= SC_LASTSTEPINUNDOREDO; - if (multiLine) - modFlags |= SC_MULTILINEUNDOREDO; - } - NotifyModified(DocModification(modFlags, cellPosition, action.lenData, - linesAdded, action.data)); - } - - bool endSavePoint = cb.IsSavePoint(); - if (startSavePoint != endSavePoint) - NotifySavePoint(endSavePoint); - } - enteredCount--; - } - return newPos; -} - -int Document::Redo() { - int newPos = -1; - CheckReadOnly(); - if (enteredCount == 0) { - enteredCount++; - if (!cb.IsReadOnly()) { - bool startSavePoint = cb.IsSavePoint(); - bool multiLine = false; - int steps = cb.StartRedo(); - for (int step = 0; step < steps; step++) { - const int prevLinesTotal = LinesTotal(); - const Action &action = cb.GetRedoStep(); - if (action.at == insertAction) { - NotifyModified(DocModification( - SC_MOD_BEFOREINSERT | SC_PERFORMED_REDO, action)); - } else { - NotifyModified(DocModification( - SC_MOD_BEFOREDELETE | SC_PERFORMED_REDO, action)); - } - cb.PerformRedoStep(); - ModifiedAt(action.position); - newPos = action.position; - - int modFlags = SC_PERFORMED_REDO; - if (action.at == insertAction) { - newPos += action.lenData; - modFlags |= SC_MOD_INSERTTEXT; - } else { - modFlags |= SC_MOD_DELETETEXT; - } - if (steps > 1) - modFlags |= SC_MULTISTEPUNDOREDO; - const int linesAdded = LinesTotal() - prevLinesTotal; - if (linesAdded != 0) - multiLine = true; - if (step == steps - 1) { - modFlags |= SC_LASTSTEPINUNDOREDO; - if (multiLine) - modFlags |= SC_MULTILINEUNDOREDO; - } - NotifyModified( - DocModification(modFlags, action.position, action.lenData, - linesAdded, action.data)); - } - - bool endSavePoint = cb.IsSavePoint(); - if (startSavePoint != endSavePoint) - NotifySavePoint(endSavePoint); - } - enteredCount--; - } - return newPos; -} - -/** - * Insert a single character. - */ -bool Document::InsertChar(int pos, char ch) { - char chs[2]; - chs[0] = ch; - chs[1] = 0; - return InsertStyledString(pos*2, chs, 2); -} - -/** - * Insert a null terminated string. - */ -bool Document::InsertString(int position, const char *s) { - return InsertString(position, s, strlen(s)); -} - -/** - * Insert a string with a length. - */ -bool Document::InsertString(int position, const char *s, size_t insertLength) { - bool changed = false; - if (insertLength > 0) { - char *sWithStyle = new char[insertLength * 2]; - if (sWithStyle) { - for (size_t i = 0; i < insertLength; i++) { - sWithStyle[i*2] = s[i]; - sWithStyle[i*2 + 1] = 0; - } - changed = InsertStyledString(position*2, sWithStyle, - static_cast(insertLength*2)); - delete []sWithStyle; - } - } - return changed; -} - -void Document::ChangeChar(int pos, char ch) { - DeleteChars(pos, 1); - InsertChar(pos, ch); -} - -void Document::DelChar(int pos) { - DeleteChars(pos, LenChar(pos)); -} - -void Document::DelCharBack(int pos) { - if (pos <= 0) { - return; - } else if (IsCrLf(pos - 2)) { - DeleteChars(pos - 2, 2); - } else if (dbcsCodePage) { - int startChar = MovePositionOutsideChar(pos - 1, -1, false); - DeleteChars(startChar, pos - startChar); - } else { - DeleteChars(pos - 1, 1); - } -} - -static bool isindentchar(char ch) { - return (ch == ' ') || (ch == '\t'); -} - -static int NextTab(int pos, int tabSize) { - return ((pos / tabSize) + 1) * tabSize; -} - -static void CreateIndentation(char *linebuf, int length, int indent, int tabSize, bool insertSpaces) { - length--; // ensure space for \0 - if (!insertSpaces) { - while ((indent >= tabSize) && (length > 0)) { - *linebuf++ = '\t'; - indent -= tabSize; - length--; - } - } - while ((indent > 0) && (length > 0)) { - *linebuf++ = ' '; - indent--; - length--; - } - *linebuf = '\0'; -} - -int Document::GetLineIndentation(int line) { - int indent = 0; - if ((line >= 0) && (line < LinesTotal())) { - int lineStart = LineStart(line); - int length = Length(); - for (int i = lineStart;i < length;i++) { - char ch = cb.CharAt(i); - if (ch == ' ') - indent++; - else if (ch == '\t') - indent = NextTab(indent, tabInChars); - else - return indent; - } - } - return indent; -} - -void Document::SetLineIndentation(int line, int indent) { - int indentOfLine = GetLineIndentation(line); - if (indent < 0) - indent = 0; - if (indent != indentOfLine) { - char linebuf[1000]; - CreateIndentation(linebuf, sizeof(linebuf), indent, tabInChars, !useTabs); - int thisLineStart = LineStart(line); - int indentPos = GetLineIndentPosition(line); - BeginUndoAction(); - DeleteChars(thisLineStart, indentPos - thisLineStart); - InsertString(thisLineStart, linebuf); - EndUndoAction(); - } -} - -int Document::GetLineIndentPosition(int line) { - if (line < 0) - return 0; - int pos = LineStart(line); - int length = Length(); - while ((pos < length) && isindentchar(cb.CharAt(pos))) { - pos++; - } - return pos; -} - -int Document::GetColumn(int pos) { - int column = 0; - int line = LineFromPosition(pos); - if ((line >= 0) && (line < LinesTotal())) { - for (int i = LineStart(line);i < pos;) { - char ch = cb.CharAt(i); - if (ch == '\t') { - column = NextTab(column, tabInChars); - i++; - } else if (ch == '\r') { - return column; - } else if (ch == '\n') { - return column; - } else { - column++; - i = MovePositionOutsideChar(i + 1, 1); - } - } - } - return column; -} - -int Document::FindColumn(int line, int column) { - int position = LineStart(line); - int columnCurrent = 0; - if ((line >= 0) && (line < LinesTotal())) { - while ((columnCurrent < column) && (position < Length())) { - char ch = cb.CharAt(position); - if (ch == '\t') { - columnCurrent = NextTab(columnCurrent, tabInChars); - position++; - } else if (ch == '\r') { - return position; - } else if (ch == '\n') { - return position; - } else { - columnCurrent++; - position = MovePositionOutsideChar(position + 1, 1); - } - } - } - return position; -} - -void Document::Indent(bool forwards, int lineBottom, int lineTop) { - // Dedent - suck white space off the front of the line to dedent by equivalent of a tab - for (int line = lineBottom; line >= lineTop; line--) { - int indentOfLine = GetLineIndentation(line); - if (forwards) { - if (LineStart(line) < LineEnd(line)) { - SetLineIndentation(line, indentOfLine + IndentSize()); - } - } else { - SetLineIndentation(line, indentOfLine - IndentSize()); - } - } -} - -// Convert line endings for a piece of text to a particular mode. -// Stop at len or when a NUL is found. -// Caller must delete the returned pointer. -char *Document::TransformLineEnds(int *pLenOut, const char *s, size_t len, int eolMode) { - char *dest = new char[2 * len + 1]; - const char *sptr = s; - char *dptr = dest; - for (size_t i = 0; (i < len) && (*sptr != '\0'); i++) { - if (*sptr == '\n' || *sptr == '\r') { - if (eolMode == SC_EOL_CR) { - *dptr++ = '\r'; - } else if (eolMode == SC_EOL_LF) { - *dptr++ = '\n'; - } else { // eolMode == SC_EOL_CRLF - *dptr++ = '\r'; - *dptr++ = '\n'; - } - if ((*sptr == '\r') && (i+1 < len) && (*(sptr+1) == '\n')) { - i++; - sptr++; - } - sptr++; - } else { - *dptr++ = *sptr++; - } - } - *dptr++ = '\0'; - *pLenOut = (dptr - dest) - 1; - return dest; -} - -void Document::ConvertLineEnds(int eolModeSet) { - BeginUndoAction(); - - for (int pos = 0; pos < Length(); pos++) { - if (cb.CharAt(pos) == '\r') { - if (cb.CharAt(pos + 1) == '\n') { - // CRLF - if (eolModeSet == SC_EOL_CR) { - DeleteChars(pos + 1, 1); // Delete the LF - } else if (eolModeSet == SC_EOL_LF) { - DeleteChars(pos, 1); // Delete the CR - } else { - pos++; - } - } else { - // CR - if (eolModeSet == SC_EOL_CRLF) { - InsertString(pos + 1, "\n", 1); // Insert LF - pos++; - } else if (eolModeSet == SC_EOL_LF) { - InsertString(pos, "\n", 1); // Insert LF - DeleteChars(pos + 1, 1); // Delete CR - } - } - } else if (cb.CharAt(pos) == '\n') { - // LF - if (eolModeSet == SC_EOL_CRLF) { - InsertString(pos, "\r", 1); // Insert CR - pos++; - } else if (eolModeSet == SC_EOL_CR) { - InsertString(pos, "\r", 1); // Insert CR - DeleteChars(pos + 1, 1); // Delete LF - } - } - } - - EndUndoAction(); -} - -bool Document::IsWhiteLine(int line) { - int currentChar = LineStart(line); - int endLine = LineEnd(line); - while (currentChar < endLine) { - if (cb.CharAt(currentChar) != ' ' && cb.CharAt(currentChar) != '\t') { - return false; - } - ++currentChar; - } - return true; -} - -int Document::ParaUp(int pos) { - int line = LineFromPosition(pos); - line--; - while (line >= 0 && IsWhiteLine(line)) { // skip empty lines - line--; - } - while (line >= 0 && !IsWhiteLine(line)) { // skip non-empty lines - line--; - } - line++; - return LineStart(line); -} - -int Document::ParaDown(int pos) { - int line = LineFromPosition(pos); - while (line < LinesTotal() && !IsWhiteLine(line)) { // skip non-empty lines - line++; - } - while (line < LinesTotal() && IsWhiteLine(line)) { // skip empty lines - line++; - } - if (line < LinesTotal()) - return LineStart(line); - else // end of a document - return LineEnd(line-1); -} - -CharClassify::cc Document::WordCharClass(unsigned char ch) { - if ((SC_CP_UTF8 == dbcsCodePage) && (ch >= 0x80)) - return CharClassify::ccWord; - return charClass.GetClass(ch); -} - -/** - * Used by commmands that want to select whole words. - * Finds the start of word at pos when delta < 0 or the end of the word when delta >= 0. - */ -int Document::ExtendWordSelect(int pos, int delta, bool onlyWordCharacters) { - CharClassify::cc ccStart = CharClassify::ccWord; - if (delta < 0) { - if (!onlyWordCharacters) - ccStart = WordCharClass(cb.CharAt(pos-1)); - while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart)) - pos--; - } else { - if (!onlyWordCharacters) - ccStart = WordCharClass(cb.CharAt(pos)); - while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart)) - pos++; - } - return MovePositionOutsideChar(pos, delta); -} - -/** - * Find the start of the next word in either a forward (delta >= 0) or backwards direction - * (delta < 0). - * This is looking for a transition between character classes although there is also some - * additional movement to transit white space. - * Used by cursor movement by word commands. - */ -int Document::NextWordStart(int pos, int delta) { - if (delta < 0) { - while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace)) - pos--; - if (pos > 0) { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1)); - while (pos > 0 && (WordCharClass(cb.CharAt(pos - 1)) == ccStart)) { - pos--; - } - } - } else { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos)); - while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == ccStart)) - pos++; - while (pos < (Length()) && (WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace)) - pos++; - } - return pos; -} - -/** - * Find the end of the next word in either a forward (delta >= 0) or backwards direction - * (delta < 0). - * This is looking for a transition between character classes although there is also some - * additional movement to transit white space. - * Used by cursor movement by word commands. - */ -int Document::NextWordEnd(int pos, int delta) { - if (delta < 0) { - if (pos > 0) { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos-1)); - if (ccStart != CharClassify::ccSpace) { - while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == ccStart) { - pos--; - } - } - while (pos > 0 && WordCharClass(cb.CharAt(pos - 1)) == CharClassify::ccSpace) { - pos--; - } - } - } else { - while (pos < Length() && WordCharClass(cb.CharAt(pos)) == CharClassify::ccSpace) { - pos++; - } - if (pos < Length()) { - CharClassify::cc ccStart = WordCharClass(cb.CharAt(pos)); - while (pos < Length() && WordCharClass(cb.CharAt(pos)) == ccStart) { - pos++; - } - } - } - return pos; -} - -/** - * Check that the character at the given position is a word or punctuation character and that - * the previous character is of a different character class. - */ -bool Document::IsWordStartAt(int pos) { - if (pos > 0) { - CharClassify::cc ccPos = WordCharClass(CharAt(pos)); - return (ccPos == CharClassify::ccWord || ccPos == CharClassify::ccPunctuation) && - (ccPos != WordCharClass(CharAt(pos - 1))); - } - return true; -} - -/** - * Check that the character at the given position is a word or punctuation character and that - * the next character is of a different character class. - */ -bool Document::IsWordEndAt(int pos) { - if (pos < Length()) { - CharClassify::cc ccPrev = WordCharClass(CharAt(pos-1)); - return (ccPrev == CharClassify::ccWord || ccPrev == CharClassify::ccPunctuation) && - (ccPrev != WordCharClass(CharAt(pos))); - } - return true; -} - -/** - * Check that the given range is has transitions between character classes at both - * ends and where the characters on the inside are word or punctuation characters. - */ -bool Document::IsWordAt(int start, int end) { - return IsWordStartAt(start) && IsWordEndAt(end); -} - -// The comparison and case changing functions here assume ASCII -// or extended ASCII such as the normal Windows code page. - -static inline char MakeUpperCase(char ch) { - if (ch < 'a' || ch > 'z') - return ch; - else - return static_cast(ch - 'a' + 'A'); -} - -static inline char MakeLowerCase(char ch) { - if (ch < 'A' || ch > 'Z') - return ch; - else - return static_cast(ch - 'A' + 'a'); -} - -// Define a way for the Regular Expression code to access the document -class DocumentIndexer : public CharacterIndexer { - Document *pdoc; - int end; -public: - DocumentIndexer(Document *pdoc_, int end_) : - pdoc(pdoc_), end(end_) { - } - - virtual ~DocumentIndexer() { - } - - virtual char CharAt(int index) { - if (index < 0 || index >= end) - return 0; - else - return pdoc->CharAt(index); - } -}; - -/** - * Find text in document, supporting both forward and backward - * searches (just pass minPos > maxPos to do a backward search) - * Has not been tested with backwards DBCS searches yet. - */ -long Document::FindText(int minPos, int maxPos, const char *s, - bool caseSensitive, bool word, bool wordStart, bool regExp, bool posix, - int *length) { - if (regExp) { - if (!pre) - pre = new RESearch(&charClass); - if (!pre) - return -1; - - int increment = (minPos <= maxPos) ? 1 : -1; - - int startPos = minPos; - int endPos = maxPos; - - // Range endpoints should not be inside DBCS characters, but just in case, move them. - startPos = MovePositionOutsideChar(startPos, 1, false); - endPos = MovePositionOutsideChar(endPos, 1, false); - - const char *errmsg = pre->Compile(s, *length, caseSensitive, posix); - if (errmsg) { - return -1; - } - // Find a variable in a property file: \$(\([A-Za-z0-9_.]+\)) - // Replace first '.' with '-' in each property file variable reference: - // Search: \$(\([A-Za-z0-9_-]+\)\.\([A-Za-z0-9_.]+\)) - // Replace: $(\1-\2) - int lineRangeStart = LineFromPosition(startPos); - int lineRangeEnd = LineFromPosition(endPos); - if ((increment == 1) && - (startPos >= LineEnd(lineRangeStart)) && - (lineRangeStart < lineRangeEnd)) { - // the start position is at end of line or between line end characters. - lineRangeStart++; - startPos = LineStart(lineRangeStart); - } - int pos = -1; - int lenRet = 0; - char searchEnd = s[*length - 1]; - int lineRangeBreak = lineRangeEnd + increment; - for (int line = lineRangeStart; line != lineRangeBreak; line += increment) { - int startOfLine = LineStart(line); - int endOfLine = LineEnd(line); - if (increment == 1) { - if (line == lineRangeStart) { - if ((startPos != startOfLine) && (s[0] == '^')) - continue; // Can't match start of line if start position after start of line - startOfLine = startPos; - } - if (line == lineRangeEnd) { - if ((endPos != endOfLine) && (searchEnd == '$')) - continue; // Can't match end of line if end position before end of line - endOfLine = endPos; - } - } else { - if (line == lineRangeEnd) { - if ((endPos != startOfLine) && (s[0] == '^')) - continue; // Can't match start of line if end position after start of line - startOfLine = endPos; - } - if (line == lineRangeStart) { - if ((startPos != endOfLine) && (searchEnd == '$')) - continue; // Can't match end of line if start position before end of line - endOfLine = startPos; - } - } - - DocumentIndexer di(this, endOfLine); - int success = pre->Execute(di, startOfLine, endOfLine); - if (success) { - pos = pre->bopat[0]; - lenRet = pre->eopat[0] - pre->bopat[0]; - if (increment == -1) { - // Check for the last match on this line. - int repetitions = 1000; // Break out of infinite loop - while (success && (pre->eopat[0] <= endOfLine) && (repetitions--)) { - success = pre->Execute(di, pos+1, endOfLine); - if (success) { - if (pre->eopat[0] <= minPos) { - pos = pre->bopat[0]; - lenRet = pre->eopat[0] - pre->bopat[0]; - } else { - success = 0; - } - } - } - } - break; - } - } - *length = lenRet; - return pos; - - } else { - - bool forward = minPos <= maxPos; - int increment = forward ? 1 : -1; - - // Range endpoints should not be inside DBCS characters, but just in case, move them. - int startPos = MovePositionOutsideChar(minPos, increment, false); - int endPos = MovePositionOutsideChar(maxPos, increment, false); - - // Compute actual search ranges needed - int lengthFind = *length; - if (lengthFind == -1) - lengthFind = static_cast(strlen(s)); - int endSearch = endPos; - if (startPos <= endPos) { - endSearch = endPos - lengthFind + 1; - } - //Platform::DebugPrintf("Find %d %d %s %d\n", startPos, endPos, ft->lpstrText, lengthFind); - char firstChar = s[0]; - if (!caseSensitive) - firstChar = static_cast(MakeUpperCase(firstChar)); - int pos = forward ? startPos : (startPos - 1); - while (forward ? (pos < endSearch) : (pos >= endSearch)) { - char ch = CharAt(pos); - if (caseSensitive) { - if (ch == firstChar) { - bool found = true; - if (pos + lengthFind > Platform::Maximum(startPos, endPos)) found = false; - for (int posMatch = 1; posMatch < lengthFind && found; posMatch++) { - ch = CharAt(pos + posMatch); - if (ch != s[posMatch]) - found = false; - } - if (found) { - if ((!word && !wordStart) || - word && IsWordAt(pos, pos + lengthFind) || - wordStart && IsWordStartAt(pos)) - return pos; - } - } - } else { - if (MakeUpperCase(ch) == firstChar) { - bool found = true; - if (pos + lengthFind > Platform::Maximum(startPos, endPos)) found = false; - for (int posMatch = 1; posMatch < lengthFind && found; posMatch++) { - ch = CharAt(pos + posMatch); - if (MakeUpperCase(ch) != MakeUpperCase(s[posMatch])) - found = false; - } - if (found) { - if ((!word && !wordStart) || - word && IsWordAt(pos, pos + lengthFind) || - wordStart && IsWordStartAt(pos)) - return pos; - } - } - } - pos += increment; - if (dbcsCodePage && (pos >= 0)) { - // Ensure trying to match from start of character - pos = MovePositionOutsideChar(pos, increment, false); - } - } - } - //Platform::DebugPrintf("Not found\n"); - return -1; -} - -const char *Document::SubstituteByPosition(const char *text, int *length) { - if (!pre) - return 0; - delete []substituted; - substituted = 0; - DocumentIndexer di(this, Length()); - if (!pre->GrabMatches(di)) - return 0; - unsigned int lenResult = 0; - for (int i = 0; i < *length; i++) { - if (text[i] == '\\') { - if (text[i + 1] >= '1' && text[i + 1] <= '9') { - unsigned int patNum = text[i + 1] - '0'; - lenResult += pre->eopat[patNum] - pre->bopat[patNum]; - i++; - } else { - switch (text[i + 1]) { - case 'a': - case 'b': - case 'f': - case 'n': - case 'r': - case 't': - case 'v': - i++; - } - lenResult++; - } - } else { - lenResult++; - } - } - substituted = new char[lenResult + 1]; - if (!substituted) - return 0; - char *o = substituted; - for (int j = 0; j < *length; j++) { - if (text[j] == '\\') { - if (text[j + 1] >= '1' && text[j + 1] <= '9') { - unsigned int patNum = text[j + 1] - '0'; - unsigned int len = pre->eopat[patNum] - pre->bopat[patNum]; - if (pre->pat[patNum]) // Will be null if try for a match that did not occur - memcpy(o, pre->pat[patNum], len); - o += len; - j++; - } else { - j++; - switch (text[j]) { - case 'a': - *o++ = '\a'; - break; - case 'b': - *o++ = '\b'; - break; - case 'f': - *o++ = '\f'; - break; - case 'n': - *o++ = '\n'; - break; - case 'r': - *o++ = '\r'; - break; - case 't': - *o++ = '\t'; - break; - case 'v': - *o++ = '\v'; - break; - default: - *o++ = '\\'; - j--; - } - } - } else { - *o++ = text[j]; - } - } - *o = '\0'; - *length = lenResult; - return substituted; -} - -int Document::LinesTotal() { - return cb.Lines(); -} - -void Document::ChangeCase(Range r, bool makeUpperCase) { - for (int pos = r.start; pos < r.end;) { - int len = LenChar(pos); - if (len == 1) { - char ch = CharAt(pos); - if (makeUpperCase) { - if (IsLowerCase(ch)) { - ChangeChar(pos, static_cast(MakeUpperCase(ch))); - } - } else { - if (IsUpperCase(ch)) { - ChangeChar(pos, static_cast(MakeLowerCase(ch))); - } - } - } - pos += len; - } -} - -void Document::SetDefaultCharClasses(bool includeWordClass) { - charClass.SetDefaultCharClasses(includeWordClass); -} - -void Document::SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass) { - charClass.SetCharClasses(chars, newCharClass); -} - -void Document::SetStylingBits(int bits) { - stylingBits = bits; - stylingBitsMask = 0; - for (int bit = 0; bit < stylingBits; bit++) { - stylingBitsMask <<= 1; - stylingBitsMask |= 1; - } -} - -void Document::StartStyling(int position, char mask) { - stylingMask = mask; - endStyled = position; -} - -bool Document::SetStyleFor(int length, char style) { - if (enteredCount != 0) { - return false; - } else { - enteredCount++; - style &= stylingMask; - int prevEndStyled = endStyled; - if (cb.SetStyleFor(endStyled, length, style, stylingMask)) { - DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER, - prevEndStyled, length); - NotifyModified(mh); - } - endStyled += length; - enteredCount--; - return true; - } -} - -bool Document::SetStyles(int length, char *styles) { - if (enteredCount != 0) { - return false; - } else { - enteredCount++; - bool didChange = false; - int startMod = 0; - int endMod = 0; - for (int iPos = 0; iPos < length; iPos++, endStyled++) { - PLATFORM_ASSERT(endStyled < Length()); - if (cb.SetStyleAt(endStyled, styles[iPos], stylingMask)) { - if (!didChange) { - startMod = endStyled; - } - didChange = true; - endMod = endStyled; - } - } - if (didChange) { - DocModification mh(SC_MOD_CHANGESTYLE | SC_PERFORMED_USER, - startMod, endMod - startMod + 1); - NotifyModified(mh); - } - enteredCount--; - return true; - } -} - -bool Document::EnsureStyledTo(int pos) { - if (pos > GetEndStyled()) { - IncrementStyleClock(); - // Ask the watchers to style, and stop as soon as one responds. - for (int i = 0; pos > GetEndStyled() && i < lenWatchers; i++) { - watchers[i].watcher->NotifyStyleNeeded(this, watchers[i].userData, pos); - } - } - return pos <= GetEndStyled(); -} - -void Document::IncrementStyleClock() { - styleClock++; - if (styleClock > 0x100000) { - styleClock = 0; - } -} - -bool Document::AddWatcher(DocWatcher *watcher, void *userData) { - for (int i = 0; i < lenWatchers; i++) { - if ((watchers[i].watcher == watcher) && - (watchers[i].userData == userData)) - return false; - } - WatcherWithUserData *pwNew = new WatcherWithUserData[lenWatchers + 1]; - if (!pwNew) - return false; - for (int j = 0; j < lenWatchers; j++) - pwNew[j] = watchers[j]; - pwNew[lenWatchers].watcher = watcher; - pwNew[lenWatchers].userData = userData; - delete []watchers; - watchers = pwNew; - lenWatchers++; - return true; -} - -bool Document::RemoveWatcher(DocWatcher *watcher, void *userData) { - for (int i = 0; i < lenWatchers; i++) { - if ((watchers[i].watcher == watcher) && - (watchers[i].userData == userData)) { - if (lenWatchers == 1) { - delete []watchers; - watchers = 0; - lenWatchers = 0; - } else { - WatcherWithUserData *pwNew = new WatcherWithUserData[lenWatchers]; - if (!pwNew) - return false; - for (int j = 0; j < lenWatchers - 1; j++) { - pwNew[j] = (j < i) ? watchers[j] : watchers[j + 1]; - } - delete []watchers; - watchers = pwNew; - lenWatchers--; - } - return true; - } - } - return false; -} - -void Document::NotifyModifyAttempt() { - for (int i = 0; i < lenWatchers; i++) { - watchers[i].watcher->NotifyModifyAttempt(this, watchers[i].userData); - } -} - -void Document::NotifySavePoint(bool atSavePoint) { - for (int i = 0; i < lenWatchers; i++) { - watchers[i].watcher->NotifySavePoint(this, watchers[i].userData, atSavePoint); - } -} - -void Document::NotifyModified(DocModification mh) { - for (int i = 0; i < lenWatchers; i++) { - watchers[i].watcher->NotifyModified(this, mh, watchers[i].userData); - } -} - -bool Document::IsWordPartSeparator(char ch) { - return (WordCharClass(ch) == CharClassify::ccWord) && IsPunctuation(ch); -} - -int Document::WordPartLeft(int pos) { - if (pos > 0) { - --pos; - char startChar = cb.CharAt(pos); - if (IsWordPartSeparator(startChar)) { - while (pos > 0 && IsWordPartSeparator(cb.CharAt(pos))) { - --pos; - } - } - if (pos > 0) { - startChar = cb.CharAt(pos); - --pos; - if (IsLowerCase(startChar)) { - while (pos > 0 && IsLowerCase(cb.CharAt(pos))) - --pos; - if (!IsUpperCase(cb.CharAt(pos)) && !IsLowerCase(cb.CharAt(pos))) - ++pos; - } else if (IsUpperCase(startChar)) { - while (pos > 0 && IsUpperCase(cb.CharAt(pos))) - --pos; - if (!IsUpperCase(cb.CharAt(pos))) - ++pos; - } else if (IsADigit(startChar)) { - while (pos > 0 && IsADigit(cb.CharAt(pos))) - --pos; - if (!IsADigit(cb.CharAt(pos))) - ++pos; - } else if (IsPunctuation(startChar)) { - while (pos > 0 && IsPunctuation(cb.CharAt(pos))) - --pos; - if (!IsPunctuation(cb.CharAt(pos))) - ++pos; - } else if (isspacechar(startChar)) { - while (pos > 0 && isspacechar(cb.CharAt(pos))) - --pos; - if (!isspacechar(cb.CharAt(pos))) - ++pos; - } else if (!isascii(startChar)) { - while (pos > 0 && !isascii(cb.CharAt(pos))) - --pos; - if (isascii(cb.CharAt(pos))) - ++pos; - } else { - ++pos; - } - } - } - return pos; -} - -int Document::WordPartRight(int pos) { - char startChar = cb.CharAt(pos); - int length = Length(); - if (IsWordPartSeparator(startChar)) { - while (pos < length && IsWordPartSeparator(cb.CharAt(pos))) - ++pos; - startChar = cb.CharAt(pos); - } - if (!isascii(startChar)) { - while (pos < length && !isascii(cb.CharAt(pos))) - ++pos; - } else if (IsLowerCase(startChar)) { - while (pos < length && IsLowerCase(cb.CharAt(pos))) - ++pos; - } else if (IsUpperCase(startChar)) { - if (IsLowerCase(cb.CharAt(pos + 1))) { - ++pos; - while (pos < length && IsLowerCase(cb.CharAt(pos))) - ++pos; - } else { - while (pos < length && IsUpperCase(cb.CharAt(pos))) - ++pos; - } - if (IsLowerCase(cb.CharAt(pos)) && IsUpperCase(cb.CharAt(pos - 1))) - --pos; - } else if (IsADigit(startChar)) { - while (pos < length && IsADigit(cb.CharAt(pos))) - ++pos; - } else if (IsPunctuation(startChar)) { - while (pos < length && IsPunctuation(cb.CharAt(pos))) - ++pos; - } else if (isspacechar(startChar)) { - while (pos < length && isspacechar(cb.CharAt(pos))) - ++pos; - } else { - ++pos; - } - return pos; -} - -bool IsLineEndChar(char c) { - return (c == '\n' || c == '\r'); -} - -int Document::ExtendStyleRange(int pos, int delta, bool singleLine) { - int sStart = cb.StyleAt(pos); - if (delta < 0) { - while (pos > 0 && (cb.StyleAt(pos) == sStart) && (!singleLine || !IsLineEndChar(cb.CharAt(pos))) ) - pos--; - pos++; - } else { - while (pos < (Length()) && (cb.StyleAt(pos) == sStart) && (!singleLine || !IsLineEndChar(cb.CharAt(pos))) ) - pos++; - } - return pos; -} - -static char BraceOpposite(char ch) { - switch (ch) { - case '(': - return ')'; - case ')': - return '('; - case '[': - return ']'; - case ']': - return '['; - case '{': - return '}'; - case '}': - return '{'; - case '<': - return '>'; - case '>': - return '<'; - default: - return '\0'; - } -} - -// TODO: should be able to extend styled region to find matching brace -int Document::BraceMatch(int position, int /*maxReStyle*/) { - char chBrace = CharAt(position); - char chSeek = BraceOpposite(chBrace); - if (chSeek == '\0') - return - 1; - char styBrace = static_cast(StyleAt(position) & stylingBitsMask); - int direction = -1; - if (chBrace == '(' || chBrace == '[' || chBrace == '{' || chBrace == '<') - direction = 1; - int depth = 1; - position = position + direction; - while ((position >= 0) && (position < Length())) { - position = MovePositionOutsideChar(position, direction); - char chAtPos = CharAt(position); - char styAtPos = static_cast(StyleAt(position) & stylingBitsMask); - if ((position > GetEndStyled()) || (styAtPos == styBrace)) { - if (chAtPos == chBrace) - depth++; - if (chAtPos == chSeek) - depth--; - if (depth == 0) - return position; - } - position = position + direction; - } - return - 1; -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Document.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Document.h deleted file mode 100644 index d774d5664e..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Document.h +++ /dev/null @@ -1,305 +0,0 @@ -// Scintilla source code edit control -/** @file Document.h - ** Text document that handles notifications, DBCS, styling, words and end of line. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef DOCUMENT_H -#define DOCUMENT_H - -/** - * A Position is a position within a document between two characters or at the beginning or end. - * Sometimes used as a character index where it identifies the character after the position. - */ -typedef int Position; -const Position invalidPosition = -1; - -/** - * The range class represents a range of text in a document. - * The two values are not sorted as one end may be more significant than the other - * as is the case for the selection where the end position is the position of the caret. - * If either position is invalidPosition then the range is invalid and most operations will fail. - */ -class Range { -public: - Position start; - Position end; - - Range(Position pos=0) : - start(pos), end(pos) { - }; - Range(Position start_, Position end_) : - start(start_), end(end_) { - }; - - bool Valid() const { - return (start != invalidPosition) && (end != invalidPosition); - } - - // Is the position within the range? - bool Contains(Position pos) const { - if (start < end) { - return (pos >= start && pos <= end); - } else { - return (pos <= start && pos >= end); - } - } - - // Is the character after pos within the range? - bool ContainsCharacter(Position pos) const { - if (start < end) { - return (pos >= start && pos < end); - } else { - return (pos < start && pos >= end); - } - } - - bool Contains(Range other) const { - return Contains(other.start) && Contains(other.end); - } - - bool Overlaps(Range other) const { - return - Contains(other.start) || - Contains(other.end) || - other.Contains(start) || - other.Contains(end); - } -}; - -class DocWatcher; -class DocModification; -class RESearch; - -/** - */ -class Document { - -public: - /** Used to pair watcher pointer with user data. */ - class WatcherWithUserData { - public: - DocWatcher *watcher; - void *userData; - WatcherWithUserData() { - watcher = 0; - userData = 0; - } - }; - - enum charClassification { ccSpace, ccNewLine, ccWord, ccPunctuation }; - -private: - int refCount; - CellBuffer cb; - CharClassify charClass; - char stylingMask; - int endStyled; - int styleClock; - int enteredCount; - int enteredReadOnlyCount; - - WatcherWithUserData *watchers; - int lenWatchers; - - bool matchesValid; - RESearch *pre; - char *substituted; - -public: - int stylingBits; - int stylingBitsMask; - - int eolMode; - /// Can also be SC_CP_UTF8 to enable UTF-8 mode - int dbcsCodePage; - int tabInChars; - int indentInChars; - int actualIndentInChars; - bool useTabs; - bool tabIndents; - bool backspaceUnindents; - - Document(); - virtual ~Document(); - - int AddRef(); - int Release(); - - int LineFromPosition(int pos); - int ClampPositionIntoDocument(int pos); - bool IsCrLf(int pos); - int LenChar(int pos); - int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true); - - // Gateways to modifying document - void ModifiedAt(int pos); - bool DeleteChars(int pos, int len); - bool InsertStyledString(int position, char *s, int insertLength); - int Undo(); - int Redo(); - bool CanUndo() { return cb.CanUndo(); } - bool CanRedo() { return cb.CanRedo(); } - void DeleteUndoHistory() { cb.DeleteUndoHistory(); } - bool SetUndoCollection(bool collectUndo) { - return cb.SetUndoCollection(collectUndo); - } - bool IsCollectingUndo() { return cb.IsCollectingUndo(); } - void BeginUndoAction() { cb.BeginUndoAction(); } - void EndUndoAction() { cb.EndUndoAction(); } - void SetSavePoint(); - bool IsSavePoint() { return cb.IsSavePoint(); } - - int GetLineIndentation(int line); - void SetLineIndentation(int line, int indent); - int GetLineIndentPosition(int line); - int GetColumn(int position); - int FindColumn(int line, int column); - void Indent(bool forwards, int lineBottom, int lineTop); - static char *TransformLineEnds(int *pLenOut, const char *s, size_t len, int eolMode); - void ConvertLineEnds(int eolModeSet); - void SetReadOnly(bool set) { cb.SetReadOnly(set); } - bool IsReadOnly() { return cb.IsReadOnly(); } - - bool InsertChar(int pos, char ch); - bool InsertString(int position, const char *s); - bool InsertString(int position, const char *s, size_t insertLength); - void ChangeChar(int pos, char ch); - void DelChar(int pos); - void DelCharBack(int pos); - - char CharAt(int position) { return cb.CharAt(position); } - void GetCharRange(char *buffer, int position, int lengthRetrieve) { - cb.GetCharRange(buffer, position, lengthRetrieve); - } - char StyleAt(int position) { return cb.StyleAt(position); } - int GetMark(int line) { return cb.GetMark(line); } - int AddMark(int line, int markerNum); - void AddMarkSet(int line, int valueSet); - void DeleteMark(int line, int markerNum); - void DeleteMarkFromHandle(int markerHandle); - void DeleteAllMarks(int markerNum); - int LineFromHandle(int markerHandle) { return cb.LineFromHandle(markerHandle); } - int LineStart(int line); - int LineEnd(int line); - int LineEndPosition(int position); - int VCHomePosition(int position); - - int SetLevel(int line, int level); - int GetLevel(int line) { return cb.GetLevel(line); } - void ClearLevels() { cb.ClearLevels(); } - int GetLastChild(int lineParent, int level=-1); - int GetFoldParent(int line); - - void Indent(bool forwards); - int ExtendWordSelect(int pos, int delta, bool onlyWordCharacters=false); - int NextWordStart(int pos, int delta); - int NextWordEnd(int pos, int delta); - int Length() { return cb.Length(); } - void Allocate(int newSize) { cb.Allocate(newSize*2); } - long FindText(int minPos, int maxPos, const char *s, - bool caseSensitive, bool word, bool wordStart, bool regExp, bool posix, int *length); - long FindText(int iMessage, unsigned long wParam, long lParam); - const char *SubstituteByPosition(const char *text, int *length); - int LinesTotal(); - - void ChangeCase(Range r, bool makeUpperCase); - - void SetDefaultCharClasses(bool includeWordClass); - void SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass); - void SetStylingBits(int bits); - void StartStyling(int position, char mask); - bool SetStyleFor(int length, char style); - bool SetStyles(int length, char *styles); - int GetEndStyled() { return endStyled; } - bool EnsureStyledTo(int pos); - int GetStyleClock() { return styleClock; } - void IncrementStyleClock(); - - int SetLineState(int line, int state) { return cb.SetLineState(line, state); } - int GetLineState(int line) { return cb.GetLineState(line); } - int GetMaxLineState() { return cb.GetMaxLineState(); } - - bool AddWatcher(DocWatcher *watcher, void *userData); - bool RemoveWatcher(DocWatcher *watcher, void *userData); - const WatcherWithUserData *GetWatchers() const { return watchers; } - int GetLenWatchers() const { return lenWatchers; } - - bool IsWordPartSeparator(char ch); - int WordPartLeft(int pos); - int WordPartRight(int pos); - int ExtendStyleRange(int pos, int delta, bool singleLine = false); - bool IsWhiteLine(int line); - int ParaUp(int pos); - int ParaDown(int pos); - int IndentSize() { return actualIndentInChars; } - int BraceMatch(int position, int maxReStyle); - -private: - void CheckReadOnly(); - - CharClassify::cc WordCharClass(unsigned char ch); - bool IsWordStartAt(int pos); - bool IsWordEndAt(int pos); - bool IsWordAt(int start, int end); - - void NotifyModifyAttempt(); - void NotifySavePoint(bool atSavePoint); - void NotifyModified(DocModification mh); -}; - -/** - * To optimise processing of document modifications by DocWatchers, a hint is passed indicating the - * scope of the change. - * If the DocWatcher is a document view then this can be used to optimise screen updating. - */ -class DocModification { -public: - int modificationType; - int position; - int length; - int linesAdded; /**< Negative if lines deleted. */ - const char *text; /**< Only valid for changes to text, not for changes to style. */ - int line; - int foldLevelNow; - int foldLevelPrev; - - DocModification(int modificationType_, int position_=0, int length_=0, - int linesAdded_=0, const char *text_=0, int line_=0) : - modificationType(modificationType_), - position(position_), - length(length_), - linesAdded(linesAdded_), - text(text_), - line(line_), - foldLevelNow(0), - foldLevelPrev(0) {} - - DocModification(int modificationType_, const Action &act, int linesAdded_=0) : - modificationType(modificationType_), - position(act.position), - length(act.lenData), - linesAdded(linesAdded_), - text(act.data), - line(0), - foldLevelNow(0), - foldLevelPrev(0) {} -}; - -/** - * A class that wants to receive notifications from a Document must be derived from DocWatcher - * and implement the notification methods. It can then be added to the watcher list with AddWatcher. - */ -class DocWatcher { -public: - virtual ~DocWatcher() {} - - virtual void NotifyModifyAttempt(Document *doc, void *userData) = 0; - virtual void NotifySavePoint(Document *doc, void *userData, bool atSavePoint) = 0; - virtual void NotifyModified(Document *doc, DocModification mh, void *userData) = 0; - virtual void NotifyDeleted(Document *doc, void *userData) = 0; - virtual void NotifyStyleNeeded(Document *doc, void *userData, int endPos) = 0; -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/DocumentAccessor.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/DocumentAccessor.cxx deleted file mode 100644 index c695c5f510..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/DocumentAccessor.cxx +++ /dev/null @@ -1,187 +0,0 @@ -// Scintilla source code edit control -/** @file DocumentAccessor.cxx - ** Rapid easy access to contents of a Scintilla. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "SVector.h" -#include "Accessor.h" -#include "DocumentAccessor.h" -#include "CellBuffer.h" -#include "Scintilla.h" -#include "CharClassify.h" -#include "Document.h" - -DocumentAccessor::~DocumentAccessor() { -} - -bool DocumentAccessor::InternalIsLeadByte(char ch) { - if (SC_CP_UTF8 == codePage) - // For lexing, all characters >= 0x80 are treated the - // same so none is considered a lead byte. - return false; - else - return Platform::IsDBCSLeadByte(codePage, ch); -} - -void DocumentAccessor::Fill(int position) { - if (lenDoc == -1) - lenDoc = pdoc->Length(); - startPos = position - slopSize; - if (startPos + bufferSize > lenDoc) - startPos = lenDoc - bufferSize; - if (startPos < 0) - startPos = 0; - endPos = startPos + bufferSize; - if (endPos > lenDoc) - endPos = lenDoc; - - pdoc->GetCharRange(buf, startPos, endPos-startPos); - buf[endPos-startPos] = '\0'; -} - -bool DocumentAccessor::Match(int pos, const char *s) { - for (int i=0; *s; i++) { - if (*s != SafeGetCharAt(pos+i)) - return false; - s++; - } - return true; -} - -char DocumentAccessor::StyleAt(int position) { - // Mask off all bits which aren't in the 'mask'. - return static_cast(pdoc->StyleAt(position) & mask); -} - -int DocumentAccessor::GetLine(int position) { - return pdoc->LineFromPosition(position); -} - -int DocumentAccessor::LineStart(int line) { - return pdoc->LineStart(line); -} - -int DocumentAccessor::LevelAt(int line) { - return pdoc->GetLevel(line); -} - -int DocumentAccessor::Length() { - if (lenDoc == -1) - lenDoc = pdoc->Length(); - return lenDoc; -} - -int DocumentAccessor::GetLineState(int line) { - return pdoc->GetLineState(line); -} - -int DocumentAccessor::SetLineState(int line, int state) { - return pdoc->SetLineState(line, state); -} - -void DocumentAccessor::StartAt(unsigned int start, char chMask) { - // Store the mask specified for use with StyleAt. - mask = chMask; - pdoc->StartStyling(start, chMask); - startPosStyling = start; -} - -void DocumentAccessor::StartSegment(unsigned int pos) { - startSeg = pos; -} - -void DocumentAccessor::ColourTo(unsigned int pos, int chAttr) { - // Only perform styling if non empty range - if (pos != startSeg - 1) { - if (pos < startSeg) { - Platform::DebugPrintf("Bad colour positions %d - %d\n", startSeg, pos); - } - - if (validLen + (pos - startSeg + 1) >= bufferSize) - Flush(); - if (validLen + (pos - startSeg + 1) >= bufferSize) { - // Too big for buffer so send directly - pdoc->SetStyleFor(pos - startSeg + 1, static_cast(chAttr)); - } else { - if (chAttr != chWhile) - chFlags = 0; - chAttr |= chFlags; - for (unsigned int i = startSeg; i <= pos; i++) { - PLATFORM_ASSERT((startPosStyling + validLen) < Length()); - styleBuf[validLen++] = static_cast(chAttr); - } - } - } - startSeg = pos+1; -} - -void DocumentAccessor::SetLevel(int line, int level) { - pdoc->SetLevel(line, level); -} - -void DocumentAccessor::Flush() { - startPos = extremePosition; - lenDoc = -1; - if (validLen > 0) { - pdoc->SetStyles(validLen, styleBuf); - startPosStyling += validLen; - validLen = 0; - } -} - -int DocumentAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader) { - int end = Length(); - int spaceFlags = 0; - - // Determines the indentation level of the current line and also checks for consistent - // indentation compared to the previous line. - // Indentation is judged consistent when the indentation whitespace of each line lines - // the same or the indentation of one line is a prefix of the other. - - int pos = LineStart(line); - char ch = (*this)[pos]; - int indent = 0; - bool inPrevPrefix = line > 0; - int posPrev = inPrevPrefix ? LineStart(line-1) : 0; - while ((ch == ' ' || ch == '\t') && (pos < end)) { - if (inPrevPrefix) { - char chPrev = (*this)[posPrev++]; - if (chPrev == ' ' || chPrev == '\t') { - if (chPrev != ch) - spaceFlags |= wsInconsistent; - } else { - inPrevPrefix = false; - } - } - if (ch == ' ') { - spaceFlags |= wsSpace; - indent++; - } else { // Tab - spaceFlags |= wsTab; - if (spaceFlags & wsSpace) - spaceFlags |= wsSpaceTab; - indent = (indent / 8 + 1) * 8; - } - ch = (*this)[++pos]; - } - - *flags = spaceFlags; - indent += SC_FOLDLEVELBASE; - // if completely empty line or the start of a comment... - if ((ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') || - (pfnIsCommentLeader && (*pfnIsCommentLeader)(*this, pos, end-pos)) ) - return indent | SC_FOLDLEVELWHITEFLAG; - else - return indent; -} - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/DocumentAccessor.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/DocumentAccessor.h deleted file mode 100644 index 7406520452..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/DocumentAccessor.h +++ /dev/null @@ -1,67 +0,0 @@ -// Scintilla source code edit control -/** @file DocumentAccessor.h - ** Implementation of BufferAccess and StylingAccess on a Scintilla - ** rapid easy access to contents of a Scintilla. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -class Document; - -/** - */ -class DocumentAccessor : public Accessor { - // Private so DocumentAccessor objects can not be copied - DocumentAccessor(const DocumentAccessor &source) : Accessor(), props(source.props) {} - DocumentAccessor &operator=(const DocumentAccessor &) { return *this; } - -protected: - Document *pdoc; - PropSet &props; - WindowID id; - int lenDoc; - - char styleBuf[bufferSize]; - int validLen; - char chFlags; - char chWhile; - unsigned int startSeg; - int startPosStyling; - int mask; - - bool InternalIsLeadByte(char ch); - void Fill(int position); - -public: - DocumentAccessor(Document *pdoc_, PropSet &props_, WindowID id_=0) : - Accessor(), pdoc(pdoc_), props(props_), id(id_), - lenDoc(-1), validLen(0), chFlags(0), chWhile(0), - startSeg(0), startPosStyling(0), - mask(127) { // Initialize the mask to be big enough for any lexer. - } - ~DocumentAccessor(); - bool Match(int pos, const char *s); - char StyleAt(int position); - int GetLine(int position); - int LineStart(int line); - int LevelAt(int line); - int Length(); - void Flush(); - int GetLineState(int line); - int SetLineState(int line, int state); - int GetPropertyInt(const char *key, int defaultValue=0) { - return props.GetInt(key, defaultValue); - } - char *GetProperties() { - return props.ToString(); - } - WindowID GetWindow() { return id; } - - void StartAt(unsigned int start, char chMask=31); - void SetFlags(char chFlags_, char chWhile_) {chFlags = chFlags_; chWhile = chWhile_; }; - unsigned int GetStartSegment() { return startSeg; } - void StartSegment(unsigned int pos); - void ColourTo(unsigned int pos, int chAttr); - void SetLevel(int line, int level); - int IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader = 0); -}; diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Editor.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Editor.cxx deleted file mode 100644 index a69194f97e..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Editor.cxx +++ /dev/null @@ -1,7298 +0,0 @@ -// Scintilla source code edit control -/** @file Editor.cxx - ** Main code for the edit control. - **/ -// Copyright 1998-2004 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include - -#include "Platform.h" - -#ifndef PLAT_QT -#define INCLUDE_DEPRECATED_FEATURES -#endif -#include "Scintilla.h" - -#include "ContractionState.h" -#include "SVector.h" -#include "CellBuffer.h" -#include "KeyMap.h" -#include "Indicator.h" -#include "XPM.h" -#include "LineMarker.h" -#include "Style.h" -#include "ViewStyle.h" -#include "CharClassify.h" -#include "Document.h" -#include "Editor.h" - -/* - return whether this modification represents an operation that - may reasonably be deferred (not done now OR [possibly] at all) -*/ -static bool CanDeferToLastStep(const DocModification& mh) { - if (mh.modificationType & (SC_MOD_BEFOREINSERT|SC_MOD_BEFOREDELETE)) - return true; // CAN skip - if (!(mh.modificationType & (SC_PERFORMED_UNDO|SC_PERFORMED_REDO))) - return false; // MUST do - if (mh.modificationType & SC_MULTISTEPUNDOREDO) - return true; // CAN skip - return false; // PRESUMABLY must do -} - -static bool CanEliminate(const DocModification& mh) { - return - (mh.modificationType & (SC_MOD_BEFOREINSERT|SC_MOD_BEFOREDELETE)) != 0; -} - -/* - return whether this modification represents the FINAL step - in a [possibly lengthy] multi-step Undo/Redo sequence -*/ -static bool IsLastStep(const DocModification& mh) { - return - (mh.modificationType & (SC_PERFORMED_UNDO|SC_PERFORMED_REDO)) != 0 - && (mh.modificationType & SC_MULTISTEPUNDOREDO) != 0 - && (mh.modificationType & SC_LASTSTEPINUNDOREDO) != 0 - && (mh.modificationType & SC_MULTILINEUNDOREDO) != 0; -} - -Caret::Caret() : -active(false), on(false), period(500) {} - -Timer::Timer() : -ticking(false), ticksToWait(0), tickerID(0) {} - -Idler::Idler() : -state(false), idlerID(0) {} - -LineLayout::LineLayout(int maxLineLength_) : - lineStarts(0), - lenLineStarts(0), - lineNumber(-1), - inCache(false), - maxLineLength(-1), - numCharsInLine(0), - validity(llInvalid), - xHighlightGuide(0), - highlightColumn(0), - selStart(0), - selEnd(0), - containsCaret(false), - edgeColumn(0), - chars(0), - styles(0), - styleBitsSet(0), - indicators(0), - positions(0), - hsStart(0), - hsEnd(0), - widthLine(wrapWidthInfinite), - lines(1) { - Resize(maxLineLength_); -} - -LineLayout::~LineLayout() { - Free(); -} - -void LineLayout::Resize(int maxLineLength_) { - if (maxLineLength_ > maxLineLength) { - Free(); - chars = new char[maxLineLength_ + 1]; - styles = new unsigned char[maxLineLength_ + 1]; - indicators = new char[maxLineLength_ + 1]; - // Extra position allocated as sometimes the Windows - // GetTextExtentExPoint API writes an extra element. - positions = new int[maxLineLength_ + 1 + 1]; - maxLineLength = maxLineLength_; - } -} - -void LineLayout::Free() { - delete []chars; - chars = 0; - delete []styles; - styles = 0; - delete []indicators; - indicators = 0; - delete []positions; - positions = 0; - delete []lineStarts; - lineStarts = 0; -} - -void LineLayout::Invalidate(validLevel validity_) { - if (validity > validity_) - validity = validity_; -} - -void LineLayout::SetLineStart(int line, int start) { - if ((line >= lenLineStarts) && (line != 0)) { - int newMaxLines = line + 20; - int *newLineStarts = new int[newMaxLines]; - if (!newLineStarts) - return; - for (int i = 0; i < newMaxLines; i++) { - if (i < lenLineStarts) - newLineStarts[i] = lineStarts[i]; - else - newLineStarts[i] = 0; - } - delete []lineStarts; - lineStarts = newLineStarts; - lenLineStarts = newMaxLines; - } - lineStarts[line] = start; -} - -void LineLayout::SetBracesHighlight(Range rangeLine, Position braces[], - char bracesMatchStyle, int xHighlight) { - if (rangeLine.ContainsCharacter(braces[0])) { - int braceOffset = braces[0] - rangeLine.start; - if (braceOffset < numCharsInLine) { - bracePreviousStyles[0] = styles[braceOffset]; - styles[braceOffset] = bracesMatchStyle; - } - } - if (rangeLine.ContainsCharacter(braces[1])) { - int braceOffset = braces[1] - rangeLine.start; - if (braceOffset < numCharsInLine) { - bracePreviousStyles[1] = styles[braceOffset]; - styles[braceOffset] = bracesMatchStyle; - } - } - if ((braces[0] >= rangeLine.start && braces[1] <= rangeLine.end) || - (braces[1] >= rangeLine.start && braces[0] <= rangeLine.end)) { - xHighlightGuide = xHighlight; - } -} - -void LineLayout::RestoreBracesHighlight(Range rangeLine, Position braces[]) { - if (rangeLine.ContainsCharacter(braces[0])) { - int braceOffset = braces[0] - rangeLine.start; - if (braceOffset < numCharsInLine) { - styles[braceOffset] = bracePreviousStyles[0]; - } - } - if (rangeLine.ContainsCharacter(braces[1])) { - int braceOffset = braces[1] - rangeLine.start; - if (braceOffset < numCharsInLine) { - styles[braceOffset] = bracePreviousStyles[1]; - } - } - xHighlightGuide = 0; -} - -LineLayoutCache::LineLayoutCache() : - level(0), length(0), size(0), cache(0), - allInvalidated(false), styleClock(-1), useCount(0) { - Allocate(0); -} - -LineLayoutCache::~LineLayoutCache() { - Deallocate(); -} - -void LineLayoutCache::Allocate(int length_) { - PLATFORM_ASSERT(cache == NULL); - allInvalidated = false; - length = length_; - size = length; - if (size > 1) { - size = (size / 16 + 1) * 16; - } - if (size > 0) { - cache = new LineLayout * [size]; - } - for (int i = 0; i < size; i++) - cache[i] = 0; -} - -void LineLayoutCache::AllocateForLevel(int linesOnScreen, int linesInDoc) { - PLATFORM_ASSERT(useCount == 0); - int lengthForLevel = 0; - if (level == llcCaret) { - lengthForLevel = 1; - } else if (level == llcPage) { - lengthForLevel = linesOnScreen + 1; - } else if (level == llcDocument) { - lengthForLevel = linesInDoc; - } - if (lengthForLevel > size) { - Deallocate(); - Allocate(lengthForLevel); - } else { - if (lengthForLevel < length) { - for (int i = lengthForLevel; i < length; i++) { - delete cache[i]; - cache[i] = 0; - } - } - length = lengthForLevel; - } - PLATFORM_ASSERT(length == lengthForLevel); - PLATFORM_ASSERT(cache != NULL || length == 0); -} - -void LineLayoutCache::Deallocate() { - PLATFORM_ASSERT(useCount == 0); - for (int i = 0; i < length; i++) - delete cache[i]; - delete []cache; - cache = 0; - length = 0; - size = 0; -} - -void LineLayoutCache::Invalidate(LineLayout::validLevel validity_) { - if (cache && !allInvalidated) { - for (int i = 0; i < length; i++) { - if (cache[i]) { - cache[i]->Invalidate(validity_); - } - } - if (validity_ == LineLayout::llInvalid) { - allInvalidated = true; - } - } -} - -void LineLayoutCache::SetLevel(int level_) { - allInvalidated = false; - if ((level_ != -1) && (level != level_)) { - level = level_; - Deallocate(); - } -} - -LineLayout *LineLayoutCache::Retrieve(int lineNumber, int lineCaret, int maxChars, int styleClock_, - int linesOnScreen, int linesInDoc) { - AllocateForLevel(linesOnScreen, linesInDoc); - if (styleClock != styleClock_) { - Invalidate(LineLayout::llCheckTextAndStyle); - styleClock = styleClock_; - } - allInvalidated = false; - int pos = -1; - LineLayout *ret = 0; - if (level == llcCaret) { - pos = 0; - } else if (level == llcPage) { - if (lineNumber == lineCaret) { - pos = 0; - } else if (length > 1) { - pos = 1 + (lineNumber % (length - 1)); - } - } else if (level == llcDocument) { - pos = lineNumber; - } - if (pos >= 0) { - PLATFORM_ASSERT(useCount == 0); - if (cache && (pos < length)) { - if (cache[pos]) { - if ((cache[pos]->lineNumber != lineNumber) || - (cache[pos]->maxLineLength < maxChars)) { - delete cache[pos]; - cache[pos] = 0; - } - } - if (!cache[pos]) { - cache[pos] = new LineLayout(maxChars); - } - if (cache[pos]) { - cache[pos]->lineNumber = lineNumber; - cache[pos]->inCache = true; - ret = cache[pos]; - useCount++; - } - } - } - - if (!ret) { - ret = new LineLayout(maxChars); - ret->lineNumber = lineNumber; - } - - return ret; -} - -void LineLayoutCache::Dispose(LineLayout *ll) { - allInvalidated = false; - if (ll) { - if (!ll->inCache) { - delete ll; - } else { - useCount--; - } - } -} - -Editor::Editor() { - ctrlID = 0; - - stylesValid = false; - - printMagnification = 0; - printColourMode = SC_PRINT_NORMAL; - printWrapState = eWrapWord; - cursorMode = SC_CURSORNORMAL; - controlCharSymbol = 0; /* Draw the control characters */ - - hasFocus = false; - hideSelection = false; - inOverstrike = false; - errorStatus = 0; - mouseDownCaptures = true; - - bufferedDraw = true; - twoPhaseDraw = true; - - lastClickTime = 0; - dwellDelay = SC_TIME_FOREVER; - ticksToDwell = SC_TIME_FOREVER; - dwelling = false; - ptMouseLast.x = 0; - ptMouseLast.y = 0; - inDragDrop = false; - dropWentOutside = false; - posDrag = invalidPosition; - posDrop = invalidPosition; - selectionType = selChar; - - lastXChosen = 0; - lineAnchor = 0; - originalAnchorPos = 0; - - selType = selStream; - moveExtendsSelection = false; - xStartSelect = 0; - xEndSelect = 0; - primarySelection = true; - - caretXPolicy = CARET_SLOP | CARET_EVEN; - caretXSlop = 50; - - caretYPolicy = CARET_EVEN; - caretYSlop = 0; - - searchAnchor = 0; - - xOffset = 0; - xCaretMargin = 50; - horizontalScrollBarVisible = true; - scrollWidth = 2000; - verticalScrollBarVisible = true; - endAtLastLine = true; - caretSticky = false; - - pixmapLine = Surface::Allocate(); - pixmapSelMargin = Surface::Allocate(); - pixmapSelPattern = Surface::Allocate(); - pixmapIndentGuide = Surface::Allocate(); - pixmapIndentGuideHighlight = Surface::Allocate(); - - currentPos = 0; - anchor = 0; - - targetStart = 0; - targetEnd = 0; - searchFlags = 0; - - topLine = 0; - posTopLine = 0; - - lengthForEncode = -1; - - needUpdateUI = true; - braces[0] = invalidPosition; - braces[1] = invalidPosition; - bracesMatchStyle = STYLE_BRACEBAD; - highlightGuideColumn = 0; - - theEdge = 0; - - paintState = notPainting; - - modEventMask = SC_MODEVENTMASKALL; - - pdoc = new Document(); - pdoc->AddRef(); - pdoc->AddWatcher(this, 0); - - recordingMacro = false; - foldFlags = 0; - - wrapState = eWrapNone; - wrapWidth = LineLayout::wrapWidthInfinite; - wrapStart = wrapLineLarge; - wrapEnd = wrapLineLarge; - wrapVisualFlags = 0; - wrapVisualFlagsLocation = 0; - wrapVisualStartIndent = 0; - actualWrapVisualStartIndent = 0; - - convertPastes = true; - - hsStart = -1; - hsEnd = -1; - - llc.SetLevel(LineLayoutCache::llcCaret); -} - -Editor::~Editor() { - pdoc->RemoveWatcher(this, 0); - pdoc->Release(); - pdoc = 0; - DropGraphics(); - delete pixmapLine; - delete pixmapSelMargin; - delete pixmapSelPattern; - delete pixmapIndentGuide; - delete pixmapIndentGuideHighlight; -} - -void Editor::Finalise() { - SetIdle(false); - CancelModes(); -} - -void Editor::DropGraphics() { - pixmapLine->Release(); - pixmapSelMargin->Release(); - pixmapSelPattern->Release(); - pixmapIndentGuide->Release(); - pixmapIndentGuideHighlight->Release(); -} - -void Editor::InvalidateStyleData() { - stylesValid = false; - palette.Release(); - DropGraphics(); - llc.Invalidate(LineLayout::llInvalid); - if (selType == selRectangle) { - xStartSelect = XFromPosition(anchor); - xEndSelect = XFromPosition(currentPos); - } -} - -void Editor::InvalidateStyleRedraw() { - NeedWrapping(); - InvalidateStyleData(); - Redraw(); -} - -void Editor::RefreshColourPalette(Palette &pal, bool want) { - vs.RefreshColourPalette(pal, want); -} - -void Editor::RefreshStyleData() { - if (!stylesValid) { - stylesValid = true; - AutoSurface surface(this); - if (surface) { - vs.Refresh(*surface); - RefreshColourPalette(palette, true); - palette.Allocate(wMain); - RefreshColourPalette(palette, false); - } - SetScrollBars(); - } -} - -PRectangle Editor::GetClientRectangle() { - return wMain.GetClientPosition(); -} - -PRectangle Editor::GetTextRectangle() { - PRectangle rc = GetClientRectangle(); - rc.left += vs.fixedColumnWidth; - rc.right -= vs.rightMarginWidth; - return rc; -} - -int Editor::LinesOnScreen() { - PRectangle rcClient = GetClientRectangle(); - int htClient = rcClient.bottom - rcClient.top; - //Platform::DebugPrintf("lines on screen = %d\n", htClient / lineHeight + 1); - int n = htClient / vs.lineHeight; - if (n < 0) - n = 0; - return n; -} - -int Editor::LinesToScroll() { - int retVal = LinesOnScreen() - 1; - if (retVal < 1) - return 1; - else - return retVal; -} - -int Editor::MaxScrollPos() { - //Platform::DebugPrintf("Lines %d screen = %d maxScroll = %d\n", - //LinesTotal(), LinesOnScreen(), LinesTotal() - LinesOnScreen() + 1); - int retVal = cs.LinesDisplayed(); - if (endAtLastLine) { - retVal -= LinesOnScreen(); - } else { - retVal--; - } - if (retVal < 0) { - return 0; - } else { - return retVal; - } -} - -static inline bool IsControlCharacter(int ch) { - // iscntrl returns true for lots of chars > 127 which are displayable - return ch >= 0 && ch < ' '; -} - -const char *ControlCharacterString(unsigned char ch) { - const char *reps[] = { - "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", - "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI", - "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", - "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US" - }; - if (ch < (sizeof(reps) / sizeof(reps[0]))) { - return reps[ch]; - } else { - return "BAD"; - } -} - -/** - * Convenience class to ensure LineLayout objects are always disposed. - */ -class AutoLineLayout { - LineLayoutCache &llc; - LineLayout *ll; - AutoLineLayout &operator=(const AutoLineLayout &) { return * this; } -public: - AutoLineLayout(LineLayoutCache &llc_, LineLayout *ll_) : llc(llc_), ll(ll_) {} - ~AutoLineLayout() { - llc.Dispose(ll); - ll = 0; - } - LineLayout *operator->() const { - return ll; - } - operator LineLayout *() const { - return ll; - } - void Set(LineLayout *ll_) { - llc.Dispose(ll); - ll = ll_; - } -}; - -/** - * Allows to iterate through the lines of a selection. - * Althought it can be called for a stream selection, in most cases - * it is inefficient and it should be used only for - * a rectangular or a line selection. - */ -class SelectionLineIterator { -private: - Editor *ed; - int line; ///< Current line within the iteration. - bool forward; ///< True if iterating by increasing line number, false otherwise. - int selStart, selEnd; ///< Positions of the start and end of the selection relative to the start of the document. - int minX, maxX; ///< Left and right of selection rectangle. - -public: - int lineStart, lineEnd; ///< Line numbers, first and last lines of the selection. - int startPos, endPos; ///< Positions of the beginning and end of the selection on the current line. - - void Reset() { - if (forward) { - line = lineStart; - } else { - line = lineEnd; - } - } - - SelectionLineIterator(Editor *ed_, bool forward_ = true) : line(0), startPos(0), endPos(0) { - ed = ed_; - forward = forward_; - selStart = ed->SelectionStart(); - selEnd = ed->SelectionEnd(); - lineStart = ed->pdoc->LineFromPosition(selStart); - lineEnd = ed->pdoc->LineFromPosition(selEnd); - // Left of rectangle - minX = Platform::Minimum(ed->xStartSelect, ed->xEndSelect); - // Right of rectangle - maxX = Platform::Maximum(ed->xStartSelect, ed->xEndSelect); - Reset(); - } - ~SelectionLineIterator() {} - - void SetAt(int line) { - if (line < lineStart || line > lineEnd) { - startPos = endPos = INVALID_POSITION; - } else { - if (ed->selType == ed->selRectangle) { - // Measure line and return character closest to minX - startPos = ed->PositionFromLineX(line, minX); - // Measure line and return character closest to maxX - endPos = ed->PositionFromLineX(line, maxX); - } else if (ed->selType == ed->selLines) { - startPos = ed->pdoc->LineStart(line); - endPos = ed->pdoc->LineStart(line + 1); - } else { // Stream selection, here only for completion - if (line == lineStart) { - startPos = selStart; - } else { - startPos = ed->pdoc->LineStart(line); - } - if (line == lineEnd) { - endPos = selEnd; - } else { - endPos = ed->pdoc->LineStart(line + 1); - } - } - } - } - bool Iterate() { - SetAt(line); - if (forward) { - line++; - } else { - line--; - } - return startPos != INVALID_POSITION; - } -}; - -Point Editor::LocationFromPosition(int pos) { - Point pt; - RefreshStyleData(); - if (pos == INVALID_POSITION) - return pt; - int line = pdoc->LineFromPosition(pos); - int lineVisible = cs.DisplayFromDoc(line); - //Platform::DebugPrintf("line=%d\n", line); - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(line)); - if (surface && ll) { - // -1 because of adding in for visible lines in following loop. - pt.y = (lineVisible - topLine - 1) * vs.lineHeight; - pt.x = 0; - unsigned int posLineStart = pdoc->LineStart(line); - LayoutLine(line, surface, vs, ll, wrapWidth); - int posInLine = pos - posLineStart; - // In case of very long line put x at arbitrary large position - if (posInLine > ll->maxLineLength) { - pt.x = ll->positions[ll->maxLineLength] - ll->positions[ll->LineStart(ll->lines)]; - } - - for (int subLine = 0; subLine < ll->lines; subLine++) { - if ((posInLine >= ll->LineStart(subLine)) && (posInLine <= ll->LineStart(subLine + 1))) { - pt.x = ll->positions[posInLine] - ll->positions[ll->LineStart(subLine)]; - if (actualWrapVisualStartIndent != 0) { - int lineStart = ll->LineStart(subLine); - if (lineStart != 0) // Wrapped - pt.x += actualWrapVisualStartIndent * vs.aveCharWidth; - } - } - if (posInLine >= ll->LineStart(subLine)) { - pt.y += vs.lineHeight; - } - } - pt.x += vs.fixedColumnWidth - xOffset; - } - return pt; -} - -int Editor::XFromPosition(int pos) { - Point pt = LocationFromPosition(pos); - return pt.x - vs.fixedColumnWidth + xOffset; -} - -int Editor::LineFromLocation(Point pt) { - return cs.DocFromDisplay(pt.y / vs.lineHeight + topLine); -} - -void Editor::SetTopLine(int topLineNew) { - topLine = topLineNew; - posTopLine = pdoc->LineStart(cs.DocFromDisplay(topLine)); -} - -static inline bool IsEOLChar(char ch) { - return (ch == '\r') || (ch == '\n'); -} - -int Editor::PositionFromLocation(Point pt) { - RefreshStyleData(); - pt.x = pt.x - vs.fixedColumnWidth + xOffset; - int visibleLine = pt.y / vs.lineHeight + topLine; - if (pt.y < 0) { // Division rounds towards 0 - visibleLine = (pt.y - (vs.lineHeight - 1)) / vs.lineHeight + topLine; - } - if (visibleLine < 0) - visibleLine = 0; - int lineDoc = cs.DocFromDisplay(visibleLine); - if (lineDoc >= pdoc->LinesTotal()) - return pdoc->Length(); - unsigned int posLineStart = pdoc->LineStart(lineDoc); - int retVal = posLineStart; - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc)); - if (surface && ll) { - LayoutLine(lineDoc, surface, vs, ll, wrapWidth); - int lineStartSet = cs.DisplayFromDoc(lineDoc); - int subLine = visibleLine - lineStartSet; - if (subLine < ll->lines) { - int lineStart = ll->LineStart(subLine); - int lineEnd = ll->LineStart(subLine + 1); - int subLineStart = ll->positions[lineStart]; - - if (actualWrapVisualStartIndent != 0) { - if (lineStart != 0) // Wrapped - pt.x -= actualWrapVisualStartIndent * vs.aveCharWidth; - } - for (int i = lineStart; i < lineEnd; i++) { - if (pt.x < (((ll->positions[i] + ll->positions[i + 1]) / 2) - subLineStart) || - IsEOLChar(ll->chars[i])) { - return pdoc->MovePositionOutsideChar(i + posLineStart, 1); - } - } - return lineEnd + posLineStart; - } - retVal = ll->numCharsInLine + posLineStart; - } - return retVal; -} - -// Like PositionFromLocation but INVALID_POSITION returned when not near any text. -int Editor::PositionFromLocationClose(Point pt) { - RefreshStyleData(); - PRectangle rcClient = GetTextRectangle(); - if (!rcClient.Contains(pt)) - return INVALID_POSITION; - if (pt.x < vs.fixedColumnWidth) - return INVALID_POSITION; - if (pt.y < 0) - return INVALID_POSITION; - pt.x = pt.x - vs.fixedColumnWidth + xOffset; - int visibleLine = pt.y / vs.lineHeight + topLine; - if (pt.y < 0) { // Division rounds towards 0 - visibleLine = (pt.y - (vs.lineHeight - 1)) / vs.lineHeight + topLine; - } - int lineDoc = cs.DocFromDisplay(visibleLine); - if (lineDoc < 0) - return INVALID_POSITION; - if (lineDoc >= pdoc->LinesTotal()) - return INVALID_POSITION; - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc)); - if (surface && ll) { - LayoutLine(lineDoc, surface, vs, ll, wrapWidth); - unsigned int posLineStart = pdoc->LineStart(lineDoc); - int lineStartSet = cs.DisplayFromDoc(lineDoc); - int subLine = visibleLine - lineStartSet; - if (subLine < ll->lines) { - int lineStart = ll->LineStart(subLine); - int lineEnd = ll->LineStart(subLine + 1); - int subLineStart = ll->positions[lineStart]; - - if (actualWrapVisualStartIndent != 0) { - if (lineStart != 0) // Wrapped - pt.x -= actualWrapVisualStartIndent * vs.aveCharWidth; - } - for (int i = lineStart; i < lineEnd; i++) { - if (pt.x < (((ll->positions[i] + ll->positions[i + 1]) / 2) - subLineStart) || - IsEOLChar(ll->chars[i])) { - return pdoc->MovePositionOutsideChar(i + posLineStart, 1); - } - } - if (pt.x < (ll->positions[lineEnd] - subLineStart)) { - return pdoc->MovePositionOutsideChar(lineEnd + posLineStart, 1); - } - } - } - - return INVALID_POSITION; -} - -/** - * Find the document position corresponding to an x coordinate on a particular document line. - * Ensure is between whole characters when document is in multi-byte or UTF-8 mode. - */ -int Editor::PositionFromLineX(int lineDoc, int x) { - RefreshStyleData(); - if (lineDoc >= pdoc->LinesTotal()) - return pdoc->Length(); - //Platform::DebugPrintf("Position of (%d,%d) line = %d top=%d\n", pt.x, pt.y, line, topLine); - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc)); - int retVal = 0; - if (surface && ll) { - unsigned int posLineStart = pdoc->LineStart(lineDoc); - LayoutLine(lineDoc, surface, vs, ll, wrapWidth); - retVal = ll->numCharsInLine + posLineStart; - int subLine = 0; - int lineStart = ll->LineStart(subLine); - int lineEnd = ll->LineStart(subLine + 1); - int subLineStart = ll->positions[lineStart]; - - if (actualWrapVisualStartIndent != 0) { - if (lineStart != 0) // Wrapped - x -= actualWrapVisualStartIndent * vs.aveCharWidth; - } - for (int i = lineStart; i < lineEnd; i++) { - if (x < (((ll->positions[i] + ll->positions[i + 1]) / 2) - subLineStart) || - IsEOLChar(ll->chars[i])) { - retVal = pdoc->MovePositionOutsideChar(i + posLineStart, 1); - break; - } - } - } - return retVal; -} - -/** - * If painting then abandon the painting because a wider redraw is needed. - * @return true if calling code should stop drawing. - */ -bool Editor::AbandonPaint() { - if ((paintState == painting) && !paintingAllText) { - paintState = paintAbandoned; - } - return paintState == paintAbandoned; -} - -void Editor::RedrawRect(PRectangle rc) { - //Platform::DebugPrintf("Redraw %0d,%0d - %0d,%0d\n", rc.left, rc.top, rc.right, rc.bottom); - - // Clip the redraw rectangle into the client area - PRectangle rcClient = GetClientRectangle(); - if (rc.top < rcClient.top) - rc.top = rcClient.top; - if (rc.bottom > rcClient.bottom) - rc.bottom = rcClient.bottom; - if (rc.left < rcClient.left) - rc.left = rcClient.left; - if (rc.right > rcClient.right) - rc.right = rcClient.right; - - if ((rc.bottom > rc.top) && (rc.right > rc.left)) { - wMain.InvalidateRectangle(rc); - } -} - -void Editor::Redraw() { - //Platform::DebugPrintf("Redraw all\n"); - PRectangle rcClient = GetClientRectangle(); - wMain.InvalidateRectangle(rcClient); - //wMain.InvalidateAll(); -} - -void Editor::RedrawSelMargin(int line) { - if (!AbandonPaint()) { - if (vs.maskInLine) { - Redraw(); - } else { - PRectangle rcSelMargin = GetClientRectangle(); - rcSelMargin.right = vs.fixedColumnWidth; - if (line != -1) { - int position = pdoc->LineStart(line); - PRectangle rcLine = RectangleFromRange(position, position); - rcSelMargin.top = rcLine.top; - rcSelMargin.bottom = rcLine.bottom; - } - wMain.InvalidateRectangle(rcSelMargin); - } - } -} - -PRectangle Editor::RectangleFromRange(int start, int end) { - int minPos = start; - if (minPos > end) - minPos = end; - int maxPos = start; - if (maxPos < end) - maxPos = end; - int minLine = cs.DisplayFromDoc(pdoc->LineFromPosition(minPos)); - int lineDocMax = pdoc->LineFromPosition(maxPos); - int maxLine = cs.DisplayFromDoc(lineDocMax) + cs.GetHeight(lineDocMax) - 1; - PRectangle rcClient = GetTextRectangle(); - PRectangle rc; - rc.left = vs.fixedColumnWidth; - rc.top = (minLine - topLine) * vs.lineHeight; - if (rc.top < 0) - rc.top = 0; - rc.right = rcClient.right; - rc.bottom = (maxLine - topLine + 1) * vs.lineHeight; - // Ensure PRectangle is within 16 bit space - rc.top = Platform::Clamp(rc.top, -32000, 32000); - rc.bottom = Platform::Clamp(rc.bottom, -32000, 32000); - - return rc; -} - -void Editor::InvalidateRange(int start, int end) { - RedrawRect(RectangleFromRange(start, end)); -} - -int Editor::CurrentPosition() { - return currentPos; -} - -bool Editor::SelectionEmpty() { - return anchor == currentPos; -} - -int Editor::SelectionStart() { - return Platform::Minimum(currentPos, anchor); -} - -int Editor::SelectionEnd() { - return Platform::Maximum(currentPos, anchor); -} - -void Editor::SetRectangularRange() { - if (selType == selRectangle) { - xStartSelect = XFromPosition(anchor); - xEndSelect = XFromPosition(currentPos); - } -} - -void Editor::InvalidateSelection(int currentPos_, int anchor_) { - int firstAffected = anchor; - if (firstAffected > currentPos) - firstAffected = currentPos; - if (firstAffected > anchor_) - firstAffected = anchor_; - if (firstAffected > currentPos_) - firstAffected = currentPos_; - int lastAffected = anchor; - if (lastAffected < currentPos) - lastAffected = currentPos; - if (lastAffected < anchor_) - lastAffected = anchor_; - if (lastAffected < (currentPos_ + 1)) // +1 ensures caret repainted - lastAffected = (currentPos_ + 1); - needUpdateUI = true; - InvalidateRange(firstAffected, lastAffected); -} - -void Editor::SetSelection(int currentPos_, int anchor_) { - currentPos_ = pdoc->ClampPositionIntoDocument(currentPos_); - anchor_ = pdoc->ClampPositionIntoDocument(anchor_); - if ((currentPos != currentPos_) || (anchor != anchor_)) { - InvalidateSelection(currentPos_, anchor_); - currentPos = currentPos_; - anchor = anchor_; - } - SetRectangularRange(); - ClaimSelection(); -} - -void Editor::SetSelection(int currentPos_) { - currentPos_ = pdoc->ClampPositionIntoDocument(currentPos_); - if (currentPos != currentPos_) { - InvalidateSelection(currentPos_, currentPos_); - currentPos = currentPos_; - } - SetRectangularRange(); - ClaimSelection(); -} - -void Editor::SetEmptySelection(int currentPos_) { - selType = selStream; - moveExtendsSelection = false; - SetSelection(currentPos_, currentPos_); -} - -bool Editor::RangeContainsProtected(int start, int end) const { - if (vs.ProtectionActive()) { - if (start > end) { - int t = start; - start = end; - end = t; - } - int mask = pdoc->stylingBitsMask; - for (int pos = start; pos < end; pos++) { - if (vs.styles[pdoc->StyleAt(pos) & mask].IsProtected()) - return true; - } - } - return false; -} - -bool Editor::SelectionContainsProtected() { - // DONE, but untested...: make support rectangular selection - bool scp = false; - if (selType == selStream) { - scp = RangeContainsProtected(anchor, currentPos); - } else { - SelectionLineIterator lineIterator(this); - while (lineIterator.Iterate()) { - if (RangeContainsProtected(lineIterator.startPos, lineIterator.endPos)) { - scp = true; - break; - } - } - } - return scp; -} - -/** - * Asks document to find a good position and then moves out of any invisible positions. - */ -int Editor::MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd) { - pos = pdoc->MovePositionOutsideChar(pos, moveDir, checkLineEnd); - if (vs.ProtectionActive()) { - int mask = pdoc->stylingBitsMask; - if (moveDir > 0) { - if ((pos > 0) && vs.styles[pdoc->StyleAt(pos - 1) & mask].IsProtected()) { - while ((pos < pdoc->Length()) && - (vs.styles[pdoc->StyleAt(pos) & mask].IsProtected())) - pos++; - } - } else if (moveDir < 0) { - if (vs.styles[pdoc->StyleAt(pos) & mask].IsProtected()) { - while ((pos > 0) && - (vs.styles[pdoc->StyleAt(pos - 1) & mask].IsProtected())) - pos--; - } - } - } - return pos; -} - -int Editor::MovePositionTo(int newPos, selTypes sel, bool ensureVisible) { - int delta = newPos - currentPos; - newPos = pdoc->ClampPositionIntoDocument(newPos); - newPos = MovePositionOutsideChar(newPos, delta); - if (sel != noSel) { - selType = sel; - } - if (sel != noSel || moveExtendsSelection) { - SetSelection(newPos); - } else { - SetEmptySelection(newPos); - } - ShowCaretAtCurrentPosition(); - if (ensureVisible) { - EnsureCaretVisible(); - } - NotifyMove(newPos); - return 0; -} - -int Editor::MovePositionSoVisible(int pos, int moveDir) { - pos = pdoc->ClampPositionIntoDocument(pos); - pos = MovePositionOutsideChar(pos, moveDir); - int lineDoc = pdoc->LineFromPosition(pos); - if (cs.GetVisible(lineDoc)) { - return pos; - } else { - int lineDisplay = cs.DisplayFromDoc(lineDoc); - if (moveDir > 0) { - // lineDisplay is already line before fold as lines in fold use display line of line after fold - lineDisplay = Platform::Clamp(lineDisplay, 0, cs.LinesDisplayed()); - return pdoc->LineStart(cs.DocFromDisplay(lineDisplay)); - } else { - lineDisplay = Platform::Clamp(lineDisplay - 1, 0, cs.LinesDisplayed()); - return pdoc->LineEnd(cs.DocFromDisplay(lineDisplay)); - } - } -} - -/** - * Choose the x position that the caret will try to stick to - * as it moves up and down. - */ -void Editor::SetLastXChosen() { - Point pt = LocationFromPosition(currentPos); - lastXChosen = pt.x; -} - -void Editor::ScrollTo(int line, bool moveThumb) { - int topLineNew = Platform::Clamp(line, 0, MaxScrollPos()); - if (topLineNew != topLine) { - // Try to optimise small scrolls - int linesToMove = topLine - topLineNew; - SetTopLine(topLineNew); - ShowCaretAtCurrentPosition(); - // Perform redraw rather than scroll if many lines would be redrawn anyway. -#ifndef UNDER_CE - if (abs(linesToMove) <= 10) { - ScrollText(linesToMove); - } else { - Redraw(); - } -#else - Redraw(); -#endif - if (moveThumb) { - SetVerticalScrollPos(); - } - } -} - -void Editor::ScrollText(int /* linesToMove */) { - //Platform::DebugPrintf("Editor::ScrollText %d\n", linesToMove); - Redraw(); -} - -void Editor::HorizontalScrollTo(int xPos) { - //Platform::DebugPrintf("HorizontalScroll %d\n", xPos); - if (xPos < 0) - xPos = 0; - if ((wrapState == eWrapNone) && (xOffset != xPos)) { - xOffset = xPos; - SetHorizontalScrollPos(); - RedrawRect(GetClientRectangle()); - } -} - -void Editor::MoveCaretInsideView(bool ensureVisible) { - PRectangle rcClient = GetTextRectangle(); - Point pt = LocationFromPosition(currentPos); - if (pt.y < rcClient.top) { - MovePositionTo(PositionFromLocation( - Point(lastXChosen, rcClient.top)), - noSel, ensureVisible); - } else if ((pt.y + vs.lineHeight - 1) > rcClient.bottom) { - int yOfLastLineFullyDisplayed = rcClient.top + (LinesOnScreen() - 1) * vs.lineHeight; - MovePositionTo(PositionFromLocation( - Point(lastXChosen, rcClient.top + yOfLastLineFullyDisplayed)), - noSel, ensureVisible); - } -} - -int Editor::DisplayFromPosition(int pos) { - int lineDoc = pdoc->LineFromPosition(pos); - int lineDisplay = cs.DisplayFromDoc(lineDoc); - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc)); - if (surface && ll) { - LayoutLine(lineDoc, surface, vs, ll, wrapWidth); - unsigned int posLineStart = pdoc->LineStart(lineDoc); - int posInLine = pos - posLineStart; - lineDisplay--; // To make up for first increment ahead. - for (int subLine = 0; subLine < ll->lines; subLine++) { - if (posInLine >= ll->LineStart(subLine)) { - lineDisplay++; - } - } - } - return lineDisplay; -} - -/** - * Ensure the caret is reasonably visible in context. - * -Caret policy in SciTE - -If slop is set, we can define a slop value. -This value defines an unwanted zone (UZ) where the caret is... unwanted. -This zone is defined as a number of pixels near the vertical margins, -and as a number of lines near the horizontal margins. -By keeping the caret away from the edges, it is seen within its context, -so it is likely that the identifier that the caret is on can be completely seen, -and that the current line is seen with some of the lines following it which are -often dependent on that line. - -If strict is set, the policy is enforced... strictly. -The caret is centred on the display if slop is not set, -and cannot go in the UZ if slop is set. - -If jumps is set, the display is moved more energetically -so the caret can move in the same direction longer before the policy is applied again. -'3UZ' notation is used to indicate three time the size of the UZ as a distance to the margin. - -If even is not set, instead of having symmetrical UZs, -the left and bottom UZs are extended up to right and top UZs respectively. -This way, we favour the displaying of useful information: the begining of lines, -where most code reside, and the lines after the caret, eg. the body of a function. - - | | | | | -slop | strict | jumps | even | Caret can go to the margin | When reaching limitÝ(caret going out of - | | | | | visibility or going into the UZ) display is... ------+--------+-------+------+--------------------------------------------+-------------------------------------------------------------- - 0 | 0 | 0 | 0 | Yes | moved to put caret on top/on right - 0 | 0 | 0 | 1 | Yes | moved by one position - 0 | 0 | 1 | 0 | Yes | moved to put caret on top/on right - 0 | 0 | 1 | 1 | Yes | centred on the caret - 0 | 1 | - | 0 | Caret is always on top/on right of display | - - 0 | 1 | - | 1 | No, caret is always centred | - - 1 | 0 | 0 | 0 | Yes | moved to put caret out of the asymmetrical UZ - 1 | 0 | 0 | 1 | Yes | moved to put caret out of the UZ - 1 | 0 | 1 | 0 | Yes | moved to put caret at 3UZ of the top or right margin - 1 | 0 | 1 | 1 | Yes | moved to put caret at 3UZ of the margin - 1 | 1 | - | 0 | Caret is always at UZ of top/right margin | - - 1 | 1 | 0 | 1 | No, kept out of UZ | moved by one position - 1 | 1 | 1 | 1 | No, kept out of UZ | moved to put caret at 3UZ of the margin -*/ -void Editor::EnsureCaretVisible(bool useMargin, bool vert, bool horiz) { - //Platform::DebugPrintf("EnsureCaretVisible %d %s\n", xOffset, useMargin ? " margin" : " "); - PRectangle rcClient = GetTextRectangle(); - //int rcClientFullWidth = rcClient.Width(); - int posCaret = currentPos; - if (posDrag >= 0) { - posCaret = posDrag; - } - Point pt = LocationFromPosition(posCaret); - Point ptBottomCaret = pt; - ptBottomCaret.y += vs.lineHeight - 1; - int lineCaret = DisplayFromPosition(posCaret); - bool bSlop, bStrict, bJump, bEven; - - // Vertical positioning - if (vert && (pt.y < rcClient.top || ptBottomCaret.y > rcClient.bottom || (caretYPolicy & CARET_STRICT) != 0)) { - int linesOnScreen = LinesOnScreen(); - int halfScreen = Platform::Maximum(linesOnScreen - 1, 2) / 2; - int newTopLine = topLine; - bSlop = (caretYPolicy & CARET_SLOP) != 0; - bStrict = (caretYPolicy & CARET_STRICT) != 0; - bJump = (caretYPolicy & CARET_JUMPS) != 0; - bEven = (caretYPolicy & CARET_EVEN) != 0; - - // It should be possible to scroll the window to show the caret, - // but this fails to remove the caret on GTK+ - if (bSlop) { // A margin is defined - int yMoveT, yMoveB; - if (bStrict) { - int yMarginT, yMarginB; - if (!useMargin) { - // In drag mode, avoid moves - // otherwise, a double click will select several lines. - yMarginT = yMarginB = 0; - } else { - // yMarginT must equal to caretYSlop, with a minimum of 1 and - // a maximum of slightly less than half the heigth of the text area. - yMarginT = Platform::Clamp(caretYSlop, 1, halfScreen); - if (bEven) { - yMarginB = yMarginT; - } else { - yMarginB = linesOnScreen - yMarginT - 1; - } - } - yMoveT = yMarginT; - if (bEven) { - if (bJump) { - yMoveT = Platform::Clamp(caretYSlop * 3, 1, halfScreen); - } - yMoveB = yMoveT; - } else { - yMoveB = linesOnScreen - yMoveT - 1; - } - if (lineCaret < topLine + yMarginT) { - // Caret goes too high - newTopLine = lineCaret - yMoveT; - } else if (lineCaret > topLine + linesOnScreen - 1 - yMarginB) { - // Caret goes too low - newTopLine = lineCaret - linesOnScreen + 1 + yMoveB; - } - } else { // Not strict - yMoveT = bJump ? caretYSlop * 3 : caretYSlop; - yMoveT = Platform::Clamp(yMoveT, 1, halfScreen); - if (bEven) { - yMoveB = yMoveT; - } else { - yMoveB = linesOnScreen - yMoveT - 1; - } - if (lineCaret < topLine) { - // Caret goes too high - newTopLine = lineCaret - yMoveT; - } else if (lineCaret > topLine + linesOnScreen - 1) { - // Caret goes too low - newTopLine = lineCaret - linesOnScreen + 1 + yMoveB; - } - } - } else { // No slop - if (!bStrict && !bJump) { - // Minimal move - if (lineCaret < topLine) { - // Caret goes too high - newTopLine = lineCaret; - } else if (lineCaret > topLine + linesOnScreen - 1) { - // Caret goes too low - if (bEven) { - newTopLine = lineCaret - linesOnScreen + 1; - } else { - newTopLine = lineCaret; - } - } - } else { // Strict or going out of display - if (bEven) { - // Always center caret - newTopLine = lineCaret - halfScreen; - } else { - // Always put caret on top of display - newTopLine = lineCaret; - } - } - } - newTopLine = Platform::Clamp(newTopLine, 0, MaxScrollPos()); - if (newTopLine != topLine) { - Redraw(); - SetTopLine(newTopLine); - SetVerticalScrollPos(); - } - } - - // Horizontal positioning - if (horiz && (wrapState == eWrapNone)) { - int halfScreen = Platform::Maximum(rcClient.Width() - 4, 4) / 2; - int xOffsetNew = xOffset; - bSlop = (caretXPolicy & CARET_SLOP) != 0; - bStrict = (caretXPolicy & CARET_STRICT) != 0; - bJump = (caretXPolicy & CARET_JUMPS) != 0; - bEven = (caretXPolicy & CARET_EVEN) != 0; - - if (bSlop) { // A margin is defined - int xMoveL, xMoveR; - if (bStrict) { - int xMarginL, xMarginR; - if (!useMargin) { - // In drag mode, avoid moves unless very near of the margin - // otherwise, a simple click will select text. - xMarginL = xMarginR = 2; - } else { - // xMargin must equal to caretXSlop, with a minimum of 2 and - // a maximum of slightly less than half the width of the text area. - xMarginR = Platform::Clamp(caretXSlop, 2, halfScreen); - if (bEven) { - xMarginL = xMarginR; - } else { - xMarginL = rcClient.Width() - xMarginR - 4; - } - } - if (bJump && bEven) { - // Jump is used only in even mode - xMoveL = xMoveR = Platform::Clamp(caretXSlop * 3, 1, halfScreen); - } else { - xMoveL = xMoveR = 0; // Not used, avoid a warning - } - if (pt.x < rcClient.left + xMarginL) { - // Caret is on the left of the display - if (bJump && bEven) { - xOffsetNew -= xMoveL; - } else { - // Move just enough to allow to display the caret - xOffsetNew -= (rcClient.left + xMarginL) - pt.x; - } - } else if (pt.x >= rcClient.right - xMarginR) { - // Caret is on the right of the display - if (bJump && bEven) { - xOffsetNew += xMoveR; - } else { - // Move just enough to allow to display the caret - xOffsetNew += pt.x - (rcClient.right - xMarginR) + 1; - } - } - } else { // Not strict - xMoveR = bJump ? caretXSlop * 3 : caretXSlop; - xMoveR = Platform::Clamp(xMoveR, 1, halfScreen); - if (bEven) { - xMoveL = xMoveR; - } else { - xMoveL = rcClient.Width() - xMoveR - 4; - } - if (pt.x < rcClient.left) { - // Caret is on the left of the display - xOffsetNew -= xMoveL; - } else if (pt.x >= rcClient.right) { - // Caret is on the right of the display - xOffsetNew += xMoveR; - } - } - } else { // No slop - if (bStrict || - (bJump && (pt.x < rcClient.left || pt.x >= rcClient.right))) { - // Strict or going out of display - if (bEven) { - // Center caret - xOffsetNew += pt.x - rcClient.left - halfScreen; - } else { - // Put caret on right - xOffsetNew += pt.x - rcClient.right + 1; - } - } else { - // Move just enough to allow to display the caret - if (pt.x < rcClient.left) { - // Caret is on the left of the display - if (bEven) { - xOffsetNew -= rcClient.left - pt.x; - } else { - xOffsetNew += pt.x - rcClient.right + 1; - } - } else if (pt.x >= rcClient.right) { - // Caret is on the right of the display - xOffsetNew += pt.x - rcClient.right + 1; - } - } - } - // In case of a jump (find result) largely out of display, adjust the offset to display the caret - if (pt.x + xOffset < rcClient.left + xOffsetNew) { - xOffsetNew = pt.x + xOffset - rcClient.left; - } else if (pt.x + xOffset >= rcClient.right + xOffsetNew) { - xOffsetNew = pt.x + xOffset - rcClient.right + 1; - } - if (xOffsetNew < 0) { - xOffsetNew = 0; - } - if (xOffset != xOffsetNew) { - xOffset = xOffsetNew; - if (xOffsetNew > 0) { - PRectangle rcText = GetTextRectangle(); - if (horizontalScrollBarVisible == true && - rcText.Width() + xOffset > scrollWidth) { - scrollWidth = xOffset + rcText.Width(); - SetScrollBars(); - } - } - SetHorizontalScrollPos(); - Redraw(); - } - } - UpdateSystemCaret(); -} - -void Editor::ShowCaretAtCurrentPosition() { - if (hasFocus) { - caret.active = true; - caret.on = true; - SetTicking(true); - } else { - caret.active = false; - caret.on = false; - } - InvalidateCaret(); -} - -void Editor::DropCaret() { - caret.active = false; - InvalidateCaret(); -} - -void Editor::InvalidateCaret() { - if (posDrag >= 0) - InvalidateRange(posDrag, posDrag + 1); - else - InvalidateRange(currentPos, currentPos + 1); - UpdateSystemCaret(); -} - -void Editor::UpdateSystemCaret() { -} - -void Editor::NeedWrapping(int docLineStart, int docLineEnd) { - docLineStart = Platform::Clamp(docLineStart, 0, pdoc->LinesTotal()); - if (wrapStart > docLineStart) { - wrapStart = docLineStart; - llc.Invalidate(LineLayout::llPositions); - } - if (wrapEnd < docLineEnd) { - wrapEnd = docLineEnd; - } - wrapEnd = Platform::Clamp(wrapEnd, 0, pdoc->LinesTotal()); - // Wrap lines during idle. - if ((wrapState != eWrapNone) && (wrapEnd != wrapStart)) { - SetIdle(true); - } -} - -// Check if wrapping needed and perform any needed wrapping. -// fullwrap: if true, all lines which need wrapping will be done, -// in this single call. -// priorityWrapLineStart: If greater than zero, all lines starting from -// here to 1 page + 100 lines past will be wrapped (even if there are -// more lines under wrapping process in idle). -// If it is neither fullwrap, nor priorityWrap, then 1 page + 100 lines will be -// wrapped, if there are any wrapping going on in idle. (Generally this -// condition is called only from idler). -// Return true if wrapping occurred. -bool Editor::WrapLines(bool fullWrap, int priorityWrapLineStart) { - // If there are any pending wraps, do them during idle if possible. - int linesInOneCall = LinesOnScreen() + 100; - if (wrapState != eWrapNone) { - if (wrapStart < wrapEnd) { - if (!SetIdle(true)) { - // Idle processing not supported so full wrap required. - fullWrap = true; - } - } - if (!fullWrap && priorityWrapLineStart >= 0 && - // .. and if the paint window is outside pending wraps - (((priorityWrapLineStart + linesInOneCall) < wrapStart) || - (priorityWrapLineStart > wrapEnd))) { - // No priority wrap pending - return false; - } - } - int goodTopLine = topLine; - bool wrapOccurred = false; - if (wrapStart <= pdoc->LinesTotal()) { - if (wrapState == eWrapNone) { - if (wrapWidth != LineLayout::wrapWidthInfinite) { - wrapWidth = LineLayout::wrapWidthInfinite; - for (int lineDoc = 0; lineDoc < pdoc->LinesTotal(); lineDoc++) { - cs.SetHeight(lineDoc, 1); - } - wrapOccurred = true; - } - wrapStart = wrapLineLarge; - wrapEnd = wrapLineLarge; - } else { - if (wrapEnd >= pdoc->LinesTotal()) - wrapEnd = pdoc->LinesTotal(); - //ElapsedTime et; - int lineDocTop = cs.DocFromDisplay(topLine); - int subLineTop = topLine - cs.DisplayFromDoc(lineDocTop); - PRectangle rcTextArea = GetClientRectangle(); - rcTextArea.left = vs.fixedColumnWidth; - rcTextArea.right -= vs.rightMarginWidth; - wrapWidth = rcTextArea.Width(); - // Ensure all of the document is styled. - pdoc->EnsureStyledTo(pdoc->Length()); - RefreshStyleData(); - AutoSurface surface(this); - if (surface) { - bool priorityWrap = false; - int lastLineToWrap = wrapEnd; - int lineToWrap = wrapStart; - if (!fullWrap) { - if (priorityWrapLineStart >= 0) { - // This is a priority wrap. - lineToWrap = priorityWrapLineStart; - lastLineToWrap = priorityWrapLineStart + linesInOneCall; - priorityWrap = true; - } else { - // This is idle wrap. - lastLineToWrap = wrapStart + linesInOneCall; - } - if (lastLineToWrap >= wrapEnd) - lastLineToWrap = wrapEnd; - } // else do a fullWrap. - - // Platform::DebugPrintf("Wraplines: full = %d, priorityStart = %d (wrapping: %d to %d)\n", fullWrap, priorityWrapLineStart, lineToWrap, lastLineToWrap); - // Platform::DebugPrintf("Pending wraps: %d to %d\n", wrapStart, wrapEnd); - while (lineToWrap < lastLineToWrap) { - AutoLineLayout ll(llc, RetrieveLineLayout(lineToWrap)); - int linesWrapped = 1; - if (ll) { - LayoutLine(lineToWrap, surface, vs, ll, wrapWidth); - linesWrapped = ll->lines; - } - if (cs.SetHeight(lineToWrap, linesWrapped)) { - wrapOccurred = true; - } - lineToWrap++; - } - if (!priorityWrap) - wrapStart = lineToWrap; - // If wrapping is done, bring it to resting position - if (wrapStart >= wrapEnd) { - wrapStart = wrapLineLarge; - wrapEnd = wrapLineLarge; - } - } - goodTopLine = cs.DisplayFromDoc(lineDocTop); - if (subLineTop < cs.GetHeight(lineDocTop)) - goodTopLine += subLineTop; - else - goodTopLine += cs.GetHeight(lineDocTop); - //double durWrap = et.Duration(true); - //Platform::DebugPrintf("Wrap:%9.6g \n", durWrap); - } - } - if (wrapOccurred) { - SetScrollBars(); - SetTopLine(Platform::Clamp(goodTopLine, 0, MaxScrollPos())); - SetVerticalScrollPos(); - } - return wrapOccurred; -} - -void Editor::LinesJoin() { - if (!RangeContainsProtected(targetStart, targetEnd)) { - pdoc->BeginUndoAction(); - bool prevNonWS = true; - for (int pos = targetStart; pos < targetEnd; pos++) { - if (IsEOLChar(pdoc->CharAt(pos))) { - targetEnd -= pdoc->LenChar(pos); - pdoc->DelChar(pos); - if (prevNonWS) { - // Ensure at least one space separating previous lines - pdoc->InsertChar(pos, ' '); - } - } else { - prevNonWS = pdoc->CharAt(pos) != ' '; - } - } - pdoc->EndUndoAction(); - } -} - -const char *StringFromEOLMode(int eolMode) { - if (eolMode == SC_EOL_CRLF) { - return "\r\n"; - } else if (eolMode == SC_EOL_CR) { - return "\r"; - } else { - return "\n"; - } -} - -void Editor::LinesSplit(int pixelWidth) { - if (!RangeContainsProtected(targetStart, targetEnd)) { - if (pixelWidth == 0) { - PRectangle rcText = GetTextRectangle(); - pixelWidth = rcText.Width(); - } - int lineStart = pdoc->LineFromPosition(targetStart); - int lineEnd = pdoc->LineFromPosition(targetEnd); - const char *eol = StringFromEOLMode(pdoc->eolMode); - pdoc->BeginUndoAction(); - for (int line = lineStart; line <= lineEnd; line++) { - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(line)); - if (surface && ll) { - unsigned int posLineStart = pdoc->LineStart(line); - LayoutLine(line, surface, vs, ll, pixelWidth); - for (int subLine = 1; subLine < ll->lines; subLine++) { - pdoc->InsertString(posLineStart + (subLine - 1) * strlen(eol) + - ll->LineStart(subLine), eol); - targetEnd += static_cast(strlen(eol)); - } - } - lineEnd = pdoc->LineFromPosition(targetEnd); - } - pdoc->EndUndoAction(); - } -} - -int Editor::SubstituteMarkerIfEmpty(int markerCheck, int markerDefault) { - if (vs.markers[markerCheck].markType == SC_MARK_EMPTY) - return markerDefault; - return markerCheck; -} - -// Avoid 64 bit compiler warnings. -// Scintilla does not support text buffers larger than 2**31 -static int istrlen(const char *s) { - return static_cast(strlen(s)); -} - -void Editor::PaintSelMargin(Surface *surfWindow, PRectangle &rc) { - if (vs.fixedColumnWidth == 0) - return; - - PRectangle rcMargin = GetClientRectangle(); - rcMargin.right = vs.fixedColumnWidth; - - if (!rc.Intersects(rcMargin)) - return; - - Surface *surface; - if (bufferedDraw) { - surface = pixmapSelMargin; - } else { - surface = surfWindow; - } - - PRectangle rcSelMargin = rcMargin; - rcSelMargin.right = rcMargin.left; - - for (int margin = 0; margin < vs.margins; margin++) { - if (vs.ms[margin].width > 0) { - - rcSelMargin.left = rcSelMargin.right; - rcSelMargin.right = rcSelMargin.left + vs.ms[margin].width; - - if (vs.ms[margin].style != SC_MARGIN_NUMBER) { - /* alternate scheme: - if (vs.ms[margin].mask & SC_MASK_FOLDERS) - surface->FillRectangle(rcSelMargin, vs.styles[STYLE_DEFAULT].back.allocated); - else - // Required because of special way brush is created for selection margin - surface->FillRectangle(rcSelMargin, pixmapSelPattern); - */ - if (vs.ms[margin].mask & SC_MASK_FOLDERS) - // Required because of special way brush is created for selection margin - surface->FillRectangle(rcSelMargin, *pixmapSelPattern); - else { - ColourAllocated colour; - switch (vs.ms[margin].style) { - case SC_MARGIN_BACK: - colour = vs.styles[STYLE_DEFAULT].back.allocated; - break; - case SC_MARGIN_FORE: - colour = vs.styles[STYLE_DEFAULT].fore.allocated; - break; - default: - colour = vs.styles[STYLE_LINENUMBER].back.allocated; - break; - } - surface->FillRectangle(rcSelMargin, colour); - } - } else { - surface->FillRectangle(rcSelMargin, vs.styles[STYLE_LINENUMBER].back.allocated); - } - - int visibleLine = topLine; - int yposScreen = 0; - - // Work out whether the top line is whitespace located after a - // lessening of fold level which implies a 'fold tail' but which should not - // be displayed until the last of a sequence of whitespace. - bool needWhiteClosure = false; - int level = pdoc->GetLevel(cs.DocFromDisplay(topLine)); - if (level & SC_FOLDLEVELWHITEFLAG) { - int lineBack = cs.DocFromDisplay(topLine); - int levelPrev = level; - while ((lineBack > 0) && (levelPrev & SC_FOLDLEVELWHITEFLAG)) { - lineBack--; - levelPrev = pdoc->GetLevel(lineBack); - } - if (!(levelPrev & SC_FOLDLEVELHEADERFLAG)) { - if ((level & SC_FOLDLEVELNUMBERMASK) < (levelPrev & SC_FOLDLEVELNUMBERMASK)) - needWhiteClosure = true; - } - } - - // Old code does not know about new markers needed to distinguish all cases - int folderOpenMid = SubstituteMarkerIfEmpty(SC_MARKNUM_FOLDEROPENMID, - SC_MARKNUM_FOLDEROPEN); - int folderEnd = SubstituteMarkerIfEmpty(SC_MARKNUM_FOLDEREND, - SC_MARKNUM_FOLDER); - - while ((visibleLine < cs.LinesDisplayed()) && yposScreen < rcMargin.bottom) { - - PLATFORM_ASSERT(visibleLine < cs.LinesDisplayed()); - - int lineDoc = cs.DocFromDisplay(visibleLine); - PLATFORM_ASSERT(cs.GetVisible(lineDoc)); - bool firstSubLine = visibleLine == cs.DisplayFromDoc(lineDoc); - - // Decide which fold indicator should be displayed - level = pdoc->GetLevel(lineDoc); - int levelNext = pdoc->GetLevel(lineDoc + 1); - int marks = pdoc->GetMark(lineDoc); - if (!firstSubLine) - marks = 0; - int levelNum = level & SC_FOLDLEVELNUMBERMASK; - int levelNextNum = levelNext & SC_FOLDLEVELNUMBERMASK; - if (level & SC_FOLDLEVELHEADERFLAG) { - if (firstSubLine) { - if (cs.GetExpanded(lineDoc)) { - if (levelNum == SC_FOLDLEVELBASE) - marks |= 1 << SC_MARKNUM_FOLDEROPEN; - else - marks |= 1 << folderOpenMid; - } else { - if (levelNum == SC_FOLDLEVELBASE) - marks |= 1 << SC_MARKNUM_FOLDER; - else - marks |= 1 << folderEnd; - } - } else { - marks |= 1 << SC_MARKNUM_FOLDERSUB; - } - needWhiteClosure = false; - } else if (level & SC_FOLDLEVELWHITEFLAG) { - if (needWhiteClosure) { - if (levelNext & SC_FOLDLEVELWHITEFLAG) { - marks |= 1 << SC_MARKNUM_FOLDERSUB; - } else if (levelNum > SC_FOLDLEVELBASE) { - marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; - needWhiteClosure = false; - } else { - marks |= 1 << SC_MARKNUM_FOLDERTAIL; - needWhiteClosure = false; - } - } else if (levelNum > SC_FOLDLEVELBASE) { - if (levelNextNum < levelNum) { - if (levelNextNum > SC_FOLDLEVELBASE) { - marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; - } else { - marks |= 1 << SC_MARKNUM_FOLDERTAIL; - } - } else { - marks |= 1 << SC_MARKNUM_FOLDERSUB; - } - } - } else if (levelNum > SC_FOLDLEVELBASE) { - if (levelNextNum < levelNum) { - needWhiteClosure = false; - if (levelNext & SC_FOLDLEVELWHITEFLAG) { - marks |= 1 << SC_MARKNUM_FOLDERSUB; - needWhiteClosure = true; - } else if (levelNextNum > SC_FOLDLEVELBASE) { - marks |= 1 << SC_MARKNUM_FOLDERMIDTAIL; - } else { - marks |= 1 << SC_MARKNUM_FOLDERTAIL; - } - } else { - marks |= 1 << SC_MARKNUM_FOLDERSUB; - } - } - - marks &= vs.ms[margin].mask; - PRectangle rcMarker = rcSelMargin; - rcMarker.top = yposScreen; - rcMarker.bottom = yposScreen + vs.lineHeight; - if (vs.ms[margin].style == SC_MARGIN_NUMBER) { - char number[100]; - number[0] = '\0'; - if (firstSubLine) - sprintf(number, "%d", lineDoc + 1); - if (foldFlags & SC_FOLDFLAG_LEVELNUMBERS) { - int lev = pdoc->GetLevel(lineDoc); - sprintf(number, "%c%c %03X %03X", - (lev & SC_FOLDLEVELHEADERFLAG) ? 'H' : '_', - (lev & SC_FOLDLEVELWHITEFLAG) ? 'W' : '_', - lev & SC_FOLDLEVELNUMBERMASK, - lev >> 16 - ); - } - PRectangle rcNumber = rcMarker; - // Right justify - int width = surface->WidthText(vs.styles[STYLE_LINENUMBER].font, number, istrlen(number)); - int xpos = rcNumber.right - width - 3; - rcNumber.left = xpos; - surface->DrawTextNoClip(rcNumber, vs.styles[STYLE_LINENUMBER].font, - rcNumber.top + vs.maxAscent, number, istrlen(number), - vs.styles[STYLE_LINENUMBER].fore.allocated, - vs.styles[STYLE_LINENUMBER].back.allocated); - } - - if (marks) { - for (int markBit = 0; (markBit < 32) && marks; markBit++) { - if (marks & 1) { - vs.markers[markBit].Draw(surface, rcMarker, vs.styles[STYLE_LINENUMBER].font); - } - marks >>= 1; - } - } - - visibleLine++; - yposScreen += vs.lineHeight; - } - } - } - - PRectangle rcBlankMargin = rcMargin; - rcBlankMargin.left = rcSelMargin.right; - surface->FillRectangle(rcBlankMargin, vs.styles[STYLE_DEFAULT].back.allocated); - - if (bufferedDraw) { - surfWindow->Copy(rcMargin, Point(), *pixmapSelMargin); - } -} - -void DrawTabArrow(Surface *surface, PRectangle rcTab, int ymid) { - int ydiff = (rcTab.bottom - rcTab.top) / 2; - int xhead = rcTab.right - 1 - ydiff; - if (xhead <= rcTab.left) { - ydiff -= rcTab.left - xhead - 1; - xhead = rcTab.left - 1; - } - if ((rcTab.left + 2) < (rcTab.right - 1)) - surface->MoveTo(rcTab.left + 2, ymid); - else - surface->MoveTo(rcTab.right - 1, ymid); - surface->LineTo(rcTab.right - 1, ymid); - surface->LineTo(xhead, ymid - ydiff); - surface->MoveTo(rcTab.right - 1, ymid); - surface->LineTo(xhead, ymid + ydiff); -} - -static bool IsSpaceOrTab(char ch) { - return ch == ' ' || ch == '\t'; -} - -LineLayout *Editor::RetrieveLineLayout(int lineNumber) { - int posLineStart = pdoc->LineStart(lineNumber); - int posLineEnd = pdoc->LineStart(lineNumber + 1); - int lineCaret = pdoc->LineFromPosition(currentPos); - return llc.Retrieve(lineNumber, lineCaret, - posLineEnd - posLineStart, pdoc->GetStyleClock(), - LinesOnScreen() + 1, pdoc->LinesTotal()); -} - -/** - * Fill in the LineLayout data for the given line. - * Copy the given @a line and its styles from the document into local arrays. - * Also determine the x position at which each character starts. - */ -void Editor::LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayout *ll, int width) { - if (!ll) - return; - PLATFORM_ASSERT(line < pdoc->LinesTotal()); - int posLineStart = pdoc->LineStart(line); - int posLineEnd = pdoc->LineStart(line + 1); - // If the line is very long, limit the treatment to a length that should fit in the viewport - if (posLineEnd > (posLineStart + ll->maxLineLength)) { - posLineEnd = posLineStart + ll->maxLineLength; - } - if (ll->validity == LineLayout::llCheckTextAndStyle) { - int lineLength = posLineEnd - posLineStart; - if (!vstyle.viewEOL) { - int cid = posLineEnd - 1; - while ((cid > posLineStart) && IsEOLChar(pdoc->CharAt(cid))) { - cid--; - lineLength--; - } - } - if (lineLength == ll->numCharsInLine) { - // See if chars, styles, indicators, are all the same - bool allSame = true; - const int styleMask = pdoc->stylingBitsMask; - // Check base line layout - char styleByte = 0; - int numCharsInLine = 0; - while (numCharsInLine < lineLength) { - int charInDoc = numCharsInLine + posLineStart; - char chDoc = pdoc->CharAt(charInDoc); - styleByte = pdoc->StyleAt(charInDoc); - allSame = allSame && - (ll->styles[numCharsInLine] == static_cast(styleByte & styleMask)); - allSame = allSame && - (ll->indicators[numCharsInLine] == static_cast(styleByte & ~styleMask)); - if (vstyle.styles[ll->styles[numCharsInLine]].caseForce == Style::caseMixed) - allSame = allSame && - (ll->chars[numCharsInLine] == chDoc); - else if (vstyle.styles[ll->styles[numCharsInLine]].caseForce == Style::caseLower) - allSame = allSame && - (ll->chars[numCharsInLine] == static_cast(tolower(chDoc))); - else // Style::caseUpper - allSame = allSame && - (ll->chars[numCharsInLine] == static_cast(toupper(chDoc))); - numCharsInLine++; - } - allSame = allSame && (ll->styles[numCharsInLine] == styleByte); // For eolFilled - if (allSame) { - ll->validity = LineLayout::llPositions; - } else { - ll->validity = LineLayout::llInvalid; - } - } else { - ll->validity = LineLayout::llInvalid; - } - } - if (ll->validity == LineLayout::llInvalid) { - ll->widthLine = LineLayout::wrapWidthInfinite; - ll->lines = 1; - int numCharsInLine = 0; - if (vstyle.edgeState == EDGE_BACKGROUND) { - ll->edgeColumn = pdoc->FindColumn(line, theEdge); - if (ll->edgeColumn >= posLineStart) { - ll->edgeColumn -= posLineStart; - } - } else { - ll->edgeColumn = -1; - } - - char styleByte = 0; - int styleMask = pdoc->stylingBitsMask; - ll->styleBitsSet = 0; - // Fill base line layout - for (int charInDoc = posLineStart; charInDoc < posLineEnd; charInDoc++) { - char chDoc = pdoc->CharAt(charInDoc); - styleByte = pdoc->StyleAt(charInDoc); - ll->styleBitsSet |= styleByte; - if (vstyle.viewEOL || (!IsEOLChar(chDoc))) { - ll->chars[numCharsInLine] = chDoc; - ll->styles[numCharsInLine] = static_cast(styleByte & styleMask); - ll->indicators[numCharsInLine] = static_cast(styleByte & ~styleMask); - if (vstyle.styles[ll->styles[numCharsInLine]].caseForce == Style::caseUpper) - ll->chars[numCharsInLine] = static_cast(toupper(chDoc)); - else if (vstyle.styles[ll->styles[numCharsInLine]].caseForce == Style::caseLower) - ll->chars[numCharsInLine] = static_cast(tolower(chDoc)); - numCharsInLine++; - } - } - ll->xHighlightGuide = 0; - // Extra element at the end of the line to hold end x position and act as - ll->chars[numCharsInLine] = 0; // Also triggers processing in the loops as this is a control character - ll->styles[numCharsInLine] = styleByte; // For eolFilled - ll->indicators[numCharsInLine] = 0; - - // Layout the line, determining the position of each character, - // with an extra element at the end for the end of the line. - int startseg = 0; // Start of the current segment, in char. number - int startsegx = 0; // Start of the current segment, in pixels - ll->positions[0] = 0; - unsigned int tabWidth = vstyle.spaceWidth * pdoc->tabInChars; - bool lastSegItalics = false; - Font &ctrlCharsFont = vstyle.styles[STYLE_CONTROLCHAR].font; - - int ctrlCharWidth[32] = {0}; - bool isControlNext = IsControlCharacter(ll->chars[0]); - for (int charInLine = 0; charInLine < numCharsInLine; charInLine++) { - bool isControl = isControlNext; - isControlNext = IsControlCharacter(ll->chars[charInLine + 1]); - if ((ll->styles[charInLine] != ll->styles[charInLine + 1]) || - isControl || isControlNext) { - ll->positions[startseg] = 0; - if (vstyle.styles[ll->styles[charInLine]].visible) { - if (isControl) { - if (ll->chars[charInLine] == '\t') { - ll->positions[charInLine + 1] = ((((startsegx + 2) / - tabWidth) + 1) * tabWidth) - startsegx; - } else if (controlCharSymbol < 32) { - if (ctrlCharWidth[ll->chars[charInLine]] == 0) { - const char *ctrlChar = ControlCharacterString(ll->chars[charInLine]); - // +3 For a blank on front and rounded edge each side: - ctrlCharWidth[ll->chars[charInLine]] = - surface->WidthText(ctrlCharsFont, ctrlChar, istrlen(ctrlChar)) + 3; - } - ll->positions[charInLine + 1] = ctrlCharWidth[ll->chars[charInLine]]; - } else { - char cc[2] = { static_cast(controlCharSymbol), '\0' }; - surface->MeasureWidths(ctrlCharsFont, cc, 1, - ll->positions + startseg + 1); - } - lastSegItalics = false; - } else { // Regular character - int lenSeg = charInLine - startseg + 1; - if ((lenSeg == 1) && (' ' == ll->chars[startseg])) { - lastSegItalics = false; - // Over half the segments are single characters and of these about half are space characters. - ll->positions[charInLine + 1] = vstyle.styles[ll->styles[charInLine]].spaceWidth; - } else { - lastSegItalics = vstyle.styles[ll->styles[charInLine]].italic; - surface->MeasureWidths(vstyle.styles[ll->styles[charInLine]].font, ll->chars + startseg, - lenSeg, ll->positions + startseg + 1); - } - } - } else { // invisible - for (int posToZero = startseg; posToZero <= (charInLine + 1); posToZero++) { - ll->positions[posToZero] = 0; - } - } - for (int posToIncrease = startseg; posToIncrease <= (charInLine + 1); posToIncrease++) { - ll->positions[posToIncrease] += startsegx; - } - startsegx = ll->positions[charInLine + 1]; - startseg = charInLine + 1; - } - } - // Small hack to make lines that end with italics not cut off the edge of the last character - if ((startseg > 0) && lastSegItalics) { - ll->positions[startseg] += 2; - } - ll->numCharsInLine = numCharsInLine; - ll->validity = LineLayout::llPositions; - } - // Hard to cope when too narrow, so just assume there is space - if (width < 20) { - width = 20; - } - if ((ll->validity == LineLayout::llPositions) || (ll->widthLine != width)) { - ll->widthLine = width; - if (width == LineLayout::wrapWidthInfinite) { - ll->lines = 1; - } else if (width > ll->positions[ll->numCharsInLine]) { - // Simple common case where line does not need wrapping. - ll->lines = 1; - } else { - if (wrapVisualFlags & SC_WRAPVISUALFLAG_END) { - width -= vstyle.aveCharWidth; // take into account the space for end wrap mark - } - ll->lines = 0; - // Calculate line start positions based upon width. - // For now this is simplistic - wraps on byte rather than character and - // in the middle of words. Should search for spaces or style changes. - int lastGoodBreak = 0; - int lastLineStart = 0; - int startOffset = 0; - int p = 0; - while (p < ll->numCharsInLine) { - if ((ll->positions[p + 1] - startOffset) >= width) { - if (lastGoodBreak == lastLineStart) { - // Try moving to start of last character - if (p > 0) { - lastGoodBreak = pdoc->MovePositionOutsideChar(p + posLineStart, -1) - - posLineStart; - } - if (lastGoodBreak == lastLineStart) { - // Ensure at least one character on line. - lastGoodBreak = pdoc->MovePositionOutsideChar(lastGoodBreak + posLineStart + 1, 1) - - posLineStart; - } - } - lastLineStart = lastGoodBreak; - ll->lines++; - ll->SetLineStart(ll->lines, lastGoodBreak); - startOffset = ll->positions[lastGoodBreak]; - // take into account the space for start wrap mark and indent - startOffset -= actualWrapVisualStartIndent * vstyle.aveCharWidth; - p = lastGoodBreak + 1; - continue; - } - if (p > 0) { - if (wrapState == eWrapChar) { - lastGoodBreak = pdoc->MovePositionOutsideChar(p + posLineStart, -1) - - posLineStart; - p = pdoc->MovePositionOutsideChar(p + 1 + posLineStart, 1) - posLineStart; - continue; - } else if (ll->styles[p] != ll->styles[p - 1]) { - lastGoodBreak = p; - } else if (IsSpaceOrTab(ll->chars[p - 1]) && !IsSpaceOrTab(ll->chars[p])) { - lastGoodBreak = p; - } - } - p++; - } - ll->lines++; - } - ll->validity = LineLayout::llLines; - } -} - -ColourAllocated Editor::SelectionBackground(ViewStyle &vsDraw) { - return primarySelection ? vsDraw.selbackground.allocated : vsDraw.selbackground2.allocated; -} - -ColourAllocated Editor::TextBackground(ViewStyle &vsDraw, bool overrideBackground, - ColourAllocated background, bool inSelection, bool inHotspot, int styleMain, int i, LineLayout *ll) { - if (inSelection) { - if (vsDraw.selbackset && (vsDraw.selAlpha == SC_ALPHA_NOALPHA)) { - return SelectionBackground(vsDraw); - } - } else { - if ((vsDraw.edgeState == EDGE_BACKGROUND) && - (i >= ll->edgeColumn) && - !IsEOLChar(ll->chars[i])) - return vsDraw.edgecolour.allocated; - if (inHotspot && vsDraw.hotspotBackgroundSet) - return vsDraw.hotspotBackground.allocated; - if (overrideBackground) - return background; - } - return vsDraw.styles[styleMain].back.allocated; -} - -void Editor::DrawIndentGuide(Surface *surface, int lineVisible, int lineHeight, int start, PRectangle rcSegment, bool highlight) { - Point from(0, ((lineVisible & 1) && (lineHeight & 1)) ? 1 : 0); - PRectangle rcCopyArea(start + 1, rcSegment.top, start + 2, rcSegment.bottom); - surface->Copy(rcCopyArea, from, - highlight ? *pixmapIndentGuideHighlight : *pixmapIndentGuide); -} - -void Editor::DrawWrapMarker(Surface *surface, PRectangle rcPlace, - bool isEndMarker, ColourAllocated wrapColour) { - surface->PenColour(wrapColour); - - enum { xa = 1 }; // gap before start - int w = rcPlace.right - rcPlace.left - xa - 1; - - bool xStraight = isEndMarker; // x-mirrored symbol for start marker - bool yStraight = true; - //bool yStraight= isEndMarker; // comment in for start marker y-mirrowed - - int x0 = xStraight ? rcPlace.left : rcPlace.right - 1; - int y0 = yStraight ? rcPlace.top : rcPlace.bottom - 1; - - int dy = (rcPlace.bottom - rcPlace.top) / 5; - int y = (rcPlace.bottom - rcPlace.top) / 2 + dy; - - struct Relative { - Surface *surface; - int xBase; - int xDir; - int yBase; - int yDir; - void MoveTo(int xRelative, int yRelative) { - surface->MoveTo(xBase + xDir * xRelative, yBase + yDir * yRelative); - } - void LineTo(int xRelative, int yRelative) { - surface->LineTo(xBase + xDir * xRelative, yBase + yDir * yRelative); - } - }; - Relative rel = {surface, x0, xStraight ? 1 : -1, y0, yStraight ? 1 : -1}; - - // arrow head - rel.MoveTo(xa, y); - rel.LineTo(xa + 2*w / 3, y - dy); - rel.MoveTo(xa, y); - rel.LineTo(xa + 2*w / 3, y + dy); - - // arrow body - rel.MoveTo(xa, y); - rel.LineTo(xa + w, y); - rel.LineTo(xa + w, y - 2 * dy); - rel.LineTo(xa - 1, // on windows lineto is exclusive endpoint, perhaps GTK not... - y - 2 * dy); -} - -static void SimpleAlphaRectangle(Surface *surface, PRectangle rc, ColourAllocated fill, int alpha) { - if (alpha != SC_ALPHA_NOALPHA) { - surface->AlphaRectangle(rc, 0, fill, alpha, fill, alpha, 0); - } -} - -void Editor::DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, LineLayout *ll, - int line, int lineEnd, int xStart, int subLine, int subLineStart, - bool overrideBackground, ColourAllocated background, - bool drawWrapMarkEnd, ColourAllocated wrapColour) { - - int styleMask = pdoc->stylingBitsMask; - PRectangle rcSegment = rcLine; - - // Fill in a PRectangle representing the end of line characters - int xEol = ll->positions[lineEnd] - subLineStart; - rcSegment.left = xEol + xStart; - rcSegment.right = xEol + vsDraw.aveCharWidth + xStart; - int posLineEnd = pdoc->LineStart(line + 1); - bool eolInSelection = (subLine == (ll->lines - 1)) && - (posLineEnd > ll->selStart) && (posLineEnd <= ll->selEnd) && (ll->selStart != ll->selEnd); - - if (eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (vsDraw.selAlpha == SC_ALPHA_NOALPHA)) { - surface->FillRectangle(rcSegment, SelectionBackground(vsDraw)); - } else { - if (overrideBackground) { - surface->FillRectangle(rcSegment, background); - } else { - surface->FillRectangle(rcSegment, vsDraw.styles[ll->styles[ll->numCharsInLine] & styleMask].back.allocated); - } - if (eolInSelection && vsDraw.selbackset && (line < pdoc->LinesTotal() - 1) && (vsDraw.selAlpha != SC_ALPHA_NOALPHA)) { - SimpleAlphaRectangle(surface, rcSegment, SelectionBackground(vsDraw), vsDraw.selAlpha); - } - } - - rcSegment.left = xEol + vsDraw.aveCharWidth + xStart; - rcSegment.right = rcLine.right; - if (overrideBackground) { - surface->FillRectangle(rcSegment, background); - } else if (vsDraw.styles[ll->styles[ll->numCharsInLine] & styleMask].eolFilled) { - surface->FillRectangle(rcSegment, vsDraw.styles[ll->styles[ll->numCharsInLine] & styleMask].back.allocated); - } else { - surface->FillRectangle(rcSegment, vsDraw.styles[STYLE_DEFAULT].back.allocated); - } - - if (drawWrapMarkEnd) { - PRectangle rcPlace = rcSegment; - - if (wrapVisualFlagsLocation & SC_WRAPVISUALFLAGLOC_END_BY_TEXT) { - rcPlace.left = xEol + xStart; - rcPlace.right = rcPlace.left + vsDraw.aveCharWidth; - } else { - // draw left of the right text margin, to avoid clipping by the current clip rect - rcPlace.right = rcLine.right - vs.rightMarginWidth; - rcPlace.left = rcPlace.right - vsDraw.aveCharWidth; - } - DrawWrapMarker(surface, rcPlace, true, wrapColour); - } -} - -void Editor::DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVisible, int xStart, - PRectangle rcLine, LineLayout *ll, int subLine) { - - PRectangle rcSegment = rcLine; - - // Using one font for all control characters so it can be controlled independently to ensure - // the box goes around the characters tightly. Seems to be no way to work out what height - // is taken by an individual character - internal leading gives varying results. - Font &ctrlCharsFont = vsDraw.styles[STYLE_CONTROLCHAR].font; - - // See if something overrides the line background color: Either if caret is on the line - // and background color is set for that, or if a marker is defined that forces its background - // color onto the line, or if a marker is defined but has no selection margin in which to - // display itself (as long as it's not an SC_MARK_EMPTY marker). These are checked in order - // with the earlier taking precedence. When multiple markers cause background override, - // the color for the highest numbered one is used. - bool overrideBackground = false; - ColourAllocated background; - if (caret.active && vsDraw.showCaretLineBackground && (vsDraw.caretLineAlpha == SC_ALPHA_NOALPHA) && ll->containsCaret) { - overrideBackground = true; - background = vsDraw.caretLineBackground.allocated; - } - if (!overrideBackground) { - int marks = pdoc->GetMark(line); - for (int markBit = 0; (markBit < 32) && marks; markBit++) { - if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND) && - (vsDraw.markers[markBit].alpha == SC_ALPHA_NOALPHA)) { - background = vsDraw.markers[markBit].back.allocated; - overrideBackground = true; - } - marks >>= 1; - } - } - if (!overrideBackground) { - if (vsDraw.maskInLine) { - int marksMasked = pdoc->GetMark(line) & vsDraw.maskInLine; - if (marksMasked) { - for (int markBit = 0; (markBit < 32) && marksMasked; markBit++) { - if ((marksMasked & 1) && (vsDraw.markers[markBit].markType != SC_MARK_EMPTY) && - (vsDraw.markers[markBit].alpha == SC_ALPHA_NOALPHA)) { - overrideBackground = true; - background = vsDraw.markers[markBit].back.allocated; - } - marksMasked >>= 1; - } - } - } - } - - bool drawWhitespaceBackground = (vsDraw.viewWhitespace != wsInvisible) && - (!overrideBackground) && (vsDraw.whitespaceBackgroundSet); - - bool inIndentation = subLine == 0; // Do not handle indentation except on first subline. - int indentWidth = pdoc->IndentSize() * vsDraw.spaceWidth; - - int posLineStart = pdoc->LineStart(line); - - int startseg = ll->LineStart(subLine); - int subLineStart = ll->positions[startseg]; - int lineStart = 0; - int lineEnd = 0; - if (subLine < ll->lines) { - lineStart = ll->LineStart(subLine); - lineEnd = ll->LineStart(subLine + 1); - } - - bool drawWrapMarkEnd = false; - - if (wrapVisualFlags & SC_WRAPVISUALFLAG_END) { - if (subLine + 1 < ll->lines) { - drawWrapMarkEnd = ll->LineStart(subLine + 1) != 0; - } - } - - if (actualWrapVisualStartIndent != 0) { - - bool continuedWrapLine = false; - if (subLine < ll->lines) { - continuedWrapLine = ll->LineStart(subLine) != 0; - } - - if (continuedWrapLine) { - // draw continuation rect - PRectangle rcPlace = rcSegment; - - rcPlace.left = ll->positions[startseg] + xStart - subLineStart; - rcPlace.right = rcPlace.left + actualWrapVisualStartIndent * vsDraw.aveCharWidth; - - // default bgnd here.. - surface->FillRectangle(rcSegment, vsDraw.styles[STYLE_DEFAULT].back.allocated); - - // main line style would be below but this would be inconsistent with end markers - // also would possibly not be the style at wrap point - //int styleMain = ll->styles[lineStart]; - //surface->FillRectangle(rcPlace, vsDraw.styles[styleMain].back.allocated); - - if (wrapVisualFlags & SC_WRAPVISUALFLAG_START) { - - if (wrapVisualFlagsLocation & SC_WRAPVISUALFLAGLOC_START_BY_TEXT) - rcPlace.left = rcPlace.right - vsDraw.aveCharWidth; - else - rcPlace.right = rcPlace.left + vsDraw.aveCharWidth; - - DrawWrapMarker(surface, rcPlace, false, vsDraw.whitespaceForeground.allocated); - } - - xStart += actualWrapVisualStartIndent * vsDraw.aveCharWidth; - } - } - - int i; - - // Background drawing loop - for (i = lineStart; twoPhaseDraw && (i < lineEnd); i++) { - - int iDoc = i + posLineStart; - // If there is the end of a style run for any reason - if ((ll->styles[i] != ll->styles[i + 1]) || - i == (lineEnd - 1) || - IsControlCharacter(ll->chars[i]) || IsControlCharacter(ll->chars[i + 1]) || - ((ll->selStart != ll->selEnd) && ((iDoc + 1 == ll->selStart) || (iDoc + 1 == ll->selEnd))) || - (i == (ll->edgeColumn - 1))) { - rcSegment.left = ll->positions[startseg] + xStart - subLineStart; - rcSegment.right = ll->positions[i + 1] + xStart - subLineStart; - // Only try to draw if really visible - enhances performance by not calling environment to - // draw strings that are completely past the right side of the window. - if ((rcSegment.left <= rcLine.right) && (rcSegment.right >= rcLine.left)) { - int styleMain = ll->styles[i]; - bool inSelection = (iDoc >= ll->selStart) && (iDoc < ll->selEnd) && (ll->selStart != ll->selEnd); - bool inHotspot = (ll->hsStart != -1) && (iDoc >= ll->hsStart) && (iDoc < ll->hsEnd); - ColourAllocated textBack = TextBackground(vsDraw, overrideBackground, background, inSelection, inHotspot, styleMain, i, ll); - if (ll->chars[i] == '\t') { - // Tab display - if (drawWhitespaceBackground && - (!inIndentation || vsDraw.viewWhitespace == wsVisibleAlways)) - textBack = vsDraw.whitespaceBackground.allocated; - surface->FillRectangle(rcSegment, textBack); - } else if (IsControlCharacter(ll->chars[i])) { - // Control character display - inIndentation = false; - surface->FillRectangle(rcSegment, textBack); - } else { - // Normal text display - surface->FillRectangle(rcSegment, textBack); - if (vsDraw.viewWhitespace != wsInvisible || - (inIndentation && vsDraw.viewIndentationGuides)) { - for (int cpos = 0; cpos <= i - startseg; cpos++) { - if (ll->chars[cpos + startseg] == ' ') { - if (drawWhitespaceBackground && - (!inIndentation || vsDraw.viewWhitespace == wsVisibleAlways)) { - PRectangle rcSpace(ll->positions[cpos + startseg] + xStart, rcSegment.top, - ll->positions[cpos + startseg + 1] + xStart, rcSegment.bottom); - surface->FillRectangle(rcSpace, vsDraw.whitespaceBackground.allocated); - } - } else { - inIndentation = false; - } - } - } - } - } else if (rcSegment.left > rcLine.right) { - break; - } - startseg = i + 1; - } - } - - if (twoPhaseDraw) { - DrawEOL(surface, vsDraw, rcLine, ll, line, lineEnd, - xStart, subLine, subLineStart, overrideBackground, background, - drawWrapMarkEnd, vsDraw.whitespaceForeground.allocated); - } - - inIndentation = subLine == 0; // Do not handle indentation except on first subline. - startseg = ll->LineStart(subLine); - // Foreground drawing loop - for (i = lineStart; i < lineEnd; i++) { - - int iDoc = i + posLineStart; - // If there is the end of a style run for any reason - if ((ll->styles[i] != ll->styles[i + 1]) || - i == (lineEnd - 1) || - IsControlCharacter(ll->chars[i]) || IsControlCharacter(ll->chars[i + 1]) || - ((ll->selStart != ll->selEnd) && ((iDoc + 1 == ll->selStart) || (iDoc + 1 == ll->selEnd))) || - (i == (ll->edgeColumn - 1))) { - rcSegment.left = ll->positions[startseg] + xStart - subLineStart; - rcSegment.right = ll->positions[i + 1] + xStart - subLineStart; - // Only try to draw if really visible - enhances performance by not calling environment to - // draw strings that are completely past the right side of the window. - if ((rcSegment.left <= rcLine.right) && (rcSegment.right >= rcLine.left)) { - int styleMain = ll->styles[i]; - ColourAllocated textFore = vsDraw.styles[styleMain].fore.allocated; - Font &textFont = vsDraw.styles[styleMain].font; - //hotspot foreground - if (ll->hsStart != -1 && iDoc >= ll->hsStart && iDoc < hsEnd) { - if (vsDraw.hotspotForegroundSet) - textFore = vsDraw.hotspotForeground.allocated; - } - bool inSelection = (iDoc >= ll->selStart) && (iDoc < ll->selEnd) && (ll->selStart != ll->selEnd); - if (inSelection && (vsDraw.selforeset)) { - textFore = vsDraw.selforeground.allocated; - } - bool inHotspot = (ll->hsStart != -1) && (iDoc >= ll->hsStart) && (iDoc < ll->hsEnd); - ColourAllocated textBack = TextBackground(vsDraw, overrideBackground, background, inSelection, inHotspot, styleMain, i, ll); - if (ll->chars[i] == '\t') { - // Tab display - if (!twoPhaseDraw) { - if (drawWhitespaceBackground && - (!inIndentation || vsDraw.viewWhitespace == wsVisibleAlways)) - textBack = vsDraw.whitespaceBackground.allocated; - surface->FillRectangle(rcSegment, textBack); - } - if ((vsDraw.viewWhitespace != wsInvisible) || ((inIndentation && vsDraw.viewIndentationGuides))) { - if (vsDraw.whitespaceForegroundSet) - textFore = vsDraw.whitespaceForeground.allocated; - surface->PenColour(textFore); - } - if (inIndentation && vsDraw.viewIndentationGuides) { - for (int xIG = ll->positions[i] / indentWidth * indentWidth; xIG < ll->positions[i + 1]; xIG += indentWidth) { - if (xIG >= ll->positions[i] && xIG > 0) { - DrawIndentGuide(surface, lineVisible, vsDraw.lineHeight, xIG + xStart, rcSegment, - (ll->xHighlightGuide == xIG)); - } - } - } - if (vsDraw.viewWhitespace != wsInvisible) { - if (!inIndentation || vsDraw.viewWhitespace == wsVisibleAlways) { - PRectangle rcTab(rcSegment.left + 1, rcSegment.top + 4, - rcSegment.right - 1, rcSegment.bottom - vsDraw.maxDescent); - DrawTabArrow(surface, rcTab, rcSegment.top + vsDraw.lineHeight / 2); - } - } - } else if (IsControlCharacter(ll->chars[i])) { - // Control character display - inIndentation = false; - if (controlCharSymbol < 32) { - // Draw the character - const char *ctrlChar = ControlCharacterString(ll->chars[i]); - if (!twoPhaseDraw) { - surface->FillRectangle(rcSegment, textBack); - } - int normalCharHeight = surface->Ascent(ctrlCharsFont) - - surface->InternalLeading(ctrlCharsFont); - PRectangle rcCChar = rcSegment; - rcCChar.left = rcCChar.left + 1; - rcCChar.top = rcSegment.top + vsDraw.maxAscent - normalCharHeight; - rcCChar.bottom = rcSegment.top + vsDraw.maxAscent + 1; - PRectangle rcCentral = rcCChar; - rcCentral.top++; - rcCentral.bottom--; - surface->FillRectangle(rcCentral, textFore); - PRectangle rcChar = rcCChar; - rcChar.left++; - rcChar.right--; - surface->DrawTextClipped(rcChar, ctrlCharsFont, - rcSegment.top + vsDraw.maxAscent, ctrlChar, istrlen(ctrlChar), - textBack, textFore); - } else { - char cc[2] = { static_cast(controlCharSymbol), '\0' }; - surface->DrawTextNoClip(rcSegment, ctrlCharsFont, - rcSegment.top + vsDraw.maxAscent, - cc, 1, textBack, textFore); - } - } else { - // Normal text display - if (vsDraw.styles[styleMain].visible) { - if (twoPhaseDraw) { - surface->DrawTextTransparent(rcSegment, textFont, - rcSegment.top + vsDraw.maxAscent, ll->chars + startseg, - i - startseg + 1, textFore); - } else { - surface->DrawTextNoClip(rcSegment, textFont, - rcSegment.top + vsDraw.maxAscent, ll->chars + startseg, - i - startseg + 1, textFore, textBack); - } - } - if (vsDraw.viewWhitespace != wsInvisible || - (inIndentation && vsDraw.viewIndentationGuides)) { - for (int cpos = 0; cpos <= i - startseg; cpos++) { - if (ll->chars[cpos + startseg] == ' ') { - if (vsDraw.viewWhitespace != wsInvisible) { - if (vsDraw.whitespaceForegroundSet) - textFore = vsDraw.whitespaceForeground.allocated; - if (!inIndentation || vsDraw.viewWhitespace == wsVisibleAlways) { - int xmid = (ll->positions[cpos + startseg] + ll->positions[cpos + startseg + 1]) / 2; - if (!twoPhaseDraw && drawWhitespaceBackground && - (!inIndentation || vsDraw.viewWhitespace == wsVisibleAlways)) { - textBack = vsDraw.whitespaceBackground.allocated; - PRectangle rcSpace(ll->positions[cpos + startseg] + xStart, rcSegment.top, ll->positions[cpos + startseg + 1] + xStart, rcSegment.bottom); - surface->FillRectangle(rcSpace, textBack); - } - PRectangle rcDot(xmid + xStart - subLineStart, rcSegment.top + vsDraw.lineHeight / 2, 0, 0); - rcDot.right = rcDot.left + 1; - rcDot.bottom = rcDot.top + 1; - surface->FillRectangle(rcDot, textFore); - } - } - if (inIndentation && vsDraw.viewIndentationGuides) { - int startSpace = ll->positions[cpos + startseg]; - if (startSpace > 0 && (startSpace % indentWidth == 0)) { - DrawIndentGuide(surface, lineVisible, vsDraw.lineHeight, startSpace + xStart, rcSegment, - (ll->xHighlightGuide == ll->positions[cpos + startseg])); - } - } - } else { - inIndentation = false; - } - } - } - } - if (ll->hsStart != -1 && vsDraw.hotspotUnderline && iDoc >= ll->hsStart && iDoc < ll->hsEnd ) { - PRectangle rcUL = rcSegment; - rcUL.top = rcUL.top + vsDraw.maxAscent + 1; - rcUL.bottom = rcUL.top + 1; - if (vsDraw.hotspotForegroundSet) - surface->FillRectangle(rcUL, vsDraw.hotspotForeground.allocated); - else - surface->FillRectangle(rcUL, textFore); - } else if (vsDraw.styles[styleMain].underline) { - PRectangle rcUL = rcSegment; - rcUL.top = rcUL.top + vsDraw.maxAscent + 1; - rcUL.bottom = rcUL.top + 1; - surface->FillRectangle(rcUL, textFore); - } - } else if (rcSegment.left > rcLine.right) { - break; - } - startseg = i + 1; - } - } - - // Draw indicators - // foreach indicator... - for (int indicnum = 0, mask = 1 << pdoc->stylingBits; mask < 0x100; indicnum++) { - if (!(mask & ll->styleBitsSet)) { - mask <<= 1; - continue; - } - int startPos = -1; - // foreach style pos in line... - for (int indicPos = lineStart; indicPos <= lineEnd; indicPos++) { - // look for starts... - if (startPos < 0) { - // NOT in indicator run, looking for START - if (indicPos < lineEnd && (ll->indicators[indicPos] & mask)) - startPos = indicPos; - } - // ... or ends - if (startPos >= 0) { - // IN indicator run, looking for END - if (indicPos >= lineEnd || !(ll->indicators[indicPos] & mask)) { - // AT end of indicator run, DRAW it! - PRectangle rcIndic( - ll->positions[startPos] + xStart - subLineStart, - rcLine.top + vsDraw.maxAscent, - ll->positions[indicPos] + xStart - subLineStart, - rcLine.top + vsDraw.maxAscent + 3); - vsDraw.indicators[indicnum].Draw(surface, rcIndic, rcLine); - // RESET control var - startPos = -1; - } - } - } - mask <<= 1; - } - // End of the drawing of the current line - if (!twoPhaseDraw) { - DrawEOL(surface, vsDraw, rcLine, ll, line, lineEnd, - xStart, subLine, subLineStart, overrideBackground, background, - drawWrapMarkEnd, vsDraw.whitespaceForeground.allocated); - } - if ((vsDraw.selAlpha != SC_ALPHA_NOALPHA) && (ll->selStart >= 0) && (ll->selEnd >= 0)) { - int startPosSel = (ll->selStart < posLineStart) ? posLineStart : ll->selStart; - int endPosSel = (ll->selEnd < (lineEnd + posLineStart)) ? ll->selEnd : (lineEnd + posLineStart); - if (startPosSel < endPosSel) { - rcSegment.left = xStart + ll->positions[startPosSel - posLineStart] - subLineStart; - rcSegment.right = xStart + ll->positions[endPosSel - posLineStart] - subLineStart; - SimpleAlphaRectangle(surface, rcSegment, SelectionBackground(vsDraw), vsDraw.selAlpha); - } - } - - if (vsDraw.edgeState == EDGE_LINE) { - int edgeX = theEdge * vsDraw.spaceWidth; - rcSegment.left = edgeX + xStart; - rcSegment.right = rcSegment.left + 1; - surface->FillRectangle(rcSegment, vsDraw.edgecolour.allocated); - } - - // Draw any translucent whole line states - rcSegment.left = xStart; - rcSegment.right = rcLine.right - 1; - if (caret.active && vsDraw.showCaretLineBackground && ll->containsCaret) { - SimpleAlphaRectangle(surface, rcSegment, vsDraw.caretLineBackground.allocated, vsDraw.caretLineAlpha); - } - int marks = pdoc->GetMark(line); - for (int markBit = 0; (markBit < 32) && marks; markBit++) { - if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND)) { - SimpleAlphaRectangle(surface, rcSegment, vsDraw.markers[markBit].back.allocated, vsDraw.markers[markBit].alpha); - } - marks >>= 1; - } - if (vsDraw.maskInLine) { - int marksMasked = pdoc->GetMark(line) & vsDraw.maskInLine; - if (marksMasked) { - for (int markBit = 0; (markBit < 32) && marksMasked; markBit++) { - if ((marksMasked & 1) && (vsDraw.markers[markBit].markType != SC_MARK_EMPTY)) { - SimpleAlphaRectangle(surface, rcSegment, vsDraw.markers[markBit].back.allocated, vsDraw.markers[markBit].alpha); - } - marksMasked >>= 1; - } - } - } -} - -void Editor::RefreshPixMaps(Surface *surfaceWindow) { - if (!pixmapSelPattern->Initialised()) { - const int patternSize = 8; - pixmapSelPattern->InitPixMap(patternSize, patternSize, surfaceWindow, wMain.GetID()); - // This complex procedure is to reproduce the checkerboard dithered pattern used by windows - // for scroll bars and Visual Studio for its selection margin. The colour of this pattern is half - // way between the chrome colour and the chrome highlight colour making a nice transition - // between the window chrome and the content area. And it works in low colour depths. - PRectangle rcPattern(0, 0, patternSize, patternSize); - - // Initialize default colours based on the chrome colour scheme. Typically the highlight is white. - ColourAllocated colourFMFill = vs.selbar.allocated; - ColourAllocated colourFMStripes = vs.selbarlight.allocated; - - if (!(vs.selbarlight.desired == ColourDesired(0xff, 0xff, 0xff))) { - // User has chosen an unusual chrome colour scheme so just use the highlight edge colour. - // (Typically, the highlight colour is white.) - colourFMFill = vs.selbarlight.allocated; - } - - if (vs.foldmarginColourSet) { - // override default fold margin colour - colourFMFill = vs.foldmarginColour.allocated; - } - if (vs.foldmarginHighlightColourSet) { - // override default fold margin highlight colour - colourFMStripes = vs.foldmarginHighlightColour.allocated; - } - - pixmapSelPattern->FillRectangle(rcPattern, colourFMFill); - pixmapSelPattern->PenColour(colourFMStripes); - for (int stripe = 0; stripe < patternSize; stripe++) { - // Alternating 1 pixel stripes is same as checkerboard. - pixmapSelPattern->MoveTo(0, stripe * 2); - pixmapSelPattern->LineTo(patternSize, stripe * 2 - patternSize); - } - } - - if (!pixmapIndentGuide->Initialised()) { - // 1 extra pixel in height so can handle odd/even positions and so produce a continuous line - pixmapIndentGuide->InitPixMap(1, vs.lineHeight + 1, surfaceWindow, wMain.GetID()); - pixmapIndentGuideHighlight->InitPixMap(1, vs.lineHeight + 1, surfaceWindow, wMain.GetID()); - PRectangle rcIG(0, 0, 1, vs.lineHeight); - pixmapIndentGuide->FillRectangle(rcIG, vs.styles[STYLE_INDENTGUIDE].back.allocated); - pixmapIndentGuide->PenColour(vs.styles[STYLE_INDENTGUIDE].fore.allocated); - pixmapIndentGuideHighlight->FillRectangle(rcIG, vs.styles[STYLE_BRACELIGHT].back.allocated); - pixmapIndentGuideHighlight->PenColour(vs.styles[STYLE_BRACELIGHT].fore.allocated); - for (int stripe = 1; stripe < vs.lineHeight + 1; stripe += 2) { - pixmapIndentGuide->MoveTo(0, stripe); - pixmapIndentGuide->LineTo(2, stripe); - pixmapIndentGuideHighlight->MoveTo(0, stripe); - pixmapIndentGuideHighlight->LineTo(2, stripe); - } - } - - if (bufferedDraw) { - if (!pixmapLine->Initialised()) { - PRectangle rcClient = GetClientRectangle(); - pixmapLine->InitPixMap(rcClient.Width(), vs.lineHeight, - surfaceWindow, wMain.GetID()); - pixmapSelMargin->InitPixMap(vs.fixedColumnWidth, - rcClient.Height(), surfaceWindow, wMain.GetID()); - } - } -} - -void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) { - //Platform::DebugPrintf("Paint:%1d (%3d,%3d) ... (%3d,%3d)\n", - // paintingAllText, rcArea.left, rcArea.top, rcArea.right, rcArea.bottom); - - RefreshStyleData(); - RefreshPixMaps(surfaceWindow); - - PRectangle rcClient = GetClientRectangle(); - //Platform::DebugPrintf("Client: (%3d,%3d) ... (%3d,%3d) %d\n", - // rcClient.left, rcClient.top, rcClient.right, rcClient.bottom); - - surfaceWindow->SetPalette(&palette, true); - pixmapLine->SetPalette(&palette, !hasFocus); - - int screenLinePaintFirst = rcArea.top / vs.lineHeight; - // The area to be painted plus one extra line is styled. - // The extra line is to determine when a style change, such as starting a comment flows on to other lines. - int lineStyleLast = topLine + (rcArea.bottom - 1) / vs.lineHeight + 1; - //Platform::DebugPrintf("Paint lines = %d .. %d\n", topLine + screenLinePaintFirst, lineStyleLast); - int endPosPaint = pdoc->Length(); - if (lineStyleLast < cs.LinesDisplayed()) - endPosPaint = pdoc->LineStart(cs.DocFromDisplay(lineStyleLast + 1)); - - int xStart = vs.fixedColumnWidth - xOffset; - int ypos = 0; - if (!bufferedDraw) - ypos += screenLinePaintFirst * vs.lineHeight; - int yposScreen = screenLinePaintFirst * vs.lineHeight; - - // Ensure we are styled as far as we are painting. - pdoc->EnsureStyledTo(endPosPaint); - bool paintAbandonedByStyling = paintState == paintAbandoned; - if (needUpdateUI) { - NotifyUpdateUI(); - needUpdateUI = false; - RefreshStyleData(); - RefreshPixMaps(surfaceWindow); - } - - // Call priority lines wrap on a window of lines which are likely - // to rendered with the following paint (that is wrap the visible - // lines first). - int startLineToWrap = cs.DocFromDisplay(topLine) - 5; - if (startLineToWrap < 0) - startLineToWrap = -1; - if (WrapLines(false, startLineToWrap)) { - // The wrapping process has changed the height of some lines so - // abandon this paint for a complete repaint. - if (AbandonPaint()) { - return; - } - RefreshPixMaps(surfaceWindow); // In case pixmaps invalidated by scrollbar change - } - PLATFORM_ASSERT(pixmapSelPattern->Initialised()); - - PaintSelMargin(surfaceWindow, rcArea); - - PRectangle rcRightMargin = rcClient; - rcRightMargin.left = rcRightMargin.right - vs.rightMarginWidth; - if (rcArea.Intersects(rcRightMargin)) { - surfaceWindow->FillRectangle(rcRightMargin, vs.styles[STYLE_DEFAULT].back.allocated); - } - - if (paintState == paintAbandoned) { - // Either styling or NotifyUpdateUI noticed that painting is needed - // outside the current painting rectangle - //Platform::DebugPrintf("Abandoning paint\n"); - if (wrapState != eWrapNone) { - if (paintAbandonedByStyling) { - // Styling has spilled over a line end, such as occurs by starting a multiline - // comment. The width of subsequent text may have changed, so rewrap. - NeedWrapping(cs.DocFromDisplay(topLine)); - } - } - return; - } - //Platform::DebugPrintf("start display %d, offset = %d\n", pdoc->Length(), xOffset); - - // Do the painting - if (rcArea.right > vs.fixedColumnWidth) { - - Surface *surface = surfaceWindow; - if (bufferedDraw) { - surface = pixmapLine; - PLATFORM_ASSERT(pixmapLine->Initialised()); - } - surface->SetUnicodeMode(IsUnicodeMode()); - surface->SetDBCSMode(CodePage()); - - int visibleLine = topLine + screenLinePaintFirst; - - int posCaret = currentPos; - if (posDrag >= 0) - posCaret = posDrag; - int lineCaret = pdoc->LineFromPosition(posCaret); - - // Remove selection margin from drawing area so text will not be drawn - // on it in unbuffered mode. - PRectangle rcTextArea = rcClient; - rcTextArea.left = vs.fixedColumnWidth; - rcTextArea.right -= vs.rightMarginWidth; - surfaceWindow->SetClip(rcTextArea); - - // Loop on visible lines - //double durLayout = 0.0; - //double durPaint = 0.0; - //double durCopy = 0.0; - //ElapsedTime etWhole; - int lineDocPrevious = -1; // Used to avoid laying out one document line multiple times - AutoLineLayout ll(llc, 0); - SelectionLineIterator lineIterator(this); - while (visibleLine < cs.LinesDisplayed() && yposScreen < rcArea.bottom) { - - int lineDoc = cs.DocFromDisplay(visibleLine); - // Only visible lines should be handled by the code within the loop - PLATFORM_ASSERT(cs.GetVisible(lineDoc)); - int lineStartSet = cs.DisplayFromDoc(lineDoc); - int subLine = visibleLine - lineStartSet; - - // Copy this line and its styles from the document into local arrays - // and determine the x position at which each character starts. - //ElapsedTime et; - if (lineDoc != lineDocPrevious) { - ll.Set(0); - // For rectangular selection this accesses the layout cache so should be after layout returned. - lineIterator.SetAt(lineDoc); - ll.Set(RetrieveLineLayout(lineDoc)); - LayoutLine(lineDoc, surface, vs, ll, wrapWidth); - lineDocPrevious = lineDoc; - } - //durLayout += et.Duration(true); - - if (ll) { - if (selType == selStream) { - ll->selStart = SelectionStart(); - ll->selEnd = SelectionEnd(); - } else { - ll->selStart = lineIterator.startPos; - ll->selEnd = lineIterator.endPos; - } - ll->containsCaret = lineDoc == lineCaret; - if (hideSelection) { - ll->selStart = -1; - ll->selEnd = -1; - ll->containsCaret = false; - } - - GetHotSpotRange(ll->hsStart, ll->hsEnd); - - PRectangle rcLine = rcClient; - rcLine.top = ypos; - rcLine.bottom = ypos + vs.lineHeight; - - Range rangeLine(pdoc->LineStart(lineDoc), pdoc->LineStart(lineDoc + 1)); - // Highlight the current braces if any - ll->SetBracesHighlight(rangeLine, braces, static_cast(bracesMatchStyle), - highlightGuideColumn * vs.spaceWidth); - - // Draw the line - DrawLine(surface, vs, lineDoc, visibleLine, xStart, rcLine, ll, subLine); - //durPaint += et.Duration(true); - - // Restore the previous styles for the brace highlights in case layout is in cache. - ll->RestoreBracesHighlight(rangeLine, braces); - - bool expanded = cs.GetExpanded(lineDoc); - if ((foldFlags & SC_FOLDFLAG_BOX) == 0) { - // Paint the line above the fold - if ((expanded && (foldFlags & SC_FOLDFLAG_LINEBEFORE_EXPANDED)) - || - (!expanded && (foldFlags & SC_FOLDFLAG_LINEBEFORE_CONTRACTED))) { - if (pdoc->GetLevel(lineDoc) & SC_FOLDLEVELHEADERFLAG) { - PRectangle rcFoldLine = rcLine; - rcFoldLine.bottom = rcFoldLine.top + 1; - surface->FillRectangle(rcFoldLine, vs.styles[STYLE_DEFAULT].fore.allocated); - } - } - // Paint the line below the fold - if ((expanded && (foldFlags & SC_FOLDFLAG_LINEAFTER_EXPANDED)) - || - (!expanded && (foldFlags & SC_FOLDFLAG_LINEAFTER_CONTRACTED))) { - if (pdoc->GetLevel(lineDoc) & SC_FOLDLEVELHEADERFLAG) { - PRectangle rcFoldLine = rcLine; - rcFoldLine.top = rcFoldLine.bottom - 1; - surface->FillRectangle(rcFoldLine, vs.styles[STYLE_DEFAULT].fore.allocated); - } - } - } else { - int FoldLevelCurr = (pdoc->GetLevel(lineDoc) & SC_FOLDLEVELNUMBERMASK) - SC_FOLDLEVELBASE; - int FoldLevelPrev = (pdoc->GetLevel(lineDoc - 1) & SC_FOLDLEVELNUMBERMASK) - SC_FOLDLEVELBASE; - int FoldLevelFlags = (pdoc->GetLevel(lineDoc) & ~SC_FOLDLEVELNUMBERMASK) & ~(0xFFF0000); - int indentationStep = pdoc->IndentSize(); - // Draw line above fold - if ((FoldLevelPrev < FoldLevelCurr) - || - (FoldLevelFlags & SC_FOLDLEVELBOXHEADERFLAG - && - (pdoc->GetLevel(lineDoc - 1) & SC_FOLDLEVELBOXFOOTERFLAG) == 0)) { - PRectangle rcFoldLine = rcLine; - rcFoldLine.bottom = rcFoldLine.top + 1; - rcFoldLine.left += xStart + FoldLevelCurr * vs.spaceWidth * indentationStep - 1; - surface->FillRectangle(rcFoldLine, vs.styles[STYLE_DEFAULT].fore.allocated); - } - - // Line below the fold (or below a contracted fold) - if (FoldLevelFlags & SC_FOLDLEVELBOXFOOTERFLAG - || - (!expanded && (foldFlags & SC_FOLDFLAG_LINEAFTER_CONTRACTED))) { - PRectangle rcFoldLine = rcLine; - rcFoldLine.top = rcFoldLine.bottom - 1; - rcFoldLine.left += xStart + (FoldLevelCurr) * vs.spaceWidth * indentationStep - 1; - surface->FillRectangle(rcFoldLine, vs.styles[STYLE_DEFAULT].fore.allocated); - } - - PRectangle rcBoxLine = rcLine; - // Draw vertical line for every fold level - for (int i = 0; i <= FoldLevelCurr; i++) { - rcBoxLine.left = xStart + i * vs.spaceWidth * indentationStep - 1; - rcBoxLine.right = rcBoxLine.left + 1; - surface->FillRectangle(rcBoxLine, vs.styles[STYLE_DEFAULT].fore.allocated); - } - } - - // Draw the Caret - if (lineDoc == lineCaret) { - int offset = Platform::Minimum(posCaret - rangeLine.start, ll->maxLineLength); - if ((offset >= ll->LineStart(subLine)) && - ((offset < ll->LineStart(subLine + 1)) || offset == ll->numCharsInLine)) { - int xposCaret = ll->positions[offset] - ll->positions[ll->LineStart(subLine)] + xStart; - - if (actualWrapVisualStartIndent != 0) { - int lineStart = ll->LineStart(subLine); - if (lineStart != 0) // Wrapped - xposCaret += actualWrapVisualStartIndent * vs.aveCharWidth; - } - int widthOverstrikeCaret; - if (posCaret == pdoc->Length()) { // At end of document - widthOverstrikeCaret = vs.aveCharWidth; - } else if ((posCaret - rangeLine.start) >= ll->numCharsInLine) { // At end of line - widthOverstrikeCaret = vs.aveCharWidth; - } else { - widthOverstrikeCaret = ll->positions[offset + 1] - ll->positions[offset]; - } - if (widthOverstrikeCaret < 3) // Make sure its visible - widthOverstrikeCaret = 3; - if (((caret.active && caret.on) || (posDrag >= 0)) && xposCaret >= 0) { - PRectangle rcCaret = rcLine; - int caretWidthOffset = 0; - if ((offset > 0) && (vs.caretWidth > 1)) - caretWidthOffset = 1; // Move back so overlaps both character cells. - if (posDrag >= 0) { - rcCaret.left = xposCaret - caretWidthOffset; - rcCaret.right = rcCaret.left + vs.caretWidth; - } else { - if (inOverstrike) { - rcCaret.top = rcCaret.bottom - 2; - rcCaret.left = xposCaret + 1; - rcCaret.right = rcCaret.left + widthOverstrikeCaret - 1; - } else { - rcCaret.left = xposCaret - caretWidthOffset; - rcCaret.right = rcCaret.left + vs.caretWidth; - } - } - surface->FillRectangle(rcCaret, vs.caretcolour.allocated); - } - } - } - - if (bufferedDraw) { - Point from(vs.fixedColumnWidth, 0); - PRectangle rcCopyArea(vs.fixedColumnWidth, yposScreen, - rcClient.right, yposScreen + vs.lineHeight); - surfaceWindow->Copy(rcCopyArea, from, *pixmapLine); - } - //durCopy += et.Duration(true); - } - - if (!bufferedDraw) { - ypos += vs.lineHeight; - } - - yposScreen += vs.lineHeight; - visibleLine++; - //gdk_flush(); - } - ll.Set(0); - //if (durPaint < 0.00000001) - // durPaint = 0.00000001; - - // Right column limit indicator - PRectangle rcBeyondEOF = rcClient; - rcBeyondEOF.left = vs.fixedColumnWidth; - rcBeyondEOF.right = rcBeyondEOF.right; - rcBeyondEOF.top = (cs.LinesDisplayed() - topLine) * vs.lineHeight; - if (rcBeyondEOF.top < rcBeyondEOF.bottom) { - surfaceWindow->FillRectangle(rcBeyondEOF, vs.styles[STYLE_DEFAULT].back.allocated); - if (vs.edgeState == EDGE_LINE) { - int edgeX = theEdge * vs.spaceWidth; - rcBeyondEOF.left = edgeX + xStart; - rcBeyondEOF.right = rcBeyondEOF.left + 1; - surfaceWindow->FillRectangle(rcBeyondEOF, vs.edgecolour.allocated); - } - } - //Platform::DebugPrintf( - //"Layout:%9.6g Paint:%9.6g Ratio:%9.6g Copy:%9.6g Total:%9.6g\n", - //durLayout, durPaint, durLayout / durPaint, durCopy, etWhole.Duration()); - NotifyPainted(); - } -} - -// Space (3 space characters) between line numbers and text when printing. -#define lineNumberPrintSpace " " - -ColourDesired InvertedLight(ColourDesired orig) { - unsigned int r = orig.GetRed(); - unsigned int g = orig.GetGreen(); - unsigned int b = orig.GetBlue(); - unsigned int l = (r + g + b) / 3; // There is a better calculation for this that matches human eye - unsigned int il = 0xff - l; - if (l == 0) - return ColourDesired(0xff, 0xff, 0xff); - r = r * il / l; - g = g * il / l; - b = b * il / l; - return ColourDesired(Platform::Minimum(r, 0xff), Platform::Minimum(g, 0xff), Platform::Minimum(b, 0xff)); -} - -// This is mostly copied from the Paint method but with some things omitted -// such as the margin markers, line numbers, selection and caret -// Should be merged back into a combined Draw method. -long Editor::FormatRange(bool draw, RangeToFormat *pfr) { - if (!pfr) - return 0; - - AutoSurface surface(pfr->hdc, this); - if (!surface) - return 0; - AutoSurface surfaceMeasure(pfr->hdcTarget, this); - if (!surfaceMeasure) { - return 0; - } - - ViewStyle vsPrint(vs); - - // Modify the view style for printing as do not normally want any of the transient features to be printed - // Printing supports only the line number margin. - int lineNumberIndex = -1; - for (int margin = 0; margin < ViewStyle::margins; margin++) { - if ((vsPrint.ms[margin].style == SC_MARGIN_NUMBER) && (vsPrint.ms[margin].width > 0)) { - lineNumberIndex = margin; - } else { - vsPrint.ms[margin].width = 0; - } - } - vsPrint.showMarkedLines = false; - vsPrint.fixedColumnWidth = 0; - vsPrint.zoomLevel = printMagnification; - vsPrint.viewIndentationGuides = false; - // Don't show the selection when printing - vsPrint.selbackset = false; - vsPrint.selforeset = false; - vsPrint.selAlpha = SC_ALPHA_NOALPHA; - vsPrint.whitespaceBackgroundSet = false; - vsPrint.whitespaceForegroundSet = false; - vsPrint.showCaretLineBackground = false; - - // Set colours for printing according to users settings - for (int sty = 0;sty <= STYLE_MAX;sty++) { - if (printColourMode == SC_PRINT_INVERTLIGHT) { - vsPrint.styles[sty].fore.desired = InvertedLight(vsPrint.styles[sty].fore.desired); - vsPrint.styles[sty].back.desired = InvertedLight(vsPrint.styles[sty].back.desired); - } else if (printColourMode == SC_PRINT_BLACKONWHITE) { - vsPrint.styles[sty].fore.desired = ColourDesired(0, 0, 0); - vsPrint.styles[sty].back.desired = ColourDesired(0xff, 0xff, 0xff); - } else if (printColourMode == SC_PRINT_COLOURONWHITE) { - vsPrint.styles[sty].back.desired = ColourDesired(0xff, 0xff, 0xff); - } else if (printColourMode == SC_PRINT_COLOURONWHITEDEFAULTBG) { - if (sty <= STYLE_DEFAULT) { - vsPrint.styles[sty].back.desired = ColourDesired(0xff, 0xff, 0xff); - } - } - } - // White background for the line numbers - vsPrint.styles[STYLE_LINENUMBER].back.desired = ColourDesired(0xff, 0xff, 0xff); - - vsPrint.Refresh(*surfaceMeasure); - // Ensure colours are set up - vsPrint.RefreshColourPalette(palette, true); - vsPrint.RefreshColourPalette(palette, false); - // Determining width must hapen after fonts have been realised in Refresh - int lineNumberWidth = 0; - if (lineNumberIndex >= 0) { - lineNumberWidth = surfaceMeasure->WidthText(vsPrint.styles[STYLE_LINENUMBER].font, - "99999" lineNumberPrintSpace, 5 + istrlen(lineNumberPrintSpace)); - vsPrint.ms[lineNumberIndex].width = lineNumberWidth; - } - - int linePrintStart = pdoc->LineFromPosition(pfr->chrg.cpMin); - int linePrintLast = linePrintStart + (pfr->rc.bottom - pfr->rc.top) / vsPrint.lineHeight - 1; - if (linePrintLast < linePrintStart) - linePrintLast = linePrintStart; - int linePrintMax = pdoc->LineFromPosition(pfr->chrg.cpMax); - if (linePrintLast > linePrintMax) - linePrintLast = linePrintMax; - //Platform::DebugPrintf("Formatting lines=[%0d,%0d,%0d] top=%0d bottom=%0d line=%0d %0d\n", - // linePrintStart, linePrintLast, linePrintMax, pfr->rc.top, pfr->rc.bottom, vsPrint.lineHeight, - // surfaceMeasure->Height(vsPrint.styles[STYLE_LINENUMBER].font)); - int endPosPrint = pdoc->Length(); - if (linePrintLast < pdoc->LinesTotal()) - endPosPrint = pdoc->LineStart(linePrintLast + 1); - - // Ensure we are styled to where we are formatting. - pdoc->EnsureStyledTo(endPosPrint); - - int xStart = vsPrint.fixedColumnWidth + pfr->rc.left + lineNumberWidth; - int ypos = pfr->rc.top; - - int lineDoc = linePrintStart; - - int nPrintPos = pfr->chrg.cpMin; - int visibleLine = 0; - int widthPrint = pfr->rc.Width() - lineNumberWidth; - if (printWrapState == eWrapNone) - widthPrint = LineLayout::wrapWidthInfinite; - - while (lineDoc <= linePrintLast && ypos < pfr->rc.bottom) { - - // When printing, the hdc and hdcTarget may be the same, so - // changing the state of surfaceMeasure may change the underlying - // state of surface. Therefore, any cached state is discarded before - // using each surface. - surfaceMeasure->FlushCachedState(); - - // Copy this line and its styles from the document into local arrays - // and determine the x position at which each character starts. - LineLayout ll(8000); - LayoutLine(lineDoc, surfaceMeasure, vsPrint, &ll, widthPrint); - - ll.selStart = -1; - ll.selEnd = -1; - ll.containsCaret = false; - - PRectangle rcLine; - rcLine.left = pfr->rc.left + lineNumberWidth; - rcLine.top = ypos; - rcLine.right = pfr->rc.right - 1; - rcLine.bottom = ypos + vsPrint.lineHeight; - - // When document line is wrapped over multiple display lines, find where - // to start printing from to ensure a particular position is on the first - // line of the page. - if (visibleLine == 0) { - int startWithinLine = nPrintPos - pdoc->LineStart(lineDoc); - for (int iwl = 0; iwl < ll.lines - 1; iwl++) { - if (ll.LineStart(iwl) <= startWithinLine && ll.LineStart(iwl + 1) >= startWithinLine) { - visibleLine = -iwl; - } - } - - if (ll.lines > 1 && startWithinLine >= ll.LineStart(ll.lines - 1)) { - visibleLine = -(ll.lines - 1); - } - } - - if (draw && lineNumberWidth && - (ypos + vsPrint.lineHeight <= pfr->rc.bottom) && - (visibleLine >= 0)) { - char number[100]; - sprintf(number, "%d" lineNumberPrintSpace, lineDoc + 1); - PRectangle rcNumber = rcLine; - rcNumber.right = rcNumber.left + lineNumberWidth; - // Right justify - rcNumber.left -= surfaceMeasure->WidthText( - vsPrint.styles[STYLE_LINENUMBER].font, number, istrlen(number)); - surface->FlushCachedState(); - surface->DrawTextNoClip(rcNumber, vsPrint.styles[STYLE_LINENUMBER].font, - ypos + vsPrint.maxAscent, number, istrlen(number), - vsPrint.styles[STYLE_LINENUMBER].fore.allocated, - vsPrint.styles[STYLE_LINENUMBER].back.allocated); - } - - // Draw the line - surface->FlushCachedState(); - - for (int iwl = 0; iwl < ll.lines; iwl++) { - if (ypos + vsPrint.lineHeight <= pfr->rc.bottom) { - if (visibleLine >= 0) { - if (draw) { - rcLine.top = ypos; - rcLine.bottom = ypos + vsPrint.lineHeight; - DrawLine(surface, vsPrint, lineDoc, visibleLine, xStart, rcLine, &ll, iwl); - } - ypos += vsPrint.lineHeight; - } - visibleLine++; - if (iwl == ll.lines - 1) - nPrintPos = pdoc->LineStart(lineDoc + 1); - else - nPrintPos += ll.LineStart(iwl + 1) - ll.LineStart(iwl); - } - } - - ++lineDoc; - } - - return nPrintPos; -} - -int Editor::TextWidth(int style, const char *text) { - RefreshStyleData(); - AutoSurface surface(this); - if (surface) { - return surface->WidthText(vs.styles[style].font, text, istrlen(text)); - } else { - return 1; - } -} - -// Empty method is overridden on GTK+ to show / hide scrollbars -void Editor::ReconfigureScrollBars() {} - -void Editor::SetScrollBars() { - RefreshStyleData(); - - int nMax = MaxScrollPos(); - int nPage = LinesOnScreen(); - bool modified = ModifyScrollBars(nMax + nPage - 1, nPage); - if (modified) { - DwellEnd(true); - } - - // TODO: ensure always showing as many lines as possible - // May not be, if, for example, window made larger - if (topLine > MaxScrollPos()) { - SetTopLine(Platform::Clamp(topLine, 0, MaxScrollPos())); - SetVerticalScrollPos(); - Redraw(); - } - if (modified) { - if (!AbandonPaint()) - Redraw(); - } - //Platform::DebugPrintf("end max = %d page = %d\n", nMax, nPage); -} - -void Editor::ChangeSize() { - DropGraphics(); - SetScrollBars(); - if (wrapState != eWrapNone) { - PRectangle rcTextArea = GetClientRectangle(); - rcTextArea.left = vs.fixedColumnWidth; - rcTextArea.right -= vs.rightMarginWidth; - if (wrapWidth != rcTextArea.Width()) { - NeedWrapping(); - Redraw(); - } - } -} - -void Editor::AddChar(char ch) { - char s[2]; - s[0] = ch; - s[1] = '\0'; - AddCharUTF(s, 1); -} - -void Editor::AddCharUTF(char *s, unsigned int len, bool treatAsDBCS) { - bool wasSelection = currentPos != anchor; - ClearSelection(); - bool charReplaceAction = false; - if (inOverstrike && !wasSelection && !RangeContainsProtected(currentPos, currentPos + 1)) { - if (currentPos < (pdoc->Length())) { - if (!IsEOLChar(pdoc->CharAt(currentPos))) { - charReplaceAction = true; - pdoc->BeginUndoAction(); - pdoc->DelChar(currentPos); - } - } - } - if (pdoc->InsertString(currentPos, s, len)) { - SetEmptySelection(currentPos + len); - } - if (charReplaceAction) { - pdoc->EndUndoAction(); - } - EnsureCaretVisible(); - // Avoid blinking during rapid typing: - ShowCaretAtCurrentPosition(); - if (!caretSticky) { - SetLastXChosen(); - } - - if (treatAsDBCS) { - NotifyChar((static_cast(s[0]) << 8) | - static_cast(s[1])); - } else { - int byte = static_cast(s[0]); - if ((byte < 0xC0) || (1 == len)) { - // Handles UTF-8 characters between 0x01 and 0x7F and single byte - // characters when not in UTF-8 mode. - // Also treats \0 and naked trail bytes 0x80 to 0xBF as valid - // characters representing themselves. - } else { - // Unroll 1 to 3 byte UTF-8 sequences. See reference data at: - // http://www.cl.cam.ac.uk/~mgk25/unicode.html - // http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt - if (byte < 0xE0) { - int byte2 = static_cast(s[1]); - if ((byte2 & 0xC0) == 0x80) { - // Two-byte-character lead-byte followed by a trail-byte. - byte = (((byte & 0x1F) << 6) | (byte2 & 0x3F)); - } - // A two-byte-character lead-byte not followed by trail-byte - // represents itself. - } else if (byte < 0xF0) { - int byte2 = static_cast(s[1]); - int byte3 = static_cast(s[2]); - if (((byte2 & 0xC0) == 0x80) && ((byte3 & 0xC0) == 0x80)) { - // Three-byte-character lead byte followed by two trail bytes. - byte = (((byte & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | - (byte3 & 0x3F)); - } - // A three-byte-character lead-byte not followed by two trail-bytes - // represents itself. - } - } - NotifyChar(byte); - } -} - -void Editor::ClearSelection() { - if (!SelectionContainsProtected()) { - int startPos = SelectionStart(); - if (selType == selStream) { - unsigned int chars = SelectionEnd() - startPos; - if (0 != chars) { - pdoc->BeginUndoAction(); - pdoc->DeleteChars(startPos, chars); - pdoc->EndUndoAction(); - } - } else { - pdoc->BeginUndoAction(); - SelectionLineIterator lineIterator(this, false); - while (lineIterator.Iterate()) { - startPos = lineIterator.startPos; - unsigned int chars = lineIterator.endPos - startPos; - if (0 != chars) { - pdoc->DeleteChars(startPos, chars); - } - } - pdoc->EndUndoAction(); - selType = selStream; - } - SetEmptySelection(startPos); - } -} - -void Editor::ClearAll() { - pdoc->BeginUndoAction(); - if (0 != pdoc->Length()) { - pdoc->DeleteChars(0, pdoc->Length()); - } - if (!pdoc->IsReadOnly()) { - cs.Clear(); - } - pdoc->EndUndoAction(); - anchor = 0; - currentPos = 0; - SetTopLine(0); - SetVerticalScrollPos(); - InvalidateStyleRedraw(); -} - -void Editor::ClearDocumentStyle() { - pdoc->StartStyling(0, '\377'); - pdoc->SetStyleFor(pdoc->Length(), 0); - cs.ShowAll(); - pdoc->ClearLevels(); -} - -void Editor::Cut() { - if (!pdoc->IsReadOnly() && !SelectionContainsProtected()) { - Copy(); - ClearSelection(); - } -} - -void Editor::PasteRectangular(int pos, const char *ptr, int len) { - if (pdoc->IsReadOnly() || SelectionContainsProtected()) { - return; - } - currentPos = pos; - int xInsert = XFromPosition(currentPos); - int line = pdoc->LineFromPosition(currentPos); - bool prevCr = false; - pdoc->BeginUndoAction(); - for (int i = 0; i < len; i++) { - if (IsEOLChar(ptr[i])) { - if ((ptr[i] == '\r') || (!prevCr)) - line++; - if (line >= pdoc->LinesTotal()) { - if (pdoc->eolMode != SC_EOL_LF) - pdoc->InsertChar(pdoc->Length(), '\r'); - if (pdoc->eolMode != SC_EOL_CR) - pdoc->InsertChar(pdoc->Length(), '\n'); - } - // Pad the end of lines with spaces if required - currentPos = PositionFromLineX(line, xInsert); - if ((XFromPosition(currentPos) < xInsert) && (i + 1 < len)) { - for (int i = 0; i < xInsert - XFromPosition(currentPos); i++) { - pdoc->InsertChar(currentPos, ' '); - currentPos++; - } - } - prevCr = ptr[i] == '\r'; - } else { - pdoc->InsertString(currentPos, ptr + i, 1); - currentPos++; - prevCr = false; - } - } - pdoc->EndUndoAction(); - SetEmptySelection(pos); -} - -bool Editor::CanPaste() { - return !pdoc->IsReadOnly() && !SelectionContainsProtected(); -} - -void Editor::Clear() { - if (currentPos == anchor) { - if (!RangeContainsProtected(currentPos, currentPos + 1)) { - DelChar(); - } - } else { - ClearSelection(); - } - SetEmptySelection(currentPos); -} - -void Editor::SelectAll() { - SetSelection(0, pdoc->Length()); - Redraw(); -} - -void Editor::Undo() { - if (pdoc->CanUndo()) { - InvalidateCaret(); - int newPos = pdoc->Undo(); - if (newPos >= 0) - SetEmptySelection(newPos); - EnsureCaretVisible(); - } -} - -void Editor::Redo() { - if (pdoc->CanRedo()) { - int newPos = pdoc->Redo(); - if (newPos >= 0) - SetEmptySelection(newPos); - EnsureCaretVisible(); - } -} - -void Editor::DelChar() { - if (!RangeContainsProtected(currentPos, currentPos + 1)) { - pdoc->DelChar(currentPos); - } - // Avoid blinking during rapid typing: - ShowCaretAtCurrentPosition(); -} - -void Editor::DelCharBack(bool allowLineStartDeletion) { - if (currentPos == anchor) { - if (!RangeContainsProtected(currentPos - 1, currentPos)) { - int lineCurrentPos = pdoc->LineFromPosition(currentPos); - if (allowLineStartDeletion || (pdoc->LineStart(lineCurrentPos) != currentPos)) { - if (pdoc->GetColumn(currentPos) <= pdoc->GetLineIndentation(lineCurrentPos) && - pdoc->GetColumn(currentPos) > 0 && pdoc->backspaceUnindents) { - pdoc->BeginUndoAction(); - int indentation = pdoc->GetLineIndentation(lineCurrentPos); - int indentationStep = pdoc->IndentSize(); - if (indentation % indentationStep == 0) { - pdoc->SetLineIndentation(lineCurrentPos, indentation - indentationStep); - } else { - pdoc->SetLineIndentation(lineCurrentPos, indentation - (indentation % indentationStep)); - } - SetEmptySelection(pdoc->GetLineIndentPosition(lineCurrentPos)); - pdoc->EndUndoAction(); - } else { - pdoc->DelCharBack(currentPos); - } - } - } - } else { - ClearSelection(); - SetEmptySelection(currentPos); - } - // Avoid blinking during rapid typing: - ShowCaretAtCurrentPosition(); -} - -void Editor::NotifyFocus(bool) {} - -void Editor::NotifyStyleToNeeded(int endStyleNeeded) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_STYLENEEDED; - scn.position = endStyleNeeded; - NotifyParent(scn); -} - -void Editor::NotifyStyleNeeded(Document*, void *, int endStyleNeeded) { - NotifyStyleToNeeded(endStyleNeeded); -} - -void Editor::NotifyChar(int ch) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_CHARADDED; - scn.ch = ch; - NotifyParent(scn); - if (recordingMacro) { - char txt[2]; - txt[0] = static_cast(ch); - txt[1] = '\0'; - NotifyMacroRecord(SCI_REPLACESEL, 0, reinterpret_cast(txt)); - } -} - -void Editor::NotifySavePoint(bool isSavePoint) { - SCNotification scn = {0}; - if (isSavePoint) { - scn.nmhdr.code = SCN_SAVEPOINTREACHED; - } else { - scn.nmhdr.code = SCN_SAVEPOINTLEFT; - } - NotifyParent(scn); -} - -void Editor::NotifyModifyAttempt() { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_MODIFYATTEMPTRO; - NotifyParent(scn); -} - -void Editor::NotifyDoubleClick(Point, bool) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_DOUBLECLICK; - NotifyParent(scn); -} - -void Editor::NotifyHotSpotDoubleClicked(int position, bool shift, bool ctrl, bool alt) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_HOTSPOTDOUBLECLICK; - scn.position = position; - scn.modifiers = (shift ? SCI_SHIFT : 0) | (ctrl ? SCI_CTRL : 0) | - (alt ? SCI_ALT : 0); - NotifyParent(scn); -} - -void Editor::NotifyHotSpotClicked(int position, bool shift, bool ctrl, bool alt) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_HOTSPOTCLICK; - scn.position = position; - scn.modifiers = (shift ? SCI_SHIFT : 0) | (ctrl ? SCI_CTRL : 0) | - (alt ? SCI_ALT : 0); - NotifyParent(scn); -} - -void Editor::NotifyUpdateUI() { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_UPDATEUI; - NotifyParent(scn); -} - -void Editor::NotifyPainted() { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_PAINTED; - NotifyParent(scn); -} - -bool Editor::NotifyMarginClick(Point pt, bool shift, bool ctrl, bool alt) { - int marginClicked = -1; - int x = 0; - for (int margin = 0; margin < ViewStyle::margins; margin++) { - if ((pt.x > x) && (pt.x < x + vs.ms[margin].width)) - marginClicked = margin; - x += vs.ms[margin].width; - } - if ((marginClicked >= 0) && vs.ms[marginClicked].sensitive) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_MARGINCLICK; - scn.modifiers = (shift ? SCI_SHIFT : 0) | (ctrl ? SCI_CTRL : 0) | - (alt ? SCI_ALT : 0); - scn.position = pdoc->LineStart(LineFromLocation(pt)); - scn.margin = marginClicked; - NotifyParent(scn); - return true; - } else { - return false; - } -} - -void Editor::NotifyNeedShown(int pos, int len) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_NEEDSHOWN; - scn.position = pos; - scn.length = len; - NotifyParent(scn); -} - -void Editor::NotifyDwelling(Point pt, bool state) { - SCNotification scn = {0}; - scn.nmhdr.code = state ? SCN_DWELLSTART : SCN_DWELLEND; - scn.position = PositionFromLocationClose(pt); - scn.x = pt.x; - scn.y = pt.y; - NotifyParent(scn); -} - -void Editor::NotifyZoom() { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_ZOOM; - NotifyParent(scn); -} - -// Notifications from document -void Editor::NotifyModifyAttempt(Document*, void *) { - //Platform::DebugPrintf("** Modify Attempt\n"); - NotifyModifyAttempt(); -} - -void Editor::NotifyMove(int position) { - SCNotification scn = {0}; - scn.nmhdr.code = SCN_POSCHANGED; - scn.position = position; - NotifyParent(scn); -} - -void Editor::NotifySavePoint(Document*, void *, bool atSavePoint) { - //Platform::DebugPrintf("** Save Point %s\n", atSavePoint ? "On" : "Off"); - NotifySavePoint(atSavePoint); -} - -void Editor::CheckModificationForWrap(DocModification mh) { - if (mh.modificationType & (SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT)) { - llc.Invalidate(LineLayout::llCheckTextAndStyle); - if (wrapState != eWrapNone) { - int lineDoc = pdoc->LineFromPosition(mh.position); - int lines = Platform::Maximum(0, mh.linesAdded); - NeedWrapping(lineDoc, lineDoc + lines + 1); - } - } -} - -// Move a position so it is still after the same character as before the insertion. -static inline int MovePositionForInsertion(int position, int startInsertion, int length) { - if (position > startInsertion) { - return position + length; - } - return position; -} - -// Move a position so it is still after the same character as before the deletion if that -// character is still present else after the previous surviving character. -static inline int MovePositionForDeletion(int position, int startDeletion, int length) { - if (position > startDeletion) { - int endDeletion = startDeletion + length; - if (position > endDeletion) { - return position - length; - } else { - return startDeletion; - } - } else { - return position; - } -} - -void Editor::NotifyModified(Document*, DocModification mh, void *) { - needUpdateUI = true; - if (paintState == painting) { - CheckForChangeOutsidePaint(Range(mh.position, mh.position + mh.length)); - } - if (mh.modificationType & SC_MOD_CHANGESTYLE) { - pdoc->IncrementStyleClock(); - if (paintState == notPainting) { - if (mh.position < pdoc->LineStart(topLine)) { - // Styling performed before this view - Redraw(); - } else { - InvalidateRange(mh.position, mh.position + mh.length); - } - } - llc.Invalidate(LineLayout::llCheckTextAndStyle); - } else { - // Move selection and brace highlights - if (mh.modificationType & SC_MOD_INSERTTEXT) { - currentPos = MovePositionForInsertion(currentPos, mh.position, mh.length); - anchor = MovePositionForInsertion(anchor, mh.position, mh.length); - braces[0] = MovePositionForInsertion(braces[0], mh.position, mh.length); - braces[1] = MovePositionForInsertion(braces[1], mh.position, mh.length); - } else if (mh.modificationType & SC_MOD_DELETETEXT) { - currentPos = MovePositionForDeletion(currentPos, mh.position, mh.length); - anchor = MovePositionForDeletion(anchor, mh.position, mh.length); - braces[0] = MovePositionForDeletion(braces[0], mh.position, mh.length); - braces[1] = MovePositionForDeletion(braces[1], mh.position, mh.length); - } - if (cs.LinesDisplayed() < cs.LinesInDoc()) { - // Some lines are hidden so may need shown. - // TODO: check if the modified area is hidden. - if (mh.modificationType & SC_MOD_BEFOREINSERT) { - NotifyNeedShown(mh.position, 0); - } else if (mh.modificationType & SC_MOD_BEFOREDELETE) { - NotifyNeedShown(mh.position, mh.length); - } - } - if (mh.linesAdded != 0) { - // Update contraction state for inserted and removed lines - // lineOfPos should be calculated in context of state before modification, shouldn't it - int lineOfPos = pdoc->LineFromPosition(mh.position); - if (mh.linesAdded > 0) { - cs.InsertLines(lineOfPos, mh.linesAdded); - } else { - cs.DeleteLines(lineOfPos, -mh.linesAdded); - } - } - CheckModificationForWrap(mh); - if (mh.linesAdded != 0) { - // Avoid scrolling of display if change before current display - if (mh.position < posTopLine && !CanDeferToLastStep(mh)) { - int newTop = Platform::Clamp(topLine + mh.linesAdded, 0, MaxScrollPos()); - if (newTop != topLine) { - SetTopLine(newTop); - SetVerticalScrollPos(); - } - } - - //Platform::DebugPrintf("** %x Doc Changed\n", this); - // TODO: could invalidate from mh.startModification to end of screen - //InvalidateRange(mh.position, mh.position + mh.length); - if (paintState == notPainting && !CanDeferToLastStep(mh)) { - Redraw(); - } - } else { - //Platform::DebugPrintf("** %x Line Changed %d .. %d\n", this, - // mh.position, mh.position + mh.length); - if (paintState == notPainting && mh.length && !CanEliminate(mh)) { - InvalidateRange(mh.position, mh.position + mh.length); - } - } - } - - if (mh.linesAdded != 0 && !CanDeferToLastStep(mh)) { - SetScrollBars(); - } - - if (mh.modificationType & SC_MOD_CHANGEMARKER) { - if ((paintState == notPainting) || !PaintContainsMargin()) { - if (mh.modificationType & SC_MOD_CHANGEFOLD) { - // Fold changes can affect the drawing of following lines so redraw whole margin - RedrawSelMargin(); - } else { - RedrawSelMargin(mh.line); - } - } - } - - // NOW pay the piper WRT "deferred" visual updates - if (IsLastStep(mh)) { - SetScrollBars(); - Redraw(); - } - - // If client wants to see this modification - if (mh.modificationType & modEventMask) { - if ((mh.modificationType & SC_MOD_CHANGESTYLE) == 0) { - // Real modification made to text of document. - NotifyChange(); // Send EN_CHANGE - } - - SCNotification scn = {0}; - scn.nmhdr.code = SCN_MODIFIED; - scn.position = mh.position; - scn.modificationType = mh.modificationType; - scn.text = mh.text; - scn.length = mh.length; - scn.linesAdded = mh.linesAdded; - scn.line = mh.line; - scn.foldLevelNow = mh.foldLevelNow; - scn.foldLevelPrev = mh.foldLevelPrev; - NotifyParent(scn); - } -} - -void Editor::NotifyDeleted(Document *, void *) { - /* Do nothing */ -} - -void Editor::NotifyMacroRecord(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { - - // Enumerates all macroable messages - switch (iMessage) { - case SCI_CUT: - case SCI_COPY: - case SCI_PASTE: - case SCI_CLEAR: - case SCI_REPLACESEL: - case SCI_ADDTEXT: - case SCI_INSERTTEXT: - case SCI_APPENDTEXT: - case SCI_CLEARALL: - case SCI_SELECTALL: - case SCI_GOTOLINE: - case SCI_GOTOPOS: - case SCI_SEARCHANCHOR: - case SCI_SEARCHNEXT: - case SCI_SEARCHPREV: - case SCI_LINEDOWN: - case SCI_LINEDOWNEXTEND: - case SCI_PARADOWN: - case SCI_PARADOWNEXTEND: - case SCI_LINEUP: - case SCI_LINEUPEXTEND: - case SCI_PARAUP: - case SCI_PARAUPEXTEND: - case SCI_CHARLEFT: - case SCI_CHARLEFTEXTEND: - case SCI_CHARRIGHT: - case SCI_CHARRIGHTEXTEND: - case SCI_WORDLEFT: - case SCI_WORDLEFTEXTEND: - case SCI_WORDRIGHT: - case SCI_WORDRIGHTEXTEND: - case SCI_WORDPARTLEFT: - case SCI_WORDPARTLEFTEXTEND: - case SCI_WORDPARTRIGHT: - case SCI_WORDPARTRIGHTEXTEND: - case SCI_WORDLEFTEND: - case SCI_WORDLEFTENDEXTEND: - case SCI_WORDRIGHTEND: - case SCI_WORDRIGHTENDEXTEND: - case SCI_HOME: - case SCI_HOMEEXTEND: - case SCI_LINEEND: - case SCI_LINEENDEXTEND: - case SCI_HOMEWRAP: - case SCI_HOMEWRAPEXTEND: - case SCI_LINEENDWRAP: - case SCI_LINEENDWRAPEXTEND: - case SCI_DOCUMENTSTART: - case SCI_DOCUMENTSTARTEXTEND: - case SCI_DOCUMENTEND: - case SCI_DOCUMENTENDEXTEND: - case SCI_STUTTEREDPAGEUP: - case SCI_STUTTEREDPAGEUPEXTEND: - case SCI_STUTTEREDPAGEDOWN: - case SCI_STUTTEREDPAGEDOWNEXTEND: - case SCI_PAGEUP: - case SCI_PAGEUPEXTEND: - case SCI_PAGEDOWN: - case SCI_PAGEDOWNEXTEND: - case SCI_EDITTOGGLEOVERTYPE: - case SCI_CANCEL: - case SCI_DELETEBACK: - case SCI_TAB: - case SCI_BACKTAB: - case SCI_FORMFEED: - case SCI_VCHOME: - case SCI_VCHOMEEXTEND: - case SCI_VCHOMEWRAP: - case SCI_VCHOMEWRAPEXTEND: - case SCI_DELWORDLEFT: - case SCI_DELWORDRIGHT: - case SCI_DELLINELEFT: - case SCI_DELLINERIGHT: - case SCI_LINECOPY: - case SCI_LINECUT: - case SCI_LINEDELETE: - case SCI_LINETRANSPOSE: - case SCI_LINEDUPLICATE: - case SCI_LOWERCASE: - case SCI_UPPERCASE: - case SCI_LINESCROLLDOWN: - case SCI_LINESCROLLUP: - case SCI_DELETEBACKNOTLINE: - case SCI_HOMEDISPLAY: - case SCI_HOMEDISPLAYEXTEND: - case SCI_LINEENDDISPLAY: - case SCI_LINEENDDISPLAYEXTEND: - case SCI_SETSELECTIONMODE: - case SCI_LINEDOWNRECTEXTEND: - case SCI_LINEUPRECTEXTEND: - case SCI_CHARLEFTRECTEXTEND: - case SCI_CHARRIGHTRECTEXTEND: - case SCI_HOMERECTEXTEND: - case SCI_VCHOMERECTEXTEND: - case SCI_LINEENDRECTEXTEND: - case SCI_PAGEUPRECTEXTEND: - case SCI_PAGEDOWNRECTEXTEND: - case SCI_SELECTIONDUPLICATE: - break; - - // Filter out all others like display changes. Also, newlines are redundant - // with char insert messages. - case SCI_NEWLINE: - default: - // printf("Filtered out %ld of macro recording\n", iMessage); - return ; - } - - // Send notification - SCNotification scn = {0}; - scn.nmhdr.code = SCN_MACRORECORD; - scn.message = iMessage; - scn.wParam = wParam; - scn.lParam = lParam; - NotifyParent(scn); -} - -/** - * Force scroll and keep position relative to top of window. - * - * If stuttered = true and not already at first/last row, move to first/last row of window. - * If stuttered = true and already at first/last row, scroll as normal. - */ -void Editor::PageMove(int direction, selTypes sel, bool stuttered) { - int topLineNew, newPos; - - // I consider only the caretYSlop, and ignore the caretYPolicy-- is that a problem? - int currentLine = pdoc->LineFromPosition(currentPos); - int topStutterLine = topLine + caretYSlop; - int bottomStutterLine = topLine + LinesToScroll() - caretYSlop; - - if (stuttered && (direction < 0 && currentLine > topStutterLine)) { - topLineNew = topLine; - newPos = PositionFromLocation(Point(lastXChosen, vs.lineHeight * caretYSlop)); - - } else if (stuttered && (direction > 0 && currentLine < bottomStutterLine)) { - topLineNew = topLine; - newPos = PositionFromLocation(Point(lastXChosen, vs.lineHeight * (LinesToScroll() - caretYSlop))); - - } else { - Point pt = LocationFromPosition(currentPos); - - topLineNew = Platform::Clamp( - topLine + direction * LinesToScroll(), 0, MaxScrollPos()); - newPos = PositionFromLocation( - Point(lastXChosen, pt.y + direction * (vs.lineHeight * LinesToScroll()))); - } - - if (topLineNew != topLine) { - SetTopLine(topLineNew); - MovePositionTo(newPos, sel); - Redraw(); - SetVerticalScrollPos(); - } else { - MovePositionTo(newPos, sel); - } -} - -void Editor::ChangeCaseOfSelection(bool makeUpperCase) { - pdoc->BeginUndoAction(); - int startCurrent = currentPos; - int startAnchor = anchor; - if (selType == selStream) { - pdoc->ChangeCase(Range(SelectionStart(), SelectionEnd()), - makeUpperCase); - SetSelection(startCurrent, startAnchor); - } else { - SelectionLineIterator lineIterator(this, false); - while (lineIterator.Iterate()) { - pdoc->ChangeCase( - Range(lineIterator.startPos, lineIterator.endPos), - makeUpperCase); - } - // Would be nicer to keep the rectangular selection but this is complex - SetEmptySelection(startCurrent); - } - pdoc->EndUndoAction(); -} - -void Editor::LineTranspose() { - int line = pdoc->LineFromPosition(currentPos); - if (line > 0) { - int startPrev = pdoc->LineStart(line - 1); - int endPrev = pdoc->LineEnd(line - 1); - int start = pdoc->LineStart(line); - int end = pdoc->LineEnd(line); - int startNext = pdoc->LineStart(line + 1); - if (end < pdoc->Length()) { - end = startNext; - char *thisLine = CopyRange(start, end); - pdoc->DeleteChars(start, end - start); - if (pdoc->InsertString(startPrev, thisLine, end - start)) { - MovePositionTo(startPrev + end - start); - } - delete []thisLine; - } else { - // Last line so line has no line end - char *thisLine = CopyRange(start, end); - char *prevEnd = CopyRange(endPrev, start); - pdoc->DeleteChars(endPrev, end - endPrev); - pdoc->InsertString(startPrev, thisLine, end - start); - if (pdoc->InsertString(startPrev + end - start, prevEnd, start - endPrev)) { - MovePositionTo(startPrev + end - endPrev); - } - delete []thisLine; - delete []prevEnd; - } - - } -} - -void Editor::Duplicate(bool forLine) { - int start = SelectionStart(); - int end = SelectionEnd(); - if (start == end) { - forLine = true; - } - if (forLine) { - int line = pdoc->LineFromPosition(currentPos); - start = pdoc->LineStart(line); - end = pdoc->LineEnd(line); - } - char *text = CopyRange(start, end); - if (forLine) { - const char *eol = StringFromEOLMode(pdoc->eolMode); - pdoc->InsertString(end, eol); - pdoc->InsertString(end + istrlen(eol), text, end - start); - } else { - pdoc->InsertString(end, text, end - start); - } - delete []text; -} - -void Editor::CancelModes() { - moveExtendsSelection = false; -} - -void Editor::NewLine() { - ClearSelection(); - const char *eol = "\n"; - if (pdoc->eolMode == SC_EOL_CRLF) { - eol = "\r\n"; - } else if (pdoc->eolMode == SC_EOL_CR) { - eol = "\r"; - } // else SC_EOL_LF -> "\n" already set - if (pdoc->InsertString(currentPos, eol)) { - SetEmptySelection(currentPos + istrlen(eol)); - while (*eol) { - NotifyChar(*eol); - eol++; - } - } - SetLastXChosen(); - EnsureCaretVisible(); - // Avoid blinking during rapid typing: - ShowCaretAtCurrentPosition(); -} - -void Editor::CursorUpOrDown(int direction, selTypes sel) { - Point pt = LocationFromPosition(currentPos); - int posNew = PositionFromLocation( - Point(lastXChosen, pt.y + direction * vs.lineHeight)); - if (direction < 0) { - // Line wrapping may lead to a location on the same line, so - // seek back if that is the case. - // There is an equivalent case when moving down which skips - // over a line but as that does not trap the user it is fine. - Point ptNew = LocationFromPosition(posNew); - while ((posNew > 0) && (pt.y == ptNew.y)) { - posNew--; - ptNew = LocationFromPosition(posNew); - } - } - MovePositionTo(posNew, sel); -} - -void Editor::ParaUpOrDown(int direction, selTypes sel) { - int lineDoc, savedPos = currentPos; - do { - MovePositionTo(direction > 0 ? pdoc->ParaDown(currentPos) : pdoc->ParaUp(currentPos), sel); - lineDoc = pdoc->LineFromPosition(currentPos); - if (direction > 0) { - if (currentPos >= pdoc->Length() && !cs.GetVisible(lineDoc)) { - if (sel == noSel) { - MovePositionTo(pdoc->LineEndPosition(savedPos)); - } - break; - } - } - } while (!cs.GetVisible(lineDoc)); -} - -int Editor::StartEndDisplayLine(int pos, bool start) { - RefreshStyleData(); - int line = pdoc->LineFromPosition(pos); - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(line)); - int posRet = INVALID_POSITION; - if (surface && ll) { - unsigned int posLineStart = pdoc->LineStart(line); - LayoutLine(line, surface, vs, ll, wrapWidth); - int posInLine = pos - posLineStart; - if (posInLine <= ll->maxLineLength) { - for (int subLine = 0; subLine < ll->lines; subLine++) { - if ((posInLine >= ll->LineStart(subLine)) && (posInLine <= ll->LineStart(subLine + 1))) { - if (start) { - posRet = ll->LineStart(subLine) + posLineStart; - } else { - if (subLine == ll->lines - 1) - posRet = ll->LineStart(subLine + 1) + posLineStart; - else - posRet = ll->LineStart(subLine + 1) + posLineStart - 1; - } - } - } - } - } - if (posRet == INVALID_POSITION) { - return pos; - } else { - return posRet; - } -} - -int Editor::KeyCommand(unsigned int iMessage) { - switch (iMessage) { - case SCI_LINEDOWN: - CursorUpOrDown(1); - break; - case SCI_LINEDOWNEXTEND: - CursorUpOrDown(1, selStream); - break; - case SCI_LINEDOWNRECTEXTEND: - CursorUpOrDown(1, selRectangle); - break; - case SCI_PARADOWN: - ParaUpOrDown(1); - break; - case SCI_PARADOWNEXTEND: - ParaUpOrDown(1, selStream); - break; - case SCI_LINESCROLLDOWN: - ScrollTo(topLine + 1); - MoveCaretInsideView(false); - break; - case SCI_LINEUP: - CursorUpOrDown(-1); - break; - case SCI_LINEUPEXTEND: - CursorUpOrDown(-1, selStream); - break; - case SCI_LINEUPRECTEXTEND: - CursorUpOrDown(-1, selRectangle); - break; - case SCI_PARAUP: - ParaUpOrDown(-1); - break; - case SCI_PARAUPEXTEND: - ParaUpOrDown(-1, selStream); - break; - case SCI_LINESCROLLUP: - ScrollTo(topLine - 1); - MoveCaretInsideView(false); - break; - case SCI_CHARLEFT: - if (SelectionEmpty() || moveExtendsSelection) { - MovePositionTo(MovePositionSoVisible(currentPos - 1, -1)); - } else { - MovePositionTo(SelectionStart()); - } - SetLastXChosen(); - break; - case SCI_CHARLEFTEXTEND: - MovePositionTo(MovePositionSoVisible(currentPos - 1, -1), selStream); - SetLastXChosen(); - break; - case SCI_CHARLEFTRECTEXTEND: - MovePositionTo(MovePositionSoVisible(currentPos - 1, -1), selRectangle); - SetLastXChosen(); - break; - case SCI_CHARRIGHT: - if (SelectionEmpty() || moveExtendsSelection) { - MovePositionTo(MovePositionSoVisible(currentPos + 1, 1)); - } else { - MovePositionTo(SelectionEnd()); - } - SetLastXChosen(); - break; - case SCI_CHARRIGHTEXTEND: - MovePositionTo(MovePositionSoVisible(currentPos + 1, 1), selStream); - SetLastXChosen(); - break; - case SCI_CHARRIGHTRECTEXTEND: - MovePositionTo(MovePositionSoVisible(currentPos + 1, 1), selRectangle); - SetLastXChosen(); - break; - case SCI_WORDLEFT: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordStart(currentPos, -1), -1)); - SetLastXChosen(); - break; - case SCI_WORDLEFTEXTEND: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordStart(currentPos, -1), -1), selStream); - SetLastXChosen(); - break; - case SCI_WORDRIGHT: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordStart(currentPos, 1), 1)); - SetLastXChosen(); - break; - case SCI_WORDRIGHTEXTEND: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordStart(currentPos, 1), 1), selStream); - SetLastXChosen(); - break; - - case SCI_WORDLEFTEND: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordEnd(currentPos, -1), -1)); - SetLastXChosen(); - break; - case SCI_WORDLEFTENDEXTEND: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordEnd(currentPos, -1), -1), selStream); - SetLastXChosen(); - break; - case SCI_WORDRIGHTEND: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordEnd(currentPos, 1), 1)); - SetLastXChosen(); - break; - case SCI_WORDRIGHTENDEXTEND: - MovePositionTo(MovePositionSoVisible(pdoc->NextWordEnd(currentPos, 1), 1), selStream); - SetLastXChosen(); - break; - - case SCI_HOME: - MovePositionTo(pdoc->LineStart(pdoc->LineFromPosition(currentPos))); - SetLastXChosen(); - break; - case SCI_HOMEEXTEND: - MovePositionTo(pdoc->LineStart(pdoc->LineFromPosition(currentPos)), selStream); - SetLastXChosen(); - break; - case SCI_HOMERECTEXTEND: - MovePositionTo(pdoc->LineStart(pdoc->LineFromPosition(currentPos)), selRectangle); - SetLastXChosen(); - break; - case SCI_LINEEND: - MovePositionTo(pdoc->LineEndPosition(currentPos)); - SetLastXChosen(); - break; - case SCI_LINEENDEXTEND: - MovePositionTo(pdoc->LineEndPosition(currentPos), selStream); - SetLastXChosen(); - break; - case SCI_LINEENDRECTEXTEND: - MovePositionTo(pdoc->LineEndPosition(currentPos), selRectangle); - SetLastXChosen(); - break; - case SCI_HOMEWRAP: { - int homePos = MovePositionSoVisible(StartEndDisplayLine(currentPos, true), -1); - if (currentPos <= homePos) - homePos = pdoc->LineStart(pdoc->LineFromPosition(currentPos)); - MovePositionTo(homePos); - SetLastXChosen(); - } - break; - case SCI_HOMEWRAPEXTEND: { - int homePos = MovePositionSoVisible(StartEndDisplayLine(currentPos, true), -1); - if (currentPos <= homePos) - homePos = pdoc->LineStart(pdoc->LineFromPosition(currentPos)); - MovePositionTo(homePos, selStream); - SetLastXChosen(); - } - break; - case SCI_LINEENDWRAP: { - int endPos = MovePositionSoVisible(StartEndDisplayLine(currentPos, false), 1); - int realEndPos = pdoc->LineEndPosition(currentPos); - if (endPos > realEndPos // if moved past visible EOLs - || currentPos >= endPos) // if at end of display line already - endPos = realEndPos; - MovePositionTo(endPos); - SetLastXChosen(); - } - break; - case SCI_LINEENDWRAPEXTEND: { - int endPos = MovePositionSoVisible(StartEndDisplayLine(currentPos, false), 1); - int realEndPos = pdoc->LineEndPosition(currentPos); - if (endPos > realEndPos // if moved past visible EOLs - || currentPos >= endPos) // if at end of display line already - endPos = realEndPos; - MovePositionTo(endPos, selStream); - SetLastXChosen(); - } - break; - case SCI_DOCUMENTSTART: - MovePositionTo(0); - SetLastXChosen(); - break; - case SCI_DOCUMENTSTARTEXTEND: - MovePositionTo(0, selStream); - SetLastXChosen(); - break; - case SCI_DOCUMENTEND: - MovePositionTo(pdoc->Length()); - SetLastXChosen(); - break; - case SCI_DOCUMENTENDEXTEND: - MovePositionTo(pdoc->Length(), selStream); - SetLastXChosen(); - break; - case SCI_STUTTEREDPAGEUP: - PageMove(-1, noSel, true); - break; - case SCI_STUTTEREDPAGEUPEXTEND: - PageMove(-1, selStream, true); - break; - case SCI_STUTTEREDPAGEDOWN: - PageMove(1, noSel, true); - break; - case SCI_STUTTEREDPAGEDOWNEXTEND: - PageMove(1, selStream, true); - break; - case SCI_PAGEUP: - PageMove(-1); - break; - case SCI_PAGEUPEXTEND: - PageMove(-1, selStream); - break; - case SCI_PAGEUPRECTEXTEND: - PageMove(-1, selRectangle); - break; - case SCI_PAGEDOWN: - PageMove(1); - break; - case SCI_PAGEDOWNEXTEND: - PageMove(1, selStream); - break; - case SCI_PAGEDOWNRECTEXTEND: - PageMove(1, selRectangle); - break; - case SCI_EDITTOGGLEOVERTYPE: - inOverstrike = !inOverstrike; - DropCaret(); - ShowCaretAtCurrentPosition(); - NotifyUpdateUI(); - break; - case SCI_CANCEL: // Cancel any modes - handled in subclass - // Also unselect text - CancelModes(); - break; - case SCI_DELETEBACK: - DelCharBack(true); - if (!caretSticky) { - SetLastXChosen(); - } - EnsureCaretVisible(); - break; - case SCI_DELETEBACKNOTLINE: - DelCharBack(false); - if (!caretSticky) { - SetLastXChosen(); - } - EnsureCaretVisible(); - break; - case SCI_TAB: - Indent(true); - if (!caretSticky) { - SetLastXChosen(); - } - EnsureCaretVisible(); - break; - case SCI_BACKTAB: - Indent(false); - if (!caretSticky) { - SetLastXChosen(); - } - EnsureCaretVisible(); - break; - case SCI_NEWLINE: - NewLine(); - break; - case SCI_FORMFEED: - AddChar('\f'); - break; - case SCI_VCHOME: - MovePositionTo(pdoc->VCHomePosition(currentPos)); - SetLastXChosen(); - break; - case SCI_VCHOMEEXTEND: - MovePositionTo(pdoc->VCHomePosition(currentPos), selStream); - SetLastXChosen(); - break; - case SCI_VCHOMERECTEXTEND: - MovePositionTo(pdoc->VCHomePosition(currentPos), selRectangle); - SetLastXChosen(); - break; - case SCI_VCHOMEWRAP: { - int homePos = pdoc->VCHomePosition(currentPos); - int viewLineStart = MovePositionSoVisible(StartEndDisplayLine(currentPos, true), -1); - if ((viewLineStart < currentPos) && (viewLineStart > homePos)) - homePos = viewLineStart; - - MovePositionTo(homePos); - SetLastXChosen(); - } - break; - case SCI_VCHOMEWRAPEXTEND: { - int homePos = pdoc->VCHomePosition(currentPos); - int viewLineStart = MovePositionSoVisible(StartEndDisplayLine(currentPos, true), -1); - if ((viewLineStart < currentPos) && (viewLineStart > homePos)) - homePos = viewLineStart; - - MovePositionTo(homePos, selStream); - SetLastXChosen(); - } - break; - case SCI_ZOOMIN: - if (vs.zoomLevel < 20) { - vs.zoomLevel++; - InvalidateStyleRedraw(); - NotifyZoom(); - } - break; - case SCI_ZOOMOUT: - if (vs.zoomLevel > -10) { - vs.zoomLevel--; - InvalidateStyleRedraw(); - NotifyZoom(); - } - break; - case SCI_DELWORDLEFT: { - int startWord = pdoc->NextWordStart(currentPos, -1); - pdoc->DeleteChars(startWord, currentPos - startWord); - SetLastXChosen(); - } - break; - case SCI_DELWORDRIGHT: { - int endWord = pdoc->NextWordStart(currentPos, 1); - pdoc->DeleteChars(currentPos, endWord - currentPos); - } - break; - case SCI_DELLINELEFT: { - int line = pdoc->LineFromPosition(currentPos); - int start = pdoc->LineStart(line); - pdoc->DeleteChars(start, currentPos - start); - SetLastXChosen(); - } - break; - case SCI_DELLINERIGHT: { - int line = pdoc->LineFromPosition(currentPos); - int end = pdoc->LineEnd(line); - pdoc->DeleteChars(currentPos, end - currentPos); - } - break; - case SCI_LINECOPY: { - int lineStart = pdoc->LineFromPosition(SelectionStart()); - int lineEnd = pdoc->LineFromPosition(SelectionEnd()); - CopyRangeToClipboard(pdoc->LineStart(lineStart), - pdoc->LineStart(lineEnd + 1)); - } - break; - case SCI_LINECUT: { - int lineStart = pdoc->LineFromPosition(SelectionStart()); - int lineEnd = pdoc->LineFromPosition(SelectionEnd()); - int start = pdoc->LineStart(lineStart); - int end = pdoc->LineStart(lineEnd + 1); - SetSelection(start, end); - Cut(); - SetLastXChosen(); - } - break; - case SCI_LINEDELETE: { - int line = pdoc->LineFromPosition(currentPos); - int start = pdoc->LineStart(line); - int end = pdoc->LineStart(line + 1); - pdoc->DeleteChars(start, end - start); - } - break; - case SCI_LINETRANSPOSE: - LineTranspose(); - break; - case SCI_LINEDUPLICATE: - Duplicate(true); - break; - case SCI_SELECTIONDUPLICATE: - Duplicate(false); - break; - case SCI_LOWERCASE: - ChangeCaseOfSelection(false); - break; - case SCI_UPPERCASE: - ChangeCaseOfSelection(true); - break; - case SCI_WORDPARTLEFT: - MovePositionTo(MovePositionSoVisible(pdoc->WordPartLeft(currentPos), -1)); - SetLastXChosen(); - break; - case SCI_WORDPARTLEFTEXTEND: - MovePositionTo(MovePositionSoVisible(pdoc->WordPartLeft(currentPos), -1), selStream); - SetLastXChosen(); - break; - case SCI_WORDPARTRIGHT: - MovePositionTo(MovePositionSoVisible(pdoc->WordPartRight(currentPos), 1)); - SetLastXChosen(); - break; - case SCI_WORDPARTRIGHTEXTEND: - MovePositionTo(MovePositionSoVisible(pdoc->WordPartRight(currentPos), 1), selStream); - SetLastXChosen(); - break; - case SCI_HOMEDISPLAY: - MovePositionTo(MovePositionSoVisible( - StartEndDisplayLine(currentPos, true), -1)); - SetLastXChosen(); - break; - case SCI_HOMEDISPLAYEXTEND: - MovePositionTo(MovePositionSoVisible( - StartEndDisplayLine(currentPos, true), -1), selStream); - SetLastXChosen(); - break; - case SCI_LINEENDDISPLAY: - MovePositionTo(MovePositionSoVisible( - StartEndDisplayLine(currentPos, false), 1)); - SetLastXChosen(); - break; - case SCI_LINEENDDISPLAYEXTEND: - MovePositionTo(MovePositionSoVisible( - StartEndDisplayLine(currentPos, false), 1), selStream); - SetLastXChosen(); - break; - } - return 0; -} - -int Editor::KeyDefault(int, int) { - return 0; -} - -int Editor::KeyDown(int key, bool shift, bool ctrl, bool alt, bool *consumed) { - DwellEnd(false); - int modifiers = (shift ? SCI_SHIFT : 0) | (ctrl ? SCI_CTRL : 0) | - (alt ? SCI_ALT : 0); - int msg = kmap.Find(key, modifiers); - if (msg) { - if (consumed) - *consumed = true; - return WndProc(msg, 0, 0); - } else { - if (consumed) - *consumed = false; - return KeyDefault(key, modifiers); - } -} - -void Editor::SetWhitespaceVisible(int view) { - vs.viewWhitespace = static_cast(view); -} - -int Editor::GetWhitespaceVisible() { - return vs.viewWhitespace; -} - -void Editor::Indent(bool forwards) { - //Platform::DebugPrintf("INdent %d\n", forwards); - int lineOfAnchor = pdoc->LineFromPosition(anchor); - int lineCurrentPos = pdoc->LineFromPosition(currentPos); - if (lineOfAnchor == lineCurrentPos) { - if (forwards) { - pdoc->BeginUndoAction(); - ClearSelection(); - if (pdoc->GetColumn(currentPos) <= pdoc->GetColumn(pdoc->GetLineIndentPosition(lineCurrentPos)) && - pdoc->tabIndents) { - int indentation = pdoc->GetLineIndentation(lineCurrentPos); - int indentationStep = pdoc->IndentSize(); - pdoc->SetLineIndentation(lineCurrentPos, indentation + indentationStep - indentation % indentationStep); - SetEmptySelection(pdoc->GetLineIndentPosition(lineCurrentPos)); - } else { - if (pdoc->useTabs) { - pdoc->InsertChar(currentPos, '\t'); - SetEmptySelection(currentPos + 1); - } else { - int numSpaces = (pdoc->tabInChars) - - (pdoc->GetColumn(currentPos) % (pdoc->tabInChars)); - if (numSpaces < 1) - numSpaces = pdoc->tabInChars; - for (int i = 0; i < numSpaces; i++) { - pdoc->InsertChar(currentPos + i, ' '); - } - SetEmptySelection(currentPos + numSpaces); - } - } - pdoc->EndUndoAction(); - } else { - if (pdoc->GetColumn(currentPos) <= pdoc->GetLineIndentation(lineCurrentPos) && - pdoc->tabIndents) { - pdoc->BeginUndoAction(); - int indentation = pdoc->GetLineIndentation(lineCurrentPos); - int indentationStep = pdoc->IndentSize(); - pdoc->SetLineIndentation(lineCurrentPos, indentation - indentationStep); - SetEmptySelection(pdoc->GetLineIndentPosition(lineCurrentPos)); - pdoc->EndUndoAction(); - } else { - int newColumn = ((pdoc->GetColumn(currentPos) - 1) / pdoc->tabInChars) * - pdoc->tabInChars; - if (newColumn < 0) - newColumn = 0; - int newPos = currentPos; - while (pdoc->GetColumn(newPos) > newColumn) - newPos--; - SetEmptySelection(newPos); - } - } - } else { - int anchorPosOnLine = anchor - pdoc->LineStart(lineOfAnchor); - int currentPosPosOnLine = currentPos - pdoc->LineStart(lineCurrentPos); - // Multiple lines selected so indent / dedent - int lineTopSel = Platform::Minimum(lineOfAnchor, lineCurrentPos); - int lineBottomSel = Platform::Maximum(lineOfAnchor, lineCurrentPos); - if (pdoc->LineStart(lineBottomSel) == anchor || pdoc->LineStart(lineBottomSel) == currentPos) - lineBottomSel--; // If not selecting any characters on a line, do not indent - pdoc->BeginUndoAction(); - pdoc->Indent(forwards, lineBottomSel, lineTopSel); - pdoc->EndUndoAction(); - if (lineOfAnchor < lineCurrentPos) { - if (currentPosPosOnLine == 0) - SetSelection(pdoc->LineStart(lineCurrentPos), pdoc->LineStart(lineOfAnchor)); - else - SetSelection(pdoc->LineStart(lineCurrentPos + 1), pdoc->LineStart(lineOfAnchor)); - } else { - if (anchorPosOnLine == 0) - SetSelection(pdoc->LineStart(lineCurrentPos), pdoc->LineStart(lineOfAnchor)); - else - SetSelection(pdoc->LineStart(lineCurrentPos), pdoc->LineStart(lineOfAnchor + 1)); - } - } -} - -/** - * Search of a text in the document, in the given range. - * @return The position of the found text, -1 if not found. - */ -long Editor::FindText( - uptr_t wParam, ///< Search modes : @c SCFIND_MATCHCASE, @c SCFIND_WHOLEWORD, - ///< @c SCFIND_WORDSTART, @c SCFIND_REGEXP or @c SCFIND_POSIX. - sptr_t lParam) { ///< @c TextToFind structure: The text to search for in the given range. - - TextToFind *ft = reinterpret_cast(lParam); - int lengthFound = istrlen(ft->lpstrText); - int pos = pdoc->FindText(ft->chrg.cpMin, ft->chrg.cpMax, ft->lpstrText, - (wParam & SCFIND_MATCHCASE) != 0, - (wParam & SCFIND_WHOLEWORD) != 0, - (wParam & SCFIND_WORDSTART) != 0, - (wParam & SCFIND_REGEXP) != 0, - (wParam & SCFIND_POSIX) != 0, - &lengthFound); - if (pos != -1) { - ft->chrgText.cpMin = pos; - ft->chrgText.cpMax = pos + lengthFound; - } - return pos; -} - -/** - * Relocatable search support : Searches relative to current selection - * point and sets the selection to the found text range with - * each search. - */ -/** - * Anchor following searches at current selection start: This allows - * multiple incremental interactive searches to be macro recorded - * while still setting the selection to found text so the find/select - * operation is self-contained. - */ -void Editor::SearchAnchor() { - searchAnchor = SelectionStart(); -} - -/** - * Find text from current search anchor: Must call @c SearchAnchor first. - * Used for next text and previous text requests. - * @return The position of the found text, -1 if not found. - */ -long Editor::SearchText( - unsigned int iMessage, ///< Accepts both @c SCI_SEARCHNEXT and @c SCI_SEARCHPREV. - uptr_t wParam, ///< Search modes : @c SCFIND_MATCHCASE, @c SCFIND_WHOLEWORD, - ///< @c SCFIND_WORDSTART, @c SCFIND_REGEXP or @c SCFIND_POSIX. - sptr_t lParam) { ///< The text to search for. - - const char *txt = reinterpret_cast(lParam); - int pos; - int lengthFound = istrlen(txt); - if (iMessage == SCI_SEARCHNEXT) { - pos = pdoc->FindText(searchAnchor, pdoc->Length(), txt, - (wParam & SCFIND_MATCHCASE) != 0, - (wParam & SCFIND_WHOLEWORD) != 0, - (wParam & SCFIND_WORDSTART) != 0, - (wParam & SCFIND_REGEXP) != 0, - (wParam & SCFIND_POSIX) != 0, - &lengthFound); - } else { - pos = pdoc->FindText(searchAnchor, 0, txt, - (wParam & SCFIND_MATCHCASE) != 0, - (wParam & SCFIND_WHOLEWORD) != 0, - (wParam & SCFIND_WORDSTART) != 0, - (wParam & SCFIND_REGEXP) != 0, - (wParam & SCFIND_POSIX) != 0, - &lengthFound); - } - - if (pos != -1) { - SetSelection(pos, pos + lengthFound); - } - - return pos; -} - -/** - * Search for text in the target range of the document. - * @return The position of the found text, -1 if not found. - */ -long Editor::SearchInTarget(const char *text, int length) { - int lengthFound = length; - int pos = pdoc->FindText(targetStart, targetEnd, text, - (searchFlags & SCFIND_MATCHCASE) != 0, - (searchFlags & SCFIND_WHOLEWORD) != 0, - (searchFlags & SCFIND_WORDSTART) != 0, - (searchFlags & SCFIND_REGEXP) != 0, - (searchFlags & SCFIND_POSIX) != 0, - &lengthFound); - if (pos != -1) { - targetStart = pos; - targetEnd = pos + lengthFound; - } - return pos; -} - -void Editor::GoToLine(int lineNo) { - if (lineNo > pdoc->LinesTotal()) - lineNo = pdoc->LinesTotal(); - if (lineNo < 0) - lineNo = 0; - SetEmptySelection(pdoc->LineStart(lineNo)); - ShowCaretAtCurrentPosition(); - EnsureCaretVisible(); -} - -static bool Close(Point pt1, Point pt2) { - if (abs(pt1.x - pt2.x) > 3) - return false; - if (abs(pt1.y - pt2.y) > 3) - return false; - return true; -} - -char *Editor::CopyRange(int start, int end) { - char *text = 0; - if (start < end) { - int len = end - start; - text = new char[len + 1]; - if (text) { - for (int i = 0; i < len; i++) { - text[i] = pdoc->CharAt(start + i); - } - text[len] = '\0'; - } - } - return text; -} - -void Editor::CopySelectionFromRange(SelectionText *ss, int start, int end) { - ss->Set(CopyRange(start, end), end - start + 1, - pdoc->dbcsCodePage, vs.styles[STYLE_DEFAULT].characterSet, false); -} - -void Editor::CopySelectionRange(SelectionText *ss) { - if (selType == selStream) { - CopySelectionFromRange(ss, SelectionStart(), SelectionEnd()); - } else { - char *text = 0; - int size = 0; - SelectionLineIterator lineIterator(this); - while (lineIterator.Iterate()) { - size += lineIterator.endPos - lineIterator.startPos; - if (selType != selLines) { - size++; - if (pdoc->eolMode == SC_EOL_CRLF) { - size++; - } - } - } - if (size > 0) { - text = new char[size + 1]; - if (text) { - int j = 0; - lineIterator.Reset(); - while (lineIterator.Iterate()) { - for (int i = lineIterator.startPos; - i < lineIterator.endPos; - i++) { - text[j++] = pdoc->CharAt(i); - } - if (selType != selLines) { - if (pdoc->eolMode != SC_EOL_LF) { - text[j++] = '\r'; - } - if (pdoc->eolMode != SC_EOL_CR) { - text[j++] = '\n'; - } - } - } - text[size] = '\0'; - } - } - ss->Set(text, size + 1, pdoc->dbcsCodePage, - vs.styles[STYLE_DEFAULT].characterSet, selType == selRectangle); - } -} - -void Editor::CopyRangeToClipboard(int start, int end) { - start = pdoc->ClampPositionIntoDocument(start); - end = pdoc->ClampPositionIntoDocument(end); - SelectionText selectedText; - selectedText.Set(CopyRange(start, end), end - start + 1, - pdoc->dbcsCodePage, vs.styles[STYLE_DEFAULT].characterSet, false); - CopyToClipboard(selectedText); -} - -void Editor::CopyText(int length, const char *text) { - SelectionText selectedText; - selectedText.Copy(text, length + 1, - pdoc->dbcsCodePage, vs.styles[STYLE_DEFAULT].characterSet, false); - CopyToClipboard(selectedText); -} - -void Editor::SetDragPosition(int newPos) { - if (newPos >= 0) { - newPos = MovePositionOutsideChar(newPos, 1); - posDrop = newPos; - } - if (posDrag != newPos) { - caret.on = true; - SetTicking(true); - InvalidateCaret(); - posDrag = newPos; - InvalidateCaret(); - } -} - -void Editor::DisplayCursor(Window::Cursor c) { - if (cursorMode == SC_CURSORNORMAL) - wMain.SetCursor(c); - else - wMain.SetCursor(static_cast(cursorMode)); -} - -void Editor::StartDrag() { - // Always handled by subclasses - //SetMouseCapture(true); - //DisplayCursor(Window::cursorArrow); -} - -void Editor::DropAt(int position, const char *value, bool moving, bool rectangular) { - //Platform::DebugPrintf("DropAt %d\n", inDragDrop); - if (inDragDrop) - dropWentOutside = false; - - int positionWasInSelection = PositionInSelection(position); - - bool positionOnEdgeOfSelection = - (position == SelectionStart()) || (position == SelectionEnd()); - - if ((!inDragDrop) || !(0 == positionWasInSelection) || - (positionOnEdgeOfSelection && !moving)) { - - int selStart = SelectionStart(); - int selEnd = SelectionEnd(); - - pdoc->BeginUndoAction(); - - int positionAfterDeletion = position; - if (inDragDrop && moving) { - // Remove dragged out text - if (rectangular || selType == selLines) { - SelectionLineIterator lineIterator(this); - while (lineIterator.Iterate()) { - if (position >= lineIterator.startPos) { - if (position > lineIterator.endPos) { - positionAfterDeletion -= lineIterator.endPos - lineIterator.startPos; - } else { - positionAfterDeletion -= position - lineIterator.startPos; - } - } - } - } else { - if (position > selStart) { - positionAfterDeletion -= selEnd - selStart; - } - } - ClearSelection(); - } - position = positionAfterDeletion; - - if (rectangular) { - PasteRectangular(position, value, istrlen(value)); - pdoc->EndUndoAction(); - // Should try to select new rectangle but it may not be a rectangle now so just select the drop position - SetEmptySelection(position); - } else { - position = MovePositionOutsideChar(position, currentPos - position); - if (pdoc->InsertString(position, value)) { - SetSelection(position + istrlen(value), position); - } - pdoc->EndUndoAction(); - } - } else if (inDragDrop) { - SetEmptySelection(position); - } -} - -/** - * @return -1 if given position is before the selection, - * 1 if position is after the selection, - * 0 if position is inside the selection, - */ -int Editor::PositionInSelection(int pos) { - pos = MovePositionOutsideChar(pos, currentPos - pos); - if (pos < SelectionStart()) { - return -1; - } - if (pos > SelectionEnd()) { - return 1; - } - if (selType == selStream) { - return 0; - } else { - SelectionLineIterator lineIterator(this); - lineIterator.SetAt(pdoc->LineFromPosition(pos)); - if (pos < lineIterator.startPos) { - return -1; - } else if (pos > lineIterator.endPos) { - return 1; - } else { - return 0; - } - } -} - -bool Editor::PointInSelection(Point pt) { - int pos = PositionFromLocation(pt); - if (0 == PositionInSelection(pos)) { - // Probably inside, but we must make a finer test - int selStart, selEnd; - if (selType == selStream) { - selStart = SelectionStart(); - selEnd = SelectionEnd(); - } else { - SelectionLineIterator lineIterator(this); - lineIterator.SetAt(pdoc->LineFromPosition(pos)); - selStart = lineIterator.startPos; - selEnd = lineIterator.endPos; - } - if (pos == selStart) { - // see if just before selection - Point locStart = LocationFromPosition(pos); - if (pt.x < locStart.x) { - return false; - } - } - if (pos == selEnd) { - // see if just after selection - Point locEnd = LocationFromPosition(pos); - if (pt.x > locEnd.x) { - return false; - } - } - return true; - } - return false; -} - -bool Editor::PointInSelMargin(Point pt) { - // Really means: "Point in a margin" - if (vs.fixedColumnWidth > 0) { // There is a margin - PRectangle rcSelMargin = GetClientRectangle(); - rcSelMargin.right = vs.fixedColumnWidth - vs.leftMarginWidth; - return rcSelMargin.Contains(pt); - } else { - return false; - } -} - -void Editor::LineSelection(int lineCurrent_, int lineAnchor_) { - if (lineAnchor_ < lineCurrent_) { - SetSelection(pdoc->LineStart(lineCurrent_ + 1), - pdoc->LineStart(lineAnchor_)); - } else if (lineAnchor_ > lineCurrent_) { - SetSelection(pdoc->LineStart(lineCurrent_), - pdoc->LineStart(lineAnchor_ + 1)); - } else { // Same line, select it - SetSelection(pdoc->LineStart(lineAnchor_ + 1), - pdoc->LineStart(lineAnchor_)); - } -} - -void Editor::DwellEnd(bool mouseMoved) { - if (mouseMoved) - ticksToDwell = dwellDelay; - else - ticksToDwell = SC_TIME_FOREVER; - if (dwelling && (dwellDelay < SC_TIME_FOREVER)) { - dwelling = false; - NotifyDwelling(ptMouseLast, dwelling); - } -} - -void Editor::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) { - //Platform::DebugPrintf("Scintilla:ButtonDown %d %d = %d alt=%d\n", curTime, lastClickTime, curTime - lastClickTime, alt); - ptMouseLast = pt; - int newPos = PositionFromLocation(pt); - newPos = MovePositionOutsideChar(newPos, currentPos - newPos); - inDragDrop = false; - moveExtendsSelection = false; - - bool processed = NotifyMarginClick(pt, shift, ctrl, alt); - if (processed) - return; - - bool inSelMargin = PointInSelMargin(pt); - if (shift & !inSelMargin) { - SetSelection(newPos); - } - if (((curTime - lastClickTime) < Platform::DoubleClickTime()) && Close(pt, lastClick)) { - //Platform::DebugPrintf("Double click %d %d = %d\n", curTime, lastClickTime, curTime - lastClickTime); - SetMouseCapture(true); - SetEmptySelection(newPos); - bool doubleClick = false; - // Stop mouse button bounce changing selection type - if (!Platform::MouseButtonBounce() || curTime != lastClickTime) { - if (selectionType == selChar) { - selectionType = selWord; - doubleClick = true; - } else if (selectionType == selWord) { - selectionType = selLine; - } else { - selectionType = selChar; - originalAnchorPos = currentPos; - } - } - - if (selectionType == selWord) { - if (currentPos >= originalAnchorPos) { // Moved forward - SetSelection(pdoc->ExtendWordSelect(currentPos, 1), - pdoc->ExtendWordSelect(originalAnchorPos, -1)); - } else { // Moved backward - SetSelection(pdoc->ExtendWordSelect(currentPos, -1), - pdoc->ExtendWordSelect(originalAnchorPos, 1)); - } - } else if (selectionType == selLine) { - lineAnchor = LineFromLocation(pt); - SetSelection(pdoc->LineStart(lineAnchor + 1), pdoc->LineStart(lineAnchor)); - //Platform::DebugPrintf("Triple click: %d - %d\n", anchor, currentPos); - } else { - SetEmptySelection(currentPos); - } - //Platform::DebugPrintf("Double click: %d - %d\n", anchor, currentPos); - if (doubleClick) { - NotifyDoubleClick(pt, shift); - if (PositionIsHotspot(newPos)) - NotifyHotSpotDoubleClicked(newPos, shift, ctrl, alt); - } - } else { // Single click - if (inSelMargin) { - selType = selStream; - if (ctrl) { - SelectAll(); - lastClickTime = curTime; - return; - } - if (!shift) { - lineAnchor = LineFromLocation(pt); - // Single click in margin: select whole line - LineSelection(lineAnchor, lineAnchor); - SetSelection(pdoc->LineStart(lineAnchor + 1), - pdoc->LineStart(lineAnchor)); - } else { - // Single shift+click in margin: select from line anchor to clicked line - if (anchor > currentPos) - lineAnchor = pdoc->LineFromPosition(anchor - 1); - else - lineAnchor = pdoc->LineFromPosition(anchor); - int lineStart = LineFromLocation(pt); - LineSelection(lineStart, lineAnchor); - //lineAnchor = lineStart; // Keep the same anchor for ButtonMove - } - - SetDragPosition(invalidPosition); - SetMouseCapture(true); - selectionType = selLine; - } else { - if (PointIsHotspot(pt)) { - NotifyHotSpotClicked(newPos, shift, ctrl, alt); - } - if (!shift) { - inDragDrop = PointInSelection(pt) && !SelectionEmpty(); - } - if (inDragDrop) { - SetMouseCapture(false); - SetDragPosition(newPos); - CopySelectionRange(&drag); - StartDrag(); - } else { - SetDragPosition(invalidPosition); - SetMouseCapture(true); - if (!shift) { - SetEmptySelection(newPos); - } - selType = alt ? selRectangle : selStream; - selectionType = selChar; - originalAnchorPos = currentPos; - SetRectangularRange(); - } - } - } - lastClickTime = curTime; - lastXChosen = pt.x; - ShowCaretAtCurrentPosition(); -} - -bool Editor::PositionIsHotspot(int position) { - return vs.styles[pdoc->StyleAt(position) & pdoc->stylingBitsMask].hotspot; -} - -bool Editor::PointIsHotspot(Point pt) { - int pos = PositionFromLocationClose(pt); - if (pos == INVALID_POSITION) - return false; - return PositionIsHotspot(pos); -} - -void Editor::SetHotSpotRange(Point *pt) { - if (pt) { - int pos = PositionFromLocation(*pt); - - // If we don't limit this to word characters then the - // range can encompass more than the run range and then - // the underline will not be drawn properly. - int hsStart_ = pdoc->ExtendStyleRange(pos, -1, vs.hotspotSingleLine); - int hsEnd_ = pdoc->ExtendStyleRange(pos, 1, vs.hotspotSingleLine); - - // Only invalidate the range if the hotspot range has changed... - if (hsStart_ != hsStart || hsEnd_ != hsEnd) { - if (hsStart != -1) { - InvalidateRange(hsStart, hsEnd); - } - hsStart = hsStart_; - hsEnd = hsEnd_; - InvalidateRange(hsStart, hsEnd); - } - } else { - if (hsStart != -1) { - int hsStart_ = hsStart; - int hsEnd_ = hsEnd; - hsStart = -1; - hsEnd = -1; - InvalidateRange(hsStart_, hsEnd_); - } else { - hsStart = -1; - hsEnd = -1; - } - } -} - -void Editor::GetHotSpotRange(int& hsStart_, int& hsEnd_) { - hsStart_ = hsStart; - hsEnd_ = hsEnd; -} - -void Editor::ButtonMove(Point pt) { - if ((ptMouseLast.x != pt.x) || (ptMouseLast.y != pt.y)) { - DwellEnd(true); - } - ptMouseLast = pt; - //Platform::DebugPrintf("Move %d %d\n", pt.x, pt.y); - if (HaveMouseCapture()) { - - // Slow down autoscrolling/selection - autoScrollTimer.ticksToWait -= timer.tickSize; - if (autoScrollTimer.ticksToWait > 0) - return; - autoScrollTimer.ticksToWait = autoScrollDelay; - - // Adjust selection - int movePos = PositionFromLocation(pt); - movePos = MovePositionOutsideChar(movePos, currentPos - movePos); - if (posDrag >= 0) { - SetDragPosition(movePos); - } else { - if (selectionType == selChar) { - SetSelection(movePos); - } else if (selectionType == selWord) { - // Continue selecting by word - if (movePos == originalAnchorPos) { // Didn't move - // No need to do anything. Previously this case was lumped - // in with "Moved forward", but that can be harmful in this - // case: a handler for the NotifyDoubleClick re-adjusts - // the selection for a fancier definition of "word" (for - // example, in Perl it is useful to include the leading - // '$', '%' or '@' on variables for word selection). In this - // the ButtonMove() called via Tick() for auto-scrolling - // could result in the fancier word selection adjustment - // being unmade. - } else if (movePos > originalAnchorPos) { // Moved forward - SetSelection(pdoc->ExtendWordSelect(movePos, 1), - pdoc->ExtendWordSelect(originalAnchorPos, -1)); - } else { // Moved backward - SetSelection(pdoc->ExtendWordSelect(movePos, -1), - pdoc->ExtendWordSelect(originalAnchorPos, 1)); - } - } else { - // Continue selecting by line - int lineMove = LineFromLocation(pt); - LineSelection(lineMove, lineAnchor); - } - } - // While dragging to make rectangular selection, we don't want the current - // position to jump to the end of smaller or empty lines. - //xEndSelect = pt.x - vs.fixedColumnWidth + xOffset; - xEndSelect = XFromPosition(movePos); - - // Autoscroll - PRectangle rcClient = GetClientRectangle(); - if (pt.y > rcClient.bottom) { - int lineMove = cs.DisplayFromDoc(LineFromLocation(pt)); - if (lineMove < 0) { - lineMove = cs.DisplayFromDoc(pdoc->LinesTotal() - 1); - } - ScrollTo(lineMove - LinesOnScreen() + 5); - Redraw(); - } else if (pt.y < rcClient.top) { - int lineMove = cs.DisplayFromDoc(LineFromLocation(pt)); - ScrollTo(lineMove - 5); - Redraw(); - } - EnsureCaretVisible(false, false, true); - - if (hsStart != -1 && !PositionIsHotspot(movePos)) - SetHotSpotRange(NULL); - - } else { - if (vs.fixedColumnWidth > 0) { // There is a margin - if (PointInSelMargin(pt)) { - DisplayCursor(Window::cursorReverseArrow); - return; // No need to test for selection - } - } - // Display regular (drag) cursor over selection - if (PointInSelection(pt) && !SelectionEmpty()) { - DisplayCursor(Window::cursorArrow); - } else if (PointIsHotspot(pt)) { - DisplayCursor(Window::cursorHand); - SetHotSpotRange(&pt); - } else { - DisplayCursor(Window::cursorText); - SetHotSpotRange(NULL); - } - } -} - -void Editor::ButtonUp(Point pt, unsigned int curTime, bool ctrl) { - //Platform::DebugPrintf("ButtonUp %d\n", HaveMouseCapture()); - if (HaveMouseCapture()) { - if (PointInSelMargin(pt)) { - DisplayCursor(Window::cursorReverseArrow); - } else { - DisplayCursor(Window::cursorText); - SetHotSpotRange(NULL); - } - ptMouseLast = pt; - SetMouseCapture(false); - int newPos = PositionFromLocation(pt); - newPos = MovePositionOutsideChar(newPos, currentPos - newPos); - if (inDragDrop) { - int selStart = SelectionStart(); - int selEnd = SelectionEnd(); - if (selStart < selEnd) { - if (drag.len) { - if (ctrl) { - if (pdoc->InsertString(newPos, drag.s, drag.len)) { - SetSelection(newPos, newPos + drag.len); - } - } else if (newPos < selStart) { - pdoc->DeleteChars(selStart, drag.len); - if (pdoc->InsertString(newPos, drag.s, drag.len)) { - SetSelection(newPos, newPos + drag.len); - } - } else if (newPos > selEnd) { - pdoc->DeleteChars(selStart, drag.len); - newPos -= drag.len; - if (pdoc->InsertString(newPos, drag.s, drag.len)) { - SetSelection(newPos, newPos + drag.len); - } - } else { - SetEmptySelection(newPos); - } - drag.Free(); - } - selectionType = selChar; - } - } else { - if (selectionType == selChar) { - SetSelection(newPos); - } - } - SetRectangularRange(); - lastClickTime = curTime; - lastClick = pt; - lastXChosen = pt.x; - if (selType == selStream) { - SetLastXChosen(); - } - inDragDrop = false; - EnsureCaretVisible(false); - } -} - -// Called frequently to perform background UI including -// caret blinking and automatic scrolling. -void Editor::Tick() { - if (HaveMouseCapture()) { - // Auto scroll - ButtonMove(ptMouseLast); - } - if (caret.period > 0) { - timer.ticksToWait -= timer.tickSize; - if (timer.ticksToWait <= 0) { - caret.on = !caret.on; - timer.ticksToWait = caret.period; - if (caret.active) { - InvalidateCaret(); - } - } - } - if ((dwellDelay < SC_TIME_FOREVER) && - (ticksToDwell > 0) && - (!HaveMouseCapture())) { - ticksToDwell -= timer.tickSize; - if (ticksToDwell <= 0) { - dwelling = true; - NotifyDwelling(ptMouseLast, dwelling); - } - } -} - -bool Editor::Idle() { - - bool idleDone; - - bool wrappingDone = wrapState == eWrapNone; - - if (!wrappingDone) { - // Wrap lines during idle. - WrapLines(false, -1); - // No more wrapping - if (wrapStart == wrapEnd) - wrappingDone = true; - } - - // Add more idle things to do here, but make sure idleDone is - // set correctly before the function returns. returning - // false will stop calling this idle funtion until SetIdle() is - // called again. - - idleDone = wrappingDone; // && thatDone && theOtherThingDone... - - return !idleDone; -} - -void Editor::SetFocusState(bool focusState) { - hasFocus = focusState; - NotifyFocus(hasFocus); - if (hasFocus) { - ShowCaretAtCurrentPosition(); - } else { - CancelModes(); - DropCaret(); - } -} - -bool Editor::PaintContains(PRectangle rc) { - return rcPaint.Contains(rc); -} - -bool Editor::PaintContainsMargin() { - PRectangle rcSelMargin = GetClientRectangle(); - rcSelMargin.right = vs.fixedColumnWidth; - return PaintContains(rcSelMargin); -} - -void Editor::CheckForChangeOutsidePaint(Range r) { - if (paintState == painting && !paintingAllText) { - //Platform::DebugPrintf("Checking range in paint %d-%d\n", r.start, r.end); - if (!r.Valid()) - return; - - PRectangle rcRange = RectangleFromRange(r.start, r.end); - PRectangle rcText = GetTextRectangle(); - if (rcRange.top < rcText.top) { - rcRange.top = rcText.top; - } - if (rcRange.bottom > rcText.bottom) { - rcRange.bottom = rcText.bottom; - } - - if (!PaintContains(rcRange)) { - AbandonPaint(); - } - } -} - -void Editor::SetBraceHighlight(Position pos0, Position pos1, int matchStyle) { - if ((pos0 != braces[0]) || (pos1 != braces[1]) || (matchStyle != bracesMatchStyle)) { - if ((braces[0] != pos0) || (matchStyle != bracesMatchStyle)) { - CheckForChangeOutsidePaint(Range(braces[0])); - CheckForChangeOutsidePaint(Range(pos0)); - braces[0] = pos0; - } - if ((braces[1] != pos1) || (matchStyle != bracesMatchStyle)) { - CheckForChangeOutsidePaint(Range(braces[1])); - CheckForChangeOutsidePaint(Range(pos1)); - braces[1] = pos1; - } - bracesMatchStyle = matchStyle; - if (paintState == notPainting) { - Redraw(); - } - } -} - -void Editor::SetDocPointer(Document *document) { - //Platform::DebugPrintf("** %x setdoc to %x\n", pdoc, document); - pdoc->RemoveWatcher(this, 0); - pdoc->Release(); - if (document == NULL) { - pdoc = new Document(); - } else { - pdoc = document; - } - pdoc->AddRef(); - - // Ensure all positions within document - selType = selStream; - currentPos = 0; - anchor = 0; - targetStart = 0; - targetEnd = 0; - - braces[0] = invalidPosition; - braces[1] = invalidPosition; - - // Reset the contraction state to fully shown. - cs.Clear(); - cs.InsertLines(0, pdoc->LinesTotal() - 1); - llc.Deallocate(); - NeedWrapping(); - - pdoc->AddWatcher(this, 0); - SetScrollBars(); - Redraw(); -} - -/** - * Recursively expand a fold, making lines visible except where they have an unexpanded parent. - */ -void Editor::Expand(int &line, bool doExpand) { - int lineMaxSubord = pdoc->GetLastChild(line); - line++; - while (line <= lineMaxSubord) { - if (doExpand) - cs.SetVisible(line, line, true); - int level = pdoc->GetLevel(line); - if (level & SC_FOLDLEVELHEADERFLAG) { - if (doExpand && cs.GetExpanded(line)) { - Expand(line, true); - } else { - Expand(line, false); - } - } else { - line++; - } - } -} - -void Editor::ToggleContraction(int line) { - if (line >= 0) { - if ((pdoc->GetLevel(line) & SC_FOLDLEVELHEADERFLAG) == 0) { - line = pdoc->GetFoldParent(line); - if (line < 0) - return; - } - - if (cs.GetExpanded(line)) { - int lineMaxSubord = pdoc->GetLastChild(line); - cs.SetExpanded(line, 0); - if (lineMaxSubord > line) { - cs.SetVisible(line + 1, lineMaxSubord, false); - - int lineCurrent = pdoc->LineFromPosition(currentPos); - if (lineCurrent > line && lineCurrent <= lineMaxSubord) { - // This does not re-expand the fold - EnsureCaretVisible(); - } - - SetScrollBars(); - Redraw(); - } - - } else { - if (!(cs.GetVisible(line))) { - EnsureLineVisible(line, false); - GoToLine(line); - } - cs.SetExpanded(line, 1); - Expand(line, true); - SetScrollBars(); - Redraw(); - } - } -} - -/** - * Recurse up from this line to find any folds that prevent this line from being visible - * and unfold them all. - */ -void Editor::EnsureLineVisible(int lineDoc, bool enforcePolicy) { - - // In case in need of wrapping to ensure DisplayFromDoc works. - WrapLines(true, -1); - - if (!cs.GetVisible(lineDoc)) { - int lineParent = pdoc->GetFoldParent(lineDoc); - if (lineParent >= 0) { - if (lineDoc != lineParent) - EnsureLineVisible(lineParent, enforcePolicy); - if (!cs.GetExpanded(lineParent)) { - cs.SetExpanded(lineParent, 1); - Expand(lineParent, true); - } - } - SetScrollBars(); - Redraw(); - } - if (enforcePolicy) { - int lineDisplay = cs.DisplayFromDoc(lineDoc); - if (visiblePolicy & VISIBLE_SLOP) { - if ((topLine > lineDisplay) || ((visiblePolicy & VISIBLE_STRICT) && (topLine + visibleSlop > lineDisplay))) { - SetTopLine(Platform::Clamp(lineDisplay - visibleSlop, 0, MaxScrollPos())); - SetVerticalScrollPos(); - Redraw(); - } else if ((lineDisplay > topLine + LinesOnScreen() - 1) || - ((visiblePolicy & VISIBLE_STRICT) && (lineDisplay > topLine + LinesOnScreen() - 1 - visibleSlop))) { - SetTopLine(Platform::Clamp(lineDisplay - LinesOnScreen() + 1 + visibleSlop, 0, MaxScrollPos())); - SetVerticalScrollPos(); - Redraw(); - } - } else { - if ((topLine > lineDisplay) || (lineDisplay > topLine + LinesOnScreen() - 1) || (visiblePolicy & VISIBLE_STRICT)) { - SetTopLine(Platform::Clamp(lineDisplay - LinesOnScreen() / 2 + 1, 0, MaxScrollPos())); - SetVerticalScrollPos(); - Redraw(); - } - } - } -} - -int Editor::ReplaceTarget(bool replacePatterns, const char *text, int length) { - pdoc->BeginUndoAction(); - if (length == -1) - length = istrlen(text); - if (replacePatterns) { - text = pdoc->SubstituteByPosition(text, &length); - if (!text) - return 0; - } - if (targetStart != targetEnd) - pdoc->DeleteChars(targetStart, targetEnd - targetStart); - targetEnd = targetStart; - pdoc->InsertString(targetStart, text, length); - targetEnd = targetStart + length; - pdoc->EndUndoAction(); - return length; -} - -bool Editor::IsUnicodeMode() const { - return pdoc && (SC_CP_UTF8 == pdoc->dbcsCodePage); -} - -int Editor::CodePage() const { - if (pdoc) - return pdoc->dbcsCodePage; - else - return 0; -} - -int Editor::WrapCount(int line) { - AutoSurface surface(this); - AutoLineLayout ll(llc, RetrieveLineLayout(line)); - - if (surface && ll) { - LayoutLine(line, surface, vs, ll, wrapWidth); - return ll->lines; - } else { - return 1; - } -} - -static bool ValidMargin(unsigned long wParam) { - return wParam < ViewStyle::margins; -} - -static char *CharPtrFromSPtr(sptr_t lParam) { - return reinterpret_cast(lParam); -} - -sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { - //Platform::DebugPrintf("S start wnd proc %d %d %d\n",iMessage, wParam, lParam); - - // Optional macro recording hook - if (recordingMacro) - NotifyMacroRecord(iMessage, wParam, lParam); - - switch (iMessage) { - - case SCI_GETTEXT: { - if (lParam == 0) - return pdoc->Length() + 1; - if (wParam == 0) - return 0; - char *ptr = CharPtrFromSPtr(lParam); - unsigned int iChar = 0; - for (; iChar < wParam - 1; iChar++) - ptr[iChar] = pdoc->CharAt(iChar); - ptr[iChar] = '\0'; - return iChar; - } - - case SCI_SETTEXT: { - if (lParam == 0) - return 0; - pdoc->BeginUndoAction(); - pdoc->DeleteChars(0, pdoc->Length()); - SetEmptySelection(0); - pdoc->InsertString(0, CharPtrFromSPtr(lParam)); - pdoc->EndUndoAction(); - return 1; - } - - case SCI_GETTEXTLENGTH: - return pdoc->Length(); - - case SCI_CUT: - Cut(); - SetLastXChosen(); - break; - - case SCI_COPY: - Copy(); - break; - - case SCI_COPYRANGE: - CopyRangeToClipboard(wParam, lParam); - break; - - case SCI_COPYTEXT: - CopyText(wParam, CharPtrFromSPtr(lParam)); - break; - - case SCI_PASTE: - Paste(); - if (!caretSticky) { - SetLastXChosen(); - } - EnsureCaretVisible(); - break; - - case SCI_CLEAR: - Clear(); - SetLastXChosen(); - EnsureCaretVisible(); - break; - - case SCI_UNDO: - Undo(); - SetLastXChosen(); - break; - - case SCI_CANUNDO: - return (pdoc->CanUndo() && !pdoc->IsReadOnly()) ? 1 : 0; - - case SCI_EMPTYUNDOBUFFER: - pdoc->DeleteUndoHistory(); - return 0; - - case SCI_GETFIRSTVISIBLELINE: - return topLine; - - case SCI_GETLINE: { // Risk of overwriting the end of the buffer - int lineStart = pdoc->LineStart(wParam); - int lineEnd = pdoc->LineStart(wParam + 1); - if (lParam == 0) { - return lineEnd - lineStart; - } - char *ptr = CharPtrFromSPtr(lParam); - int iPlace = 0; - for (int iChar = lineStart; iChar < lineEnd; iChar++) { - ptr[iPlace++] = pdoc->CharAt(iChar); - } - return iPlace; - } - - case SCI_GETLINECOUNT: - if (pdoc->LinesTotal() == 0) - return 1; - else - return pdoc->LinesTotal(); - - case SCI_GETMODIFY: - return !pdoc->IsSavePoint(); - - case SCI_SETSEL: { - int nStart = static_cast(wParam); - int nEnd = static_cast(lParam); - if (nEnd < 0) - nEnd = pdoc->Length(); - if (nStart < 0) - nStart = nEnd; // Remove selection - selType = selStream; - SetSelection(nEnd, nStart); - EnsureCaretVisible(); - } - break; - - case SCI_GETSELTEXT: { - if (lParam == 0) { - if (selType == selStream) { - return 1 + SelectionEnd() - SelectionStart(); - } else { - // TODO: why is selLines handled the slow way? - int size = 0; - int extraCharsPerLine = 0; - if (selType != selLines) - extraCharsPerLine = (pdoc->eolMode == SC_EOL_CRLF) ? 2 : 1; - SelectionLineIterator lineIterator(this); - while (lineIterator.Iterate()) { - size += lineIterator.endPos + extraCharsPerLine - lineIterator.startPos; - } - - return 1 + size; - } - } - SelectionText selectedText; - CopySelectionRange(&selectedText); - char *ptr = CharPtrFromSPtr(lParam); - int iChar = 0; - if (selectedText.len) { - for (; iChar < selectedText.len; iChar++) - ptr[iChar] = selectedText.s[iChar]; - } else { - ptr[0] = '\0'; - } - return iChar; - } - - case SCI_LINEFROMPOSITION: - if (static_cast(wParam) < 0) - return 0; - return pdoc->LineFromPosition(wParam); - - case SCI_POSITIONFROMLINE: - if (static_cast(wParam) < 0) - wParam = pdoc->LineFromPosition(SelectionStart()); - if (wParam == 0) - return 0; // Even if there is no text, there is a first line that starts at 0 - if (static_cast(wParam) > pdoc->LinesTotal()) - return -1; - //if (wParam > pdoc->LineFromPosition(pdoc->Length())) // Useful test, anyway... - // return -1; - return pdoc->LineStart(wParam); - - // Replacement of the old Scintilla interpretation of EM_LINELENGTH - case SCI_LINELENGTH: - if ((static_cast(wParam) < 0) || - (static_cast(wParam) > pdoc->LineFromPosition(pdoc->Length()))) - return 0; - return pdoc->LineStart(wParam + 1) - pdoc->LineStart(wParam); - - case SCI_REPLACESEL: { - if (lParam == 0) - return 0; - pdoc->BeginUndoAction(); - ClearSelection(); - char *replacement = CharPtrFromSPtr(lParam); - pdoc->InsertString(currentPos, replacement); - pdoc->EndUndoAction(); - SetEmptySelection(currentPos + istrlen(replacement)); - EnsureCaretVisible(); - } - break; - - case SCI_SETTARGETSTART: - targetStart = wParam; - break; - - case SCI_GETTARGETSTART: - return targetStart; - - case SCI_SETTARGETEND: - targetEnd = wParam; - break; - - case SCI_GETTARGETEND: - return targetEnd; - - case SCI_TARGETFROMSELECTION: - if (currentPos < anchor) { - targetStart = currentPos; - targetEnd = anchor; - } else { - targetStart = anchor; - targetEnd = currentPos; - } - break; - - case SCI_REPLACETARGET: - PLATFORM_ASSERT(lParam); - return ReplaceTarget(false, CharPtrFromSPtr(lParam), wParam); - - case SCI_REPLACETARGETRE: - PLATFORM_ASSERT(lParam); - return ReplaceTarget(true, CharPtrFromSPtr(lParam), wParam); - - case SCI_SEARCHINTARGET: - PLATFORM_ASSERT(lParam); - return SearchInTarget(CharPtrFromSPtr(lParam), wParam); - - case SCI_SETSEARCHFLAGS: - searchFlags = wParam; - break; - - case SCI_GETSEARCHFLAGS: - return searchFlags; - - case SCI_POSITIONBEFORE: - return pdoc->MovePositionOutsideChar(wParam-1, -1, true); - - case SCI_POSITIONAFTER: - return pdoc->MovePositionOutsideChar(wParam+1, 1, true); - - case SCI_LINESCROLL: - ScrollTo(topLine + lParam); - HorizontalScrollTo(xOffset + wParam * vs.spaceWidth); - return 1; - - case SCI_SETXOFFSET: - xOffset = wParam; - SetHorizontalScrollPos(); - Redraw(); - break; - - case SCI_GETXOFFSET: - return xOffset; - - case SCI_CHOOSECARETX: - SetLastXChosen(); - break; - - case SCI_SCROLLCARET: - EnsureCaretVisible(); - break; - - case SCI_SETREADONLY: - pdoc->SetReadOnly(wParam != 0); - return 1; - - case SCI_GETREADONLY: - return pdoc->IsReadOnly(); - - case SCI_CANPASTE: - return CanPaste(); - - case SCI_POINTXFROMPOSITION: - if (lParam < 0) { - return 0; - } else { - Point pt = LocationFromPosition(lParam); - return pt.x; - } - - case SCI_POINTYFROMPOSITION: - if (lParam < 0) { - return 0; - } else { - Point pt = LocationFromPosition(lParam); - return pt.y; - } - - case SCI_FINDTEXT: - return FindText(wParam, lParam); - - case SCI_GETTEXTRANGE: { - if (lParam == 0) - return 0; - TextRange *tr = reinterpret_cast(lParam); - int cpMax = tr->chrg.cpMax; - if (cpMax == -1) - cpMax = pdoc->Length(); - PLATFORM_ASSERT(cpMax <= pdoc->Length()); - int len = cpMax - tr->chrg.cpMin; // No -1 as cpMin and cpMax are referring to inter character positions - pdoc->GetCharRange(tr->lpstrText, tr->chrg.cpMin, len); - // Spec says copied text is terminated with a NUL - tr->lpstrText[len] = '\0'; - return len; // Not including NUL - } - - case SCI_HIDESELECTION: - hideSelection = wParam != 0; - Redraw(); - break; - - case SCI_FORMATRANGE: - return FormatRange(wParam != 0, reinterpret_cast(lParam)); - - case SCI_GETMARGINLEFT: - return vs.leftMarginWidth; - - case SCI_GETMARGINRIGHT: - return vs.rightMarginWidth; - - case SCI_SETMARGINLEFT: - vs.leftMarginWidth = lParam; - InvalidateStyleRedraw(); - break; - - case SCI_SETMARGINRIGHT: - vs.rightMarginWidth = lParam; - InvalidateStyleRedraw(); - break; - - // Control specific mesages - - case SCI_ADDTEXT: { - if (lParam == 0) - return 0; - pdoc->InsertString(CurrentPosition(), CharPtrFromSPtr(lParam), wParam); - SetEmptySelection(currentPos + wParam); - return 0; - } - - case SCI_ADDSTYLEDTEXT: { - if (lParam == 0) - return 0; - pdoc->InsertStyledString(CurrentPosition() * 2, CharPtrFromSPtr(lParam), wParam); - SetEmptySelection(currentPos + wParam / 2); - return 0; - } - - case SCI_INSERTTEXT: { - if (lParam == 0) - return 0; - int insertPos = wParam; - if (static_cast(wParam) == -1) - insertPos = CurrentPosition(); - int newCurrent = CurrentPosition(); - char *sz = CharPtrFromSPtr(lParam); - pdoc->InsertString(insertPos, sz); - if (newCurrent > insertPos) - newCurrent += istrlen(sz); - SetEmptySelection(newCurrent); - return 0; - } - - case SCI_APPENDTEXT: - pdoc->InsertString(pdoc->Length(), CharPtrFromSPtr(lParam), wParam); - return 0; - - case SCI_CLEARALL: - ClearAll(); - return 0; - - case SCI_CLEARDOCUMENTSTYLE: - ClearDocumentStyle(); - return 0; - - case SCI_SETUNDOCOLLECTION: - pdoc->SetUndoCollection(wParam != 0); - return 0; - - case SCI_GETUNDOCOLLECTION: - return pdoc->IsCollectingUndo(); - - case SCI_BEGINUNDOACTION: - pdoc->BeginUndoAction(); - return 0; - - case SCI_ENDUNDOACTION: - pdoc->EndUndoAction(); - return 0; - - case SCI_GETCARETPERIOD: - return caret.period; - - case SCI_SETCARETPERIOD: - caret.period = wParam; - break; - - case SCI_SETWORDCHARS: { - pdoc->SetDefaultCharClasses(false); - if (lParam == 0) - return 0; - pdoc->SetCharClasses(reinterpret_cast(lParam), CharClassify::ccWord); - } - break; - - case SCI_SETWHITESPACECHARS: { - if (lParam == 0) - return 0; - pdoc->SetCharClasses(reinterpret_cast(lParam), CharClassify::ccSpace); - } - break; - - case SCI_SETCHARSDEFAULT: - pdoc->SetDefaultCharClasses(true); - break; - - case SCI_GETLENGTH: - return pdoc->Length(); - - case SCI_ALLOCATE: - pdoc->Allocate(wParam); - break; - - case SCI_GETCHARAT: - return pdoc->CharAt(wParam); - - case SCI_SETCURRENTPOS: - SetSelection(wParam, anchor); - break; - - case SCI_GETCURRENTPOS: - return currentPos; - - case SCI_SETANCHOR: - SetSelection(currentPos, wParam); - break; - - case SCI_GETANCHOR: - return anchor; - - case SCI_SETSELECTIONSTART: - SetSelection(Platform::Maximum(currentPos, wParam), wParam); - break; - - case SCI_GETSELECTIONSTART: - return Platform::Minimum(anchor, currentPos); - - case SCI_SETSELECTIONEND: - SetSelection(wParam, Platform::Minimum(anchor, wParam)); - break; - - case SCI_GETSELECTIONEND: - return Platform::Maximum(anchor, currentPos); - - case SCI_SETPRINTMAGNIFICATION: - printMagnification = wParam; - break; - - case SCI_GETPRINTMAGNIFICATION: - return printMagnification; - - case SCI_SETPRINTCOLOURMODE: - printColourMode = wParam; - break; - - case SCI_GETPRINTCOLOURMODE: - return printColourMode; - - case SCI_SETPRINTWRAPMODE: - printWrapState = (wParam == SC_WRAP_WORD) ? eWrapWord : eWrapNone; - break; - - case SCI_GETPRINTWRAPMODE: - return printWrapState; - - case SCI_GETSTYLEAT: - if (static_cast(wParam) >= pdoc->Length()) - return 0; - else - return pdoc->StyleAt(wParam); - - case SCI_REDO: - Redo(); - break; - - case SCI_SELECTALL: - SelectAll(); - break; - - case SCI_SETSAVEPOINT: - pdoc->SetSavePoint(); - break; - - case SCI_GETSTYLEDTEXT: { - if (lParam == 0) - return 0; - TextRange *tr = reinterpret_cast(lParam); - int iPlace = 0; - for (int iChar = tr->chrg.cpMin; iChar < tr->chrg.cpMax; iChar++) { - tr->lpstrText[iPlace++] = pdoc->CharAt(iChar); - tr->lpstrText[iPlace++] = pdoc->StyleAt(iChar); - } - tr->lpstrText[iPlace] = '\0'; - tr->lpstrText[iPlace + 1] = '\0'; - return iPlace; - } - - case SCI_CANREDO: - return (pdoc->CanRedo() && !pdoc->IsReadOnly()) ? 1 : 0; - - case SCI_MARKERLINEFROMHANDLE: - return pdoc->LineFromHandle(wParam); - - case SCI_MARKERDELETEHANDLE: - pdoc->DeleteMarkFromHandle(wParam); - break; - - case SCI_GETVIEWWS: - return vs.viewWhitespace; - - case SCI_SETVIEWWS: - vs.viewWhitespace = static_cast(wParam); - Redraw(); - break; - - case SCI_POSITIONFROMPOINT: - return PositionFromLocation(Point(wParam, lParam)); - - case SCI_POSITIONFROMPOINTCLOSE: - return PositionFromLocationClose(Point(wParam, lParam)); - - case SCI_GOTOLINE: - GoToLine(wParam); - break; - - case SCI_GOTOPOS: - SetEmptySelection(wParam); - EnsureCaretVisible(); - Redraw(); - break; - - case SCI_GETCURLINE: { - int lineCurrentPos = pdoc->LineFromPosition(currentPos); - int lineStart = pdoc->LineStart(lineCurrentPos); - unsigned int lineEnd = pdoc->LineStart(lineCurrentPos + 1); - if (lParam == 0) { - return 1 + lineEnd - lineStart; - } - PLATFORM_ASSERT(wParam > 0); - char *ptr = CharPtrFromSPtr(lParam); - unsigned int iPlace = 0; - for (unsigned int iChar = lineStart; iChar < lineEnd && iPlace < wParam - 1; iChar++) { - ptr[iPlace++] = pdoc->CharAt(iChar); - } - ptr[iPlace] = '\0'; - return currentPos - lineStart; - } - - case SCI_GETENDSTYLED: - return pdoc->GetEndStyled(); - - case SCI_GETEOLMODE: - return pdoc->eolMode; - - case SCI_SETEOLMODE: - pdoc->eolMode = wParam; - break; - - case SCI_STARTSTYLING: - pdoc->StartStyling(wParam, static_cast(lParam)); - break; - - case SCI_SETSTYLING: - pdoc->SetStyleFor(wParam, static_cast(lParam)); - break; - - case SCI_SETSTYLINGEX: // Specify a complete styling buffer - if (lParam == 0) - return 0; - pdoc->SetStyles(wParam, CharPtrFromSPtr(lParam)); - break; - - case SCI_SETBUFFEREDDRAW: - bufferedDraw = wParam != 0; - break; - - case SCI_GETBUFFEREDDRAW: - return bufferedDraw; - - case SCI_GETTWOPHASEDRAW: - return twoPhaseDraw; - - case SCI_SETTWOPHASEDRAW: - twoPhaseDraw = wParam != 0; - InvalidateStyleRedraw(); - break; - - case SCI_SETTABWIDTH: - if (wParam > 0) { - pdoc->tabInChars = wParam; - if (pdoc->indentInChars == 0) - pdoc->actualIndentInChars = pdoc->tabInChars; - } - InvalidateStyleRedraw(); - break; - - case SCI_GETTABWIDTH: - return pdoc->tabInChars; - - case SCI_SETINDENT: - pdoc->indentInChars = wParam; - if (pdoc->indentInChars != 0) - pdoc->actualIndentInChars = pdoc->indentInChars; - else - pdoc->actualIndentInChars = pdoc->tabInChars; - InvalidateStyleRedraw(); - break; - - case SCI_GETINDENT: - return pdoc->indentInChars; - - case SCI_SETUSETABS: - pdoc->useTabs = wParam != 0; - InvalidateStyleRedraw(); - break; - - case SCI_GETUSETABS: - return pdoc->useTabs; - - case SCI_SETLINEINDENTATION: - pdoc->SetLineIndentation(wParam, lParam); - break; - - case SCI_GETLINEINDENTATION: - return pdoc->GetLineIndentation(wParam); - - case SCI_GETLINEINDENTPOSITION: - return pdoc->GetLineIndentPosition(wParam); - - case SCI_SETTABINDENTS: - pdoc->tabIndents = wParam != 0; - break; - - case SCI_GETTABINDENTS: - return pdoc->tabIndents; - - case SCI_SETBACKSPACEUNINDENTS: - pdoc->backspaceUnindents = wParam != 0; - break; - - case SCI_GETBACKSPACEUNINDENTS: - return pdoc->backspaceUnindents; - - case SCI_SETMOUSEDWELLTIME: - dwellDelay = wParam; - ticksToDwell = dwellDelay; - break; - - case SCI_GETMOUSEDWELLTIME: - return dwellDelay; - - case SCI_WORDSTARTPOSITION: - return pdoc->ExtendWordSelect(wParam, -1, lParam != 0); - - case SCI_WORDENDPOSITION: - return pdoc->ExtendWordSelect(wParam, 1, lParam != 0); - - case SCI_SETWRAPMODE: - switch (wParam) { - case SC_WRAP_WORD: - wrapState = eWrapWord; - break; - case SC_WRAP_CHAR: - wrapState = eWrapChar; - break; - default: - wrapState = eWrapNone; - break; - } - xOffset = 0; - InvalidateStyleRedraw(); - ReconfigureScrollBars(); - break; - - case SCI_GETWRAPMODE: - return wrapState; - - case SCI_SETWRAPVISUALFLAGS: - wrapVisualFlags = wParam; - actualWrapVisualStartIndent = wrapVisualStartIndent; - if ((wrapVisualFlags & SC_WRAPVISUALFLAG_START) && (actualWrapVisualStartIndent == 0)) - actualWrapVisualStartIndent = 1; // must indent to show start visual - InvalidateStyleRedraw(); - ReconfigureScrollBars(); - break; - - case SCI_GETWRAPVISUALFLAGS: - return wrapVisualFlags; - - case SCI_SETWRAPVISUALFLAGSLOCATION: - wrapVisualFlagsLocation = wParam; - InvalidateStyleRedraw(); - break; - - case SCI_GETWRAPVISUALFLAGSLOCATION: - return wrapVisualFlagsLocation; - - case SCI_SETWRAPSTARTINDENT: - wrapVisualStartIndent = wParam; - actualWrapVisualStartIndent = wrapVisualStartIndent; - if ((wrapVisualFlags & SC_WRAPVISUALFLAG_START) && (actualWrapVisualStartIndent == 0)) - actualWrapVisualStartIndent = 1; // must indent to show start visual - InvalidateStyleRedraw(); - ReconfigureScrollBars(); - break; - - case SCI_GETWRAPSTARTINDENT: - return wrapVisualStartIndent; - - case SCI_SETLAYOUTCACHE: - llc.SetLevel(wParam); - break; - - case SCI_GETLAYOUTCACHE: - return llc.GetLevel(); - - case SCI_SETSCROLLWIDTH: - PLATFORM_ASSERT(wParam > 0); - if ((wParam > 0) && (wParam != static_cast(scrollWidth))) { - scrollWidth = wParam; - SetScrollBars(); - } - break; - - case SCI_GETSCROLLWIDTH: - return scrollWidth; - - case SCI_LINESJOIN: - LinesJoin(); - break; - - case SCI_LINESSPLIT: - LinesSplit(wParam); - break; - - case SCI_TEXTWIDTH: - PLATFORM_ASSERT(wParam <= STYLE_MAX); - PLATFORM_ASSERT(lParam); - return TextWidth(wParam, CharPtrFromSPtr(lParam)); - - case SCI_TEXTHEIGHT: - return vs.lineHeight; - - case SCI_SETENDATLASTLINE: - PLATFORM_ASSERT((wParam == 0) || (wParam == 1)); - if (endAtLastLine != (wParam != 0)) { - endAtLastLine = wParam != 0; - SetScrollBars(); - } - break; - - case SCI_GETENDATLASTLINE: - return endAtLastLine; - - case SCI_SETCARETSTICKY: - PLATFORM_ASSERT((wParam == 0) || (wParam == 1)); - if (caretSticky != (wParam != 0)) { - caretSticky = wParam != 0; - } - break; - - case SCI_GETCARETSTICKY: - return caretSticky; - - case SCI_TOGGLECARETSTICKY: - caretSticky = !caretSticky; - break; - - case SCI_GETCOLUMN: - return pdoc->GetColumn(wParam); - - case SCI_FINDCOLUMN: - return pdoc->FindColumn(wParam, lParam); - - case SCI_SETHSCROLLBAR : - if (horizontalScrollBarVisible != (wParam != 0)) { - horizontalScrollBarVisible = wParam != 0; - SetScrollBars(); - ReconfigureScrollBars(); - } - break; - - case SCI_GETHSCROLLBAR: - return horizontalScrollBarVisible; - - case SCI_SETVSCROLLBAR: - if (verticalScrollBarVisible != (wParam != 0)) { - verticalScrollBarVisible = wParam != 0; - SetScrollBars(); - ReconfigureScrollBars(); - } - break; - - case SCI_GETVSCROLLBAR: - return verticalScrollBarVisible; - - case SCI_SETINDENTATIONGUIDES: - vs.viewIndentationGuides = wParam != 0; - Redraw(); - break; - - case SCI_GETINDENTATIONGUIDES: - return vs.viewIndentationGuides; - - case SCI_SETHIGHLIGHTGUIDE: - if ((highlightGuideColumn != static_cast(wParam)) || (wParam > 0)) { - highlightGuideColumn = wParam; - Redraw(); - } - break; - - case SCI_GETHIGHLIGHTGUIDE: - return highlightGuideColumn; - - case SCI_GETLINEENDPOSITION: - return pdoc->LineEnd(wParam); - - case SCI_SETCODEPAGE: - if (ValidCodePage(wParam)) { - pdoc->dbcsCodePage = wParam; - InvalidateStyleRedraw(); - } - break; - - case SCI_GETCODEPAGE: - return pdoc->dbcsCodePage; - - case SCI_SETUSEPALETTE: - palette.allowRealization = wParam != 0; - InvalidateStyleRedraw(); - break; - - case SCI_GETUSEPALETTE: - return palette.allowRealization; - - // Marker definition and setting - case SCI_MARKERDEFINE: - if (wParam <= MARKER_MAX) - vs.markers[wParam].markType = lParam; - InvalidateStyleData(); - RedrawSelMargin(); - break; - case SCI_MARKERSETFORE: - if (wParam <= MARKER_MAX) - vs.markers[wParam].fore.desired = ColourDesired(lParam); - InvalidateStyleData(); - RedrawSelMargin(); - break; - case SCI_MARKERSETBACK: - if (wParam <= MARKER_MAX) - vs.markers[wParam].back.desired = ColourDesired(lParam); - InvalidateStyleData(); - RedrawSelMargin(); - break; - case SCI_MARKERSETALPHA: - if (wParam <= MARKER_MAX) - vs.markers[wParam].alpha = lParam; - InvalidateStyleRedraw(); - break; - case SCI_MARKERADD: { - int markerID = pdoc->AddMark(wParam, lParam); - return markerID; - } - case SCI_MARKERADDSET: - if (lParam != 0) - pdoc->AddMarkSet(wParam, lParam); - break; - - case SCI_MARKERDELETE: - pdoc->DeleteMark(wParam, lParam); - break; - - case SCI_MARKERDELETEALL: - pdoc->DeleteAllMarks(static_cast(wParam)); - break; - - case SCI_MARKERGET: - return pdoc->GetMark(wParam); - - case SCI_MARKERNEXT: { - int lt = pdoc->LinesTotal(); - for (int iLine = wParam; iLine < lt; iLine++) { - if ((pdoc->GetMark(iLine) & lParam) != 0) - return iLine; - } - } - return -1; - - case SCI_MARKERPREVIOUS: { - for (int iLine = wParam; iLine >= 0; iLine--) { - if ((pdoc->GetMark(iLine) & lParam) != 0) - return iLine; - } - } - return -1; - - case SCI_MARKERDEFINEPIXMAP: - if (wParam <= MARKER_MAX) { - vs.markers[wParam].SetXPM(CharPtrFromSPtr(lParam)); - }; - InvalidateStyleData(); - RedrawSelMargin(); - break; - - case SCI_SETMARGINTYPEN: - if (ValidMargin(wParam)) { - vs.ms[wParam].style = lParam; - InvalidateStyleRedraw(); - } - break; - - case SCI_GETMARGINTYPEN: - if (ValidMargin(wParam)) - return vs.ms[wParam].style; - else - return 0; - - case SCI_SETMARGINWIDTHN: - if (ValidMargin(wParam)) { - // Short-circuit if the width is unchanged, to avoid unnecessary redraw. - if (vs.ms[wParam].width != lParam) { - vs.ms[wParam].width = lParam; - InvalidateStyleRedraw(); - } - } - break; - - case SCI_GETMARGINWIDTHN: - if (ValidMargin(wParam)) - return vs.ms[wParam].width; - else - return 0; - - case SCI_SETMARGINMASKN: - if (ValidMargin(wParam)) { - vs.ms[wParam].mask = lParam; - InvalidateStyleRedraw(); - } - break; - - case SCI_GETMARGINMASKN: - if (ValidMargin(wParam)) - return vs.ms[wParam].mask; - else - return 0; - - case SCI_SETMARGINSENSITIVEN: - if (ValidMargin(wParam)) { - vs.ms[wParam].sensitive = lParam != 0; - InvalidateStyleRedraw(); - } - break; - - case SCI_GETMARGINSENSITIVEN: - if (ValidMargin(wParam)) - return vs.ms[wParam].sensitive ? 1 : 0; - else - return 0; - - case SCI_STYLECLEARALL: - vs.ClearStyles(); - InvalidateStyleRedraw(); - break; - - case SCI_STYLESETFORE: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].fore.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETBACK: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].back.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETBOLD: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].bold = lParam != 0; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETITALIC: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].italic = lParam != 0; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETEOLFILLED: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].eolFilled = lParam != 0; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETSIZE: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].size = lParam; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETFONT: - if (lParam == 0) - return 0; - if (wParam <= STYLE_MAX) { - vs.SetStyleFontName(wParam, CharPtrFromSPtr(lParam)); - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETUNDERLINE: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].underline = lParam != 0; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETCASE: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].caseForce = static_cast(lParam); - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETCHARACTERSET: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].characterSet = lParam; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETVISIBLE: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].visible = lParam != 0; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETCHANGEABLE: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].changeable = lParam != 0; - InvalidateStyleRedraw(); - } - break; - case SCI_STYLESETHOTSPOT: - if (wParam <= STYLE_MAX) { - vs.styles[wParam].hotspot = lParam != 0; - InvalidateStyleRedraw(); - } - break; - - case SCI_STYLERESETDEFAULT: - vs.ResetDefaultStyle(); - InvalidateStyleRedraw(); - break; - case SCI_SETSTYLEBITS: - pdoc->SetStylingBits(wParam); - break; - - case SCI_GETSTYLEBITS: - return pdoc->stylingBits; - - case SCI_SETLINESTATE: - return pdoc->SetLineState(wParam, lParam); - - case SCI_GETLINESTATE: - return pdoc->GetLineState(wParam); - - case SCI_GETMAXLINESTATE: - return pdoc->GetMaxLineState(); - - case SCI_GETCARETLINEVISIBLE: - return vs.showCaretLineBackground; - case SCI_SETCARETLINEVISIBLE: - vs.showCaretLineBackground = wParam != 0; - InvalidateStyleRedraw(); - break; - case SCI_GETCARETLINEBACK: - return vs.caretLineBackground.desired.AsLong(); - case SCI_SETCARETLINEBACK: - vs.caretLineBackground.desired = wParam; - InvalidateStyleRedraw(); - break; - case SCI_GETCARETLINEBACKALPHA: - return vs.caretLineAlpha; - case SCI_SETCARETLINEBACKALPHA: - vs.caretLineAlpha = wParam; - InvalidateStyleRedraw(); - break; - - // Folding messages - - case SCI_VISIBLEFROMDOCLINE: - return cs.DisplayFromDoc(wParam); - - case SCI_DOCLINEFROMVISIBLE: - return cs.DocFromDisplay(wParam); - - case SCI_WRAPCOUNT: - return WrapCount(wParam); - - case SCI_SETFOLDLEVEL: { - int prev = pdoc->SetLevel(wParam, lParam); - if (prev != lParam) - RedrawSelMargin(); - return prev; - } - - case SCI_GETFOLDLEVEL: - return pdoc->GetLevel(wParam); - - case SCI_GETLASTCHILD: - return pdoc->GetLastChild(wParam, lParam); - - case SCI_GETFOLDPARENT: - return pdoc->GetFoldParent(wParam); - - case SCI_SHOWLINES: - cs.SetVisible(wParam, lParam, true); - SetScrollBars(); - Redraw(); - break; - - case SCI_HIDELINES: - cs.SetVisible(wParam, lParam, false); - SetScrollBars(); - Redraw(); - break; - - case SCI_GETLINEVISIBLE: - return cs.GetVisible(wParam); - - case SCI_SETFOLDEXPANDED: - if (cs.SetExpanded(wParam, lParam != 0)) { - RedrawSelMargin(); - } - break; - - case SCI_GETFOLDEXPANDED: - return cs.GetExpanded(wParam); - - case SCI_SETFOLDFLAGS: - foldFlags = wParam; - Redraw(); - break; - - case SCI_TOGGLEFOLD: - ToggleContraction(wParam); - break; - - case SCI_ENSUREVISIBLE: - EnsureLineVisible(wParam, false); - break; - - case SCI_ENSUREVISIBLEENFORCEPOLICY: - EnsureLineVisible(wParam, true); - break; - - case SCI_SEARCHANCHOR: - SearchAnchor(); - break; - - case SCI_SEARCHNEXT: - case SCI_SEARCHPREV: - return SearchText(iMessage, wParam, lParam); - -#ifdef INCLUDE_DEPRECATED_FEATURES - case SCI_SETCARETPOLICY: // Deprecated - caretXPolicy = caretYPolicy = wParam; - caretXSlop = caretYSlop = lParam; - break; -#endif - - case SCI_SETXCARETPOLICY: - caretXPolicy = wParam; - caretXSlop = lParam; - break; - - case SCI_SETYCARETPOLICY: - caretYPolicy = wParam; - caretYSlop = lParam; - break; - - case SCI_SETVISIBLEPOLICY: - visiblePolicy = wParam; - visibleSlop = lParam; - break; - - case SCI_LINESONSCREEN: - return LinesOnScreen(); - - case SCI_SETSELFORE: - vs.selforeset = wParam != 0; - vs.selforeground.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETSELBACK: - vs.selbackset = wParam != 0; - vs.selbackground.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETSELALPHA: - vs.selAlpha = wParam; - InvalidateStyleRedraw(); - break; - - case SCI_GETSELALPHA: - return vs.selAlpha; - - case SCI_SETWHITESPACEFORE: - vs.whitespaceForegroundSet = wParam != 0; - vs.whitespaceForeground.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETWHITESPACEBACK: - vs.whitespaceBackgroundSet = wParam != 0; - vs.whitespaceBackground.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETCARETFORE: - vs.caretcolour.desired = ColourDesired(wParam); - InvalidateStyleRedraw(); - break; - - case SCI_GETCARETFORE: - return vs.caretcolour.desired.AsLong(); - - case SCI_SETCARETWIDTH: - if (wParam <= 0) - vs.caretWidth = 0; - else if (wParam >= 3) - vs.caretWidth = 3; - else - vs.caretWidth = wParam; - InvalidateStyleRedraw(); - break; - - case SCI_GETCARETWIDTH: - return vs.caretWidth; - - case SCI_ASSIGNCMDKEY: - kmap.AssignCmdKey(Platform::LowShortFromLong(wParam), - Platform::HighShortFromLong(wParam), lParam); - break; - - case SCI_CLEARCMDKEY: - kmap.AssignCmdKey(Platform::LowShortFromLong(wParam), - Platform::HighShortFromLong(wParam), SCI_NULL); - break; - - case SCI_CLEARALLCMDKEYS: - kmap.Clear(); - break; - - case SCI_INDICSETSTYLE: - if (wParam <= INDIC_MAX) { - vs.indicators[wParam].style = lParam; - InvalidateStyleRedraw(); - } - break; - - case SCI_INDICGETSTYLE: - return (wParam <= INDIC_MAX) ? vs.indicators[wParam].style : 0; - - case SCI_INDICSETFORE: - if (wParam <= INDIC_MAX) { - vs.indicators[wParam].fore.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - } - break; - - case SCI_INDICGETFORE: - return (wParam <= INDIC_MAX) ? vs.indicators[wParam].fore.desired.AsLong() : 0; - - case SCI_LINEDOWN: - case SCI_LINEDOWNEXTEND: - case SCI_PARADOWN: - case SCI_PARADOWNEXTEND: - case SCI_LINEUP: - case SCI_LINEUPEXTEND: - case SCI_PARAUP: - case SCI_PARAUPEXTEND: - case SCI_CHARLEFT: - case SCI_CHARLEFTEXTEND: - case SCI_CHARRIGHT: - case SCI_CHARRIGHTEXTEND: - case SCI_WORDLEFT: - case SCI_WORDLEFTEXTEND: - case SCI_WORDRIGHT: - case SCI_WORDRIGHTEXTEND: - case SCI_WORDLEFTEND: - case SCI_WORDLEFTENDEXTEND: - case SCI_WORDRIGHTEND: - case SCI_WORDRIGHTENDEXTEND: - case SCI_HOME: - case SCI_HOMEEXTEND: - case SCI_LINEEND: - case SCI_LINEENDEXTEND: - case SCI_HOMEWRAP: - case SCI_HOMEWRAPEXTEND: - case SCI_LINEENDWRAP: - case SCI_LINEENDWRAPEXTEND: - case SCI_DOCUMENTSTART: - case SCI_DOCUMENTSTARTEXTEND: - case SCI_DOCUMENTEND: - case SCI_DOCUMENTENDEXTEND: - - case SCI_STUTTEREDPAGEUP: - case SCI_STUTTEREDPAGEUPEXTEND: - case SCI_STUTTEREDPAGEDOWN: - case SCI_STUTTEREDPAGEDOWNEXTEND: - - case SCI_PAGEUP: - case SCI_PAGEUPEXTEND: - case SCI_PAGEDOWN: - case SCI_PAGEDOWNEXTEND: - case SCI_EDITTOGGLEOVERTYPE: - case SCI_CANCEL: - case SCI_DELETEBACK: - case SCI_TAB: - case SCI_BACKTAB: - case SCI_NEWLINE: - case SCI_FORMFEED: - case SCI_VCHOME: - case SCI_VCHOMEEXTEND: - case SCI_VCHOMEWRAP: - case SCI_VCHOMEWRAPEXTEND: - case SCI_ZOOMIN: - case SCI_ZOOMOUT: - case SCI_DELWORDLEFT: - case SCI_DELWORDRIGHT: - case SCI_DELLINELEFT: - case SCI_DELLINERIGHT: - case SCI_LINECOPY: - case SCI_LINECUT: - case SCI_LINEDELETE: - case SCI_LINETRANSPOSE: - case SCI_LINEDUPLICATE: - case SCI_LOWERCASE: - case SCI_UPPERCASE: - case SCI_LINESCROLLDOWN: - case SCI_LINESCROLLUP: - case SCI_WORDPARTLEFT: - case SCI_WORDPARTLEFTEXTEND: - case SCI_WORDPARTRIGHT: - case SCI_WORDPARTRIGHTEXTEND: - case SCI_DELETEBACKNOTLINE: - case SCI_HOMEDISPLAY: - case SCI_HOMEDISPLAYEXTEND: - case SCI_LINEENDDISPLAY: - case SCI_LINEENDDISPLAYEXTEND: - case SCI_LINEDOWNRECTEXTEND: - case SCI_LINEUPRECTEXTEND: - case SCI_CHARLEFTRECTEXTEND: - case SCI_CHARRIGHTRECTEXTEND: - case SCI_HOMERECTEXTEND: - case SCI_VCHOMERECTEXTEND: - case SCI_LINEENDRECTEXTEND: - case SCI_PAGEUPRECTEXTEND: - case SCI_PAGEDOWNRECTEXTEND: - case SCI_SELECTIONDUPLICATE: - return KeyCommand(iMessage); - - case SCI_BRACEHIGHLIGHT: - SetBraceHighlight(static_cast(wParam), lParam, STYLE_BRACELIGHT); - break; - - case SCI_BRACEBADLIGHT: - SetBraceHighlight(static_cast(wParam), -1, STYLE_BRACEBAD); - break; - - case SCI_BRACEMATCH: - // wParam is position of char to find brace for, - // lParam is maximum amount of text to restyle to find it - return pdoc->BraceMatch(wParam, lParam); - - case SCI_GETVIEWEOL: - return vs.viewEOL; - - case SCI_SETVIEWEOL: - vs.viewEOL = wParam != 0; - InvalidateStyleRedraw(); - break; - - case SCI_SETZOOM: - vs.zoomLevel = wParam; - InvalidateStyleRedraw(); - NotifyZoom(); - break; - - case SCI_GETZOOM: - return vs.zoomLevel; - - case SCI_GETEDGECOLUMN: - return theEdge; - - case SCI_SETEDGECOLUMN: - theEdge = wParam; - InvalidateStyleRedraw(); - break; - - case SCI_GETEDGEMODE: - return vs.edgeState; - - case SCI_SETEDGEMODE: - vs.edgeState = wParam; - InvalidateStyleRedraw(); - break; - - case SCI_GETEDGECOLOUR: - return vs.edgecolour.desired.AsLong(); - - case SCI_SETEDGECOLOUR: - vs.edgecolour.desired = ColourDesired(wParam); - InvalidateStyleRedraw(); - break; - - case SCI_GETDOCPOINTER: - return reinterpret_cast(pdoc); - - case SCI_SETDOCPOINTER: - CancelModes(); - SetDocPointer(reinterpret_cast(lParam)); - return 0; - - case SCI_CREATEDOCUMENT: { - Document *doc = new Document(); - if (doc) { - doc->AddRef(); - } - return reinterpret_cast(doc); - } - - case SCI_ADDREFDOCUMENT: - (reinterpret_cast(lParam))->AddRef(); - break; - - case SCI_RELEASEDOCUMENT: - (reinterpret_cast(lParam))->Release(); - break; - - case SCI_SETMODEVENTMASK: - modEventMask = wParam; - return 0; - - case SCI_GETMODEVENTMASK: - return modEventMask; - - case SCI_CONVERTEOLS: - pdoc->ConvertLineEnds(wParam); - SetSelection(currentPos, anchor); // Ensure selection inside document - return 0; - - case SCI_SETLENGTHFORENCODE: - lengthForEncode = wParam; - return 0; - - case SCI_SELECTIONISRECTANGLE: - return selType == selRectangle ? 1 : 0; - - case SCI_SETSELECTIONMODE: { - switch (wParam) { - case SC_SEL_STREAM: - moveExtendsSelection = !moveExtendsSelection || (selType != selStream); - selType = selStream; - break; - case SC_SEL_RECTANGLE: - moveExtendsSelection = !moveExtendsSelection || (selType != selRectangle); - selType = selRectangle; - break; - case SC_SEL_LINES: - moveExtendsSelection = !moveExtendsSelection || (selType != selLines); - selType = selLines; - break; - default: - moveExtendsSelection = !moveExtendsSelection || (selType != selStream); - selType = selStream; - } - InvalidateSelection(currentPos, anchor); - } - case SCI_GETSELECTIONMODE: - switch (selType) { - case selStream: - return SC_SEL_STREAM; - case selRectangle: - return SC_SEL_RECTANGLE; - case selLines: - return SC_SEL_LINES; - default: // ?! - return SC_SEL_STREAM; - } - case SCI_GETLINESELSTARTPOSITION: { - SelectionLineIterator lineIterator(this); - lineIterator.SetAt(wParam); - return lineIterator.startPos; - } - case SCI_GETLINESELENDPOSITION: { - SelectionLineIterator lineIterator(this); - lineIterator.SetAt(wParam); - return lineIterator.endPos; - } - - case SCI_SETOVERTYPE: - inOverstrike = wParam != 0; - break; - - case SCI_GETOVERTYPE: - return inOverstrike ? 1 : 0; - - case SCI_SETFOCUS: - SetFocusState(wParam != 0); - break; - - case SCI_GETFOCUS: - return hasFocus; - - case SCI_SETSTATUS: - errorStatus = wParam; - break; - - case SCI_GETSTATUS: - return errorStatus; - - case SCI_SETMOUSEDOWNCAPTURES: - mouseDownCaptures = wParam != 0; - break; - - case SCI_GETMOUSEDOWNCAPTURES: - return mouseDownCaptures; - - case SCI_SETCURSOR: - cursorMode = wParam; - DisplayCursor(Window::cursorText); - break; - - case SCI_GETCURSOR: - return cursorMode; - - case SCI_SETCONTROLCHARSYMBOL: - controlCharSymbol = wParam; - break; - - case SCI_GETCONTROLCHARSYMBOL: - return controlCharSymbol; - - case SCI_STARTRECORD: - recordingMacro = true; - return 0; - - case SCI_STOPRECORD: - recordingMacro = false; - return 0; - - case SCI_MOVECARETINSIDEVIEW: - MoveCaretInsideView(); - break; - - case SCI_SETFOLDMARGINCOLOUR: - vs.foldmarginColourSet = wParam != 0; - vs.foldmarginColour.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETFOLDMARGINHICOLOUR: - vs.foldmarginHighlightColourSet = wParam != 0; - vs.foldmarginHighlightColour.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETHOTSPOTACTIVEFORE: - vs.hotspotForegroundSet = wParam != 0; - vs.hotspotForeground.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETHOTSPOTACTIVEBACK: - vs.hotspotBackgroundSet = wParam != 0; - vs.hotspotBackground.desired = ColourDesired(lParam); - InvalidateStyleRedraw(); - break; - - case SCI_SETHOTSPOTACTIVEUNDERLINE: - vs.hotspotUnderline = wParam != 0; - InvalidateStyleRedraw(); - break; - - case SCI_SETHOTSPOTSINGLELINE: - vs.hotspotSingleLine = wParam != 0; - InvalidateStyleRedraw(); - break; - - case SCI_SETPASTECONVERTENDINGS: - convertPastes = wParam != 0; - break; - - case SCI_GETPASTECONVERTENDINGS: - return convertPastes ? 1 : 0; - - default: - return DefWndProc(iMessage, wParam, lParam); - } - //Platform::DebugPrintf("end wnd proc\n"); - return 0l; -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Editor.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Editor.h deleted file mode 100644 index fe7be268ae..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Editor.h +++ /dev/null @@ -1,582 +0,0 @@ -// Scintilla source code edit control -/** @file Editor.h - ** Defines the main editor class. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef EDITOR_H -#define EDITOR_H - -/** - */ -class Caret { -public: - bool active; - bool on; - int period; - - Caret(); -}; - -/** - */ -class Timer { -public: - bool ticking; - int ticksToWait; - enum {tickSize = 100}; - TickerID tickerID; - - Timer(); -}; - -/** - */ -class Idler { -public: - bool state; - IdlerID idlerID; - - Idler(); -}; - -/** - */ -class LineLayout { -private: - friend class LineLayoutCache; - int *lineStarts; - int lenLineStarts; - /// Drawing is only performed for @a maxLineLength characters on each line. - int lineNumber; - bool inCache; -public: - enum { wrapWidthInfinite = 0x7ffffff }; - int maxLineLength; - int numCharsInLine; - enum validLevel { llInvalid, llCheckTextAndStyle, llPositions, llLines } validity; - int xHighlightGuide; - bool highlightColumn; - int selStart; - int selEnd; - bool containsCaret; - int edgeColumn; - char *chars; - unsigned char *styles; - int styleBitsSet; - char *indicators; - int *positions; - char bracePreviousStyles[2]; - - // Hotspot support - int hsStart; - int hsEnd; - - // Wrapped line support - int widthLine; - int lines; - - LineLayout(int maxLineLength_); - virtual ~LineLayout(); - void Resize(int maxLineLength_); - void Free(); - void Invalidate(validLevel validity_); - int LineStart(int line) { - if (line <= 0) { - return 0; - } else if ((line >= lines) || !lineStarts) { - return numCharsInLine; - } else { - return lineStarts[line]; - } - } - void SetLineStart(int line, int start); - void SetBracesHighlight(Range rangeLine, Position braces[], - char bracesMatchStyle, int xHighlight); - void RestoreBracesHighlight(Range rangeLine, Position braces[]); -}; - -/** - */ -class LineLayoutCache { - int level; - int length; - int size; - LineLayout **cache; - bool allInvalidated; - int styleClock; - int useCount; - void Allocate(int length_); - void AllocateForLevel(int linesOnScreen, int linesInDoc); -public: - LineLayoutCache(); - virtual ~LineLayoutCache(); - void Deallocate(); - enum { - llcNone=SC_CACHE_NONE, - llcCaret=SC_CACHE_CARET, - llcPage=SC_CACHE_PAGE, - llcDocument=SC_CACHE_DOCUMENT - }; - void Invalidate(LineLayout::validLevel validity_); - void SetLevel(int level_); - int GetLevel() { return level; } - LineLayout *Retrieve(int lineNumber, int lineCaret, int maxChars, int styleClock_, - int linesOnScreen, int linesInDoc); - void Dispose(LineLayout *ll); -}; - -/** - * Hold a piece of text selected for copying or dragging. - * The text is expected to hold a terminating '\0' and this is counted in len. - */ -class SelectionText { -public: - char *s; - int len; - bool rectangular; - int codePage; - int characterSet; - SelectionText() : s(0), len(0), rectangular(false), codePage(0), characterSet(0) {} - ~SelectionText() { - Free(); - } - void Free() { - Set(0, 0, 0, 0, false); - } - void Set(char *s_, int len_, int codePage_, int characterSet_, bool rectangular_) { - delete []s; - s = s_; - if (s) - len = len_; - else - len = 0; - codePage = codePage_; - characterSet = characterSet_; - rectangular = rectangular_; - } - void Copy(const char *s_, int len_, int codePage_, int characterSet_, bool rectangular_) { - delete []s; - s = new char[len_]; - if (s) { - len = len_; - for (int i = 0; i < len_; i++) { - s[i] = s_[i]; - } - } else { - len = 0; - } - codePage = codePage_; - characterSet = characterSet_; - rectangular = rectangular_; - } - void Copy(const SelectionText &other) { - Copy(other.s, other.len, other.codePage, other.characterSet, other.rectangular); - } -}; - -/** - */ -class Editor : public DocWatcher { - // Private so Editor objects can not be copied - Editor(const Editor &) : DocWatcher() {} - Editor &operator=(const Editor &) { return *this; } - -protected: // ScintillaBase subclass needs access to much of Editor - - /** On GTK+, Scintilla is a container widget holding two scroll bars - * whereas on Windows there is just one window with both scroll bars turned on. */ - Window wMain; ///< The Scintilla parent window - - /** Style resources may be expensive to allocate so are cached between uses. - * When a style attribute is changed, this cache is flushed. */ - bool stylesValid; - ViewStyle vs; - Palette palette; - - int printMagnification; - int printColourMode; - int printWrapState; - int cursorMode; - int controlCharSymbol; - - bool hasFocus; - bool hideSelection; - bool inOverstrike; - int errorStatus; - bool mouseDownCaptures; - - /** In bufferedDraw mode, graphics operations are drawn to a pixmap and then copied to - * the screen. This avoids flashing but is about 30% slower. */ - bool bufferedDraw; - /** In twoPhaseDraw mode, drawing is performed in two phases, first the background - * and then the foreground. This avoids chopping off characters that overlap the next run. */ - bool twoPhaseDraw; - - int xOffset; ///< Horizontal scrolled amount in pixels - int xCaretMargin; ///< Ensure this many pixels visible on both sides of caret - bool horizontalScrollBarVisible; - int scrollWidth; - bool verticalScrollBarVisible; - bool endAtLastLine; - bool caretSticky; - - Surface *pixmapLine; - Surface *pixmapSelMargin; - Surface *pixmapSelPattern; - Surface *pixmapIndentGuide; - Surface *pixmapIndentGuideHighlight; - - LineLayoutCache llc; - - KeyMap kmap; - - Caret caret; - Timer timer; - Timer autoScrollTimer; - enum { autoScrollDelay = 200 }; - - Idler idler; - - Point lastClick; - unsigned int lastClickTime; - int dwellDelay; - int ticksToDwell; - bool dwelling; - enum { selChar, selWord, selLine } selectionType; - Point ptMouseLast; - bool inDragDrop; - bool dropWentOutside; - int posDrag; - int posDrop; - int lastXChosen; - int lineAnchor; - int originalAnchorPos; - int currentPos; - int anchor; - int targetStart; - int targetEnd; - int searchFlags; - int topLine; - int posTopLine; - int lengthForEncode; - - bool needUpdateUI; - Position braces[2]; - int bracesMatchStyle; - int highlightGuideColumn; - - int theEdge; - - enum { notPainting, painting, paintAbandoned } paintState; - PRectangle rcPaint; - bool paintingAllText; - - int modEventMask; - - SelectionText drag; - enum selTypes { noSel, selStream, selRectangle, selLines }; - selTypes selType; - bool moveExtendsSelection; - int xStartSelect; ///< x position of start of rectangular selection - int xEndSelect; ///< x position of end of rectangular selection - bool primarySelection; - - int caretXPolicy; - int caretXSlop; ///< Ensure this many pixels visible on both sides of caret - - int caretYPolicy; - int caretYSlop; ///< Ensure this many lines visible on both sides of caret - - int visiblePolicy; - int visibleSlop; - - int searchAnchor; - - bool recordingMacro; - - int foldFlags; - ContractionState cs; - - // Hotspot support - int hsStart; - int hsEnd; - - // Wrapping support - enum { eWrapNone, eWrapWord, eWrapChar } wrapState; - enum { wrapLineLarge = 0x7ffffff }; - int wrapWidth; - int wrapStart; - int wrapEnd; - int wrapVisualFlags; - int wrapVisualFlagsLocation; - int wrapVisualStartIndent; - int actualWrapVisualStartIndent; - - bool convertPastes; - - Document *pdoc; - - Editor(); - virtual ~Editor(); - virtual void Initialise() = 0; - virtual void Finalise(); - - void InvalidateStyleData(); - void InvalidateStyleRedraw(); - virtual void RefreshColourPalette(Palette &pal, bool want); - void RefreshStyleData(); - void DropGraphics(); - - virtual PRectangle GetClientRectangle(); - PRectangle GetTextRectangle(); - - int LinesOnScreen(); - int LinesToScroll(); - int MaxScrollPos(); - Point LocationFromPosition(int pos); - int XFromPosition(int pos); - int PositionFromLocation(Point pt); - int PositionFromLocationClose(Point pt); - int PositionFromLineX(int line, int x); - int LineFromLocation(Point pt); - void SetTopLine(int topLineNew); - - bool AbandonPaint(); - void RedrawRect(PRectangle rc); - void Redraw(); - void RedrawSelMargin(int line=-1); - PRectangle RectangleFromRange(int start, int end); - void InvalidateRange(int start, int end); - - int CurrentPosition(); - bool SelectionEmpty(); - int SelectionStart(); - int SelectionEnd(); - void SetRectangularRange(); - void InvalidateSelection(int currentPos_, int anchor_); - void SetSelection(int currentPos_, int anchor_); - void SetSelection(int currentPos_); - void SetEmptySelection(int currentPos_); - bool RangeContainsProtected(int start, int end) const; - bool SelectionContainsProtected(); - int MovePositionOutsideChar(int pos, int moveDir, bool checkLineEnd=true); - int MovePositionTo(int newPos, selTypes sel=noSel, bool ensureVisible=true); - int MovePositionSoVisible(int pos, int moveDir); - void SetLastXChosen(); - - void ScrollTo(int line, bool moveThumb=true); - virtual void ScrollText(int linesToMove); - void HorizontalScrollTo(int xPos); - void MoveCaretInsideView(bool ensureVisible=true); - int DisplayFromPosition(int pos); - void EnsureCaretVisible(bool useMargin=true, bool vert=true, bool horiz=true); - void ShowCaretAtCurrentPosition(); - void DropCaret(); - void InvalidateCaret(); - virtual void UpdateSystemCaret(); - - void NeedWrapping(int docLineStart = 0, int docLineEnd = wrapLineLarge); - bool WrapLines(bool fullWrap, int priorityWrapLineStart); - void LinesJoin(); - void LinesSplit(int pixelWidth); - - int SubstituteMarkerIfEmpty(int markerCheck, int markerDefault); - void PaintSelMargin(Surface *surface, PRectangle &rc); - LineLayout *RetrieveLineLayout(int lineNumber); - void LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayout *ll, - int width=LineLayout::wrapWidthInfinite); - ColourAllocated SelectionBackground(ViewStyle &vsDraw); - ColourAllocated TextBackground(ViewStyle &vsDraw, bool overrideBackground, ColourAllocated background, bool inSelection, bool inHotspot, int styleMain, int i, LineLayout *ll); - void DrawIndentGuide(Surface *surface, int lineVisible, int lineHeight, int start, PRectangle rcSegment, bool highlight); - void DrawWrapMarker(Surface *surface, PRectangle rcPlace, bool isEndMarker, ColourAllocated wrapColour); - void DrawEOL(Surface *surface, ViewStyle &vsDraw, PRectangle rcLine, LineLayout *ll, - int line, int lineEnd, int xStart, int subLine, int subLineStart, - bool overrideBackground, ColourAllocated background, - bool drawWrapMark, ColourAllocated wrapColour); - void DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int lineVisible, int xStart, - PRectangle rcLine, LineLayout *ll, int subLine=0); - void RefreshPixMaps(Surface *surfaceWindow); - void Paint(Surface *surfaceWindow, PRectangle rcArea); - long FormatRange(bool draw, RangeToFormat *pfr); - int TextWidth(int style, const char *text); - - virtual void SetVerticalScrollPos() = 0; - virtual void SetHorizontalScrollPos() = 0; - virtual bool ModifyScrollBars(int nMax, int nPage) = 0; - virtual void ReconfigureScrollBars(); - void SetScrollBars(); - void ChangeSize(); - - void AddChar(char ch); - virtual void AddCharUTF(char *s, unsigned int len, bool treatAsDBCS=false); - void ClearSelection(); - void ClearAll(); - void ClearDocumentStyle(); - void Cut(); - void PasteRectangular(int pos, const char *ptr, int len); - virtual void Copy() = 0; - virtual bool CanPaste(); - virtual void Paste() = 0; - void Clear(); - void SelectAll(); - void Undo(); - void Redo(); - void DelChar(); - void DelCharBack(bool allowLineStartDeletion); - virtual void ClaimSelection() = 0; - - virtual void NotifyChange() = 0; - virtual void NotifyFocus(bool focus); - virtual int GetCtrlID() { return ctrlID; } - virtual void NotifyParent(SCNotification scn) = 0; - virtual void NotifyStyleToNeeded(int endStyleNeeded); - void NotifyChar(int ch); - void NotifyMove(int position); - void NotifySavePoint(bool isSavePoint); - void NotifyModifyAttempt(); - virtual void NotifyDoubleClick(Point pt, bool shift); - void NotifyHotSpotClicked(int position, bool shift, bool ctrl, bool alt); - void NotifyHotSpotDoubleClicked(int position, bool shift, bool ctrl, bool alt); - void NotifyUpdateUI(); - void NotifyPainted(); - bool NotifyMarginClick(Point pt, bool shift, bool ctrl, bool alt); - void NotifyNeedShown(int pos, int len); - void NotifyDwelling(Point pt, bool state); - void NotifyZoom(); - - void NotifyModifyAttempt(Document *document, void *userData); - void NotifySavePoint(Document *document, void *userData, bool atSavePoint); - void CheckModificationForWrap(DocModification mh); - void NotifyModified(Document *document, DocModification mh, void *userData); - void NotifyDeleted(Document *document, void *userData); - void NotifyStyleNeeded(Document *doc, void *userData, int endPos); - void NotifyMacroRecord(unsigned int iMessage, uptr_t wParam, sptr_t lParam); - - void PageMove(int direction, selTypes sel=noSel, bool stuttered = false); - void ChangeCaseOfSelection(bool makeUpperCase); - void LineTranspose(); - void Duplicate(bool forLine); - virtual void CancelModes(); - void NewLine(); - void CursorUpOrDown(int direction, selTypes sel=noSel); - void ParaUpOrDown(int direction, selTypes sel=noSel); - int StartEndDisplayLine(int pos, bool start); - virtual int KeyCommand(unsigned int iMessage); - virtual int KeyDefault(int /* key */, int /*modifiers*/); - int KeyDown(int key, bool shift, bool ctrl, bool alt, bool *consumed=0); - - int GetWhitespaceVisible(); - void SetWhitespaceVisible(int view); - - void Indent(bool forwards); - - long FindText(uptr_t wParam, sptr_t lParam); - void SearchAnchor(); - long SearchText(unsigned int iMessage, uptr_t wParam, sptr_t lParam); - long SearchInTarget(const char *text, int length); - void GoToLine(int lineNo); - - virtual void CopyToClipboard(const SelectionText &selectedText) = 0; - char *CopyRange(int start, int end); - void CopySelectionFromRange(SelectionText *ss, int start, int end); - void CopySelectionRange(SelectionText *ss); - void CopyRangeToClipboard(int start, int end); - void CopyText(int length, const char *text); - void SetDragPosition(int newPos); - virtual void DisplayCursor(Window::Cursor c); - virtual void StartDrag(); - void DropAt(int position, const char *value, bool moving, bool rectangular); - /** PositionInSelection returns 0 if position in selection, -1 if position before selection, and 1 if after. - * Before means either before any line of selection or before selection on its line, with a similar meaning to after. */ - int PositionInSelection(int pos); - bool PointInSelection(Point pt); - bool PointInSelMargin(Point pt); - void LineSelection(int lineCurrent_, int lineAnchor_); - void DwellEnd(bool mouseMoved); - virtual void ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt); - void ButtonMove(Point pt); - void ButtonUp(Point pt, unsigned int curTime, bool ctrl); - - void Tick(); - bool Idle(); - virtual void SetTicking(bool on) = 0; - virtual bool SetIdle(bool) { return false; } - virtual void SetMouseCapture(bool on) = 0; - virtual bool HaveMouseCapture() = 0; - void SetFocusState(bool focusState); - - virtual bool PaintContains(PRectangle rc); - bool PaintContainsMargin(); - void CheckForChangeOutsidePaint(Range r); - void SetBraceHighlight(Position pos0, Position pos1, int matchStyle); - - void SetDocPointer(Document *document); - - void Expand(int &line, bool doExpand); - void ToggleContraction(int line); - void EnsureLineVisible(int lineDoc, bool enforcePolicy); - int ReplaceTarget(bool replacePatterns, const char *text, int length=-1); - - bool PositionIsHotspot(int position); - bool PointIsHotspot(Point pt); - void SetHotSpotRange(Point *pt); - void GetHotSpotRange(int& hsStart, int& hsEnd); - - int CodePage() const; - virtual bool ValidCodePage(int /* codePage */) const { return true; } - int WrapCount(int line); - - virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) = 0; - -public: - // Public so the COM thunks can access it. - bool IsUnicodeMode() const; - // Public so scintilla_send_message can use it. - virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam); - // Public so scintilla_set_id can use it. - int ctrlID; - friend class AutoSurface; - friend class SelectionLineIterator; -}; - -/** - * A smart pointer class to ensure Surfaces are set up and deleted correctly. - */ -class AutoSurface { -private: - Surface *surf; -public: - AutoSurface(Editor *ed) : surf(0) { - if (ed->wMain.GetID()) { - surf = Surface::Allocate(); - if (surf) { - surf->Init(ed->wMain.GetID()); - surf->SetUnicodeMode(SC_CP_UTF8 == ed->CodePage()); - surf->SetDBCSMode(ed->CodePage()); - } - } - } - AutoSurface(SurfaceID sid, Editor *ed) : surf(0) { - if (ed->wMain.GetID()) { - surf = Surface::Allocate(); - if (surf) { - surf->Init(sid, ed->wMain.GetID()); - surf->SetUnicodeMode(SC_CP_UTF8 == ed->CodePage()); - surf->SetDBCSMode(ed->CodePage()); - } - } - } - ~AutoSurface() { - delete surf; - } - Surface *operator->() const { - return surf; - } - operator Surface *() const { - return surf; - } -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ExternalLexer.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ExternalLexer.cxx deleted file mode 100644 index acf45bc2d5..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ExternalLexer.cxx +++ /dev/null @@ -1,259 +0,0 @@ -// Scintilla source code edit control -/** @file ExternalLexer.cxx - ** Support external lexers in DLLs. - **/ -// Copyright 2001 Simon Steele , portions copyright Neil Hodgson. -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include - -#include "Platform.h" - -#include "Scintilla.h" - -#include "SciLexer.h" -#include "PropSet.h" -#include "Accessor.h" -#include "DocumentAccessor.h" -#include "KeyWords.h" -#include "ExternalLexer.h" - -LexerManager *LexerManager::theInstance = NULL; - -//------------------------------------------ -// -// ExternalLexerModule -// -//------------------------------------------ - -char **WordListsToStrings(WordList *val[]) { - int dim = 0; - while (val[dim]) - dim++; - char **wls = new char * [dim + 1]; - for (int i = 0;i < dim;i++) { - SString words; - words = ""; - for (int n = 0; n < val[i]->len; n++) { - words += val[i]->words[n]; - if (n != val[i]->len - 1) - words += " "; - } - wls[i] = new char[words.length() + 1]; - strcpy(wls[i], words.c_str()); - } - wls[dim] = 0; - return wls; -} - -void DeleteWLStrings(char *strs[]) { - int dim = 0; - while (strs[dim]) { - delete strs[dim]; - dim++; - } - delete [] strs; -} - -void ExternalLexerModule::Lex(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const { - if (!fneLexer) - return ; - - char **kwds = WordListsToStrings(keywordlists); - char *ps = styler.GetProperties(); - - // The accessor passed in is always a DocumentAccessor so this cast and the subsequent - // access will work. Can not use the stricter dynamic_cast as that requires RTTI. - DocumentAccessor &da = static_cast(styler); - WindowID wID = da.GetWindow(); - - fneLexer(externalLanguage, startPos, lengthDoc, initStyle, kwds, wID, ps); - - delete ps; - DeleteWLStrings(kwds); -} - -void ExternalLexerModule::Fold(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const { - if (!fneFolder) - return ; - - char **kwds = WordListsToStrings(keywordlists); - char *ps = styler.GetProperties(); - - // The accessor passed in is always a DocumentAccessor so this cast and the subsequent - // access will work. Can not use the stricter dynamic_cast as that requires RTTI. - DocumentAccessor &da = static_cast(styler); - WindowID wID = da.GetWindow(); - - fneFolder(externalLanguage, startPos, lengthDoc, initStyle, kwds, wID, ps); - - delete ps; - DeleteWLStrings(kwds); -} - -void ExternalLexerModule::SetExternal(ExtLexerFunction fLexer, ExtFoldFunction fFolder, int index) { - fneLexer = fLexer; - fneFolder = fFolder; - externalLanguage = index; -} - -//------------------------------------------ -// -// LexerLibrary -// -//------------------------------------------ - -LexerLibrary::LexerLibrary(const char* ModuleName) { - // Initialise some members... - first = NULL; - last = NULL; - - // Load the DLL - lib = DynamicLibrary::Load(ModuleName); - if (lib->IsValid()) { - m_sModuleName = ModuleName; - //Cannot use reinterpret_cast because: ANSI C++ forbids casting between pointers to functions and objects - GetLexerCountFn GetLexerCount = (GetLexerCountFn)(sptr_t)lib->FindFunction("GetLexerCount"); - - if (GetLexerCount) { - ExternalLexerModule *lex; - LexerMinder *lm; - - // Find functions in the DLL - GetLexerNameFn GetLexerName = (GetLexerNameFn)(sptr_t)lib->FindFunction("GetLexerName"); - ExtLexerFunction Lexer = (ExtLexerFunction)(sptr_t)lib->FindFunction("Lex"); - ExtFoldFunction Folder = (ExtFoldFunction)(sptr_t)lib->FindFunction("Fold"); - - // Assign a buffer for the lexer name. - char lexname[100]; - strcpy(lexname, ""); - - int nl = GetLexerCount(); - - for (int i = 0; i < nl; i++) { - GetLexerName(i, lexname, 100); - lex = new ExternalLexerModule(SCLEX_AUTOMATIC, NULL, lexname, NULL); - - // Create a LexerMinder so we don't leak the ExternalLexerModule... - lm = new LexerMinder; - lm->self = lex; - lm->next = NULL; - if (first != NULL) { - last->next = lm; - last = lm; - } else { - first = lm; - last = lm; - } - - // The external lexer needs to know how to call into its DLL to - // do its lexing and folding, we tell it here. Folder may be null. - lex->SetExternal(Lexer, Folder, i); - } - } - } - next = NULL; -} - -LexerLibrary::~LexerLibrary() { - Release(); - delete lib; -} - -void LexerLibrary::Release() { - //TODO maintain a list of lexers created, and delete them! - LexerMinder *lm; - LexerMinder *next; - lm = first; - while (NULL != lm) { - next = lm->next; - delete lm->self; - delete lm; - lm = next; - } - - first = NULL; - last = NULL; -} - -//------------------------------------------ -// -// LexerManager -// -//------------------------------------------ - -/// Return the single LexerManager instance... -LexerManager *LexerManager::GetInstance() { - if(!theInstance) - theInstance = new LexerManager; - return theInstance; -} - -/// Delete any LexerManager instance... -void LexerManager::DeleteInstance() -{ - if(theInstance) { - delete theInstance; - theInstance = NULL; - } -} - -/// protected constructor - this is a singleton... -LexerManager::LexerManager() { - first = NULL; - last = NULL; -} - -LexerManager::~LexerManager() { - Clear(); -} - -void LexerManager::Load(const char* path) -{ - LoadLexerLibrary(path); -} - -void LexerManager::LoadLexerLibrary(const char* module) -{ - LexerLibrary *lib = new LexerLibrary(module); - if (NULL != first) { - last->next = lib; - last = lib; - } else { - first = lib; - last = lib; - } -} - -void LexerManager::Clear() -{ - if (NULL != first) { - LexerLibrary *cur = first; - LexerLibrary *next; - while (cur) { - next = cur->next; - delete cur; - cur = next; - } - first = NULL; - last = NULL; - } -} - -//------------------------------------------ -// -// LexerManager -// -//------------------------------------------ - -LMMinder::~LMMinder() -{ - LexerManager::DeleteInstance(); -} - -LMMinder minder; diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ExternalLexer.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ExternalLexer.h deleted file mode 100644 index 6308fc28be..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/ExternalLexer.h +++ /dev/null @@ -1,95 +0,0 @@ -// Scintilla source code edit control -/** @file ExternalLexer.h - ** Support external lexers in DLLs. - **/ -// Copyright 2001 Simon Steele , portions copyright Neil Hodgson. -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef EXTERNALLEXER_H -#define EXTERNALLEXER_H - -#if PLAT_WIN -#define EXT_LEXER_DECL __stdcall -#else -#define EXT_LEXER_DECL -#endif - -// External Lexer function definitions... -typedef void (EXT_LEXER_DECL *ExtLexerFunction)(unsigned int lexer, unsigned int startPos, int length, int initStyle, - char *words[], WindowID window, char *props); -typedef void (EXT_LEXER_DECL *ExtFoldFunction)(unsigned int lexer, unsigned int startPos, int length, int initStyle, - char *words[], WindowID window, char *props); -typedef void* (EXT_LEXER_DECL *GetLexerFunction)(unsigned int Index); -typedef int (EXT_LEXER_DECL *GetLexerCountFn)(); -typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength); - -//class DynamicLibrary; - -/// Sub-class of LexerModule to use an external lexer. -class ExternalLexerModule : protected LexerModule { -protected: - ExtLexerFunction fneLexer; - ExtFoldFunction fneFolder; - int externalLanguage; - char name[100]; -public: - ExternalLexerModule(int language_, LexerFunction fnLexer_, - const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){ - strncpy(name, languageName_, sizeof(name)); - languageName = name; - }; - virtual void Lex(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const; - virtual void Fold(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const; - virtual void SetExternal(ExtLexerFunction fLexer, ExtFoldFunction fFolder, int index); -}; - -/// LexerMinder points to an ExternalLexerModule - so we don't leak them. -class LexerMinder { -public: - ExternalLexerModule *self; - LexerMinder *next; -}; - -/// LexerLibrary exists for every External Lexer DLL, contains LexerMinders. -class LexerLibrary { - DynamicLibrary *lib; - LexerMinder *first; - LexerMinder *last; - -public: - LexerLibrary(const char* ModuleName); - ~LexerLibrary(); - void Release(); - - LexerLibrary *next; - SString m_sModuleName; -}; - -/// LexerManager manages external lexers, contains LexerLibrarys. -class LexerManager { -public: - ~LexerManager(); - - static LexerManager *GetInstance(); - static void DeleteInstance(); - - void Load(const char* path); - void Clear(); - -private: - LexerManager(); - static LexerManager *theInstance; - - void LoadLexerLibrary(const char* module); - LexerLibrary *first; - LexerLibrary *last; -}; - -class LMMinder { -public: - ~LMMinder(); -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Indicator.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Indicator.cxx deleted file mode 100644 index 7624a4a525..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Indicator.cxx +++ /dev/null @@ -1,77 +0,0 @@ -// Scintilla source code edit control -/** @file Indicator.cxx - ** Defines the style of indicators which are text decorations such as underlining. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include "Platform.h" - -#include "Scintilla.h" -#include "Indicator.h" - -void Indicator::Draw(Surface *surface, const PRectangle &rc, const PRectangle &rcLine) { - surface->PenColour(fore.allocated); - int ymid = (rc.bottom + rc.top) / 2; - if (style == INDIC_SQUIGGLE) { - surface->MoveTo(rc.left, rc.top); - int x = rc.left + 2; - int y = 2; - while (x < rc.right) { - surface->LineTo(x, rc.top + y); - x += 2; - y = 2 - y; - } - surface->LineTo(rc.right, rc.top + y); // Finish the line - } else if (style == INDIC_TT) { - surface->MoveTo(rc.left, ymid); - int x = rc.left + 5; - while (x < rc.right) { - surface->LineTo(x, ymid); - surface->MoveTo(x-3, ymid); - surface->LineTo(x-3, ymid+2); - x++; - surface->MoveTo(x, ymid); - x += 5; - } - surface->LineTo(rc.right, ymid); // Finish the line - if (x - 3 <= rc.right) { - surface->MoveTo(x-3, ymid); - surface->LineTo(x-3, ymid+2); - } - } else if (style == INDIC_DIAGONAL) { - int x = rc.left; - while (x < rc.right) { - surface->MoveTo(x, rc.top+2); - int endX = x+3; - int endY = rc.top - 1; - if (endX > rc.right) { - endY += endX - rc.right; - endX = rc.right; - } - surface->LineTo(endX, endY); - x += 4; - } - } else if (style == INDIC_STRIKE) { - surface->MoveTo(rc.left, rc.top - 4); - surface->LineTo(rc.right, rc.top - 4); - } else if (style == INDIC_HIDDEN) { - // Draw nothing - } else if (style == INDIC_BOX) { - surface->MoveTo(rc.left, ymid+1); - surface->LineTo(rc.right, ymid+1); - surface->LineTo(rc.right, rcLine.top+1); - surface->LineTo(rc.left, rcLine.top+1); - surface->LineTo(rc.left, ymid+1); - } else if (style == INDIC_ROUNDBOX) { - PRectangle rcBox = rcLine; - rcBox.top = rcLine.top + 1; - rcBox.left = rc.left; - rcBox.right = rc.right; - surface->AlphaRectangle(rcBox, 1, fore.allocated, 30, fore.allocated, 50, 0); - } else { // Either INDIC_PLAIN or unknown - surface->MoveTo(rc.left, ymid); - surface->LineTo(rc.right, ymid); - } -} - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Indicator.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Indicator.h deleted file mode 100644 index 716db1051f..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/Indicator.h +++ /dev/null @@ -1,22 +0,0 @@ -// Scintilla source code edit control -/** @file Indicator.h - ** Defines the style of indicators which are text decorations such as underlining. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef INDICATOR_H -#define INDICATOR_H - -/** - */ -class Indicator { -public: - int style; - ColourPair fore; - Indicator() : style(INDIC_PLAIN), fore(ColourDesired(0,0,0)) { - } - void Draw(Surface *surface, const PRectangle &rc, const PRectangle &rcLine); -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyMap.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyMap.cxx deleted file mode 100644 index bfa6e2d789..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyMap.cxx +++ /dev/null @@ -1,148 +0,0 @@ -// Scintilla source code edit control -/** @file KeyMap.cxx - ** Defines a mapping between keystrokes and commands. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include "Platform.h" - -#include "Scintilla.h" - -#include "KeyMap.h" - -KeyMap::KeyMap() : kmap(0), len(0), alloc(0) { - for (int i = 0; MapDefault[i].key; i++) { - AssignCmdKey(MapDefault[i].key, - MapDefault[i].modifiers, - MapDefault[i].msg); - } -} - -KeyMap::~KeyMap() { - Clear(); -} - -void KeyMap::Clear() { - delete []kmap; - kmap = 0; - len = 0; - alloc = 0; -} - -void KeyMap::AssignCmdKey(int key, int modifiers, unsigned int msg) { - if ((len+1) >= alloc) { - KeyToCommand *ktcNew = new KeyToCommand[alloc + 5]; - if (!ktcNew) - return; - for (int k = 0; k < len; k++) - ktcNew[k] = kmap[k]; - alloc += 5; - delete []kmap; - kmap = ktcNew; - } - for (int keyIndex = 0; keyIndex < len; keyIndex++) { - if ((key == kmap[keyIndex].key) && (modifiers == kmap[keyIndex].modifiers)) { - kmap[keyIndex].msg = msg; - return; - } - } - kmap[len].key = key; - kmap[len].modifiers = modifiers; - kmap[len].msg = msg; - len++; -} - -unsigned int KeyMap::Find(int key, int modifiers) { - for (int i = 0; i < len; i++) { - if ((key == kmap[i].key) && (modifiers == kmap[i].modifiers)) { - return kmap[i].msg; - } - } - return 0; -} - -const KeyToCommand KeyMap::MapDefault[] = { - {SCK_DOWN, SCI_NORM, SCI_LINEDOWN}, - {SCK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND}, - {SCK_DOWN, SCI_CTRL, SCI_LINESCROLLDOWN}, - {SCK_DOWN, SCI_ASHIFT, SCI_LINEDOWNRECTEXTEND}, - {SCK_UP, SCI_NORM, SCI_LINEUP}, - {SCK_UP, SCI_SHIFT, SCI_LINEUPEXTEND}, - {SCK_UP, SCI_CTRL, SCI_LINESCROLLUP}, - {SCK_UP, SCI_ASHIFT, SCI_LINEUPRECTEXTEND}, - {'[', SCI_CTRL, SCI_PARAUP}, - {'[', SCI_CSHIFT, SCI_PARAUPEXTEND}, - {']', SCI_CTRL, SCI_PARADOWN}, - {']', SCI_CSHIFT, SCI_PARADOWNEXTEND}, - {SCK_LEFT, SCI_NORM, SCI_CHARLEFT}, - {SCK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND}, - {SCK_LEFT, SCI_CTRL, SCI_WORDLEFT}, - {SCK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND}, - {SCK_LEFT, SCI_ASHIFT, SCI_CHARLEFTRECTEXTEND}, - {SCK_RIGHT, SCI_NORM, SCI_CHARRIGHT}, - {SCK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND}, - {SCK_RIGHT, SCI_CTRL, SCI_WORDRIGHT}, - {SCK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND}, - {SCK_RIGHT, SCI_ASHIFT, SCI_CHARRIGHTRECTEXTEND}, - {'/', SCI_CTRL, SCI_WORDPARTLEFT}, - {'/', SCI_CSHIFT, SCI_WORDPARTLEFTEXTEND}, - {'\\', SCI_CTRL, SCI_WORDPARTRIGHT}, - {'\\', SCI_CSHIFT, SCI_WORDPARTRIGHTEXTEND}, - {SCK_HOME, SCI_NORM, SCI_VCHOME}, - {SCK_HOME, SCI_SHIFT, SCI_VCHOMEEXTEND}, - {SCK_HOME, SCI_CTRL, SCI_DOCUMENTSTART}, - {SCK_HOME, SCI_CSHIFT, SCI_DOCUMENTSTARTEXTEND}, - {SCK_HOME, SCI_ALT, SCI_HOMEDISPLAY}, -// {SCK_HOME, SCI_ASHIFT, SCI_HOMEDISPLAYEXTEND}, - {SCK_HOME, SCI_ASHIFT, SCI_VCHOMERECTEXTEND}, - {SCK_END, SCI_NORM, SCI_LINEEND}, - {SCK_END, SCI_SHIFT, SCI_LINEENDEXTEND}, - {SCK_END, SCI_CTRL, SCI_DOCUMENTEND}, - {SCK_END, SCI_CSHIFT, SCI_DOCUMENTENDEXTEND}, - {SCK_END, SCI_ALT, SCI_LINEENDDISPLAY}, -// {SCK_END, SCI_ASHIFT, SCI_LINEENDDISPLAYEXTEND}, - {SCK_END, SCI_ASHIFT, SCI_LINEENDRECTEXTEND}, - {SCK_PRIOR, SCI_NORM, SCI_PAGEUP}, - {SCK_PRIOR, SCI_SHIFT, SCI_PAGEUPEXTEND}, - {SCK_PRIOR, SCI_ASHIFT, SCI_PAGEUPRECTEXTEND}, - {SCK_NEXT, SCI_NORM, SCI_PAGEDOWN}, - {SCK_NEXT, SCI_SHIFT, SCI_PAGEDOWNEXTEND}, - {SCK_NEXT, SCI_ASHIFT, SCI_PAGEDOWNRECTEXTEND}, - {SCK_DELETE, SCI_NORM, SCI_CLEAR}, - {SCK_DELETE, SCI_SHIFT, SCI_CUT}, - {SCK_DELETE, SCI_CTRL, SCI_DELWORDRIGHT}, - {SCK_DELETE, SCI_CSHIFT, SCI_DELLINERIGHT}, - {SCK_INSERT, SCI_NORM, SCI_EDITTOGGLEOVERTYPE}, - {SCK_INSERT, SCI_SHIFT, SCI_PASTE}, - {SCK_INSERT, SCI_CTRL, SCI_COPY}, - {SCK_ESCAPE, SCI_NORM, SCI_CANCEL}, - {SCK_BACK, SCI_NORM, SCI_DELETEBACK}, - {SCK_BACK, SCI_SHIFT, SCI_DELETEBACK}, - {SCK_BACK, SCI_CTRL, SCI_DELWORDLEFT}, - {SCK_BACK, SCI_ALT, SCI_UNDO}, - {SCK_BACK, SCI_CSHIFT, SCI_DELLINELEFT}, - {'Z', SCI_CTRL, SCI_UNDO}, - {'Y', SCI_CTRL, SCI_REDO}, - {'X', SCI_CTRL, SCI_CUT}, - {'C', SCI_CTRL, SCI_COPY}, - {'V', SCI_CTRL, SCI_PASTE}, - {'A', SCI_CTRL, SCI_SELECTALL}, - {SCK_TAB, SCI_NORM, SCI_TAB}, - {SCK_TAB, SCI_SHIFT, SCI_BACKTAB}, - {SCK_RETURN, SCI_NORM, SCI_NEWLINE}, - {SCK_RETURN, SCI_SHIFT, SCI_NEWLINE}, - {SCK_ADD, SCI_CTRL, SCI_ZOOMIN}, - {SCK_SUBTRACT, SCI_CTRL, SCI_ZOOMOUT}, - {SCK_DIVIDE, SCI_CTRL, SCI_SETZOOM}, - //'L', SCI_CTRL, SCI_FORMFEED, - {'L', SCI_CTRL, SCI_LINECUT}, - {'L', SCI_CSHIFT, SCI_LINEDELETE}, - {'T', SCI_CSHIFT, SCI_LINECOPY}, - {'T', SCI_CTRL, SCI_LINETRANSPOSE}, - {'D', SCI_CTRL, SCI_SELECTIONDUPLICATE}, - {'U', SCI_CTRL, SCI_LOWERCASE}, - {'U', SCI_CSHIFT, SCI_UPPERCASE}, - {0,0,0}, -}; - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyMap.h b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyMap.h deleted file mode 100644 index 364df684f6..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyMap.h +++ /dev/null @@ -1,43 +0,0 @@ -// Scintilla source code edit control -/** @file KeyMap.h - ** Defines a mapping between keystrokes and commands. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#ifndef KEYTOCOMMAND_H -#define KEYTOCOMMAND_H - -#define SCI_NORM 0 -#define SCI_SHIFT SCMOD_SHIFT -#define SCI_CTRL SCMOD_CTRL -#define SCI_ALT SCMOD_ALT -#define SCI_CSHIFT (SCI_CTRL | SCI_SHIFT) -#define SCI_ASHIFT (SCI_ALT | SCI_SHIFT) - -/** - */ -class KeyToCommand { -public: - int key; - int modifiers; - unsigned int msg; -}; - -/** - */ -class KeyMap { - KeyToCommand *kmap; - int len; - int alloc; - static const KeyToCommand MapDefault[]; - -public: - KeyMap(); - ~KeyMap(); - void Clear(); - void AssignCmdKey(int key, int modifiers, unsigned int msg); - unsigned int Find(int key, int modifiers); // 0 returned on failure -}; - -#endif diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyWords.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyWords.cxx deleted file mode 100644 index f82eb7df67..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/KeyWords.cxx +++ /dev/null @@ -1,221 +0,0 @@ -// Scintilla source code edit control -/** @file KeyWords.cxx - ** Colourise for particular languages. - **/ -// Copyright 1998-2002 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -const LexerModule *LexerModule::base = 0; -int LexerModule::nextLanguage = SCLEX_AUTOMATIC+1; - -LexerModule::LexerModule(int language_, - LexerFunction fnLexer_, - const char *languageName_, - LexerFunction fnFolder_, - const char * const wordListDescriptions_[], - int styleBits_) : - language(language_), - fnLexer(fnLexer_), - fnFolder(fnFolder_), - wordListDescriptions(wordListDescriptions_), - styleBits(styleBits_), - languageName(languageName_) { - next = base; - base = this; - if (language == SCLEX_AUTOMATIC) { - language = nextLanguage; - nextLanguage++; - } -} - -int LexerModule::GetNumWordLists() const { - if (wordListDescriptions == NULL) { - return -1; - } else { - int numWordLists = 0; - - while (wordListDescriptions[numWordLists]) { - ++numWordLists; - } - - return numWordLists; - } -} - -const char *LexerModule::GetWordListDescription(int index) const { - static const char *emptyStr = ""; - - PLATFORM_ASSERT(index < GetNumWordLists()); - if (index >= GetNumWordLists()) { - return emptyStr; - } else { - return wordListDescriptions[index]; - } -} - -int LexerModule::GetStyleBitsNeeded() const { - return styleBits; -} - -const LexerModule *LexerModule::Find(int language) { - const LexerModule *lm = base; - while (lm) { - if (lm->language == language) { - return lm; - } - lm = lm->next; - } - return 0; -} - -const LexerModule *LexerModule::Find(const char *languageName) { - if (languageName) { - const LexerModule *lm = base; - while (lm) { - if (lm->languageName && 0 == strcmp(lm->languageName, languageName)) { - return lm; - } - lm = lm->next; - } - } - return 0; -} - -void LexerModule::Lex(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const { - if (fnLexer) - fnLexer(startPos, lengthDoc, initStyle, keywordlists, styler); -} - -void LexerModule::Fold(unsigned int startPos, int lengthDoc, int initStyle, - WordList *keywordlists[], Accessor &styler) const { - if (fnFolder) { - int lineCurrent = styler.GetLine(startPos); - // Move back one line in case deletion wrecked current line fold state - if (lineCurrent > 0) { - lineCurrent--; - int newStartPos = styler.LineStart(lineCurrent); - lengthDoc += startPos - newStartPos; - startPos = newStartPos; - initStyle = 0; - if (startPos > 0) { - initStyle = styler.StyleAt(startPos - 1); - } - } - fnFolder(startPos, lengthDoc, initStyle, keywordlists, styler); - } -} - -// Alternative historical name for Scintilla_LinkLexers -int wxForceScintillaLexers(void) { - return Scintilla_LinkLexers(); -} - -// To add or remove a lexer, add or remove its file and run LexGen.py. - -// Force a reference to all of the Scintilla lexers so that the linker will -// not remove the code of the lexers. -int Scintilla_LinkLexers() { - static int forcer = 0; - -// Shorten the code that declares a lexer and ensures it is linked in by calling a method. -#define LINK_LEXER(lexer) extern LexerModule lexer; forcer += lexer.GetLanguage(); - -//++Autogenerated -- run src/LexGen.py to regenerate -//**\(\tLINK_LEXER(\*);\n\) - LINK_LEXER(lmAda); - LINK_LEXER(lmAns1); - LINK_LEXER(lmAPDL); - LINK_LEXER(lmAsm); - LINK_LEXER(lmASP); - LINK_LEXER(lmAU3); - LINK_LEXER(lmAVE); - LINK_LEXER(lmBaan); - LINK_LEXER(lmBash); - LINK_LEXER(lmBatch); - LINK_LEXER(lmBlitzBasic); - LINK_LEXER(lmBullant); - LINK_LEXER(lmCaml); - LINK_LEXER(lmClw); - LINK_LEXER(lmClwNoCase); - LINK_LEXER(lmConf); - LINK_LEXER(lmCPP); - LINK_LEXER(lmCPPNoCase); - LINK_LEXER(lmCsound); - LINK_LEXER(lmCss); - LINK_LEXER(lmDiff); - LINK_LEXER(lmEiffel); - LINK_LEXER(lmEiffelkw); - LINK_LEXER(lmErlang); - LINK_LEXER(lmErrorList); - LINK_LEXER(lmESCRIPT); - LINK_LEXER(lmF77); - LINK_LEXER(lmFlagShip); - LINK_LEXER(lmForth); - LINK_LEXER(lmFortran); - LINK_LEXER(lmFreeBasic); - LINK_LEXER(lmGui4Cli); - LINK_LEXER(lmHaskell); - LINK_LEXER(lmHTML); - LINK_LEXER(lmInno); - LINK_LEXER(lmKix); - LINK_LEXER(lmLatex); - LINK_LEXER(lmLISP); - LINK_LEXER(lmLot); - LINK_LEXER(lmLout); - LINK_LEXER(lmLua); - LINK_LEXER(lmMake); - LINK_LEXER(lmMatlab); - LINK_LEXER(lmMETAPOST); - LINK_LEXER(lmMMIXAL); - LINK_LEXER(lmMSSQL); - LINK_LEXER(lmNncrontab); - LINK_LEXER(lmNsis); - LINK_LEXER(lmNull); - LINK_LEXER(lmOctave); - LINK_LEXER(lmOpal); - LINK_LEXER(lmPascal); - LINK_LEXER(lmPB); - LINK_LEXER(lmPerl); - LINK_LEXER(lmPHP); - LINK_LEXER(lmPHPSCRIPT); - LINK_LEXER(lmPOV); - LINK_LEXER(lmProps); - LINK_LEXER(lmPS); - LINK_LEXER(lmPureBasic); - LINK_LEXER(lmPython); - LINK_LEXER(lmREBOL); - LINK_LEXER(lmRuby); - LINK_LEXER(lmScriptol); - LINK_LEXER(lmSmalltalk); - LINK_LEXER(lmSpecman); - LINK_LEXER(lmSpice); - LINK_LEXER(lmSQL); - LINK_LEXER(lmTADS3); - LINK_LEXER(lmTCL); - LINK_LEXER(lmTeX); - LINK_LEXER(lmVB); - LINK_LEXER(lmVBScript); - LINK_LEXER(lmVerilog); - LINK_LEXER(lmVHDL); - LINK_LEXER(lmXML); - LINK_LEXER(lmYAML); - -//--Autogenerated -- end of automatically generated section - - return 1; -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAPDL.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAPDL.cxx deleted file mode 100644 index 1cf263e501..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAPDL.cxx +++ /dev/null @@ -1,136 +0,0 @@ -// Scintilla source code edit control -/** @file LexAPDL.cxx - ** Lexer for APDL. Based on the lexer for Assembler by The Black Horus. - ** By Hadar Raz. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80 && (isalnum(ch) || ch == '_')); -} - -static inline bool IsAnOperator(char ch) { - // '.' left out as it is used to make up numbers - if (ch == '*' || ch == '/' || ch == '-' || ch == '+' || - ch == '(' || ch == ')' || ch == '=' || ch == '^' || - ch == '[' || ch == ']' || ch == '<' || ch == '&' || - ch == '>' || ch == ',' || ch == '|' || ch == '~' || - ch == '$' || ch == ':' || ch == '%') - return true; - return false; -} - -static void ColouriseAPDLDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - - int stringStart = ' '; - - WordList &processors = *keywordlists[0]; - WordList &commands = *keywordlists[1]; - WordList &slashcommands = *keywordlists[2]; - WordList &starcommands = *keywordlists[3]; - WordList &arguments = *keywordlists[4]; - WordList &functions = *keywordlists[5]; - - // Do not leak onto next line - initStyle = SCE_APDL_DEFAULT; - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) { - // Determine if the current state should terminate. - if (sc.state == SCE_APDL_NUMBER) { - if (!(IsADigit(sc.ch) || sc.ch == '.' || (sc.ch == 'e' || sc.ch == 'E') || - ((sc.ch == '+' || sc.ch == '-') && (sc.chPrev == 'e' || sc.chPrev == 'E')))) { - sc.SetState(SCE_APDL_DEFAULT); - } - } else if (sc.state == SCE_APDL_COMMENT) { - if (sc.atLineEnd) { - sc.SetState(SCE_APDL_DEFAULT); - } - } else if (sc.state == SCE_APDL_COMMENTBLOCK) { - if (sc.atLineEnd) { - if (sc.ch == '\r') { - sc.Forward(); - } - sc.ForwardSetState(SCE_APDL_DEFAULT); - } - } else if (sc.state == SCE_APDL_STRING) { - if (sc.atLineEnd) { - sc.SetState(SCE_APDL_DEFAULT); - } else if ((sc.ch == '\'' && stringStart == '\'') || (sc.ch == '\"' && stringStart == '\"')) { - sc.ForwardSetState(SCE_APDL_DEFAULT); - } - } else if (sc.state == SCE_APDL_WORD) { - if (!IsAWordChar(sc.ch)) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - if (processors.InList(s)) { - sc.ChangeState(SCE_APDL_PROCESSOR); - } else if (slashcommands.InList(s)) { - sc.ChangeState(SCE_APDL_SLASHCOMMAND); - } else if (starcommands.InList(s)) { - sc.ChangeState(SCE_APDL_STARCOMMAND); - } else if (commands.InList(s)) { - sc.ChangeState(SCE_APDL_COMMAND); - } else if (arguments.InList(s)) { - sc.ChangeState(SCE_APDL_ARGUMENT); - } else if (functions.InList(s)) { - sc.ChangeState(SCE_APDL_FUNCTION); - } - sc.SetState(SCE_APDL_DEFAULT); - } - } else if (sc.state == SCE_APDL_OPERATOR) { - if (!IsAnOperator(static_cast(sc.ch))) { - sc.SetState(SCE_APDL_DEFAULT); - } - } - - // Determine if a new state should be entered. - if (sc.state == SCE_APDL_DEFAULT) { - if (sc.ch == '!' && sc.chNext == '!') { - sc.SetState(SCE_APDL_COMMENTBLOCK); - } else if (sc.ch == '!') { - sc.SetState(SCE_APDL_COMMENT); - } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - sc.SetState(SCE_APDL_NUMBER); - } else if (sc.ch == '\'' || sc.ch == '\"') { - sc.SetState(SCE_APDL_STRING); - stringStart = sc.ch; - } else if (IsAWordChar(sc.ch) || ((sc.ch == '*' || sc.ch == '/') && !isgraph(sc.chPrev))) { - sc.SetState(SCE_APDL_WORD); - } else if (IsAnOperator(static_cast(sc.ch))) { - sc.SetState(SCE_APDL_OPERATOR); - } - } - } - sc.Complete(); -} - -static const char * const apdlWordListDesc[] = { - "processors", - "commands", - "slashommands", - "starcommands", - "arguments", - "functions", - 0 -}; - -LexerModule lmAPDL(SCLEX_APDL, ColouriseAPDLDoc, "apdl", 0, apdlWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAU3.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAU3.cxx deleted file mode 100644 index 2bc2e0f4bc..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAU3.cxx +++ /dev/null @@ -1,891 +0,0 @@ -// Scintilla source code edit control -// @file LexAU3.cxx -// Lexer for AutoIt3 http://www.hiddensoft.com/autoit3 -// by Jos van der Zande, jvdzande@yahoo.com -// -// Changes: -// March 28, 2004 - Added the standard Folding code -// April 21, 2004 - Added Preprosessor Table + Syntax Highlighting -// Fixed Number highlighting -// Changed default isoperator to IsAOperator to have a better match to AutoIt3 -// Fixed "#comments_start" -> "#comments-start" -// Fixed "#comments_end" -> "#comments-end" -// Fixed Sendkeys in Strings when not terminated with } -// Added support for Sendkey strings that have second parameter e.g. {UP 5} or {a down} -// April 26, 2004 - Fixed # pre-processor statement inside of comment block would invalidly change the color. -// Added logic for #include to treat the <> as string -// Added underscore to IsAOperator. -// May 17, 2004 - Changed the folding logic from indent to keyword folding. -// Added Folding logic for blocks of single-commentlines or commentblock. -// triggered by: fold.comment=1 -// Added Folding logic for preprocessor blocks triggered by fold.preprocessor=1 -// Added Special for #region - #endregion syntax highlight and folding. -// May 30, 2004 - Fixed issue with continuation lines on If statements. -// June 5, 2004 - Added comma to Operators for better readability. -// Added fold.compact support set with fold.compact=1 -// Changed folding inside of #cs-#ce. Default is no keyword folding inside comment blocks when fold.comment=1 -// it will now only happen when fold.comment=2. -// Sep 5, 2004 - Added logic to handle colourizing words on the last line. -// Typed Characters now show as "default" till they match any table. -// Oct 10, 2004 - Added logic to show Comments in "Special" directives. -// Nov 1, 2004 - Added better testing for Numbers supporting x and e notation. -// Nov 28, 2004 - Added logic to handle continuation lines for syntax highlighting. -// Jan 10, 2005 - Added Abbreviations Keyword used for expansion -// Mar 24, 2005 - Updated Abbreviations Keywords to fix when followed by Operator. -// Apr 18, 2005 - Updated #CE/#Comment-End logic to take a linecomment ";" into account -// - Added folding support for With...EndWith -// - Added support for a DOT in variable names -// - Fixed Underscore in CommentBlock -// May 23, 2005 - Fixed the SentKey lexing in case of a missing } -// Aug 11, 2005 - Fixed possible bug with s_save length > 100. -// Aug 23, 2005 - Added Switch/endswitch support to the folding logic. -// Sep 27, 2005 - Fixed the SentKey lexing logic in case of multiple sentkeys. -// Mar 12, 2006 - Fixed issue with <> coloring as String in stead of Operator in rare occasions. -// Apr 8, 2006 - Added support for AutoIt3 Standard UDF library (SCE_AU3_UDF) -// -// Copyright for Scintilla: 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. -// Scintilla source code edit control - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -static inline bool IsTypeCharacter(const int ch) -{ - return ch == '$'; -} -static inline bool IsAWordChar(const int ch) -{ - return (ch < 0x80) && (isalnum(ch) || ch == '_'); -} - -static inline bool IsAWordStart(const int ch) -{ - return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '@' || ch == '#' || ch == '$' || ch == '.'); -} - -static inline bool IsAOperator(char ch) { - if (isascii(ch) && isalnum(ch)) - return false; - if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || - ch == '&' || ch == '^' || ch == '=' || ch == '<' || ch == '>' || - ch == '(' || ch == ')' || ch == '[' || ch == ']' || ch == ',' ) - return true; - return false; -} - -/////////////////////////////////////////////////////////////////////////////// -// GetSendKey() filters the portion before and after a/multiple space(s) -// and return the first portion to be looked-up in the table -// also check if the second portion is valid... (up,down.on.off,toggle or a number) -/////////////////////////////////////////////////////////////////////////////// - -static int GetSendKey(const char *szLine, char *szKey) -{ - int nFlag = 0; - int nStartFound = 0; - int nKeyPos = 0; - int nSpecPos= 0; - int nSpecNum= 1; - int nPos = 0; - char cTemp; - char szSpecial[100]; - - // split the portion of the sendkey in the part before and after the spaces - while ( ( (cTemp = szLine[nPos]) != '\0')) - { - // skip leading Ctrl/Shift/Alt state - if (cTemp == '{') { - nStartFound = 1; - } - // - if (nStartFound == 1) { - if ((cTemp == ' ') && (nFlag == 0) ) // get the stuff till first space - { - nFlag = 1; - // Add } to the end of the first bit for table lookup later. - szKey[nKeyPos++] = '}'; - } - else if (cTemp == ' ') - { - // skip other spaces - } - else if (nFlag == 0) - { - // save first portion into var till space or } is hit - szKey[nKeyPos++] = cTemp; - } - else if ((nFlag == 1) && (cTemp != '}')) - { - // Save second portion into var... - szSpecial[nSpecPos++] = cTemp; - // check if Second portion is all numbers for repeat fuction - if (isdigit(cTemp) == false) {nSpecNum = 0;} - } - } - nPos++; // skip to next char - - } // End While - - - // Check if the second portion is either a number or one of these keywords - szKey[nKeyPos] = '\0'; - szSpecial[nSpecPos] = '\0'; - if (strcmp(szSpecial,"down")== 0 || strcmp(szSpecial,"up")== 0 || - strcmp(szSpecial,"on")== 0 || strcmp(szSpecial,"off")== 0 || - strcmp(szSpecial,"toggle")== 0 || nSpecNum == 1 ) - { - nFlag = 0; - } - else - { - nFlag = 1; - } - return nFlag; // 1 is bad, 0 is good - -} // GetSendKey() - -// -// Routine to check the last "none comment" character on a line to see if its a continuation -// -static bool IsContinuationLine(unsigned int szLine, Accessor &styler) -{ - int nsPos = styler.LineStart(szLine); - int nePos = styler.LineStart(szLine+1) - 2; - //int stylech = styler.StyleAt(nsPos); - while (nsPos < nePos) - { - //stylech = styler.StyleAt(nePos); - int stylech = styler.StyleAt(nsPos); - if (!(stylech == SCE_AU3_COMMENT)) { - char ch = styler.SafeGetCharAt(nePos); - if (!isspacechar(ch)) { - if (ch == '_') - return true; - else - return false; - } - } - nePos--; // skip to next char - } // End While - return false; -} // IsContinuationLine() - -// -// syntax highlighting logic -static void ColouriseAU3Doc(unsigned int startPos, - int length, int initStyle, - WordList *keywordlists[], - Accessor &styler) { - - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; - WordList &keywords4 = *keywordlists[3]; - WordList &keywords5 = *keywordlists[4]; - WordList &keywords6 = *keywordlists[5]; - WordList &keywords7 = *keywordlists[6]; - WordList &keywords8 = *keywordlists[7]; - // find the first previous line without continuation character at the end - int lineCurrent = styler.GetLine(startPos); - int s_startPos = startPos; - // When not inside a Block comment: find First line without _ - if (!(initStyle==SCE_AU3_COMMENTBLOCK)) { - while ((lineCurrent > 0 && IsContinuationLine(lineCurrent,styler)) || - (lineCurrent > 1 && IsContinuationLine(lineCurrent-1,styler))) { - lineCurrent--; - startPos = styler.LineStart(lineCurrent); // get start position - initStyle = 0; // reset the start style to 0 - } - } - // Set the new length to include it from the start and set the start position - length = length + s_startPos - startPos; // correct the total length to process - styler.StartAt(startPos); - - StyleContext sc(startPos, length, initStyle, styler); - char si; // string indicator "=1 '=2 - char ni; // Numeric indicator error=9 normal=0 normal+dec=1 hex=2 Enot=3 - char ci; // comment indicator 0=not linecomment(;) - char s_save[100]; - si=0; - ni=0; - ci=0; - //$$$ - for (; sc.More(); sc.Forward()) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - // ********************************************** - // save the total current word for eof processing - if (IsAWordChar(sc.ch) || sc.ch == '}') - { - strcpy(s_save,s); - int tp = strlen(s_save); - if (tp < 99) { - s_save[tp] = static_cast(tolower(sc.ch)); - s_save[tp+1] = '\0'; - } - } - // ********************************************** - // - switch (sc.state) - { - case SCE_AU3_COMMENTBLOCK: - { - //Reset at line end - if (sc.atLineEnd) { - ci=0; - sc.SetState(SCE_AU3_COMMENTBLOCK); - } - //skip rest of line when a ; is encountered - if (sc.chPrev == ';') { - ci=2; - sc.SetState(SCE_AU3_COMMENTBLOCK); - } - // skip rest of the line - if (ci==2) - break; - // check when first character is detected on the line - if (ci==0) { - if (IsAWordStart(static_cast(sc.ch)) || IsAOperator(static_cast(sc.ch))) { - ci=1; - sc.SetState(SCE_AU3_COMMENTBLOCK); - } - break; - } - if (!(IsAWordChar(sc.ch) || (sc.ch == '-' && strcmp(s, "#comments") == 0))) { - if ((strcmp(s, "#ce")== 0 || strcmp(s, "#comments-end")== 0)) - sc.SetState(SCE_AU3_COMMENT); // set to comment line for the rest of the line - else - ci=2; // line doesn't begin with #CE so skip the rest of the line - } - break; - } - case SCE_AU3_COMMENT: - { - if (sc.atLineEnd) {sc.SetState(SCE_AU3_DEFAULT);} - break; - } - case SCE_AU3_OPERATOR: - { - // check if its a COMobject - if (sc.chPrev == '.' && IsAWordChar(sc.ch)) { - sc.SetState(SCE_AU3_COMOBJ); - } - else { - sc.SetState(SCE_AU3_DEFAULT); - } - break; - } - case SCE_AU3_SPECIAL: - { - if (sc.ch == ';') {sc.SetState(SCE_AU3_COMMENT);} - if (sc.atLineEnd) {sc.SetState(SCE_AU3_DEFAULT);} - break; - } - case SCE_AU3_KEYWORD: - { - if (!(IsAWordChar(sc.ch) || (sc.ch == '-' && (strcmp(s, "#comments") == 0 || strcmp(s, "#include") == 0)))) - { - if (!IsTypeCharacter(sc.ch)) - { - if (strcmp(s, "#cs")== 0 || strcmp(s, "#comments-start")== 0 ) - { - sc.ChangeState(SCE_AU3_COMMENTBLOCK); - sc.SetState(SCE_AU3_COMMENTBLOCK); - } - else if (keywords.InList(s)) { - sc.ChangeState(SCE_AU3_KEYWORD); - sc.SetState(SCE_AU3_DEFAULT); - } - else if (keywords2.InList(s)) { - sc.ChangeState(SCE_AU3_FUNCTION); - sc.SetState(SCE_AU3_DEFAULT); - } - else if (keywords3.InList(s)) { - sc.ChangeState(SCE_AU3_MACRO); - sc.SetState(SCE_AU3_DEFAULT); - } - else if (keywords5.InList(s)) { - sc.ChangeState(SCE_AU3_PREPROCESSOR); - sc.SetState(SCE_AU3_DEFAULT); - if (strcmp(s, "#include")== 0) - { - si = 3; // use to determine string start for #inlude <> - } - } - else if (keywords6.InList(s)) { - sc.ChangeState(SCE_AU3_SPECIAL); - sc.SetState(SCE_AU3_SPECIAL); - } - else if ((keywords7.InList(s)) && (!IsAOperator(static_cast(sc.ch)))) { - sc.ChangeState(SCE_AU3_EXPAND); - sc.SetState(SCE_AU3_DEFAULT); - } - else if (keywords8.InList(s)) { - sc.ChangeState(SCE_AU3_UDF); - sc.SetState(SCE_AU3_DEFAULT); - } - else if (strcmp(s, "_") == 0) { - sc.ChangeState(SCE_AU3_OPERATOR); - sc.SetState(SCE_AU3_DEFAULT); - } - else if (!IsAWordChar(sc.ch)) { - sc.ChangeState(SCE_AU3_DEFAULT); - sc.SetState(SCE_AU3_DEFAULT); - } - } - } - if (sc.atLineEnd) { - sc.SetState(SCE_AU3_DEFAULT);} - break; - } - case SCE_AU3_NUMBER: - { - // Numeric indicator error=9 normal=0 normal+dec=1 hex=2 E-not=3 - // - // test for Hex notation - if (strcmp(s, "0") == 0 && (sc.ch == 'x' || sc.ch == 'X') && ni == 0) - { - ni = 2; - break; - } - // test for E notation - if (IsADigit(sc.chPrev) && (sc.ch == 'e' || sc.ch == 'E') && ni <= 1) - { - ni = 3; - break; - } - // Allow Hex characters inside hex numeric strings - if ((ni == 2) && - (sc.ch == 'a' || sc.ch == 'b' || sc.ch == 'c' || sc.ch == 'd' || sc.ch == 'e' || sc.ch == 'f' || - sc.ch == 'A' || sc.ch == 'B' || sc.ch == 'C' || sc.ch == 'D' || sc.ch == 'E' || sc.ch == 'F' )) - { - break; - } - // test for 1 dec point only - if (sc.ch == '.') - { - if (ni==0) - { - ni=1; - } - else - { - ni=9; - } - break; - } - // end of numeric string ? - if (!(IsADigit(sc.ch))) - { - if (ni==9) - { - sc.ChangeState(SCE_AU3_DEFAULT); - } - sc.SetState(SCE_AU3_DEFAULT); - } - break; - } - case SCE_AU3_VARIABLE: - { - // Check if its a COMObject - if (sc.ch == '.' && !IsADigit(sc.chNext)) { - sc.SetState(SCE_AU3_OPERATOR); - } - else if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_AU3_DEFAULT); - } - break; - } - case SCE_AU3_COMOBJ: - { - if (!(IsAWordChar(sc.ch))) { - sc.SetState(SCE_AU3_DEFAULT); - } - break; - } - case SCE_AU3_STRING: - { - // check for " to end a double qouted string or - // check for ' to end a single qouted string - if ((si == 1 && sc.ch == '\"') || (si == 2 && sc.ch == '\'') || (si == 3 && sc.ch == '>')) - { - sc.ForwardSetState(SCE_AU3_DEFAULT); - si=0; - } - if (sc.atLineEnd) - { - si=0; - // at line end and not found a continuation char then reset to default - int lineCurrent = styler.GetLine(sc.currentPos); - if (!IsContinuationLine(lineCurrent,styler)) - { - sc.SetState(SCE_AU3_DEFAULT); - } - } - // find Sendkeys in a STRING - if (sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' ) { - sc.SetState(SCE_AU3_SENT);} - break; - } - - case SCE_AU3_SENT: - { - // Send key string ended - if (sc.chPrev == '}' && sc.ch != '}') - { - // set color to SENDKEY when valid sendkey .. else set back to regular string - char sk[100]; - // split {111 222} and return {111} and check if 222 is valid. - // if return code = 1 then invalid 222 so must be string - if (GetSendKey(s,sk)) - { - sc.ChangeState(SCE_AU3_STRING); - } - // if single char between {?} then its ok as sendkey for a single character - else if (strlen(sk) == 3) - { - sc.ChangeState(SCE_AU3_SENT); - } - // if sendkey {111} is in table then ok as sendkey - else if (keywords4.InList(sk)) - { - sc.ChangeState(SCE_AU3_SENT); - } - else - { - sc.ChangeState(SCE_AU3_STRING); - } - sc.SetState(SCE_AU3_STRING); - } - else - { - // check if the start is a valid SendKey start - int nPos = 0; - int nState = 1; - char cTemp; - while (!(nState == 2) && ((cTemp = s[nPos]) != '\0')) - { - if (cTemp == '{' && nState == 1) - { - nState = 2; - } - if (nState == 1 && !(cTemp == '+' || cTemp == '!' || cTemp == '^' || cTemp == '#' )) - { - nState = 0; - } - nPos++; - } - //Verify characters infront of { ... if not assume regular string - if (nState == 1 && (!(sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' ))) { - sc.ChangeState(SCE_AU3_STRING); - sc.SetState(SCE_AU3_STRING); - } - // If invalid character found then assume its a regular string - if (nState == 0) { - sc.ChangeState(SCE_AU3_STRING); - sc.SetState(SCE_AU3_STRING); - } - } - // check if next portion is again a sendkey - if (sc.atLineEnd) - { - sc.ChangeState(SCE_AU3_STRING); - sc.SetState(SCE_AU3_DEFAULT); - si = 0; // reset string indicator - } - //* check in next characters following a sentkey are again a sent key - // Need this test incase of 2 sentkeys like {F1}{ENTER} but not detect {{} - if (sc.state == SCE_AU3_STRING && (sc.ch == '{' || sc.ch == '+' || sc.ch == '!' || sc.ch == '^' || sc.ch == '#' )) { - sc.SetState(SCE_AU3_SENT);} - // check to see if the string ended... - // Sendkey string isn't complete but the string ended.... - if ((si == 1 && sc.ch == '\"') || (si == 2 && sc.ch == '\'')) - { - sc.ChangeState(SCE_AU3_STRING); - sc.ForwardSetState(SCE_AU3_DEFAULT); - } - break; - } - } //switch (sc.state) - - // Determine if a new state should be entered: - - if (sc.state == SCE_AU3_DEFAULT) - { - if (sc.ch == ';') {sc.SetState(SCE_AU3_COMMENT);} - else if (sc.ch == '#') {sc.SetState(SCE_AU3_KEYWORD);} - else if (sc.ch == '$') {sc.SetState(SCE_AU3_VARIABLE);} - else if (sc.ch == '.' && !IsADigit(sc.chNext)) {sc.SetState(SCE_AU3_OPERATOR);} - else if (sc.ch == '@') {sc.SetState(SCE_AU3_KEYWORD);} - //else if (sc.ch == '_') {sc.SetState(SCE_AU3_KEYWORD);} - else if (sc.ch == '<' && si==3) {sc.SetState(SCE_AU3_STRING);} // string after #include - else if (sc.ch == '\"') { - sc.SetState(SCE_AU3_STRING); - si = 1; } - else if (sc.ch == '\'') { - sc.SetState(SCE_AU3_STRING); - si = 2; } - else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) - { - sc.SetState(SCE_AU3_NUMBER); - ni = 0; - } - else if (IsAWordStart(sc.ch)) {sc.SetState(SCE_AU3_KEYWORD);} - else if (IsAOperator(static_cast(sc.ch))) {sc.SetState(SCE_AU3_OPERATOR);} - else if (sc.atLineEnd) {sc.SetState(SCE_AU3_DEFAULT);} - } - } //for (; sc.More(); sc.Forward()) - - //************************************* - // Colourize the last word correctly - //************************************* - if (sc.state == SCE_AU3_KEYWORD) - { - if (strcmp(s_save, "#cs")== 0 || strcmp(s_save, "#comments-start")== 0 ) - { - sc.ChangeState(SCE_AU3_COMMENTBLOCK); - sc.SetState(SCE_AU3_COMMENTBLOCK); - } - else if (keywords.InList(s_save)) { - sc.ChangeState(SCE_AU3_KEYWORD); - sc.SetState(SCE_AU3_KEYWORD); - } - else if (keywords2.InList(s_save)) { - sc.ChangeState(SCE_AU3_FUNCTION); - sc.SetState(SCE_AU3_FUNCTION); - } - else if (keywords3.InList(s_save)) { - sc.ChangeState(SCE_AU3_MACRO); - sc.SetState(SCE_AU3_MACRO); - } - else if (keywords5.InList(s_save)) { - sc.ChangeState(SCE_AU3_PREPROCESSOR); - sc.SetState(SCE_AU3_PREPROCESSOR); - } - else if (keywords6.InList(s_save)) { - sc.ChangeState(SCE_AU3_SPECIAL); - sc.SetState(SCE_AU3_SPECIAL); - } - else if (keywords7.InList(s_save) && sc.atLineEnd) { - sc.ChangeState(SCE_AU3_EXPAND); - sc.SetState(SCE_AU3_EXPAND); - } - else if (keywords8.InList(s_save)) { - sc.ChangeState(SCE_AU3_UDF); - sc.SetState(SCE_AU3_UDF); - } - else { - sc.ChangeState(SCE_AU3_DEFAULT); - sc.SetState(SCE_AU3_DEFAULT); - } - } - if (sc.state == SCE_AU3_SENT) - { - // Send key string ended - if (sc.chPrev == '}' && sc.ch != '}') - { - // set color to SENDKEY when valid sendkey .. else set back to regular string - char sk[100]; - // split {111 222} and return {111} and check if 222 is valid. - // if return code = 1 then invalid 222 so must be string - if (GetSendKey(s_save,sk)) - { - sc.ChangeState(SCE_AU3_STRING); - } - // if single char between {?} then its ok as sendkey for a single character - else if (strlen(sk) == 3) - { - sc.ChangeState(SCE_AU3_SENT); - } - // if sendkey {111} is in table then ok as sendkey - else if (keywords4.InList(sk)) - { - sc.ChangeState(SCE_AU3_SENT); - } - else - { - sc.ChangeState(SCE_AU3_STRING); - } - sc.SetState(SCE_AU3_STRING); - } - // check if next portion is again a sendkey - if (sc.atLineEnd) - { - sc.ChangeState(SCE_AU3_STRING); - sc.SetState(SCE_AU3_DEFAULT); - } - } - //************************************* - sc.Complete(); -} - -// -static bool IsStreamCommentStyle(int style) { - return style == SCE_AU3_COMMENT || style == SCE_AU3_COMMENTBLOCK; -} - -// -// Routine to find first none space on the current line and return its Style -// needed for comment lines not starting on pos 1 -static int GetStyleFirstWord(unsigned int szLine, Accessor &styler) -{ - int nsPos = styler.LineStart(szLine); - int nePos = styler.LineStart(szLine+1) - 1; - while (isspacechar(styler.SafeGetCharAt(nsPos)) && nsPos < nePos) - { - nsPos++; // skip to next char - - } // End While - return styler.StyleAt(nsPos); - -} // GetStyleFirstWord() - - -// -static void FoldAU3Doc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) -{ - int endPos = startPos + length; - // get settings from the config files for folding comments and preprocessor lines - bool foldComment = styler.GetPropertyInt("fold.comment") != 0; - bool foldInComment = styler.GetPropertyInt("fold.comment") == 2; - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - bool foldpreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0; - // Backtrack to previous line in case need to fix its fold status - int lineCurrent = styler.GetLine(startPos); - if (startPos > 0) { - if (lineCurrent > 0) { - lineCurrent--; - startPos = styler.LineStart(lineCurrent); - } - } - // vars for style of previous/current/next lines - int style = GetStyleFirstWord(lineCurrent,styler); - int stylePrev = 0; - // find the first previous line without continuation character at the end - while ((lineCurrent > 0 && IsContinuationLine(lineCurrent,styler)) || - (lineCurrent > 1 && IsContinuationLine(lineCurrent-1,styler))) { - lineCurrent--; - startPos = styler.LineStart(lineCurrent); - } - if (lineCurrent > 0) { - stylePrev = GetStyleFirstWord(lineCurrent-1,styler); - } - // vars for getting first word to check for keywords - bool FirstWordStart = false; - bool FirstWordEnd = false; - char szKeyword[10]=""; - int szKeywordlen = 0; - char szThen[5]=""; - int szThenlen = 0; - bool ThenFoundLast = false; - // var for indentlevel - int levelCurrent = SC_FOLDLEVELBASE; - if (lineCurrent > 0) - levelCurrent = styler.LevelAt(lineCurrent-1) >> 16; - int levelNext = levelCurrent; - // - int visibleChars = 0; - char chNext = styler.SafeGetCharAt(startPos); - char chPrev = ' '; - // - for (int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - if (IsAWordChar(ch)) { - visibleChars++; - } - // get the syle for the current character neede to check in comment - int stylech = styler.StyleAt(i); - // get first word for the line for indent check max 9 characters - if (FirstWordStart && (!(FirstWordEnd))) { - if (!IsAWordChar(ch)) { - FirstWordEnd = true; - szKeyword[szKeywordlen] = '\0'; - } - else { - if (szKeywordlen < 10) { - szKeyword[szKeywordlen++] = static_cast(tolower(ch)); - } - } - } - // start the capture of the first word - if (!(FirstWordStart)) { - if (IsAWordChar(ch) || IsAWordStart(ch) || ch == ';') { - FirstWordStart = true; - szKeyword[szKeywordlen++] = static_cast(tolower(ch)); - } - } - // only process this logic when not in comment section - if (!(stylech == SCE_AU3_COMMENT)) { - if (ThenFoundLast) { - if (IsAWordChar(ch)) { - ThenFoundLast = false; - } - } - // find out if the word "then" is the last on a "if" line - if (FirstWordEnd && strcmp(szKeyword,"if") == 0) { - if (szThenlen == 4) { - szThen[0] = szThen[1]; - szThen[1] = szThen[2]; - szThen[2] = szThen[3]; - szThen[3] = static_cast(tolower(ch)); - if (strcmp(szThen,"then") == 0 ) { - ThenFoundLast = true; - } - } - else { - szThen[szThenlen++] = static_cast(tolower(ch)); - if (szThenlen == 5) { - szThen[4] = '\0'; - } - } - } - } - // End of Line found so process the information - if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == endPos)) { - // ************************** - // Folding logic for Keywords - // ************************** - // if a keyword is found on the current line and the line doesn't end with _ (continuation) - // and we are not inside a commentblock. - if (szKeywordlen > 0 && (!(chPrev == '_')) && - ((!(IsStreamCommentStyle(style)) || foldInComment)) ) { - szKeyword[szKeywordlen] = '\0'; - // only fold "if" last keyword is "then" (else its a one line if) - if (strcmp(szKeyword,"if") == 0 && ThenFoundLast) { - levelNext++; - } - // create new fold for these words - if (strcmp(szKeyword,"do") == 0 || strcmp(szKeyword,"for") == 0 || - strcmp(szKeyword,"func") == 0 || strcmp(szKeyword,"while") == 0|| - strcmp(szKeyword,"with") == 0 || strcmp(szKeyword,"#region") == 0 ) { - levelNext++; - } - // create double Fold for select&switch because Case will subtract one of the current level - if (strcmp(szKeyword,"select") == 0 || strcmp(szKeyword,"switch") == 0) { - levelNext++; - levelNext++; - } - // end the fold for these words before the current line - if (strcmp(szKeyword,"endfunc") == 0 || strcmp(szKeyword,"endif") == 0 || - strcmp(szKeyword,"next") == 0 || strcmp(szKeyword,"until") == 0 || - strcmp(szKeyword,"endwith") == 0 ||strcmp(szKeyword,"wend") == 0){ - levelNext--; - levelCurrent--; - } - // end the fold for these words before the current line and Start new fold - if (strcmp(szKeyword,"case") == 0 || strcmp(szKeyword,"else") == 0 || - strcmp(szKeyword,"elseif") == 0 ) { - levelCurrent--; - } - // end the double fold for this word before the current line - if (strcmp(szKeyword,"endselect") == 0 || strcmp(szKeyword,"endswitch") == 0 ) { - levelNext--; - levelNext--; - levelCurrent--; - levelCurrent--; - } - // end the fold for these words on the current line - if (strcmp(szKeyword,"#endregion") == 0 ) { - levelNext--; - } - } - // Preprocessor and Comment folding - int styleNext = GetStyleFirstWord(lineCurrent + 1,styler); - // ************************************* - // Folding logic for preprocessor blocks - // ************************************* - // process preprosessor line - if (foldpreprocessor && style == SCE_AU3_PREPROCESSOR) { - if (!(stylePrev == SCE_AU3_PREPROCESSOR) && (styleNext == SCE_AU3_PREPROCESSOR)) { - levelNext++; - } - // fold till the last line for normal comment lines - else if (stylePrev == SCE_AU3_PREPROCESSOR && !(styleNext == SCE_AU3_PREPROCESSOR)) { - levelNext--; - } - } - // ********************************* - // Folding logic for Comment blocks - // ********************************* - if (foldComment && IsStreamCommentStyle(style)) { - // Start of a comment block - if (!(stylePrev==style) && IsStreamCommentStyle(styleNext) && styleNext==style) { - levelNext++; - } - // fold till the last line for normal comment lines - else if (IsStreamCommentStyle(stylePrev) - && !(styleNext == SCE_AU3_COMMENT) - && stylePrev == SCE_AU3_COMMENT - && style == SCE_AU3_COMMENT) { - levelNext--; - } - // fold till the one but last line for Blockcomment lines - else if (IsStreamCommentStyle(stylePrev) - && !(styleNext == SCE_AU3_COMMENTBLOCK) - && style == SCE_AU3_COMMENTBLOCK) { - levelNext--; - levelCurrent--; - } - } - int levelUse = levelCurrent; - int lev = levelUse | levelNext << 16; - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - if (levelUse < levelNext) { - lev |= SC_FOLDLEVELHEADERFLAG; - } - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - // reset values for the next line - lineCurrent++; - stylePrev = style; - style = styleNext; - levelCurrent = levelNext; - visibleChars = 0; - // if the last character is an Underscore then don't reset since the line continues on the next line. - if (!(chPrev == '_')) { - szKeywordlen = 0; - szThenlen = 0; - FirstWordStart = false; - FirstWordEnd = false; - ThenFoundLast = false; - } - } - // save the last processed character - if (!isspacechar(ch)) { - chPrev = ch; - visibleChars++; - } - } -} - - -// - -static const char * const AU3WordLists[] = { - "#autoit keywords", - "#autoit functions", - "#autoit macros", - "#autoit Sent keys", - "#autoit Pre-processors", - "#autoit Special", - "#autoit Expand", - "#autoit UDF", - 0 -}; -LexerModule lmAU3(SCLEX_AU3, ColouriseAU3Doc, "au3", FoldAU3Doc , AU3WordLists); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAVE.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAVE.cxx deleted file mode 100644 index e30ee7dc9e..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAVE.cxx +++ /dev/null @@ -1,225 +0,0 @@ -// SciTE - Scintilla based Text Editor -/** @file LexAVE.cxx - ** Lexer for Avenue. - ** - ** Written by Alexey Yutkin . - **/ -// Copyright 1998-2002 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - - - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_'); -} -static inline bool IsEnumChar(const int ch) { - return (ch < 0x80) && (isalnum(ch)|| ch == '_'); -} -static inline bool IsANumberChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' ); -} - -inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_'); -} - -inline bool isAveOperator(char ch) { - if (isalnum(ch)) - return false; - // '.' left out as it is used to make up numbers - if (ch == '*' || ch == '/' || ch == '-' || ch == '+' || - ch == '(' || ch == ')' || ch == '=' || - ch == '{' || ch == '}' || - ch == '[' || ch == ']' || ch == ';' || - ch == '<' || ch == '>' || ch == ',' || - ch == '.' ) - return true; - return false; -} - -static void ColouriseAveDoc( - unsigned int startPos, - int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler) { - - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; - WordList &keywords4 = *keywordlists[3]; - WordList &keywords5 = *keywordlists[4]; - WordList &keywords6 = *keywordlists[5]; - - // Do not leak onto next line - if (initStyle == SCE_AVE_STRINGEOL) { - initStyle = SCE_AVE_DEFAULT; - } - - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) { - if (sc.atLineEnd) { - // Update the line state, so it can be seen by next line - int currentLine = styler.GetLine(sc.currentPos); - styler.SetLineState(currentLine, 0); - } - if (sc.atLineStart && (sc.state == SCE_AVE_STRING)) { - // Prevent SCE_AVE_STRINGEOL from leaking back to previous line - sc.SetState(SCE_AVE_STRING); - } - - - // Determine if the current state should terminate. - if (sc.state == SCE_AVE_OPERATOR) { - sc.SetState(SCE_AVE_DEFAULT); - } else if (sc.state == SCE_AVE_NUMBER) { - if (!IsANumberChar(sc.ch)) { - sc.SetState(SCE_AVE_DEFAULT); - } - } else if (sc.state == SCE_AVE_ENUM) { - if (!IsEnumChar(sc.ch)) { - sc.SetState(SCE_AVE_DEFAULT); - } - } else if (sc.state == SCE_AVE_IDENTIFIER) { - if (!IsAWordChar(sc.ch) || (sc.ch == '.')) { - char s[100]; - //sc.GetCurrent(s, sizeof(s)); - sc.GetCurrentLowered(s, sizeof(s)); - if (keywords.InList(s)) { - sc.ChangeState(SCE_AVE_WORD); - } else if (keywords2.InList(s)) { - sc.ChangeState(SCE_AVE_WORD2); - } else if (keywords3.InList(s)) { - sc.ChangeState(SCE_AVE_WORD3); - } else if (keywords4.InList(s)) { - sc.ChangeState(SCE_AVE_WORD4); - } else if (keywords5.InList(s)) { - sc.ChangeState(SCE_AVE_WORD5); - } else if (keywords6.InList(s)) { - sc.ChangeState(SCE_AVE_WORD6); - } - sc.SetState(SCE_AVE_DEFAULT); - } - } else if (sc.state == SCE_AVE_COMMENT) { - if (sc.atLineEnd) { - sc.SetState(SCE_AVE_DEFAULT); - } - } else if (sc.state == SCE_AVE_STRING) { - if (sc.ch == '\"') { - sc.ForwardSetState(SCE_AVE_DEFAULT); - } else if (sc.atLineEnd) { - sc.ChangeState(SCE_AVE_STRINGEOL); - sc.ForwardSetState(SCE_AVE_DEFAULT); - } - } - - // Determine if a new state should be entered. - if (sc.state == SCE_AVE_DEFAULT) { - if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - sc.SetState(SCE_AVE_NUMBER); - } else if (IsAWordStart(sc.ch)) { - sc.SetState(SCE_AVE_IDENTIFIER); - } else if (sc.Match('\"')) { - sc.SetState(SCE_AVE_STRING); - } else if (sc.Match('\'')) { - sc.SetState(SCE_AVE_COMMENT); - sc.Forward(); - } else if (isAveOperator(static_cast(sc.ch))) { - sc.SetState(SCE_AVE_OPERATOR); - } else if (sc.Match('#')) { - sc.SetState(SCE_AVE_ENUM); - sc.Forward(); - } - } - } - sc.Complete(); -} - -static void FoldAveDoc(unsigned int startPos, int length, int /* initStyle */, WordList *[], - Accessor &styler) { - unsigned int lengthDoc = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = static_cast(tolower(styler[startPos])); - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - int styleNext = styler.StyleAt(startPos); - char s[10]; - - for (unsigned int i = startPos; i < lengthDoc; i++) { - char ch = static_cast(tolower(chNext)); - chNext = static_cast(tolower(styler.SafeGetCharAt(i + 1))); - int style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - if (style == SCE_AVE_WORD) { - if (ch == 't' || ch == 'f' || ch == 'w' || ch == 'e') { - for (unsigned int j = 0; j < 6; j++) { - if (!iswordchar(styler[i + j])) { - break; - } - s[j] = static_cast(tolower(styler[i + j])); - s[j + 1] = '\0'; - } - - if ((strcmp(s, "then") == 0) || (strcmp(s, "for") == 0) || (strcmp(s, "while") == 0)) { - levelCurrent++; - } - if ((strcmp(s, "end") == 0) || (strcmp(s, "elseif") == 0)) { - // Normally "elseif" and "then" will be on the same line and will cancel - // each other out. // As implemented, this does not support fold.at.else. - levelCurrent--; - } - } - } else if (style == SCE_AVE_OPERATOR) { - if (ch == '{' || ch == '(') { - levelCurrent++; - } else if (ch == '}' || ch == ')') { - levelCurrent--; - } - } - - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0 && foldCompact) { - lev |= SC_FOLDLEVELWHITEFLAG; - } - if ((levelCurrent > levelPrev) && (visibleChars > 0)) { - lev |= SC_FOLDLEVELHEADERFLAG; - } - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - } - if (!isspacechar(ch)) { - visibleChars++; - } - } - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - -LexerModule lmAVE(SCLEX_AVE, ColouriseAveDoc, "ave", FoldAveDoc); - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAda.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAda.cxx deleted file mode 100644 index 0227ce1108..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAda.cxx +++ /dev/null @@ -1,520 +0,0 @@ -// Scintilla source code edit control -/** @file LexAda.cxx - ** Lexer for Ada 95 - **/ -// Copyright 2002 by Sergey Koshcheyev -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include - -#include "Platform.h" - -#include "Accessor.h" -#include "StyleContext.h" -#include "PropSet.h" -#include "KeyWords.h" -#include "SciLexer.h" -#include "SString.h" - -/* - * Interface - */ - -static void ColouriseDocument( - unsigned int startPos, - int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler); - -static const char * const adaWordListDesc[] = { - "Keywords", - 0 -}; - -LexerModule lmAda(SCLEX_ADA, ColouriseDocument, "ada", NULL, adaWordListDesc); - -/* - * Implementation - */ - -// Functions that have apostropheStartsAttribute as a parameter set it according to whether -// an apostrophe encountered after processing the current token will start an attribute or -// a character literal. -static void ColouriseCharacter(StyleContext& sc, bool& apostropheStartsAttribute); -static void ColouriseComment(StyleContext& sc, bool& apostropheStartsAttribute); -static void ColouriseContext(StyleContext& sc, char chEnd, int stateEOL); -static void ColouriseDelimiter(StyleContext& sc, bool& apostropheStartsAttribute); -static void ColouriseLabel(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute); -static void ColouriseNumber(StyleContext& sc, bool& apostropheStartsAttribute); -static void ColouriseString(StyleContext& sc, bool& apostropheStartsAttribute); -static void ColouriseWhiteSpace(StyleContext& sc, bool& apostropheStartsAttribute); -static void ColouriseWord(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute); - -static inline bool IsDelimiterCharacter(int ch); -static inline bool IsNumberStartCharacter(int ch); -static inline bool IsNumberCharacter(int ch); -static inline bool IsSeparatorOrDelimiterCharacter(int ch); -static bool IsValidIdentifier(const SString& identifier); -static bool IsValidNumber(const SString& number); -static inline bool IsWordStartCharacter(int ch); -static inline bool IsWordCharacter(int ch); - -static void ColouriseCharacter(StyleContext& sc, bool& apostropheStartsAttribute) { - apostropheStartsAttribute = true; - - sc.SetState(SCE_ADA_CHARACTER); - - // Skip the apostrophe and one more character (so that '' is shown as non-terminated and ''' - // is handled correctly) - sc.Forward(); - sc.Forward(); - - ColouriseContext(sc, '\'', SCE_ADA_CHARACTEREOL); -} - -static void ColouriseContext(StyleContext& sc, char chEnd, int stateEOL) { - while (!sc.atLineEnd && !sc.Match(chEnd)) { - sc.Forward(); - } - - if (!sc.atLineEnd) { - sc.ForwardSetState(SCE_ADA_DEFAULT); - } else { - sc.ChangeState(stateEOL); - } -} - -static void ColouriseComment(StyleContext& sc, bool& /*apostropheStartsAttribute*/) { - // Apostrophe meaning is not changed, but the parameter is present for uniformity - - sc.SetState(SCE_ADA_COMMENTLINE); - - while (!sc.atLineEnd) { - sc.Forward(); - } -} - -static void ColouriseDelimiter(StyleContext& sc, bool& apostropheStartsAttribute) { - apostropheStartsAttribute = sc.Match (')'); - sc.SetState(SCE_ADA_DELIMITER); - sc.ForwardSetState(SCE_ADA_DEFAULT); -} - -static void ColouriseLabel(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute) { - apostropheStartsAttribute = false; - - sc.SetState(SCE_ADA_LABEL); - - // Skip "<<" - sc.Forward(); - sc.Forward(); - - SString identifier; - - while (!sc.atLineEnd && !IsSeparatorOrDelimiterCharacter(sc.ch)) { - identifier += static_cast(tolower(sc.ch)); - sc.Forward(); - } - - // Skip ">>" - if (sc.Match('>', '>')) { - sc.Forward(); - sc.Forward(); - } else { - sc.ChangeState(SCE_ADA_ILLEGAL); - } - - // If the name is an invalid identifier or a keyword, then make it invalid label - if (!IsValidIdentifier(identifier) || keywords.InList(identifier.c_str())) { - sc.ChangeState(SCE_ADA_ILLEGAL); - } - - sc.SetState(SCE_ADA_DEFAULT); - -} - -static void ColouriseNumber(StyleContext& sc, bool& apostropheStartsAttribute) { - apostropheStartsAttribute = true; - - SString number; - sc.SetState(SCE_ADA_NUMBER); - - // Get all characters up to a delimiter or a separator, including points, but excluding - // double points (ranges). - while (!IsSeparatorOrDelimiterCharacter(sc.ch) || (sc.ch == '.' && sc.chNext != '.')) { - number += static_cast(sc.ch); - sc.Forward(); - } - - // Special case: exponent with sign - if ((sc.chPrev == 'e' || sc.chPrev == 'E') && - (sc.ch == '+' || sc.ch == '-')) { - number += static_cast(sc.ch); - sc.Forward (); - - while (!IsSeparatorOrDelimiterCharacter(sc.ch)) { - number += static_cast(sc.ch); - sc.Forward(); - } - } - - if (!IsValidNumber(number)) { - sc.ChangeState(SCE_ADA_ILLEGAL); - } - - sc.SetState(SCE_ADA_DEFAULT); -} - -static void ColouriseString(StyleContext& sc, bool& apostropheStartsAttribute) { - apostropheStartsAttribute = true; - - sc.SetState(SCE_ADA_STRING); - sc.Forward(); - - ColouriseContext(sc, '"', SCE_ADA_STRINGEOL); -} - -static void ColouriseWhiteSpace(StyleContext& sc, bool& /*apostropheStartsAttribute*/) { - // Apostrophe meaning is not changed, but the parameter is present for uniformity - sc.SetState(SCE_ADA_DEFAULT); - sc.ForwardSetState(SCE_ADA_DEFAULT); -} - -static void ColouriseWord(StyleContext& sc, WordList& keywords, bool& apostropheStartsAttribute) { - apostropheStartsAttribute = true; - sc.SetState(SCE_ADA_IDENTIFIER); - - SString word; - - while (!sc.atLineEnd && !IsSeparatorOrDelimiterCharacter(sc.ch)) { - word += static_cast(tolower(sc.ch)); - sc.Forward(); - } - - if (!IsValidIdentifier(word)) { - sc.ChangeState(SCE_ADA_ILLEGAL); - - } else if (keywords.InList(word.c_str())) { - sc.ChangeState(SCE_ADA_WORD); - - if (word != "all") { - apostropheStartsAttribute = false; - } - } - - sc.SetState(SCE_ADA_DEFAULT); -} - -// -// ColouriseDocument -// - -static void ColouriseDocument( - unsigned int startPos, - int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler) { - WordList &keywords = *keywordlists[0]; - - StyleContext sc(startPos, length, initStyle, styler); - - int lineCurrent = styler.GetLine(startPos); - bool apostropheStartsAttribute = (styler.GetLineState(lineCurrent) & 1) != 0; - - while (sc.More()) { - if (sc.atLineEnd) { - // Go to the next line - sc.Forward(); - lineCurrent++; - - // Remember the line state for future incremental lexing - styler.SetLineState(lineCurrent, apostropheStartsAttribute); - - // Don't continue any styles on the next line - sc.SetState(SCE_ADA_DEFAULT); - } - - // Comments - if (sc.Match('-', '-')) { - ColouriseComment(sc, apostropheStartsAttribute); - - // Strings - } else if (sc.Match('"')) { - ColouriseString(sc, apostropheStartsAttribute); - - // Characters - } else if (sc.Match('\'') && !apostropheStartsAttribute) { - ColouriseCharacter(sc, apostropheStartsAttribute); - - // Labels - } else if (sc.Match('<', '<')) { - ColouriseLabel(sc, keywords, apostropheStartsAttribute); - - // Whitespace - } else if (IsASpace(sc.ch)) { - ColouriseWhiteSpace(sc, apostropheStartsAttribute); - - // Delimiters - } else if (IsDelimiterCharacter(sc.ch)) { - ColouriseDelimiter(sc, apostropheStartsAttribute); - - // Numbers - } else if (IsADigit(sc.ch) || sc.ch == '#') { - ColouriseNumber(sc, apostropheStartsAttribute); - - // Keywords or identifiers - } else { - ColouriseWord(sc, keywords, apostropheStartsAttribute); - } - } - - sc.Complete(); -} - -static inline bool IsDelimiterCharacter(int ch) { - switch (ch) { - case '&': - case '\'': - case '(': - case ')': - case '*': - case '+': - case ',': - case '-': - case '.': - case '/': - case ':': - case ';': - case '<': - case '=': - case '>': - case '|': - return true; - default: - return false; - } -} - -static inline bool IsNumberCharacter(int ch) { - return IsNumberStartCharacter(ch) || - ch == '_' || - ch == '.' || - ch == '#' || - (ch >= 'a' && ch <= 'f') || - (ch >= 'A' && ch <= 'F'); -} - -static inline bool IsNumberStartCharacter(int ch) { - return IsADigit(ch); -} - -static inline bool IsSeparatorOrDelimiterCharacter(int ch) { - return IsASpace(ch) || IsDelimiterCharacter(ch); -} - -static bool IsValidIdentifier(const SString& identifier) { - // First character can't be '_', so initialize the flag to true - bool lastWasUnderscore = true; - - size_t length = identifier.length(); - - // Zero-length identifiers are not valid (these can occur inside labels) - if (length == 0) { - return false; - } - - // Check for valid character at the start - if (!IsWordStartCharacter(identifier[0])) { - return false; - } - - // Check for only valid characters and no double underscores - for (size_t i = 0; i < length; i++) { - if (!IsWordCharacter(identifier[i]) || - (identifier[i] == '_' && lastWasUnderscore)) { - return false; - } - lastWasUnderscore = identifier[i] == '_'; - } - - // Check for underscore at the end - if (lastWasUnderscore == true) { - return false; - } - - // All checks passed - return true; -} - -static bool IsValidNumber(const SString& number) { - int hashPos = number.search("#"); - bool seenDot = false; - - size_t i = 0; - size_t length = number.length(); - - if (length == 0) - return false; // Just in case - - // Decimal number - if (hashPos == -1) { - bool canBeSpecial = false; - - for (; i < length; i++) { - if (number[i] == '_') { - if (!canBeSpecial) { - return false; - } - canBeSpecial = false; - } else if (number[i] == '.') { - if (!canBeSpecial || seenDot) { - return false; - } - canBeSpecial = false; - seenDot = true; - } else if (IsADigit(number[i])) { - canBeSpecial = true; - } else { - break; - } - } - - if (!canBeSpecial) - return false; - } else { - // Based number - bool canBeSpecial = false; - int base = 0; - - // Parse base - for (; i < length; i++) { - int ch = number[i]; - if (ch == '_') { - if (!canBeSpecial) - return false; - canBeSpecial = false; - } else if (IsADigit(ch)) { - base = base * 10 + (ch - '0'); - if (base > 16) - return false; - canBeSpecial = true; - } else if (ch == '#' && canBeSpecial) { - break; - } else { - return false; - } - } - - if (base < 2) - return false; - if (i == length) - return false; - - i++; // Skip over '#' - - // Parse number - canBeSpecial = false; - - for (; i < length; i++) { - int ch = tolower(number[i]); - - if (ch == '_') { - if (!canBeSpecial) { - return false; - } - canBeSpecial = false; - - } else if (ch == '.') { - if (!canBeSpecial || seenDot) { - return false; - } - canBeSpecial = false; - seenDot = true; - - } else if (IsADigit(ch)) { - if (ch - '0' >= base) { - return false; - } - canBeSpecial = true; - - } else if (ch >= 'a' && ch <= 'f') { - if (ch - 'a' + 10 >= base) { - return false; - } - canBeSpecial = true; - - } else if (ch == '#' && canBeSpecial) { - break; - - } else { - return false; - } - } - - if (i == length) { - return false; - } - - i++; - } - - // Exponent (optional) - if (i < length) { - if (number[i] != 'e' && number[i] != 'E') - return false; - - i++; // Move past 'E' - - if (i == length) { - return false; - } - - if (number[i] == '+') - i++; - else if (number[i] == '-') { - if (seenDot) { - i++; - } else { - return false; // Integer literals should not have negative exponents - } - } - - if (i == length) { - return false; - } - - bool canBeSpecial = false; - - for (; i < length; i++) { - if (number[i] == '_') { - if (!canBeSpecial) { - return false; - } - canBeSpecial = false; - } else if (IsADigit(number[i])) { - canBeSpecial = true; - } else { - return false; - } - } - - if (!canBeSpecial) - return false; - } - - // if i == length, number was parsed successfully. - return i == length; -} - -static inline bool IsWordCharacter(int ch) { - return IsWordStartCharacter(ch) || IsADigit(ch); -} - -static inline bool IsWordStartCharacter(int ch) { - return (isascii(ch) && isalpha(ch)) || ch == '_'; -} diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAsm.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAsm.cxx deleted file mode 100644 index 93e0b37180..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAsm.cxx +++ /dev/null @@ -1,177 +0,0 @@ -// Scintilla source code edit control -/** @file LexAsm.cxx - ** Lexer for Assembler, just for the MASM syntax - ** Written by The Black Horus - ** Enhancements and NASM stuff by Kein-Hong Man, 2003-10 - ** SCE_ASM_COMMENTBLOCK and SCE_ASM_CHARACTER are for future GNU as colouring - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || - ch == '_' || ch == '?'); -} - -static inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.' || - ch == '%' || ch == '@' || ch == '$' || ch == '?'); -} - -static inline bool IsAsmOperator(char ch) { - if (isalnum(ch)) - return false; - // '.' left out as it is used to make up numbers - if (ch == '*' || ch == '/' || ch == '-' || ch == '+' || - ch == '(' || ch == ')' || ch == '=' || ch == '^' || - ch == '[' || ch == ']' || ch == '<' || ch == '&' || - ch == '>' || ch == ',' || ch == '|' || ch == '~' || - ch == '%' || ch == ':') - return true; - return false; -} - -static void ColouriseAsmDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - - WordList &cpuInstruction = *keywordlists[0]; - WordList &mathInstruction = *keywordlists[1]; - WordList ®isters = *keywordlists[2]; - WordList &directive = *keywordlists[3]; - WordList &directiveOperand = *keywordlists[4]; - WordList &extInstruction = *keywordlists[5]; - - // Do not leak onto next line - if (initStyle == SCE_ASM_STRINGEOL) - initStyle = SCE_ASM_DEFAULT; - - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) - { - - // Prevent SCE_ASM_STRINGEOL from leaking back to previous line - if (sc.atLineStart && (sc.state == SCE_ASM_STRING)) { - sc.SetState(SCE_ASM_STRING); - } else if (sc.atLineStart && (sc.state == SCE_ASM_CHARACTER)) { - sc.SetState(SCE_ASM_CHARACTER); - } - - // Handle line continuation generically. - if (sc.ch == '\\') { - if (sc.chNext == '\n' || sc.chNext == '\r') { - sc.Forward(); - if (sc.ch == '\r' && sc.chNext == '\n') { - sc.Forward(); - } - continue; - } - } - - // Determine if the current state should terminate. - if (sc.state == SCE_ASM_OPERATOR) { - if (!IsAsmOperator(static_cast(sc.ch))) { - sc.SetState(SCE_ASM_DEFAULT); - } - }else if (sc.state == SCE_ASM_NUMBER) { - if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_ASM_DEFAULT); - } - } else if (sc.state == SCE_ASM_IDENTIFIER) { - if (!IsAWordChar(sc.ch) ) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - - if (cpuInstruction.InList(s)) { - sc.ChangeState(SCE_ASM_CPUINSTRUCTION); - } else if (mathInstruction.InList(s)) { - sc.ChangeState(SCE_ASM_MATHINSTRUCTION); - } else if (registers.InList(s)) { - sc.ChangeState(SCE_ASM_REGISTER); - } else if (directive.InList(s)) { - sc.ChangeState(SCE_ASM_DIRECTIVE); - } else if (directiveOperand.InList(s)) { - sc.ChangeState(SCE_ASM_DIRECTIVEOPERAND); - } else if (extInstruction.InList(s)) { - sc.ChangeState(SCE_ASM_EXTINSTRUCTION); - } - sc.SetState(SCE_ASM_DEFAULT); - } - } - else if (sc.state == SCE_ASM_COMMENT ) { - if (sc.atLineEnd) { - sc.SetState(SCE_ASM_DEFAULT); - } - } else if (sc.state == SCE_ASM_STRING) { - if (sc.ch == '\\') { - if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') { - sc.Forward(); - } - } else if (sc.ch == '\"') { - sc.ForwardSetState(SCE_ASM_DEFAULT); - } else if (sc.atLineEnd) { - sc.ChangeState(SCE_ASM_STRINGEOL); - sc.ForwardSetState(SCE_ASM_DEFAULT); - } - } else if (sc.state == SCE_ASM_CHARACTER) { - if (sc.ch == '\\') { - if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') { - sc.Forward(); - } - } else if (sc.ch == '\'') { - sc.ForwardSetState(SCE_ASM_DEFAULT); - } else if (sc.atLineEnd) { - sc.ChangeState(SCE_ASM_STRINGEOL); - sc.ForwardSetState(SCE_ASM_DEFAULT); - } - } - - // Determine if a new state should be entered. - if (sc.state == SCE_ASM_DEFAULT) { - if (sc.ch == ';'){ - sc.SetState(SCE_ASM_COMMENT); - } else if (isdigit(sc.ch) || (sc.ch == '.' && isdigit(sc.chNext))) { - sc.SetState(SCE_ASM_NUMBER); - } else if (IsAWordStart(sc.ch)) { - sc.SetState(SCE_ASM_IDENTIFIER); - } else if (sc.ch == '\"') { - sc.SetState(SCE_ASM_STRING); - } else if (sc.ch == '\'') { - sc.SetState(SCE_ASM_CHARACTER); - } else if (IsAsmOperator(static_cast(sc.ch))) { - sc.SetState(SCE_ASM_OPERATOR); - } - } - - } - sc.Complete(); -} - -static const char * const asmWordListDesc[] = { - "CPU instructions", - "FPU instructions", - "Registers", - "Directives", - "Directive operands", - "Extended instructions", - 0 -}; - -LexerModule lmAsm(SCLEX_ASM, ColouriseAsmDoc, "asm", 0, asmWordListDesc); - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAsn1.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAsn1.cxx deleted file mode 100644 index 1600e6329d..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexAsn1.cxx +++ /dev/null @@ -1,181 +0,0 @@ -// Scintilla source code edit control -/** @file LexAsn1.cxx - ** Lexer for ASN.1 - **/ -// Copyright 2004 by Herr Pfarrer rpfarrer yahoo de -// Last Updated: 20/07/2004 -// The License.txt file describes the conditions under which this software may be distributed. -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -// Some char test functions -static bool isAsn1Number(int ch) -{ - return (ch >= '0' && ch <= '9'); -} - -static bool isAsn1Letter(int ch) -{ - return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); -} - -static bool isAsn1Char(int ch) -{ - return (ch == '-' ) || isAsn1Number(ch) || isAsn1Letter (ch); -} - -// -// Function determining the color of a given code portion -// Based on a "state" -// -static void ColouriseAsn1Doc(unsigned int startPos, int length, int initStyle, WordList *keywordLists[], Accessor &styler) -{ - // The keywords - WordList &Keywords = *keywordLists[0]; - WordList &Attributes = *keywordLists[1]; - WordList &Descriptors = *keywordLists[2]; - WordList &Types = *keywordLists[3]; - - // Parse the whole buffer character by character using StyleContext - StyleContext sc(startPos, length, initStyle, styler); - for (; sc.More(); sc.Forward()) - { - // The state engine - switch (sc.state) - { - case SCE_ASN1_DEFAULT: // Plain characters -asn1_default: - if (sc.ch == '-' && sc.chNext == '-') - // A comment begins here - sc.SetState(SCE_ASN1_COMMENT); - else if (sc.ch == '"') - // A string begins here - sc.SetState(SCE_ASN1_STRING); - else if (isAsn1Number (sc.ch)) - // A number starts here (identifier should start with a letter in ASN.1) - sc.SetState(SCE_ASN1_SCALAR); - else if (isAsn1Char (sc.ch)) - // An identifier starts here (identifier always start with a letter) - sc.SetState(SCE_ASN1_IDENTIFIER); - else if (sc.ch == ':') - // A ::= operator starts here - sc.SetState(SCE_ASN1_OPERATOR); - break; - case SCE_ASN1_COMMENT: // A comment - if (sc.ch == '\r' || sc.ch == '\n') - // A comment ends here - sc.SetState(SCE_ASN1_DEFAULT); - break; - case SCE_ASN1_IDENTIFIER: // An identifier (keyword, attribute, descriptor or type) - if (!isAsn1Char (sc.ch)) - { - // The end of identifier is here: we can look for it in lists by now and change its state - char s[100]; - sc.GetCurrent(s, sizeof(s)); - if (Keywords.InList(s)) - // It's a keyword, change its state - sc.ChangeState(SCE_ASN1_KEYWORD); - else if (Attributes.InList(s)) - // It's an attribute, change its state - sc.ChangeState(SCE_ASN1_ATTRIBUTE); - else if (Descriptors.InList(s)) - // It's a descriptor, change its state - sc.ChangeState(SCE_ASN1_DESCRIPTOR); - else if (Types.InList(s)) - // It's a type, change its state - sc.ChangeState(SCE_ASN1_TYPE); - - // Set to default now - sc.SetState(SCE_ASN1_DEFAULT); - } - break; - case SCE_ASN1_STRING: // A string delimited by "" - if (sc.ch == '"') - { - // A string ends here - sc.ForwardSetState(SCE_ASN1_DEFAULT); - - // To correctly manage a char sticking to the string quote - goto asn1_default; - } - break; - case SCE_ASN1_SCALAR: // A plain number - if (!isAsn1Number (sc.ch)) - // A number ends here - sc.SetState(SCE_ASN1_DEFAULT); - break; - case SCE_ASN1_OPERATOR: // The affectation operator ::= and wath follows (eg: ::= { org 6 } OID or ::= 12 trap) - if (sc.ch == '{') - { - // An OID definition starts here: enter the sub loop - for (; sc.More(); sc.Forward()) - { - if (isAsn1Number (sc.ch) && (!isAsn1Char (sc.chPrev) || isAsn1Number (sc.chPrev))) - // The OID number is highlighted - sc.SetState(SCE_ASN1_OID); - else if (isAsn1Char (sc.ch)) - // The OID parent identifier is plain - sc.SetState(SCE_ASN1_IDENTIFIER); - else - sc.SetState(SCE_ASN1_DEFAULT); - - if (sc.ch == '}') - // Here ends the OID and the operator sub loop: go back to main loop - break; - } - } - else if (isAsn1Number (sc.ch)) - { - // A trap number definition starts here: enter the sub loop - for (; sc.More(); sc.Forward()) - { - if (isAsn1Number (sc.ch)) - // The trap number is highlighted - sc.SetState(SCE_ASN1_OID); - else - { - // The number ends here: go back to main loop - sc.SetState(SCE_ASN1_DEFAULT); - break; - } - } - } - else if (sc.ch != ':' && sc.ch != '=' && sc.ch != ' ') - // The operator doesn't imply an OID definition nor a trap, back to main loop - goto asn1_default; // To be sure to handle actually the state change - break; - } - } - sc.Complete(); -} - -static void FoldAsn1Doc(unsigned int, int, int, WordList *[], Accessor &styler) -{ - // No folding enabled, no reason to continue... - if( styler.GetPropertyInt("fold") == 0 ) - return; - - // No folding implemented: doesn't make sense for ASN.1 -} - -static const char * const asn1WordLists[] = { - "Keywords", - "Attributes", - "Descriptors", - "Types", - 0, }; - - -LexerModule lmAns1(SCLEX_ASN1, ColouriseAsn1Doc, "asn1", FoldAsn1Doc, asn1WordLists); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBaan.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBaan.cxx deleted file mode 100644 index 3a36eb8f27..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBaan.cxx +++ /dev/null @@ -1,189 +0,0 @@ -// Scintilla source code edit control -/** @file LexBaan.cxx - ** Lexer for Baan. - ** Based heavily on LexCPP.cxx - **/ -// Copyright 2001- by Vamsi Potluru & Praveen Ambekar -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_' || ch == '$' || ch == ':'); -} - -static inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_'); -} - -static void ColouriseBaanDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor") != 0; - - if (initStyle == SCE_BAAN_STRINGEOL) // Does not leak onto next line - initStyle = SCE_BAAN_DEFAULT; - - int visibleChars = 0; - - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) { - - if (sc.state == SCE_BAAN_OPERATOR) { - sc.SetState(SCE_BAAN_DEFAULT); - } else if (sc.state == SCE_BAAN_NUMBER) { - if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_BAAN_DEFAULT); - } - } else if (sc.state == SCE_BAAN_IDENTIFIER) { - if (!IsAWordChar(sc.ch)) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - if (keywords.InList(s)) { - sc.ChangeState(SCE_BAAN_WORD); - } else if (keywords2.InList(s)) { - sc.ChangeState(SCE_BAAN_WORD2); - } - sc.SetState(SCE_BAAN_DEFAULT); - } - } else if (sc.state == SCE_BAAN_PREPROCESSOR) { - if (stylingWithinPreprocessor) { - if (IsASpace(sc.ch)) { - sc.SetState(SCE_BAAN_DEFAULT); - } - } else { - if (sc.atLineEnd && (sc.chNext != '^')) { - sc.SetState(SCE_BAAN_DEFAULT); - } - } - } else if (sc.state == SCE_BAAN_COMMENT) { - if (sc.atLineEnd) { - sc.SetState(SCE_BAAN_DEFAULT); - } - } else if (sc.state == SCE_BAAN_COMMENTDOC) { - if (sc.MatchIgnoreCase("enddllusage")) { - for (unsigned int i = 0; i < 10; i++){ - sc.Forward(); - } - sc.ForwardSetState(SCE_BAAN_DEFAULT); - } - } else if (sc.state == SCE_BAAN_STRING) { - if (sc.ch == '\"') { - sc.ForwardSetState(SCE_BAAN_DEFAULT); - } else if ((sc.atLineEnd) && (sc.chNext != '^')) { - sc.ChangeState(SCE_BAAN_STRINGEOL); - sc.ForwardSetState(SCE_C_DEFAULT); - visibleChars = 0; - } - } - - if (sc.state == SCE_BAAN_DEFAULT) { - if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - sc.SetState(SCE_BAAN_NUMBER); - } else if (sc.MatchIgnoreCase("dllusage")){ - sc.SetState(SCE_BAAN_COMMENTDOC); - do { - sc.Forward(); - } while ((!sc.atLineEnd) && sc.More()); - } else if (IsAWordStart(sc.ch)) { - sc.SetState(SCE_BAAN_IDENTIFIER); - } else if (sc.Match('|')){ - sc.SetState(SCE_BAAN_COMMENT); - } else if (sc.ch == '\"') { - sc.SetState(SCE_BAAN_STRING); - } else if (sc.ch == '#' && visibleChars == 0) { - // Preprocessor commands are alone on their line - sc.SetState(SCE_BAAN_PREPROCESSOR); - // Skip whitespace between # and preprocessor word - do { - sc.Forward(); - } while (IsASpace(sc.ch) && sc.More()); - } else if (isoperator(static_cast(sc.ch))) { - sc.SetState(SCE_BAAN_OPERATOR); - } - } - if (sc.atLineEnd) { - // Reset states to begining of colourise so no surprises - // if different sets of lines lexed. - visibleChars = 0; - } - if (!IsASpace(sc.ch)) { - visibleChars++; - } - } - sc.Complete(); -} - -static void FoldBaanDoc(unsigned int startPos, int length, int initStyle, WordList *[], - Accessor &styler) { - bool foldComment = styler.GetPropertyInt("fold.comment") != 0; - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - unsigned int endPos = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler[startPos]; - int styleNext = styler.StyleAt(startPos); - int style = initStyle; - for (unsigned int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int stylePrev = style; - style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - if (foldComment && - (style == SCE_BAAN_COMMENT || style == SCE_BAAN_COMMENTDOC)) { - if (style != stylePrev) { - levelCurrent++; - } else if ((style != styleNext) && !atEOL) { - // Comments don't end at end of line and the next character may be unstyled. - levelCurrent--; - } - } - if (style == SCE_BAAN_OPERATOR) { - if (ch == '{') { - levelCurrent++; - } else if (ch == '}') { - levelCurrent--; - } - } - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - } - if (!isspacechar(ch)) - visibleChars++; - } - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - -LexerModule lmBaan(SCLEX_BAAN, ColouriseBaanDoc, "baan", FoldBaanDoc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBash.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBash.cxx deleted file mode 100644 index e9c31d6b38..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBash.cxx +++ /dev/null @@ -1,663 +0,0 @@ -// Scintilla source code edit control -/** @file LexBash.cxx - ** Lexer for Bash. - **/ -// Copyright 2004-2005 by Neil Hodgson -// Adapted from LexPerl by Kein-Hong Man 2004 -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -#define BASH_BASE_ERROR 65 -#define BASH_BASE_DECIMAL 66 -#define BASH_BASE_HEX 67 -#define BASH_BASE_OCTAL 68 -#define BASH_BASE_OCTAL_ERROR 69 - -#define HERE_DELIM_MAX 256 - -static inline int translateBashDigit(char ch) { - if (ch >= '0' && ch <= '9') { - return ch - '0'; - } else if (ch >= 'a' && ch <= 'z') { - return ch - 'a' + 10; - } else if (ch >= 'A' && ch <= 'Z') { - return ch - 'A' + 36; - } else if (ch == '@') { - return 62; - } else if (ch == '_') { - return 63; - } - return BASH_BASE_ERROR; -} - -static inline bool isEOLChar(char ch) { - return (ch == '\r') || (ch == '\n'); -} - -static bool isSingleCharOp(char ch) { - char strCharSet[2]; - strCharSet[0] = ch; - strCharSet[1] = '\0'; - return (NULL != strstr("rwxoRWXOezsfdlpSbctugkTBMACahGLNn", strCharSet)); -} - -static inline bool isBashOperator(char ch) { - if (ch == '^' || ch == '&' || ch == '\\' || ch == '%' || - ch == '(' || ch == ')' || ch == '-' || ch == '+' || - ch == '=' || ch == '|' || ch == '{' || ch == '}' || - ch == '[' || ch == ']' || ch == ':' || ch == ';' || - ch == '>' || ch == ',' || ch == '/' || ch == '<' || - ch == '?' || ch == '!' || ch == '.' || ch == '~' || - ch == '@') - return true; - return false; -} - -static int classifyWordBash(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) { - char s[100]; - for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) { - s[i] = styler[start + i]; - s[i + 1] = '\0'; - } - char chAttr = SCE_SH_IDENTIFIER; - if (keywords.InList(s)) - chAttr = SCE_SH_WORD; - styler.ColourTo(end, chAttr); - return chAttr; -} - -static inline int getBashNumberBase(unsigned int start, unsigned int end, Accessor &styler) { - int base = 0; - for (unsigned int i = 0; i < end - start + 1 && i < 10; i++) { - base = base * 10 + (styler[start + i] - '0'); - } - if (base > 64 || (end - start) > 1) { - return BASH_BASE_ERROR; - } - return base; -} - -static inline bool isEndVar(char ch) { - return !isalnum(ch) && ch != '$' && ch != '_'; -} - -static inline bool isNonQuote(char ch) { - return isalnum(ch) || ch == '_'; -} - -static bool isMatch(Accessor &styler, int lengthDoc, int pos, const char *val) { - if ((pos + static_cast(strlen(val))) >= lengthDoc) { - return false; - } - while (*val) { - if (*val != styler[pos++]) { - return false; - } - val++; - } - return true; -} - -static char opposite(char ch) { - if (ch == '(') - return ')'; - if (ch == '[') - return ']'; - if (ch == '{') - return '}'; - if (ch == '<') - return '>'; - return ch; -} - -static void ColouriseBashDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler) { - - // Lexer for bash often has to backtrack to start of current style to determine - // which characters are being used as quotes, how deeply nested is the - // start position and what the termination string is for here documents - - WordList &keywords = *keywordlists[0]; - - class HereDocCls { - public: - int State; // 0: '<<' encountered - // 1: collect the delimiter - // 2: here doc text (lines after the delimiter) - char Quote; // the char after '<<' - bool Quoted; // true if Quote in ('\'','"','`') - bool Indent; // indented delimiter (for <<-) - int DelimiterLength; // strlen(Delimiter) - char *Delimiter; // the Delimiter, 256: sizeof PL_tokenbuf - HereDocCls() { - State = 0; - Quote = 0; - Quoted = false; - Indent = 0; - DelimiterLength = 0; - Delimiter = new char[HERE_DELIM_MAX]; - Delimiter[0] = '\0'; - } - ~HereDocCls() { - delete []Delimiter; - } - }; - HereDocCls HereDoc; - - class QuoteCls { - public: - int Rep; - int Count; - char Up; - char Down; - QuoteCls() { - this->New(1); - } - void New(int r) { - Rep = r; - Count = 0; - Up = '\0'; - Down = '\0'; - } - void Open(char u) { - Count++; - Up = u; - Down = opposite(Up); - } - }; - QuoteCls Quote; - - int state = initStyle; - int numBase = 0; - unsigned int lengthDoc = startPos + length; - - // If in a long distance lexical state, seek to the beginning to find quote characters - // Bash strings can be multi-line with embedded newlines, so backtrack. - // Bash numbers have additional state during lexing, so backtrack too. - if (state == SCE_SH_HERE_Q) { - while ((startPos > 1) && (styler.StyleAt(startPos) != SCE_SH_HERE_DELIM)) { - startPos--; - } - startPos = styler.LineStart(styler.GetLine(startPos)); - state = styler.StyleAt(startPos - 1); - } - if (state == SCE_SH_STRING - || state == SCE_SH_BACKTICKS - || state == SCE_SH_CHARACTER - || state == SCE_SH_NUMBER - || state == SCE_SH_IDENTIFIER - || state == SCE_SH_COMMENTLINE - ) { - while ((startPos > 1) && (styler.StyleAt(startPos - 1) == state)) { - startPos--; - } - state = SCE_SH_DEFAULT; - } - - styler.StartAt(startPos); - char chPrev = styler.SafeGetCharAt(startPos - 1); - if (startPos == 0) - chPrev = '\n'; - char chNext = styler[startPos]; - styler.StartSegment(startPos); - - for (unsigned int i = startPos; i < lengthDoc; i++) { - char ch = chNext; - // if the current character is not consumed due to the completion of an - // earlier style, lexing can be restarted via a simple goto - restartLexer: - chNext = styler.SafeGetCharAt(i + 1); - char chNext2 = styler.SafeGetCharAt(i + 2); - - if (styler.IsLeadByte(ch)) { - chNext = styler.SafeGetCharAt(i + 2); - chPrev = ' '; - i += 1; - continue; - } - - if ((chPrev == '\r' && ch == '\n')) { // skip on DOS/Windows - styler.ColourTo(i, state); - chPrev = ch; - continue; - } - - if (HereDoc.State == 1 && isEOLChar(ch)) { - // Begin of here-doc (the line after the here-doc delimiter): - // Lexically, the here-doc starts from the next line after the >>, but the - // first line of here-doc seem to follow the style of the last EOL sequence - HereDoc.State = 2; - if (HereDoc.Quoted) { - if (state == SCE_SH_HERE_DELIM) { - // Missing quote at end of string! We are stricter than bash. - // Colour here-doc anyway while marking this bit as an error. - state = SCE_SH_ERROR; - } - styler.ColourTo(i - 1, state); - // HereDoc.Quote always == '\'' - state = SCE_SH_HERE_Q; - } else { - styler.ColourTo(i - 1, state); - // always switch - state = SCE_SH_HERE_Q; - } - } - - if (state == SCE_SH_DEFAULT) { - if (ch == '\\') { // escaped character - if (i < lengthDoc - 1) - i++; - ch = chNext; - chNext = chNext2; - styler.ColourTo(i, SCE_SH_IDENTIFIER); - } else if (isdigit(ch)) { - state = SCE_SH_NUMBER; - numBase = BASH_BASE_DECIMAL; - if (ch == '0') { // hex,octal - if (chNext == 'x' || chNext == 'X') { - numBase = BASH_BASE_HEX; - i++; - ch = chNext; - chNext = chNext2; - } else if (isdigit(chNext)) { - numBase = BASH_BASE_OCTAL; - } - } - } else if (iswordstart(ch)) { - state = SCE_SH_WORD; - if (!iswordchar(chNext) && chNext != '+' && chNext != '-') { - // We need that if length of word == 1! - // This test is copied from the SCE_SH_WORD handler. - classifyWordBash(styler.GetStartSegment(), i, keywords, styler); - state = SCE_SH_DEFAULT; - } - } else if (ch == '#') { - state = SCE_SH_COMMENTLINE; - } else if (ch == '\"') { - state = SCE_SH_STRING; - Quote.New(1); - Quote.Open(ch); - } else if (ch == '\'') { - state = SCE_SH_CHARACTER; - Quote.New(1); - Quote.Open(ch); - } else if (ch == '`') { - state = SCE_SH_BACKTICKS; - Quote.New(1); - Quote.Open(ch); - } else if (ch == '$') { - if (chNext == '{') { - state = SCE_SH_PARAM; - goto startQuote; - } else if (chNext == '\'') { - state = SCE_SH_CHARACTER; - goto startQuote; - } else if (chNext == '"') { - state = SCE_SH_STRING; - goto startQuote; - } else if (chNext == '(' && chNext2 == '(') { - styler.ColourTo(i, SCE_SH_OPERATOR); - state = SCE_SH_DEFAULT; - goto skipChar; - } else if (chNext == '(' || chNext == '`') { - state = SCE_SH_BACKTICKS; - startQuote: - Quote.New(1); - Quote.Open(chNext); - goto skipChar; - } else { - state = SCE_SH_SCALAR; - skipChar: - i++; - ch = chNext; - chNext = chNext2; - } - } else if (ch == '*') { - if (chNext == '*') { // exponentiation - i++; - ch = chNext; - chNext = chNext2; - } - styler.ColourTo(i, SCE_SH_OPERATOR); - } else if (ch == '<' && chNext == '<') { - state = SCE_SH_HERE_DELIM; - HereDoc.State = 0; - HereDoc.Indent = false; - } else if (ch == '-' // file test operators - && isSingleCharOp(chNext) - && !isalnum((chNext2 = styler.SafeGetCharAt(i+2)))) { - styler.ColourTo(i + 1, SCE_SH_WORD); - state = SCE_SH_DEFAULT; - i++; - ch = chNext; - chNext = chNext2; - } else if (isBashOperator(ch)) { - styler.ColourTo(i, SCE_SH_OPERATOR); - } else { - // keep colouring defaults to make restart easier - styler.ColourTo(i, SCE_SH_DEFAULT); - } - } else if (state == SCE_SH_NUMBER) { - int digit = translateBashDigit(ch); - if (numBase == BASH_BASE_DECIMAL) { - if (ch == '#') { - numBase = getBashNumberBase(styler.GetStartSegment(), i - 1, styler); - if (numBase == BASH_BASE_ERROR) // take the rest as comment - goto numAtEnd; - } else if (!isdigit(ch)) - goto numAtEnd; - } else if (numBase == BASH_BASE_HEX) { - if ((digit < 16) || (digit >= 36 && digit <= 41)) { - // hex digit 0-9a-fA-F - } else - goto numAtEnd; - } else if (numBase == BASH_BASE_OCTAL || - numBase == BASH_BASE_OCTAL_ERROR) { - if (digit > 7) { - if (digit <= 9) { - numBase = BASH_BASE_OCTAL_ERROR; - } else - goto numAtEnd; - } - } else if (numBase == BASH_BASE_ERROR) { - if (digit > 9) - goto numAtEnd; - } else { // DD#DDDD number style handling - if (digit != BASH_BASE_ERROR) { - if (numBase <= 36) { - // case-insensitive if base<=36 - if (digit >= 36) digit -= 26; - } - if (digit >= numBase) { - if (digit <= 9) { - numBase = BASH_BASE_ERROR; - } else - goto numAtEnd; - } - } else { - numAtEnd: - if (numBase == BASH_BASE_ERROR || - numBase == BASH_BASE_OCTAL_ERROR) - state = SCE_SH_ERROR; - styler.ColourTo(i - 1, state); - state = SCE_SH_DEFAULT; - goto restartLexer; - } - } - } else if (state == SCE_SH_WORD) { - if (!iswordchar(chNext) && chNext != '+' && chNext != '-') { - // "." never used in Bash variable names - // but used in file names - classifyWordBash(styler.GetStartSegment(), i, keywords, styler); - state = SCE_SH_DEFAULT; - ch = ' '; - } - } else if (state == SCE_SH_IDENTIFIER) { - if (!iswordchar(chNext) && chNext != '+' && chNext != '-') { - styler.ColourTo(i, SCE_SH_IDENTIFIER); - state = SCE_SH_DEFAULT; - ch = ' '; - } - } else { - if (state == SCE_SH_COMMENTLINE) { - if (ch == '\\' && isEOLChar(chNext)) { - // comment continuation - if (chNext == '\r' && chNext2 == '\n') { - i += 2; - ch = styler.SafeGetCharAt(i); - chNext = styler.SafeGetCharAt(i + 1); - } else { - i++; - ch = chNext; - chNext = chNext2; - } - } else if (isEOLChar(ch)) { - styler.ColourTo(i - 1, state); - state = SCE_SH_DEFAULT; - goto restartLexer; - } else if (isEOLChar(chNext)) { - styler.ColourTo(i, state); - state = SCE_SH_DEFAULT; - } - } else if (state == SCE_SH_HERE_DELIM) { - // - // From Bash info: - // --------------- - // Specifier format is: <<[-]WORD - // Optional '-' is for removal of leading tabs from here-doc. - // Whitespace acceptable after <<[-] operator - // - if (HereDoc.State == 0) { // '<<' encountered - HereDoc.State = 1; - HereDoc.Quote = chNext; - HereDoc.Quoted = false; - HereDoc.DelimiterLength = 0; - HereDoc.Delimiter[HereDoc.DelimiterLength] = '\0'; - if (chNext == '\'' || chNext == '\"') { // a quoted here-doc delimiter (' or ") - i++; - ch = chNext; - chNext = chNext2; - HereDoc.Quoted = true; - } else if (!HereDoc.Indent && chNext == '-') { // <<- indent case - HereDoc.Indent = true; - HereDoc.State = 0; - } else if (isalpha(chNext) || chNext == '_' || chNext == '\\' - || chNext == '-' || chNext == '+' || chNext == '!') { - // an unquoted here-doc delimiter, no special handling - // TODO check what exactly bash considers part of the delim - } else if (chNext == '<') { // HERE string <<< - i++; - ch = chNext; - chNext = chNext2; - styler.ColourTo(i, SCE_SH_HERE_DELIM); - state = SCE_SH_DEFAULT; - HereDoc.State = 0; - } else if (isspacechar(chNext)) { - // eat whitespace - HereDoc.State = 0; - } else if (isdigit(chNext) || chNext == '=' || chNext == '$') { - // left shift << or <<= operator cases - styler.ColourTo(i, SCE_SH_OPERATOR); - state = SCE_SH_DEFAULT; - HereDoc.State = 0; - } else { - // symbols terminates; deprecated zero-length delimiter - } - } else if (HereDoc.State == 1) { // collect the delimiter - if (HereDoc.Quoted) { // a quoted here-doc delimiter - if (ch == HereDoc.Quote) { // closing quote => end of delimiter - styler.ColourTo(i, state); - state = SCE_SH_DEFAULT; - } else { - if (ch == '\\' && chNext == HereDoc.Quote) { // escaped quote - i++; - ch = chNext; - chNext = chNext2; - } - HereDoc.Delimiter[HereDoc.DelimiterLength++] = ch; - HereDoc.Delimiter[HereDoc.DelimiterLength] = '\0'; - } - } else { // an unquoted here-doc delimiter - if (isalnum(ch) || ch == '_' || ch == '-' || ch == '+' || ch == '!') { - HereDoc.Delimiter[HereDoc.DelimiterLength++] = ch; - HereDoc.Delimiter[HereDoc.DelimiterLength] = '\0'; - } else if (ch == '\\') { - // skip escape prefix - } else { - styler.ColourTo(i - 1, state); - state = SCE_SH_DEFAULT; - goto restartLexer; - } - } - if (HereDoc.DelimiterLength >= HERE_DELIM_MAX - 1) { - styler.ColourTo(i - 1, state); - state = SCE_SH_ERROR; - goto restartLexer; - } - } - } else if (HereDoc.State == 2) { - // state == SCE_SH_HERE_Q - if (isMatch(styler, lengthDoc, i, HereDoc.Delimiter)) { - if (!HereDoc.Indent && isEOLChar(chPrev)) { - endHereDoc: - // standard HERE delimiter - i += HereDoc.DelimiterLength; - chPrev = styler.SafeGetCharAt(i - 1); - ch = styler.SafeGetCharAt(i); - if (isEOLChar(ch)) { - styler.ColourTo(i - 1, state); - state = SCE_SH_DEFAULT; - HereDoc.State = 0; - goto restartLexer; - } - chNext = styler.SafeGetCharAt(i + 1); - } else if (HereDoc.Indent) { - // indented HERE delimiter - unsigned int bk = (i > 0)? i - 1: 0; - while (i > 0) { - ch = styler.SafeGetCharAt(bk--); - if (isEOLChar(ch)) { - goto endHereDoc; - } else if (!isspacechar(ch)) { - break; // got leading non-whitespace - } - } - } - } - } else if (state == SCE_SH_SCALAR) { // variable names - if (isEndVar(ch)) { - if ((state == SCE_SH_SCALAR) - && i == (styler.GetStartSegment() + 1)) { - // Special variable: $(, $_ etc. - styler.ColourTo(i, state); - state = SCE_SH_DEFAULT; - } else { - styler.ColourTo(i - 1, state); - state = SCE_SH_DEFAULT; - goto restartLexer; - } - } - } else if (state == SCE_SH_STRING - || state == SCE_SH_CHARACTER - || state == SCE_SH_BACKTICKS - || state == SCE_SH_PARAM - ) { - if (!Quote.Down && !isspacechar(ch)) { - Quote.Open(ch); - } else if (ch == '\\' && Quote.Up != '\\') { - i++; - ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - } else if (ch == Quote.Down) { - Quote.Count--; - if (Quote.Count == 0) { - Quote.Rep--; - if (Quote.Rep <= 0) { - styler.ColourTo(i, state); - state = SCE_SH_DEFAULT; - ch = ' '; - } - if (Quote.Up == Quote.Down) { - Quote.Count++; - } - } - } else if (ch == Quote.Up) { - Quote.Count++; - } - } - } - if (state == SCE_SH_ERROR) { - break; - } - chPrev = ch; - } - styler.ColourTo(lengthDoc - 1, state); -} - -static bool IsCommentLine(int line, Accessor &styler) { - int pos = styler.LineStart(line); - int eol_pos = styler.LineStart(line + 1) - 1; - for (int i = pos; i < eol_pos; i++) { - char ch = styler[i]; - if (ch == '#') - return true; - else if (ch != ' ' && ch != '\t') - return false; - } - return false; -} - -static void FoldBashDoc(unsigned int startPos, int length, int, WordList *[], - Accessor &styler) { - bool foldComment = styler.GetPropertyInt("fold.comment") != 0; - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - unsigned int endPos = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler[startPos]; - int styleNext = styler.StyleAt(startPos); - for (unsigned int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - // Comment folding - if (foldComment && atEOL && IsCommentLine(lineCurrent, styler)) - { - if (!IsCommentLine(lineCurrent - 1, styler) - && IsCommentLine(lineCurrent + 1, styler)) - levelCurrent++; - else if (IsCommentLine(lineCurrent - 1, styler) - && !IsCommentLine(lineCurrent+1, styler)) - levelCurrent--; - } - if (style == SCE_SH_OPERATOR) { - if (ch == '{') { - levelCurrent++; - } else if (ch == '}') { - levelCurrent--; - } - } - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - } - if (!isspacechar(ch)) - visibleChars++; - } - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - -static const char * const bashWordListDesc[] = { - "Keywords", - 0 -}; - -LexerModule lmBash(SCLEX_BASH, ColouriseBashDoc, "bash", FoldBashDoc, bashWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBasic.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBasic.cxx deleted file mode 100644 index 79ba2b8911..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBasic.cxx +++ /dev/null @@ -1,369 +0,0 @@ -// Scintilla source code edit control -/** @file LexBasic.cxx - ** Lexer for BlitzBasic and PureBasic. - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -// This tries to be a unified Lexer/Folder for all the BlitzBasic/BlitzMax/PurBasic basics -// and derivatives. Once they diverge enough, might want to split it into multiple -// lexers for more code clearity. -// -// Mail me (elias users sf net) for any bugs. - -// Folding only works for simple things like functions or types. - -// You may want to have a look at my ctags lexer as well, if you additionally to coloring -// and folding need to extract things like label tags in your editor. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -/* Bits: - * 1 - whitespace - * 2 - operator - * 4 - identifier - * 8 - decimal digit - * 16 - hex digit - * 32 - bin digit - */ -static int character_classification[128] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, - 60, 60, 28, 28, 28, 28, 28, 28, 28, 28, 2, 2, 2, 2, 2, 2, - 2, 20, 20, 20, 20, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 4, - 2, 20, 20, 20, 20, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0 -}; - -static bool IsSpace(int c) { - return c < 128 && (character_classification[c] & 1); -} - -static bool IsOperator(int c) { - return c < 128 && (character_classification[c] & 2); -} - -static bool IsIdentifier(int c) { - return c < 128 && (character_classification[c] & 4); -} - -static bool IsDigit(int c) { - return c < 128 && (character_classification[c] & 8); -} - -static bool IsHexDigit(int c) { - return c < 128 && (character_classification[c] & 16); -} - -static bool IsBinDigit(int c) { - return c < 128 && (character_classification[c] & 32); -} - -static int LowerCase(int c) -{ - if (c >= 'A' && c <= 'Z') - return 'a' + c - 'A'; - return c; -} - -static void ColouriseBasicDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler, char comment_char) { - bool wasfirst = true, isfirst = true; // true if first token in a line - styler.StartAt(startPos); - - StyleContext sc(startPos, length, initStyle, styler); - - // Can't use sc.More() here else we miss the last character - for (; ; sc.Forward()) { - if (sc.state == SCE_B_IDENTIFIER) { - if (!IsIdentifier(sc.ch)) { - // Labels - if (wasfirst && sc.Match(':')) { - sc.ChangeState(SCE_B_LABEL); - sc.ForwardSetState(SCE_B_DEFAULT); - } else { - char s[100]; - int kstates[4] = { - SCE_B_KEYWORD, - SCE_B_KEYWORD2, - SCE_B_KEYWORD3, - SCE_B_KEYWORD4, - }; - sc.GetCurrentLowered(s, sizeof(s)); - for (int i = 0; i < 4; i++) { - if (keywordlists[i]->InList(s)) { - sc.ChangeState(kstates[i]); - } - } - // Types, must set them as operator else they will be - // matched as number/constant - if (sc.Match('.') || sc.Match('$') || sc.Match('%') || - sc.Match('#')) { - sc.SetState(SCE_B_OPERATOR); - } else { - sc.SetState(SCE_B_DEFAULT); - } - } - } - } else if (sc.state == SCE_B_OPERATOR) { - if (!IsOperator(sc.ch) || sc.Match('#')) - sc.SetState(SCE_B_DEFAULT); - } else if (sc.state == SCE_B_LABEL) { - if (!IsIdentifier(sc.ch)) - sc.SetState(SCE_B_DEFAULT); - } else if (sc.state == SCE_B_CONSTANT) { - if (!IsIdentifier(sc.ch)) - sc.SetState(SCE_B_DEFAULT); - } else if (sc.state == SCE_B_NUMBER) { - if (!IsDigit(sc.ch)) - sc.SetState(SCE_B_DEFAULT); - } else if (sc.state == SCE_B_HEXNUMBER) { - if (!IsHexDigit(sc.ch)) - sc.SetState(SCE_B_DEFAULT); - } else if (sc.state == SCE_B_BINNUMBER) { - if (!IsBinDigit(sc.ch)) - sc.SetState(SCE_B_DEFAULT); - } else if (sc.state == SCE_B_STRING) { - if (sc.ch == '"') { - sc.ForwardSetState(SCE_B_DEFAULT); - } - if (sc.atLineEnd) { - sc.ChangeState(SCE_B_ERROR); - sc.SetState(SCE_B_DEFAULT); - } - } else if (sc.state == SCE_B_COMMENT || sc.state == SCE_B_PREPROCESSOR) { - if (sc.atLineEnd) { - sc.SetState(SCE_B_DEFAULT); - } - } - - if (sc.atLineStart) - isfirst = true; - - if (sc.state == SCE_B_DEFAULT || sc.state == SCE_B_ERROR) { - if (isfirst && sc.Match('.')) { - sc.SetState(SCE_B_LABEL); - } else if (isfirst && sc.Match('#')) { - wasfirst = isfirst; - sc.SetState(SCE_B_IDENTIFIER); - } else if (sc.Match(comment_char)) { - // Hack to make deprecated QBASIC '$Include show - // up in freebasic with SCE_B_PREPROCESSOR. - if (comment_char == '\'' && sc.Match(comment_char, '$')) - sc.SetState(SCE_B_PREPROCESSOR); - else - sc.SetState(SCE_B_COMMENT); - } else if (sc.Match('"')) { - sc.SetState(SCE_B_STRING); - } else if (IsDigit(sc.ch)) { - sc.SetState(SCE_B_NUMBER); - } else if (sc.Match('$')) { - sc.SetState(SCE_B_HEXNUMBER); - } else if (sc.Match('%')) { - sc.SetState(SCE_B_BINNUMBER); - } else if (sc.Match('#')) { - sc.SetState(SCE_B_CONSTANT); - } else if (IsOperator(sc.ch)) { - sc.SetState(SCE_B_OPERATOR); - } else if (IsIdentifier(sc.ch)) { - wasfirst = isfirst; - sc.SetState(SCE_B_IDENTIFIER); - } else if (!IsSpace(sc.ch)) { - sc.SetState(SCE_B_ERROR); - } - } - - if (!IsSpace(sc.ch)) - isfirst = false; - - if (!sc.More()) - break; - } - sc.Complete(); -} - -static int CheckBlitzFoldPoint(char const *token, int &level) { - if (!strcmp(token, "function") || - !strcmp(token, "type")) { - level |= SC_FOLDLEVELHEADERFLAG; - return 1; - } - if (!strcmp(token, "end function") || - !strcmp(token, "end type")) { - return -1; - } - return 0; -} - -static int CheckPureFoldPoint(char const *token, int &level) { - if (!strcmp(token, "procedure") || - !strcmp(token, "enumeration") || - !strcmp(token, "interface") || - !strcmp(token, "structure")) { - level |= SC_FOLDLEVELHEADERFLAG; - return 1; - } - if (!strcmp(token, "endprocedure") || - !strcmp(token, "endenumeration") || - !strcmp(token, "endinterface") || - !strcmp(token, "endstructure")) { - return -1; - } - return 0; -} - -static int CheckFreeFoldPoint(char const *token, int &level) { - if (!strcmp(token, "function") || - !strcmp(token, "sub") || - !strcmp(token, "type")) { - level |= SC_FOLDLEVELHEADERFLAG; - return 1; - } - if (!strcmp(token, "end function") || - !strcmp(token, "end sub") || - !strcmp(token, "end type")) { - return -1; - } - return 0; -} - -static void FoldBasicDoc(unsigned int startPos, int length, - Accessor &styler, int (*CheckFoldPoint)(char const *, int &)) { - int line = styler.GetLine(startPos); - int level = styler.LevelAt(line); - int go = 0, done = 0; - int endPos = startPos + length; - char word[256]; - int wordlen = 0; - int i; - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - // Scan for tokens at the start of the line (they may include - // whitespace, for tokens like "End Function" - for (i = startPos; i < endPos; i++) { - int c = styler.SafeGetCharAt(i); - if (!done && !go) { - if (wordlen) { // are we scanning a token already? - word[wordlen] = static_cast(LowerCase(c)); - if (!IsIdentifier(c)) { // done with token - word[wordlen] = '\0'; - go = CheckFoldPoint(word, level); - if (!go) { - // Treat any whitespace as single blank, for - // things like "End Function". - if (IsSpace(c) && IsIdentifier(word[wordlen - 1])) { - word[wordlen] = ' '; - if (wordlen < 255) - wordlen++; - } - else // done with this line - done = 1; - } - } else if (wordlen < 255) { - wordlen++; - } - } else { // start scanning at first non-whitespace character - if (!IsSpace(c)) { - if (IsIdentifier(c)) { - word[0] = static_cast(LowerCase(c)); - wordlen = 1; - } else // done with this line - done = 1; - } - } - } - if (c == '\n') { // line end - if (!done && wordlen == 0 && foldCompact) // line was only space - level |= SC_FOLDLEVELWHITEFLAG; - if (level != styler.LevelAt(line)) - styler.SetLevel(line, level); - level += go; - line++; - // reset state - wordlen = 0; - level &= ~SC_FOLDLEVELHEADERFLAG; - level &= ~SC_FOLDLEVELWHITEFLAG; - go = 0; - done = 0; - } - } -} - -static void ColouriseBlitzBasicDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler) { - ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler, ';'); -} - -static void ColourisePureBasicDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler) { - ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler, ';'); -} - -static void ColouriseFreeBasicDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler) { - ColouriseBasicDoc(startPos, length, initStyle, keywordlists, styler, '\''); -} - -static void FoldBlitzBasicDoc(unsigned int startPos, int length, int, - WordList *[], Accessor &styler) { - FoldBasicDoc(startPos, length, styler, CheckBlitzFoldPoint); -} - -static void FoldPureBasicDoc(unsigned int startPos, int length, int, - WordList *[], Accessor &styler) { - FoldBasicDoc(startPos, length, styler, CheckPureFoldPoint); -} - -static void FoldFreeBasicDoc(unsigned int startPos, int length, int, - WordList *[], Accessor &styler) { - FoldBasicDoc(startPos, length, styler, CheckFreeFoldPoint); -} - -static const char * const blitzbasicWordListDesc[] = { - "BlitzBasic Keywords", - "user1", - "user2", - "user3", - 0 -}; - -static const char * const purebasicWordListDesc[] = { - "PureBasic Keywords", - "PureBasic PreProcessor Keywords", - "user defined 1", - "user defined 2", - 0 -}; - -static const char * const freebasicWordListDesc[] = { - "FreeBasic Keywords", - "FreeBasic PreProcessor Keywords", - "user defined 1", - "user defined 2", - 0 -}; - -LexerModule lmBlitzBasic(SCLEX_BLITZBASIC, ColouriseBlitzBasicDoc, "blitzbasic", - FoldBlitzBasicDoc, blitzbasicWordListDesc); - -LexerModule lmPureBasic(SCLEX_PUREBASIC, ColourisePureBasicDoc, "purebasic", - FoldPureBasicDoc, purebasicWordListDesc); - -LexerModule lmFreeBasic(SCLEX_FREEBASIC, ColouriseFreeBasicDoc, "freebasic", - FoldFreeBasicDoc, freebasicWordListDesc); - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBullant.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBullant.cxx deleted file mode 100644 index 902f89c1e4..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexBullant.cxx +++ /dev/null @@ -1,225 +0,0 @@ -// SciTE - Scintilla based Text Editor -// LexBullant.cxx - lexer for Bullant - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - - -static int classifyWordBullant(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) { - char s[100]; - for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) { - s[i] = static_cast(tolower(styler[start + i])); - s[i + 1] = '\0'; - } - int lev= 0; - char chAttr = SCE_C_IDENTIFIER; - if (isdigit(s[0]) || (s[0] == '.')){ - chAttr = SCE_C_NUMBER; - } - else { - if (keywords.InList(s)) { - chAttr = SCE_C_WORD; - if (strcmp(s, "end") == 0) - lev = -1; - else if (strcmp(s, "method") == 0 || - strcmp(s, "case") == 0 || - strcmp(s, "class") == 0 || - strcmp(s, "debug") == 0 || - strcmp(s, "test") == 0 || - strcmp(s, "if") == 0 || - strcmp(s, "lock") == 0 || - strcmp(s, "transaction") == 0 || - strcmp(s, "trap") == 0 || - strcmp(s, "until") == 0 || - strcmp(s, "while") == 0) - lev = 1; - } - } - styler.ColourTo(end, chAttr); - return lev; -} - -static void ColouriseBullantDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - WordList &keywords = *keywordlists[0]; - - styler.StartAt(startPos); - - bool fold = styler.GetPropertyInt("fold") != 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - - int state = initStyle; - if (state == SCE_C_STRINGEOL) // Does not leak onto next line - state = SCE_C_DEFAULT; - char chPrev = ' '; - char chNext = styler[startPos]; - unsigned int lengthDoc = startPos + length; - int visibleChars = 0; - styler.StartSegment(startPos); - int endFoundThisLine = 0; - for (unsigned int i = startPos; i < lengthDoc; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - - if ((ch == '\r' && chNext != '\n') || (ch == '\n')) { - // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix) - // Avoid triggering two times on Dos/Win - // End of line - endFoundThisLine = 0; - if (state == SCE_C_STRINGEOL) { - styler.ColourTo(i, state); - state = SCE_C_DEFAULT; - } - if (fold) { - int lev = levelPrev; - if (visibleChars == 0) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - styler.SetLevel(lineCurrent, lev); - lineCurrent++; - levelPrev = levelCurrent; - } - visibleChars = 0; - -/* int indentBlock = GetLineIndentation(lineCurrent); - if (blockChange==1){ - lineCurrent++; - int pos=SetLineIndentation(lineCurrent, indentBlock + indentSize); - } else if (blockChange==-1) { - indentBlock -= indentSize; - if (indentBlock < 0) - indentBlock = 0; - SetLineIndentation(lineCurrent, indentBlock); - lineCurrent++; - } - blockChange=0; -*/ } - if (!isspace(ch)) - visibleChars++; - - if (styler.IsLeadByte(ch)) { - chNext = styler.SafeGetCharAt(i + 2); - chPrev = ' '; - i += 1; - continue; - } - - if (state == SCE_C_DEFAULT) { - if (iswordstart(ch)) { - styler.ColourTo(i-1, state); - state = SCE_C_IDENTIFIER; - } else if (ch == '@' && chNext == 'o') { - if ((styler.SafeGetCharAt(i+2) =='f') && (styler.SafeGetCharAt(i+3) == 'f')) { - styler.ColourTo(i-1, state); - state = SCE_C_COMMENT; - } - } else if (ch == '#') { - styler.ColourTo(i-1, state); - state = SCE_C_COMMENTLINE; - } else if (ch == '\"') { - styler.ColourTo(i-1, state); - state = SCE_C_STRING; - } else if (ch == '\'') { - styler.ColourTo(i-1, state); - state = SCE_C_CHARACTER; - } else if (isoperator(ch)) { - styler.ColourTo(i-1, state); - styler.ColourTo(i, SCE_C_OPERATOR); - } - } else if (state == SCE_C_IDENTIFIER) { - if (!iswordchar(ch)) { - int levelChange = classifyWordBullant(styler.GetStartSegment(), i - 1, keywords, styler); - state = SCE_C_DEFAULT; - chNext = styler.SafeGetCharAt(i + 1); - if (ch == '#') { - state = SCE_C_COMMENTLINE; - } else if (ch == '\"') { - state = SCE_C_STRING; - } else if (ch == '\'') { - state = SCE_C_CHARACTER; - } else if (isoperator(ch)) { - styler.ColourTo(i, SCE_C_OPERATOR); - } - if (endFoundThisLine == 0) - levelCurrent+=levelChange; - if (levelChange == -1) - endFoundThisLine=1; - } - } else if (state == SCE_C_COMMENT) { - if (ch == '@' && chNext == 'o') { - if (styler.SafeGetCharAt(i+2) == 'n') { - styler.ColourTo(i+2, state); - state = SCE_C_DEFAULT; - i+=2; - } - } - } else if (state == SCE_C_COMMENTLINE) { - if (ch == '\r' || ch == '\n') { - endFoundThisLine = 0; - styler.ColourTo(i-1, state); - state = SCE_C_DEFAULT; - } - } else if (state == SCE_C_STRING) { - if (ch == '\\') { - if (chNext == '\"' || chNext == '\'' || chNext == '\\') { - i++; - ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - } - } else if (ch == '\"') { - styler.ColourTo(i, state); - state = SCE_C_DEFAULT; - } else if (chNext == '\r' || chNext == '\n') { - endFoundThisLine = 0; - styler.ColourTo(i-1, SCE_C_STRINGEOL); - state = SCE_C_STRINGEOL; - } - } else if (state == SCE_C_CHARACTER) { - if ((ch == '\r' || ch == '\n') && (chPrev != '\\')) { - endFoundThisLine = 0; - styler.ColourTo(i-1, SCE_C_STRINGEOL); - state = SCE_C_STRINGEOL; - } else if (ch == '\\') { - if (chNext == '\"' || chNext == '\'' || chNext == '\\') { - i++; - ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - } - } else if (ch == '\'') { - styler.ColourTo(i, state); - state = SCE_C_DEFAULT; - } - } - chPrev = ch; - } - styler.ColourTo(lengthDoc - 1, state); - - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - if (fold) { - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - //styler.SetLevel(lineCurrent, levelCurrent | flagsNext); - styler.SetLevel(lineCurrent, levelPrev | flagsNext); - - } -} - -static const char * const bullantWordListDesc[] = { - "Keywords", - 0 -}; - -LexerModule lmBullant(SCLEX_BULLANT, ColouriseBullantDoc, "bullant", 0, bullantWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCLW.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCLW.cxx deleted file mode 100644 index e28e4b13b4..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCLW.cxx +++ /dev/null @@ -1,675 +0,0 @@ -// Scintilla source code edit control -/** @file LexClw.cxx - ** Lexer for Clarion. - ** 2004/12/17 Updated Lexer - **/ -// Copyright 2003-2004 by Ron Schofield -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -// Is an end of line character -inline bool IsEOL(const int ch) { - - return(ch == '\n'); -} - -// Convert character to uppercase -static char CharacterUpper(char chChar) { - - if (chChar < 'a' || chChar > 'z') { - return(chChar); - } - else { - return(static_cast(chChar - 'a' + 'A')); - } -} - -// Convert string to uppercase -static void StringUpper(char *szString) { - - while (*szString) { - *szString = CharacterUpper(*szString); - szString++; - } -} - -// Is a label start character -inline bool IsALabelStart(const int iChar) { - - return(isalpha(iChar) || iChar == '_'); -} - -// Is a label character -inline bool IsALabelCharacter(const int iChar) { - - return(isalnum(iChar) || iChar == '_' || iChar == ':'); -} - -// Is the character is a ! and the the next character is not a ! -inline bool IsACommentStart(const int iChar) { - - return(iChar == '!'); -} - -// Is the character a Clarion hex character (ABCDEF) -inline bool IsAHexCharacter(const int iChar, bool bCaseSensitive) { - - // Case insensitive. - if (!bCaseSensitive) { - if (strchr("ABCDEFabcdef", iChar) != NULL) { - return(true); - } - } - // Case sensitive - else { - if (strchr("ABCDEF", iChar) != NULL) { - return(true); - } - } - return(false); -} - -// Is the character a Clarion base character (B=Binary, O=Octal, H=Hex) -inline bool IsANumericBaseCharacter(const int iChar, bool bCaseSensitive) { - - // Case insensitive. - if (!bCaseSensitive) { - // If character is a numeric base character - if (strchr("BOHboh", iChar) != NULL) { - return(true); - } - } - // Case sensitive - else { - // If character is a numeric base character - if (strchr("BOH", iChar) != NULL) { - return(true); - } - } - return(false); -} - -// Set the correct numeric constant state -inline bool SetNumericConstantState(StyleContext &scDoc) { - - int iPoints = 0; // Point counter - char cNumericString[512]; // Numeric string buffer - - // Buffer the current numberic string - scDoc.GetCurrent(cNumericString, sizeof(cNumericString)); - // Loop through the string until end of string (NULL termination) - for (int iIndex = 0; cNumericString[iIndex] != '\0'; iIndex++) { - // Depending on the character - switch (cNumericString[iIndex]) { - // Is a . (point) - case '.' : - // Increment point counter - iPoints++; - break; - default : - break; - } - } - // If points found (can be more than one for improper formatted number - if (iPoints > 0) { - return(true); - } - // Else no points found - else { - return(false); - } -} - -// Get the next word in uppercase from the current position (keyword lookahead) -inline bool GetNextWordUpper(Accessor &styler, unsigned int uiStartPos, int iLength, char *cWord) { - - unsigned int iIndex = 0; // Buffer Index - - // Loop through the remaining string from the current position - for (int iOffset = uiStartPos; iOffset < iLength; iOffset++) { - // Get the character from the buffer using the offset - char cCharacter = styler[iOffset]; - if (IsEOL(cCharacter)) { - break; - } - // If the character is alphabet character - if (isalpha(cCharacter)) { - // Add UPPERCASE character to the word buffer - cWord[iIndex++] = CharacterUpper(cCharacter); - } - } - // Add null termination - cWord[iIndex] = '\0'; - // If no word was found - if (iIndex == 0) { - // Return failure - return(false); - } - // Else word was found - else { - // Return success - return(true); - } -} - -// Clarion Language Colouring Procedure -static void ColouriseClarionDoc(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler, bool bCaseSensitive) { - - int iParenthesesLevel = 0; // Parenthese Level - int iColumn1Label = false; // Label starts in Column 1 - - WordList &wlClarionKeywords = *wlKeywords[0]; // Clarion Keywords - WordList &wlCompilerDirectives = *wlKeywords[1]; // Compiler Directives - WordList &wlRuntimeExpressions = *wlKeywords[2]; // Runtime Expressions - WordList &wlBuiltInProcsFuncs = *wlKeywords[3]; // Builtin Procedures and Functions - WordList &wlStructsDataTypes = *wlKeywords[4]; // Structures and Data Types - WordList &wlAttributes = *wlKeywords[5]; // Procedure Attributes - WordList &wlStandardEquates = *wlKeywords[6]; // Standard Equates - WordList &wlLabelReservedWords = *wlKeywords[7]; // Clarion Reserved Keywords (Labels) - WordList &wlProcLabelReservedWords = *wlKeywords[8]; // Clarion Reserved Keywords (Procedure Labels) - - const char wlProcReservedKeywordList[] = - "PROCEDURE FUNCTION"; - WordList wlProcReservedKeywords; - wlProcReservedKeywords.Set(wlProcReservedKeywordList); - - const char wlCompilerKeywordList[] = - "COMPILE OMIT"; - WordList wlCompilerKeywords; - wlCompilerKeywords.Set(wlCompilerKeywordList); - - const char wlLegacyStatementsList[] = - "BOF EOF FUNCTION POINTER SHARE"; - WordList wlLegacyStatements; - wlLegacyStatements.Set(wlLegacyStatementsList); - - StyleContext scDoc(uiStartPos, iLength, iInitStyle, accStyler); - - // lex source code - for (; scDoc.More(); scDoc.Forward()) - { - // - // Determine if the current state should terminate. - // - - // Label State Handling - if (scDoc.state == SCE_CLW_LABEL) { - // If the character is not a valid label - if (!IsALabelCharacter(scDoc.ch)) { - // If the character is a . (dot syntax) - if (scDoc.ch == '.') { - // Turn off column 1 label flag as label now cannot be reserved work - iColumn1Label = false; - // Uncolour the . (dot) to default state, move forward one character, - // and change back to the label state. - scDoc.SetState(SCE_CLW_DEFAULT); - scDoc.Forward(); - scDoc.SetState(SCE_CLW_LABEL); - } - // Else check label - else { - char cLabel[512]; // Label buffer - // Buffer the current label string - scDoc.GetCurrent(cLabel,sizeof(cLabel)); - // If case insensitive, convert string to UPPERCASE to match passed keywords. - if (!bCaseSensitive) { - StringUpper(cLabel); - } - // Else if UPPERCASE label string is in the Clarion compiler keyword list - if (wlCompilerKeywords.InList(cLabel) && iColumn1Label){ - // change the label to error state - scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE); - } - // Else if UPPERCASE label string is in the Clarion reserved keyword list - else if (wlLabelReservedWords.InList(cLabel) && iColumn1Label){ - // change the label to error state - scDoc.ChangeState(SCE_CLW_ERROR); - } - // Else if UPPERCASE label string is - else if (wlProcLabelReservedWords.InList(cLabel) && iColumn1Label) { - char cWord[512]; // Word buffer - // Get the next word from the current position - if (GetNextWordUpper(accStyler,scDoc.currentPos,uiStartPos+iLength,cWord)) { - // If the next word is a procedure reserved word - if (wlProcReservedKeywords.InList(cWord)) { - // Change the label to error state - scDoc.ChangeState(SCE_CLW_ERROR); - } - } - } - // Else if label string is in the compiler directive keyword list - else if (wlCompilerDirectives.InList(cLabel)) { - // change the state to compiler directive state - scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE); - } - // Terminate the label state and set to default state - scDoc.SetState(SCE_CLW_DEFAULT); - } - } - } - // Keyword State Handling - else if (scDoc.state == SCE_CLW_KEYWORD) { - // If character is : (colon) - if (scDoc.ch == ':') { - char cEquate[512]; // Equate buffer - // Move forward to include : (colon) in buffer - scDoc.Forward(); - // Buffer the equate string - scDoc.GetCurrent(cEquate,sizeof(cEquate)); - // If case insensitive, convert string to UPPERCASE to match passed keywords. - if (!bCaseSensitive) { - StringUpper(cEquate); - } - // If statement string is in the equate list - if (wlStandardEquates.InList(cEquate)) { - // Change to equate state - scDoc.ChangeState(SCE_CLW_STANDARD_EQUATE); - } - } - // If the character is not a valid label character - else if (!IsALabelCharacter(scDoc.ch)) { - char cStatement[512]; // Statement buffer - // Buffer the statement string - scDoc.GetCurrent(cStatement,sizeof(cStatement)); - // If case insensitive, convert string to UPPERCASE to match passed keywords. - if (!bCaseSensitive) { - StringUpper(cStatement); - } - // If statement string is in the Clarion keyword list - if (wlClarionKeywords.InList(cStatement)) { - // Change the statement string to the Clarion keyword state - scDoc.ChangeState(SCE_CLW_KEYWORD); - } - // Else if statement string is in the compiler directive keyword list - else if (wlCompilerDirectives.InList(cStatement)) { - // Change the statement string to the compiler directive state - scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE); - } - // Else if statement string is in the runtime expressions keyword list - else if (wlRuntimeExpressions.InList(cStatement)) { - // Change the statement string to the runtime expressions state - scDoc.ChangeState(SCE_CLW_RUNTIME_EXPRESSIONS); - } - // Else if statement string is in the builtin procedures and functions keyword list - else if (wlBuiltInProcsFuncs.InList(cStatement)) { - // Change the statement string to the builtin procedures and functions state - scDoc.ChangeState(SCE_CLW_BUILTIN_PROCEDURES_FUNCTION); - } - // Else if statement string is in the tructures and data types keyword list - else if (wlStructsDataTypes.InList(cStatement)) { - // Change the statement string to the structures and data types state - scDoc.ChangeState(SCE_CLW_STRUCTURE_DATA_TYPE); - } - // Else if statement string is in the procedure attribute keyword list - else if (wlAttributes.InList(cStatement)) { - // Change the statement string to the procedure attribute state - scDoc.ChangeState(SCE_CLW_ATTRIBUTE); - } - // Else if statement string is in the standard equate keyword list - else if (wlStandardEquates.InList(cStatement)) { - // Change the statement string to the standard equate state - scDoc.ChangeState(SCE_CLW_STANDARD_EQUATE); - } - // Else if statement string is in the deprecated or legacy keyword list - else if (wlLegacyStatements.InList(cStatement)) { - // Change the statement string to the standard equate state - scDoc.ChangeState(SCE_CLW_DEPRECATED); - } - // Else the statement string doesn't match any work list - else { - // Change the statement string to the default state - scDoc.ChangeState(SCE_CLW_DEFAULT); - } - // Terminate the keyword state and set to default state - scDoc.SetState(SCE_CLW_DEFAULT); - } - } - // String State Handling - else if (scDoc.state == SCE_CLW_STRING) { - // If the character is an ' (single quote) - if (scDoc.ch == '\'') { - // Set the state to default and move forward colouring - // the ' (single quote) as default state - // terminating the string state - scDoc.SetState(SCE_CLW_DEFAULT); - scDoc.Forward(); - } - // If the next character is an ' (single quote) - if (scDoc.chNext == '\'') { - // Move forward one character and set to default state - // colouring the next ' (single quote) as default state - // terminating the string state - scDoc.ForwardSetState(SCE_CLW_DEFAULT); - scDoc.Forward(); - } - } - // Picture String State Handling - else if (scDoc.state == SCE_CLW_PICTURE_STRING) { - // If the character is an ( (open parenthese) - if (scDoc.ch == '(') { - // Increment the parenthese level - iParenthesesLevel++; - } - // Else if the character is a ) (close parenthese) - else if (scDoc.ch == ')') { - // If the parenthese level is set to zero - // parentheses matched - if (!iParenthesesLevel) { - scDoc.SetState(SCE_CLW_DEFAULT); - } - // Else parenthese level is greater than zero - // still looking for matching parentheses - else { - // Decrement the parenthese level - iParenthesesLevel--; - } - } - } - // Standard Equate State Handling - else if (scDoc.state == SCE_CLW_STANDARD_EQUATE) { - if (!isalnum(scDoc.ch)) { - scDoc.SetState(SCE_CLW_DEFAULT); - } - } - // Integer Constant State Handling - else if (scDoc.state == SCE_CLW_INTEGER_CONSTANT) { - // If the character is not a digit (0-9) - // or character is not a hexidecimal character (A-F) - // or character is not a . (point) - // or character is not a numberic base character (B,O,H) - if (!(isdigit(scDoc.ch) - || IsAHexCharacter(scDoc.ch, bCaseSensitive) - || scDoc.ch == '.' - || IsANumericBaseCharacter(scDoc.ch, bCaseSensitive))) { - // If the number was a real - if (SetNumericConstantState(scDoc)) { - // Colour the matched string to the real constant state - scDoc.ChangeState(SCE_CLW_REAL_CONSTANT); - } - // Else the number was an integer - else { - // Colour the matched string to an integer constant state - scDoc.ChangeState(SCE_CLW_INTEGER_CONSTANT); - } - // Terminate the integer constant state and set to default state - scDoc.SetState(SCE_CLW_DEFAULT); - } - } - - // - // Determine if a new state should be entered. - // - - // Beginning of Line Handling - if (scDoc.atLineStart) { - // Reset the column 1 label flag - iColumn1Label = false; - // If column 1 character is a label start character - if (IsALabelStart(scDoc.ch)) { - // Label character is found in column 1 - // so set column 1 label flag and clear last column 1 label - iColumn1Label = true; - // Set the state to label - scDoc.SetState(SCE_CLW_LABEL); - } - // else if character is a space or tab - else if (IsASpace(scDoc.ch)){ - // Set to default state - scDoc.SetState(SCE_CLW_DEFAULT); - } - // else if comment start (!) or is an * (asterisk) - else if (IsACommentStart(scDoc.ch) || scDoc.ch == '*' ) { - // then set the state to comment. - scDoc.SetState(SCE_CLW_COMMENT); - } - // else the character is a ? (question mark) - else if (scDoc.ch == '?') { - // Change to the compiler directive state, move forward, - // colouring the ? (question mark), change back to default state. - scDoc.ChangeState(SCE_CLW_COMPILER_DIRECTIVE); - scDoc.Forward(); - scDoc.SetState(SCE_CLW_DEFAULT); - } - // else an invalid character in column 1 - else { - // Set to error state - scDoc.SetState(SCE_CLW_ERROR); - } - } - // End of Line Handling - else if (scDoc.atLineEnd) { - // Reset to the default state at the end of each line. - scDoc.SetState(SCE_CLW_DEFAULT); - } - // Default Handling - else { - // If in default state - if (scDoc.state == SCE_CLW_DEFAULT) { - // If is a letter could be a possible statement - if (isalpha(scDoc.ch)) { - // Set the state to Clarion Keyword and verify later - scDoc.SetState(SCE_CLW_KEYWORD); - } - // else is a number - else if (isdigit(scDoc.ch)) { - // Set the state to Integer Constant and verify later - scDoc.SetState(SCE_CLW_INTEGER_CONSTANT); - } - // else if the start of a comment or a | (line continuation) - else if (IsACommentStart(scDoc.ch) || scDoc.ch == '|') { - // then set the state to comment. - scDoc.SetState(SCE_CLW_COMMENT); - } - // else if the character is a ' (single quote) - else if (scDoc.ch == '\'') { - // If the character is also a ' (single quote) - // Embedded Apostrophe - if (scDoc.chNext == '\'') { - // Move forward colouring it as default state - scDoc.ForwardSetState(SCE_CLW_DEFAULT); - } - else { - // move to the next character and then set the state to comment. - scDoc.ForwardSetState(SCE_CLW_STRING); - } - } - // else the character is an @ (ampersand) - else if (scDoc.ch == '@') { - // Case insensitive. - if (!bCaseSensitive) { - // If character is a valid picture token character - if (strchr("DEKNPSTdeknpst", scDoc.chNext) != NULL) { - // Set to the picture string state - scDoc.SetState(SCE_CLW_PICTURE_STRING); - } - } - // Case sensitive - else { - // If character is a valid picture token character - if (strchr("DEKNPST", scDoc.chNext) != NULL) { - // Set the picture string state - scDoc.SetState(SCE_CLW_PICTURE_STRING); - } - } - } - } - } - } - // lexing complete - scDoc.Complete(); -} - -// Clarion Language Case Sensitive Colouring Procedure -static void ColouriseClarionDocSensitive(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler) { - - ColouriseClarionDoc(uiStartPos, iLength, iInitStyle, wlKeywords, accStyler, true); -} - -// Clarion Language Case Insensitive Colouring Procedure -static void ColouriseClarionDocInsensitive(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *wlKeywords[], Accessor &accStyler) { - - ColouriseClarionDoc(uiStartPos, iLength, iInitStyle, wlKeywords, accStyler, false); -} - -// Fill Buffer - -static void FillBuffer(unsigned int uiStart, unsigned int uiEnd, Accessor &accStyler, char *szBuffer, unsigned int uiLength) { - - unsigned int uiPos = 0; - - while ((uiPos < uiEnd - uiStart + 1) && (uiPos < uiLength-1)) { - szBuffer[uiPos] = static_cast(toupper(accStyler[uiStart + uiPos])); - uiPos++; - } - szBuffer[uiPos] = '\0'; -} - -// Classify Clarion Fold Point - -static int ClassifyClarionFoldPoint(int iLevel, const char* szString) { - - if (!(isdigit(szString[0]) || (szString[0] == '.'))) { - if (strcmp(szString, "PROCEDURE") == 0) { - // iLevel = SC_FOLDLEVELBASE + 1; - } - else if (strcmp(szString, "MAP") == 0 || - strcmp(szString,"ACCEPT") == 0 || - strcmp(szString,"BEGIN") == 0 || - strcmp(szString,"CASE") == 0 || - strcmp(szString,"EXECUTE") == 0 || - strcmp(szString,"IF") == 0 || - strcmp(szString,"ITEMIZE") == 0 || - strcmp(szString,"INTERFACE") == 0 || - strcmp(szString,"JOIN") == 0 || - strcmp(szString,"LOOP") == 0 || - strcmp(szString,"MODULE") == 0 || - strcmp(szString,"RECORD") == 0) { - iLevel++; - } - else if (strcmp(szString, "APPLICATION") == 0 || - strcmp(szString, "CLASS") == 0 || - strcmp(szString, "DETAIL") == 0 || - strcmp(szString, "FILE") == 0 || - strcmp(szString, "FOOTER") == 0 || - strcmp(szString, "FORM") == 0 || - strcmp(szString, "GROUP") == 0 || - strcmp(szString, "HEADER") == 0 || - strcmp(szString, "INTERFACE") == 0 || - strcmp(szString, "MENU") == 0 || - strcmp(szString, "MENUBAR") == 0 || - strcmp(szString, "OLE") == 0 || - strcmp(szString, "OPTION") == 0 || - strcmp(szString, "QUEUE") == 0 || - strcmp(szString, "REPORT") == 0 || - strcmp(szString, "SHEET") == 0 || - strcmp(szString, "TAB") == 0 || - strcmp(szString, "TOOLBAR") == 0 || - strcmp(szString, "VIEW") == 0 || - strcmp(szString, "WINDOW") == 0) { - iLevel++; - } - else if (strcmp(szString, "END") == 0 || - strcmp(szString, "UNTIL") == 0 || - strcmp(szString, "WHILE") == 0) { - iLevel--; - } - } - return(iLevel); -} - -// Clarion Language Folding Procedure -static void FoldClarionDoc(unsigned int uiStartPos, int iLength, int iInitStyle, WordList *[], Accessor &accStyler) { - - unsigned int uiEndPos = uiStartPos + iLength; - int iLineCurrent = accStyler.GetLine(uiStartPos); - int iLevelPrev = accStyler.LevelAt(iLineCurrent) & SC_FOLDLEVELNUMBERMASK; - int iLevelCurrent = iLevelPrev; - char chNext = accStyler[uiStartPos]; - int iStyle = iInitStyle; - int iStyleNext = accStyler.StyleAt(uiStartPos); - int iVisibleChars = 0; - int iLastStart = 0; - - for (unsigned int uiPos = uiStartPos; uiPos < uiEndPos; uiPos++) { - - char chChar = chNext; - chNext = accStyler.SafeGetCharAt(uiPos + 1); - int iStylePrev = iStyle; - iStyle = iStyleNext; - iStyleNext = accStyler.StyleAt(uiPos + 1); - bool bEOL = (chChar == '\r' && chNext != '\n') || (chChar == '\n'); - - if (iStylePrev == SCE_CLW_DEFAULT) { - if (iStyle == SCE_CLW_KEYWORD || iStyle == SCE_CLW_STRUCTURE_DATA_TYPE) { - // Store last word start point. - iLastStart = uiPos; - } - } - - if (iStylePrev == SCE_CLW_KEYWORD || iStylePrev == SCE_CLW_STRUCTURE_DATA_TYPE) { - if(iswordchar(chChar) && !iswordchar(chNext)) { - char chBuffer[100]; - FillBuffer(iLastStart, uiPos, accStyler, chBuffer, sizeof(chBuffer)); - iLevelCurrent = ClassifyClarionFoldPoint(iLevelCurrent,chBuffer); - // if ((iLevelCurrent == SC_FOLDLEVELBASE + 1) && iLineCurrent > 1) { - // accStyler.SetLevel(iLineCurrent-1,SC_FOLDLEVELBASE); - // iLevelPrev = SC_FOLDLEVELBASE; - // } - } - } - - if (bEOL) { - int iLevel = iLevelPrev; - if ((iLevelCurrent > iLevelPrev) && (iVisibleChars > 0)) - iLevel |= SC_FOLDLEVELHEADERFLAG; - if (iLevel != accStyler.LevelAt(iLineCurrent)) { - accStyler.SetLevel(iLineCurrent,iLevel); - } - iLineCurrent++; - iLevelPrev = iLevelCurrent; - iVisibleChars = 0; - } - - if (!isspacechar(chChar)) - iVisibleChars++; - } - - // Fill in the real level of the next line, keeping the current flags - // as they will be filled in later. - int iFlagsNext = accStyler.LevelAt(iLineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - accStyler.SetLevel(iLineCurrent, iLevelPrev | iFlagsNext); -} - -// Word List Descriptions -static const char * const rgWordListDescriptions[] = { - "Clarion Keywords", - "Compiler Directives", - "Built-in Procedures and Functions", - "Runtime Expressions", - "Structure and Data Types", - "Attributes", - "Standard Equates", - "Reserved Words (Labels)", - "Reserved Words (Procedure Labels)", - 0, -}; - -// Case Sensitive Clarion Language Lexer -LexerModule lmClw(SCLEX_CLW, ColouriseClarionDocSensitive, "clarion", FoldClarionDoc, rgWordListDescriptions); - -// Case Insensitive Clarion Language Lexer -LexerModule lmClwNoCase(SCLEX_CLWNOCASE, ColouriseClarionDocInsensitive, "clarionnocase", FoldClarionDoc, rgWordListDescriptions); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCPP.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCPP.cxx deleted file mode 100644 index bf089d6cff..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCPP.cxx +++ /dev/null @@ -1,461 +0,0 @@ -// Scintilla source code edit control -/** @file LexCPP.cxx - ** Lexer for C++, C, Java, and JavaScript. - **/ -// Copyright 1998-2005 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -#define KEYWORD_BOXHEADER 1 -#define KEYWORD_FOLDCONTRACTED 2 - -static bool IsOKBeforeRE(int ch) { - return (ch == '(') || (ch == '=') || (ch == ','); -} - -static inline bool IsAWordChar(int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_'); -} - -static inline bool IsAWordStart(int ch) { - return (ch < 0x80) && (isalpha(ch) || ch == '_'); -} - -static inline bool IsADoxygenChar(int ch) { - return (ch < 0x80 && islower(ch)) || ch == '$' || ch == '@' || - ch == '\\' || ch == '&' || ch == '<' || - ch == '>' || ch == '#' || ch == '{' || - ch == '}' || ch == '[' || ch == ']'; -} - -static bool IsSpaceEquiv(int state) { - return (state <= SCE_C_COMMENTDOC) || - // including SCE_C_DEFAULT, SCE_C_COMMENT, SCE_C_COMMENTLINE - (state == SCE_C_COMMENTLINEDOC) || (state == SCE_C_COMMENTDOCKEYWORD) || - (state == SCE_C_COMMENTDOCKEYWORDERROR); -} - -static void ColouriseCppDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler, bool caseSensitive) { - - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; - WordList &keywords4 = *keywordlists[3]; - - bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor") != 0; - - int chPrevNonWhite = ' '; - int visibleChars = 0; - bool lastWordWasUUID = false; - int styleBeforeDCKeyword = SCE_C_DEFAULT; - bool continuationLine = false; - - if (initStyle == SCE_C_PREPROCESSOR) { - // Set continuationLine if last character of previous line is '\' - int lineCurrent = styler.GetLine(startPos); - if (lineCurrent > 0) { - int chBack = styler.SafeGetCharAt(startPos-1, 0); - int chBack2 = styler.SafeGetCharAt(startPos-2, 0); - int lineEndChar = '!'; - if (chBack2 == '\r' && chBack == '\n') { - lineEndChar = styler.SafeGetCharAt(startPos-3, 0); - } else if (chBack == '\n' || chBack == '\r') { - lineEndChar = chBack2; - } - continuationLine = lineEndChar == '\\'; - } - } - - // look back to set chPrevNonWhite properly for better regex colouring - if (startPos > 0) { - int back = startPos; - while (--back && IsSpaceEquiv(styler.StyleAt(back))) - ; - if (styler.StyleAt(back) == SCE_C_OPERATOR) { - chPrevNonWhite = styler.SafeGetCharAt(back); - } - } - - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) { - - if (sc.atLineStart) { - if (sc.state == SCE_C_STRING) { - // Prevent SCE_C_STRINGEOL from leaking back to previous line which - // ends with a line continuation by locking in the state upto this position. - sc.SetState(SCE_C_STRING); - } - // Reset states to begining of colourise so no surprises - // if different sets of lines lexed. - visibleChars = 0; - lastWordWasUUID = false; - } - - // Handle line continuation generically. - if (sc.ch == '\\') { - if (sc.chNext == '\n' || sc.chNext == '\r') { - sc.Forward(); - if (sc.ch == '\r' && sc.chNext == '\n') { - sc.Forward(); - } - continuationLine = true; - continue; - } - } - - // Determine if the current state should terminate. - switch (sc.state) { - case SCE_C_OPERATOR: - sc.SetState(SCE_C_DEFAULT); - break; - case SCE_C_NUMBER: - // We accept almost anything because of hex. and number suffixes - if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_C_DEFAULT); - } - break; - case SCE_C_IDENTIFIER: - if (!IsAWordChar(sc.ch) || (sc.ch == '.')) { - char s[1000]; - if (caseSensitive) { - sc.GetCurrent(s, sizeof(s)); - } else { - sc.GetCurrentLowered(s, sizeof(s)); - } - if (keywords.InList(s)) { - lastWordWasUUID = strcmp(s, "uuid") == 0; - sc.ChangeState(SCE_C_WORD); - } else if (keywords2.InList(s)) { - sc.ChangeState(SCE_C_WORD2); - } else if (keywords4.InList(s)) { - sc.ChangeState(SCE_C_GLOBALCLASS); - } - sc.SetState(SCE_C_DEFAULT); - } - break; - case SCE_C_PREPROCESSOR: - if (sc.atLineStart && !continuationLine) { - sc.SetState(SCE_C_DEFAULT); - } else if (stylingWithinPreprocessor) { - if (IsASpace(sc.ch)) { - sc.SetState(SCE_C_DEFAULT); - } - } else { - if (sc.Match('/', '*') || sc.Match('/', '/')) { - sc.SetState(SCE_C_DEFAULT); - } - } - break; - case SCE_C_COMMENT: - if (sc.Match('*', '/')) { - sc.Forward(); - sc.ForwardSetState(SCE_C_DEFAULT); - } - break; - case SCE_C_COMMENTDOC: - if (sc.Match('*', '/')) { - sc.Forward(); - sc.ForwardSetState(SCE_C_DEFAULT); - } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support - // Verify that we have the conditions to mark a comment-doc-keyword - if ((IsASpace(sc.chPrev) || sc.chPrev == '*') && (!IsASpace(sc.chNext))) { - styleBeforeDCKeyword = SCE_C_COMMENTDOC; - sc.SetState(SCE_C_COMMENTDOCKEYWORD); - } - } - break; - case SCE_C_COMMENTLINE: - if (sc.atLineStart) { - sc.SetState(SCE_C_DEFAULT); - } - break; - case SCE_C_COMMENTLINEDOC: - if (sc.atLineStart) { - sc.SetState(SCE_C_DEFAULT); - } else if (sc.ch == '@' || sc.ch == '\\') { // JavaDoc and Doxygen support - // Verify that we have the conditions to mark a comment-doc-keyword - if ((IsASpace(sc.chPrev) || sc.chPrev == '/' || sc.chPrev == '!') && (!IsASpace(sc.chNext))) { - styleBeforeDCKeyword = SCE_C_COMMENTLINEDOC; - sc.SetState(SCE_C_COMMENTDOCKEYWORD); - } - } - break; - case SCE_C_COMMENTDOCKEYWORD: - if ((styleBeforeDCKeyword == SCE_C_COMMENTDOC) && sc.Match('*', '/')) { - sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR); - sc.Forward(); - sc.ForwardSetState(SCE_C_DEFAULT); - } else if (!IsADoxygenChar(sc.ch)) { - char s[100]; - if (caseSensitive) { - sc.GetCurrent(s, sizeof(s)); - } else { - sc.GetCurrentLowered(s, sizeof(s)); - } - if (!isspace(sc.ch) || !keywords3.InList(s + 1)) { - sc.ChangeState(SCE_C_COMMENTDOCKEYWORDERROR); - } - sc.SetState(styleBeforeDCKeyword); - } - break; - case SCE_C_STRING: - if (sc.atLineEnd) { - sc.ChangeState(SCE_C_STRINGEOL); - } else if (sc.ch == '\\') { - if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') { - sc.Forward(); - } - } else if (sc.ch == '\"') { - sc.ForwardSetState(SCE_C_DEFAULT); - } - break; - case SCE_C_CHARACTER: - if (sc.atLineEnd) { - sc.ChangeState(SCE_C_STRINGEOL); - } else if (sc.ch == '\\') { - if (sc.chNext == '\"' || sc.chNext == '\'' || sc.chNext == '\\') { - sc.Forward(); - } - } else if (sc.ch == '\'') { - sc.ForwardSetState(SCE_C_DEFAULT); - } - break; - case SCE_C_REGEX: - if (sc.atLineStart) { - sc.SetState(SCE_C_DEFAULT); - } else if (sc.ch == '/') { - sc.Forward(); - while ((sc.ch < 0x80) && islower(sc.ch)) - sc.Forward(); // gobble regex flags - sc.SetState(SCE_C_DEFAULT); - } else if (sc.ch == '\\') { - // Gobble up the quoted character - if (sc.chNext == '\\' || sc.chNext == '/') { - sc.Forward(); - } - } - break; - case SCE_C_STRINGEOL: - if (sc.atLineStart) { - sc.SetState(SCE_C_DEFAULT); - } - break; - case SCE_C_VERBATIM: - if (sc.ch == '\"') { - if (sc.chNext == '\"') { - sc.Forward(); - } else { - sc.ForwardSetState(SCE_C_DEFAULT); - } - } - break; - case SCE_C_UUID: - if (sc.ch == '\r' || sc.ch == '\n' || sc.ch == ')') { - sc.SetState(SCE_C_DEFAULT); - } - } - - // Determine if a new state should be entered. - if (sc.state == SCE_C_DEFAULT) { - if (sc.Match('@', '\"')) { - sc.SetState(SCE_C_VERBATIM); - sc.Forward(); - } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - if (lastWordWasUUID) { - sc.SetState(SCE_C_UUID); - lastWordWasUUID = false; - } else { - sc.SetState(SCE_C_NUMBER); - } - } else if (IsAWordStart(sc.ch) || (sc.ch == '@')) { - if (lastWordWasUUID) { - sc.SetState(SCE_C_UUID); - lastWordWasUUID = false; - } else { - sc.SetState(SCE_C_IDENTIFIER); - } - } else if (sc.Match('/', '*')) { - if (sc.Match("/**") || sc.Match("/*!")) { // Support of Qt/Doxygen doc. style - sc.SetState(SCE_C_COMMENTDOC); - } else { - sc.SetState(SCE_C_COMMENT); - } - sc.Forward(); // Eat the * so it isn't used for the end of the comment - } else if (sc.Match('/', '/')) { - if ((sc.Match("///") && !sc.Match("////")) || sc.Match("//!")) - // Support of Qt/Doxygen doc. style - sc.SetState(SCE_C_COMMENTLINEDOC); - else - sc.SetState(SCE_C_COMMENTLINE); - } else if (sc.ch == '/' && IsOKBeforeRE(chPrevNonWhite)) { - sc.SetState(SCE_C_REGEX); // JavaScript's RegEx - } else if (sc.ch == '\"') { - sc.SetState(SCE_C_STRING); - } else if (sc.ch == '\'') { - sc.SetState(SCE_C_CHARACTER); - } else if (sc.ch == '#' && visibleChars == 0) { - // Preprocessor commands are alone on their line - sc.SetState(SCE_C_PREPROCESSOR); - // Skip whitespace between # and preprocessor word - do { - sc.Forward(); - } while ((sc.ch == ' ' || sc.ch == '\t') && sc.More()); - if (sc.atLineEnd) { - sc.SetState(SCE_C_DEFAULT); - } - } else if (isoperator(static_cast(sc.ch))) { - sc.SetState(SCE_C_OPERATOR); - } - } - - if (!IsASpace(sc.ch) && !IsSpaceEquiv(sc.state)) { - chPrevNonWhite = sc.ch; - visibleChars++; - } - continuationLine = false; - } - sc.Complete(); -} - -static bool IsStreamCommentStyle(int style) { - return style == SCE_C_COMMENT || - style == SCE_C_COMMENTDOC || - style == SCE_C_COMMENTDOCKEYWORD || - style == SCE_C_COMMENTDOCKEYWORDERROR; -} - -// Store both the current line's fold level and the next lines in the -// level store to make it easy to pick up with each increment -// and to make it possible to fiddle the current level for "} else {". -static void FoldNoBoxCppDoc(unsigned int startPos, int length, int initStyle, - Accessor &styler) { - bool foldComment = styler.GetPropertyInt("fold.comment") != 0; - bool foldPreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0; - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0; - unsigned int endPos = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelCurrent = SC_FOLDLEVELBASE; - if (lineCurrent > 0) - levelCurrent = styler.LevelAt(lineCurrent-1) >> 16; - int levelMinCurrent = levelCurrent; - int levelNext = levelCurrent; - char chNext = styler[startPos]; - int styleNext = styler.StyleAt(startPos); - int style = initStyle; - for (unsigned int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int stylePrev = style; - style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - if (foldComment && IsStreamCommentStyle(style)) { - if (!IsStreamCommentStyle(stylePrev)) { - levelNext++; - } else if (!IsStreamCommentStyle(styleNext) && !atEOL) { - // Comments don't end at end of line and the next character may be unstyled. - levelNext--; - } - } - if (foldComment && (style == SCE_C_COMMENTLINE)) { - if ((ch == '/') && (chNext == '/')) { - char chNext2 = styler.SafeGetCharAt(i + 2); - if (chNext2 == '{') { - levelNext++; - } else if (chNext2 == '}') { - levelNext--; - } - } - } - if (foldPreprocessor && (style == SCE_C_PREPROCESSOR)) { - if (ch == '#') { - unsigned int j = i + 1; - while ((j < endPos) && IsASpaceOrTab(styler.SafeGetCharAt(j))) { - j++; - } - if (styler.Match(j, "region") || styler.Match(j, "if")) { - levelNext++; - } else if (styler.Match(j, "end")) { - levelNext--; - } - } - } - if (style == SCE_C_OPERATOR) { - if (ch == '{') { - // Measure the minimum before a '{' to allow - // folding on "} else {" - if (levelMinCurrent > levelNext) { - levelMinCurrent = levelNext; - } - levelNext++; - } else if (ch == '}') { - levelNext--; - } - } - if (atEOL) { - int levelUse = levelCurrent; - if (foldAtElse) { - levelUse = levelMinCurrent; - } - int lev = levelUse | levelNext << 16; - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - if (levelUse < levelNext) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelCurrent = levelNext; - levelMinCurrent = levelCurrent; - visibleChars = 0; - } - if (!isspacechar(ch)) - visibleChars++; - } -} - -static void FoldCppDoc(unsigned int startPos, int length, int initStyle, WordList *[], - Accessor &styler) { - FoldNoBoxCppDoc(startPos, length, initStyle, styler); -} - -static const char * const cppWordLists[] = { - "Primary keywords and identifiers", - "Secondary keywords and identifiers", - "Documentation comment keywords", - "Unused", - "Global classes and typedefs", - 0, - }; - -static void ColouriseCppDocSensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - ColouriseCppDoc(startPos, length, initStyle, keywordlists, styler, true); -} - -static void ColouriseCppDocInsensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - ColouriseCppDoc(startPos, length, initStyle, keywordlists, styler, false); -} - -LexerModule lmCPP(SCLEX_CPP, ColouriseCppDocSensitive, "cpp", FoldCppDoc, cppWordLists); -LexerModule lmCPPNoCase(SCLEX_CPPNOCASE, ColouriseCppDocInsensitive, "cppnocase", FoldCppDoc, cppWordLists); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCSS.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCSS.cxx deleted file mode 100644 index 963a7b3ef7..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCSS.cxx +++ /dev/null @@ -1,303 +0,0 @@ -// Scintilla source code edit control -/** @file LexCSS.cxx - ** Lexer for Cascading Style Sheets - ** Written by Jakub Vrána - ** Improved by Philippe Lhoste (CSS2) - **/ -// Copyright 1998-2002 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - - -static inline bool IsAWordChar(const unsigned int ch) { - return (isalnum(ch) || ch == '-' || ch == '_' || ch >= 161); // _ is not in fact correct CSS word-character -} - -inline bool IsCssOperator(const char ch) { - if (!isalnum(ch) && - (ch == '{' || ch == '}' || ch == ':' || ch == ',' || ch == ';' || - ch == '.' || ch == '#' || ch == '!' || ch == '@' || - /* CSS2 */ - ch == '*' || ch == '>' || ch == '+' || ch == '=' || ch == '~' || ch == '|' || - ch == '[' || ch == ']' || ch == '(' || ch == ')')) { - return true; - } - return false; -} - -static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor &styler) { - WordList &keywords = *keywordlists[0]; - WordList &pseudoClasses = *keywordlists[1]; - WordList &keywords2 = *keywordlists[2]; - - StyleContext sc(startPos, length, initStyle, styler); - - int lastState = -1; // before operator - int lastStateC = -1; // before comment - int op = ' '; // last operator - - for (; sc.More(); sc.Forward()) { - if (sc.state == SCE_CSS_COMMENT && sc.Match('*', '/')) { - if (lastStateC == -1) { - // backtrack to get last state: - // comments are like whitespace, so we must return to the previous state - unsigned int i = startPos; - for (; i > 0; i--) { - if ((lastStateC = styler.StyleAt(i-1)) != SCE_CSS_COMMENT) { - if (lastStateC == SCE_CSS_OPERATOR) { - op = styler.SafeGetCharAt(i-1); - while (--i) { - lastState = styler.StyleAt(i-1); - if (lastState != SCE_CSS_OPERATOR && lastState != SCE_CSS_COMMENT) - break; - } - if (i == 0) - lastState = SCE_CSS_DEFAULT; - } - break; - } - } - if (i == 0) - lastStateC = SCE_CSS_DEFAULT; - } - sc.Forward(); - sc.ForwardSetState(lastStateC); - } - - if (sc.state == SCE_CSS_COMMENT) - continue; - - if (sc.state == SCE_CSS_DOUBLESTRING || sc.state == SCE_CSS_SINGLESTRING) { - if (sc.ch != (sc.state == SCE_CSS_DOUBLESTRING ? '\"' : '\'')) - continue; - unsigned int i = sc.currentPos; - while (i && styler[i-1] == '\\') - i--; - if ((sc.currentPos - i) % 2 == 1) - continue; - sc.ForwardSetState(SCE_CSS_VALUE); - } - - if (sc.state == SCE_CSS_OPERATOR) { - if (op == ' ') { - unsigned int i = startPos; - op = styler.SafeGetCharAt(i-1); - while (--i) { - lastState = styler.StyleAt(i-1); - if (lastState != SCE_CSS_OPERATOR && lastState != SCE_CSS_COMMENT) - break; - } - } - switch (op) { - case '@': - if (lastState == SCE_CSS_DEFAULT) - sc.SetState(SCE_CSS_DIRECTIVE); - break; - case '*': - if (lastState == SCE_CSS_DEFAULT) - sc.SetState(SCE_CSS_TAG); - break; - case '>': - case '+': - if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_CLASS - || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS) - sc.SetState(SCE_CSS_DEFAULT); - break; - case '[': - if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT || - lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS) - sc.SetState(SCE_CSS_ATTRIBUTE); - break; - case ']': - if (lastState == SCE_CSS_ATTRIBUTE) - sc.SetState(SCE_CSS_TAG); - break; - case '{': - if (lastState == SCE_CSS_DIRECTIVE) - sc.SetState(SCE_CSS_DEFAULT); - else if (lastState == SCE_CSS_TAG) - sc.SetState(SCE_CSS_IDENTIFIER); - break; - case '}': - if (lastState == SCE_CSS_DEFAULT || lastState == SCE_CSS_VALUE || lastState == SCE_CSS_IMPORTANT || - lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_IDENTIFIER2) - sc.SetState(SCE_CSS_DEFAULT); - break; - case ':': - if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT || - lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS) - sc.SetState(SCE_CSS_PSEUDOCLASS); - else if (lastState == SCE_CSS_IDENTIFIER || lastState == SCE_CSS_IDENTIFIER2 || lastState == SCE_CSS_UNKNOWN_IDENTIFIER) - sc.SetState(SCE_CSS_VALUE); - break; - case '.': - if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT || - lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS) - sc.SetState(SCE_CSS_CLASS); - break; - case '#': - if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_PSEUDOCLASS || lastState == SCE_CSS_DEFAULT || - lastState == SCE_CSS_CLASS || lastState == SCE_CSS_ID || lastState == SCE_CSS_UNKNOWN_PSEUDOCLASS) - sc.SetState(SCE_CSS_ID); - break; - case ',': - if (lastState == SCE_CSS_TAG) - sc.SetState(SCE_CSS_DEFAULT); - break; - case ';': - if (lastState == SCE_CSS_DIRECTIVE) - sc.SetState(SCE_CSS_DEFAULT); - else if (lastState == SCE_CSS_VALUE || lastState == SCE_CSS_IMPORTANT) - sc.SetState(SCE_CSS_IDENTIFIER); - break; - case '!': - if (lastState == SCE_CSS_VALUE) - sc.SetState(SCE_CSS_IMPORTANT); - break; - } - } - - if (IsAWordChar(sc.ch)) { - if (sc.state == SCE_CSS_DEFAULT) - sc.SetState(SCE_CSS_TAG); - continue; - } - - if (IsAWordChar(sc.chPrev) && ( - sc.state == SCE_CSS_IDENTIFIER || sc.state == SCE_CSS_IDENTIFIER2 - || sc.state == SCE_CSS_UNKNOWN_IDENTIFIER - || sc.state == SCE_CSS_PSEUDOCLASS || sc.state == SCE_CSS_UNKNOWN_PSEUDOCLASS - || sc.state == SCE_CSS_IMPORTANT - )) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - char *s2 = s; - while (*s2 && !IsAWordChar(*s2)) - s2++; - switch (sc.state) { - case SCE_CSS_IDENTIFIER: - if (!keywords.InList(s2)) { - if (keywords2.InList(s2)) { - sc.ChangeState(SCE_CSS_IDENTIFIER2); - } else { - sc.ChangeState(SCE_CSS_UNKNOWN_IDENTIFIER); - } - } - break; - case SCE_CSS_UNKNOWN_IDENTIFIER: - if (keywords.InList(s2)) - sc.ChangeState(SCE_CSS_IDENTIFIER); - else if (keywords2.InList(s2)) - sc.ChangeState(SCE_CSS_IDENTIFIER2); - break; - case SCE_CSS_PSEUDOCLASS: - if (!pseudoClasses.InList(s2)) - sc.ChangeState(SCE_CSS_UNKNOWN_PSEUDOCLASS); - break; - case SCE_CSS_UNKNOWN_PSEUDOCLASS: - if (pseudoClasses.InList(s2)) - sc.ChangeState(SCE_CSS_PSEUDOCLASS); - break; - case SCE_CSS_IMPORTANT: - if (strcmp(s2, "important") != 0) - sc.ChangeState(SCE_CSS_VALUE); - break; - } - } - - if (sc.ch != '.' && sc.ch != ':' && sc.ch != '#' && (sc.state == SCE_CSS_CLASS || sc.state == SCE_CSS_PSEUDOCLASS || sc.state == SCE_CSS_UNKNOWN_PSEUDOCLASS || sc.state == SCE_CSS_ID)) - sc.SetState(SCE_CSS_TAG); - - if (sc.Match('/', '*')) { - lastStateC = sc.state; - sc.SetState(SCE_CSS_COMMENT); - sc.Forward(); - } else if (sc.state == SCE_CSS_VALUE && (sc.ch == '\"' || sc.ch == '\'')) { - sc.SetState((sc.ch == '\"' ? SCE_CSS_DOUBLESTRING : SCE_CSS_SINGLESTRING)); - } else if (IsCssOperator(static_cast(sc.ch)) - && (sc.state != SCE_CSS_ATTRIBUTE || sc.ch == ']') - && (sc.state != SCE_CSS_VALUE || sc.ch == ';' || sc.ch == '}' || sc.ch == '!') - && (sc.state != SCE_CSS_DIRECTIVE || sc.ch == ';' || sc.ch == '{') - ) { - if (sc.state != SCE_CSS_OPERATOR) - lastState = sc.state; - sc.SetState(SCE_CSS_OPERATOR); - op = sc.ch; - } - } - - sc.Complete(); -} - -static void FoldCSSDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) { - bool foldComment = styler.GetPropertyInt("fold.comment") != 0; - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - unsigned int endPos = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler[startPos]; - bool inComment = (styler.StyleAt(startPos-1) == SCE_CSS_COMMENT); - for (unsigned int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int style = styler.StyleAt(i); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - if (foldComment) { - if (!inComment && (style == SCE_CSS_COMMENT)) - levelCurrent++; - else if (inComment && (style != SCE_CSS_COMMENT)) - levelCurrent--; - inComment = (style == SCE_CSS_COMMENT); - } - if (style == SCE_CSS_OPERATOR) { - if (ch == '{') { - levelCurrent++; - } else if (ch == '}') { - levelCurrent--; - } - } - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - } - if (!isspacechar(ch)) - visibleChars++; - } - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - -static const char * const cssWordListDesc[] = { - "CSS1 Keywords", - "Pseudo classes", - "CSS2 Keywords", - 0 -}; - -LexerModule lmCss(SCLEX_CSS, ColouriseCssDoc, "css", FoldCSSDoc, cssWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCaml.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCaml.cxx deleted file mode 100644 index 5f4fad5fb8..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCaml.cxx +++ /dev/null @@ -1,399 +0,0 @@ -// Scintilla source code edit control -/** @file LexCaml.cxx - ** Lexer for Objective Caml. - **/ -// Copyright 2005 by Robert Roessler -// The License.txt file describes the conditions under which this software may be distributed. -/* Release History - 20050204 Initial release. - 20050205 Quick compiler standards/"cleanliness" adjustment. - 20050206 Added cast for IsLeadByte(). - 20050209 Changes to "external" build support. - 20050306 Fix for 1st-char-in-doc "corner" case. - 20050502 Fix for [harmless] one-past-the-end coloring. - 20050515 Refined numeric token recognition logic. - 20051125 Added 2nd "optional" keywords class. - 20051129 Support "magic" (read-only) comments for RCaml. - 20051204 Swtich to using StyleContext infrastructure. -*/ - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -// Since the Microsoft __iscsym[f] funcs are not ANSI... -inline int iscaml(int c) {return isalnum(c) || c == '_';} -inline int iscamlf(int c) {return isalpha(c) || c == '_';} -inline int iscamld(int c) {return isdigit(c) || c == '_';} - -static const int baseT[24] = { - 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A - L */ - 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,16 /* M - X */ -}; - -#ifdef BUILD_AS_EXTERNAL_LEXER -/* - (actually seems to work!) -*/ -#include "WindowAccessor.h" -#include "ExternalLexer.h" - -#if PLAT_WIN -#include -#endif - -static void ColouriseCamlDoc( - unsigned int startPos, int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler); - -static void FoldCamlDoc( - unsigned int startPos, int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler); - -static void InternalLexOrFold(int lexOrFold, unsigned int startPos, int length, - int initStyle, char *words[], WindowID window, char *props); - -static const char* LexerName = "caml"; - -#ifdef TRACE -void Platform::DebugPrintf(const char *format, ...) { - char buffer[2000]; - va_list pArguments; - va_start(pArguments, format); - vsprintf(buffer,format,pArguments); - va_end(pArguments); - Platform::DebugDisplay(buffer); -} -#else -void Platform::DebugPrintf(const char *, ...) { -} -#endif - -bool Platform::IsDBCSLeadByte(int codePage, char ch) { - return ::IsDBCSLeadByteEx(codePage, ch) != 0; -} - -long Platform::SendScintilla(WindowID w, unsigned int msg, unsigned long wParam, long lParam) { - return ::SendMessage(reinterpret_cast(w), msg, wParam, lParam); -} - -long Platform::SendScintillaPointer(WindowID w, unsigned int msg, unsigned long wParam, void *lParam) { - return ::SendMessage(reinterpret_cast(w), msg, wParam, - reinterpret_cast(lParam)); -} - -void EXT_LEXER_DECL Fold(unsigned int lexer, unsigned int startPos, int length, - int initStyle, char *words[], WindowID window, char *props) -{ - // below useless evaluation(s) to supress "not used" warnings - lexer; - // build expected data structures and do the Fold - InternalLexOrFold(1, startPos, length, initStyle, words, window, props); - -} - -int EXT_LEXER_DECL GetLexerCount() -{ - return 1; // just us [Objective] Caml lexers here! -} - -void EXT_LEXER_DECL GetLexerName(unsigned int Index, char *name, int buflength) -{ - // below useless evaluation(s) to supress "not used" warnings - Index; - // return as much of our lexer name as will fit (what's up with Index?) - if (buflength > 0) { - buflength--; - int n = strlen(LexerName); - if (n > buflength) - n = buflength; - memcpy(name, LexerName, n), name[n] = '\0'; - } -} - -void EXT_LEXER_DECL Lex(unsigned int lexer, unsigned int startPos, int length, - int initStyle, char *words[], WindowID window, char *props) -{ - // below useless evaluation(s) to supress "not used" warnings - lexer; - // build expected data structures and do the Lex - InternalLexOrFold(0, startPos, length, initStyle, words, window, props); -} - -static void InternalLexOrFold(int foldOrLex, unsigned int startPos, int length, - int initStyle, char *words[], WindowID window, char *props) -{ - // create and initialize a WindowAccessor (including contained PropSet) - PropSet ps; - ps.SetMultiple(props); - WindowAccessor wa(window, ps); - // create and initialize WordList(s) - int nWL = 0; - for (; words[nWL]; nWL++) ; // count # of WordList PTRs needed - WordList** wl = new WordList* [nWL + 1];// alloc WordList PTRs - int i = 0; - for (; i < nWL; i++) { - wl[i] = new WordList(); // (works or THROWS bad_alloc EXCEPTION) - wl[i]->Set(words[i]); - } - wl[i] = 0; - // call our "internal" folder/lexer (... then do Flush!) - if (foldOrLex) - FoldCamlDoc(startPos, length, initStyle, wl, wa); - else - ColouriseCamlDoc(startPos, length, initStyle, wl, wa); - wa.Flush(); - // clean up before leaving - for (i = nWL - 1; i >= 0; i--) - delete wl[i]; - delete [] wl; -} - -static -#endif /* BUILD_AS_EXTERNAL_LEXER */ - -void ColouriseCamlDoc( - unsigned int startPos, int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler) -{ - // initialize styler - StyleContext sc(startPos, length, initStyle, styler); - // set up [initial] state info (terminating states that shouldn't "bleed") - int nesting = 0; - if (sc.state < SCE_CAML_STRING) - sc.state = SCE_CAML_DEFAULT; - if (sc.state >= SCE_CAML_COMMENT) - nesting = (sc.state & 0x0f) - SCE_CAML_COMMENT; - - int chBase = 0, chToken = 0, chLit = 0; - WordList& keywords = *keywordlists[0]; - WordList& keywords2 = *keywordlists[1]; - WordList& keywords3 = *keywordlists[2]; - const int useMagic = styler.GetPropertyInt("lexer.caml.magic", 0); - - // foreach char in range... - while (sc.More()) { - // set up [per-char] state info - int state2 = -1; // (ASSUME no state change) - int chColor = sc.currentPos - 1;// (ASSUME standard coloring range) - bool advance = true; // (ASSUME scanner "eats" 1 char) - - // step state machine - switch (sc.state & 0x0f) { - case SCE_CAML_DEFAULT: - chToken = sc.currentPos; // save [possible] token start (JIC) - // it's wide open; what do we have? - if (iscamlf(sc.ch)) - state2 = SCE_CAML_IDENTIFIER; - else if (sc.Match('`') && iscamlf(sc.chNext)) - state2 = SCE_CAML_TAGNAME; - else if (sc.Match('#') && isdigit(sc.chNext)) - state2 = SCE_CAML_LINENUM; - else if (isdigit(sc.ch)) { - state2 = SCE_CAML_NUMBER, chBase = 10; - if (sc.Match('0') && strchr("bBoOxX", sc.chNext)) - chBase = baseT[tolower(sc.chNext) - 'a'], sc.Forward(); - } else if (sc.Match('\'')) /* (char literal?) */ - state2 = SCE_CAML_CHAR, chLit = 0; - else if (sc.Match('\"')) - state2 = SCE_CAML_STRING; - else if (sc.Match('(', '*')) - state2 = SCE_CAML_COMMENT, - sc.ch = ' ', // (make SURE "(*)" isn't seen as a closed comment) - sc.Forward(); - else if (strchr("!?~" /* Caml "prefix-symbol" */ - "=<>@^|&+-*/$%" /* Caml "infix-symbol" */ - "()[]{};,:.#", sc.ch)) /* Caml "bracket" or ;,:.# */ - state2 = SCE_CAML_OPERATOR; - break; - - case SCE_CAML_IDENTIFIER: - // [try to] interpret as [additional] identifier char - if (!(iscaml(sc.ch) || sc.Match('\''))) { - const int n = sc.currentPos - chToken; - if (n < 24) { - // length is believable as keyword, [re-]construct token - char t[24]; - for (int i = -n; i < 0; i++) - t[n + i] = static_cast(sc.GetRelative(i)); - t[n] = '\0'; - // special-case "_" token as KEYWORD - if ((n == 1 && sc.chPrev == '_') || keywords.InList(t)) - sc.ChangeState(SCE_CAML_KEYWORD); - else if (keywords2.InList(t)) - sc.ChangeState(SCE_CAML_KEYWORD2); - else if (keywords3.InList(t)) - sc.ChangeState(SCE_CAML_KEYWORD3); - } - state2 = SCE_CAML_DEFAULT, advance = false; - } - break; - - case SCE_CAML_TAGNAME: - // [try to] interpret as [additional] tagname char - if (!(iscaml(sc.ch) || sc.Match('\''))) - state2 = SCE_CAML_DEFAULT, advance = false; - break; - - /*case SCE_CAML_KEYWORD: - case SCE_CAML_KEYWORD2: - case SCE_CAML_KEYWORD3: - // [try to] interpret as [additional] keyword char - if (!iscaml(ch)) - state2 = SCE_CAML_DEFAULT, advance = false; - break;*/ - - case SCE_CAML_LINENUM: - // [try to] interpret as [additional] linenum directive char - if (!isdigit(sc.ch)) - state2 = SCE_CAML_DEFAULT, advance = false; - break; - - case SCE_CAML_OPERATOR: { - // [try to] interpret as [additional] operator char - const char* o = 0; - if (iscaml(sc.ch) || isspace(sc.ch) /* ident or whitespace */ - || (o = strchr(")]};,\'\"`#", sc.ch),o)/* "termination" chars */ - || !strchr("!$%&*+-./:<=>?@^|~", sc.ch)/* "operator" chars */) { - // check for INCLUSIVE termination - if (o && strchr(")]};,", sc.ch)) { - if ((sc.Match(')') && sc.chPrev == '(') - || (sc.Match(']') && sc.chPrev == '[')) - // special-case "()" and "[]" tokens as KEYWORDS - sc.ChangeState(SCE_CAML_KEYWORD); - chColor++; - } else - advance = false; - state2 = SCE_CAML_DEFAULT; - } - break; - } - - case SCE_CAML_NUMBER: - // [try to] interpret as [additional] numeric literal char - // N.B. - improperly accepts "extra" digits in base 2 or 8 literals - if (iscamld(sc.ch) || IsADigit(sc.ch, chBase)) - break; - // how about an integer suffix? - if ((sc.Match('l') || sc.Match('L') || sc.Match('n')) - && (iscamld(sc.chPrev) || IsADigit(sc.chPrev, chBase))) - break; - // or a floating-point literal? - if (chBase == 10) { - // with a decimal point? - if (sc.Match('.') && iscamld(sc.chPrev)) - break; - // with an exponent? (I) - if ((sc.Match('e') || sc.Match('E')) - && (iscamld(sc.chPrev) || sc.chPrev == '.')) - break; - // with an exponent? (II) - if ((sc.Match('+') || sc.Match('-')) - && (sc.chPrev == 'e' || sc.chPrev == 'E')) - break; - } - // it looks like we have run out of number - state2 = SCE_CAML_DEFAULT, advance = false; - break; - - case SCE_CAML_CHAR: - // [try to] interpret as [additional] char literal char - if (sc.Match('\\')) { - chLit = 1; // (definitely IS a char literal) - if (sc.chPrev == '\\') - sc.ch = ' '; // (so termination test isn't fooled) - // should we be terminating - one way or another? - } else if ((sc.Match('\'') && sc.chPrev != '\\') || sc.atLineEnd) { - state2 = SCE_CAML_DEFAULT; - if (sc.Match('\'')) - chColor++; - else - sc.ChangeState(SCE_CAML_IDENTIFIER); - // ... maybe a char literal, maybe not - } else if (chLit < 1 && sc.currentPos - chToken >= 2) - sc.ChangeState(SCE_CAML_IDENTIFIER), advance = false; - break; - - case SCE_CAML_STRING: - // [try to] interpret as [additional] string literal char - if (sc.Match('\\') && sc.chPrev == '\\') - sc.ch = ' '; // (so '\\' doesn't cause us trouble) - else if (sc.Match('\"') && sc.chPrev != '\\') - state2 = SCE_CAML_DEFAULT, chColor++; - break; - - case SCE_CAML_COMMENT: - case SCE_CAML_COMMENT1: - case SCE_CAML_COMMENT2: - case SCE_CAML_COMMENT3: - // we're IN a comment - does this start a NESTED comment? - if (sc.Match('(', '*')) - state2 = sc.state + 1, chToken = sc.currentPos, - sc.ch = ' ', // (make SURE "(*)" isn't seen as a closed comment) - sc.Forward(), nesting++; - // [try to] interpret as [additional] comment char - else if (sc.Match(')') && sc.chPrev == '*') { - if (nesting) - state2 = (sc.state & 0x0f) - 1, chToken = 0, nesting--; - else - state2 = SCE_CAML_DEFAULT; - chColor++; - // enable "magic" (read-only) comment AS REQUIRED - } else if (useMagic && sc.currentPos - chToken == 4 - && sc.Match('c') && sc.chPrev == 'r' && sc.GetRelative(-2) == '@') - sc.state |= 0x10; // (switch to read-only comment style) - break; - } - - // handle state change and char coloring as required - if (state2 >= 0) - styler.ColourTo(chColor, sc.state), sc.ChangeState(state2); - // move to next char UNLESS re-scanning current char - if (advance) - sc.Forward(); - } - - // do any required terminal char coloring (JIC) - sc.Complete(); -} - -#ifdef BUILD_AS_EXTERNAL_LEXER -static -#endif /* BUILD_AS_EXTERNAL_LEXER */ -void FoldCamlDoc( - unsigned int startPos, int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler) -{ - // below useless evaluation(s) to supress "not used" warnings - startPos || length || initStyle || keywordlists[0] || styler.Length(); -} - -static const char * const camlWordListDesc[] = { - "Keywords", // primary Objective Caml keywords - "Keywords2", // "optional" keywords (typically from Pervasives) - "Keywords3", // "optional" keywords (typically typenames) - 0 -}; - -#ifndef BUILD_AS_EXTERNAL_LEXER -LexerModule lmCaml(SCLEX_CAML, ColouriseCamlDoc, "caml", FoldCamlDoc, camlWordListDesc); -#endif /* BUILD_AS_EXTERNAL_LEXER */ diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexConf.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexConf.cxx deleted file mode 100644 index c33cdb5ce6..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexConf.cxx +++ /dev/null @@ -1,184 +0,0 @@ -// Scintilla source code edit control -/** @file LexConf.cxx - ** Lexer for Apache Configuration Files. - ** - ** First working version contributed by Ahmad Zawawi on October 28, 2000. - ** i created this lexer because i needed something pretty when dealing - ** when Apache Configuration files... - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -static void ColouriseConfDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) -{ - int state = SCE_CONF_DEFAULT; - char chNext = styler[startPos]; - int lengthDoc = startPos + length; - // create a buffer large enough to take the largest chunk... - char *buffer = new char[length]; - int bufferCount = 0; - - // this assumes that we have 2 keyword list in conf.properties - WordList &directives = *keywordLists[0]; - WordList ¶ms = *keywordLists[1]; - - // go through all provided text segment - // using the hand-written state machine shown below - styler.StartAt(startPos); - styler.StartSegment(startPos); - for (int i = startPos; i < lengthDoc; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - - if (styler.IsLeadByte(ch)) { - chNext = styler.SafeGetCharAt(i + 2); - i++; - continue; - } - switch(state) { - case SCE_CONF_DEFAULT: - if( ch == '\n' || ch == '\r' || ch == '\t' || ch == ' ') { - // whitespace is simply ignored here... - styler.ColourTo(i,SCE_CONF_DEFAULT); - break; - } else if( ch == '#' ) { - // signals the start of a comment... - state = SCE_CONF_COMMENT; - styler.ColourTo(i,SCE_CONF_COMMENT); - } else if( ch == '.' /*|| ch == '/'*/) { - // signals the start of a file... - state = SCE_CONF_EXTENSION; - styler.ColourTo(i,SCE_CONF_EXTENSION); - } else if( ch == '"') { - state = SCE_CONF_STRING; - styler.ColourTo(i,SCE_CONF_STRING); - } else if( ispunct(ch) ) { - // signals an operator... - // no state jump necessary for this - // simple case... - styler.ColourTo(i,SCE_CONF_OPERATOR); - } else if( isalpha(ch) ) { - // signals the start of an identifier - bufferCount = 0; - buffer[bufferCount++] = static_cast(tolower(ch)); - state = SCE_CONF_IDENTIFIER; - } else if( isdigit(ch) ) { - // signals the start of a number - bufferCount = 0; - buffer[bufferCount++] = ch; - //styler.ColourTo(i,SCE_CONF_NUMBER); - state = SCE_CONF_NUMBER; - } else { - // style it the default style.. - styler.ColourTo(i,SCE_CONF_DEFAULT); - } - break; - - case SCE_CONF_COMMENT: - // if we find a newline here, - // we simply go to default state - // else continue to work on it... - if( ch == '\n' || ch == '\r' ) { - state = SCE_CONF_DEFAULT; - } else { - styler.ColourTo(i,SCE_CONF_COMMENT); - } - break; - - case SCE_CONF_EXTENSION: - // if we find a non-alphanumeric char, - // we simply go to default state - // else we're still dealing with an extension... - if( isalnum(ch) || (ch == '_') || - (ch == '-') || (ch == '$') || - (ch == '/') || (ch == '.') || (ch == '*') ) - { - styler.ColourTo(i,SCE_CONF_EXTENSION); - } else { - state = SCE_CONF_DEFAULT; - chNext = styler[i--]; - } - break; - - case SCE_CONF_STRING: - // if we find the end of a string char, we simply go to default state - // else we're still dealing with an string... - if( (ch == '"' && styler.SafeGetCharAt(i-1)!='\\') || (ch == '\n') || (ch == '\r') ) { - state = SCE_CONF_DEFAULT; - } - styler.ColourTo(i,SCE_CONF_STRING); - break; - - case SCE_CONF_IDENTIFIER: - // stay in CONF_IDENTIFIER state until we find a non-alphanumeric - if( isalnum(ch) || (ch == '_') || (ch == '-') || (ch == '/') || (ch == '$') || (ch == '.') || (ch == '*')) { - buffer[bufferCount++] = static_cast(tolower(ch)); - } else { - state = SCE_CONF_DEFAULT; - buffer[bufferCount] = '\0'; - - // check if the buffer contains a keyword, and highlight it if it is a keyword... - if(directives.InList(buffer)) { - styler.ColourTo(i-1,SCE_CONF_DIRECTIVE ); - } else if(params.InList(buffer)) { - styler.ColourTo(i-1,SCE_CONF_PARAMETER ); - } else if(strchr(buffer,'/') || strchr(buffer,'.')) { - styler.ColourTo(i-1,SCE_CONF_EXTENSION); - } else { - styler.ColourTo(i-1,SCE_CONF_DEFAULT); - } - - // push back the faulty character - chNext = styler[i--]; - - } - break; - - case SCE_CONF_NUMBER: - // stay in CONF_NUMBER state until we find a non-numeric - if( isdigit(ch) || ch == '.') { - buffer[bufferCount++] = ch; - } else { - state = SCE_CONF_DEFAULT; - buffer[bufferCount] = '\0'; - - // Colourize here... - if( strchr(buffer,'.') ) { - // it is an IP address... - styler.ColourTo(i-1,SCE_CONF_IP); - } else { - // normal number - styler.ColourTo(i-1,SCE_CONF_NUMBER); - } - - // push back a character - chNext = styler[i--]; - } - break; - - } - } - delete []buffer; -} - -static const char * const confWordListDesc[] = { - "Directives", - "Parameters", - 0 -}; - -LexerModule lmConf(SCLEX_CONF, ColouriseConfDoc, "conf", 0, confWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCrontab.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCrontab.cxx deleted file mode 100644 index d139bb4f14..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCrontab.cxx +++ /dev/null @@ -1,218 +0,0 @@ -// Scintilla source code edit control -/** @file LexCrontab.cxx - ** Lexer to use with extended crontab files used by a powerful - ** Windows scheduler/event monitor/automation manager nnCron. - ** (http://nemtsev.eserv.ru/) - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -static void ColouriseNncrontabDoc(unsigned int startPos, int length, int, WordList -*keywordLists[], Accessor &styler) -{ - int state = SCE_NNCRONTAB_DEFAULT; - char chNext = styler[startPos]; - int lengthDoc = startPos + length; - // create a buffer large enough to take the largest chunk... - char *buffer = new char[length]; - int bufferCount = 0; - // used when highliting environment variables inside quoted string: - bool insideString = false; - - // this assumes that we have 3 keyword list in conf.properties - WordList §ion = *keywordLists[0]; - WordList &keyword = *keywordLists[1]; - WordList &modifier = *keywordLists[2]; - - // go through all provided text segment - // using the hand-written state machine shown below - styler.StartAt(startPos); - styler.StartSegment(startPos); - for (int i = startPos; i < lengthDoc; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - - if (styler.IsLeadByte(ch)) { - chNext = styler.SafeGetCharAt(i + 2); - i++; - continue; - } - switch(state) { - case SCE_NNCRONTAB_DEFAULT: - if( ch == '\n' || ch == '\r' || ch == '\t' || ch == ' ') { - // whitespace is simply ignored here... - styler.ColourTo(i,SCE_NNCRONTAB_DEFAULT); - break; - } else if( ch == '#' && styler.SafeGetCharAt(i+1) == '(') { - // signals the start of a task... - state = SCE_NNCRONTAB_TASK; - styler.ColourTo(i,SCE_NNCRONTAB_TASK); - } - else if( ch == '\\' && (styler.SafeGetCharAt(i+1) == ' ' || - styler.SafeGetCharAt(i+1) == '\t')) { - // signals the start of an extended comment... - state = SCE_NNCRONTAB_COMMENT; - styler.ColourTo(i,SCE_NNCRONTAB_COMMENT); - } else if( ch == '#' ) { - // signals the start of a plain comment... - state = SCE_NNCRONTAB_COMMENT; - styler.ColourTo(i,SCE_NNCRONTAB_COMMENT); - } else if( ch == ')' && styler.SafeGetCharAt(i+1) == '#') { - // signals the end of a task... - state = SCE_NNCRONTAB_TASK; - styler.ColourTo(i,SCE_NNCRONTAB_TASK); - } else if( ch == '"') { - state = SCE_NNCRONTAB_STRING; - styler.ColourTo(i,SCE_NNCRONTAB_STRING); - } else if( ch == '%') { - // signals environment variables - state = SCE_NNCRONTAB_ENVIRONMENT; - styler.ColourTo(i,SCE_NNCRONTAB_ENVIRONMENT); - } else if( ch == '<' && styler.SafeGetCharAt(i+1) == '%') { - // signals environment variables - state = SCE_NNCRONTAB_ENVIRONMENT; - styler.ColourTo(i,SCE_NNCRONTAB_ENVIRONMENT); - } else if( ch == '*' ) { - // signals an asterisk - // no state jump necessary for this simple case... - styler.ColourTo(i,SCE_NNCRONTAB_ASTERISK); - } else if( isalpha(ch) || ch == '<' ) { - // signals the start of an identifier - bufferCount = 0; - buffer[bufferCount++] = ch; - state = SCE_NNCRONTAB_IDENTIFIER; - } else if( isdigit(ch) ) { - // signals the start of a number - bufferCount = 0; - buffer[bufferCount++] = ch; - state = SCE_NNCRONTAB_NUMBER; - } else { - // style it the default style.. - styler.ColourTo(i,SCE_NNCRONTAB_DEFAULT); - } - break; - - case SCE_NNCRONTAB_COMMENT: - // if we find a newline here, - // we simply go to default state - // else continue to work on it... - if( ch == '\n' || ch == '\r' ) { - state = SCE_NNCRONTAB_DEFAULT; - } else { - styler.ColourTo(i,SCE_NNCRONTAB_COMMENT); - } - break; - - case SCE_NNCRONTAB_TASK: - // if we find a newline here, - // we simply go to default state - // else continue to work on it... - if( ch == '\n' || ch == '\r' ) { - state = SCE_NNCRONTAB_DEFAULT; - } else { - styler.ColourTo(i,SCE_NNCRONTAB_TASK); - } - break; - - case SCE_NNCRONTAB_STRING: - if( ch == '%' ) { - state = SCE_NNCRONTAB_ENVIRONMENT; - insideString = true; - styler.ColourTo(i-1,SCE_NNCRONTAB_STRING); - break; - } - // if we find the end of a string char, we simply go to default state - // else we're still dealing with an string... - if( (ch == '"' && styler.SafeGetCharAt(i-1)!='\\') || - (ch == '\n') || (ch == '\r') ) { - state = SCE_NNCRONTAB_DEFAULT; - } - styler.ColourTo(i,SCE_NNCRONTAB_STRING); - break; - - case SCE_NNCRONTAB_ENVIRONMENT: - // if we find the end of a string char, we simply go to default state - // else we're still dealing with an string... - if( ch == '%' && insideString ) { - state = SCE_NNCRONTAB_STRING; - insideString = false; - break; - } - if( (ch == '%' && styler.SafeGetCharAt(i-1)!='\\') - || (ch == '\n') || (ch == '\r') || (ch == '>') ) { - state = SCE_NNCRONTAB_DEFAULT; - styler.ColourTo(i,SCE_NNCRONTAB_ENVIRONMENT); - break; - } - styler.ColourTo(i+1,SCE_NNCRONTAB_ENVIRONMENT); - break; - - case SCE_NNCRONTAB_IDENTIFIER: - // stay in CONF_IDENTIFIER state until we find a non-alphanumeric - if( isalnum(ch) || (ch == '_') || (ch == '-') || (ch == '/') || - (ch == '$') || (ch == '.') || (ch == '<') || (ch == '>') || - (ch == '@') ) { - buffer[bufferCount++] = ch; - } else { - state = SCE_NNCRONTAB_DEFAULT; - buffer[bufferCount] = '\0'; - - // check if the buffer contains a keyword, - // and highlight it if it is a keyword... - if(section.InList(buffer)) { - styler.ColourTo(i,SCE_NNCRONTAB_SECTION ); - } else if(keyword.InList(buffer)) { - styler.ColourTo(i-1,SCE_NNCRONTAB_KEYWORD ); - } // else if(strchr(buffer,'/') || strchr(buffer,'.')) { - // styler.ColourTo(i-1,SCE_NNCRONTAB_EXTENSION); - // } - else if(modifier.InList(buffer)) { - styler.ColourTo(i-1,SCE_NNCRONTAB_MODIFIER ); - } else { - styler.ColourTo(i-1,SCE_NNCRONTAB_DEFAULT); - } - // push back the faulty character - chNext = styler[i--]; - } - break; - - case SCE_NNCRONTAB_NUMBER: - // stay in CONF_NUMBER state until we find a non-numeric - if( isdigit(ch) /* || ch == '.' */ ) { - buffer[bufferCount++] = ch; - } else { - state = SCE_NNCRONTAB_DEFAULT; - buffer[bufferCount] = '\0'; - // Colourize here... (normal number) - styler.ColourTo(i-1,SCE_NNCRONTAB_NUMBER); - // push back a character - chNext = styler[i--]; - } - break; - } - } - delete []buffer; -} - -static const char * const cronWordListDesc[] = { - "Section keywords and Forth words", - "nnCrontab keywords", - "Modifiers", - 0 -}; - -LexerModule lmNncrontab(SCLEX_NNCRONTAB, ColouriseNncrontabDoc, "nncrontab", 0, cronWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCsound.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCsound.cxx deleted file mode 100644 index 27f7b990a2..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexCsound.cxx +++ /dev/null @@ -1,207 +0,0 @@ -// Scintilla source code edit control -/** @file LexCsound.cxx - ** Lexer for Csound (Orchestra & Score) - ** Written by Georg Ritter - - **/ -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || - ch == '_' || ch == '?'); -} - -static inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.' || - ch == '%' || ch == '@' || ch == '$' || ch == '?'); -} - -static inline bool IsCsoundOperator(char ch) { - if (isalnum(ch)) - return false; - // '.' left out as it is used to make up numbers - if (ch == '*' || ch == '/' || ch == '-' || ch == '+' || - ch == '(' || ch == ')' || ch == '=' || ch == '^' || - ch == '[' || ch == ']' || ch == '<' || ch == '&' || - ch == '>' || ch == ',' || ch == '|' || ch == '~' || - ch == '%' || ch == ':') - return true; - return false; -} - -static void ColouriseCsoundDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - - WordList &opcode = *keywordlists[0]; - WordList &headerStmt = *keywordlists[1]; - WordList &otherKeyword = *keywordlists[2]; - - // Do not leak onto next line - if (initStyle == SCE_CSOUND_STRINGEOL) - initStyle = SCE_CSOUND_DEFAULT; - - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) - { - // Handle line continuation generically. - if (sc.ch == '\\') { - if (sc.chNext == '\n' || sc.chNext == '\r') { - sc.Forward(); - if (sc.ch == '\r' && sc.chNext == '\n') { - sc.Forward(); - } - continue; - } - } - - // Determine if the current state should terminate. - if (sc.state == SCE_CSOUND_OPERATOR) { - if (!IsCsoundOperator(static_cast(sc.ch))) { - sc.SetState(SCE_CSOUND_DEFAULT); - } - }else if (sc.state == SCE_CSOUND_NUMBER) { - if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_CSOUND_DEFAULT); - } - } else if (sc.state == SCE_CSOUND_IDENTIFIER) { - if (!IsAWordChar(sc.ch) ) { - char s[100]; - sc.GetCurrent(s, sizeof(s)); - - if (opcode.InList(s)) { - sc.ChangeState(SCE_CSOUND_OPCODE); - } else if (headerStmt.InList(s)) { - sc.ChangeState(SCE_CSOUND_HEADERSTMT); - } else if (otherKeyword.InList(s)) { - sc.ChangeState(SCE_CSOUND_USERKEYWORD); - } else if (s[0] == 'p') { - sc.ChangeState(SCE_CSOUND_PARAM); - } else if (s[0] == 'a') { - sc.ChangeState(SCE_CSOUND_ARATE_VAR); - } else if (s[0] == 'k') { - sc.ChangeState(SCE_CSOUND_KRATE_VAR); - } else if (s[0] == 'i') { // covers both i-rate variables and i-statements - sc.ChangeState(SCE_CSOUND_IRATE_VAR); - } else if (s[0] == 'g') { - sc.ChangeState(SCE_CSOUND_GLOBAL_VAR); - } - sc.SetState(SCE_CSOUND_DEFAULT); - } - } - else if (sc.state == SCE_CSOUND_COMMENT ) { - if (sc.atLineEnd) { - sc.SetState(SCE_CSOUND_DEFAULT); - } - } - else if ((sc.state == SCE_CSOUND_ARATE_VAR) || - (sc.state == SCE_CSOUND_KRATE_VAR) || - (sc.state == SCE_CSOUND_IRATE_VAR)) { - if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_CSOUND_DEFAULT); - } - } - - // Determine if a new state should be entered. - if (sc.state == SCE_CSOUND_DEFAULT) { - if (sc.ch == ';'){ - sc.SetState(SCE_CSOUND_COMMENT); - } else if (isdigit(sc.ch) || (sc.ch == '.' && isdigit(sc.chNext))) { - sc.SetState(SCE_CSOUND_NUMBER); - } else if (IsAWordStart(sc.ch)) { - sc.SetState(SCE_CSOUND_IDENTIFIER); - } else if (IsCsoundOperator(static_cast(sc.ch))) { - sc.SetState(SCE_CSOUND_OPERATOR); - } else if (sc.ch == 'p') { - sc.SetState(SCE_CSOUND_PARAM); - } else if (sc.ch == 'a') { - sc.SetState(SCE_CSOUND_ARATE_VAR); - } else if (sc.ch == 'k') { - sc.SetState(SCE_CSOUND_KRATE_VAR); - } else if (sc.ch == 'i') { // covers both i-rate variables and i-statements - sc.SetState(SCE_CSOUND_IRATE_VAR); - } else if (sc.ch == 'g') { - sc.SetState(SCE_CSOUND_GLOBAL_VAR); - } - } - } - sc.Complete(); -} - -static void FoldCsoundInstruments(unsigned int startPos, int length, int /* initStyle */, WordList *[], - Accessor &styler) { - unsigned int lengthDoc = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler[startPos]; - int stylePrev = 0; - int styleNext = styler.StyleAt(startPos); - for (unsigned int i = startPos; i < lengthDoc; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - if ((stylePrev != SCE_CSOUND_OPCODE) && (style == SCE_CSOUND_OPCODE)) { - char s[20]; - unsigned int j = 0; - while ((j < (sizeof(s) - 1)) && (iswordchar(styler[i + j]))) { - s[j] = styler[i + j]; - j++; - } - s[j] = '\0'; - - if (strcmp(s, "instr") == 0) - levelCurrent++; - if (strcmp(s, "endin") == 0) - levelCurrent--; - } - - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - } - if (!isspacechar(ch)) - visibleChars++; - stylePrev = style; - } - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - - -static const char * const csoundWordListDesc[] = { - "Opcodes", - "Header Statements", - "User keywords", - 0 -}; - -LexerModule lmCsound(SCLEX_CSOUND, ColouriseCsoundDoc, "csound", FoldCsoundInstruments, csoundWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexEScript.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexEScript.cxx deleted file mode 100644 index 49411588aa..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexEScript.cxx +++ /dev/null @@ -1,270 +0,0 @@ -// Scintilla source code edit control -/** @file LexESCRIPT.cxx - ** Lexer for ESCRIPT - **/ -// Copyright 2003 by Patrizio Bekerle (patrizio@bekerle.com) - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - - - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_'); -} - -static inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_'); -} - - - -static void ColouriseESCRIPTDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; - - // Do not leak onto next line - /*if (initStyle == SCE_ESCRIPT_STRINGEOL) - initStyle = SCE_ESCRIPT_DEFAULT;*/ - - StyleContext sc(startPos, length, initStyle, styler); - - bool caseSensitive = styler.GetPropertyInt("escript.case.sensitive", 0) != 0; - - for (; sc.More(); sc.Forward()) { - - /*if (sc.atLineStart && (sc.state == SCE_ESCRIPT_STRING)) { - // Prevent SCE_ESCRIPT_STRINGEOL from leaking back to previous line - sc.SetState(SCE_ESCRIPT_STRING); - }*/ - - // Handle line continuation generically. - if (sc.ch == '\\') { - if (sc.chNext == '\n' || sc.chNext == '\r') { - sc.Forward(); - if (sc.ch == '\r' && sc.chNext == '\n') { - sc.Forward(); - } - continue; - } - } - - // Determine if the current state should terminate. - if (sc.state == SCE_ESCRIPT_OPERATOR || sc.state == SCE_ESCRIPT_BRACE) { - sc.SetState(SCE_ESCRIPT_DEFAULT); - } else if (sc.state == SCE_ESCRIPT_NUMBER) { - if (!IsADigit(sc.ch) || sc.ch != '.') { - sc.SetState(SCE_ESCRIPT_DEFAULT); - } - } else if (sc.state == SCE_ESCRIPT_IDENTIFIER) { - if (!IsAWordChar(sc.ch) || (sc.ch == '.')) { - char s[100]; - if (caseSensitive) { - sc.GetCurrent(s, sizeof(s)); - } else { - sc.GetCurrentLowered(s, sizeof(s)); - } - -// sc.GetCurrentLowered(s, sizeof(s)); - - if (keywords.InList(s)) { - sc.ChangeState(SCE_ESCRIPT_WORD); - } else if (keywords2.InList(s)) { - sc.ChangeState(SCE_ESCRIPT_WORD2); - } else if (keywords3.InList(s)) { - sc.ChangeState(SCE_ESCRIPT_WORD3); - // sc.state = SCE_ESCRIPT_IDENTIFIER; - } - sc.SetState(SCE_ESCRIPT_DEFAULT); - } - } else if (sc.state == SCE_ESCRIPT_COMMENT) { - if (sc.Match('*', '/')) { - sc.Forward(); - sc.ForwardSetState(SCE_ESCRIPT_DEFAULT); - } - } else if (sc.state == SCE_ESCRIPT_COMMENTDOC) { - if (sc.Match('*', '/')) { - sc.Forward(); - sc.ForwardSetState(SCE_ESCRIPT_DEFAULT); - } - } else if (sc.state == SCE_ESCRIPT_COMMENTLINE) { - if (sc.atLineEnd) { - sc.SetState(SCE_ESCRIPT_DEFAULT); - } - } else if (sc.state == SCE_ESCRIPT_STRING) { - if (sc.ch == '\\') { - if (sc.chNext == '\"' || sc.chNext == '\\') { - sc.Forward(); - } - } else if (sc.ch == '\"') { - sc.ForwardSetState(SCE_ESCRIPT_DEFAULT); - } - } - - // Determine if a new state should be entered. - if (sc.state == SCE_ESCRIPT_DEFAULT) { - if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - sc.SetState(SCE_ESCRIPT_NUMBER); - } else if (IsAWordStart(sc.ch) || (sc.ch == '#')) { - sc.SetState(SCE_ESCRIPT_IDENTIFIER); - } else if (sc.Match('/', '*')) { - sc.SetState(SCE_ESCRIPT_COMMENT); - sc.Forward(); // Eat the * so it isn't used for the end of the comment - } else if (sc.Match('/', '/')) { - sc.SetState(SCE_ESCRIPT_COMMENTLINE); - } else if (sc.ch == '\"') { - sc.SetState(SCE_ESCRIPT_STRING); - //} else if (isoperator(static_cast(sc.ch))) { - } else if (sc.ch == '+' || sc.ch == '-' || sc.ch == '*' || sc.ch == '/' || sc.ch == '=' || sc.ch == '<' || sc.ch == '>' || sc.ch == '&' || sc.ch == '|' || sc.ch == '!' || sc.ch == '?' || sc.ch == ':') { - sc.SetState(SCE_ESCRIPT_OPERATOR); - } else if (sc.ch == '{' || sc.ch == '}') { - sc.SetState(SCE_ESCRIPT_BRACE); - } - } - - } - sc.Complete(); -} - - -static int classifyFoldPointESCRIPT(const char* s, const char* prevWord) { - int lev = 0; - if (strcmp(prevWord, "end") == 0) return lev; - if ((strcmp(prevWord, "else") == 0 && strcmp(s, "if") == 0) || strcmp(s, "elseif") == 0) - return -1; - - if (strcmp(s, "for") == 0 || strcmp(s, "foreach") == 0 - || strcmp(s, "program") == 0 || strcmp(s, "function") == 0 - || strcmp(s, "while") == 0 || strcmp(s, "case") == 0 - || strcmp(s, "if") == 0 ) { - lev = 1; - } else if ( strcmp(s, "endfor") == 0 || strcmp(s, "endforeach") == 0 - || strcmp(s, "endprogram") == 0 || strcmp(s, "endfunction") == 0 - || strcmp(s, "endwhile") == 0 || strcmp(s, "endcase") == 0 - || strcmp(s, "endif") == 0 ) { - lev = -1; - } - - return lev; -} - - -static bool IsStreamCommentStyle(int style) { - return style == SCE_ESCRIPT_COMMENT || - style == SCE_ESCRIPT_COMMENTDOC || - style == SCE_ESCRIPT_COMMENTLINE; -} - -static void FoldESCRIPTDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler) { - //~ bool foldComment = styler.GetPropertyInt("fold.comment") != 0; - // Do not know how to fold the comment at the moment. - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - bool foldComment = true; - unsigned int endPos = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler[startPos]; - int styleNext = styler.StyleAt(startPos); - int style = initStyle; - - int lastStart = 0; - char prevWord[32] = ""; - - for (unsigned int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int stylePrev = style; - style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - - - if (foldComment && IsStreamCommentStyle(style)) { - if (!IsStreamCommentStyle(stylePrev)) { - levelCurrent++; - } else if (!IsStreamCommentStyle(styleNext) && !atEOL) { - // Comments don't end at end of line and the next character may be unstyled. - levelCurrent--; - } - } - - if (foldComment && (style == SCE_ESCRIPT_COMMENTLINE)) { - if ((ch == '/') && (chNext == '/')) { - char chNext2 = styler.SafeGetCharAt(i + 2); - if (chNext2 == '{') { - levelCurrent++; - } else if (chNext2 == '}') { - levelCurrent--; - } - } - } - - if (stylePrev == SCE_ESCRIPT_DEFAULT && style == SCE_ESCRIPT_WORD3) - { - // Store last word start point. - lastStart = i; - } - - if (style == SCE_ESCRIPT_WORD3) { - if(iswordchar(ch) && !iswordchar(chNext)) { - char s[32]; - unsigned int j; - for(j = 0; ( j < 31 ) && ( j < i-lastStart+1 ); j++) { - s[j] = static_cast(tolower(styler[lastStart + j])); - } - s[j] = '\0'; - levelCurrent += classifyFoldPointESCRIPT(s, prevWord); - strcpy(prevWord, s); - } - } - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - strcpy(prevWord, ""); - } - - if (!isspacechar(ch)) - visibleChars++; - } - - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - - - -static const char * const ESCRIPTWordLists[] = { - "Primary keywords and identifiers", - "Intrinsic functions", - "Extended and user defined functions", - 0, -}; - -LexerModule lmESCRIPT(SCLEX_ESCRIPT, ColouriseESCRIPTDoc, "escript", FoldESCRIPTDoc, ESCRIPTWordLists); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexEiffel.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexEiffel.cxx deleted file mode 100644 index 4aed7c6af1..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexEiffel.cxx +++ /dev/null @@ -1,234 +0,0 @@ -// Scintilla source code edit control -/** @file LexEiffel.cxx - ** Lexer for Eiffel. - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -static inline bool isEiffelOperator(unsigned int ch) { - // '.' left out as it is used to make up numbers - return ch == '*' || ch == '/' || ch == '\\' || ch == '-' || ch == '+' || - ch == '(' || ch == ')' || ch == '=' || - ch == '{' || ch == '}' || ch == '~' || - ch == '[' || ch == ']' || ch == ';' || - ch == '<' || ch == '>' || ch == ',' || - ch == '.' || ch == '^' || ch == '%' || ch == ':' || - ch == '!' || ch == '@' || ch == '?'; -} - -static inline bool IsAWordChar(unsigned int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_'); -} - -static inline bool IsAWordStart(unsigned int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_'); -} - -static void ColouriseEiffelDoc(unsigned int startPos, - int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler) { - - WordList &keywords = *keywordlists[0]; - - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) { - - if (sc.state == SCE_EIFFEL_STRINGEOL) { - if (sc.ch != '\r' && sc.ch != '\n') { - sc.SetState(SCE_EIFFEL_DEFAULT); - } - } else if (sc.state == SCE_EIFFEL_OPERATOR) { - sc.SetState(SCE_EIFFEL_DEFAULT); - } else if (sc.state == SCE_EIFFEL_WORD) { - if (!IsAWordChar(sc.ch)) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - if (!keywords.InList(s)) { - sc.ChangeState(SCE_EIFFEL_IDENTIFIER); - } - sc.SetState(SCE_EIFFEL_DEFAULT); - } - } else if (sc.state == SCE_EIFFEL_NUMBER) { - if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_EIFFEL_DEFAULT); - } - } else if (sc.state == SCE_EIFFEL_COMMENTLINE) { - if (sc.ch == '\r' || sc.ch == '\n') { - sc.SetState(SCE_EIFFEL_DEFAULT); - } - } else if (sc.state == SCE_EIFFEL_STRING) { - if (sc.ch == '%') { - sc.Forward(); - } else if (sc.ch == '\"') { - sc.Forward(); - sc.SetState(SCE_EIFFEL_DEFAULT); - } - } else if (sc.state == SCE_EIFFEL_CHARACTER) { - if (sc.ch == '\r' || sc.ch == '\n') { - sc.SetState(SCE_EIFFEL_STRINGEOL); - } else if (sc.ch == '%') { - sc.Forward(); - } else if (sc.ch == '\'') { - sc.Forward(); - sc.SetState(SCE_EIFFEL_DEFAULT); - } - } - - if (sc.state == SCE_EIFFEL_DEFAULT) { - if (sc.ch == '-' && sc.chNext == '-') { - sc.SetState(SCE_EIFFEL_COMMENTLINE); - } else if (sc.ch == '\"') { - sc.SetState(SCE_EIFFEL_STRING); - } else if (sc.ch == '\'') { - sc.SetState(SCE_EIFFEL_CHARACTER); - } else if (IsADigit(sc.ch) || (sc.ch == '.')) { - sc.SetState(SCE_EIFFEL_NUMBER); - } else if (IsAWordStart(sc.ch)) { - sc.SetState(SCE_EIFFEL_WORD); - } else if (isEiffelOperator(sc.ch)) { - sc.SetState(SCE_EIFFEL_OPERATOR); - } - } - } - sc.Complete(); -} - -static bool IsEiffelComment(Accessor &styler, int pos, int len) { - return len>1 && styler[pos]=='-' && styler[pos+1]=='-'; -} - -static void FoldEiffelDocIndent(unsigned int startPos, int length, int, - WordList *[], Accessor &styler) { - int lengthDoc = startPos + length; - - // Backtrack to previous line in case need to fix its fold status - int lineCurrent = styler.GetLine(startPos); - if (startPos > 0) { - if (lineCurrent > 0) { - lineCurrent--; - startPos = styler.LineStart(lineCurrent); - } - } - int spaceFlags = 0; - int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsEiffelComment); - char chNext = styler[startPos]; - for (int i = startPos; i < lengthDoc; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - - if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == lengthDoc)) { - int lev = indentCurrent; - int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsEiffelComment); - if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) { - // Only non whitespace lines can be headers - if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) { - lev |= SC_FOLDLEVELHEADERFLAG; - } else if (indentNext & SC_FOLDLEVELWHITEFLAG) { - // Line after is blank so check the next - maybe should continue further? - int spaceFlags2 = 0; - int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsEiffelComment); - if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK)) { - lev |= SC_FOLDLEVELHEADERFLAG; - } - } - } - indentCurrent = indentNext; - styler.SetLevel(lineCurrent, lev); - lineCurrent++; - } - } -} - -static void FoldEiffelDocKeyWords(unsigned int startPos, int length, int /* initStyle */, WordList *[], - Accessor &styler) { - unsigned int lengthDoc = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler[startPos]; - int stylePrev = 0; - int styleNext = styler.StyleAt(startPos); - // lastDeferred should be determined by looking back to last keyword in case - // the "deferred" is on a line before "class" - bool lastDeferred = false; - for (unsigned int i = startPos; i < lengthDoc; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - if ((stylePrev != SCE_EIFFEL_WORD) && (style == SCE_EIFFEL_WORD)) { - char s[20]; - unsigned int j = 0; - while ((j < (sizeof(s) - 1)) && (iswordchar(styler[i + j]))) { - s[j] = styler[i + j]; - j++; - } - s[j] = '\0'; - - if ( - (strcmp(s, "check") == 0) || - (strcmp(s, "debug") == 0) || - (strcmp(s, "deferred") == 0) || - (strcmp(s, "do") == 0) || - (strcmp(s, "from") == 0) || - (strcmp(s, "if") == 0) || - (strcmp(s, "inspect") == 0) || - (strcmp(s, "once") == 0) - ) - levelCurrent++; - if (!lastDeferred && (strcmp(s, "class") == 0)) - levelCurrent++; - if (strcmp(s, "end") == 0) - levelCurrent--; - lastDeferred = strcmp(s, "deferred") == 0; - } - - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - } - if (!isspacechar(ch)) - visibleChars++; - stylePrev = style; - } - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - -static const char * const eiffelWordListDesc[] = { - "Keywords", - 0 -}; - -LexerModule lmEiffel(SCLEX_EIFFEL, ColouriseEiffelDoc, "eiffel", FoldEiffelDocIndent, eiffelWordListDesc); -LexerModule lmEiffelkw(SCLEX_EIFFELKW, ColouriseEiffelDoc, "eiffelkw", FoldEiffelDocKeyWords, eiffelWordListDesc); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexErlang.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexErlang.cxx deleted file mode 100644 index 9444eb9501..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexErlang.cxx +++ /dev/null @@ -1,522 +0,0 @@ -// Scintilla source code edit control -/** @file LexErlang.cxx - ** Lexer for Erlang. - ** Written by Peter-Henry Mander, based on Matlab lexer by José Fonseca - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -/* - TODO: - o _Param should be a new lexical type -*/ - -static int is_radix(int radix, int ch) { - int digit; - if ( 16 < radix || 2 > radix ) { - return 0; - } - if ( isdigit(ch) ) { - digit = ch - '0'; - } else if ( isxdigit(ch) ) { - digit = toupper(ch) - 'A' + 10; - } else { - return 0; - } - if ( digit < radix ) { - return 1; - } else { - return 0; - } -} - -typedef enum { - STATE_NULL, - ATOM_UNQUOTED, - ATOM_QUOTED, - ATOM_FUN_NAME, - NODE_NAME_UNQUOTED, - NODE_NAME_QUOTED, - MACRO_START, - MACRO_UNQUOTED, - MACRO_QUOTED, - RECORD_START, - RECORD_UNQUOTED, - RECORD_QUOTED, - NUMERAL_START, - NUMERAL_SIGNED, - NUMERAL_RADIX_LITERAL, - NUMERAL_SPECULATIVE_MANTISSA, - NUMERAL_FLOAT_MANTISSA, - NUMERAL_FLOAT_EXPONENT, - NUMERAL_FLOAT_SIGNED_EXPONENT, - PARSE_ERROR -} atom_parse_state_t; - -static void ColouriseErlangDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler) { - - WordList &keywords = *keywordlists[0]; - - styler.StartAt(startPos); - - StyleContext sc(startPos, length, initStyle, styler); - atom_parse_state_t parse_state = STATE_NULL; - int radix_digits = 0; - int exponent_digits = 0; - for (; sc.More(); sc.Forward()) { - if ( STATE_NULL != parse_state ) { - switch (parse_state) { - case STATE_NULL: - sc.SetState(SCE_ERLANG_DEFAULT); - break; - case ATOM_UNQUOTED: - if ( '@' == sc.ch ){ - parse_state = NODE_NAME_UNQUOTED; - } else if ( !isalnum(sc.ch) && sc.ch != '_' ) { - char s[100]; - sc.GetCurrent(s, sizeof(s)); - if (keywords.InList(s)) { - sc.ChangeState(SCE_ERLANG_KEYWORD); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else { - if ( '/' == sc.ch ) { - parse_state = ATOM_FUN_NAME; - } else { - sc.ChangeState(SCE_ERLANG_ATOM); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - } - } - break; - case ATOM_QUOTED: - if ( '@' == sc.ch ){ - parse_state = NODE_NAME_QUOTED; - } else if ( '\'' == sc.ch && '\\' != sc.chPrev ) { - sc.ChangeState(SCE_ERLANG_ATOM); - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case ATOM_FUN_NAME: - if ( !isdigit(sc.ch) ) { - sc.ChangeState(SCE_ERLANG_FUNCTION_NAME); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case NODE_NAME_QUOTED: - if ( '@' == sc.ch ) { - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else if ( '\'' == sc.ch && '\\' != sc.chPrev ) { - sc.ChangeState(SCE_ERLANG_NODE_NAME); - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case NODE_NAME_UNQUOTED: - if ( '@' == sc.ch ) { - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else if ( !isalnum(sc.ch) && sc.ch != '_' ) { - sc.ChangeState(SCE_ERLANG_NODE_NAME); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case RECORD_START: - if ( '\'' == sc.ch ) { - parse_state = RECORD_QUOTED; - } else if (isalpha(sc.ch) && islower(sc.ch)) { - parse_state = RECORD_UNQUOTED; - } else { // error - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case RECORD_QUOTED: - if ( '\'' == sc.ch && '\\' != sc.chPrev ) { - sc.ChangeState(SCE_ERLANG_RECORD); - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case RECORD_UNQUOTED: - if ( !isalpha(sc.ch) && '_' != sc.ch ) { - sc.ChangeState(SCE_ERLANG_RECORD); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case MACRO_START: - if ( '\'' == sc.ch ) { - parse_state = MACRO_QUOTED; - } else if (isalpha(sc.ch)) { - parse_state = MACRO_UNQUOTED; - } else { // error - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case MACRO_UNQUOTED: - if ( !isalpha(sc.ch) && '_' != sc.ch ) { - sc.ChangeState(SCE_ERLANG_MACRO); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case MACRO_QUOTED: - if ( '\'' == sc.ch && '\\' != sc.chPrev ) { - sc.ChangeState(SCE_ERLANG_MACRO); - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case NUMERAL_START: - if ( isdigit(sc.ch) ) { - radix_digits *= 10; - radix_digits += sc.ch - '0'; // Assuming ASCII here! - } else if ( '#' == sc.ch ) { - if ( 2 > radix_digits || 16 < radix_digits) { - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else { - parse_state = NUMERAL_RADIX_LITERAL; - } - } else if ( '.' == sc.ch && isdigit(sc.chNext)) { - radix_digits = 0; - parse_state = NUMERAL_FLOAT_MANTISSA; - } else if ( 'e' == sc.ch || 'E' == sc.ch ) { - exponent_digits = 0; - parse_state = NUMERAL_FLOAT_EXPONENT; - } else { - radix_digits = 0; - sc.ChangeState(SCE_ERLANG_NUMBER); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case NUMERAL_RADIX_LITERAL: - if ( !is_radix(radix_digits,sc.ch) ) { - radix_digits = 0; - if ( !isalnum(sc.ch) ) { - sc.ChangeState(SCE_ERLANG_NUMBER); - } - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case NUMERAL_FLOAT_MANTISSA: - if ( 'e' == sc.ch || 'E' == sc.ch ) { - exponent_digits = 0; - parse_state = NUMERAL_FLOAT_EXPONENT; - } else if ( !isdigit(sc.ch) ) { - sc.ChangeState(SCE_ERLANG_NUMBER); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } - break; - case NUMERAL_FLOAT_EXPONENT: - if ( '-' == sc.ch || '+' == sc.ch ) { - parse_state = NUMERAL_FLOAT_SIGNED_EXPONENT; - } else if ( !isdigit(sc.ch) ) { - if ( 0 < exponent_digits ) { - sc.ChangeState(SCE_ERLANG_NUMBER); - } - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else { - ++exponent_digits; - } - break; - case NUMERAL_FLOAT_SIGNED_EXPONENT: - if ( !isdigit(sc.ch) ) { - if ( 0 < exponent_digits ) { - sc.ChangeState(SCE_ERLANG_NUMBER); - } - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else { - ++exponent_digits; - } - break; - case NUMERAL_SIGNED: - if ( !isdigit(sc.ch) ) { - sc.ChangeState(SCE_ERLANG_NUMBER); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else if ( '.' == sc.ch ) { - parse_state = NUMERAL_FLOAT_MANTISSA; - } - break; - case NUMERAL_SPECULATIVE_MANTISSA: - if ( !isdigit(sc.ch) ) { - sc.ChangeState(SCE_ERLANG_OPERATOR); - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - } else { - parse_state = NUMERAL_FLOAT_MANTISSA; - } - break; - case PARSE_ERROR: - sc.SetState(SCE_ERLANG_DEFAULT); - parse_state = STATE_NULL; - break; - } - } else if (sc.state == SCE_ERLANG_OPERATOR) { - if (sc.chPrev == '.') { - if (sc.ch == '*' || sc.ch == '/' || sc.ch == '\\' || sc.ch == '^') { - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - } else if (sc.ch == '\'') { - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - } else { - sc.SetState(SCE_ERLANG_DEFAULT); - } - } else { - sc.SetState(SCE_ERLANG_DEFAULT); - } - } else if (sc.state == SCE_ERLANG_VARIABLE) { - if (!isalnum(sc.ch) && sc.ch != '_') { - sc.SetState(SCE_ERLANG_DEFAULT); - } - } else if (sc.state == SCE_ERLANG_STRING) { - if (sc.ch == '\"' && sc.chPrev != '\\') { - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - } - } else if (sc.state == SCE_ERLANG_COMMENT ) { - if (sc.atLineEnd) { - sc.SetState(SCE_ERLANG_DEFAULT); - } - } else if (sc.state == SCE_ERLANG_CHARACTER ) { - if ( sc.chPrev == '\\' ) { - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - } else if ( sc.ch != '\\' ) { - sc.ForwardSetState(SCE_ERLANG_DEFAULT); - } - } - - if (sc.state == SCE_ERLANG_DEFAULT) { - if (sc.ch == '%') { - sc.SetState(SCE_ERLANG_COMMENT); - } else if (sc.ch == '\"') { - sc.SetState(SCE_ERLANG_STRING); - } else if (sc.ch == '#') { - parse_state = RECORD_START; - sc.SetState(SCE_ERLANG_UNKNOWN); - } else if (sc.ch == '?') { - parse_state = MACRO_START; - sc.SetState(SCE_ERLANG_UNKNOWN); - } else if (sc.ch == '$') { - sc.SetState(SCE_ERLANG_CHARACTER); - } else if (sc.ch == '\'') { - parse_state = ATOM_QUOTED; - sc.SetState(SCE_ERLANG_UNKNOWN); - } else if ( isdigit(sc.ch) ) { - parse_state = NUMERAL_START; - radix_digits = sc.ch - '0'; - sc.SetState(SCE_ERLANG_UNKNOWN); - } else if ( '.' == sc.ch ) { - parse_state = NUMERAL_SPECULATIVE_MANTISSA; - sc.SetState(SCE_ERLANG_UNKNOWN); - } else if (isalpha(sc.ch) && isupper(sc.ch)) { - sc.SetState(SCE_ERLANG_VARIABLE); - } else if (isalpha(sc.ch)) { - parse_state = ATOM_UNQUOTED; - sc.SetState(SCE_ERLANG_UNKNOWN); - } else if (isoperator(static_cast(sc.ch)) || sc.ch == '\\') { - sc.SetState(SCE_ERLANG_OPERATOR); - } - } - } - sc.Complete(); -} - -static int ClassifyFoldPointErlang( - Accessor &styler, - int styleNext, - int keyword_start -) { - int lev = 0; - if ( styler.Match(keyword_start,"case") - || ( - styler.Match(keyword_start,"fun") - && SCE_ERLANG_FUNCTION_NAME != styleNext) - || styler.Match(keyword_start,"if") - || styler.Match(keyword_start,"query") - || styler.Match(keyword_start,"receive") - ) { - ++lev; - } else if ( styler.Match(keyword_start,"end") ) { - --lev; - } - return lev; -} - - -static void FoldErlangDoc( - unsigned int startPos, int length, int initStyle, - WordList** /*keywordlists*/, Accessor &styler -) { - unsigned int endPos = startPos + length; - //~ int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler.SafeGetCharAt(startPos); - int styleNext = styler.StyleAt(startPos); - int style = initStyle; - int keyword_start = 0; - - bool fold_keywords = true; - bool fold_comments = true; - bool fold_braces = true; - bool fold_function_clauses = false; - bool fold_clauses = false; - - //int clause_level = 0; - - for (unsigned int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - int stylePrev = style; - style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - - if ( (stylePrev != SCE_ERLANG_KEYWORD) && (style == SCE_ERLANG_KEYWORD) ) { - keyword_start = i; - } - if ( fold_keywords ) { - if ( (stylePrev == SCE_ERLANG_KEYWORD) - && (style != SCE_ERLANG_KEYWORD) - && (style != SCE_ERLANG_ATOM) - ) { - levelCurrent += ClassifyFoldPointErlang(styler,styleNext,keyword_start); - } - } - - if ( fold_comments ) { - if (style == SCE_ERLANG_COMMENT) { - if ((ch == '%') && (chNext == '{')) { - levelCurrent++; - } else if ((ch == '%') && (chNext == '}')) { - levelCurrent--; - } - } - } - - if ( fold_function_clauses ) { - if ( (SC_FOLDLEVELBASE == levelCurrent) /*&& (style == SCE_ERLANG_OPERATOR)*/ ) { - if ( (ch == '-') && (chNext == '>')) { - //~ fprintf(stderr,"levelCurrent=%d\n", levelCurrent); - //++clause_level; - //~ if ( 0 < clause_level ) - ++levelCurrent; - } - } - //~ if ( (stylePrev != SCE_ERLANG_RECORD) - //~ && (style != SCE_ERLANG_NUMBER) - //~ && (style != SCE_ERLANG_STRING) - //~ && (style != SCE_ERLANG_COMMENT) - //~ ) { - if ( (SC_FOLDLEVELBASE+1 == levelCurrent) && (ch == '.') ) { - //--clause_level; - //~ if ( 0 == clause_level ) - --levelCurrent; - } - //~ } - } - - if ( fold_clauses ) { - if ( (0 < levelCurrent) && (style == SCE_ERLANG_OPERATOR) ) { - if ((ch == '-') && (chNext == '>')) { - levelCurrent++; - } - if ( (ch == ';') ) { - levelCurrent--; - } - } - if ( (stylePrev != SCE_ERLANG_RECORD) - && (style != SCE_ERLANG_NUMBER) - && (style != SCE_ERLANG_STRING) - && (style != SCE_ERLANG_COMMENT) - ) { - if ( (ch == '.') ) { - levelCurrent--; - } - } - if ( (stylePrev == SCE_ERLANG_KEYWORD) - && (style != SCE_ERLANG_KEYWORD) - && (style != SCE_ERLANG_ATOM) - && ( - styler.Match(keyword_start,"end") // 'end' counted twice if fold_keywords too - || styler.Match(keyword_start,"after") ) - ) { - levelCurrent--; - } - } - - if ( fold_braces ) { - if (style == SCE_ERLANG_OPERATOR) { - if ( (ch == '{') || (ch == '(') || (ch == '[') ) { - levelCurrent++; - } else if ( (ch == '}') || (ch == ')') || (ch == ']') ) { - levelCurrent--; - } - } - } - - if (atEOL) { - int lev = levelPrev; - //~ if (visibleChars == 0 && foldCompact) - //~ lev |= SC_FOLDLEVELWHITEFLAG; - //~ if ((levelCurrent > levelPrev) && (visibleChars > 0)) - if ((levelCurrent > levelPrev)) { - lev |= SC_FOLDLEVELHEADERFLAG; - } - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - //~ visibleChars = 0; - } - //~ if (!isspacechar(ch)) - //~ visibleChars++; - - } - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} - -static const char * const erlangWordListDesc[] = { - "Keywords", - 0 -}; - -LexerModule lmErlang( - SCLEX_ERLANG, - ColouriseErlangDoc, - "erlang", - FoldErlangDoc, - erlangWordListDesc); - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexFlagship.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexFlagship.cxx deleted file mode 100644 index db0314eb96..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexFlagship.cxx +++ /dev/null @@ -1,226 +0,0 @@ -// Scintilla source code edit control -/** @file LexFlagShip.cxx - ** Lexer for FlagShip - ** (Syntactically compatible to other XBase dialects, like dBase, Clipper, Fox etc.) - **/ -// Copyright 2005 by Randy Butler -// Copyright 1998-2003 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -static bool IsFlagShipComment(Accessor &styler, int pos, int len) { - return len>0 && styler[pos]=='\''; -} - -static inline bool IsTypeCharacter(int ch) { - return ch == '%' || ch == '&' || ch == '@' || ch == '!' || ch == '#' || ch == '$'; -} - -// Extended to accept accented characters -static inline bool IsAWordChar(int ch) { - return ch >= 0x80 || - (isalnum(ch) || ch == '.' || ch == '_'); -} - -static inline bool IsAWordStart(int ch) { - return ch >= 0x80 || - (isalnum(ch) || ch == '_'); -} - -static inline bool IsADateCharacter(const int ch) { - return (ch < 0x80) && - (isalnum(ch) || ch == '|' || ch == '-' || ch == '/' || ch == ':' || ch == ' ' || ch == '\t'); -} - - -static void ColouriseFlagShipDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler) { - - //bool FSScriptSyntax = true; - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; - WordList &keywords4 = *keywordlists[3]; - - styler.StartAt(startPos); - - int visibleChars = 0; - - StyleContext sc(startPos, length, initStyle, styler); - - for (; sc.More(); sc.Forward()) { - - if (sc.state == SCE_FS_OPERATOR) { - sc.SetState(SCE_FS_DEFAULT); - } else if (sc.state == SCE_FS_IDENTIFIER) { - if (!IsAWordChar(sc.ch)) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - if (keywords.InList(s)) { - sc.ChangeState(SCE_FS_KEYWORD); - } else if (keywords2.InList(s)) { - sc.ChangeState(SCE_FS_KEYWORD2); - } else if (keywords3.InList(s)) { - sc.ChangeState(SCE_FS_KEYWORD3); - } else if (keywords4.InList(s)) { - sc.ChangeState(SCE_FS_KEYWORD4); - }// Else, it is really an identifier... - sc.SetState(SCE_FS_DEFAULT); - } - } else if (sc.state == SCE_FS_NUMBER) { - if (!IsAWordChar(sc.ch)) { - sc.SetState(SCE_FS_DEFAULT); - } - } else if (sc.state == SCE_FS_STRING) { - // VB doubles quotes to preserve them, so just end this string - // state now as a following quote will start again - if (sc.ch == '\"') { - if (tolower(sc.chNext) == 'c') { - sc.Forward(); - } - sc.ForwardSetState(SCE_FS_DEFAULT); - } else if (sc.atLineEnd) { - sc.ChangeState(SCE_FS_STRINGEOL); - sc.ForwardSetState(SCE_FS_DEFAULT); - } - } else if (sc.state == SCE_FS_COMMENT) { - if (sc.Match('*', '/')) { // new code - sc.Forward(); - sc.ForwardSetState(SCE_FS_DEFAULT); - //if (sc.atLineEnd) { // old code - // sc.SetState(SCE_FS_DEFAULT); - } - } else if (sc.state == SCE_FS_COMMENTLINE) { //new code - if (sc.ch == '\r' || sc.ch == '\n') { - sc.SetState(SCE_FS_DEFAULT); - visibleChars = 0; - } - } else if (sc.state == SCE_FS_PREPROCESSOR) { - if (sc.atLineEnd) { - sc.SetState(SCE_FS_DEFAULT); - } - } else if (sc.state == SCE_FS_DATE) { - if (sc.ch == '#' || !IsADateCharacter(sc.chNext)) { - sc.ForwardSetState(SCE_FS_DEFAULT); - } - } - - // Determine if a new state should be entered. - if (sc.state == SCE_FS_DEFAULT) { - if (sc.Match('/', '*')) { // New code - sc.SetState(SCE_FS_COMMENT); - sc.Forward(); // Eat the * so it isn't used for the end of the comment - //if (sc.ch == '\'') { // Old code - // sc.SetState(SCE_FS_COMMENT); // old code - } else if (sc.Match('/', '/')) { // New code - sc.SetState(SCE_FS_COMMENTLINE); - } else if (sc.ch == '\"') { - sc.SetState(SCE_FS_STRING); - } else if (sc.ch == '#' && visibleChars == 0) { - // Preprocessor commands are alone on their line - sc.SetState(SCE_FS_PREPROCESSOR); - } else if (sc.ch == '#') { - int n = 1; - int chSeek = ' '; - while ((n < 100) && (chSeek == ' ' || chSeek == '\t')) { - chSeek = sc.GetRelative(n); - n++; - } - if (IsADigit(chSeek)) { - sc.SetState(SCE_FS_DATE); - } else { - sc.SetState(SCE_FS_OPERATOR); - } - } else if (sc.ch == '&' && tolower(sc.chNext) == 'h') { - sc.SetState(SCE_FS_NUMBER); - } else if (sc.ch == '&' && tolower(sc.chNext) == 'o') { - sc.SetState(SCE_FS_NUMBER); - } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - sc.SetState(SCE_FS_NUMBER); - } else if (IsAWordStart(sc.ch) || (sc.ch == '[')) { - sc.SetState(SCE_FS_IDENTIFIER); - } else if (isoperator(static_cast(sc.ch)) || (sc.ch == '\\')) { - sc.SetState(SCE_FS_OPERATOR); - } - } - - if (sc.atLineEnd) { - visibleChars = 0; - } - if (!IsASpace(sc.ch)) { - visibleChars++; - } - } - sc.Complete(); -} - -static void FoldFlagShipDoc(unsigned int startPos, int length, int, - WordList *[], Accessor &styler) { - - int endPos = startPos + length; - - // Backtrack to previous line in case need to fix its fold status - int lineCurrent = styler.GetLine(startPos); - if (startPos > 0) { - if (lineCurrent > 0) { - lineCurrent--; - startPos = styler.LineStart(lineCurrent); - } - } - int spaceFlags = 0; - int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, IsFlagShipComment); - char chNext = styler[startPos]; - for (int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - - if ((ch == '\r' && chNext != '\n') || (ch == '\n') || (i == endPos)) { - int lev = indentCurrent; - int indentNext = styler.IndentAmount(lineCurrent + 1, &spaceFlags, IsFlagShipComment); - if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG)) { - // Only non whitespace lines can be headers - if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) { - lev |= SC_FOLDLEVELHEADERFLAG; - } else if (indentNext & SC_FOLDLEVELWHITEFLAG) { - // Line after is blank so check the next - maybe should continue further? - int spaceFlags2 = 0; - int indentNext2 = styler.IndentAmount(lineCurrent + 2, &spaceFlags2, IsFlagShipComment); - if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext2 & SC_FOLDLEVELNUMBERMASK)) { - lev |= SC_FOLDLEVELHEADERFLAG; - } - } - } - indentCurrent = indentNext; - styler.SetLevel(lineCurrent, lev); - lineCurrent++; - } - } -} - - -static const char * const FSWordListDesc[] = { - "Keywords", - "functions", - "user2", - "user3", - 0 -}; - -LexerModule lmFlagShip(SCLEX_FLAGSHIP, ColouriseFlagShipDoc, "flagship", FoldFlagShipDoc, FSWordListDesc); - - - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexForth.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexForth.cxx deleted file mode 100644 index 3f128156d6..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexForth.cxx +++ /dev/null @@ -1,348 +0,0 @@ -// Scintilla source code edit control -/** @file LexCrontab.cxx - ** Lexer to use with extended crontab files used by a powerful - ** Windows scheduler/event monitor/automation manager nnCron. - ** (http://nemtsev.eserv.ru/) - **/ -// Copyright 1998-2001 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -bool is_whitespace(int ch){ - return ch == '\n' || ch == '\r' || ch == '\t' || ch == ' '; -} - -bool is_blank(int ch){ - return ch == '\t' || ch == ' '; -} -//#define FORTH_DEBUG -#ifdef FORTH_DEBUG -static FILE *f_debug; -#define log(x) fputs(f_debug,x); -#else -#define log(x) -#endif - -#define STATE_LOCALE -#define BL ' ' - -static Accessor *st; -static int cur_pos,pos1,pos2,pos0,lengthDoc; -char *buffer; - -char getChar(bool is_bl){ - char ch=st->SafeGetCharAt(cur_pos); - if(is_bl) if(is_whitespace(ch)) ch=BL; - return ch; -} - -char getCharBL(){ - char ch=st->SafeGetCharAt(cur_pos); - return ch; -} -bool is_eol(char ch){ - return ch=='\n' || ch=='\r'; -} - -int parse(char ch, bool skip_eol){ -// pos1 - start pos of word -// pos2 - pos after of word -// pos0 - start pos - char c=0; - int len; - bool is_bl=ch==BL; - pos0=pos1=pos2=cur_pos; - for(;cur_pos9 && base>10) digit-=7; - if(digit<0) return false; - if(digit>=base) return false; - } - return true; -} - -bool is_number(char *s){ - if(strncmp(s,"0x",2)==0) return _is_number(s+2,16); - return _is_number(s,10); -} - -static void ColouriseForthDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) -{ - st=&styler; - cur_pos=startPos; - lengthDoc = startPos + length; - buffer = new char[length]; - -#ifdef FORTH_DEBUG - f_debug=fopen("c:\\sci.log","at"); -#endif - - WordList &control = *keywordLists[0]; - WordList &keyword = *keywordLists[1]; - WordList &defword = *keywordLists[2]; - WordList &preword1 = *keywordLists[3]; - WordList &preword2 = *keywordLists[4]; - WordList &strings = *keywordLists[5]; - - // go through all provided text segment - // using the hand-written state machine shown below - styler.StartAt(startPos); - styler.StartSegment(startPos); - while(parse(BL,true)!=0){ - if(pos0!=pos1){ - styler.ColourTo(pos0,SCE_FORTH_DEFAULT); - styler.ColourTo(pos1-1,SCE_FORTH_DEFAULT); - } - if(strcmp("\\",buffer)==0){ - styler.ColourTo(pos1,SCE_FORTH_COMMENT); - parse(1,false); - styler.ColourTo(pos2,SCE_FORTH_COMMENT); - }else if(strcmp("(",buffer)==0){ - styler.ColourTo(pos1,SCE_FORTH_COMMENT); - parse(')',true); - if(cur_pos -// The License.txt file describes the conditions under which this software may be distributed. -/***************************************/ -#include -#include -#include -#include -#include -/***************************************/ -#include "Platform.h" -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" -/***********************************************/ -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '%'); -} -/**********************************************/ -static inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch)); -} -/***************************************/ -inline bool IsABlank(unsigned int ch) { - return (ch == ' ') || (ch == 0x09) || (ch == 0x0b) ; -} -/***************************************/ -inline bool IsALineEnd(char ch) { - return ((ch == '\n') || (ch == '\r')) ; -} -/***************************************/ -unsigned int GetContinuedPos(unsigned int pos, Accessor &styler) { - while (!IsALineEnd(styler.SafeGetCharAt(pos++))) continue; - if (styler.SafeGetCharAt(pos) == '\n') pos++; - while (IsABlank(styler.SafeGetCharAt(pos++))) continue; - char chCur = styler.SafeGetCharAt(pos); - if (chCur == '&') { - while (IsABlank(styler.SafeGetCharAt(++pos))) continue; - return pos; - } else { - return pos; - } -} -/***************************************/ -static void ColouriseFortranDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler, bool isFixFormat) { - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; - /***************************************/ - int posLineStart = 0, numNonBlank = 0, prevState = 0; - int endPos = startPos + length; - /***************************************/ - // backtrack to the nearest keyword - while ((startPos > 1) && (styler.StyleAt(startPos) != SCE_F_WORD)) { - startPos--; - } - startPos = styler.LineStart(styler.GetLine(startPos)); - initStyle = styler.StyleAt(startPos - 1); - StyleContext sc(startPos, endPos-startPos, initStyle, styler); - /***************************************/ - for (; sc.More(); sc.Forward()) { - // remember the start position of the line - if (sc.atLineStart) { - posLineStart = sc.currentPos; - numNonBlank = 0; - sc.SetState(SCE_F_DEFAULT); - } - if (!IsASpaceOrTab(sc.ch)) numNonBlank ++; - /***********************************************/ - // Handle the fix format generically - int toLineStart = sc.currentPos - posLineStart; - if (isFixFormat && (toLineStart < 6 || toLineStart > 72)) { - if (toLineStart == 0 && (tolower(sc.ch) == 'c' || sc.ch == '*') || sc.ch == '!') { - sc.SetState(SCE_F_COMMENT); - while (!sc.atLineEnd && sc.More()) sc.Forward(); // Until line end - } else if (toLineStart > 72) { - sc.SetState(SCE_F_COMMENT); - while (!sc.atLineEnd && sc.More()) sc.Forward(); // Until line end - } else if (toLineStart < 5) { - if (IsADigit(sc.ch)) - sc.SetState(SCE_F_LABEL); - else - sc.SetState(SCE_F_DEFAULT); - } else if (toLineStart == 5) { - if (!IsASpace(sc.ch) && sc.ch != '0') { - sc.SetState(SCE_F_CONTINUATION); - sc.ForwardSetState(prevState); - } else - sc.SetState(SCE_F_DEFAULT); - } - continue; - } - /***************************************/ - // Handle line continuation generically. - if (!isFixFormat && sc.ch == '&') { - char chTemp = ' '; - int j = 1; - while (IsABlank(chTemp) && j<132) { - chTemp = static_cast(sc.GetRelative(j)); - j++; - } - if (chTemp == '!') { - sc.SetState(SCE_F_CONTINUATION); - if (sc.chNext == '!') sc.ForwardSetState(SCE_F_COMMENT); - } else if (chTemp == '\r' || chTemp == '\n') { - int currentState = sc.state; - sc.SetState(SCE_F_CONTINUATION); - sc.ForwardSetState(SCE_F_DEFAULT); - while (IsASpace(sc.ch) && sc.More()) sc.Forward(); - if (sc.ch == '&') { - sc.SetState(SCE_F_CONTINUATION); - sc.Forward(); - } - sc.SetState(currentState); - } - } - /***************************************/ - // Determine if the current state should terminate. - if (sc.state == SCE_F_OPERATOR) { - sc.SetState(SCE_F_DEFAULT); - } else if (sc.state == SCE_F_NUMBER) { - if (!(IsAWordChar(sc.ch) || sc.ch=='\'' || sc.ch=='\"' || sc.ch=='.')) { - sc.SetState(SCE_F_DEFAULT); - } - } else if (sc.state == SCE_F_IDENTIFIER) { - if (!IsAWordChar(sc.ch) || (sc.ch == '%')) { - char s[100]; - sc.GetCurrentLowered(s, sizeof(s)); - if (keywords.InList(s)) { - sc.ChangeState(SCE_F_WORD); - } else if (keywords2.InList(s)) { - sc.ChangeState(SCE_F_WORD2); - } else if (keywords3.InList(s)) { - sc.ChangeState(SCE_F_WORD3); - } - sc.SetState(SCE_F_DEFAULT); - } - } else if (sc.state == SCE_F_COMMENT || sc.state == SCE_F_PREPROCESSOR) { - if (sc.ch == '\r' || sc.ch == '\n') { - sc.SetState(SCE_F_DEFAULT); - } - } else if (sc.state == SCE_F_STRING1) { - prevState = sc.state; - if (sc.ch == '\'') { - if (sc.chNext == '\'') { - sc.Forward(); - } else { - sc.ForwardSetState(SCE_F_DEFAULT); - prevState = SCE_F_DEFAULT; - } - } else if (sc.atLineEnd) { - sc.ChangeState(SCE_F_STRINGEOL); - sc.ForwardSetState(SCE_F_DEFAULT); - } - } else if (sc.state == SCE_F_STRING2) { - prevState = sc.state; - if (sc.atLineEnd) { - sc.ChangeState(SCE_F_STRINGEOL); - sc.ForwardSetState(SCE_F_DEFAULT); - } else if (sc.ch == '\"') { - if (sc.chNext == '\"') { - sc.Forward(); - } else { - sc.ForwardSetState(SCE_F_DEFAULT); - prevState = SCE_F_DEFAULT; - } - } - } else if (sc.state == SCE_F_OPERATOR2) { - if (sc.ch == '.') { - sc.ForwardSetState(SCE_F_DEFAULT); - } - } else if (sc.state == SCE_F_CONTINUATION) { - sc.SetState(SCE_F_DEFAULT); - } else if (sc.state == SCE_F_LABEL) { - if (!IsADigit(sc.ch)) { - sc.SetState(SCE_F_DEFAULT); - } else { - if (isFixFormat && sc.currentPos-posLineStart > 4) - sc.SetState(SCE_F_DEFAULT); - else if (numNonBlank > 5) - sc.SetState(SCE_F_DEFAULT); - } - } - /***************************************/ - // Determine if a new state should be entered. - if (sc.state == SCE_F_DEFAULT) { - if (sc.ch == '!') { - if (sc.chNext == '$') { - sc.SetState(SCE_F_PREPROCESSOR); - } else { - sc.SetState(SCE_F_COMMENT); - } - } else if ((!isFixFormat) && IsADigit(sc.ch) && numNonBlank == 1) { - sc.SetState(SCE_F_LABEL); - } else if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) { - sc.SetState(SCE_F_NUMBER); - } else if ((tolower(sc.ch) == 'b' || tolower(sc.ch) == 'o' || - tolower(sc.ch) == 'z') && (sc.chNext == '\"' || sc.chNext == '\'')) { - sc.SetState(SCE_F_NUMBER); - sc.Forward(); - } else if (sc.ch == '.' && isalpha(sc.chNext)) { - sc.SetState(SCE_F_OPERATOR2); - } else if (IsAWordStart(sc.ch)) { - sc.SetState(SCE_F_IDENTIFIER); - } else if (sc.ch == '\"') { - sc.SetState(SCE_F_STRING2); - } else if (sc.ch == '\'') { - sc.SetState(SCE_F_STRING1); - } else if (isoperator(static_cast(sc.ch))) { - sc.SetState(SCE_F_OPERATOR); - } - } - } - sc.Complete(); -} -/***************************************/ -// To determine the folding level depending on keywords -static int classifyFoldPointFortran(const char* s, const char* prevWord, const char chNextNonBlank) { - int lev = 0; - if ((strcmp(prevWord, "else") == 0 && strcmp(s, "if") == 0) || strcmp(s, "elseif") == 0) - return -1; - if (strcmp(s, "associate") == 0 || strcmp(s, "block") == 0 - || strcmp(s, "blockdata") == 0 || strcmp(s, "select") == 0 - || strcmp(s, "do") == 0 || strcmp(s, "enum") ==0 - || strcmp(s, "function") == 0 || strcmp(s, "interface") == 0 - || strcmp(s, "module") == 0 || strcmp(s, "program") == 0 - || strcmp(s, "subroutine") == 0 || strcmp(s, "then") == 0 - || (strcmp(s, "type") == 0 && chNextNonBlank != '(') ){ - if (strcmp(prevWord, "end") == 0) - lev = 0; - else - lev = 1; - } else if (strcmp(s, "end") == 0 && chNextNonBlank != '=' - || strcmp(s, "endassociate") == 0 || strcmp(s, "endblock") == 0 - || strcmp(s, "endblockdata") == 0 || strcmp(s, "endselect") == 0 - || strcmp(s, "enddo") == 0 || strcmp(s, "endenum") ==0 - || strcmp(s, "endif") == 0 || strcmp(s, "endforall") == 0 - || strcmp(s, "endfunction") == 0 || strcmp(s, "endinterface") == 0 - || strcmp(s, "endmodule") == 0 || strcmp(s, "endprogram") == 0 - || strcmp(s, "endsubroutine") == 0 || strcmp(s, "endtype") == 0 - || strcmp(s, "endwhere") == 0 - || strcmp(s, "procedure") == 0 ) { // Take care of the module procedure statement - lev = -1; - } else if (strcmp(prevWord, "end") == 0 && strcmp(s, "if") == 0){ // end if - lev = 0; - } - return lev; -} -// Folding the code -static void FoldFortranDoc(unsigned int startPos, int length, int initStyle, - Accessor &styler, bool isFixFormat) { - // - // bool foldComment = styler.GetPropertyInt("fold.comment") != 0; - // Do not know how to fold the comment at the moment. - // - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - unsigned int endPos = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - char chNext = styler[startPos]; - char chNextNonBlank; - int styleNext = styler.StyleAt(startPos); - int style = initStyle; - /***************************************/ - int lastStart = 0; - char prevWord[32] = ""; - char Label[6] = ""; - // Variables for do label folding. - static int doLabels[100]; - static int posLabel=-1; - /***************************************/ - for (unsigned int i = startPos; i < endPos; i++) { - char ch = chNext; - chNext = styler.SafeGetCharAt(i + 1); - chNextNonBlank = chNext; - unsigned int j=i+1; - while(IsABlank(chNextNonBlank) && j(tolower(styler[lastStart+k])); - } - s[k] = '\0'; - // Handle the forall and where statement and structure. - if (strcmp(s, "forall") == 0 || strcmp(s, "where") == 0) { - if (strcmp(prevWord, "end") != 0) { - j = i + 1; - char chBrace = '(', chSeek = ')', ch1 = styler.SafeGetCharAt(j); - // Find the position of the first ( - while (ch1 != chBrace && j -1) { - levelCurrent--; - posLabel--; - } - } - } - if (atEOL) { - int lev = levelPrev; - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - if (lev != styler.LevelAt(lineCurrent)) { - styler.SetLevel(lineCurrent, lev); - } - lineCurrent++; - levelPrev = levelCurrent; - visibleChars = 0; - strcpy(prevWord, ""); - } - /***************************************/ - if (!isspacechar(ch)) visibleChars++; - } - /***************************************/ - // Fill in the real level of the next line, keeping the current flags as they will be filled in later - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, levelPrev | flagsNext); -} -/***************************************/ -static const char * const FortranWordLists[] = { - "Primary keywords and identifiers", - "Intrinsic functions", - "Extended and user defined functions", - 0, -}; -/***************************************/ -static void ColouriseFortranDocFreeFormat(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - ColouriseFortranDoc(startPos, length, initStyle, keywordlists, styler, false); -} -/***************************************/ -static void ColouriseFortranDocFixFormat(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - ColouriseFortranDoc(startPos, length, initStyle, keywordlists, styler, true); -} -/***************************************/ -static void FoldFortranDocFreeFormat(unsigned int startPos, int length, int initStyle, - WordList *[], Accessor &styler) { - FoldFortranDoc(startPos, length, initStyle,styler, false); -} -/***************************************/ -static void FoldFortranDocFixFormat(unsigned int startPos, int length, int initStyle, - WordList *[], Accessor &styler) { - FoldFortranDoc(startPos, length, initStyle,styler, true); -} -/***************************************/ -LexerModule lmFortran(SCLEX_FORTRAN, ColouriseFortranDocFreeFormat, "fortran", FoldFortranDocFreeFormat, FortranWordLists); -LexerModule lmF77(SCLEX_F77, ColouriseFortranDocFixFormat, "f77", FoldFortranDocFixFormat, FortranWordLists); diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexGui4Cli.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexGui4Cli.cxx deleted file mode 100644 index f76fff6cc4..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexGui4Cli.cxx +++ /dev/null @@ -1,309 +0,0 @@ -// Scintilla source code edit control -// Copyright 1998-2002 by Neil Hodgson -/* -This is the Lexer for Gui4Cli, included in SciLexer.dll -- by d. Keletsekis, 2/10/2003 - -To add to SciLexer.dll: -1. Add the values below to INCLUDE\Scintilla.iface -2. Run the include/HFacer.py script -3. Run the src/lexGen.py script - -val SCE_GC_DEFAULT=0 -val SCE_GC_COMMENTLINE=1 -val SCE_GC_COMMENTBLOCK=2 -val SCE_GC_GLOBAL=3 -val SCE_GC_EVENT=4 -val SCE_GC_ATTRIBUTE=5 -val SCE_GC_CONTROL=6 -val SCE_GC_COMMAND=7 -val SCE_GC_STRING=8 -val SCE_GC_OPERATOR=9 -*/ - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -#define debug Platform::DebugPrintf - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_' || ch =='\\'); -} - -static inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_' || ch == '.'); -} - -inline bool isGCOperator(int ch) -{ if (isalnum(ch)) - return false; - // '.' left out as it is used to make up numbers - if (ch == '*' || ch == '/' || ch == '-' || ch == '+' || - ch == '(' || ch == ')' || ch == '=' || ch == '%' || - ch == '[' || ch == ']' || ch == '<' || ch == '>' || - ch == ',' || ch == ';' || ch == ':') - return true; - return false; -} - -#define isSpace(x) ((x)==' ' || (x)=='\t') -#define isNL(x) ((x)=='\n' || (x)=='\r') -#define isSpaceOrNL(x) (isSpace(x) || isNL(x)) -#define BUFFSIZE 500 -#define isFoldPoint(x) ((styler.LevelAt(x) & SC_FOLDLEVELNUMBERMASK) == 1024) - -static void colorFirstWord(WordList *keywordlists[], Accessor &styler, - StyleContext *sc, char *buff, int length, int) -{ - int c = 0; - while (sc->More() && isSpaceOrNL(sc->ch)) - { sc->Forward(); - } - styler.ColourTo(sc->currentPos - 1, sc->state); - - if (!IsAWordChar(sc->ch)) // comment, marker, etc.. - return; - - while (sc->More() && !isSpaceOrNL(sc->ch) && (c < length-1) && !isGCOperator(sc->ch)) - { buff[c] = static_cast(sc->ch); - ++c; sc->Forward(); - } - buff[c] = '\0'; - char *p = buff; - while (*p) // capitalize.. - { if (islower(*p)) *p = static_cast(toupper(*p)); - ++p; - } - - WordList &kGlobal = *keywordlists[0]; // keyword lists set by the user - WordList &kEvent = *keywordlists[1]; - WordList &kAttribute = *keywordlists[2]; - WordList &kControl = *keywordlists[3]; - WordList &kCommand = *keywordlists[4]; - - int state = 0; - // int level = styler.LevelAt(line) & SC_FOLDLEVELNUMBERMASK; - // debug ("line = %d, level = %d", line, level); - - if (kGlobal.InList(buff)) state = SCE_GC_GLOBAL; - else if (kAttribute.InList(buff)) state = SCE_GC_ATTRIBUTE; - else if (kControl.InList(buff)) state = SCE_GC_CONTROL; - else if (kCommand.InList(buff)) state = SCE_GC_COMMAND; - else if (kEvent.InList(buff)) state = SCE_GC_EVENT; - - if (state) - { sc->ChangeState(state); - styler.ColourTo(sc->currentPos - 1, sc->state); - sc->ChangeState(SCE_GC_DEFAULT); - } - else - { sc->ChangeState(SCE_GC_DEFAULT); - styler.ColourTo(sc->currentPos - 1, sc->state); - } -} - -// Main colorizing function called by Scintilla -static void -ColouriseGui4CliDoc(unsigned int startPos, int length, int initStyle, - WordList *keywordlists[], Accessor &styler) -{ - styler.StartAt(startPos); - - int quotestart = 0, oldstate, currentline = styler.GetLine(startPos); - styler.StartSegment(startPos); - bool noforward; - char buff[BUFFSIZE+1]; // buffer for command name - - StyleContext sc(startPos, length, initStyle, styler); - buff[0] = '\0'; // cbuff = 0; - - if (sc.state != SCE_GC_COMMENTBLOCK) // colorize 1st word.. - colorFirstWord(keywordlists, styler, &sc, buff, BUFFSIZE, currentline); - - while (sc.More()) - { noforward = 0; - - switch (sc.ch) - { - case '/': - if (sc.state == SCE_GC_COMMENTBLOCK || sc.state == SCE_GC_STRING) - break; - if (sc.chNext == '/') // line comment - { sc.SetState (SCE_GC_COMMENTLINE); - sc.Forward(); - styler.ColourTo(sc.currentPos, sc.state); - } - else if (sc.chNext == '*') // block comment - { sc.SetState(SCE_GC_COMMENTBLOCK); - sc.Forward(); - styler.ColourTo(sc.currentPos, sc.state); - } - else - styler.ColourTo(sc.currentPos, sc.state); - break; - - case '*': // end of comment block, or operator.. - if (sc.state == SCE_GC_STRING) - break; - if (sc.state == SCE_GC_COMMENTBLOCK && sc.chNext == '/') - { sc.Forward(); - styler.ColourTo(sc.currentPos, sc.state); - sc.ChangeState (SCE_GC_DEFAULT); - } - else - styler.ColourTo(sc.currentPos, sc.state); - break; - - case '\'': case '\"': // strings.. - if (sc.state == SCE_GC_COMMENTBLOCK || sc.state == SCE_GC_COMMENTLINE) - break; - if (sc.state == SCE_GC_STRING) - { if (sc.ch == quotestart) // match same quote char.. - { styler.ColourTo(sc.currentPos, sc.state); - sc.ChangeState(SCE_GC_DEFAULT); - quotestart = 0; - } } - else - { styler.ColourTo(sc.currentPos - 1, sc.state); - sc.ChangeState(SCE_GC_STRING); - quotestart = sc.ch; - } - break; - - case ';': // end of commandline character - if (sc.state != SCE_GC_COMMENTBLOCK && sc.state != SCE_GC_COMMENTLINE && - sc.state != SCE_GC_STRING) - { - styler.ColourTo(sc.currentPos - 1, sc.state); - styler.ColourTo(sc.currentPos, SCE_GC_OPERATOR); - sc.ChangeState(SCE_GC_DEFAULT); - sc.Forward(); - colorFirstWord(keywordlists, styler, &sc, buff, BUFFSIZE, currentline); - noforward = 1; // don't move forward - already positioned at next char.. - } - break; - - case '+': case '-': case '=': case '!': // operators.. - case '<': case '>': case '&': case '|': case '$': - if (sc.state != SCE_GC_COMMENTBLOCK && sc.state != SCE_GC_COMMENTLINE && - sc.state != SCE_GC_STRING) - { - styler.ColourTo(sc.currentPos - 1, sc.state); - styler.ColourTo(sc.currentPos, SCE_GC_OPERATOR); - sc.ChangeState(SCE_GC_DEFAULT); - } - break; - - case '\\': // escape - same as operator, but also mark in strings.. - if (sc.state != SCE_GC_COMMENTBLOCK && sc.state != SCE_GC_COMMENTLINE) - { - oldstate = sc.state; - styler.ColourTo(sc.currentPos - 1, sc.state); - sc.Forward(); // mark also the next char.. - styler.ColourTo(sc.currentPos, SCE_GC_OPERATOR); - sc.ChangeState(oldstate); - } - break; - - case '\n': case '\r': - ++currentline; - if (sc.state == SCE_GC_COMMENTLINE) - { styler.ColourTo(sc.currentPos, sc.state); - sc.ChangeState (SCE_GC_DEFAULT); - } - else if (sc.state != SCE_GC_COMMENTBLOCK) - { colorFirstWord(keywordlists, styler, &sc, buff, BUFFSIZE, currentline); - noforward = 1; // don't move forward - already positioned at next char.. - } - break; - -// case ' ': case '\t': -// default : - } - - if (!noforward) sc.Forward(); - - } - sc.Complete(); -} - -// Main folding function called by Scintilla - (based on props (.ini) files function) -static void FoldGui4Cli(unsigned int startPos, int length, int, - WordList *[], Accessor &styler) -{ - bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - - unsigned int endPos = startPos + length; - int visibleChars = 0; - int lineCurrent = styler.GetLine(startPos); - - char chNext = styler[startPos]; - int styleNext = styler.StyleAt(startPos); - bool headerPoint = false; - - for (unsigned int i = startPos; i < endPos; i++) - { - char ch = chNext; - chNext = styler[i+1]; - - int style = styleNext; - styleNext = styler.StyleAt(i + 1); - bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); - - if (style == SCE_GC_EVENT || style == SCE_GC_GLOBAL) - { headerPoint = true; // fold at events and globals - } - - if (atEOL) - { int lev = SC_FOLDLEVELBASE+1; - - if (headerPoint) - lev = SC_FOLDLEVELBASE; - - if (visibleChars == 0 && foldCompact) - lev |= SC_FOLDLEVELWHITEFLAG; - - if (headerPoint) - lev |= SC_FOLDLEVELHEADERFLAG; - - if (lev != styler.LevelAt(lineCurrent)) // set level, if not already correct - { styler.SetLevel(lineCurrent, lev); - } - - lineCurrent++; // re-initialize our flags - visibleChars = 0; - headerPoint = false; - } - - if (!(isspacechar(ch))) // || (style == SCE_GC_COMMENTLINE) || (style != SCE_GC_COMMENTBLOCK))) - visibleChars++; - } - - int lev = headerPoint ? SC_FOLDLEVELBASE : SC_FOLDLEVELBASE+1; - int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK; - styler.SetLevel(lineCurrent, lev | flagsNext); -} - -// I have no idea what these are for.. probably accessible by some message. -static const char * const gui4cliWordListDesc[] = { - "Globals", "Events", "Attributes", "Control", "Commands", - 0 -}; - -// Declare language & pass our function pointers to Scintilla -LexerModule lmGui4Cli(SCLEX_GUI4CLI, ColouriseGui4CliDoc, "gui4cli", FoldGui4Cli, gui4cliWordListDesc); - -#undef debug - diff --git a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexHTML.cxx b/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexHTML.cxx deleted file mode 100644 index dad8fce46f..0000000000 --- a/src/plugins/contrib/wxSmithSTC/stc/scintilla/src/LexHTML.cxx +++ /dev/null @@ -1,2042 +0,0 @@ -// Scintilla source code edit control -/** @file LexHTML.cxx - ** Lexer for HTML. - **/ -// Copyright 1998-2005 by Neil Hodgson -// The License.txt file describes the conditions under which this software may be distributed. - -#include -#include -#include -#include -#include - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -#define SCE_HA_JS (SCE_HJA_START - SCE_HJ_START) -#define SCE_HA_VBS (SCE_HBA_START - SCE_HB_START) -#define SCE_HA_PYTHON (SCE_HPA_START - SCE_HP_START) - -enum script_type { eScriptNone = 0, eScriptJS, eScriptVBS, eScriptPython, eScriptPHP, eScriptXML, eScriptSGML, eScriptSGMLblock }; -enum script_mode { eHtml = 0, eNonHtmlScript, eNonHtmlPreProc, eNonHtmlScriptPreProc }; - -static inline bool IsAWordChar(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_'); -} - -static inline bool IsAWordStart(const int ch) { - return (ch < 0x80) && (isalnum(ch) || ch == '_'); -} - -static inline int MakeLowerCase(int ch) { - if (ch < 'A' || ch > 'Z') - return ch; - else - return ch - 'A' + 'a'; -} - -static void GetTextSegment(Accessor &styler, unsigned int start, unsigned int end, char *s, size_t len) { - size_t i = 0; - for (; (i < end - start + 1) && (i < len-1); i++) { - s[i] = static_cast(MakeLowerCase(styler[start + i])); - } - s[i] = '\0'; -} - -static script_type segIsScriptingIndicator(Accessor &styler, unsigned int start, unsigned int end, script_type prevValue) { - char s[100]; - GetTextSegment(styler, start, end, s, sizeof(s)); - //Platform::DebugPrintf("Scripting indicator [%s]\n", s); - if (strstr(s, "src")) // External script - return eScriptNone; - if (strstr(s, "vbs")) - return eScriptVBS; - if (strstr(s, "pyth")) - return eScriptPython; - if (strstr(s, "javas")) - return eScriptJS; - if (strstr(s, "jscr")) - return eScriptJS; - if (strstr(s, "php")) - return eScriptPHP; - if (strstr(s, "xml")) - return eScriptXML; - - return prevValue; -} - -static int PrintScriptingIndicatorOffset(Accessor &styler, unsigned int start, unsigned int end) { - int iResult = 0; - char s[100]; - GetTextSegment(styler, start, end, s, sizeof(s)); - if (0 == strncmp(s, "php", 3)) { - iResult = 3; - } - - return iResult; -} - -static script_type ScriptOfState(int state) { - if ((state >= SCE_HP_START) && (state <= SCE_HP_IDENTIFIER)) { - return eScriptPython; - } else if ((state >= SCE_HB_START) && (state <= SCE_HB_STRINGEOL)) { - return eScriptVBS; - } else if ((state >= SCE_HJ_START) && (state <= SCE_HJ_REGEX)) { - return eScriptJS; - } else if ((state >= SCE_HPHP_DEFAULT) && (state <= SCE_HPHP_COMMENTLINE)) { - return eScriptPHP; - } else if ((state >= SCE_H_SGML_DEFAULT) && (state < SCE_H_SGML_BLOCK_DEFAULT)) { - return eScriptSGML; - } else if (state == SCE_H_SGML_BLOCK_DEFAULT) { - return eScriptSGMLblock; - } else { - return eScriptNone; - } -} - -static int statePrintForState(int state, script_mode inScriptType) { - int StateToPrint; - - if ((state >= SCE_HP_START) && (state <= SCE_HP_IDENTIFIER)) { - StateToPrint = state + ((inScriptType == eNonHtmlScript) ? 0 : SCE_HA_PYTHON); - } else if ((state >= SCE_HB_START) && (state <= SCE_HB_STRINGEOL)) { - StateToPrint = state + ((inScriptType == eNonHtmlScript) ? 0 : SCE_HA_VBS); - } else if ((state >= SCE_HJ_START) && (state <= SCE_HJ_REGEX)) { - StateToPrint = state + ((inScriptType == eNonHtmlScript) ? 0 : SCE_HA_JS); - } else { - StateToPrint = state; - } - - return StateToPrint; -} - -static int stateForPrintState(int StateToPrint) { - int state; - - if ((StateToPrint >= SCE_HPA_START) && (StateToPrint <= SCE_HPA_IDENTIFIER)) { - state = StateToPrint - SCE_HA_PYTHON; - } else if ((StateToPrint >= SCE_HBA_START) && (StateToPrint <= SCE_HBA_STRINGEOL)) { - state = StateToPrint - SCE_HA_VBS; - } else if ((StateToPrint >= SCE_HJA_START) && (StateToPrint <= SCE_HJA_REGEX)) { - state = StateToPrint - SCE_HA_JS; - } else { - state = StateToPrint; - } - - return state; -} - -static inline bool IsNumber(unsigned int start, Accessor &styler) { - return IsADigit(styler[start]) || (styler[start] == '.') || - (styler[start] == '-') || (styler[start] == '#'); -} - -static inline bool isStringState(int state) { - bool bResult; - - switch (state) { - case SCE_HJ_DOUBLESTRING: - case SCE_HJ_SINGLESTRING: - case SCE_HJA_DOUBLESTRING: - case SCE_HJA_SINGLESTRING: - case SCE_HB_STRING: - case SCE_HBA_STRING: - case SCE_HP_STRING: - case SCE_HP_CHARACTER: - case SCE_HP_TRIPLE: - case SCE_HP_TRIPLEDOUBLE: - case SCE_HPA_STRING: - case SCE_HPA_CHARACTER: - case SCE_HPA_TRIPLE: - case SCE_HPA_TRIPLEDOUBLE: - case SCE_HPHP_HSTRING: - case SCE_HPHP_SIMPLESTRING: - case SCE_HPHP_HSTRING_VARIABLE: - case SCE_HPHP_COMPLEX_VARIABLE: - bResult = true; - break; - default : - bResult = false; - break; - } - return bResult; -} - -static inline bool stateAllowsTermination(int state) { - bool allowTermination = !isStringState(state); - if (allowTermination) { - switch (state) { - case SCE_HPHP_COMMENT: - case SCE_HP_COMMENTLINE: - case SCE_HPA_COMMENTLINE: - allowTermination = false; - } - } - return allowTermination; -} - -// not really well done, since it's only comments that should lex the %> and <% -static inline bool isCommentASPState(int state) { - bool bResult; - - switch (state) { - case SCE_HJ_COMMENT: - case SCE_HJ_COMMENTLINE: - case SCE_HJ_COMMENTDOC: - case SCE_HB_COMMENTLINE: - case SCE_HP_COMMENTLINE: - case SCE_HPHP_COMMENT: - case SCE_HPHP_COMMENTLINE: - bResult = true; - break; - default : - bResult = false; - break; - } - return bResult; -} - -static void classifyAttribHTML(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) { - bool wordIsNumber = IsNumber(start, styler); - char chAttr = SCE_H_ATTRIBUTEUNKNOWN; - if (wordIsNumber) { - chAttr = SCE_H_NUMBER; - } else { - char s[100]; - GetTextSegment(styler, start, end, s, sizeof(s)); - if (keywords.InList(s)) - chAttr = SCE_H_ATTRIBUTE; - } - if ((chAttr == SCE_H_ATTRIBUTEUNKNOWN) && !keywords) - // No keywords -> all are known - chAttr = SCE_H_ATTRIBUTE; - styler.ColourTo(end, chAttr); -} - -static int classifyTagHTML(unsigned int start, unsigned int end, - WordList &keywords, Accessor &styler, bool &tagDontFold, - bool caseSensitive) { - char s[30 + 2]; - // Copy after the '<' - unsigned int i = 0; - for (unsigned int cPos = start; cPos <= end && i < 30; cPos++) { - char ch = styler[cPos]; - if ((ch != '<') && (ch != '/')) { - s[i++] = caseSensitive ? ch : static_cast(MakeLowerCase(ch)); - } - } - - //The following is only a quick hack, to see if this whole thing would work - //we first need the tagname with a trailing space... - s[i] = ' '; - s[i+1] = '\0'; - - //...to find it in the list of no-container-tags - // (There are many more. We will need a keywordlist in the property file for this) - tagDontFold = (NULL != strstr("meta link img area br hr input ",s)); - - //now we can remove the trailing space - s[i] = '\0'; - - bool isScript = false; - char chAttr = SCE_H_TAGUNKNOWN; - if (s[0] == '!') { - chAttr = SCE_H_SGML_DEFAULT; - } else if (s[0] == '/') { // Closing tag - if (keywords.InList(s + 1)) - chAttr = SCE_H_TAG; - } else { - if (keywords.InList(s)) { - chAttr = SCE_H_TAG; - isScript = 0 == strcmp(s, "script"); - } - } - if ((chAttr == SCE_H_TAGUNKNOWN) && !keywords) { - // No keywords -> all are known - chAttr = SCE_H_TAG; - isScript = 0 == strcmp(s, "script"); - } - styler.ColourTo(end, chAttr); - return isScript ? SCE_H_SCRIPT : chAttr; -} - -static void classifyWordHTJS(unsigned int start, unsigned int end, - WordList &keywords, Accessor &styler, script_mode inScriptType) { - char chAttr = SCE_HJ_WORD; - bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.'); - if (wordIsNumber) - chAttr = SCE_HJ_NUMBER; - else { - char s[30 + 1]; - unsigned int i = 0; - for (; i < end - start + 1 && i < 30; i++) { - s[i] = styler[start + i]; - } - s[i] = '\0'; - if (keywords.InList(s)) - chAttr = SCE_HJ_KEYWORD; - } - styler.ColourTo(end, statePrintForState(chAttr, inScriptType)); -} - -static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, script_mode inScriptType) { - char chAttr = SCE_HB_IDENTIFIER; - bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.'); - if (wordIsNumber) - chAttr = SCE_HB_NUMBER; - else { - char s[100]; - GetTextSegment(styler, start, end, s, sizeof(s)); - if (keywords.InList(s)) { - chAttr = SCE_HB_WORD; - if (strcmp(s, "rem") == 0) - chAttr = SCE_HB_COMMENTLINE; - } - } - styler.ColourTo(end, statePrintForState(chAttr, inScriptType)); - if (chAttr == SCE_HB_COMMENTLINE) - return SCE_HB_COMMENTLINE; - else - return SCE_HB_DEFAULT; -} - -static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord, script_mode inScriptType) { - bool wordIsNumber = IsADigit(styler[start]); - char s[30 + 1]; - unsigned int i = 0; - for (; i < end - start + 1 && i < 30; i++) { - s[i] = styler[start + i]; - } - s[i] = '\0'; - char chAttr = SCE_HP_IDENTIFIER; - if (0 == strcmp(prevWord, "class")) - chAttr = SCE_HP_CLASSNAME; - else if (0 == strcmp(prevWord, "def")) - chAttr = SCE_HP_DEFNAME; - else if (wordIsNumber) - chAttr = SCE_HP_NUMBER; - else if (keywords.InList(s)) - chAttr = SCE_HP_WORD; - styler.ColourTo(end, statePrintForState(chAttr, inScriptType)); - strcpy(prevWord, s); -} - -// Update the word colour to default or keyword -// Called when in a PHP word -static void classifyWordHTPHP(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) { - char chAttr = SCE_HPHP_DEFAULT; - bool wordIsNumber = IsADigit(styler[start]) || (styler[start] == '.' && start+1 <= end && IsADigit(styler[start+1])); - if (wordIsNumber) - chAttr = SCE_HPHP_NUMBER; - else { - char s[100]; - GetTextSegment(styler, start, end, s, sizeof(s)); - if (keywords.InList(s)) - chAttr = SCE_HPHP_WORD; - } - styler.ColourTo(end, chAttr); -} - -static bool isWordHSGML(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) { - char s[30 + 1]; - unsigned int i = 0; - for (; i < end - start + 1 && i < 30; i++) { - s[i] = styler[start + i]; - } - s[i] = '\0'; - return keywords.InList(s); -} - -static bool isWordCdata(unsigned int start, unsigned int end, Accessor &styler) { - char s[30 + 1]; - unsigned int i = 0; - for (; i < end - start + 1 && i < 30; i++) { - s[i] = styler[start + i]; - } - s[i] = '\0'; - return (0 == strcmp(s, "[CDATA[")); -} - -// Return the first state to reach when entering a scripting language -static int StateForScript(script_type scriptLanguage) { - int Result; - switch (scriptLanguage) { - case eScriptVBS: - Result = SCE_HB_START; - break; - case eScriptPython: - Result = SCE_HP_START; - break; - case eScriptPHP: - Result = SCE_HPHP_DEFAULT; - break; - case eScriptXML: - Result = SCE_H_TAGUNKNOWN; - break; - case eScriptSGML: - Result = SCE_H_SGML_DEFAULT; - break; - default : - Result = SCE_HJ_START; - break; - } - return Result; -} - -static inline bool ishtmlwordchar(char ch) { - return !isascii(ch) || - (isalnum(ch) || ch == '.' || ch == '-' || ch == '_' || ch == ':' || ch == '!' || ch == '#'); -} - -static inline bool issgmlwordchar(char ch) { - return !isascii(ch) || - (isalnum(ch) || ch == '.' || ch == '_' || ch == ':' || ch == '!' || ch == '#' || ch == '['); -} - -static inline bool IsPhpWordStart(const unsigned char ch) { - return (isascii(ch) && (isalpha(ch) || (ch == '_'))) || (ch >= 0x7f); -} - -static inline bool IsPhpWordChar(char ch) { - return IsADigit(ch) || IsPhpWordStart(ch); -} - -static bool InTagState(int state) { - return state == SCE_H_TAG || state == SCE_H_TAGUNKNOWN || - state == SCE_H_SCRIPT || - state == SCE_H_ATTRIBUTE || state == SCE_H_ATTRIBUTEUNKNOWN || - state == SCE_H_NUMBER || state == SCE_H_OTHER || - state == SCE_H_DOUBLESTRING || state == SCE_H_SINGLESTRING; -} - -static bool IsCommentState(const int state) { - return state == SCE_H_COMMENT || state == SCE_H_SGML_COMMENT; -} - -static bool IsScriptCommentState(const int state) { - return state == SCE_HJ_COMMENT || state == SCE_HJ_COMMENTLINE || state == SCE_HJA_COMMENT || - state == SCE_HJA_COMMENTLINE || state == SCE_HB_COMMENTLINE || state == SCE_HBA_COMMENTLINE; -} - -static bool isLineEnd(char ch) { - return ch == '\r' || ch == '\n'; -} - -static bool isOKBeforeRE(char ch) { - return (ch == '(') || (ch == '=') || (ch == ','); -} - -static bool isPHPStringState(int state) { - return - (state == SCE_HPHP_HSTRING) || - (state == SCE_HPHP_SIMPLESTRING) || - (state == SCE_HPHP_HSTRING_VARIABLE) || - (state == SCE_HPHP_COMPLEX_VARIABLE); -} - -static int FindPhpStringDelimiter(char *phpStringDelimiter, const int phpStringDelimiterSize, int i, const int lengthDoc, Accessor &styler) { - int j; - while (i < lengthDoc && (styler[i] == ' ' || styler[i] == '\t')) - i++; - phpStringDelimiter[0] = '\n'; - for (j = i; j < lengthDoc && styler[j] != '\n' && styler[j] != '\r'; j++) { - if (j - i < phpStringDelimiterSize - 2) - phpStringDelimiter[j-i+1] = styler[j]; - else - i++; - } - phpStringDelimiter[j-i+1] = '\0'; - return j; -} - -static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], - Accessor &styler) { - WordList &keywords = *keywordlists[0]; - WordList &keywords2 = *keywordlists[1]; - WordList &keywords3 = *keywordlists[2]; - WordList &keywords4 = *keywordlists[3]; - WordList &keywords5 = *keywordlists[4]; - WordList &keywords6 = *keywordlists[5]; // SGML (DTD) keywords - - // Lexer for HTML requires more lexical states (7 bits worth) than most lexers - styler.StartAt(startPos, STYLE_MAX); - char prevWord[200]; - prevWord[0] = '\0'; - char phpStringDelimiter[200]; // PHP is not limited in length, we are - phpStringDelimiter[0] = '\0'; - int StateToPrint = initStyle; - int state = stateForPrintState(StateToPrint); - - // If inside a tag, it may be a script tag, so reread from the start to ensure any language tags are seen - if (InTagState(state)) { - while ((startPos > 0) && (InTagState(styler.StyleAt(startPos - 1)))) { - startPos--; - length++; - } - state = SCE_H_DEFAULT; - } - // String can be heredoc, must find a delimiter first - while (startPos > 0 && isPHPStringState(state) && state != SCE_HPHP_SIMPLESTRING) { - startPos--; - length++; - state = styler.StyleAt(startPos); - } - styler.StartAt(startPos, STYLE_MAX); - - int lineCurrent = styler.GetLine(startPos); - int lineState; - if (lineCurrent > 0) { - lineState = styler.GetLineState(lineCurrent); - } else { - // Default client and ASP scripting language is JavaScript - lineState = eScriptJS << 8; - lineState |= styler.GetPropertyInt("asp.default.language", eScriptJS) << 4; - } - script_mode inScriptType = script_mode((lineState >> 0) & 0x03); // 2 bits of scripting mode - bool tagOpened = (lineState >> 2) & 0x01; // 1 bit to know if we are in an opened tag - bool tagClosing = (lineState >> 3) & 0x01; // 1 bit to know if we are in a closing tag - bool tagDontFold = false; //some HTML tags should not be folded - script_type aspScript = script_type((lineState >> 4) & 0x0F); // 4 bits of script name - script_type clientScript = script_type((lineState >> 8) & 0x0F); // 4 bits of script name - int beforePreProc = (lineState >> 12) & 0xFF; // 8 bits of state - - script_type scriptLanguage = ScriptOfState(state); - - const bool foldHTML = styler.GetPropertyInt("fold.html", 0) != 0; - const bool fold = foldHTML && styler.GetPropertyInt("fold", 0); - const bool foldHTMLPreprocessor = foldHTML && styler.GetPropertyInt("fold.html.preprocessor", 1); - const bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; - const bool caseSensitive = styler.GetPropertyInt("html.tags.case.sensitive", 0) != 0; - - int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; - int levelCurrent = levelPrev; - int visibleChars = 0; - - char chPrev = ' '; - char ch = ' '; - char chPrevNonWhite = ' '; - // look back to set chPrevNonWhite properly for better regex colouring - if (scriptLanguage == eScriptJS && startPos > 0) { - int back = startPos; - int style = 0; - while (--back) { - style = styler.StyleAt(back); - if (style < SCE_HJ_DEFAULT || style > SCE_HJ_COMMENTDOC) - // includes SCE_HJ_COMMENT & SCE_HJ_COMMENTLINE - break; - } - if (style == SCE_HJ_SYMBOLS) { - chPrevNonWhite = styler.SafeGetCharAt(back); - } - } - - styler.StartSegment(startPos); - const int lengthDoc = startPos + length; - for (int i = startPos; i < lengthDoc; i++) { - const char chPrev2 = chPrev; - chPrev = ch; - if (!isspacechar(ch) && state != SCE_HJ_COMMENT && - state != SCE_HJ_COMMENTLINE && state != SCE_HJ_COMMENTDOC) - chPrevNonWhite = ch; - ch = styler[i]; - char chNext = styler.SafeGetCharAt(i + 1); - const char chNext2 = styler.SafeGetCharAt(i + 2); - - // Handle DBCS codepages - if (styler.IsLeadByte(ch)) { - chPrev = ' '; - i += 1; - continue; - } - - if ((!isspacechar(ch) || !foldCompact) && fold) - visibleChars++; - - // decide what is the current state to print (depending of the script tag) - StateToPrint = statePrintForState(state, inScriptType); - - // handle script folding - if (fold) { - switch (scriptLanguage) { - case eScriptJS: - case eScriptPHP: - //not currently supported case eScriptVBS: - - if ((state != SCE_HPHP_COMMENT) && (state != SCE_HPHP_COMMENTLINE) && (state != SCE_HJ_COMMENT) && (state != SCE_HJ_COMMENTLINE) && (state != SCE_HJ_COMMENTDOC) && (!isStringState(state))) { - //Platform::DebugPrintf("state=%d, StateToPrint=%d, initStyle=%d\n", state, StateToPrint, initStyle); - //if ((state == SCE_HPHP_OPERATOR) || (state == SCE_HPHP_DEFAULT) || (state == SCE_HJ_SYMBOLS) || (state == SCE_HJ_START) || (state == SCE_HJ_DEFAULT)) { - if ((ch == '{') || (ch == '}')) { - levelCurrent += (ch == '{') ? 1 : -1; - } - } - break; - case eScriptPython: - if (state != SCE_HP_COMMENTLINE) { - if ((ch == ':') && ((chNext == '\n') || (chNext == '\r' && chNext2 == '\n'))) { - levelCurrent++; - } else if ((ch == '\n') && !((chNext == '\r') && (chNext2 == '\n')) && (chNext != '\n')) { - // check if the number of tabs is lower than the level - int Findlevel = (levelCurrent & ~SC_FOLDLEVELBASE) * 8; - for (int j = 0; Findlevel > 0; j++) { - char chTmp = styler.SafeGetCharAt(i + j + 1); - if (chTmp == '\t') { - Findlevel -= 8; - } else if (chTmp == ' ') { - Findlevel--; - } else { - break; - } - } - - if (Findlevel > 0) { - levelCurrent -= Findlevel / 8; - if (Findlevel % 8) - levelCurrent--; - } - } - } - break; - default: - break; - } - } - - if ((ch == '\r' && chNext != '\n') || (ch == '\n')) { - // Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix) - // Avoid triggering two times on Dos/Win - // New line -> record any line state onto /next/ line - if (fold) { - int lev = levelPrev; - if (visibleChars == 0) - lev |= SC_FOLDLEVELWHITEFLAG; - if ((levelCurrent > levelPrev) && (visibleChars > 0)) - lev |= SC_FOLDLEVELHEADERFLAG; - - styler.SetLevel(lineCurrent, lev); - visibleChars = 0; - levelPrev = levelCurrent; - } - lineCurrent++; - styler.SetLineState(lineCurrent, - ((inScriptType & 0x03) << 0) | - ((tagOpened & 0x01) << 2) | - ((tagClosing & 0x01) << 3) | - ((aspScript & 0x0F) << 4) | - ((clientScript & 0x0F) << 8) | - ((beforePreProc & 0xFF) << 12)); - } - - // generic end of script processing - else if ((inScriptType == eNonHtmlScript) && (ch == '<') && (chNext == '/')) { - // Check if it's the end of the script tag (or any other HTML tag) - switch (state) { - // in these cases, you can embed HTML tags (to confirm !!!!!!!!!!!!!!!!!!!!!!) - case SCE_H_DOUBLESTRING: - case SCE_H_SINGLESTRING: - case SCE_HJ_COMMENT: - case SCE_HJ_COMMENTDOC: - //case SCE_HJ_COMMENTLINE: // removed as this is a common thing done to hide - // the end of script marker from some JS interpreters. - case SCE_HJ_DOUBLESTRING: - case SCE_HJ_SINGLESTRING: - case SCE_HJ_REGEX: - case SCE_HB_STRING: - case SCE_HP_STRING: - case SCE_HP_TRIPLE: - case SCE_HP_TRIPLEDOUBLE: - break; - default : - // check if the closing tag is a script tag - if (state == SCE_HJ_COMMENTLINE) { - char tag[7]; // room for the