Page 1 of 2

Base sample with scintilla

PostPosted: Thu Mar 08, 2018 1:28 pm
by AntoninoP
Hello,
I am trying to use scintilla in my program to syntax highlight, but it have no lucky...
Code: Select all  Expand view
#include "FiveWin.ch"
#include "Scintilla.ch"

function Main()
   LOCAL cIni, oWnd, nBits
   DEFINE WINDOW oWnd TITLE "TLPosWin - EtiW"
   
   cIni := MemoRead("test.ini")
   oWnd:oClient := TScintilla():New( 0, 0, 10,10,oWnd,RGB(0,0,0), RGB(255,255,255),SCLEX_PROPERTIES)
   oWnd:oClient:AddText(cIni)
   //oWnd:oClient:Setup()
   nBits  := oWnd:oClient:Send( SCI_GETSTYLEBITSNEEDED, 0, 0 )  // 8
   oWnd:oClient:Send( SCI_SETSTYLEBITS, Max( 5, nBits ) )
   oWnd:oClient:Send( SCI_SETLEXER, SCLEX_PROPERTIES,0 )
   oWnd:oClient:AddText(cIni)
   oWnd:oClient:StyleSetFont( "Lucida Console" )
   oWnd:oClient:Send( SCI_STYLESETFONT,STYLE_DEFAULT, "Lucida Console" )
   oWnd:oClient:Send(SCI_STYLESETFORE, SCE_PROPS_DEFAULT   , RGB(0, 0, 0))
   oWnd:oClient:Send(SCI_STYLESETFORE, SCE_PROPS_COMMENT   , RGB(128, 128, 128))
   oWnd:oClient:Send(SCI_STYLESETFORE, SCE_PROPS_SECTION   , RGB(0, 0, 255))
   oWnd:oClient:Send(SCI_STYLESETFORE, SCE_PROPS_ASSIGNMENT, RGB(0, 128, 0))
   oWnd:oClient:Send(SCI_STYLESETFORE, SCE_PROPS_DEFVAL    , RGB(0, 0, 128))
   oWnd:oClient:Send(SCI_STYLESETFORE, SCE_PROPS_KEY       , RGB(255, 0, 0))
   oWnd:oClient:SetColourise()
   //*/
   
   ACTIVATE WINDOW oWnd
return 0


Help?

Re: Base sample with scintilla

PostPosted: Thu Mar 08, 2018 3:01 pm
by cnavarro
Look Function SourceEdit() in MEMOEDIT.PRG
With this function, you already have an editor using Scintilla

Sample of use

viewtopic.php?f=3&t=35301&p=210187&hilit=sourceedit#p210177

viewtopic.php?f=3&t=35301&p=210187&hilit=sourceedit#p210185

Re: Base sample with scintilla

PostPosted: Thu Mar 15, 2018 8:24 am
by marzio
i use the function SourceEdit() and the class fivedit0.prg from fivewin\samples to edit sql texts.
is it possible to change the list of key words sensitive to colors?
i want to add some SQL statements.
thanks

Re: Base sample with scintilla

PostPosted: Thu Mar 15, 2018 8:43 am
by AntoninoP
You should use
Code: Select all  Expand view
oScintilla:SetKeyWords( 0, "keyword1 keyword2 keyword3" )

the first parameter is the index of keyword list
the second parameter is the list of keywords separated by space

Re: Base sample with scintilla

PostPosted: Thu Mar 15, 2018 9:32 am
by Antonio Linares
function SourceEdit() documentation:

http://wiki.fivetechsoft.com/doku.php?id=fivewin_function_sourceedit

This is a very powerful FWH function. Don't miss it :-)

Re: Base sample with scintilla

PostPosted: Fri Mar 16, 2018 11:46 am
by cnavarro
marzio wrote:i use the function SourceEdit() and the class fivedit0.prg from fivewin\samples to edit sql texts.
is it possible to change the list of key words sensitive to colors?
i want to add some SQL statements.
thanks


You must configure the lexer to use, before call to setup method

oEditor:cLexer := 7
oEditor:SetLexer( 7 ) // SCLEX_SQL

Re: Base sample with scintilla

PostPosted: Mon Mar 19, 2018 10:36 am
by marzio
oScintilla:SetKeyWords( 0, "keyword1 keyword2 keyword3" )
works fine.

