Page 2 of 2

Re: Initscintilla function deprecated

Posted: Fri Oct 25, 2024 3:40 pm
by skywalk
Hi Fred,
Why did you not use lexilla for the PB IDE code?
Is it easier to hardcode within the scintilla code directly?
Or it was already coded before lexilla appeared?

Re: Initscintilla function deprecated

Posted: Fri Oct 25, 2024 5:08 pm
by Fred
We have our own parser because we need much more than just coloring/case correction

Re: Initscintilla function deprecated

Posted: Mon Feb 24, 2025 11:45 pm
by skinkairewalker
infratec wrote: Fri Oct 25, 2024 10:05 am Hm ... your code works here without problems.
I only changed the OpenfileRequester() part, removed InitScintilla() and modified the window stuff

Code: Select all

EnableExplicit



Procedure.s ReadFileToVar(Path$)
  Protected id_file, Format, Text$
  
  id_file = ReadFile(#PB_Any, Path$)
  If id_file
    Format = ReadStringFormat(id_file)
    Text$ = ReadString(id_file, Format | #PB_File_IgnoreEOL)
    CloseFile(id_file)
  EndIf
  
  ProcedureReturn Text$
EndProcedure


Define NbLexers, *Buffer, i, k, *Text, File$, *Lexer, w, h

Prototype.i CreateLexerProto(name.p - utf8)
Prototype.i GetLexerCountProto()
Prototype GetLexerNameProto(index.i, *BufferName, *BufferNameLength)


If OpenLibrary(0, "Lexilla.dll")
  Define CreateLexer.CreateLexerProto = GetFunction(0, "CreateLexer")
  Define GetLexerCount.GetLexerCountProto = GetFunction(0, "GetLexerCount")
  Define GetLexerName.GetLexerNameProto = GetFunction(0, "GetLexerName")
  
  If CreateLexer = #Null Or GetLexerCount = #Null Or GetLexerName = #Null
    Debug "Invalid Lexilla lib"
    End
  EndIf
EndIf

File$ = OpenFileRequester("Choose a html file", #PB_Compiler_Home + "Examples\Sources\Data\WebView\", "HTML|*.htm;*.html", 0)
If File$
  If FileSize(File$) < 0
    End
  EndIf
Else
  End
EndIf

; ; List all available lexers
; ;
; NbLexers = GetLexerCount()
; Debug "NbLexers: "+NbLexers
; 
; *Buffer = AllocateMemory(128)
; If *Buffer
;   For k = 0 To NbLexers - 1
;     GetLexerName(k, *Buffer, MemorySize(*Buffer))
;     Debug PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8)
;   Next
;   FreeMemory(*Buffer)
; EndIf

ExamineDesktops()
w = DesktopWidth(0)
h = DesktopHeight(0)


If OpenWindow(0, 0, 0, w - 40, h - 200, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  ScintillaGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 20, 0)
  
  ScintillaSendMessage(0, #SCI_STYLESETSIZE, #STYLE_DEFAULT, 12) ; font size
  ScintillaSendMessage(0, #SCI_STYLECLEARALL)
  ScintillaSendMessage(0, #SCI_STYLESETBACK, #STYLE_DEFAULT, $3f3f3f)
  ScintillaSendMessage(0, #SCI_SETSELBACK, 1, $a0a0a0) ; the background color of the selection
  ScintillaSendMessage(0, #SCI_SETSELALPHA, 100)       ; transparency of the selection
  For i = 0 To 32
    ScintillaSendMessage(0, #SCI_STYLESETBACK, i, $3f3f3f)
    ScintillaSendMessage(0, #SCI_STYLESETFORE, i, $999999) ; default text color
  Next
  
  *Lexer = CreateLexer("hypertext")
  ScintillaSendMessage(0, #SCI_SETILEXER, 0, *Lexer)
  
  ; HTML
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 1, $FF9F00) ; Comments
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 2, $9CCBEB) ; Numbers
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 3, $8080FF) ; Keyword1
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 4, $999999) ; Lines
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 6, $72ADC0) ; Operators
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 7, $F78865) ; Keyword Identifier
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 10, $72ADC0); Keyword2
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 11, $FF8000); Keyword3
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 12, $71AE71); Keyword4
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 13, $DE98D9); Constants
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 15, $00FFFF); Label
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 16, $8080FF); Error
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 17, $D3D08C); Hexnumber
  ScintillaSendMessage(0, #SCI_STYLESETFORE, 18, $D3D08C); Binnumber
  
  
  ; Set the text to the ScintillaGadget
  *Text = UTF8(ReadFileToVar(File$))
  ScintillaSendMessage(0, #SCI_SETTEXT, 0, *Text)
  FreeMemory(*Text) ; The buffer made by UTF8() has to be freed, to avoid memory leak
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
You need the lexilla.dll in the same directory as your exe.
And set 'Create temporay executable in source directory' for running from the IDE

I'm trying to change the lexer to vb or lua, but apparently it didn't work, is there something I'm forgetting to do???