From 0c678f3cba32b1ea38b984e088d50ed4c58fce6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Minisini?= Date: Sat, 16 Apr 2011 00:25:07 +0000 Subject: [PATCH] [DEVELOPMENT ENVIRONMENT] * NEW: Little changes in Sapphire theme. * BUG: Fix text editor toolbar tooltips. * NEW: Support for C and C++ files. * BUG: Support for procedure folding and unfolding shortcuts in the text editor. * NEW: A "Paste special" button in the code editor toolbar. [GB.EVAL.HIGHLIGHT] * NEW: C and C++ syntax hilighting. [GB.FORM.MDI] * BUG: Don't try to optimize Toolbar separators in design mode. [GB.QT4.EXT] * NEW: In Editor, highlight both matching braces now. git-svn-id: svn://localhost/gambas/trunk@3770 867c0c6c-44f3-4631-809d-bfa615b0a4ec --- TODO | 1 + app/src/gambas3/.lang/.pot | 112 ++++---- app/src/gambas3/.src/Editor/Code/FEditor.form | 47 ++-- .../.src/Editor/Other/FTextEditor.class | 24 +- .../.src/Editor/Other/FTextEditor.form | 6 +- app/src/gambas3/theme/sapphire | 4 +- comp/src/gb.eval.highlight/.info | 8 + comp/src/gb.eval.highlight/.project | 4 +- comp/src/gb.eval.highlight/.settings | 9 +- .../gb.eval.highlight/.src/Highlight.class | 12 + .../gb.eval.highlight/.src/HighlightC.module | 263 ++++++++++++++++++ .../.src/HighlightCPlusPlus.module | 43 +++ comp/src/gb.eval.highlight/.startup | 2 +- .../gb.form.mdi/.src/ToolBar/FToolBar.class | 2 + gb.qt4/src/ext/CEditor.cpp | 5 +- gb.qt4/src/ext/gview.cpp | 8 +- main/gbx/gbx_exec.c | 11 + 17 files changed, 471 insertions(+), 90 deletions(-) create mode 100644 comp/src/gb.eval.highlight/.src/HighlightC.module create mode 100644 comp/src/gb.eval.highlight/.src/HighlightCPlusPlus.module diff --git a/TODO b/TODO index b15a2702b..5388f700d 100644 --- a/TODO +++ b/TODO @@ -49,6 +49,7 @@ GUI RELATED STUFF - GridView automatic column resizing by code in gb.gtk, and in gb.qt. - Moveable tabs. - ListView and GridView selection interface should be the same. +- More clever vertical toolbar. DESKTOP COMPONENT diff --git a/app/src/gambas3/.lang/.pot b/app/src/gambas3/.lang/.pot index 5785c82cf..e449275dd 100644 --- a/app/src/gambas3/.lang/.pot +++ b/app/src/gambas3/.lang/.pot @@ -290,11 +290,11 @@ msgstr "" msgid "Provides" msgstr "" -#: CInsertColor.class:103 FEditor.class:3672 FTextEditor.class:997 +#: CInsertColor.class:103 FEditor.class:3684 FTextEditor.class:1019 msgid "Insert color" msgstr "" -#: CModule.class:28 FCreateFile.class:652 FEditor.class:3637 FForm.class:3728 +#: CModule.class:28 FCreateFile.class:652 FEditor.class:3638 FForm.class:3728 #: FInfo.class:89 msgid "Form" msgstr "" @@ -476,7 +476,7 @@ msgstr "" #: FReportBorderChooser.class:345 FReportBrushChooser.class:475 #: FReportCoordChooser.class:126 FSave.class:118 FSaveProjectAs.class:130 #: FSelectExtraFile.class:78 FSelectIcon.class:272 FSnippet.class:142 -#: FTableChooser.class:144 FText.class:106 FTextEditor.class:463 +#: FTableChooser.class:144 FText.class:106 FTextEditor.class:485 #: FTranslate.class:638 Project.module:412 msgid "Cancel" msgstr "" @@ -511,46 +511,46 @@ msgid "" msgstr "" #: FCommit.class:225 FConflict.class:325 FConnectionEditor.class:1874 -#: FEditor.class:3470 FForm.class:3558 FIconEditor.class:2176 +#: FEditor.class:3471 FForm.class:3558 FIconEditor.class:2176 #: FImageEditor.class:77 FMenu.class:971 FOutput.class:388 -#: FTextEditor.class:770 +#: FTextEditor.class:792 msgid "Cut" msgstr "" #: FCommit.class:231 FConflict.class:331 FConnectionEditor.class:1651 -#: FEditor.class:3476 FForm.class:3565 FIconEditor.class:2184 +#: FEditor.class:3477 FForm.class:3565 FIconEditor.class:2184 #: FImageEditor.class:86 FMenu.class:977 FOutput.class:395 -#: FTextEditor.class:777 +#: FTextEditor.class:799 msgid "Copy" msgstr "" #: FCommit.class:237 FConflict.class:337 FConnectionEditor.class:1895 -#: FEditor.class:3483 FForm.class:3578 FIconEditor.class:2192 +#: FEditor.class:3484 FForm.class:3578 FIconEditor.class:2192 #: FImageEditor.class:95 FMenu.class:983 FOutput.class:402 -#: FPasteTable.class:331 FTextEditor.class:784 +#: FPasteTable.class:331 FTextEditor.class:806 msgid "Paste" msgstr "" #: FCommit.class:243 FConflict.class:343 FConnectionEditor.class:1902 -#: FEditor.class:3454 FForm.class:3803 FIconEditor.class:2160 +#: FEditor.class:3455 FForm.class:3803 FIconEditor.class:2160 #: FImageEditor.class:105 FOption.class:1552 FOutput.class:371 -#: FTextEditor.class:753 +#: FTextEditor.class:775 msgid "Undo" msgstr "" #: FCommit.class:249 FConflict.class:349 FConnectionEditor.class:1909 -#: FEditor.class:3461 FForm.class:3813 FImageEditor.class:113 -#: FOutput.class:378 FTextEditor.class:760 +#: FEditor.class:3462 FForm.class:3813 FImageEditor.class:113 +#: FOutput.class:378 FTextEditor.class:782 msgid "Redo" msgstr "" -#: FCommit.class:255 FConflict.class:355 FEditor.class:3698 FMenu.class:993 -#: FTextEditor.class:956 +#: FCommit.class:255 FConflict.class:355 FEditor.class:3710 FMenu.class:993 +#: FTextEditor.class:978 msgid "Indent" msgstr "" -#: FCommit.class:261 FConflict.class:361 FEditor.class:3706 FMenu.class:999 -#: FTextEditor.class:963 +#: FCommit.class:261 FConflict.class:361 FEditor.class:3718 FMenu.class:999 +#: FTextEditor.class:985 msgid "Unindent" msgstr "" @@ -696,8 +696,8 @@ msgstr "" msgid "The table '&1' has been modified. Do you want to save it?" msgstr "" -#: FConnectionEditor.class:284 FEditor.class:3588 FForm.class:3719 -#: FIconEditor.class:1426 FImageEditor.class:60 FTextEditor.class:875 +#: FConnectionEditor.class:284 FEditor.class:3589 FForm.class:3719 +#: FIconEditor.class:1426 FImageEditor.class:60 FTextEditor.class:897 msgid "Save" msgstr "" @@ -820,7 +820,7 @@ msgstr "" #: FConnectionEditor.class:1622 FEditor.class:2276 FForm.class:2960 #: FHelpBrowser.class:347 FIconEditor.class:2046 FImageEditor.class:68 -#: FTextEditor.class:463 FTranslate.class:732 +#: FTextEditor.class:485 FTranslate.class:732 msgid "Reload" msgstr "" @@ -1287,7 +1287,7 @@ msgstr "" msgid "Stack backtrace" msgstr "" -#: FEditor.class:2276 FIconEditor.class:2046 FTextEditor.class:463 +#: FEditor.class:2276 FIconEditor.class:2046 FTextEditor.class:485 msgid "" "The file has been modified.\n" "\n" @@ -1298,115 +1298,115 @@ msgstr "" msgid "(Declarations)" msgstr "" -#: FEditor.class:3390 +#: FEditor.class:3391 msgid "Go to" msgstr "" -#: FEditor.class:3395 FTextEditor.class:744 +#: FEditor.class:3396 FTextEditor.class:766 msgid "Go to line..." msgstr "" -#: FEditor.class:3401 +#: FEditor.class:3402 msgid "Find definition" msgstr "" -#: FEditor.class:3408 FHelpBrowser.class:329 +#: FEditor.class:3409 FHelpBrowser.class:329 msgid "Go back" msgstr "" -#: FEditor.class:3415 +#: FEditor.class:3416 msgid "Open form" msgstr "" -#: FEditor.class:3422 FForm.class:3490 FMain.class:2637 +#: FEditor.class:3423 FForm.class:3490 FMain.class:2637 msgid "&Startup class" msgstr "" -#: FEditor.class:3430 +#: FEditor.class:3431 msgid "Run &until current line" msgstr "" -#: FEditor.class:3437 +#: FEditor.class:3438 msgid "Toggle &breakpoint" msgstr "" -#: FEditor.class:3445 +#: FEditor.class:3446 msgid "&Watch expression" msgstr "" -#: FEditor.class:3490 +#: FEditor.class:3491 msgid "Paste special..." msgstr "" -#: FEditor.class:3496 FTextEditor.class:791 +#: FEditor.class:3497 FTextEditor.class:813 msgid "Insert color..." msgstr "" -#: FEditor.class:3505 FTextEditor.class:800 +#: FEditor.class:3506 FTextEditor.class:822 msgid "Select &All" msgstr "" -#: FEditor.class:3514 +#: FEditor.class:3515 msgid "Comment" msgstr "" -#: FEditor.class:3521 +#: FEditor.class:3522 msgid "Uncomment" msgstr "" -#: FEditor.class:3531 FOutput.class:419 FTextEditor.class:809 +#: FEditor.class:3532 FOutput.class:419 FTextEditor.class:831 msgid "Find next" msgstr "" -#: FEditor.class:3538 FOutput.class:426 FTextEditor.class:816 +#: FEditor.class:3539 FOutput.class:426 FTextEditor.class:838 msgid "Find previous" msgstr "" -#: FEditor.class:3547 FTextEditor.class:825 +#: FEditor.class:3548 FTextEditor.class:847 msgid "View" msgstr "" -#: FEditor.class:3551 FTextEditor.class:829 +#: FEditor.class:3552 FTextEditor.class:851 msgid "No split" msgstr "" -#: FEditor.class:3558 FTextEditor.class:836 +#: FEditor.class:3559 FTextEditor.class:858 msgid "Horizontal split" msgstr "" -#: FEditor.class:3565 FTextEditor.class:843 +#: FEditor.class:3566 FTextEditor.class:865 msgid "Vertical split" msgstr "" -#: FEditor.class:3576 +#: FEditor.class:3577 msgid "Make code pretty" msgstr "" -#: FEditor.class:3598 FPasteSpecial.class:253 +#: FEditor.class:3599 FPasteSpecial.class:253 msgid "Paste as string" msgstr "" -#: FEditor.class:3603 FPasteSpecial.class:258 +#: FEditor.class:3604 FPasteSpecial.class:258 msgid "Paste as multi-line string" msgstr "" -#: FEditor.class:3608 FPasteSpecial.class:243 +#: FEditor.class:3609 FPasteSpecial.class:243 msgid "Paste as comments" msgstr "" -#: FEditor.class:3615 FOption.class:1149 +#: FEditor.class:3616 FOption.class:1149 msgid "Editor" msgstr "" -#: FEditor.class:3765 +#: FEditor.class:3777 msgid "Toggle breakpoint" msgstr "" -#: FEditor.class:3774 +#: FEditor.class:3786 msgid "Watch expression" msgstr "" -#: FEditor.class:3787 +#: FEditor.class:3799 msgid "Procedure list" msgstr "" @@ -1549,7 +1549,7 @@ msgstr "" msgid "Menu editor..." msgstr "" -#: FForm.class:3749 FTextEditor.class:906 +#: FForm.class:3749 FTextEditor.class:928 msgid "Code" msgstr "" @@ -1763,7 +1763,7 @@ msgstr "" msgid "Pick a color" msgstr "" -#: FImageEditor.class:54 FTextEditor.class:884 +#: FImageEditor.class:54 FTextEditor.class:906 msgid "Text editor" msgstr "" @@ -3823,23 +3823,23 @@ msgstr "" msgid "Use a fixed font" msgstr "" -#: FTextEditor.class:658 +#: FTextEditor.class:680 msgid "The file has been compressed from &1 to &2 bytes (&3)." msgstr "" -#: FTextEditor.class:658 +#: FTextEditor.class:680 msgid "Original file has been saved in the Project folder." msgstr "" -#: FTextEditor.class:664 +#: FTextEditor.class:686 msgid "Unable to compress file." msgstr "" -#: FTextEditor.class:854 +#: FTextEditor.class:876 msgid "Compress file" msgstr "" -#: FTextEditor.class:860 +#: FTextEditor.class:882 msgid "Uncompress file" msgstr "" diff --git a/app/src/gambas3/.src/Editor/Code/FEditor.form b/app/src/gambas3/.src/Editor/Code/FEditor.form index d2bbd4a84..da3047b4f 100644 --- a/app/src/gambas3/.src/Editor/Code/FEditor.form +++ b/app/src/gambas3/.src/Editor/Code/FEditor.form @@ -239,8 +239,18 @@ Border = False Menu = "mnuPasteAs" } + { btnPasteSpecial ToolButton mnuPasteSpecial + Name = "btnPasteSpecial" + MoveScaled(20,0,14,4) + Visible = False + ToolTip = ("Copy") + Action = ".paste-special" + AutoResize = True + Text = ("Paste special...") + Picture = Picture["icon:/small/paste"] + } { btnInsertColor MenuButton - MoveScaled(20,0,6,4) + MoveScaled(34,0,6,4) ToolTip = ("Insert color") Action = ".color" Picture = Picture["icon:/small/color"] @@ -249,27 +259,27 @@ } { btnUndo ToolButton mnuUndo Name = "btnUndo" - MoveScaled(25,0,4,4) + MoveScaled(39,0,4,4) ToolTip = ("Undo") Action = ".undo" Picture = Picture["icon:/small/undo"] } { btnRedo ToolButton mnuRedo Name = "btnRedo" - MoveScaled(28,0,4,4) + MoveScaled(42,0,4,4) ToolTip = ("Redo") Action = ".redo" Picture = Picture["icon:/small/redo"] } { btnIndent ToolButton - MoveScaled(31,0,4,4) + MoveScaled(45,0,4,4) Visible = False ToolTip = ("Indent") Action = ".indent" Picture = Picture["icon:/small/indent"] } { btnUnindent ToolButton - MoveScaled(34,0,4,4) + MoveScaled(48,0,4,4) Visible = False ToolTip = ("Unindent") Action = ".unindent" @@ -277,21 +287,21 @@ } { btnComment ToolButton mnuComment Name = "btnComment" - MoveScaled(37,0,4,4) + MoveScaled(51,0,4,4) ToolTip = ("Comment") Action = ".comment" Picture = Picture["img/16/comment.png"] } { btnUncomment ToolButton mnuUncomment Name = "btnUncomment" - MoveScaled(40,0,4,4) + MoveScaled(54,0,4,4) ToolTip = ("Uncomment") Action = ".uncomment" Picture = Picture["img/16/uncomment.png"] } { btnNoSplit ToolButton mnuNoSplit Name = "btnNoSplit" - MoveScaled(42,0,4,4) + MoveScaled(56,0,4,4) Visible = False ToolTip = ("No split") Action = ".view-nosplit" @@ -299,7 +309,7 @@ } { btnHorizontalSplit ToolButton mnuHorizontalSplit Name = "btnHorizontalSplit" - MoveScaled(45,0,4,4) + MoveScaled(59,0,4,4) Visible = False ToolTip = ("Horizontal split") Action = ".view-hsplit" @@ -307,7 +317,7 @@ } { btnVerticalSplit ToolButton mnuVerticalSplit Name = "btnVerticalSplit" - MoveScaled(48,0,4,4) + MoveScaled(62,0,4,4) Visible = False ToolTip = ("Vertical split") Action = ".view-vsplit" @@ -315,14 +325,14 @@ } { btnPretty ToolButton mnuPretty Name = "btnPretty" - MoveScaled(51,0,4,4) + MoveScaled(65,0,4,4) Visible = False ToolTip = ("Make code pretty") Action = ".pretty" Picture = Picture["icon:/small/wizard"] } { btnBreakpoint ToolButton - MoveScaled(54,0,4,4) + MoveScaled(68,0,4,4) ToolTip = ("Toggle breakpoint") Action = ".break" Picture = Picture["icon:/small/halt"] @@ -330,16 +340,16 @@ } { btnWatch ToolButton mnuWatch Name = "btnWatch" - MoveScaled(57,0,4,4) + MoveScaled(71,0,4,4) ToolTip = ("Watch expression") Action = ".watch" Picture = Picture["icon:/small/watch"] } { Separator2 Separator - MoveScaled(63,0,1,4) + MoveScaled(77,0,1,4) } { btnProc ToolButton - MoveScaled(65,0,46,4) + MoveScaled(79,0,46,4) Mouse = Mouse.Pointing Action = ".proc" Text = ("Procedure list") @@ -347,7 +357,7 @@ } { btnDefinition ToolButton mnuDefinition Name = "btnDefinition" - MoveScaled(111,0,4,4) + MoveScaled(125,0,4,4) Visible = False ToolTip = ("Find definition") Action = ".find-definition" @@ -355,7 +365,7 @@ } { btnLastPosition ToolButton mnuLastPosition Name = "btnLastPosition" - MoveScaled(114,0,4,4) + MoveScaled(128,0,4,4) Visible = False ToolTip = ("Go back") Action = ".go-back" @@ -487,6 +497,7 @@ { Action paste-special Text = "Paste special..." Shortcut = "Ctrl+Shift+V" + Picture = "icon:/small/paste" } { Action paste-string Text = "Paste as string" @@ -572,7 +583,7 @@ { Toolbars { Toolbar editor Text = "Editor" - List = "save,reload,show-form,cut,copy,paste,color,undo,redo,indent,unindent,comment,uncomment,view-nosplit,view-hsplit,view-vsplit,pretty,break,watch,proc,find-definition,go-back" + List = "save,reload,show-form,cut,copy,paste,paste-special,color,undo,redo,indent,unindent,comment,uncomment,view-nosplit,view-hsplit,view-vsplit,pretty,break,watch,proc,find-definition,go-back" Default = "save,reload,show-form,paste,color,undo,redo,comment,uncomment,break,watch,|,proc" } } diff --git a/app/src/gambas3/.src/Editor/Other/FTextEditor.class b/app/src/gambas3/.src/Editor/Other/FTextEditor.class index 615908a25..0f7fc4a07 100644 --- a/app/src/gambas3/.src/Editor/Other/FTextEditor.class +++ b/app/src/gambas3/.src/Editor/Other/FTextEditor.class @@ -24,7 +24,7 @@ Public Age As Integer Property Read ReadOnly As Boolean -Static Private $aExt As String[] = ["htm", "html", "xml", "svg", "css", "webpage", "js"] +Static Private $aExt As String[] = ["htm", "html", "xml", "svg", "css", "webpage", "js", "c", "h", "cpp"] ' Private Const STYLE_HTML As Integer = 1 ' Private Const STYLE_CSS As Integer = 2 @@ -81,6 +81,10 @@ Public Sub LoadFile() As Boolean Case "js" edtEditor.Highlight = Highlight.JavaScript bShowCompress = Not Project.IsHiddenPath(Path) + Case "c" + edtEditor.Highlight = Highlight.C + Case "cpp", "h" + edtEditor.Highlight = Highlight.CPlusPlus Case Else edtEditor.Highlight = Highlight.HTML End Select @@ -225,6 +229,24 @@ Public Sub Editors_KeyPress() Editor.Cut Endif Endif + + Else If Key.Code = Key.Return Then + + If Key.Control Then + + If Key.Shift Then + If Editor.Lines[Editor.Line].Expanded Then + Editor.CollapseAll + Else + Editor.ExpandAll + Endif + Else + Editor.Lines[Editor.Line].Expanded = Not Editor.Lines[Editor.Line].Expanded + Endif + Stop Event + + Endif + Endif End diff --git a/app/src/gambas3/.src/Editor/Other/FTextEditor.form b/app/src/gambas3/.src/Editor/Other/FTextEditor.form index 66801b97f..1a2669c7b 100644 --- a/app/src/gambas3/.src/Editor/Other/FTextEditor.form +++ b/app/src/gambas3/.src/Editor/Other/FTextEditor.form @@ -232,14 +232,14 @@ { btnCompress ToolButton mnuCompress Name = "btnCompress" MoveScaled(58,0,4,4) - ToolTip = ("Indent") + ToolTip = ("Compress file") Action = ".compress" Picture = Picture["icon:/small/archive"] } { btnUncompress ToolButton mnuUncompress Name = "btnUncompress" - MoveScaled(61,0,4,4) - ToolTip = ("Unindent") + MoveScaled(62,0,4,4) + ToolTip = ("Uncompress file") Action = ".uncompress" Picture = Picture["icon:/small/undo"] } diff --git a/app/src/gambas3/theme/sapphire b/app/src/gambas3/theme/sapphire index 00d667f43..82d8d17ec 100644 --- a/app/src/gambas3/theme/sapphire +++ b/app/src/gambas3/theme/sapphire @@ -13,8 +13,8 @@ Breakpoint="#FF5F5F" Current="#BFDFFF" Datatype="#0080FF" Selection="#C0C0FF" -Highlight="#FFFF00" +Highlight="#E0E000" CurrentLine="#E7F3FF" Error="#808000,Underline" Help="#808080,Bold,Italic" -Preprocessor="#00FF00,Bold" +Preprocessor="#00C000,Bold" diff --git a/comp/src/gb.eval.highlight/.info b/comp/src/gb.eval.highlight/.info index 9c85774c7..c00909b22 100644 --- a/comp/src/gb.eval.highlight/.info +++ b/comp/src/gb.eval.highlight/.info @@ -21,3 +21,11 @@ _DoJavascript M +_DoC +M + + +_DoCPlusPlus +M + + diff --git a/comp/src/gb.eval.highlight/.project b/comp/src/gb.eval.highlight/.project index eb3f0df40..4000d8a04 100644 --- a/comp/src/gb.eval.highlight/.project +++ b/comp/src/gb.eval.highlight/.project @@ -1,8 +1,8 @@ # Gambas Project File 3.0 -# Compiled with Gambas 2.99.0 +# Compiled with Gambas 2.99.1 Title=gb.eval.highlight Startup=Main -Version=0.0.62 +Version=0.0.73 Component=gb.eval TabSize=2 MakeComponent=1 diff --git a/comp/src/gb.eval.highlight/.settings b/comp/src/gb.eval.highlight/.settings index 359ae5615..c88254580 100644 --- a/comp/src/gb.eval.highlight/.settings +++ b/comp/src/gb.eval.highlight/.settings @@ -12,9 +12,12 @@ SearchComment=False SearchString=True [OpenFile] -Active=1 -File[1]=".src/Highlight.class:30.21" -Count=1 +File[1]=".src/Highlight.class:29.2" +File[2]=".src/HighlightJavascript.module:12.2" +Active=3 +File[3]=".src/HighlightC.module:245.67" +File[4]=".src/Main.module:0.0" +Count=4 [Watches] Count=0 diff --git a/comp/src/gb.eval.highlight/.src/Highlight.class b/comp/src/gb.eval.highlight/.src/Highlight.class index bea948b30..ced150b90 100644 --- a/comp/src/gb.eval.highlight/.src/Highlight.class +++ b/comp/src/gb.eval.highlight/.src/Highlight.class @@ -31,3 +31,15 @@ Static Public Sub _DoJavascript() HighlightJavascript.Run End + +Static Public Sub _DoC() + + HighlightC.Run + +End + +Static Public Sub _DoCPlusPlus() + + HighlightCPlusPlus.Run + +End diff --git a/comp/src/gb.eval.highlight/.src/HighlightC.module b/comp/src/gb.eval.highlight/.src/HighlightC.module new file mode 100644 index 000000000..41872696b --- /dev/null +++ b/comp/src/gb.eval.highlight/.src/HighlightC.module @@ -0,0 +1,263 @@ +' Gambas module file + +Private Const IDENT_CAR As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$" +Private Const DIGIT_CAR As String = "0123456789.+-eE" + +Private $cKeyword As New Collection +Private $cOperator As New Collection +Private $cType As New Collection + +Public Sub _init() + + Dim sStr As String + + For Each sStr In ["auto", "break", "case", "const", "continue", "default", "do", "else", "enum", "extern", "for", + "goto", "if", "register", "return", "sizeof", "static", "struct", "switch", "typedef", "union", "volatile", "while"] + $cKeyword[sStr] = 0 + Next + + For Each sStr In ["FALSE", "NULL" "TRUE"] + $cKeyword[sStr] = 1 + Next + + For Each sStr In ["{", "}", ".", ">=", "+", "<<", "!", "=", ">>=", ";", "==", "-", ">>", "~", "+=", "(", ",", "!=", "*", "&&", "-=", "&=", ")", "<", "%", "&", "||", "*=", "|=", "[", ">", "++", "|", "?", "%=", "^=", + "--", "^", ":", "<<=", "]", "<=", "/", "/="] + $cOperator[sStr] = True + Next + + For Each sStr In ["void", "signed", "unsigned", "char", "short", "int", "long", "float", "double", "int64_t", "uint64_t", "int32_t", "uint32_t", "int16_t", "uint16_t", "int8_t", "uint8_t"] + $cType[sStr] = True + Next + +End + +Public Sub RunWith(cKeyword As Collection, cOperator As Collection, cType As Collection) + + Dim iState As Integer + Dim iTag As Integer + Dim sText As String + Dim iLenText As Integer + Dim iPos, iSavePos As Integer + Dim sCar As String + Dim bSingleLineComment As Boolean + Dim bSingleQuoteString As Boolean + Dim sIdent As String + Dim iPosType, iPosIdent, iPosAfterIdent As Integer + Dim bTestShowLimit As Boolean + Dim bLastExpr As Boolean + + iState = Highlight.State + iTag = Highlight.Tag + sText = Highlight.Text + iLenText = String.Len(sText) + bLastExpr = True + If iState = Highlight.Operator Then bLastExpr = False + + If Left(LTrim(sText)) = "#" Then + + Highlight.Add(Highlight.Preprocessor, iLenText) + iState = Highlight.Normal + + Else + + For iPos = 1 To iLenText + + If iState = Highlight.Normal Then + + sCar = String.Mid$(sText, iPos, 1) + If sCar = "/" Then + sCar = String.Mid$(sText, iPos + 1, 1) + If sCar = "/" Then + iState = Highlight.Comment + bSingleLineComment = True + Else If sCar = "*" Then + sCar = String.Mid$(sText, iPos + 2, 1) + If sCar = "*" Then + iState = Highlight.Help + Else + iState = Highlight.Comment + Endif + bSingleLineComment = False + Endif + Else If sCar = "\"" Then + iState = Highlight.String + bSingleQuoteString = False + Else If sCar = "'" Then + iState = Highlight.String + bSingleQuoteString = True + Else If Asc(sCar) <= 32 Then + + Else If IsDigit(sCar) Then + + sIdent = sCar + sCar = String.Mid$(sText, iPos + 1, 1) + If sCar = "x" Or If sCar = "X" Then + sIdent &= sCar + Inc iPos + While iPos < iLenText + Inc iPos + sCar = String.Mid$(sText, iPos, 1) + If Not IsHexa(sCar) Then + Dec iPos + Break + Endif + sIdent &= sCar + Wend + Else + While iPos < iLenText + Inc iPos + sCar = String.Mid$(sText, iPos, 1) + If InStr(DIGIT_CAR, sCar) = 0 Then + Dec iPos + Break + Endif + sIdent &= sCar + Wend + Endif + + Highlight.Add(Highlight.Number, String.Len(sIdent)) + iState = Highlight.Normal + bLastExpr = True + Continue + + Else If Len(sCar) >= 2 Or If InStr(IDENT_CAR, sCar) Then + + sIdent = sCar + iSavePos = iPos + + While iPos < iLenText + Inc iPos + sCar = String.Mid$(sText, iPos, 1) + If Len(sCar) = 1 And If Not IsDigit(sCar) And If InStr(IDENT_CAR, sCar) = 0 Then + Dec iPos + Break + Endif + sIdent &= sCar + Wend + + If cKeyword.Exist(sIdent) Then + iState = Highlight.Keyword + If cKeyword[sIdent] = 1 Then bLastExpr = True + Else If cType.Exist(sIdent) Then + iState = Highlight.Datatype + bLastExpr = True + If iPosType = 0 Then iPosType = iSavePos + Else + iState = Highlight.Symbol + If iPosAfterIdent = 0 Then + iPosIdent = iSavePos + iPosAfterIdent = iSavePos + String.Len(sIdent) + Endif + bLastExpr = True + Endif + + Highlight.Add(iState, String.Len(sIdent)) + iState = Highlight.Normal + Continue + + Else + + sIdent = sCar + + While iPos < iLenText + If cOperator.Exist(sIdent) Then Break + Inc iPos + sCar = String.Mid$(sText, iPos, 1) + If IsLetter(sCar) Or If IsDigit(sCar) Or If IsBlank(sCar) Then + Dec iPos + Break + Endif + sIdent &= sCar + Wend + + If cOperator.Exist(sIdent) Then + iState = Highlight.Operator + Else + iState = Highlight.Error + Endif + + Highlight.Add(iState, String.Len(sIdent)) + iState = Highlight.Normal + bLastExpr = False + + 'Dec iPos + Continue + + Endif + + Else If iState = Highlight.Comment Or If iState = Highlight.Help Then + + If Not bSingleLineComment Then + sCar = String.Mid$(sText, iPos, 2) + If sCar = "*/" Then + Highlight.Add(iState, 2) + Inc iPos + iState = Highlight.Normal + Continue + Endif + Endif + + Else If iState = Highlight.String Then + + sCar = String.Mid$(sText, iPos, 1) + If sCar = "\\" Then + sCar = String.Mid$(sText, iPos + 1, 1) + If sCar = "x" Then + Highlight.Add(iState, 3) + iPos += 2 + Continue + Else If sCar = "u" Then + Highlight.Add(iState, 5) + iPos += 4 + Continue + Else + Highlight.Add(iState, 2) + Inc iPos + Continue + Endif + Else If sCar = "\"" And If Not bSingleQuoteString Then + Highlight.Add(iState) + iState = Highlight.Normal + bLastExpr = True + Continue + Else If sCar = "'" And If bSingleQuoteString Then + Highlight.Add(iState) + iState = Highlight.Normal + bLastExpr = True + Continue + Endif + + Endif + + Highlight.Add(iState) + + Next + + If iState = Highlight.Comment And If bSingleLineComment Then + iState = Highlight.Normal + Endif + + If iState <> Highlight.Comment And If iState <> Highlight.Help Then + iState = Highlight.Normal + Endif + + Endif + + If iPosType > 0 And iPosAfterIdent > iPosType Or If iPosIdent = 1 Then + If InStr(String.Mid$(sText, iPosAfterIdent), "(") Then + If RInStr(sText, ";") = 0 Then + Highlight.ShowLimit = True + Endif + Endif + Endif + + Highlight.State = iState + Highlight.Tag = iTag + +End + +Public Sub Run() + + RunWith($cKeyword, $cOperator, $cType) + +End diff --git a/comp/src/gb.eval.highlight/.src/HighlightCPlusPlus.module b/comp/src/gb.eval.highlight/.src/HighlightCPlusPlus.module new file mode 100644 index 000000000..d822c3428 --- /dev/null +++ b/comp/src/gb.eval.highlight/.src/HighlightCPlusPlus.module @@ -0,0 +1,43 @@ +' Gambas module file + +' Gambas module file + +Private Const IDENT_CAR As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$" +Private Const DIGIT_CAR As String = "0123456789.+-eE" + +Private $cKeyword As New Collection +Private $cOperator As New Collection +Private $cType As New Collection + +Public Sub _init() + + Dim sStr As String + + For Each sStr In ["asm", "auto", "break", "case", "catch", "class", "const", "const_cast", "continue", "default", "delete", "do", "dynamic_cast", + "else", "enum", "explicit", "export", "extern", "for", "friend", "goto", "if", "inline", "mutable", "namespace", "new", "operator", + "private", "protected", "public", "register", "reinterpret_cast", "return", "sizeof", "static", "static_cast", "struct", "switch", + "template", "this", "throw", "try", "typedef", "typeid", "typename", "union", "using", "virtual", "volatile", "while"] + $cKeyword[sStr] = 0 + Next + + For Each sStr In ["false", "null" "true", "FALSE", "TRUE", "NULL"] + $cKeyword[sStr] = 1 + Next + + For Each sStr In ["{", "}", ".", ">=", "+", "<<", "!", "=", ">>=", ";", "==", "-", ">>", "~", "+=", "(", ",", "!=", "*", "&&", "-=", "&=", ")", "<", "%", "&", "||", "*=", "|=", "[", ">", "++", "|", "?", "%=", "^=", + "--", "^", ":", "<<=", "]", "<=", "/", "/="] + $cOperator[sStr] = True + Next + + For Each sStr In ["void", "bool", "signed", "unsigned", "char", "short", "int", "long", "float", "double", "int64_t", "uint64_t", "int32_t", + "uint32_t", "int16_t", "uint16_t", "int8_t", "uint8_t", "wchar_t"] + $cType[sStr] = True + Next + +End + +Public Sub Run() + + HighlightC.RunWith($cKeyword, $cOperator, $cType) + +End diff --git a/comp/src/gb.eval.highlight/.startup b/comp/src/gb.eval.highlight/.startup index 6247a6ab5..84e7d2a79 100644 --- a/comp/src/gb.eval.highlight/.startup +++ b/comp/src/gb.eval.highlight/.startup @@ -2,7 +2,7 @@ Main gb.eval.highlight 0 0 -0.0.62 +0.0.72 gb.eval diff --git a/comp/src/gb.form.mdi/.src/ToolBar/FToolBar.class b/comp/src/gb.form.mdi/.src/ToolBar/FToolBar.class index 1fa6fa8eb..5c7b88a17 100644 --- a/comp/src/gb.form.mdi/.src/ToolBar/FToolBar.class +++ b/comp/src/gb.form.mdi/.src/ToolBar/FToolBar.class @@ -1117,6 +1117,8 @@ Private Sub CheckSeparators() Dim hChild As Control Dim aDelete As New Control[] + If $bDesign Then Return + For Each hChild In panToolBar.Children If hChild Is Separator Then hChild.Resize(SEPARATOR_SIZE, SEPARATOR_SIZE) diff --git a/gb.qt4/src/ext/CEditor.cpp b/gb.qt4/src/ext/CEditor.cpp index 3b8d6d96b..b6ab9d6fa 100644 --- a/gb.qt4/src/ext/CEditor.cpp +++ b/gb.qt4/src/ext/CEditor.cpp @@ -46,7 +46,8 @@ enum HIGHLIGHT_WEBPAGE, HIGHLIGHT_DIFF, HIGHLIGHT_JAVASCRIPT, - HIGHLIGHT_C + HIGHLIGHT_C, + HIGHLIGHT_CPLUSPLUS }; typedef @@ -63,6 +64,7 @@ static HIGHLIGHT_NAME _highlight_name[] = { { HIGHLIGHT_DIFF, "_DoDiff" }, { HIGHLIGHT_JAVASCRIPT, "_DoJavascript" }, { HIGHLIGHT_C, "_DoC" }, + { HIGHLIGHT_CPLUSPLUS, "_DoCPlusPlus" }, { HIGHLIGHT_CUSTOM, NULL } }; @@ -1095,6 +1097,7 @@ GB_DESC CHighlightDesc[] = GB_CONSTANT("Diff", "i", HIGHLIGHT_DIFF), GB_CONSTANT("JavaScript", "i", HIGHLIGHT_JAVASCRIPT), GB_CONSTANT("C", "i", HIGHLIGHT_C), + GB_CONSTANT("CPlusPlus", "i", HIGHLIGHT_CPLUSPLUS), GB_CONSTANT("Background", "i", HIGHLIGHT_BACKGROUND), GB_CONSTANT("Normal", "i", HIGHLIGHT_NORMAL), diff --git a/gb.qt4/src/ext/gview.cpp b/gb.qt4/src/ext/gview.cpp index dd67bd9ef..f8fe5de98 100644 --- a/gb.qt4/src/ext/gview.cpp +++ b/gb.qt4/src/ext/gview.cpp @@ -740,8 +740,10 @@ void GEditor::paintCell(QPainter *painter, int row, int) } else { - QBrush brush(styles[GLine::Selection].color, Qt::Dense4Pattern); - p.fillRect(0, 0, cache->width(), 1, brush); + //QBrush brush(styles[GLine::Selection].color, Qt::Dense4Pattern); + //p.fillRect(0, 0, cache->width(), 1, brush); + p.setPen(styles[GLine::Selection].color); + p.drawLine(0, 0, cache->width() - 1, 0); } } @@ -814,7 +816,7 @@ void GEditor::paintCell(QPainter *painter, int row, int) //highlight_text(p, x1m * charWidth + margin, fm.ascent(), l->s.getString().mid(x1m, 1), styles[GLine::Highlight].color); //highlight_text(p, x2m * charWidth + margin, fm.ascent(), l->s.getString().mid(x2m, 1), styles[GLine::Highlight].color); highlight_text(p, lineWidth(ym, x1m), fm.ascent(), lineWidth(ym, x1m + 1), _cellh, l->s.getString().mid(x1m, 1), styles[GLine::Highlight].color); - //highlight_text(p, lineWidth(ym, x2m), fm.ascent(), lineWidth(ym, x2m + 1), _cellh, l->s.getString().mid(x2m, 1), styles[GLine::Highlight].color); + highlight_text(p, lineWidth(ym, x2m), fm.ascent(), lineWidth(ym, x2m + 1), _cellh, l->s.getString().mid(x2m, 1), styles[GLine::Highlight].color); /*p.fillRect(x1m * charWidth + margin, 0, charWidth, _cellh, styles[GLine::Highlight].color); p.fillRect(x2m * charWidth + margin, 0, charWidth, _cellh, styles[GLine::Highlight].color);*/ } diff --git a/main/gbx/gbx_exec.c b/main/gbx/gbx_exec.c index 8d1827cfe..051621c6c 100644 --- a/main/gbx/gbx_exec.c +++ b/main/gbx/gbx_exec.c @@ -43,6 +43,7 @@ #include "gbx_exec.h" //#define DEBUG_STACK 1 +//#define SHOW_FUNCTION 1 /* Current virtual machine state */ STACK_CONTEXT EXEC_current = { 0 }; @@ -436,6 +437,11 @@ void EXEC_enter(void) printf(" | >> %s\n", func->debug->name); #endif + #if SHOW_FUNCTION + if (func->debug) + fprintf(stderr, "%s.%s\n", EXEC.class->name, func->debug->name); + #endif + /* check number of arguments */ if (UNLIKELY(nparam < func->npmin)) @@ -576,6 +582,11 @@ void EXEC_enter_quick(void) printf(" | >> %s\n", func->debug->name); #endif + #if SHOW_FUNCTION + if (func->debug) + fprintf(stderr, "%s.%s\n", EXEC.class->name, func->debug->name); + #endif + /* save context & check stack */ STACK_push_frame(&EXEC_current, func->stack_usage);