i have tried this:
::oEditor = TScintilla():New( 0, 0 , 943, 400,, ::nTextColor, ::nBackColor, 519 )
::oEditor:cLexer := 7
::oEditor:SetLexer( 7 ) // SCLEX_SQL
::oEditor:Setup()

but i receive an error: Error BASE/1004 Message not found: TSCINTILLA:SETLEXER

Re: Base sample with scintilla

PostPosted: Mon Mar 19, 2018 10:45 am
by cnavarro
marzio wrote:oScintilla:SetKeyWords( 0, "keyword1 keyword2 keyword3" )
works fine.

i have tried this:
::oEditor = TScintilla():New( 0, 0 , 943, 400,, ::nTextColor, ::nBackColor, 519 )
::oEditor:cLexer := 7
::oEditor:SetLexer( 7 ) // SCLEX_SQL
::oEditor:Setup()

but i receive an error: Error BASE/1004 Message not found: TSCINTILLA:SETLEXER


Try with

::oEditor:Send( 4001, 7, 0 )

Re: Base sample with scintilla

PostPosted: Mon Mar 19, 2018 10:55 am
by marzio
::oEditor:cLexer := 7
::oEditor:Send( 4001, 7, 0 )
::oEditor:Setup()

i have no difference in colors of SQL sintax.

Re: Base sample with scintilla

PostPosted: Mon Mar 19, 2018 1:37 pm
by AntoninoP
have you tryied to setup some colors?
Code: Select all  Expand view
::oEditor:SetAStyle(SCE_SQL_COMMENTLINE ,RGB(128, 128, 128))
::oEditor:SetAStyle(SCE_SQL_NUMBER,RGB(64, 64, 255))
::oEditor:SetAStyle(SCE_SQL_WORD,RGB(255, 64, 0))
 

unfortunately you need to specify the keyword with
Code: Select all  Expand view
::oEditor:SetKeyWords(0, "select from declare left right join merge where")

Re: Base sample with scintilla

PostPosted: Tue Mar 20, 2018 1:25 am
by cnavarro
Sample for SQL syntax

Image

Code: Select all  Expand view


#include "fivewin.ch"

Static oDlg, oFont, oBold
Static cFileName    := "timezone_posix.sql"
Static cText      := ""
Static oMemo

Function Main()

   local oBtn1
   local bInit      := { | o | MySetup( o ) }
   
   SET DATE BRITISH
   SET DATE FORMAT TO "DD/MM/YYYY"
   SET CENTURY ON
   cText   := MemoRead( cFileName )
   DEFINE FONT oFont NAME "Arial" SIZE 0,-14
   
   DEFINE DIALOG oDlg FROM 30, 30 TO 24, 55   SIZE 1265, 730 PIXEL TRUEPIXEL FONT oFont ;
   TITLE "SAMPLE SOURCEEDIT SQL LEXER - " + FWVERSION

   @ 649, 1130 BTNBMP oBtn1 OF oDlg SIZE 95, 40 PIXEL ;
      PROMPT " &Exit " ACTION oDlg:End()
   
   ACTIVATE DIALOG oDlg ;
      ON INIT SourceEdit( cText, , , 2, 2, 600, 1200, , , , , ;
                          oDlg, , , 7, , , , bInit )
   RELEASE FONT oFont
   
RETURN NIL

//----------------------------------------------------------------------------//

#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_SQL_QOPERATOR 24

//----------------------------------------------------------------------------//

