;based on older MyPadSCI ;but with reduced functions (limited to SCI only calls) If InitScintilla("Scintilla.dll")=#False MessageRequester("Scintilla Error","Unable to load Scintilla.dll",#MB_ICONERROR) End EndIf ;- HTML Lexer Enumeration #HTML_SPACE #HTML_Comment #HTML_OPENTAG #HTML_ENDTAG #HTML_OPENTEXT #HTML_ENDTEXT EndEnumeration Procedure.l SCI_SearchText(Gadget,ST.s,Flag.l=0) SetActiveGadget(Gadget) Pos=SCI_GetCurrentPos(Gadget) SCI_SetAnchor(Gadget, Pos) SCI_SearchAnchor(Gadget) ;flg = 0 ;If GetGadgetState(chk1) ; flg | #SCFIND_MATCHCASE ;EndIf ;If GetGadgetState(chk2) ; flg | #SCFIND_WHOLEWORD ;EndIf ;S$ = GetGadgetText(str1) Sel_Start=SCI_SearchNext(Gadget,Flag,@ST) If Sel_Start<0 ProcedureReturn #False Else ;select the found text SetActiveGadget(Gadget) Sel_End=SCI_GetAnchor(Gadget) SCI_GotoPos(Gadget,Sel_Start) SCI_SetSel(Gadget,Sel_Start,Sel_End) EndIf ProcedureReturn #True EndProcedure Procedure GotoTop(Gadget) SetActiveGadget(Gadget) ;SCI_GotoLine(Gadget,0) ;SCI_GotoPos(Gadget,0) ;SCI_SetAnchor(Gadget, 0) ;SCI_SearchAnchor(Gadget) SCI_SetSel(Gadget,0,0) EndProcedure Procedure SCI_ReplaceText(Gadget,RT.s) ;SetActiveGadget(Gadget) SCI_ReplaceSel(Gadget,@RT) EndProcedure Procedure.l SCI_LoadFile(Gadget,FileName.s) ;returns true if file is loaded If ReadFile(1,FileName) len.l = Lof(1) If len *mem = AllocateMemory(len) If *mem ReadData(1, *mem, len) SCI_SetText(Gadget, *mem) FreeMemory(*mem) EndIf EndIf CloseFile(1) ;scroll to top SCI_GotoLine(Gadget,0) SCI_SetSavePoint(Gadget) ProcedureReturn #True EndIf ProcedureReturn #False EndProcedure Procedure.l SCI_SaveFile(Gadget.l,FileName.s) ;returns true if file is saved If Len(FileName)>4 If CreateFile(1,FileName) len.l = SCI_GetLength(Gadget) + 1 *mem = AllocateMemory(len) If *mem SCI_GetText(Gadget, len, *mem) WriteData(1, *mem, len) FreeMemory(*mem) EndIf CloseFile(1) SCI_SetSavePoint(Gadget) ProcedureReturn #True EndIf EndIf ProcedureReturn #False EndProcedure Procedure SCI_SetHTML(Gadget) ;this prepares gadget for HTML lexing ..... ; Choose a lexer SCI_SetLexer(Gadget, #SCLEX_CONTAINER) ;- Set default font SCI_StyleSetFont(Gadget, #STYLE_DEFAULT, @DefFont) SCI_StyleSetSize(Gadget, #STYLE_DEFAULT, DefSize) SCI_StyleClearAll(Gadget) ;- Set caret line colour SCI_SetCaretLineBack(Gadget, Caret) SCI_SetCaretLineVisible(Gadget, #True) ;- Set styles for custom lexer SCI_StyleSetFore(Gadget, #HTML_Comment, Comment) SCI_StyleSetFore(Gadget, #HTML_OpenText, Quote) SCI_StyleSetFore(Gadget, #HTML_EndText, Quote) SCI_StyleSetFore(Gadget, #HTML_SPACE, DefColor) SCI_StyleSetFore(Gadget, #HTML_OPENTAG, Tag) SCI_StyleSetFore(Gadget, #HTML_ENDTAG, Tag) ;- Disable default Scintilla menus ;SCI_SetMouseDownCaptures(Gadget,0) EndProcedure Procedure HTML_light(Gadget.l,StartPos.l,EndPos.l) If startpos = -1 endstyled.l = SCI_GetEndStyled(Gadget) linenumber.l = SCI_LineFromPosition(Gadget, endstyled) Else linenumber.l = SCI_LineFromPosition(Gadget, startpos) EndIf CurrentPos.l = SCI_PositionFromLine(Gadget, linenumber) ;CurrentPos=start of line char SCI_StartStyling(Gadget, CurrentPos, $1F | #INDICS_MASK) *MDI_Window.MDI_Struct = GetGadgetData(Gadget) ;- determine initial state If CurrentPos>0 state = SCI_GetStyleAt(Gadget,CurrentPos - 1) Select state Case #HTML_ENDTEXT state = #HTML_OPENTAG Case #HTML_ENDTAG state = #HTML_SPACE EndSelect Else state = #HTML_Space EndIf If *MDI_Window\ChildFlag=#False state=#HTML_Space EndIf startkeyword.l=CurrentPos ;- HighLight Loop, check char ;Debug "Styling from "+Str(CurrentPos)+" to "+Str(endpos) While CurrentPos <= endpos oldstate = state Char.l = SCI_GetCharat(gadget, CurrentPos) ;Debug "OldState="+Str(oldstate) ;Debug "Char="+Chr(char) Select Char Case '<' state = #HTML_OPENTAG Case '>' state = #HTML_ENDTAG Case 34 If state = #HTML_OPENTAG state= #HTML_OPENTEXT ElseIf state=#HTML_OPENTEXT state=#HTML_ENDTEXT EndIf Case '!' If state = #HTML_OPENTAG state = #HTML_COMMENT EndIf Default If state = #HTML_ENDTAG state=#HTML_SPACE ElseIf state=#HTML_ENDTEXT state=#HTML_OPENTAG EndIf EndSelect If *MDI_Window\ChildFlag=#False state=#HTML_Space EndIf ;Debug "Newstate="+Str(state) If oldstate<>state SCI_SetStyling(gadget, CurrentPos - startkeyword, oldstate) startkeyword=CurrentPos ElseIf CurrentPos=EndPos SCI_SetStyling(gadget, CurrentPos - startkeyword, state) startkeyword=CurrentPos EndIf CurrentPos + 1 Wend EndProcedure Procedure SCI_Callback(Gadget, *scinotify.SCNotification) *lpnmhdr.NMHDR = *scinotify\nmhdr If GetGadgetData(Gadget) ;*MDI.MDIWindow = GetGadgetData(Gadget) ;mouse.l=SCI_GetCurrentPos(Gadget) ;Line.l=SCI_LineFromPosition(Gadget,mouse) ;LStart.l=SCI_PositionFromLine(Gadget,Line) ;Row.l=mouse-LStart ;StatusBarText(*MDI\StatBar, 0, " Line: " + Str(line), #PB_StatusBar_BorderLess) ;StatusBarText(*MDI\StatBar, 1, " Col: " + Str(row), #PB_StatusBar_BorderLess) ;StatusBarText(*MDI\StatBar, 2, "Style: "+Str(SCI_GetStyleAT(Gadget,mouse))) Select *lpnmhdr\code Case #SCN_STYLENEEDED HTML_light(Gadget,-1, *scinotify\Position) EndSelect EndIf EndProcedure