arcadia 0.9.3 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +11 -10
- data/bin/arcadia +3 -0
- data/conf/arcadia.conf +117 -75
- data/conf/arcadia.res.rb +219 -58
- data/conf/theme-dark.conf +11 -8
- data/conf/theme-dark.res.rb +81 -10
- data/ext/ae-breakpoints/ae-breakpoints.rb +1 -1
- data/ext/ae-dir-projects/ae-dir-projects.conf +2 -2
- data/ext/ae-dir-projects/ae-dir-projects.rb +84 -47
- data/ext/ae-editor/ae-editor.rb +541 -190
- data/ext/ae-editor/langs/coderay.tokens +1 -0
- data/ext/ae-editor/langs/conf.lang +5 -4
- data/ext/ae-editor/langs/java.lang +2 -1
- data/ext/ae-editor/langs/python.lang +4 -0
- data/ext/ae-editor/langs/rhtml.lang +2 -1
- data/ext/ae-editor/langs/ruby.lang +45 -0
- data/ext/ae-editor/langs/tcl.lang +80 -2
- data/ext/ae-editor/langs/text.lang +2 -0
- data/ext/ae-editor/langs/xml.lang +1 -0
- data/ext/ae-file-history/ae-file-history.conf +2 -2
- data/ext/ae-file-history/ae-file-history.rb +66 -20
- data/ext/ae-output/ae-output.conf +3 -3
- data/ext/ae-output/ae-output.rb +37 -23
- data/ext/ae-rad/ae-rad-palette.rb +3 -3
- data/ext/ae-ruby-debug/ae-ruby-debug.conf +2 -2
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +38 -42
- data/ext/ae-search-in-files/ae-search-in-files.conf +2 -2
- data/ext/ae-search-in-files/ae-search-in-files.rb +20 -9
- data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.conf +2 -2
- data/ext/ae-shell/ae-shell.conf +1 -1
- data/ext/ae-shell/ae-shell.rb +57 -46
- data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +99 -46
- data/ext/ae-subprocess-inspector/process.res +0 -0
- data/lib/a-commons.rb +13 -9
- data/lib/a-contracts.rb +24 -1
- data/lib/a-core.rb +586 -196
- data/lib/a-tkcommons.rb +155 -55
- data/lib/anigif.rb +9 -0
- data/lib/ctags.exe +0 -0
- data/tcl/anigif/anigif.tcl +199 -0
- data/tcl/anigif/pkgIndex.tcl +3 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ArrowButton.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/BWidget.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/Button.html +36 -2
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ButtonBox.html +9 -7
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ComboBox.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/Dialog.html +5 -11
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/DragSite.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/DropSite.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/DynamicHelp.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/Entry.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/Label.html +32 -1
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/LabelEntry.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/LabelFrame.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ListBox.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/MainFrame.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/MessageDlg.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/NoteBook.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/PagesManager.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/PanedWindow.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/PanelFrame.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/PasswdDlg.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ProgressBar.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ProgressDlg.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ScrollView.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ScrollableFrame.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/ScrolledWindow.html +13 -1
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/SelectColor.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/SelectFont.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/Separator.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/SpinBox.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/StatusBar.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/TitleFrame.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/Tree.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/Widget.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/contents.html +12 -1
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/index.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/navtree.html +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/BWman/options.htm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/CHANGES.txt +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/ChangeLog +70 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/LICENSE.txt +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/README.txt +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/arrow.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/bitmap.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/button.tcl +121 -53
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/buttonbox.tcl +10 -5
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/color.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/combobox.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/basic.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/bwidget.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/demo.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/dnd.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/manager.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/select.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/tmpldlg.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/tree.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/demo/x1.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/dialog.tcl +14 -2
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/dragsite.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/dropsite.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/dynhelp.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/entry.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/font.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/bold.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/copy.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/cut.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/dragfile.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/dragicon.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/error.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/file.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/folder.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/hourglass.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/info.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/italic.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/minus.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/new.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/opcopy.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/open.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/openfold.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/oplink.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/opmove.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/overstrike.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/palette.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/passwd.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/paste.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/plus.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/print.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/question.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/redo.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/save.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/target.xbm +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/underline.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/undo.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/images/warning.gif +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/init.tcl +15 -1
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/label.tcl +76 -18
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/labelentry.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/labelframe.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/da.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/de.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/en.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/es.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/fr.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/hu.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/nl.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/no.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/lang/pl.rc +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/listbox.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/mainframe.tcl +3 -2
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/messagedlg.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/notebook.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/pagesmgr.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/panedw.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/panelframe.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/passwddlg.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/pkgIndex.tcl +2 -2
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/progressbar.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/progressdlg.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/scrollframe.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/scrollview.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/scrollw.tcl +37 -25
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/separator.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/spinbox.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/statusbar.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/tests/entry.test +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/titleframe.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/tree.tcl +17 -9
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/utils.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/widget.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/wizard.tcl +0 -0
- data/tcl/{BWidget-1.9.2 → bwidget-1.9.4}/xpm2image.tcl +0 -0
- data/tcl/fsdialog/de.msg +30 -0
- data/tcl/fsdialog/en.msg +31 -0
- data/tcl/fsdialog/fsdialog.tcl +1749 -0
- data/tcl/fsdialog/fsdlg-gif.tcl +259 -0
- data/tcl/fsdialog/fsdlg-png.tcl +265 -0
- data/tcl/fsdialog/sv.msg +32 -0
- data/tcl/fsdialog/tclIndex +6 -0
- metadata +179 -174
- data/ext/ae-editor/langs/erb.lang.bind +0 -1
- data/ext/ae-editor/langs/lang.lang.bind +0 -1
- data/ext/ae-editor/langs/pers.lang.bind +0 -1
- data/ext/ae-editor/langs/rb.lang +0 -73
- data/ext/ae-editor/langs/rbw.lang.bind +0 -1
- data/ext/ae-editor/langs/tokens.lang.bind +0 -1
data/conf/theme-dark.conf
CHANGED
@@ -3,6 +3,7 @@ background=#33302e
|
|
3
3
|
foreground=gray
|
4
4
|
activebackground=#334b56
|
5
5
|
activeforeground=yellow
|
6
|
+
inactiveforeground=#3ae13ae13ae1
|
6
7
|
relief=flat
|
7
8
|
borderwidth=0
|
8
9
|
|
@@ -14,6 +15,7 @@ borderwidth=0
|
|
14
15
|
|
15
16
|
|
16
17
|
edit.background=#232323
|
18
|
+
#edit.background=#0000000030a4
|
17
19
|
edit.foreground=white
|
18
20
|
edit.relief=flat
|
19
21
|
edit.borderwidth=0
|
@@ -22,7 +24,9 @@ text.insertbackground=#ffffff
|
|
22
24
|
|
23
25
|
|
24
26
|
textline.background=#334b56
|
25
|
-
|
27
|
+
#textline.background=#0000ff
|
28
|
+
#titlelabel.background=#334b56
|
29
|
+
titlelabel.background=#6a3d6a3d6a3d
|
26
30
|
|
27
31
|
titlemenu.relief=flat
|
28
32
|
splitter.relief=flat
|
@@ -33,17 +37,16 @@ treepanel.selectforeground=yellow
|
|
33
37
|
treepanel.selectbackground=#133e5e
|
34
38
|
|
35
39
|
|
36
|
-
#scrollbar.troughcolor=#1c366e
|
37
|
-
#scrollbar.background=#211834
|
38
40
|
scrollbar.troughcolor=#383838
|
39
|
-
scrollbar.background=#212121
|
40
|
-
scrollbar.
|
41
|
+
#scrollbar.background=#212121
|
42
|
+
scrollbar.background=#6a3d6a3d6a3d
|
43
|
+
scrollbar.highlightbackground=#333333
|
41
44
|
|
42
45
|
scrollbar.borderwidth=0
|
43
46
|
scrollbar.elementborderwidth=1
|
44
47
|
|
45
48
|
#scrollbar.activebackground=#33305b
|
46
|
-
scrollbar.activerelief=
|
49
|
+
scrollbar.activerelief=flat
|
47
50
|
|
48
51
|
|
49
52
|
#scrollbar.highlightbackground=black
|
@@ -66,8 +69,8 @@ progress.relief=groove
|
|
66
69
|
#:::::::::::::::::::::::::::::::::::::::::::::::::
|
67
70
|
|
68
71
|
hightlight.reserved.foreground=#60f856
|
69
|
-
#hightlight.comment.foreground=#
|
70
|
-
hightlight.comment.foreground=#
|
72
|
+
#hightlight.comment.foreground=#21a648
|
73
|
+
hightlight.comment.foreground=#000058520000
|
71
74
|
hightlight.string.foreground=#ec6bfc
|
72
75
|
hightlight.symbol.foreground=#bdc175
|
73
76
|
hightlight.operator.foreground=#d9feff
|
data/conf/theme-dark.res.rb
CHANGED
@@ -115,7 +115,7 @@ QYcNPHwk8BAmjQ4kewChgdKFxD8GJj5ccBDkD582TXb0KEMFCxkMAheE0EBD
|
|
115
115
|
iQsIHCJEFphBSJYaFQxsJngDBoDRBQOgXi0wIAA7
|
116
116
|
EOS
|
117
117
|
|
118
|
-
|
118
|
+
TREE_NODE_METHOD_GIF[0..-1]=<<EOS
|
119
119
|
R0lGODlhEAAQAIcAAHMhc3spe3sxe3sxhAD/AIwxjJQ5lJw5nIxCjJRKlJRS
|
120
120
|
lKVKraVSpa1Srb1rvb1zvc5jztZr1oycrZylra21rbW9rc6Mzt6c3uec5++U
|
121
121
|
7++c7/+c/+et5++l7++97/+t/8bGrc7OrdbWrefnre/nrff3rQAAAAAAAAAA
|
@@ -145,17 +145,25 @@ EOS
|
|
145
145
|
#WrLG2q6y+85zbNPHSS76UgAAOw==
|
146
146
|
#EOS
|
147
147
|
|
148
|
-
SYNCICON20_GIF[0..-1]=<<EOS
|
149
|
-
R0lGODlhEAAQAKUoACBuDSBvDiBwDiRyEACAACmLEEGGMkWHNUqKPEikJk2j
|
150
|
-
Kl2zM4PKXX3YR37ZR4rfV43tR5LuUJXuVZrvXKPwa6bxca3yfLzroLHzgrjz
|
151
|
-
jbn0jsj2p8z3rc73ss/3s976y+L60OL60eX71eX71u/85fL96vT97vf+8v//
|
152
|
-
|
153
|
-
|
154
|
-
ACH5BAEKAD8ALAAAAAAQABAAAAZvwJ9wSCwOC8ikkVgglUynwpL5CY2kQmSx
|
155
|
-
cNlwPNgCSIQVJiwYgCbM6TAMQsBjAvgB6tlMRhCHQPBMFBV4AH6ARxEShA5/
|
156
|
-
R1IFEA14BwqGQgQQkBALCEMBDY0/mH4NA0V3Q6OhU6INrpKsdnezsVNBADs=
|
148
|
+
#SYNCICON20_GIF[0..-1]=<<EOS
|
149
|
+
#R0lGODlhEAAQAKUoACBuDSBvDiBwDiRyEACAACmLEEGGMkWHNUqKPEikJk2j
|
150
|
+
#Kl2zM4PKXX3YR37ZR4rfV43tR5LuUJXuVZrvXKPwa6bxca3yfLzroLHzgrjz
|
151
|
+
#jbn0jsj2p8z3rc73ss/3s976y+L60OL60eX71eX71u/85fL96vT97vf+8v//
|
152
|
+
#////////////////////////////////////////////////////////////
|
153
|
+
#/////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1Q
|
154
|
+
#ACH5BAEKAD8ALAAAAAAQABAAAAZvwJ9wSCwOC8ikkVgglUynwpL5CY2kQmSx
|
155
|
+
#cNlwPNgCSIQVJiwYgCbM6TAMQsBjAvgB6tlMRhCHQPBMFBV4AH6ARxEShA5/
|
156
|
+
#R1IFEA14BwqGQgQQkBALCEMBDY0/mH4NA0V3Q6OhU6INrpKsdnezsVNBADs=
|
157
|
+
#EOS
|
158
|
+
|
159
|
+
SYNC_GIF[0..-1]=<<EOS
|
160
|
+
R0lGODlhEAAQALMPAL2EFqpvEKZrEPzssfvll/zxw/3xw/797/zqqf321bqX
|
161
|
+
Jv743v743f343fvssf///yH5BAEAAA8ALAAAAAAQABAAAARN8MkHwLyYHpsx
|
162
|
+
OFt3AUyzVGg1FobBFi8cXAFiB3g+YwFB7KJJD0hRiHAjgDE4+ag8qUpiypEA
|
163
|
+
Bo6BdrutPgTgsMBHEDC/PvN5rF63HxEAOw==
|
157
164
|
EOS
|
158
165
|
|
166
|
+
|
159
167
|
CLEAR_GIF[0..-1]=<<EOS
|
160
168
|
R0lGODlhEAAQALMAAAAAAAD/AIQAAISEAISEhNbWzv8AAP//AP//////////
|
161
169
|
/////////////////////yH5BAEAAAEALAAAAAAQABAAAAQ+MMhJq53AmLzF
|
@@ -163,6 +171,69 @@ R0lGODlhEAAQALMAAAAAAAD/AIQAAISEAISEhNbWzv8AAP//AP//////////
|
|
163
171
|
WsOrdsulRAAAOw==
|
164
172
|
EOS
|
165
173
|
|
174
|
+
SAVE_GIF[0..-1]=<<EOS
|
175
|
+
R0lGODlhEAAQAPUzADNmmTVomzZpnDlsnztuoTxvokF0p0J1qEV4q0d6rUp9
|
176
|
+
sE+CtVSHuleKvViLvl2Qw2CTxmSXymaZzGibzmmcz22g03Kl2Heq3X2w44CA
|
177
|
+
gIyMjJmZmaKiooK16Ii77o3A85LF+JbJ/JnM/6HQ/6zW/7/Z8rnc/8zMzNPT
|
178
|
+
093d3dDd6sTi/8zm/93u/+fn5+7u7uTx/+72//j8/////wAAAAAAAAAAAAAA
|
179
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADQALAAAAAAQABAAAAad
|
180
|
+
QJpwSCwKJZQRybRisVYm0ogiEUZEs6x2K4oIISGZeEwOQYQPUGzNboMeQscH
|
181
|
+
Rq/bPw4hw1Nq+f9+JR4MQgsdFRKJiokVHQtCChiSk5SSCkIIFxcqL52eKpoI
|
182
|
+
QgYWEy4AAC6qqhMWBkIFFQ0pBwcpt7cNFQVCAxQJKA0NKMTECRQDQwEEJ4kn
|
183
|
+
z88EEgFEBBkaGxwcGxoZBAIARuJEQQA7
|
184
|
+
EOS
|
185
|
+
|
186
|
+
SEARCH_GIF[0..-1]=<<EOS
|
187
|
+
R0lGODlhEAAQAOZBAAAzmQBmzP///1o7AJlmAOazAMTz/9mmAEW5//nNT+W5
|
188
|
+
ToPV/5TW/cyZAAyf/7Dp/yOn/2jD/q3h/le8/sz3/5zg/7bt/73l/7Xs/2fH
|
189
|
+
/4DT///bnZXb/97//2rK/wWb/8np/6zf/1S//77x/73w/8Xv/1+//wmc/1jA
|
190
|
+
/5Db/5LV/6rn/6Xb/zCt/33O/9X3/4LO/7jj/4PT/x+m/7nk/3XP/3PJ/3bQ
|
191
|
+
/6Tb/5Td/zCv/3fM/029/4za/6Pf/ZHc/6Pk/////wAAAAAAAAAAAAAAAAAA
|
192
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
193
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
194
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
195
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEEA
|
196
|
+
LAAAAAAQABAAAAeYgEGCg4IBhgGEiUGGERETE4aKiwwxFyYtEDMQiIkBOCAC
|
197
|
+
LCcfDg6cgwEMKiE0MDoIPAgIp5M7LjYoHgs9Cwu0ABIyGSI1OQ8kDz4AhMAc
|
198
|
+
GjcpKwYdBgbLzBUVP0AYBhQU14IEBAACAiUWIy/m4QQKGwUA5eYC8oPuCQUH
|
199
|
+
A0Hy9vcK8h1owE9SEAICCRoUNECfwoUMBxSEGAgAOw==
|
200
|
+
EOS
|
201
|
+
|
202
|
+
EXIT_GIF[0..-1]=<<EOS
|
203
|
+
R0lGODlhEAAQAOepAAADDS8AAA4NGBQQHBkQEhISHRoRExsRFAAaJQsYIhsf
|
204
|
+
MCAfI8YNDf8AANkUFglKgPMUDglPhghPjwdQnrkoHwtTig5TjvklG+gqHegs
|
205
|
+
I+suIkVWifQuFSpcpERabhtgsO8wJB1krOc3Lv8yIAZvqiBopPQ3IfI4IyFp
|
206
|
+
sO86J/Q6IvI8HxduwSVts/88IfBAOxh0vP8+L/8/KylytxN4zSh2qix3uy97
|
207
|
+
rzp5qC98vz+AshuJzByJyxyJzDSDwxuKzTeEthyKzR2KzR2Kzh2LzzWGyB+M
|
208
|
+
zrRnhh+Mz/NcQh+NzyKOzxmP4/FfSSKP0COP0O9fWCCS2EmJuSeR0huU2ByU
|
209
|
+
1h2U1huV1ieS0iST1mOGnimS0z2OwiuT1CCW1/dlRfZnSu9pXCKZ3SWZ2PZp
|
210
|
+
TiGa5C6Y1h+c3z6VzESTzyCc4/FtYyKe5i2c2jaa1fFvZUWYzT2a0vBwZjGf
|
211
|
+
20qZ01eZxPR3Zk+f1yqo9Uii5DCp9Uul2kmn20un3f9/Xkuo6lWn3E6q4Uuu
|
212
|
+
4U6t5lau3nynu1iv3/+KY12w4GCv4l6y4GGy4ly152K04k268Gi34mm442q4
|
213
|
+
5HO/5nO/53TA523E8nfD6ozB3YHF6oHG6nfK9YDL7HPS+oTS+I/Q8JnT8ZXU
|
214
|
+
85HZ/Zrb+KPe9Z3g/6Dk/7rr/q/y//Hq5P//////////////////////////
|
215
|
+
////////////////////////////////////////////////////////////
|
216
|
+
////////////////////////////////////////////////////////////
|
217
|
+
////////////////////////////////////////////////////////////
|
218
|
+
////////////////////////////////////////////////////////////
|
219
|
+
////////////////////////////////////////////////////////////
|
220
|
+
/////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAP8A
|
221
|
+
LAAAAAAQABAAAAjkAP8JHDhoDxwuQG6g6cMo0MCBfxQs8KCl0KVPphI9FJhH
|
222
|
+
QJ1TpEqJAjUK0MZ/egpICZUJk0tPdx42+IdngI5OkihRmrSJzsMXMZgkwKHp
|
223
|
+
ESRIkSylgfJmjZwmh44AqFEJkaJGiwQVsfMFDJkkK/xQKOGIkCE+bub4CMNB
|
224
|
+
hYkTKVzI2MApjpktXdrkEIEhgwYQIy4EIIEKRhYsU8bYeOgAQgcEFqIgeeJk
|
225
|
+
iZcZDxn8o3GgAhsjSpQYsdLiJAsDEcoIIUJkCBUUJz8QeKCGR5AgPaqEOClQ
|
226
|
+
wpkdP37suMJb4AQxJwMCADs=
|
227
|
+
EOS
|
228
|
+
|
229
|
+
PARENTFOLDER_GIF[0..-1]=<<EOS
|
230
|
+
R0lGODlhEAAQAPMIAE1NTWZmZv9ma/+Fi/9wdf+6vP9eYf+FhwAAAAAAAAAA
|
231
|
+
AAAAAAAAAAAAAAAAAAAAACH5BAEAAAgALAAAAAAQABAAAARAEMlJq53h3lCA
|
232
|
+
ppwheF8oCARphcEoHCpWGAEw2nDVZrbX6wJeCvHTSQBD4oeYXDJjFYBUOoBS
|
233
|
+
AINs1jqZTp3gCAA7
|
234
|
+
EOS
|
235
|
+
|
236
|
+
|
166
237
|
D_STEP_INTO_GIF[0..-1]=<<EOS
|
167
238
|
R0lGODlhEAAQAIQSAE9ZXzpDX1aJtGd8laJtFfzjn/zlp6t4Gfzos7OAG/3s
|
168
239
|
wP3wz/7129bAff745/7679K6d9nFj///////////////////////////////
|
@@ -14,5 +14,5 @@ color.background=#ffffff
|
|
14
14
|
color.foreground=#000000
|
15
15
|
freebsd::font=courier 12 italic
|
16
16
|
freebsd::font.bold=courier 12 bold
|
17
|
-
win::font={Courier New} 9
|
18
|
-
win::font.bold={Courier New} 9 bold
|
17
|
+
win|mingw::font={Courier New} 9
|
18
|
+
win|mingw::font.bold={Courier New} 9 bold
|
@@ -51,14 +51,15 @@ class DirProjects < ArcadiaExt
|
|
51
51
|
padx 0
|
52
52
|
pady 0
|
53
53
|
background Arcadia.conf('panel.background')
|
54
|
-
}.place('x'=>
|
55
|
-
|
54
|
+
}.place('x'=>0)
|
55
|
+
TkWinfo.parent(@button_box).configure(:background => Arcadia.conf('panel.background'))
|
56
|
+
|
56
57
|
@button_box.add(Arcadia.style('toolbarbutton').update({
|
57
58
|
'name'=>'new_proj',
|
58
59
|
'anchor' => 'nw',
|
59
60
|
'command'=>proc{self.do_new_project},
|
60
61
|
'helptext'=>'New dir Project',
|
61
|
-
'image'=>
|
62
|
+
'image'=> Arcadia.image_res(NEW_GIF)})
|
62
63
|
)
|
63
64
|
|
64
65
|
@button_box.add(Arcadia.style('toolbarbutton').update({
|
@@ -66,7 +67,7 @@ class DirProjects < ArcadiaExt
|
|
66
67
|
'anchor' => 'nw',
|
67
68
|
'command'=>proc{self.do_open_project},
|
68
69
|
'helptext'=>'Open dir as Project',
|
69
|
-
'image'=>
|
70
|
+
'image'=> Arcadia.image_res(OPEN_PROJECT_GIF)})
|
70
71
|
)
|
71
72
|
|
72
73
|
@button_box.add(Arcadia.style('toolbarbutton').update({
|
@@ -74,18 +75,26 @@ class DirProjects < ArcadiaExt
|
|
74
75
|
'anchor' => 'nw',
|
75
76
|
'command'=>proc{self.do_goto_parent_folder},
|
76
77
|
'helptext'=>'Go to parent folder',
|
77
|
-
'image'=>
|
78
|
+
'image'=> Arcadia.image_res(PARENTFOLDER_GIF)})
|
78
79
|
)
|
79
|
-
#--- button_box
|
80
80
|
|
81
|
-
@
|
81
|
+
@button_box.add(Arcadia.style('toolbarbutton').update({
|
82
|
+
'name'=>'parent_folder',
|
83
|
+
'anchor' => 'nw',
|
84
|
+
'command'=>proc{self.do_search_files},
|
85
|
+
'helptext'=>'Search in files from current folder',
|
86
|
+
'image'=> Arcadia.image_res(SEARCH_FILES_GIF)})
|
87
|
+
)
|
88
|
+
|
89
|
+
#--- button_box
|
90
|
+
@panel = self.frame.root.add_panel(self.frame.name, "sync");
|
91
|
+
@cb_sync = TkCheckButton.new(@panel, Arcadia.style('checkbox').update('background'=>@panel.background)){
|
82
92
|
text 'Sync'
|
83
93
|
justify 'left'
|
84
94
|
indicatoron 0
|
85
|
-
offrelief '
|
86
|
-
image
|
87
|
-
|
88
|
-
place('x' => 0,'y' => 0,'height' => 26, 'width' => 26)
|
95
|
+
offrelief 'flat'
|
96
|
+
image Arcadia.image_res(SYNC_GIF)
|
97
|
+
pack
|
89
98
|
}
|
90
99
|
|
91
100
|
Tk::BWidget::DynamicHelp::add(@cb_sync,
|
@@ -126,19 +135,19 @@ class DirProjects < ArcadiaExt
|
|
126
135
|
|
127
136
|
do_open_folder_cmd = proc{|_node| do_open_folder(_node)}
|
128
137
|
do_close_folder_cmd = proc{|_node| do_close_folder(_node)}
|
129
|
-
|
130
|
-
# @htree = Tk::BWidget::Tree.new(self.frame.hinner_frame, Arcadia.style('treepanel')){
|
131
|
-
@htree = BWidgetTreePatched.new(self.frame.hinner_frame, Arcadia.style('treepanel')){
|
138
|
+
@htree = BWidgetTreePatched.new(self.frame.hinner_frame, Arcadia.style('treepanel')){
|
132
139
|
showlines false
|
133
140
|
deltay 18
|
134
141
|
opencmd do_open_folder_cmd
|
135
142
|
closecmd do_close_folder_cmd
|
136
143
|
selectcommand do_select_item
|
144
|
+
crosscloseimage Arcadia.image_res(PLUS_GIF)
|
145
|
+
crossopenimage Arcadia.image_res(MINUS_GIF)
|
137
146
|
}
|
138
|
-
@htree.extend(TkScrollableWidget).show(0,
|
147
|
+
@htree.extend(TkScrollableWidget).show(0,22)
|
139
148
|
self.pop_up_menu_tree
|
140
|
-
@image_kdir =
|
141
|
-
@image_kdir_closed =
|
149
|
+
@image_kdir = Arcadia.image_res(ICON_FOLDER_OPEN_GIF)
|
150
|
+
@image_kdir_closed = Arcadia.image_res(FOLDER_GIF)
|
142
151
|
self.load_projects
|
143
152
|
@htree.areabind_append('KeyPress',proc{|k|
|
144
153
|
key_press(k)
|
@@ -146,7 +155,7 @@ class DirProjects < ArcadiaExt
|
|
146
155
|
|
147
156
|
do_double_click = proc{
|
148
157
|
_selected = @htree.selected
|
149
|
-
if File.ftype(node2file(_selected)) == 'directory'
|
158
|
+
if _selected && File.ftype(node2file(_selected)) == 'directory'
|
150
159
|
if !_selected.nil? && @htree.open?(node2file(_selected))
|
151
160
|
@htree.close_tree(node2file(_selected))
|
152
161
|
elsif !_selected.nil?
|
@@ -189,7 +198,7 @@ class DirProjects < ArcadiaExt
|
|
189
198
|
end
|
190
199
|
|
191
200
|
def node2file(_node)
|
192
|
-
if _node[0..0]=='{' && _node[-1..-1]=='}'
|
201
|
+
if !_node.nil? && _node[0..0]=='{' && _node[-1..-1]=='}'
|
193
202
|
return _node[1..-2]
|
194
203
|
else
|
195
204
|
return _node
|
@@ -377,13 +386,7 @@ class DirProjects < ArcadiaExt
|
|
377
386
|
:command,
|
378
387
|
:label=>'Find in files...',
|
379
388
|
:hidemargin => false,
|
380
|
-
:command=> proc{
|
381
|
-
_target = @htree.selected
|
382
|
-
if _target
|
383
|
-
_target = File.dirname(_target) if File.ftype(_target) == 'file'
|
384
|
-
Arcadia.process_event(SearchInFilesEvent.new(self,'dir'=>_target))
|
385
|
-
end
|
386
|
-
}
|
389
|
+
:command=> proc{ do_search_files }
|
387
390
|
)
|
388
391
|
|
389
392
|
sub_ref_search.insert('end',
|
@@ -456,6 +459,14 @@ class DirProjects < ArcadiaExt
|
|
456
459
|
"%x %y")
|
457
460
|
end
|
458
461
|
|
462
|
+
def do_search_files
|
463
|
+
_target = @htree.selected
|
464
|
+
if _target
|
465
|
+
_target = File.dirname(_target) if File.ftype(_target) == 'file'
|
466
|
+
Arcadia.process_event(SearchInFilesEvent.new(self,'dir'=>_target))
|
467
|
+
end
|
468
|
+
end
|
469
|
+
|
459
470
|
def do_goto_parent_folder
|
460
471
|
if @current_opened_folder && @current_opened_folder != @last_current_opened_folder
|
461
472
|
shure_select_node(@current_opened_folder)
|
@@ -738,28 +749,53 @@ class DirProjects < ArcadiaExt
|
|
738
749
|
end
|
739
750
|
|
740
751
|
def add_node(_parent, _node, _kind)
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
752
|
+
if @htree.exist?(_node)
|
753
|
+
if ['project','directory'].include?(_kind) && @node_parent[_node]!=_parent && !_node.include?('phantom_')
|
754
|
+
_phantom_node = "phantom_#{_node}"
|
755
|
+
j = 0
|
756
|
+
while @htree.exist?(_phantom_node)
|
757
|
+
_phantom_node= "phantom_#{j}_#{_node}"
|
758
|
+
j = j +1
|
759
|
+
end
|
760
|
+
_name = File.basename(_node)
|
761
|
+
selectable = _kind == 'project'
|
762
|
+
_drawcross = 'auto'
|
763
|
+
@htree.insert('end', _parent ,_phantom_node, {
|
764
|
+
'text' => _name ,
|
765
|
+
'helptext' => _node,
|
766
|
+
'drawcross'=>_drawcross,
|
767
|
+
'selectable'=>selectable,
|
768
|
+
'deltax'=>-1,
|
769
|
+
'image'=> image(_kind, _node)
|
770
|
+
}.update(Arcadia.style('treeitem').update({'fill'=>Arcadia.conf('inactiveforeground')}))
|
771
|
+
)
|
750
772
|
end
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
'
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
773
|
+
else
|
774
|
+
@node_parent[_node] = _parent
|
775
|
+
# _name = _node.split(File::SEPARATOR)[-1]
|
776
|
+
_name = File.basename(_node)
|
777
|
+
_drawcross = 'auto'
|
778
|
+
if _kind == "project" || _kind == "directory"
|
779
|
+
begin
|
780
|
+
num = Dir.entries(_node).length-2
|
781
|
+
if num > 0
|
782
|
+
_drawcross = 'always'
|
783
|
+
end
|
784
|
+
rescue Errno::EACCES
|
785
|
+
end
|
786
|
+
end
|
787
|
+
@htree.insert('end', _parent ,_node, {
|
788
|
+
'text' => _name ,
|
789
|
+
'helptext' => _node,
|
790
|
+
'drawcross'=>_drawcross,
|
791
|
+
'deltax'=>-1,
|
792
|
+
'image'=> image(_kind, _node)
|
793
|
+
}.update(Arcadia.style('treeitem'))
|
794
|
+
)
|
795
|
+
if _kind == "project" || _kind == "directory"
|
796
|
+
if @opened_folder.include?(_node)
|
797
|
+
do_open_folder(_node, true)
|
798
|
+
end
|
763
799
|
end
|
764
800
|
end
|
765
801
|
end
|
@@ -812,6 +848,7 @@ class DirProjects < ArcadiaExt
|
|
812
848
|
@htree.configure('selectcommand'=>_proc)
|
813
849
|
@selecting_node = false
|
814
850
|
end
|
851
|
+
@htree.call_after_next_show_h_scroll(proc{Tk.update;@htree.see(_node)})
|
815
852
|
end
|
816
853
|
|
817
854
|
def del_project(_dir)
|
data/ext/ae-editor/ae-editor.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# by Antonio Galeone <antonio-galeone@rubyforge.org>
|
4
4
|
#
|
5
5
|
# &require_dir_ref=../..
|
6
|
-
# &require_omissis
|
6
|
+
# &require_omissis=#{Dir.pwd}/conf/arcadia.init
|
7
7
|
|
8
8
|
require 'tk'
|
9
9
|
require 'tktext'
|
@@ -12,16 +12,16 @@ require "#{Dir.pwd}/lib/a-tkcommons"
|
|
12
12
|
require "#{Dir.pwd}/lib/a-core"
|
13
13
|
require "#{Dir.pwd}/ext/ae-editor/lib/rbeautify"
|
14
14
|
|
15
|
-
class
|
15
|
+
class SourceTreeNode
|
16
16
|
attr_reader :sons
|
17
17
|
attr_reader :parent
|
18
18
|
attr_reader :kind
|
19
|
-
|
20
|
-
|
21
|
-
def initialize(parent=nil, kind='KClass')
|
19
|
+
attr_accessor :rif, :rif_end, :label, :helptext, :sortable
|
20
|
+
def initialize(parent=nil, kind='class', sortable=true)
|
22
21
|
@sons = Array.new
|
23
22
|
@parent = parent
|
24
23
|
@kind = kind
|
24
|
+
@sortable = sortable
|
25
25
|
if @parent !=nil
|
26
26
|
@parent.sons << self
|
27
27
|
end
|
@@ -29,15 +29,23 @@ class TreeNode
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def <=> (other)
|
32
|
-
self.
|
32
|
+
if self.sortable && other.sortable
|
33
|
+
self.label.strip <=> other.label.strip
|
34
|
+
elsif !self.sortable
|
35
|
+
-1
|
36
|
+
elsif !other.sortable
|
37
|
+
1
|
38
|
+
end
|
33
39
|
end
|
40
|
+
|
34
41
|
end
|
35
42
|
|
43
|
+
|
36
44
|
class SourceStructure
|
37
45
|
attr_reader :root
|
38
46
|
|
39
47
|
def initialize
|
40
|
-
@root =
|
48
|
+
@root = SourceTreeNode.new(nil, 'root'){|_node|
|
41
49
|
_node.rif= 'root'
|
42
50
|
_node.label=''
|
43
51
|
}
|
@@ -77,7 +85,7 @@ class SourceStructure
|
|
77
85
|
def class_node_by_line(_line)
|
78
86
|
line_node = node_by_line(@root, _line)
|
79
87
|
class_node = line_node
|
80
|
-
while class_node != nil && class_node.kind != "
|
88
|
+
while class_node != nil && class_node.kind != "class"
|
81
89
|
class_node = class_node.parent
|
82
90
|
end
|
83
91
|
return class_node
|
@@ -86,30 +94,116 @@ class SourceStructure
|
|
86
94
|
end
|
87
95
|
|
88
96
|
class CtagsSourceStructure < SourceStructure
|
89
|
-
|
97
|
+
SUPPORTED_LANG = ['Ant','Asm','Asp','Awk','Basic','BETA','C','C++','C#','Cobol','DosBatch','Eiffel','Erlang','Flex','Fortran','HTML','Java','JavaScript','Lisp','Lua','Make','MatLab','OCaml','Pascal','Perl','PHP','Python','REXX','Ruby','Scheme','Sh','SLang','SML','SQL','Tcl','Tex','Vera','Verilog','VHDL','Vim','YACC']
|
98
|
+
def initialize(_file, _ctags_string='ctags', _language=nil)
|
90
99
|
super()
|
91
100
|
@file = _file
|
101
|
+
@ctags_string = _ctags_string
|
102
|
+
@language = (_language.nil?)?nil:_language.capitalize
|
103
|
+
@classes = Hash.new
|
104
|
+
@last_root = @root
|
105
|
+
@last_class_node = @root
|
106
|
+
@last_node = @root
|
92
107
|
build_structure
|
93
108
|
end
|
94
109
|
|
95
110
|
def build_structure
|
96
111
|
output = ctags
|
97
112
|
output.each {|line|
|
98
|
-
|
99
|
-
|
113
|
+
b1,brest = line.split("/^")
|
114
|
+
b2,b3 = brest.split('$/;"')
|
115
|
+
name,file = b1.strip.split("\t")
|
116
|
+
definition = b2.strip
|
117
|
+
fields_raw = b3.strip.split("\t")
|
118
|
+
fields = Hash.new
|
119
|
+
fields_raw.each{|item|
|
120
|
+
k,v=item.split(":")
|
121
|
+
fields[k.strip]=v.strip if !k.nil? && !v.nil?
|
122
|
+
}
|
123
|
+
if fields['class'] != nil
|
124
|
+
parent = @classes[fields['class']]
|
125
|
+
elsif fields['interface'] != nil
|
126
|
+
parent = @classes[fields['interface']]
|
127
|
+
elsif ['method','singleton method'].include?(fields['kind'])
|
128
|
+
parent = @last_class_node
|
129
|
+
else
|
130
|
+
parent = @last_root
|
131
|
+
end
|
132
|
+
|
133
|
+
node = SourceTreeNode.new(parent, fields['kind'])
|
134
|
+
node.label = name
|
135
|
+
node.helptext = definition
|
136
|
+
node.rif = fields['line']
|
137
|
+
@last_node.rif_end = (node.rif.to_i-1).to_s
|
138
|
+
|
139
|
+
if ['class','module','interface','package'].include?(fields['kind'])
|
140
|
+
if fields['class'] != nil
|
141
|
+
@classes["#{fields['class']}.#{name}"]=node
|
142
|
+
else
|
143
|
+
@classes[name]=node
|
144
|
+
end
|
145
|
+
@last_class_node = node
|
146
|
+
end
|
147
|
+
node.sortable = !['package','field'].include?(fields['kind'])
|
148
|
+
@last_node = node
|
149
|
+
}
|
150
|
+
|
151
|
+
|
100
152
|
end
|
101
153
|
|
102
154
|
def ctags
|
103
|
-
|
155
|
+
if @language != nil && SUPPORTED_LANG.include?(@language)
|
156
|
+
@ctags_string = "#{@ctags_string} --language-force=#{@language}"
|
157
|
+
end
|
158
|
+
_cmd_ = "|#{@ctags_string} --fields=+a+f+m+i+k+K+n+s+S+t+z -uf - #{@file}"
|
104
159
|
to_ret = ''
|
105
|
-
|
106
|
-
|
107
|
-
|
160
|
+
begin
|
161
|
+
open(_cmd_, "r"){|f|
|
162
|
+
to_ret = f.readlines
|
163
|
+
}
|
164
|
+
rescue RuntimeError => e
|
165
|
+
Arcadia.runtime_error(e)
|
166
|
+
end
|
108
167
|
to_ret
|
109
168
|
end
|
110
169
|
end
|
111
170
|
|
112
171
|
|
172
|
+
class RubyCtagsSourceStructure < CtagsSourceStructure
|
173
|
+
attr_reader :injected_row
|
174
|
+
|
175
|
+
def initialize(_file, _ctags_string='ctags')
|
176
|
+
super(_file, _ctags_string, 'Ruby')
|
177
|
+
end
|
178
|
+
|
179
|
+
def scheletor_from_node(_node, _source='', _injected_source='', _injected_class='')
|
180
|
+
_hinner_source = ''
|
181
|
+
#_sons = _node.sons.sort
|
182
|
+
_sons = _node.sons
|
183
|
+
for inode in 0.._sons.length - 1
|
184
|
+
_son = _sons[inode]
|
185
|
+
if _son.kind == 'class'
|
186
|
+
_hinner_source = "#{_hinner_source}#{_son.helptext}\n"
|
187
|
+
elsif _son.kind == 'module'
|
188
|
+
_hinner_source = "#{_hinner_source}#{_son.helptext}\n"
|
189
|
+
elsif _son.kind == 'method' && _son.label != 'initialize'
|
190
|
+
_hinner_source = "#{_hinner_source} def #{_son.label}\n"
|
191
|
+
_hinner_source = "#{_hinner_source} end\n"
|
192
|
+
elsif _son.kind == 'singleton method'
|
193
|
+
_hinner_source = "#{_hinner_source} def #{_son.label}\n"
|
194
|
+
_hinner_source = "#{_hinner_source} end\n"
|
195
|
+
end
|
196
|
+
_hinner_source= scheletor_from_node(_son, _hinner_source, _injected_source, _injected_class)
|
197
|
+
end
|
198
|
+
_source = "#{_source}#{_hinner_source}" if _hinner_source.strip.length>0
|
199
|
+
if _node.kind == 'class' && _node.label == _injected_class
|
200
|
+
_source = "#{_source} def initialize\n #{_injected_source} end\n"
|
201
|
+
@injected_row = _source.split("\n").length-2
|
202
|
+
end
|
203
|
+
_source = "#{_source}end\n" if _node.kind == 'class' || _node.kind == 'module'
|
204
|
+
_source
|
205
|
+
end
|
206
|
+
end
|
113
207
|
|
114
208
|
class RubySourceStructure < SourceStructure
|
115
209
|
attr_reader :injected_row
|
@@ -124,10 +218,6 @@ class RubySourceStructure < SourceStructure
|
|
124
218
|
_row = 1
|
125
219
|
_liv = 0
|
126
220
|
_livs = Array.new
|
127
|
-
# @root = TreeNode.new(nil, 'KRoot'){|_node|
|
128
|
-
# _node.rif= 'root'
|
129
|
-
# _node.label=''
|
130
|
-
# }
|
131
221
|
_livs[_liv]=@root
|
132
222
|
_source.each_line{|line|
|
133
223
|
line = "\s"+line.split("#")[0]+"\s"
|
@@ -152,7 +242,7 @@ class RubySourceStructure < SourceStructure
|
|
152
242
|
_label = _helptext
|
153
243
|
end
|
154
244
|
if (m[0].strip[0..4] == "class" && m.pre_match.strip.length==0)
|
155
|
-
_kind = '
|
245
|
+
_kind = 'class'
|
156
246
|
if m.post_match.strip[0..1]=='<<'
|
157
247
|
hinner_class = true
|
158
248
|
else
|
@@ -163,7 +253,7 @@ class RubySourceStructure < SourceStructure
|
|
163
253
|
_liv = _liv - 1
|
164
254
|
next
|
165
255
|
elsif (m[0].strip[0..5] == "module" && m.pre_match.strip.length==0)
|
166
|
-
_kind = '
|
256
|
+
_kind = 'module'
|
167
257
|
elsif (m[0].strip[0..5] == "module" && m.pre_match.strip.length>0)
|
168
258
|
_row = _row +1
|
169
259
|
_liv = _liv - 1
|
@@ -176,9 +266,9 @@ class RubySourceStructure < SourceStructure
|
|
176
266
|
_liv = _liv - 1
|
177
267
|
next
|
178
268
|
elsif (m[0].strip[0..2] == "def" && m.pre_match.strip.length==0)
|
179
|
-
_kind = '
|
269
|
+
_kind = 'method'
|
180
270
|
if _label.include?(_parent.label + '.')
|
181
|
-
_kind = '
|
271
|
+
_kind = 'singleton method'
|
182
272
|
end
|
183
273
|
# elsif (m[0].strip[0..10] == "attr_reader" && m.pre_match.strip.length==0)
|
184
274
|
# _kind = 'KAttr_reader'
|
@@ -186,15 +276,15 @@ class RubySourceStructure < SourceStructure
|
|
186
276
|
# _row = _row +1
|
187
277
|
end
|
188
278
|
|
189
|
-
if _livs[_liv-1] && (_livs[_liv-1].kind != '
|
190
|
-
|
279
|
+
if _livs[_liv-1] && (_livs[_liv-1].kind != 'method' || (_livs[_liv-1].kind == 'method' && _kind == 'class' && hinner_class))
|
280
|
+
SourceTreeNode.new(_parent, _kind){|_node|
|
191
281
|
_node.label = _label
|
192
282
|
_node.helptext = _helptext
|
193
283
|
_node.rif = _row.to_s
|
194
284
|
_livs[_pliv + 1]=_node
|
195
285
|
}
|
196
286
|
else
|
197
|
-
|
287
|
+
SourceTreeNode.new(_livs[_liv-3], _kind){|_node|
|
198
288
|
_node.label = _label
|
199
289
|
_node.helptext = _helptext
|
200
290
|
_node.rif = _row.to_s
|
@@ -227,26 +317,26 @@ class RubySourceStructure < SourceStructure
|
|
227
317
|
_sons = _node.sons
|
228
318
|
for inode in 0.._sons.length - 1
|
229
319
|
_son = _sons[inode]
|
230
|
-
if _son.kind == '
|
320
|
+
if _son.kind == 'class'
|
231
321
|
_hinner_source = "#{_hinner_source}class #{_son.helptext}\n"
|
232
|
-
elsif _son.kind == '
|
322
|
+
elsif _son.kind == 'module'
|
233
323
|
_hinner_source = "#{_hinner_source}module #{_son.helptext}\n"
|
234
|
-
elsif _son.kind == '
|
324
|
+
elsif _son.kind == 'method' && _son.helptext != 'initialize'
|
235
325
|
|
236
326
|
_hinner_source = "#{_hinner_source} def #{_son.helptext}\n"
|
237
327
|
_hinner_source = "#{_hinner_source} end\n"
|
238
|
-
elsif _son.kind == '
|
328
|
+
elsif _son.kind == 'singleton method'
|
239
329
|
_hinner_source = "#{_hinner_source} def #{_son.helptext}\n"
|
240
330
|
_hinner_source = "#{_hinner_source} end\n"
|
241
331
|
end
|
242
332
|
_hinner_source= scheletor_from_node(_son, _hinner_source, _injected_source, _injected_class)
|
243
333
|
end
|
244
334
|
_source = "#{_source}#{_hinner_source}" if _hinner_source.strip.length>0
|
245
|
-
if _node.kind == '
|
335
|
+
if _node.kind == 'class' && _node.label == _injected_class
|
246
336
|
_source = "#{_source} def initialize\n #{_injected_source} end\n"
|
247
337
|
@injected_row = _source.split("\n").length-2
|
248
338
|
end
|
249
|
-
_source = "#{_source}end\n" if _node.kind == '
|
339
|
+
_source = "#{_source}end\n" if _node.kind == 'class' || _node.kind == 'module'
|
250
340
|
_source
|
251
341
|
end
|
252
342
|
|
@@ -263,12 +353,22 @@ end
|
|
263
353
|
class SafeCompleteCode
|
264
354
|
attr_reader :modified_row, :modified_col
|
265
355
|
attr_reader :filter
|
266
|
-
def initialize(
|
267
|
-
@
|
268
|
-
@
|
356
|
+
def initialize(_editor, _row, _col)
|
357
|
+
@editor = _editor
|
358
|
+
@source = _editor.text_value
|
359
|
+
#@file = _file
|
269
360
|
@row = _row.to_i
|
270
361
|
@col = _col.to_i
|
271
|
-
|
362
|
+
if _editor && _editor.has_ctags?
|
363
|
+
tmp_file = _editor.create_temp_file
|
364
|
+
begin
|
365
|
+
@ss = RubyCtagsSourceStructure.new(tmp_file, _editor.ctags_string)
|
366
|
+
ensure
|
367
|
+
File.delete(tmp_file)
|
368
|
+
end
|
369
|
+
else
|
370
|
+
@ss = RubySourceStructure.new(_source)
|
371
|
+
end
|
272
372
|
@filter=''
|
273
373
|
@words = Array.new
|
274
374
|
process_source
|
@@ -390,6 +490,7 @@ class SafeCompleteCode
|
|
390
490
|
source_array = @source.split("\n")
|
391
491
|
#---------------------------------
|
392
492
|
focus_line = source_array[@row-1]
|
493
|
+
focus_line = focus_line[0..@col] if focus_line
|
393
494
|
focus_line = '' if focus_line.nil?
|
394
495
|
focus_world = ''
|
395
496
|
if focus_line && focus_line.strip.length > 0
|
@@ -415,7 +516,7 @@ class SafeCompleteCode
|
|
415
516
|
end
|
416
517
|
@class_node = @ss.class_node_by_line(@row)
|
417
518
|
#---------------------------------
|
418
|
-
@modified_source = "#{@modified_source}Dir.chdir('#{File.dirname(@file)}')\n" if @file
|
519
|
+
@modified_source = "#{@modified_source}Dir.chdir('#{File.dirname(@editor.file)}')\n" if @editor.file
|
419
520
|
@modified_row = @modified_row+1
|
420
521
|
source_array.each_with_index{|line,j|
|
421
522
|
# 0) if a comment I do not consider it
|
@@ -430,7 +531,7 @@ class SafeCompleteCode
|
|
430
531
|
m = /&require_omissis=[\s]*(.)*/.match(line)
|
431
532
|
if m
|
432
533
|
require_omissis=line.split('&require_omissis=')[1].strip
|
433
|
-
@modified_source = "#{@modified_source}require
|
534
|
+
@modified_source = "#{@modified_source}require \"#{require_omissis}\"\n"
|
434
535
|
@modified_row = @modified_row+1
|
435
536
|
end
|
436
537
|
|
@@ -460,12 +561,15 @@ class SafeCompleteCode
|
|
460
561
|
re = Regexp::new('[\s\n\t\;]('+focus_world.strip+')[\s\t]*=(.)*')
|
461
562
|
source_array.each_with_index do |line,j|
|
462
563
|
#m = /[\s\n\t\;](#{focus_world})[\s\t]*=(.)*/.match(line)
|
463
|
-
|
464
|
-
m = re.match("\s#{line}")
|
465
|
-
if m
|
466
|
-
@dec_line = line
|
467
|
-
@class_dec_line_node = @ss.class_node_by_line(j+1)
|
564
|
+
if j >= @row-1
|
468
565
|
break
|
566
|
+
else
|
567
|
+
m = re.match("\s#{line}")
|
568
|
+
if m
|
569
|
+
@dec_line = line
|
570
|
+
@class_dec_line_node = @ss.class_node_by_line(j+1)
|
571
|
+
break
|
572
|
+
end
|
469
573
|
end
|
470
574
|
end
|
471
575
|
rescue Exception => e
|
@@ -508,8 +612,6 @@ class SafeCompleteCode
|
|
508
612
|
else
|
509
613
|
@modified_source = "#{@modified_source}$SAFE = 3\n"
|
510
614
|
if @dec_line
|
511
|
-
|
512
|
-
|
513
615
|
@modified_source = "#{@modified_source}#{declaration(@dec_line)}\n"
|
514
616
|
@modified_row = @modified_row+1
|
515
617
|
end
|
@@ -557,9 +659,9 @@ class SafeCompleteCode
|
|
557
659
|
end
|
558
660
|
|
559
661
|
def candidates(_show_error = false)
|
560
|
-
temp_file = create_modified_temp_file(@file)
|
662
|
+
temp_file = create_modified_temp_file(@editor.file)
|
561
663
|
begin
|
562
|
-
Arcadia.is_windows??ruby='rubyw':ruby=
|
664
|
+
Arcadia.is_windows??ruby='rubyw':ruby=Arcadia.ruby
|
563
665
|
_cmp_s = "|#{ruby} '#{temp_file}'"
|
564
666
|
_ret = nil
|
565
667
|
open(_cmp_s,"r") do |f|
|
@@ -577,6 +679,7 @@ class SafeCompleteCode
|
|
577
679
|
end
|
578
680
|
_ret.sort
|
579
681
|
rescue Exception => e
|
682
|
+
Arcadia.runtime_error(e)
|
580
683
|
#Arcadia.console(self, 'msg'=>e.to_s, 'level'=>'error')
|
581
684
|
ensure
|
582
685
|
File.delete(temp_file) if File.exist?(temp_file)
|
@@ -585,9 +688,10 @@ class SafeCompleteCode
|
|
585
688
|
|
586
689
|
def create_modified_temp_file(_base_file=nil)
|
587
690
|
if _base_file
|
588
|
-
|
691
|
+
File.basename(_base_file)
|
692
|
+
_file = File.join(File.dirname(_base_file),'~~'+File.basename(_base_file))
|
589
693
|
else
|
590
|
-
_file = File.join(Arcadia.instance.local_dir,'buffer
|
694
|
+
_file = File.join(Arcadia.instance.local_dir,'~~buffer')
|
591
695
|
end
|
592
696
|
f = File.new(_file, "w")
|
593
697
|
begin
|
@@ -697,16 +801,17 @@ end
|
|
697
801
|
|
698
802
|
class AgEditorOutlineToolbar
|
699
803
|
attr_accessor :sync
|
700
|
-
def initialize(
|
804
|
+
def initialize(_controller)
|
701
805
|
@controller = _controller
|
702
|
-
@
|
806
|
+
@panel = @controller.frame(1).root.add_panel(@controller.frame(1).name, "sync");
|
807
|
+
@cb_sync = TkCheckButton.new(@panel, Arcadia.style('checkbox').update('background'=>@panel.background)){
|
703
808
|
text 'Sync'
|
704
809
|
justify 'left'
|
705
810
|
indicatoron 0
|
706
|
-
offrelief '
|
707
|
-
image
|
708
|
-
|
709
|
-
}
|
811
|
+
offrelief 'flat'
|
812
|
+
image Arcadia.image_res(SYNC_GIF)
|
813
|
+
pack
|
814
|
+
}
|
710
815
|
Tk::BWidget::DynamicHelp::add(@cb_sync,
|
711
816
|
'text'=>'Link open editors with content in the Navigator')
|
712
817
|
|
@@ -742,10 +847,12 @@ end
|
|
742
847
|
class AgEditorOutline
|
743
848
|
attr_reader :last_row
|
744
849
|
attr_reader :tree_exp
|
745
|
-
|
850
|
+
attr_reader :ss
|
851
|
+
def initialize(_editor, _frame, _bar, _lang=nil)
|
746
852
|
@editor = _editor
|
747
853
|
@frame = _frame
|
748
854
|
@bar = _bar
|
855
|
+
@lang = _lang
|
749
856
|
initialize_tree(_frame)
|
750
857
|
end
|
751
858
|
|
@@ -779,10 +886,12 @@ class AgEditorOutline
|
|
779
886
|
@tree_exp.close_tree(to_open) if to_open && !@opened
|
780
887
|
|
781
888
|
@tree_exp.see(_node.rif)
|
889
|
+
|
782
890
|
ensure
|
783
891
|
@tree_exp.selectcommand(_proc)
|
784
892
|
@selecting_node = false
|
785
893
|
end
|
894
|
+
@tree_exp.call_after_next_show_h_scroll(proc{Tk.update;@tree_exp.see(_node.rif)})
|
786
895
|
end
|
787
896
|
|
788
897
|
def select_without_event(_line)
|
@@ -830,6 +939,8 @@ class AgEditorOutline
|
|
830
939
|
deltay 18
|
831
940
|
dragenabled true
|
832
941
|
selectcommand proc{ _tree_goto.call(self) }
|
942
|
+
crosscloseimage Arcadia.image_res(ARROWRIGHT_GIF)
|
943
|
+
crossopenimage Arcadia.image_res(ARROWDOWN_GIF)
|
833
944
|
}
|
834
945
|
@tree_exp.extend(TkScrollableWidget)
|
835
946
|
self.show
|
@@ -843,7 +954,7 @@ class AgEditorOutline
|
|
843
954
|
|
844
955
|
def show
|
845
956
|
#@tree_scroll_wrapper.show(0,26)
|
846
|
-
@tree_exp.show(0,
|
957
|
+
@tree_exp.show(0,0)
|
847
958
|
Tk.update
|
848
959
|
end
|
849
960
|
|
@@ -853,22 +964,22 @@ class AgEditorOutline
|
|
853
964
|
end
|
854
965
|
|
855
966
|
def build_tree_from_node(_node, _label_match=nil)
|
856
|
-
@
|
857
|
-
@
|
858
|
-
@
|
859
|
-
@
|
967
|
+
@image_class = Arcadia.image_res(TREE_NODE_CLASS_GIF)
|
968
|
+
@image_module = Arcadia.image_res(TREE_NODE_MODULE_GIF)
|
969
|
+
@image_method = Arcadia.image_res(TREE_NODE_METHOD_GIF)
|
970
|
+
@image_singleton_method = Arcadia.image_res(TREE_NODE_SINGLETON_METHOD_GIF)
|
860
971
|
|
861
|
-
_sorted_sons = _node.sons.sort
|
972
|
+
_sorted_sons = _node.sons.sort
|
862
973
|
for inode in 0.._sorted_sons.length - 1
|
863
974
|
_son = _sorted_sons[inode]
|
864
|
-
if _son.kind == '
|
865
|
-
_image = @
|
866
|
-
elsif _son.kind == '
|
867
|
-
_image = @
|
868
|
-
elsif _son.kind == '
|
869
|
-
_image = @
|
870
|
-
elsif _son.kind == '
|
871
|
-
_image = @
|
975
|
+
if _son.kind == 'class'
|
976
|
+
_image = @image_class
|
977
|
+
elsif _son.kind == 'module'
|
978
|
+
_image = @image_module
|
979
|
+
elsif _son.kind == 'method' || _son.kind == 'procedure'
|
980
|
+
_image = @image_method
|
981
|
+
elsif _son.kind == 'singleton method'
|
982
|
+
_image = @image_singleton_method
|
872
983
|
end
|
873
984
|
@tree_exp.insert('end', _son.parent.rif ,_son.rif, {
|
874
985
|
'text' => _son.label ,
|
@@ -899,12 +1010,21 @@ class AgEditorOutline
|
|
899
1010
|
end
|
900
1011
|
|
901
1012
|
|
902
|
-
#(re)build tree
|
903
1013
|
_txt = @editor.text.get('1.0','end')
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
1014
|
+
if @editor.has_ctags?
|
1015
|
+
if @editor.file
|
1016
|
+
@ss = CtagsSourceStructure.new(@editor.file, @editor.ctags_string)
|
1017
|
+
else
|
1018
|
+
tmp_file = @editor.create_temp_file
|
1019
|
+
begin
|
1020
|
+
@ss = CtagsSourceStructure.new(tmp_file, @editor.ctags_string, @lang)
|
1021
|
+
ensure
|
1022
|
+
File.delete(tmp_file)
|
1023
|
+
end
|
1024
|
+
end
|
1025
|
+
else
|
1026
|
+
@ss = RubySourceStructure.new(_txt)
|
1027
|
+
end
|
908
1028
|
@selected = nil
|
909
1029
|
build_tree_from_node(@ss.root, _label_sel)
|
910
1030
|
if @selected
|
@@ -950,6 +1070,8 @@ class AgEditor
|
|
950
1070
|
attr_reader :outline
|
951
1071
|
attr_reader :highlighting
|
952
1072
|
attr_reader :last_tmp_file
|
1073
|
+
attr_reader :lang
|
1074
|
+
attr_reader :file_info
|
953
1075
|
def initialize(_controller, _page_frame)
|
954
1076
|
@controller = _controller
|
955
1077
|
@page_frame = _page_frame
|
@@ -961,6 +1083,7 @@ class AgEditor
|
|
961
1083
|
@font_metrics_bold = TkFont.new(@font_bold).metrics
|
962
1084
|
@highlighting = false
|
963
1085
|
@classbrowsing = false
|
1086
|
+
@codeinsight = false
|
964
1087
|
@find = @controller.get_find
|
965
1088
|
@read_only=false
|
966
1089
|
@loading=false
|
@@ -968,6 +1091,7 @@ class AgEditor
|
|
968
1091
|
@spaces_show = false
|
969
1092
|
@line_numbers_visible = @controller.conf('line-numbers') == 'yes'
|
970
1093
|
@id = -1
|
1094
|
+
@file_info = Hash.new
|
971
1095
|
end
|
972
1096
|
|
973
1097
|
def modified_from_opening?
|
@@ -1022,6 +1146,7 @@ class AgEditor
|
|
1022
1146
|
padx 0
|
1023
1147
|
tabs $arcadia['conf']['editor.tabs']
|
1024
1148
|
}
|
1149
|
+
|
1025
1150
|
_self_editor = self
|
1026
1151
|
class << @text
|
1027
1152
|
attr_accessor :editor
|
@@ -1047,26 +1172,47 @@ class AgEditor
|
|
1047
1172
|
@buffer = text_value
|
1048
1173
|
pop_up_menu
|
1049
1174
|
@text.extend(TkScrollableWidget).show
|
1175
|
+
@text.extend(TkInputThrow)
|
1050
1176
|
begin
|
1051
1177
|
@text_cursor = @text.cget('cursor')
|
1052
1178
|
rescue RuntimeError => e
|
1053
|
-
|
1179
|
+
Arcadia.runtime_error(e)
|
1180
|
+
#p "RuntimeError : #{e.message}"
|
1054
1181
|
end
|
1055
1182
|
end
|
1056
1183
|
|
1057
1184
|
def create_temp_file
|
1058
1185
|
if @file
|
1059
1186
|
n=0
|
1060
|
-
while File.exist?("#{@file}#{
|
1187
|
+
while File.exist?("#{File.join(File.dirname(@file),'~~'+File.basename(@file))}#{'_'*n}")
|
1061
1188
|
n+=1
|
1062
1189
|
end
|
1063
|
-
_file = "#{@file}#{
|
1190
|
+
_file = "#{File.join(File.dirname(@file),'~~'+File.basename(@file))}#{'_'*n}"
|
1191
|
+
# while File.exist?("~~#{@file}#{n*'_'}")
|
1192
|
+
# n+=1
|
1193
|
+
# end
|
1194
|
+
# _file = "~~#{@file}#{n*'_'}"
|
1064
1195
|
else
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1196
|
+
if @lang == 'java'
|
1197
|
+
m = Regexp::new(/(class[\s][\s]*)[A-Za-z0-9_]*[\s]*/).match(text_value)
|
1198
|
+
if m && m.length > 0
|
1199
|
+
a = m[0].split
|
1200
|
+
if a && a.length > 1
|
1201
|
+
tmp_dir = "~~#{a[1].strip.downcase}"
|
1202
|
+
full_tmp_dir = File.join(Arcadia.instance.local_dir,tmp_dir)
|
1203
|
+
Dir.mkdir(full_tmp_dir) if !File.exist?(full_tmp_dir)
|
1204
|
+
basename = File.join(tmp_dir,"#{a[1].strip}.java")
|
1205
|
+
end
|
1206
|
+
end
|
1207
|
+
basename = "~~buffer.java" if basename.nil?
|
1208
|
+
else
|
1209
|
+
n=0
|
1210
|
+
while File.exist?(File.join(Arcadia.instance.local_dir,"~~buffer#{n}"))
|
1211
|
+
n+=1
|
1212
|
+
end
|
1213
|
+
basename = "~~buffer#{n}"
|
1068
1214
|
end
|
1069
|
-
_file = File.join(Arcadia.instance.local_dir,
|
1215
|
+
_file = File.join(Arcadia.instance.local_dir, basename)
|
1070
1216
|
end
|
1071
1217
|
f = File.new(_file, "w")
|
1072
1218
|
begin
|
@@ -1100,9 +1246,9 @@ class AgEditor
|
|
1100
1246
|
Arcadia.console(self, 'msg'=>_custom_text)
|
1101
1247
|
|
1102
1248
|
if @file
|
1103
|
-
_file = @file
|
1249
|
+
_file = "#{File.join(File.dirname(@file),'~~'+File.basename(@file))}"
|
1104
1250
|
else
|
1105
|
-
_file = 'buffer
|
1251
|
+
_file = File.join(Arcadia.instance.local_dir,'~~buffer')
|
1106
1252
|
end
|
1107
1253
|
f = File.new(_file, "w")
|
1108
1254
|
begin
|
@@ -1132,7 +1278,7 @@ class AgEditor
|
|
1132
1278
|
@do_complete = @do_complete && @controller.accept_complete_code
|
1133
1279
|
if @do_complete
|
1134
1280
|
line, col = @text.index('insert').split('.')
|
1135
|
-
mss = SafeCompleteCode.new(
|
1281
|
+
mss = SafeCompleteCode.new(self, line.to_i, col.to_i)
|
1136
1282
|
candidates = mss.candidates
|
1137
1283
|
raise_complete_code(candidates, line.to_s, col.to_s, mss.filter) if candidates && candidates.length > 0
|
1138
1284
|
end
|
@@ -1170,6 +1316,18 @@ class AgEditor
|
|
1170
1316
|
_target = @text.get('insert - 1 chars wordstart','insert')
|
1171
1317
|
if _target.strip == '('
|
1172
1318
|
_target = @text.get('insert - 2 chars wordstart','insert')
|
1319
|
+
else
|
1320
|
+
_line = @text.get("insert linestart",'insert lineend')
|
1321
|
+
ei = _line.index(_target)
|
1322
|
+
if !ei.nil?
|
1323
|
+
j=1
|
1324
|
+
pre_target = ''
|
1325
|
+
while ei-j>=0 && _line[ei-j..ei-j]!="\s"
|
1326
|
+
pre_target = _line[ei-j..ei-j] + pre_target
|
1327
|
+
j+=1
|
1328
|
+
end
|
1329
|
+
_target= pre_target + _target
|
1330
|
+
end
|
1173
1331
|
end
|
1174
1332
|
if _target.strip.length > 0 && _target != '.'
|
1175
1333
|
extra_len = _target.length.+@
|
@@ -1508,7 +1666,7 @@ class AgEditor
|
|
1508
1666
|
when 'g'
|
1509
1667
|
Arcadia.process_event(GoToLineBufferEvent.new(self))
|
1510
1668
|
when 'n'
|
1511
|
-
|
1669
|
+
Arcadia.process_event(NewBufferEvent.new(self))
|
1512
1670
|
when 'w'
|
1513
1671
|
Arcadia.process_event(CloseCurrentTabEvent.new(self))
|
1514
1672
|
end
|
@@ -1643,8 +1801,7 @@ class AgEditor
|
|
1643
1801
|
if ['Control_L', 'Control_V', 'BackSpace', 'Delete'].include?(e.keysym)
|
1644
1802
|
do_line_update
|
1645
1803
|
end
|
1646
|
-
if @highlighting
|
1647
|
-
# rehighlightline(@text.index('insert').split('.')[0].to_i)
|
1804
|
+
if @highlighting
|
1648
1805
|
row = @text.index('insert').split('.')[0].to_i
|
1649
1806
|
rehighlightlines(row, row)
|
1650
1807
|
end
|
@@ -1729,14 +1886,14 @@ class AgEditor
|
|
1729
1886
|
|
1730
1887
|
@text.tag_bind('selected', 'Enter', proc{@text.tag_remove('selected','1.0','end')})
|
1731
1888
|
|
1732
|
-
@text.
|
1889
|
+
@text.bind_append("Enter", proc{do_enter})
|
1733
1890
|
|
1734
1891
|
@text.bind("<Modified>"){|e|
|
1735
1892
|
check_modify
|
1736
1893
|
}
|
1737
1894
|
activate_key_binding
|
1738
1895
|
@text.bind_append("1"){
|
1739
|
-
Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@text))
|
1896
|
+
#Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@text))
|
1740
1897
|
refresh_outline
|
1741
1898
|
}
|
1742
1899
|
end
|
@@ -1748,11 +1905,12 @@ class AgEditor
|
|
1748
1905
|
end
|
1749
1906
|
|
1750
1907
|
def run_buffer
|
1751
|
-
if !@file
|
1752
|
-
|
1908
|
+
if !@file
|
1909
|
+
@lang='ruby' if !@lang
|
1910
|
+
RunCmdEvent.new(self, {'file'=>'*CURR', 'persistent'=>false, 'lang'=>@lang}).go!
|
1753
1911
|
else
|
1754
|
-
save if !@read_only
|
1755
|
-
|
1912
|
+
save if !@read_only && modified?
|
1913
|
+
RunCmdEvent.new(self, {'file'=>@file, 'lang'=>@lang}).go!
|
1756
1914
|
end
|
1757
1915
|
end
|
1758
1916
|
|
@@ -1776,7 +1934,12 @@ class AgEditor
|
|
1776
1934
|
'bordermode'=>'outside'
|
1777
1935
|
)
|
1778
1936
|
}
|
1779
|
-
|
1937
|
+
if Arcadia.conf("textline.spacing3")
|
1938
|
+
@text_line_spacing3 = Arcadia.conf("textline.spacing3").to_i
|
1939
|
+
else
|
1940
|
+
@text_line_spacing3 = 0
|
1941
|
+
end
|
1942
|
+
delta = (@font_metrics_bold[2][1]-@font_metrics[2][1]) + @text_line_spacing3
|
1780
1943
|
@text_line_num.tag_configure('normal_case', 'justify'=>'right')
|
1781
1944
|
@text_line_num.tag_configure('bold_case', 'spacing3'=>delta, 'justify'=>'right')
|
1782
1945
|
@text_line_num.tag_configure('breakpoint', 'background'=>'red','foreground'=>'yellow','borderwidth'=>1, 'relief'=>'raised')
|
@@ -2003,7 +2166,8 @@ class AgEditor
|
|
2003
2166
|
begin
|
2004
2167
|
@text.tag_configure(_name, h)
|
2005
2168
|
rescue RuntimeError => e
|
2006
|
-
|
2169
|
+
Arcadia.runtime_error(e)
|
2170
|
+
#p "RuntimeError : #{e.message}"
|
2007
2171
|
end
|
2008
2172
|
end
|
2009
2173
|
|
@@ -2047,7 +2211,8 @@ class AgEditor
|
|
2047
2211
|
begin
|
2048
2212
|
@text.tag_configure(_name, h)
|
2049
2213
|
rescue RuntimeError => e
|
2050
|
-
|
2214
|
+
Arcadia.runtime_error(e)
|
2215
|
+
#p "RuntimeError : #{e.message}"
|
2051
2216
|
end
|
2052
2217
|
end
|
2053
2218
|
|
@@ -2219,7 +2384,7 @@ class AgEditor
|
|
2219
2384
|
if _data.length > 0
|
2220
2385
|
_b = TkButton.new(@text,
|
2221
2386
|
'command'=>proc{_b.destroy},
|
2222
|
-
'image'=>
|
2387
|
+
'image'=> Arcadia.image_res(_data),
|
2223
2388
|
'relief'=>'groove')
|
2224
2389
|
TkTextWindow.new(@text, _r[0][1], 'window'=> _b)
|
2225
2390
|
end
|
@@ -2687,7 +2852,10 @@ class AgEditor
|
|
2687
2852
|
def reset_modify(_reset_tab=true)
|
2688
2853
|
@controller.change_tab_reset_modify(@page_frame) if _reset_tab
|
2689
2854
|
@set_mod = false
|
2690
|
-
@
|
2855
|
+
@file_info['mtime'] = File.mtime(@file) if @file
|
2856
|
+
#@file_last_access_time = File.mtime(@file) if @file
|
2857
|
+
@controller.refresh_status
|
2858
|
+
update_toolbar
|
2691
2859
|
end
|
2692
2860
|
|
2693
2861
|
def pos_to_index(_txt, _pos)
|
@@ -2776,7 +2944,7 @@ class AgEditor
|
|
2776
2944
|
delta = w_ry_e - w_ry_b
|
2777
2945
|
if delta > 1
|
2778
2946
|
_tag = "wrap_case_#{j}"
|
2779
|
-
@text_line_num.tag_configure(_tag, 'spacing3'=>delta)
|
2947
|
+
@text_line_num.tag_configure(_tag, 'spacing3'=>delta + @text_line_spacing3)
|
2780
2948
|
_tags << _tag
|
2781
2949
|
end
|
2782
2950
|
end
|
@@ -2803,25 +2971,24 @@ class AgEditor
|
|
2803
2971
|
end
|
2804
2972
|
_line_end=row('end')
|
2805
2973
|
line_end_chars = _line_end.to_s.length
|
2806
|
-
if @last_line_end_chars != line_end_chars
|
2807
|
-
if @line_num_rx_e.nil?
|
2974
|
+
if @last_line_end_chars != line_end_chars || @need_recalc
|
2975
|
+
if @line_num_rx_e.nil? || @need_recalc
|
2808
2976
|
@line_num_rx_e, @line_num_ry_e, @line_num_width_e, @line_num_heigth_e = @text_line_num.bbox("0.1 lineend - 1 chars");
|
2809
|
-
if @line_num_rx_e.nil?
|
2810
|
-
@line_num_rx_e = 0
|
2811
|
-
end
|
2812
2977
|
if @line_num_width_e.nil?
|
2813
|
-
|
2814
|
-
|
2815
|
-
|
2816
|
-
|
2978
|
+
@line_num_width_e = @font.split()[-1].strip.to_i
|
2979
|
+
@need_recalc = true
|
2980
|
+
# linfo_x, linfo_y, linfo_w, linfo_h, linfo_b = @text_line_num.dlineinfo('0.1')
|
2981
|
+
# if linfo_w
|
2982
|
+
# @line_num_width_e = linfo_w.to_f/(line_end_chars+1.5)
|
2983
|
+
# end
|
2984
|
+
else
|
2985
|
+
@need_recalc = false
|
2817
2986
|
end
|
2818
2987
|
end
|
2819
2988
|
|
2820
2989
|
|
2821
|
-
if @
|
2822
|
-
actual_width = @line_num_rx_e + @line_num_width_e
|
2990
|
+
if @line_num_width_e && line_end_chars >0
|
2823
2991
|
need_width = (line_end_chars+1)*@line_num_width_e
|
2824
|
-
delta = actual_width - need_width
|
2825
2992
|
@fm1.resize_left(need_width)
|
2826
2993
|
@last_line_end_chars = line_end_chars
|
2827
2994
|
else
|
@@ -2986,21 +3153,27 @@ class AgEditor
|
|
2986
3153
|
end
|
2987
3154
|
end
|
2988
3155
|
|
3156
|
+
def update_toolbar
|
3157
|
+
save = Arcadia.toolbar_item('save')
|
3158
|
+
save.enable=@set_mod if save
|
3159
|
+
end
|
3160
|
+
|
2989
3161
|
def check_modify
|
2990
3162
|
return if @loading
|
2991
|
-
if modified?
|
3163
|
+
if modified?
|
2992
3164
|
set_modify if !@set_mod
|
2993
3165
|
else
|
2994
3166
|
reset_modify
|
2995
3167
|
end
|
3168
|
+
update_toolbar
|
2996
3169
|
end
|
2997
3170
|
|
2998
3171
|
def modified_by_others?
|
2999
3172
|
ret = false
|
3000
|
-
if @
|
3173
|
+
if @file_info['mtime'] && @file
|
3001
3174
|
if File.exist?(@file)
|
3002
3175
|
ftime = File.mtime(@file)
|
3003
|
-
ret = @
|
3176
|
+
ret = @file_info['mtime'] != ftime
|
3004
3177
|
else
|
3005
3178
|
ret = true
|
3006
3179
|
end
|
@@ -3011,9 +3184,9 @@ class AgEditor
|
|
3011
3184
|
def reset_file_last_access_time
|
3012
3185
|
if @file
|
3013
3186
|
if File.exist?(@file)
|
3014
|
-
@
|
3187
|
+
@file_info['mtime'] = File.mtime(@file)
|
3015
3188
|
else
|
3016
|
-
@
|
3189
|
+
@file_info['mtime'] = nil
|
3017
3190
|
@file = nil
|
3018
3191
|
end
|
3019
3192
|
end
|
@@ -3022,9 +3195,9 @@ class AgEditor
|
|
3022
3195
|
def check_file_last_access_time
|
3023
3196
|
if @file
|
3024
3197
|
file_exist = File.exist?(@file)
|
3025
|
-
if @
|
3198
|
+
if @file_info['mtime'] && file_exist
|
3026
3199
|
ftime = File.mtime(@file)
|
3027
|
-
if @
|
3200
|
+
if @file_info['mtime'] != ftime
|
3028
3201
|
msg = 'File "'+@file+'" is changed! Reload?'
|
3029
3202
|
ans = Tk.messageBox('icon' => 'error', 'type' => 'yesno',
|
3030
3203
|
'title' => '(Arcadia) Libs', 'parent' => @text,
|
@@ -3032,7 +3205,7 @@ class AgEditor
|
|
3032
3205
|
if ans == 'yes'
|
3033
3206
|
reload
|
3034
3207
|
else
|
3035
|
-
@
|
3208
|
+
@file_info['mtime'] = ftime
|
3036
3209
|
end
|
3037
3210
|
end
|
3038
3211
|
elsif !file_exist
|
@@ -3058,11 +3231,33 @@ class AgEditor
|
|
3058
3231
|
@text.see(pos_index)
|
3059
3232
|
@text.set_insert(pos_index)
|
3060
3233
|
end
|
3234
|
+
|
3235
|
+
def has_ctags?
|
3236
|
+
@controller.has_ctags
|
3237
|
+
end
|
3238
|
+
|
3239
|
+
def ctags_string
|
3240
|
+
@controller.ctags_string
|
3241
|
+
end
|
3061
3242
|
|
3062
|
-
def
|
3063
|
-
|
3064
|
-
|
3065
|
-
|
3243
|
+
def initialize_editing(_ext=nil, _lang=nil)
|
3244
|
+
if _lang
|
3245
|
+
@is_ruby = _lang=='ruby'
|
3246
|
+
else
|
3247
|
+
@is_ruby = _ext=='rb' || _ext=='rbw'
|
3248
|
+
end
|
3249
|
+
@classbrowsing = @is_ruby || has_ctags?
|
3250
|
+
@codeinsight = @is_ruby
|
3251
|
+
if _lang
|
3252
|
+
@lang_hash = @controller.language_hash_by_lang(_lang)
|
3253
|
+
else
|
3254
|
+
@lang_hash = @controller.language_hash_by_ext(_ext)
|
3255
|
+
end
|
3256
|
+
if @lang_hash
|
3257
|
+
@lang = @lang_hash['language']
|
3258
|
+
else
|
3259
|
+
@lang = 'ruby'
|
3260
|
+
end
|
3066
3261
|
# @highlight_scanner = @controller.highlight_scanner(_ext)
|
3067
3262
|
# if !_ext.nil? && @is_ruby
|
3068
3263
|
# @fm = AGTkVSplittedFrames.new(@page_frame,_w1)
|
@@ -3084,7 +3279,7 @@ class AgEditor
|
|
3084
3279
|
if @outline
|
3085
3280
|
@outline.show
|
3086
3281
|
else
|
3087
|
-
@outline=AgEditorOutline.new(self
|
3282
|
+
@outline=AgEditorOutline.new(self, @controller.frame(1).hinner_frame, @controller.outline_bar, @lang)
|
3088
3283
|
refresh
|
3089
3284
|
end
|
3090
3285
|
end
|
@@ -3105,7 +3300,6 @@ class AgEditor
|
|
3105
3300
|
begin
|
3106
3301
|
@file = _filename
|
3107
3302
|
if _filename
|
3108
|
-
#init_editing(file_extension(_filename))
|
3109
3303
|
File::open(_filename,'rb'){ |file|
|
3110
3304
|
@text.insert('end',file.readlines.collect!{| line | line.chomp}.join("\n"))
|
3111
3305
|
#@text.insert('end',file.read)
|
@@ -3207,19 +3401,44 @@ class ReHighlightScanner < HighlightScanner
|
|
3207
3401
|
end
|
3208
3402
|
|
3209
3403
|
|
3210
|
-
def find_tag(_tag, _row,
|
3404
|
+
def find_tag(_tag, _row, _line_txt)
|
3405
|
+
_txt = _line_txt
|
3211
3406
|
to_ret = []
|
3212
3407
|
_re = @h_re[_tag]
|
3213
3408
|
m = _re.match(_txt)
|
3214
3409
|
_end = 0
|
3410
|
+
# index = _line_txt.index("oldaccel1")
|
3411
|
+
# stampa = index && index >0
|
3412
|
+
# stampa=true
|
3413
|
+
# p "_line_txt=#{_line_txt}" if stampa
|
3414
|
+
# p "_tag=#{_tag}" if stampa
|
3215
3415
|
while m && (_txt=m.post_match)
|
3216
3416
|
if !defined?(_old_txt) || _txt != _old_txt
|
3217
|
-
|
3218
|
-
|
3219
|
-
|
3220
|
-
|
3221
|
-
|
3222
|
-
|
3417
|
+
b1 = _line_txt[m.begin(0)+_end-1..m.begin(0)+_end-1]
|
3418
|
+
b2 = _line_txt[m.begin(0)+_end..m.begin(0)+_end]
|
3419
|
+
e1 = _line_txt[m.end(0)+_end..m.end(0)+_end]
|
3420
|
+
e2 = _line_txt[m.end(0)-1+_end..m.end(0)+_end-1]
|
3421
|
+
achar = ["\s","\t","\n",nil,')',']','}','',':','=',">","<"]
|
3422
|
+
|
3423
|
+
ok = (achar.include?(b1)||achar.include?(b2)) && (achar.include?(e1)||achar.include?(e2))
|
3424
|
+
ok = ok || _line_txt[m.begin(0)+_end..m.end(0)+_end-1].strip.length==1
|
3425
|
+
|
3426
|
+
|
3427
|
+
|
3428
|
+
# p "" if stampa
|
3429
|
+
# p "_line_txt[m.begin(0)+_end..m.begin(0)+_end]=#{_line_txt[m.begin(0)+_end..m.begin(0)+_end]}" if stampa
|
3430
|
+
# p "_line_txt[m.end(0)+_end..m.end(0)+_end]=#{_line_txt[m.end(0)+_end..m.end(0)+_end]}" if stampa
|
3431
|
+
# p "_line_txt[m.begin(0)+_end..m.end(0)+_end]=#{_line_txt[m.begin(0)+_end..m.end(0)+_end]}" if stampa
|
3432
|
+
# p "ok=#{ok}" if stampa
|
3433
|
+
|
3434
|
+
if ok
|
3435
|
+
_old_txt = _txt
|
3436
|
+
_ibegin = _row.to_s+'.'+(m.begin(0)+_end).to_s
|
3437
|
+
_end = m.end(0) + _end
|
3438
|
+
_iend = _row.to_s+'.'+(_end.to_s)
|
3439
|
+
to_ret << [_ibegin, _iend]
|
3440
|
+
end
|
3441
|
+
if @op_only_first.include?(_tag) && ok
|
3223
3442
|
m = nil
|
3224
3443
|
else
|
3225
3444
|
m = _re.match(_txt)
|
@@ -3331,13 +3550,22 @@ class AgMultiEditor < ArcadiaExt
|
|
3331
3550
|
# attr_reader :breakpoints
|
3332
3551
|
attr_reader :splitted_frame
|
3333
3552
|
attr_reader :outline_bar
|
3553
|
+
attr_reader :has_ctags, :ctags_string
|
3334
3554
|
def on_before_build(_event)
|
3555
|
+
Arcadia.is_windows? ? @ctags_string="lib/ctags.exe" : @ctags_string='ctags'
|
3556
|
+
@has_ctags = !Arcadia.which(@ctags_string).nil?
|
3557
|
+
if !@has_ctags
|
3558
|
+
msg = "\"ctags\" package is required by class browsing, without it only ruby language is supported!"
|
3559
|
+
ArcadiaProblemEvent.new(self, "type"=>ArcadiaProblemEvent::DEPENDENCE_MISSING_TYPE,"title"=>"Ctags missing!", "detail"=>msg).go!
|
3560
|
+
end
|
3335
3561
|
@breakpoints =Array.new
|
3336
3562
|
@tabs_file =Hash.new
|
3337
3563
|
@tabs_editor =Hash.new
|
3338
3564
|
@raw_buffer_name = Hash.new
|
3339
3565
|
@editor_seq=-1
|
3340
3566
|
@editors =Array.new
|
3567
|
+
initialize_status
|
3568
|
+
#@statusbar_item.pack('side'=>'left','anchor'=>'e','expand'=>'yes')
|
3341
3569
|
Arcadia.attach_listener(self, BufferEvent)
|
3342
3570
|
Arcadia.attach_listener(self, DebugEvent)
|
3343
3571
|
# Arcadia.attach_listener(self, RunRubyFileEvent)
|
@@ -3346,7 +3574,6 @@ class AgMultiEditor < ArcadiaExt
|
|
3346
3574
|
Arcadia.attach_listener(self, FocusEvent)
|
3347
3575
|
end
|
3348
3576
|
|
3349
|
-
|
3350
3577
|
# def on_before_run_ruby_file(_event)
|
3351
3578
|
# _filename = _event.file
|
3352
3579
|
# if _filename.nil?
|
@@ -3423,6 +3650,8 @@ class AgMultiEditor < ArcadiaExt
|
|
3423
3650
|
if _event.cmd.nil?
|
3424
3651
|
if _event.runner_name
|
3425
3652
|
runner = Arcadia.runner(_event.runner_name)
|
3653
|
+
elsif _event.lang && Arcadia.runner_for_lang(_event.lang)
|
3654
|
+
runner = Arcadia.runner_for_lang(_event.lang)
|
3426
3655
|
else
|
3427
3656
|
runner = Arcadia.runner_for_file(_event.file)
|
3428
3657
|
end
|
@@ -3432,6 +3661,9 @@ class AgMultiEditor < ArcadiaExt
|
|
3432
3661
|
_event.cmd = _event.file
|
3433
3662
|
end
|
3434
3663
|
end
|
3664
|
+
if _event.file && _event.cmd.include?('<<RUBY>>')
|
3665
|
+
_event.cmd = _event.cmd.gsub('<<RUBY>>',Arcadia.ruby)
|
3666
|
+
end
|
3435
3667
|
if _event.file && _event.cmd.include?('<<FILE>>')
|
3436
3668
|
_event.cmd = _event.cmd.gsub('<<FILE>>',_event.file)
|
3437
3669
|
end
|
@@ -3458,16 +3690,17 @@ class AgMultiEditor < ArcadiaExt
|
|
3458
3690
|
|
3459
3691
|
def on_build(_event)
|
3460
3692
|
@main_frame = AgMultiEditorView.new(self.frame.hinner_frame)
|
3461
|
-
@outline_bar = AgEditorOutlineToolbar.new(self
|
3693
|
+
@outline_bar = AgEditorOutlineToolbar.new(self)
|
3462
3694
|
create_find # this is the "find within current file" one
|
3463
3695
|
pop_up_menu
|
3464
|
-
@buffer_menu = frame.root.add_menu_button(self.name, 'files', DOCUMENT_COMBO_GIF, 'right', {'relief'=>:raised, 'borderwidth'=>1}).cget('menu')
|
3465
|
-
frame.root.add_sep(self.name, 1)
|
3466
3696
|
frame.root.add_button(
|
3467
3697
|
self.name,
|
3468
3698
|
'close current',
|
3469
3699
|
proc{Arcadia.process_event(CloseCurrentTabEvent.new(self))},
|
3470
3700
|
CLOSE_DOCUMENT_GIF)
|
3701
|
+
frame.root.add_sep(self.name, 1)
|
3702
|
+
@buffer_menu = frame.root.add_menu_button(self.name, 'files', DOCUMENT_COMBO_GIF, 'right', {'relief'=>:raised, 'borderwidth'=>1}).cget('menu')
|
3703
|
+
load_languages_hash
|
3471
3704
|
end
|
3472
3705
|
|
3473
3706
|
def add_buffer_menu_item(_filename, is_file=true)
|
@@ -3479,7 +3712,7 @@ class AgMultiEditor < ArcadiaExt
|
|
3479
3712
|
if type != 'separator'
|
3480
3713
|
#label = @buffer_menu.entrycget(j,'label')
|
3481
3714
|
#if label > _filename
|
3482
|
-
value = @buffer_menu.entrycget(j,'value')
|
3715
|
+
value = @buffer_menu.entrycget(j,'value').to_s
|
3483
3716
|
if value > _filename
|
3484
3717
|
index=j
|
3485
3718
|
break
|
@@ -3487,7 +3720,7 @@ class AgMultiEditor < ArcadiaExt
|
|
3487
3720
|
end
|
3488
3721
|
}
|
3489
3722
|
end
|
3490
|
-
|
3723
|
+
|
3491
3724
|
@buffer_menu.insert(index,:radio,
|
3492
3725
|
:label=>File.basename(_filename),
|
3493
3726
|
# :variable=>TkVariable.new(_filename),
|
@@ -3523,8 +3756,9 @@ class AgMultiEditor < ArcadiaExt
|
|
3523
3756
|
@buffer_menu.delete(to_del) if to_del != -1
|
3524
3757
|
end
|
3525
3758
|
|
3526
|
-
def
|
3759
|
+
def on_initialize(_event)
|
3527
3760
|
self.open_last_files
|
3761
|
+
reset_status if @main_frame.enb.pages.empty?
|
3528
3762
|
end
|
3529
3763
|
|
3530
3764
|
def on_exit_query(_event)
|
@@ -3558,7 +3792,7 @@ class AgMultiEditor < ArcadiaExt
|
|
3558
3792
|
return nil if _ext.nil?
|
3559
3793
|
scanner = nil
|
3560
3794
|
@highlight_scanner_hash = Hash.new if !defined?(@highlight_scanner_hash)
|
3561
|
-
lh =
|
3795
|
+
lh = language_hash_by_ext(_ext)
|
3562
3796
|
if lh && lh['language'] && lh['scanner']
|
3563
3797
|
if @highlight_scanner_hash[lh['language']].nil?
|
3564
3798
|
case lh['scanner']
|
@@ -3573,40 +3807,78 @@ class AgMultiEditor < ArcadiaExt
|
|
3573
3807
|
scanner
|
3574
3808
|
end
|
3575
3809
|
|
3576
|
-
def
|
3577
|
-
|
3578
|
-
|
3579
|
-
|
3580
|
-
|
3581
|
-
|
3582
|
-
|
3583
|
-
|
3584
|
-
|
3585
|
-
|
3586
|
-
|
3587
|
-
if
|
3588
|
-
|
3589
|
-
|
3590
|
-
@@langs_hash[b['bind']]=properties_file2hash(lang_file_bind)
|
3591
|
-
@@langs_hash[_ext]=@@langs_hash[b['bind']]
|
3592
|
-
end
|
3593
|
-
else
|
3594
|
-
@@langs_hash[_ext]=@@langs_hash[b['bind']]
|
3810
|
+
def load_languages_hash
|
3811
|
+
@langs_hash_by_ext = Hash.new
|
3812
|
+
@langs_hash_by_lang = Hash.new
|
3813
|
+
lang_files_dir = "#{File.dirname(__FILE__)}/langs"
|
3814
|
+
files = Dir["#{lang_files_dir}/*"].sort
|
3815
|
+
files.each{|lang_file|
|
3816
|
+
af = lang_file.split('.')
|
3817
|
+
if af[-1] == 'lang'
|
3818
|
+
lang_props = properties_file2hash(lang_file)
|
3819
|
+
if lang_props && lang_props['@include'] != nil
|
3820
|
+
include_file = "#{lang_files_dir}/#{lang_props['@include']}"
|
3821
|
+
if File.exist?(include_file)
|
3822
|
+
include_hash = properties_file2hash(include_file)
|
3823
|
+
lang_props = include_hash.merge(lang_props)
|
3595
3824
|
end
|
3596
|
-
end
|
3825
|
+
end
|
3826
|
+
self.resolve_properties_link(lang_props, Arcadia.instance['conf']) if lang_props
|
3827
|
+
lang = lang_props['language']
|
3828
|
+
lang_exts = lang_props['exts'].split(',').collect{|x| x.strip} if lang_props['exts']
|
3829
|
+
@langs_hash_by_lang[lang] = lang_props if lang
|
3830
|
+
lang_exts.each{|ext|
|
3831
|
+
@langs_hash_by_ext[ext] = lang_props
|
3832
|
+
} if lang_exts
|
3833
|
+
|
3834
|
+
|
3835
|
+
|
3597
3836
|
end
|
3598
|
-
|
3599
|
-
include_file = "#{File.dirname(__FILE__)}/langs/#{@@langs_hash[_ext]['@include']}"
|
3600
|
-
if File.exist?(include_file)
|
3601
|
-
include_hash = properties_file2hash(include_file)
|
3602
|
-
@@langs_hash[_ext] = include_hash.merge(@@langs_hash[_ext])
|
3603
|
-
end
|
3604
|
-
end
|
3605
|
-
self.resolve_properties_link(@@langs_hash[_ext], Arcadia.instance['conf']) if @@langs_hash[_ext]
|
3606
|
-
end
|
3607
|
-
@@langs_hash[_ext]
|
3837
|
+
}
|
3608
3838
|
end
|
3609
3839
|
|
3840
|
+
def language_hash_by_ext(_ext=nil)
|
3841
|
+
@langs_hash_by_ext[_ext]
|
3842
|
+
end
|
3843
|
+
|
3844
|
+
def language_hash_by_lang(_lang=nil)
|
3845
|
+
@langs_hash_by_lang[_lang]
|
3846
|
+
end
|
3847
|
+
|
3848
|
+
# def languages_hash(_ext=nil)
|
3849
|
+
# @langs_hash = Hash.new if !defined?(@langs_hash)
|
3850
|
+
# return nil if _ext.nil?
|
3851
|
+
# if @langs_hash[_ext].nil?
|
3852
|
+
# #_ext='' if _ext.nil?
|
3853
|
+
# lang_file = File.dirname(__FILE__)+'/langs/'+_ext+'.lang'
|
3854
|
+
# if File.exist?(lang_file)
|
3855
|
+
# @langs_hash[_ext] = properties_file2hash(lang_file)
|
3856
|
+
# elsif File.exist?(lang_file+'.bind')
|
3857
|
+
# b= properties_file2hash(lang_file+'.bind')
|
3858
|
+
# if b
|
3859
|
+
# if @langs_hash[b['bind']].nil?
|
3860
|
+
# lang_file_bind = File.dirname(__FILE__)+'/langs/'+b['bind']+".lang"
|
3861
|
+
# if File.exist?(lang_file_bind)
|
3862
|
+
# @langs_hash[b['bind']]=properties_file2hash(lang_file_bind)
|
3863
|
+
# @langs_hash[_ext]=@langs_hash[b['bind']]
|
3864
|
+
# end
|
3865
|
+
# else
|
3866
|
+
# @langs_hash[_ext]=@langs_hash[b['bind']]
|
3867
|
+
# end
|
3868
|
+
# end
|
3869
|
+
# end
|
3870
|
+
# if @langs_hash[_ext] && @langs_hash[_ext]['@include'] != nil
|
3871
|
+
# include_file = "#{File.dirname(__FILE__)}/langs/#{@langs_hash[_ext]['@include']}"
|
3872
|
+
# if File.exist?(include_file)
|
3873
|
+
# include_hash = properties_file2hash(include_file)
|
3874
|
+
# @langs_hash[_ext] = include_hash.merge(@langs_hash[_ext])
|
3875
|
+
# end
|
3876
|
+
# end
|
3877
|
+
# self.resolve_properties_link(@langs_hash[_ext], Arcadia.instance['conf']) if @langs_hash[_ext]
|
3878
|
+
# end
|
3879
|
+
# @langs_hash[_ext]
|
3880
|
+
# end
|
3881
|
+
|
3610
3882
|
|
3611
3883
|
def pop_up_menu
|
3612
3884
|
@pop_up = TkMenu.new(
|
@@ -3792,7 +4064,7 @@ class AgMultiEditor < ArcadiaExt
|
|
3792
4064
|
#Arcadia.new_error_msg(self, "on_buffer #{_event.class}")
|
3793
4065
|
case _event
|
3794
4066
|
when NewBufferEvent
|
3795
|
-
self.open_buffer
|
4067
|
+
self.open_buffer(nil, nil, nil, _event.lang)
|
3796
4068
|
when OpenBufferEvent
|
3797
4069
|
if _event.file
|
3798
4070
|
if _event.row
|
@@ -3811,7 +4083,20 @@ class AgMultiEditor < ArcadiaExt
|
|
3811
4083
|
@last_transient_file = nil
|
3812
4084
|
end
|
3813
4085
|
end
|
3814
|
-
|
4086
|
+
if _event.select_index.nil?
|
4087
|
+
select_index = true
|
4088
|
+
else
|
4089
|
+
select_index = _event.select_index
|
4090
|
+
end
|
4091
|
+
if _event.file == '*CURR'
|
4092
|
+
er = raised
|
4093
|
+
if er && _index != nil
|
4094
|
+
er.text_see(_index)
|
4095
|
+
er.mark_selected(_index) if select_index
|
4096
|
+
end
|
4097
|
+
else
|
4098
|
+
self.open_file(_event.file, _index, select_index)
|
4099
|
+
end
|
3815
4100
|
elsif _event.text
|
3816
4101
|
if _event.title
|
3817
4102
|
_tab_name = self.tab_name(_event.title)
|
@@ -3827,7 +4112,7 @@ class AgMultiEditor < ArcadiaExt
|
|
3827
4112
|
self.open_file(_event.file)
|
3828
4113
|
end
|
3829
4114
|
when CloseBufferEvent
|
3830
|
-
if _event.file
|
4115
|
+
if _event.file
|
3831
4116
|
self.close_file(_event.file)
|
3832
4117
|
end
|
3833
4118
|
when SaveAsBufferEvent
|
@@ -3934,8 +4219,13 @@ class AgMultiEditor < ArcadiaExt
|
|
3934
4219
|
def clear_temp_files
|
3935
4220
|
files = Dir[File.join(Arcadia.instance.local_dir,"*")]
|
3936
4221
|
files.each{|f|
|
3937
|
-
if File.stat(f).file? && f[
|
4222
|
+
if File.stat(f).file? && File.basename(f)[0..1] == '~~'
|
3938
4223
|
File.delete(f)
|
4224
|
+
elsif File.stat(f).directory? && File.basename(f)[0..1] == '~~'
|
4225
|
+
Dir[File.join(f,"*")].each{|file|
|
4226
|
+
File.delete(file)
|
4227
|
+
}
|
4228
|
+
Dir.delete(f)
|
3939
4229
|
end
|
3940
4230
|
}
|
3941
4231
|
end
|
@@ -4249,13 +4539,49 @@ class AgMultiEditor < ArcadiaExt
|
|
4249
4539
|
else
|
4250
4540
|
_new_caption = _title
|
4251
4541
|
end
|
4542
|
+
_lang = _e.lang
|
4543
|
+
_e.update_toolbar
|
4252
4544
|
end
|
4253
4545
|
change_frame_caption(_new_caption)
|
4546
|
+
refresh_status
|
4254
4547
|
_title = @tabs_file[_name] != nil ? File.basename(@tabs_file[_name]) :_name
|
4255
|
-
Arcadia.broadcast_event(BufferRaisedEvent.new(self,'title'=>_title, 'file'=>@tabs_file[_name]))
|
4548
|
+
Arcadia.broadcast_event(BufferRaisedEvent.new(self, 'title'=>_title, 'file'=>@tabs_file[_name], 'lang'=>_lang ))
|
4549
|
+
Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>_e.text)) if _e
|
4550
|
+
|
4256
4551
|
#EditorContract.instance.buffer_raised(self, 'title'=>_title, 'file'=>@tabs_file[_name])
|
4257
4552
|
end
|
4258
4553
|
|
4554
|
+
def initialize_status
|
4555
|
+
@statusbar_items = Hash.new
|
4556
|
+
@statusbar_items['file_size'] = Arcadia.new_statusbar_item("File size")
|
4557
|
+
@statusbar_items['file_mtime'] = Arcadia.new_statusbar_item("File modification time")
|
4558
|
+
@statusbar_items['file_name'] = Arcadia.new_statusbar_item("File name")
|
4559
|
+
# @statusbar_item = Arcadia.new_statusbar_item
|
4560
|
+
# @statusbar_item.relief('flat')
|
4561
|
+
end
|
4562
|
+
|
4563
|
+
def reset_status
|
4564
|
+
@statusbar_items['file_name'].text = '?'
|
4565
|
+
@statusbar_items['file_mtime'].text = '?'
|
4566
|
+
@statusbar_items['file_size'].text = '?'
|
4567
|
+
end
|
4568
|
+
|
4569
|
+
def refresh_status
|
4570
|
+
#@statusbar_item.text("#{_title} | #{_e.file_info['mtime'].strftime("%d/%m/%Y %H:%m:%S") if _e}")
|
4571
|
+
if raised && raised.file
|
4572
|
+
size = File.size(raised.file)
|
4573
|
+
if size > 1024
|
4574
|
+
size_str = "#{size/1024} kb"
|
4575
|
+
else
|
4576
|
+
size_str = "#{size} b"
|
4577
|
+
end
|
4578
|
+
@statusbar_items['file_name'].text(File.basename(raised.file))
|
4579
|
+
@statusbar_items['file_mtime'].text = raised.file_info['mtime'].localtime
|
4580
|
+
@statusbar_items['file_size'].text = size_str
|
4581
|
+
#@statusbar_item.text("#{File.basename(raised.file)} | #{raised.file_info['mtime'].localtime} | #{size_str}")
|
4582
|
+
end
|
4583
|
+
end
|
4584
|
+
|
4259
4585
|
def editor_of(_filename)
|
4260
4586
|
_ret = nil
|
4261
4587
|
@editors.each{|e|
|
@@ -4326,9 +4652,10 @@ class AgMultiEditor < ArcadiaExt
|
|
4326
4652
|
begin
|
4327
4653
|
@tabs_editor[_tab_name].load_file(_filename)
|
4328
4654
|
rescue RuntimeError => e
|
4329
|
-
Arcadia.dialog(self,'type'=>'ok', 'level'=>'error','title' => 'RuntimeError', 'msg'=>"RuntimeError : #{e.message}")
|
4655
|
+
#Arcadia.dialog(self,'type'=>'ok', 'level'=>'error','title' => 'RuntimeError', 'msg'=>"RuntimeError : #{e.message}")
|
4330
4656
|
#p "RuntimeError : #{e.message}"
|
4331
4657
|
close_editor(@tabs_editor[_tab_name], true)
|
4658
|
+
Arcadia.runtime_error(e)
|
4332
4659
|
end
|
4333
4660
|
end
|
4334
4661
|
editor = @tabs_editor[_tab_name]
|
@@ -4341,7 +4668,7 @@ class AgMultiEditor < ArcadiaExt
|
|
4341
4668
|
end
|
4342
4669
|
|
4343
4670
|
|
4344
|
-
def open_buffer(_buffer_name = nil, _title = nil, _filename=nil)
|
4671
|
+
def open_buffer(_buffer_name = nil, _title = nil, _filename=nil, _lang=nil)
|
4345
4672
|
_index = @main_frame.enb.index(resolve_tab_name(_buffer_name))
|
4346
4673
|
if _buffer_name == nil
|
4347
4674
|
_title_new = '*new'
|
@@ -4364,10 +4691,19 @@ class AgMultiEditor < ArcadiaExt
|
|
4364
4691
|
end
|
4365
4692
|
if _title == nil
|
4366
4693
|
_title = _title_new
|
4694
|
+
if _lang
|
4695
|
+
_image = Arcadia.lang_icon(_lang)
|
4696
|
+
else
|
4697
|
+
_image = Arcadia.lang_icon('Ruby')
|
4698
|
+
end
|
4699
|
+
_ext = language_hash_by_lang(_lang)
|
4700
|
+
else
|
4701
|
+
_image = Arcadia.file_icon(_title)
|
4367
4702
|
end
|
4368
4703
|
_tab = @main_frame.enb.insert('end', _buffer_name ,
|
4369
4704
|
'text'=> _title,
|
4370
|
-
'image'=>
|
4705
|
+
'image'=> _image,
|
4706
|
+
# 'image'=> Arcadia.file_icon(lang_sign),
|
4371
4707
|
'background'=> Arcadia.style("tabpanel")["background"],
|
4372
4708
|
'foreground'=> Arcadia.style("tabpanel")["foreground"],
|
4373
4709
|
'raisecmd'=>proc{do_buffer_raise(_buffer_name, _title)}
|
@@ -4384,15 +4720,21 @@ class AgMultiEditor < ArcadiaExt
|
|
4384
4720
|
@editors[@editor_seq]=_e
|
4385
4721
|
ext = Arcadia.file_extension(_title)
|
4386
4722
|
ext='rb' if ext.nil?
|
4387
|
-
_e.
|
4723
|
+
_e.initialize_editing(ext, _lang)
|
4388
4724
|
_e.text.set_focus
|
4389
4725
|
#@tabs_file[_buffer_name]= nil
|
4390
4726
|
@tabs_editor[_buffer_name]=_e
|
4391
4727
|
end
|
4392
|
-
|
4393
|
-
@
|
4394
|
-
|
4395
|
-
|
4728
|
+
begin
|
4729
|
+
if raised != @tabs_editor[resolve_tab_name(_buffer_name)]
|
4730
|
+
@main_frame.enb.move(resolve_tab_name(_buffer_name), 0)
|
4731
|
+
@main_frame.enb.raise(resolve_tab_name(_buffer_name)) if frame_visible?
|
4732
|
+
@main_frame.enb.see(resolve_tab_name(_buffer_name))
|
4733
|
+
else
|
4734
|
+
@main_frame.enb.move(resolve_tab_name(_buffer_name), 0)
|
4735
|
+
end
|
4736
|
+
rescue Exception => e
|
4737
|
+
Arcadia.runtime_error(e)
|
4396
4738
|
end
|
4397
4739
|
return _tab
|
4398
4740
|
end
|
@@ -4461,6 +4803,7 @@ class AgMultiEditor < ArcadiaExt
|
|
4461
4803
|
'msg'=>message)
|
4462
4804
|
if r=="yes"
|
4463
4805
|
_editor.reset_file_last_access_time
|
4806
|
+
refresh_status
|
4464
4807
|
ret = !_editor.modified_by_others?
|
4465
4808
|
else
|
4466
4809
|
ret = false
|
@@ -4472,8 +4815,12 @@ class AgMultiEditor < ArcadiaExt
|
|
4472
4815
|
|
4473
4816
|
def close_editor(_editor, _force=false)
|
4474
4817
|
if _force || can_close_editor?(_editor)
|
4818
|
+
file = _editor.file
|
4819
|
+
index = _editor.text.index("@0,0")
|
4820
|
+
r,c = index.split('.')
|
4475
4821
|
_editor.destroy_outline
|
4476
4822
|
close_buffer(_editor.page_frame)
|
4823
|
+
BufferClosedEvent.new(self,'file'=>file,'row'=>r.to_i, 'col'=>c.to_i).shot!
|
4477
4824
|
else
|
4478
4825
|
return
|
4479
4826
|
end
|
@@ -4496,6 +4843,7 @@ class AgMultiEditor < ArcadiaExt
|
|
4496
4843
|
@main_frame.enb.raise(@main_frame.enb.pages[_index-1]) if TkWinfo.mapped?(@main_frame.enb)
|
4497
4844
|
else
|
4498
4845
|
frame.root.top_text('') if TkWinfo.mapped?(frame.hinner_frame)
|
4846
|
+
reset_status
|
4499
4847
|
end
|
4500
4848
|
end
|
4501
4849
|
|
@@ -4558,7 +4906,9 @@ class Findview < TkFloatTitledFrame
|
|
4558
4906
|
}
|
4559
4907
|
@e_what_entry = TkWinfo.children(@e_what)[0]
|
4560
4908
|
|
4561
|
-
|
4909
|
+
#@e_what_entry.bind_append("1",proc{Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@e_what_entry))})
|
4910
|
+
@e_what_entry.extend(TkInputThrow)
|
4911
|
+
|
4562
4912
|
|
4563
4913
|
y0 = y0 + d
|
4564
4914
|
TkLabel.new(self.frame, Arcadia.style('label')){
|
@@ -4577,9 +4927,8 @@ class Findview < TkFloatTitledFrame
|
|
4577
4927
|
place('relwidth' => 1, 'width'=>-16,'x' => 8,'y' => y0,'height' => 19)
|
4578
4928
|
}
|
4579
4929
|
@e_with_entry = TkWinfo.children(@e_with)[0]
|
4580
|
-
|
4581
|
-
@e_with_entry.
|
4582
|
-
|
4930
|
+
#@e_with_entry.bind_append("1",proc{Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@e_with_entry))})
|
4931
|
+
@e_with_entry.extend(TkInputThrow)
|
4583
4932
|
y0 = y0 + d
|
4584
4933
|
@cb_reg = TkCheckButton.new(self.frame, Arcadia.style('checkbox')){|_cb_reg|
|
4585
4934
|
text 'Use Regular Expression'
|
@@ -4776,7 +5125,8 @@ class Finder < Findview
|
|
4776
5125
|
if (_editor != @editor_caller)
|
4777
5126
|
@last_index='insert'
|
4778
5127
|
@editor_caller = _editor
|
4779
|
-
_title =
|
5128
|
+
_title = '?'
|
5129
|
+
_title = File.basename(_editor.file) if _editor.file
|
4780
5130
|
title(_title)
|
4781
5131
|
@goto_line_dialog.title(_title) if @goto_line_dialog
|
4782
5132
|
end
|
@@ -4880,7 +5230,8 @@ class GoToLine < TkFloatTitledFrame
|
|
4880
5230
|
#relief 'ridge'
|
4881
5231
|
place('relwidth' => 1, 'width'=>-16,'x' => 8,'y' => y0,'height' => 19)
|
4882
5232
|
}
|
4883
|
-
|
5233
|
+
#@e_line.bind_append("1",proc{Arcadia.process_event(InputEnterEvent.new(self,'receiver'=>@e_line))})
|
5234
|
+
@e_line.extend(TkInputThrow)
|
4884
5235
|
|
4885
5236
|
y0 = y0 + d
|
4886
5237
|
y0 = y0 + d
|