Function MySetup( o )

   local x
   local aStyle := { "000000", "007F00", "0F0F0F", "007F7F", "00007F", "7F007F", "7F007F", ;
            "07F000", "007F00", "E0FFE0", "FF0000", "000000", "E0C0E0", "007F00", ;
            "007F00", "B00040", "3060A0", "804020", "4B0082", "B00040", "8B0000", ;
            "800080", "0000FF", "00FF00", "FF0000" }

   o:nClrText     := CLR_BLUE
   o:nClrPane     := CLR_WHITE
   o:cLexer := 7
   o:Send( 4001, 7, 0 )

   o:lFolding  := .T.
   PonFold( o:hWnd, "fold" , "1" )
   PonFold( o:hWnd, "fold.sql.at.else", "1" )
   PonFold( o:hWnd, "fold.comment", "1" )
   PonFold( o:hWnd, "fold.compact", "1" )
   PonFold( o:hWnd, "fold.sql.only.begin", "1" )
   PonFold( o:hWnd, "lexer.sql.backticks.identifier", "1" )
   PonFold( o:hWnd, "lexer.sql.numbersign.comment", "1" )
   PonFold( o:hWnd, "sql.backslash.escapes", "1" )
   PonFold( o:hWnd, "lexer.sql.allow.dotted.word", "1" ) //(recommended for Oracle PL/SQL objects)
   o:SetAutomaticFold( 2 )

   o:SetColourise( .T. )
   o:SetCharsDefault()
   o:SetWordChars( o:cChars )
   o:SetKeywords( 0, "add alter as asc authorization backup begin break browse bulk by cascade case " + ;
      "check checkpoint close clustered column commit compute constraint containstable continue create current current_date " + ;
      "cursor database dbcc deallocate declare default delete deny desc disk distinct distributed double drop dump else end " + ;
      "errlvl escape except exec execute exit external fetch file fillfactor for foreign freetext freetexttable from full " + ;
      "function goto grant group having holdlock identity identity_insert identitycol if index insert intersect into key " + ;
      "kill lineno load merge national nocheck nonclustered of off offsets on open opendatasource openquery openrowset " + ;
      "openxml option order over percent plan precision primary print proc procedure public raiserror read readtext " + ;
      "reconfigure references replication restore restrict return revert revoke rollback rowcount rowguidcol rule save " + ;
      "schema securityaudit select semantickeyphrasetable semanticsimilaritydetailstable semanticsimilaritytable set " + ;
      "setuser shutdown statistics table tablesample textsize then to top tran transaction trigger truncate union unique " + ;
      "updatetext use user values varying view waitfor when where while with within group writetext" )
   o:SetKeywords( 1, "coalesce collate contains convert current_time current_timestamp current_user " + ;
      "nullif session_user system_user try_convert tsequal update" )
   o:SetKeywords( 2, "all and any between cross exists in inner is join left like not null or outer pivot " + ;
      "right some unpivot" )
   o:SetColorCaret( CLR_HGRAY, .T. )
   o:SetPunctuationChars( o:cPuntChars )
   For x = 0 to 255 //24
      if x <= 24
         if x != 14
            o:StyleSet( x )
            o:StyleSetColor( HexToDec( aStyle[ x + 1 ] ), o:nClrPane )
         endif
      else
            o:StyleSet( x )
            o:StyleSetColor( o:nClrText, o:nClrPane )
      endif
   Next x
   o:Send( 2051, 32, o:nClrText )
   o:Send( 2052, 32, o:nClrPane )
   o:Send( 2051, 34, CLR_GREEN )
   o:Send( 2052, 34, o:nClrPane )
   o:Send( 2051, 35, CLR_RED )
   o:Send( 2052, 35, o:nClrPane )
   o:SetSavePoint()

Return nil

//----------------------------------------------------------------------------//
 

Re: Base sample with scintilla

PostPosted: Tue Mar 20, 2018 8:42 am
by marzio
many thanks to AntoninoP and Cristobal,
i have tried both the examples and them work fine!

Re: Base sample with scintilla

PostPosted: Wed Mar 21, 2018 10:29 am
by AntoninoP
Days trying to make .ini highlight works and now, after build the dll, it works 8)

Re: Base sample with scintilla

PostPosted: Wed Mar 21, 2018 11:30 am
by Antonio Linares
Antonino,

What DLL ? :-)

A screenshot of your INI highlighting surely will be appreciated

Re: Base sample with scintilla

PostPosted: Wed Mar 21, 2018 2:49 pm
by AntoninoP
I recompiled SciLexer.dll
Here a screenshot of test program
Image
And here the code:
Code: Select all  Expand view
#include "FiveWin.ch"
#include "Scintilla.ch"

function Main()
   LOCAL cIni, oWnd, nBits
   DEFINE WINDOW oWnd TITLE "TLPosWin - EtiE"

   //cIni := MemoRead("C:\TL\Utility\TLEtiW\test\Pos\Mag1\Eti\0_pelllicano_scaffale_pdf.ini")
   cIni := MemoRead("C:\pos\config\tlposwin.ini")
   //cIni := MemoRead("C:\fwh32\samples\scintilla\src\SciTE.properties")
   nBits := SCLEX_PROPERTIES

   oWnd:oClient := MyScintilla():New( 0, 0, 10,10,oWnd,RGB(0,0,0), RGB(255,255,255),SCLEX_PROPERTIES)
   oWnd:oClient:SetText(cIni)
   oWnd:oClient:Refresh()
   ACTIVATE WINDOW oWnd
