Base sample with scintilla

AntoninoP
Posts: 375
Joined: Tue Feb 10, 2015 9:48 am
Location: Albenga, Italy
Contact:

Base sample with scintilla

Post by AntoninoP »

Hello,
I am trying to use scintilla in my program to syntax highlight, but it have no lucky...

Code: Select all | Expand

#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?
User avatar
cnavarro
Posts: 6568
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 4 times
Been thanked: 5 times

Re: Base sample with scintilla

Post 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
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
marzio
Posts: 129
Joined: Wed Apr 04, 2007 6:54 am

Re: Base sample with scintilla

Post 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
AntoninoP
Posts: 375
Joined: Tue Feb 10, 2015 9:48 am
Location: Albenga, Italy
Contact:

Re: Base sample with scintilla

Post by AntoninoP »

You should use

Code: Select all | Expand

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
User avatar
Antonio Linares
Site Admin
Posts: 42644
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 59 times
Been thanked: 93 times
Contact:

Re: Base sample with scintilla

Post 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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 6568
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 4 times
Been thanked: 5 times

Re: Base sample with scintilla

Post 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
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
marzio
Posts: 129
Joined: Wed Apr 04, 2007 6:54 am

Re: Base sample with scintilla

Post 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
User avatar
cnavarro
Posts: 6568
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 4 times
Been thanked: 5 times

Re: Base sample with scintilla

Post 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 )
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
marzio
Posts: 129
Joined: Wed Apr 04, 2007 6:54 am

Re: Base sample with scintilla

Post by marzio »

::oEditor:cLexer := 7
::oEditor:Send( 4001, 7, 0 )
::oEditor:Setup()

i have no difference in colors of SQL sintax.
AntoninoP
Posts: 375
Joined: Tue Feb 10, 2015 9:48 am
Location: Albenga, Italy
Contact:

Re: Base sample with scintilla

Post by AntoninoP »

have you tryied to setup some colors?

Code: Select all | Expand

::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

::oEditor:SetKeyWords(0, "select from declare left right join merge where")
User avatar
cnavarro
Posts: 6568
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 4 times
Been thanked: 5 times

Re: Base sample with scintilla

Post by cnavarro »

Sample for SQL syntax

Image

Code: Select all | Expand



#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

//----------------------------------------------------------------------------//
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
marzio
Posts: 129
Joined: Wed Apr 04, 2007 6:54 am

Re: Base sample with scintilla

Post by marzio »

many thanks to AntoninoP and Cristobal,
i have tried both the examples and them work fine!
AntoninoP
Posts: 375
Joined: Tue Feb 10, 2015 9:48 am
Location: Albenga, Italy
Contact:

Re: Base sample with scintilla

Post by AntoninoP »

Days trying to make .ini highlight works and now, after build the dll, it works 8)
User avatar
Antonio Linares
Site Admin
Posts: 42644
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 59 times
Been thanked: 93 times
Contact:

Re: Base sample with scintilla

Post by Antonio Linares »

Antonino,

What DLL ? :-)

A screenshot of your INI highlighting surely will be appreciated
regards, saludos

Antonio Linares
www.fivetechsoft.com
AntoninoP
Posts: 375
Joined: Tue Feb 10, 2015 9:48 am
Location: Albenga, Italy
Contact:

Re: Base sample with scintilla

Post by AntoninoP »

I recompiled SciLexer.dll
Here a screenshot of test program
Image
And here the code:

Code: Select all | Expand

#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:
Post Reply