-- wxlua scintilla
myph0="./?.dll;./?51.dll;E:/Program Files/Lua/5.1/?.dll;E:/Program Files/Lua/5.1/?51.dl\ l;E:/Program Files/Lua/5.1/clibs/?.dll;E:/Program Files/Lua/5.1/clibs/?51.dll;E:\ /Program Files/Lua/5.1/loadall.dll;E:/Program Files/Lua/5.1/clibs/loadall.dll;" --~ myph0="" -- Load the wxLua module, does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit package.cpath = myph0.. package.cpath..";./?.dll;./?.so;../lib/?.so;../lib/vc_dll/?.dll;../lib/bcc_dll/?.dll;../lib/mingw_dll/?.dll;" require("wx") -- Does the num have all the bits in value function HasBit(value, num) for n = 32, 0, -1 do local b = 2^n local num_b = num - b local value_b = value - b if num_b >= 0 then num = num_b else return true -- already tested bits in num end if value_b >= 0 then value = value_b end if (num_b >= 0) and (value_b < 0) then return false end end return true end -- Generate a unique new wxWindowID local ID_IDCOUNTER = wx.wxID_HIGHEST + 1 function NewID() ID_IDCOUNTER = ID_IDCOUNTER + 1 return ID_IDCOUNTER end -- File menu local ID_NEW = wx.wxID_NEW local ID_OPEN = wx.wxID_OPEN local ID_CLOSE = NewID() local ID_SAVE = wx.wxID_SAVE local ID_SAVEAS = wx.wxID_SAVEAS local ID_SAVEALL = NewID() local ID_EXIT = wx.wxID_EXIT -- Edit menu local ID_CUT = wx.wxID_CUT local ID_COPY = wx.wxID_COPY local ID_PASTE = wx.wxID_PASTE local ID_SELECTALL = wx.wxID_SELECTALL local ID_UNDO = wx.wxID_UNDO local ID_REDO = wx.wxID_REDO local ID_AUTOCOMPLETE = NewID() local ID_AUTOCOMPLETE_ENABLE = NewID() local ID_COMMENT = NewID() local ID_FOLD = NewID() -- Find menu local ID_FIND = wx.wxID_FIND local ID_FINDNEXT = NewID() local ID_FINDPREV = NewID() local ID_REPLACE = NewID() local ID_GOTOLINE = NewID() local ID_SORT = NewID() if wx.__WXMSW__ then font = wx.wxFont(10, wx.wxFONTFAMILY_MODERN, wx.wxFONTSTYLE_NORMAL, wx.wxFONTWEIGHT_NORMAL, false, "Andale Mono") fontItalic = wx.wxFont(10, wx.wxFONTFAMILY_MODERN, wx.wxFONTSTYLE_ITALIC, wx.wxFONTWEIGHT_NORMAL, false, "Andale Mono") else font = wx.wxFont(10, wx.wxFONTFAMILY_MODERN, wx.wxFONTSTYLE_NORMAL, wx.wxFONTWEIGHT_NORMAL, false, "") fontItalic = wx.wxFont(10, wx.wxFONTFAMILY_MODERN, wx.wxFONTSTYLE_ITALIC, wx.wxFONTWEIGHT_NORMAL, false, "") end -- Markers for editor marker margin local BREAKPOINT_MARKER = 1 local BREAKPOINT_MARKER_VALUE = 2 -- = 2^BREAKPOINT_MARKER local CURRENT_LINE_MARKER = 2 local CURRENT_LINE_MARKER_VALUE = 4 -- = 2^CURRENT_LINE_MARKER exitingProgram = false -- are we currently exiting, ID_EXIT frame=nil frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "wxLua") --frame = wx.wxDialog(wx.NULL, wx.wxID_ANY, "wxLua Temperature Converter",wx.wxDefaultPosition, wx.wxDefaultSize) -- Add the child windows to the frame splitter = wx.wxSplitterWindow(frame, wx.wxID_ANY,wx.wxDefaultPosition, wx.wxDefaultSize,wx.wxSP_3DSASH) notebook = wx.wxNotebook(splitter, wx.wxID_ANY,wx.wxDefaultPosition, wx.wxDefaultSize,wx.wxCLIP_CHILDREN) notebook:Connect(wx.wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, function (event) if not exitingProgram then SetEditorSelection(event:GetSelection()) end event:Skip() -- skip to let page change end) toolBar = frame:CreateToolBar(wx.wxNO_BORDER + wx.wxTB_FLAT + wx.wxTB_DOCKABLE) -- note: Ususally the bmp size isn't necessary, but the HELP icon is not the right size in MSW local toolBmpSize = toolBar:GetToolBitmapSize() toolBar:AddTool(ID_NEW, "New", wx.wxArtProvider.GetBitmap(wx.wxART_NORMAL_FILE, wx.wxART_MENU, toolBmpSize), "Create an empty document") toolBar:AddTool(ID_OPEN, "Open", wx.wxArtProvider.GetBitmap(wx.wxART_FILE_OPEN, wx.wxART_MENU, toolBmpSize), "Open an existing document") toolBar:AddTool(ID_SAVE, "Save", wx.wxArtProvider.GetBitmap(wx.wxART_FILE_SAVE, wx.wxART_MENU, toolBmpSize), "Save the current document") toolBar:AddTool(ID_SAVEALL, "Save All", wx.wxArtProvider.GetBitmap(wx.wxART_NEW_DIR, wx.wxART_MENU, toolBmpSize), "Save all documents") toolBar:AddSeparator() toolBar:AddTool(ID_CUT, "Cut", wx.wxArtProvider.GetBitmap(wx.wxART_CUT, wx.wxART_MENU, toolBmpSize), "Cut the selection") toolBar:AddTool(ID_COPY, "Copy", wx.wxArtProvider.GetBitmap(wx.wxART_COPY, wx.wxART_MENU, toolBmpSize), "Copy the selection") toolBar:AddTool(ID_PASTE, "Paste", wx.wxArtProvider.GetBitmap(wx.wxART_PASTE, wx.wxART_MENU, toolBmpSize), "Paste text from the clipboard") toolBar:AddSeparator() toolBar:AddTool(ID_UNDO, "Undo", wx.wxArtProvider.GetBitmap(wx.wxART_UNDO, wx.wxART_MENU, toolBmpSize), "Undo last edit") toolBar:AddTool(ID_REDO, "Redo", wx.wxArtProvider.GetBitmap(wx.wxART_REDO, wx.wxART_MENU, toolBmpSize), "Redo last undo") toolBar:AddSeparator() toolBar:AddTool(ID_FIND, "Find", wx.wxArtProvider.GetBitmap(wx.wxART_FIND, wx.wxART_MENU, toolBmpSize), "Find text") toolBar:AddTool(ID_REPLACE, "Replace", wx.wxArtProvider.GetBitmap(wx.wxART_FIND_AND_REPLACE, wx.wxART_MENU, toolBmpSize), "Find and replace text") toolBar:Realize() -- ---------------------------------------------------------------------------- -- Get/Set notebook editor page, use nil for current page, returns nil if none function GetEditor(selection) local editor = nil if selection == nil then selection = notebook:GetSelection() end if (selection >= 0) and (selection < notebook:GetPageCount()) then editor = notebook:GetPage(selection):DynamicCast("wxStyledTextCtrl") end return editor end -- init new notebook page selection, use nil for current page function SetEditorSelection(selection) local editor = GetEditor(selection) if editor then editor:SetFocus() editor:SetSTCFocus(true) --~ IsFileAlteredOnDisk(editor) end --~ UpdateStatusText(editor) -- update even if nil end editorID=100 -- Create an editor and add it to the notebook function CreateEditor(name) local editor = wxstc.wxStyledTextCtrl(splitter, editorID ,wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxSUNKEN_BORDER) editorID = editorID + 1 -- increment so they're always unique editor:SetBufferedDraw(true) editor:StyleClearAll() editor:SetFont(font) editor:StyleSetFont(wxstc.wxSTC_STYLE_DEFAULT, font) for i = 0, 32 do editor:StyleSetFont(i, font) end editor:StyleSetForeground(0, wx.wxColour(128, 128, 128)) -- White space editor:StyleSetForeground(1, wx.wxColour(0, 127, 0)) -- Block Comment editor:StyleSetFont(1, fontItalic) --editor:StyleSetUnderline(1, false) editor:StyleSetForeground(2, wx.wxColour(0, 127, 0)) -- Line Comment editor:StyleSetFont(2, fontItalic) -- Doc. Comment --editor:StyleSetUnderline(2, false) editor:StyleSetForeground(3, wx.wxColour(127, 127, 127)) -- Number editor:StyleSetForeground(4, wx.wxColour(0, 127, 127)) -- Keyword editor:StyleSetForeground(5, wx.wxColour(0, 0, 127)) -- Double quoted string editor:StyleSetBold(5, true) --editor:StyleSetUnderline(5, false) editor:StyleSetForeground(6, wx.wxColour(127, 0, 127)) -- Single quoted string editor:StyleSetForeground(7, wx.wxColour(127, 0, 127)) -- not used editor:StyleSetForeground(8, wx.wxColour(0, 127, 127)) -- Literal strings editor:StyleSetForeground(9, wx.wxColour(127, 127, 0)) -- Preprocessor editor:StyleSetForeground(10, wx.wxColour(0, 0, 0)) -- Operators --editor:StyleSetBold(10, true) editor:StyleSetForeground(11, wx.wxColour(0, 0, 0)) -- Identifiers editor:StyleSetForeground(12, wx.wxColour(0, 0, 0)) -- Unterminated strings editor:StyleSetBackground(12, wx.wxColour(224, 192, 224)) editor:StyleSetBold(12, true) editor:StyleSetEOLFilled(12, true) editor:StyleSetForeground(13, wx.wxColour(0, 0, 95)) -- Keyword 2 highlighting styles editor:StyleSetForeground(14, wx.wxColour(0, 95, 0)) -- Keyword 3 editor:StyleSetForeground(15, wx.wxColour(127, 0, 0)) -- Keyword 4 editor:StyleSetForeground(16, wx.wxColour(127, 0, 95)) -- Keyword 5 editor:StyleSetForeground(17, wx.wxColour(35, 95, 175)) -- Keyword 6 editor:StyleSetForeground(18, wx.wxColour(0, 127, 127)) -- Keyword 7 editor:StyleSetBackground(18, wx.wxColour(240, 255, 255)) -- Keyword 8 editor:StyleSetForeground(19, wx.wxColour(0, 127, 127)) editor:StyleSetBackground(19, wx.wxColour(224, 255, 255)) editor:StyleSetForeground(20, wx.wxColour(0, 127, 127)) editor:StyleSetBackground(20, wx.wxColour(192, 255, 255)) editor:StyleSetForeground(21, wx.wxColour(0, 127, 127)) editor:StyleSetBackground(21, wx.wxColour(176, 255, 255)) editor:StyleSetForeground(22, wx.wxColour(0, 127, 127)) editor:StyleSetBackground(22, wx.wxColour(160, 255, 255)) editor:StyleSetForeground(23, wx.wxColour(0, 127, 127)) editor:StyleSetBackground(23, wx.wxColour(144, 255, 255)) editor:StyleSetForeground(24, wx.wxColour(0, 127, 127)) editor:StyleSetBackground(24, wx.wxColour(128, 155, 255)) editor:StyleSetForeground(32, wx.wxColour(224, 192, 224)) -- Line number editor:StyleSetBackground(33, wx.wxColour(192, 192, 192)) -- Brace highlight editor:StyleSetForeground(34, wx.wxColour(0, 0, 255)) editor:StyleSetBold(34, true) -- Brace incomplete highlight editor:StyleSetForeground(35, wx.wxColour(255, 0, 0)) editor:StyleSetBold(35, true) -- Indentation guides editor:StyleSetForeground(37, wx.wxColour(192, 192, 192)) editor:StyleSetBackground(37, wx.wxColour(255, 255, 255)) editor:SetUseTabs(false) editor:SetTabWidth(4) editor:SetIndent(4) editor:SetIndentationGuides(true) editor:SetVisiblePolicy(wxstc.wxSTC_VISIBLE_SLOP, 3) --editor:SetXCaretPolicy(wxstc.wxSTC_CARET_SLOP, 10) --editor:SetYCaretPolicy(wxstc.wxSTC_CARET_SLOP, 3) editor:SetMarginWidth(0, editor:TextWidth(32, "99999_")) -- line # margin editor:SetMarginWidth(1, 16) -- marker margin editor:SetMarginType(1, wxstc.wxSTC_MARGIN_SYMBOL) editor:SetMarginSensitive(1, true) editor:MarkerDefine(BREAKPOINT_MARKER, wxstc.wxSTC_MARK_ROUNDRECT, wx.wxWHITE, wx.wxRED) editor:MarkerDefine(CURRENT_LINE_MARKER, wxstc.wxSTC_MARK_ARROW, wx.wxBLACK, wx.wxGREEN) editor:SetMarginWidth(2, 16) -- fold margin editor:SetMarginType(2, wxstc.wxSTC_MARGIN_SYMBOL) editor:SetMarginMask(2, wxstc.wxSTC_MASK_FOLDERS) editor:SetMarginSensitive(2, true) editor:SetFoldFlags(wxstc.wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED + wxstc.wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED) editor:SetProperty("fold", "1") editor:SetProperty("fold.compact", "1") editor:SetProperty("fold.comment", "1") local grey = wx.wxColour(128, 128, 128) editor:MarkerDefine(wxstc.wxSTC_MARKNUM_FOLDEROPEN, wxstc.wxSTC_MARK_BOXMINUS, wx.wxWHITE, grey) editor:MarkerDefine(wxstc.wxSTC_MARKNUM_FOLDER, wxstc.wxSTC_MARK_BOXPLUS, wx.wxWHITE, grey) editor:MarkerDefine(wxstc.wxSTC_MARKNUM_FOLDERSUB, wxstc.wxSTC_MARK_VLINE, wx.wxWHITE, grey) editor:MarkerDefine(wxstc.wxSTC_MARKNUM_FOLDERTAIL, wxstc.wxSTC_MARK_LCORNER, wx.wxWHITE, grey) editor:MarkerDefine(wxstc.wxSTC_MARKNUM_FOLDEREND, wxstc.wxSTC_MARK_BOXPLUSCONNECTED, wx.wxWHITE, grey) editor:MarkerDefine(wxstc.wxSTC_MARKNUM_FOLDEROPENMID, wxstc.wxSTC_MARK_BOXMINUSCONNECTED, wx.wxWHITE, grey) editor:MarkerDefine(wxstc.wxSTC_MARKNUM_FOLDERMIDTAIL, wxstc.wxSTC_MARK_TCORNER, wx.wxWHITE, grey) grey:delete() editor:Connect(wxstc.wxEVT_STC_MARGINCLICK, function (event) local line = editor:LineFromPosition(event:GetPosition()) local margin = event:GetMargin() if margin == 1 then ToggleDebugMarker(editor, line) elseif margin == 2 then if wx.wxGetKeyState(wx.WXK_SHIFT) and wx.wxGetKeyState(wx.WXK_CONTROL) then FoldSome() else local level = editor:GetFoldLevel(line) if HasBit(level, wxstc.wxSTC_FOLDLEVELHEADERFLAG) then editor:ToggleFold(line) end end end end) editor:Connect(wxstc.wxEVT_STC_CHARADDED, function (event) -- auto-indent local ch = event:GetKey() if (ch == char_CR) or (ch == char_LF) then local pos = editor:GetCurrentPos() local line = editor:LineFromPosition(pos) if (line > 0) and (editor:LineLength(line) == 0) then local indent = editor:GetLineIndentation(line - 1) if indent > 0 then editor:SetLineIndentation(line, indent) editor:GotoPos(pos + indent) end end elseif autoCompleteEnable then -- code completion prompt local pos = editor:GetCurrentPos() local start_pos = editor:WordStartPosition(pos, true) -- must have "wx.X" otherwise too many items if (pos - start_pos > 0) and (start_pos > 2) then local range = editor:GetTextRange(start_pos-3, start_pos) if range == "wx." then local commandEvent = wx.wxCommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, ID_AUTOCOMPLETE) wx.wxPostEvent(frame, commandEvent) end end end end) editor:Connect(wxstc.wxEVT_STC_USERLISTSELECTION, function (event) local pos = editor:GetCurrentPos() local start_pos = editor:WordStartPosition(pos, true) editor:SetSelection(start_pos, pos) editor:ReplaceSelection(event:GetText()) end) editor:Connect(wxstc.wxEVT_STC_SAVEPOINTREACHED, function (event) SetDocumentModified(editor:GetId(), false) end) --~ editor:Connect(wxstc.wxEVT_STC_SAVEPOINTLEFT, function (event) SetDocumentModified(editor:GetId(), true) end) --~ editor:Connect(wxstc.wxEVT_STC_UPDATEUI, function (event) UpdateStatusText(editor) end) editor:Connect(wx.wxEVT_SET_FOCUS, function (event) event:Skip() if in_evt_focus or exitingProgram then return end in_evt_focus = true --~ IsFileAlteredOnDisk(editor) in_evt_focus = false end) if notebook:AddPage(editor, name, true) then local id = editor:GetId() local document = {} document.editor = editor document.index = notebook:GetSelection() document.fileName = nil document.filePath = nil document.modTime = nil document.isModified = false --~ openDocuments[id] = document end return editor end function SetupKeywords(editor, useLuaParser) if useLuaParser then editor:SetLexer(wxstc.wxSTC_LEX_LUA) -- Note: these keywords are shamelessly ripped from scite 1.68 editor:SetKeyWords(0, [[and break do else elseif end false for function if in local nil not or repeat return then true until while]]) editor:SetKeyWords(1, [[_VERSION assert collectgarbage dofile error gcinfo loadfile loadstring print rawget rawset require tonumber tostring type unpack]]) editor:SetKeyWords(2, [[_G getfenv getmetatable ipairs loadlib next pairs pcall rawequal setfenv setmetatable xpcall string table math coroutine io os debug load module select]]) editor:SetKeyWords(3, [[string.byte string.char string.dump string.find string.len string.lower string.rep string.sub string.upper string.format string.gfind string.gsub table.concat table.foreach table.foreachi table.getn table.sort table.insert table.remove table.setn math.abs math.acos math.asin math.atan math.atan2 math.ceil math.cos math.deg math.exp math.floor math.frexp math.ldexp math.log math.log10 math.max math.min math.mod math.pi math.pow math.rad math.random math.randomseed math.sin math.sqrt math.tan string.gmatch string.match string.reverse table.maxn math.cosh math.fmod math.modf math.sinh math.tanh math.huge]]) editor:SetKeyWords(4, [[coroutine.create coroutine.resume coroutine.status coroutine.wrap coroutine.yield io.close io.flush io.input io.lines io.open io.output io.read io.tmpfile io.type io.write io.stdin io.stdout io.stderr os.clock os.date os.difftime os.execute os.exit os.getenv os.remove os.rename os.setlocale os.time os.tmpname coroutine.running package.cpath package.loaded package.loadlib package.path package.preload package.seeall io.popen debug.debug debug.getfenv debug.gethook debug.getinfo debug.getlocal debug.getmetatable debug.getregistry debug.getupvalue debug.setfenv debug.sethook debug.setlocal debug.setmetatable debug.setupvalue debug.traceback]]) -- Get the items in the global "wx" table for autocompletion if not wxkeywords then local keyword_table = {} for index, value in pairs(wx) do table.insert(keyword_table, "wx."..index.." ") end table.sort(keyword_table) wxkeywords = table.concat(keyword_table) end editor:SetKeyWords(5, wxkeywords) else editor:SetLexer(wxstc.wxSTC_LEX_NULL) editor:SetKeyWords(0, "") end editor:Colourise(0, -1) end function CreateAutoCompList(key_) -- much faster than iterating the wx. table local key = "wx."..key_; local a, b = string.find(wxkeywords, key, 1, 1) local key_list = "" while a do local c, d = string.find(wxkeywords, " ", b, 1) key_list = key_list..string.sub(wxkeywords, a+3, c or -1) a, b = string.find(wxkeywords, key, d, 1) end return key_list end --errorLog = wxstc.wxStyledTextCtrl(splitter, wx.wxID_ANY) --~ errorLog = wxstc.wxStyledTextCtrl(splitter, 100 ) errorLog=CreateEditor("xx.lua") errorLog:Show(true) --~ errorLog:SetFont(font) --~ errorLog:StyleSetFont(wxstc.wxSTC_STYLE_DEFAULT, font) --~ errorLog:StyleClearAll() --~ errorLog:SetMarginWidth(1, 16) -- marker margin --~ errorLog:SetMarginType(1, wxstc.wxSTC_MARGIN_SYMBOL); --~ errorLog:MarkerDefine(CURRENT_LINE_MARKER, wxstc.wxSTC_MARK_ARROWS, wx.wxBLACK, wx.wxWHITE) --~ errorLog:SetReadOnly(false) SetupKeywords( errorLog , true ) splitter:Initialize(errorLog) -- split later to show errorLog -- Set up the frame to use that sizer to move/resize its children controls errorLog:SetAutoLayout(true) --~ frame:SetSizer(splitter) --frame:SetIcon(wxLuaEditorIcon) --FIXME add this back frame:Show(true) -- Call wx.wxGetApp():MainLoop() last to start the wxWidgets event loop, -- otherwise the wxLua program will exit immediately. -- Does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit since the -- MainLoop is already running or will be started by the C++ program. wx.wxGetApp():MainLoop()
标签:wxColour,end,wxlua,scintilla,--,editor,local,模板,wx From: https://www.cnblogs.com/chenyalin/p/16923967.html