return 0

class MyScintilla FROM TScintilla
   METHOD Setup
endclass

METHOD Setup( nMark, lInit ) CLASS MyScintilla
   ::SendMsg( SCI_SETLEXER, SCLEX_PROPERTIES, 0 )
   ::SendMsg( SCI_SETSTYLEBITS, 5 )
   ::SendMsg(SCI_STYLECLEARALL)

   ::SendMsg(SCI_STYLESETFORE, SCE_PROPS_DEFAULT   , CLR_BLACK)
   ::SendMsg(SCI_STYLESETFORE, SCE_PROPS_COMMENT   , CLR_GRAY)
   ::SendMsg(SCI_STYLESETFORE, SCE_PROPS_SECTION   , CLR_BLUE)
   ::SendMsg(SCI_STYLESETFORE, SCE_PROPS_ASSIGNMENT, RGB(255, 128, 0))
   ::SendMsg(SCI_STYLESETFORE, SCE_PROPS_DEFVAL    , RGB(0, 0, 128))
   ::SendMsg(SCI_STYLESETFORE, SCE_PROPS_KEY       , CLR_RED)
   ::SendMsg(SCI_STYLESETBOLD, SCE_PROPS_KEY, 1)
   ::SendMsg(SCI_STYLESETEOLFILLED,  SCE_PROPS_SECTION, 1)
   PonFold( ::hWnd , "lexer.props.allow.initial.spaces" , "1" )
   PonFold( ::hWnd , "fold" , "1" )
   PonFold( ::hWnd , "fold.compact" , "0" )
   
   ::SendMsg( SCI_STYLESETFONT,STYLE_DEFAULT, "Lucida Console" )
   ::SendMsg( SCI_SETMARGINTYPEN, 1, SC_MARGIN_NUMBER )
   ::SendMsg( SCI_SETMARGINWIDTHN, 1, 40 )
   ::SendMsg( SCI_SETMARGINSENSITIVEN, 1, 1)
   //::Send( SCI_STYLESETBACK , STYLE_LINENUMBER , RGB(0,255,255) ) //CLR_VSBAR )
   //::Send( SCI_STYLESETFORE , STYLE_LINENUMBER , RGB(0,255,255)) //CLR_BLUE )
     
   ::SendMsg(SCI_SETAUTOMATICFOLD, SC_AUTOMATICFOLD_CLICK,0)
   ::SendMsg( SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL )
   ::SendMsg( SCI_SETMARGINWIDTHN, 2, 15 )
   ::SendMsg( SCI_SETMARGINMASKN , 2, SC_MASK_FOLDERS )
   ::SendMsg( SCI_SETMARGINSENSITIVEN, 2, 1 )
   ::SendMsg( SCI_SETFOLDMARGINCOLOUR, 2, RGB(0,255,255) ) //CLR_VSBAR )
   ::SendMsg( SCI_MARKERDEFINE,SC_MARKNUM_FOLDEROPEN,SC_MARK_BOXMINUS)
   ::SendMsg( SCI_MARKERDEFINE,SC_MARKNUM_FOLDER,SC_MARK_BOXPLUS)
   ::SendMsg( SCI_MARKERDEFINE,SC_MARKNUM_FOLDERSUB,SC_MARK_VLINE)
   ::SendMsg( SCI_MARKERDEFINE,SC_MARKNUM_FOLDERTAIL,SC_MARK_LCORNERCURVE)
   ::SendMsg( SCI_MARKERSETFORE,SC_MARKNUM_FOLDER, CLR_WHITE)
   ::SendMsg( SCI_MARKERSETBACK,SC_MARKNUM_FOLDER, CLR_BLACK)
   ::SendMsg( SCI_MARKERSETFORE,SC_MARKNUM_FOLDEROPEN,CLR_WHITE)
   ::SendMsg( SCI_MARKERSETBACK,SC_MARKNUM_FOLDEROPEN,CLR_BLACK)
   ::SendMsg( SCI_MARKERSETBACK,SC_MARKNUM_FOLDERSUB,CLR_BLACK)
   ::SendMsg( SCI_MARKERSETBACK,SC_MARKNUM_FOLDERTAIL,CLR_BLACK)  
   ::SetSavePoint()
return nil

I had to overwrite Setup method of TScintilla because it changes all setting every refresh :shock: