redcar-javamateview 0.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. data/LICENSE +34 -0
  2. data/README +58 -0
  3. data/Rakefile +94 -0
  4. data/lib/javamateview.rb +41 -0
  5. data/lib/javamateview/example.rb +334 -0
  6. data/lib/javamateview/jar/java-mateview.jar +0 -0
  7. data/lib/javamateview/jcodings.jar +0 -0
  8. data/lib/javamateview/jdom.jar +0 -0
  9. data/lib/javamateview/joni.jar +0 -0
  10. data/spec/onig/match_spec.rb +50 -0
  11. data/spec/parsing/dynamic_parsing_spec.rb +172 -0
  12. data/spec/parsing/static_parsing_spec.rb +476 -0
  13. data/spec/spec_helper.rb +33 -0
  14. data/src/com/redcareditor/mate/Bundle.java +81 -0
  15. data/src/com/redcareditor/mate/DoublePattern.java +89 -0
  16. data/src/com/redcareditor/mate/Grammar.java +129 -0
  17. data/src/com/redcareditor/mate/IAnnotationAreaListener.java +7 -0
  18. data/src/com/redcareditor/mate/IGrammarListener.java +5 -0
  19. data/src/com/redcareditor/mate/IncludePattern.java +10 -0
  20. data/src/com/redcareditor/mate/LineNumberRulerColumn.java +922 -0
  21. data/src/com/redcareditor/mate/Marker.java +22 -0
  22. data/src/com/redcareditor/mate/MateText.java +697 -0
  23. data/src/com/redcareditor/mate/ParseThunk.java +71 -0
  24. data/src/com/redcareditor/mate/Parser.java +627 -0
  25. data/src/com/redcareditor/mate/ParserScheduler.java +237 -0
  26. data/src/com/redcareditor/mate/Pattern.java +152 -0
  27. data/src/com/redcareditor/mate/RangeSet.java +91 -0
  28. data/src/com/redcareditor/mate/Scanner.java +178 -0
  29. data/src/com/redcareditor/mate/Scope.java +534 -0
  30. data/src/com/redcareditor/mate/ScopeMatcher.java +162 -0
  31. data/src/com/redcareditor/mate/SharedTextColors.java +110 -0
  32. data/src/com/redcareditor/mate/SinglePattern.java +20 -0
  33. data/src/com/redcareditor/mate/WhitespaceCharacterPainter.java +395 -0
  34. data/src/com/redcareditor/mate/colouring/Colourer.java +16 -0
  35. data/src/com/redcareditor/mate/colouring/swt/MarginPaintListener.java +62 -0
  36. data/src/com/redcareditor/mate/colouring/swt/SwtColourer.java +501 -0
  37. data/src/com/redcareditor/mate/document/MateDocument.java +15 -0
  38. data/src/com/redcareditor/mate/document/MateTextFactory.java +9 -0
  39. data/src/com/redcareditor/mate/document/MateTextLocation.java +8 -0
  40. data/src/com/redcareditor/mate/document/MateTextLocationComparator.java +17 -0
  41. data/src/com/redcareditor/mate/document/MateTextRange.java +18 -0
  42. data/src/com/redcareditor/mate/document/swt/SwtMateDocument.java +143 -0
  43. data/src/com/redcareditor/mate/document/swt/SwtMateTextLocation.java +88 -0
  44. data/src/com/redcareditor/mate/document/swt/SwtMateTextRange.java +92 -0
  45. data/src/com/redcareditor/mate/document/swt/SwtScopePositionUpdater.java +90 -0
  46. data/src/com/redcareditor/mate/undo/MateTextUndoManager.java +11 -0
  47. data/src/com/redcareditor/mate/undo/swt/SwtMateTextUndoManager.java +166 -0
  48. data/src/com/redcareditor/onig/Match.java +212 -0
  49. data/src/com/redcareditor/onig/NullMatch.java +57 -0
  50. data/src/com/redcareditor/onig/NullRx.java +29 -0
  51. data/src/com/redcareditor/onig/Range.java +45 -0
  52. data/src/com/redcareditor/onig/Rx.java +167 -0
  53. data/src/com/redcareditor/plist/Dict.java +119 -0
  54. data/src/com/redcareditor/plist/PlistNode.java +52 -0
  55. data/src/com/redcareditor/plist/PlistPropertyLoader.java +44 -0
  56. data/src/com/redcareditor/theme/ScopeSelector.java +39 -0
  57. data/src/com/redcareditor/theme/Theme.java +122 -0
  58. data/src/com/redcareditor/theme/ThemeManager.java +41 -0
  59. data/src/com/redcareditor/theme/ThemeSetting.java +78 -0
  60. data/src/com/redcareditor/util/FileUtility.java +64 -0
  61. data/src/com/redcareditor/util/SingleLineFormatter.java +11 -0
  62. data/src/com/redcareditor/util/swt/ColourUtil.java +56 -0
  63. data/src/ruby/java-mateview.rb +68 -0
  64. data/test/com/redcareditor/mate/BundleTest.java +33 -0
  65. data/test/com/redcareditor/mate/EmptyRangeSetTest.java +27 -0
  66. data/test/com/redcareditor/mate/FilledRangeSetTest.java +82 -0
  67. data/test/com/redcareditor/mate/GrammarTest.java +158 -0
  68. data/test/com/redcareditor/mate/MateTextTest.java +35 -0
  69. data/test/com/redcareditor/mate/ScopeMatcherMatchingTest.java +55 -0
  70. data/test/com/redcareditor/mate/ScopeMatcherRankingTest.java +40 -0
  71. data/test/com/redcareditor/onig/RxTest.java +54 -0
  72. data/test/com/redcareditor/plist/DictTest.java +33 -0
  73. data/test/com/redcareditor/theme/RailsCastThemeTest.java +37 -0
  74. data/test/com/redcareditor/theme/ScopeSelectorTest.java +38 -0
  75. data/test/com/redcareditor/theme/ThemeManagerTest.java +29 -0
  76. data/test/com/redcareditor/util/swt/ColourUtilTest.java +17 -0
  77. metadata +142 -0
data/LICENSE ADDED
@@ -0,0 +1,34 @@
1
+
2
+ ### Licenses for specific files
3
+
4
+ jarjar-1.0.jar is distributed under the Apache License, version 2. For more details, see http://www.apache.org/licenses/LICENSE-2.0
5
+
6
+ junit-4.7.jar is distributed under the Common Public License - v 1.0. For more details, see https://github.com/KentBeck/junit/blob/master/LICENSE
7
+
8
+ ### All other files
9
+
10
+ Unless specified in the file itself, the contents of all other files in this
11
+ repository are provided to you under the following license (MIT):
12
+
13
+ Copyright (c) Daniel Lucraft 2011.
14
+
15
+ Permission is hereby granted, free of charge, to any person obtaining
16
+ a copy of this software and associated documentation files (the
17
+ 'Software'), to deal in the Software without restriction, including
18
+ without limitation the rights to use, copy, modify, merge, publish,
19
+ distribute, sublicense, and/or sell copies of the Software, and to
20
+ permit persons to whom the Software is furnished to do so, subject to
21
+ the following conditions:
22
+
23
+ The above copyright notice and this permission notice shall be
24
+ included in all copies or substantial portions of the Software.
25
+
26
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
27
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
29
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
30
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
31
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
32
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33
+
34
+
data/README ADDED
@@ -0,0 +1,58 @@
1
+
2
+ JavaMateView
3
+ ============
4
+
5
+ Requirements
6
+ ------------
7
+
8
+ * > jruby-1.3.1 installed and set up on your path
9
+ * rspec gem installed via gem install rspec
10
+ * make sure that JAVA_HOME points to a 1.6 type JDK (this is especially true on OSX Leopard)
11
+
12
+
13
+ Running the Ant-based unit-tests
14
+ --------------------------------
15
+ ant
16
+ or
17
+ rake java:test
18
+
19
+
20
+ Running the RSpec parsing specs
21
+ -------------------------------
22
+
23
+ Compile the java code and run the specs:
24
+
25
+ rake jruby:test
26
+
27
+ If you want to run it manually, without compiling:
28
+ On OSX:
29
+
30
+ jruby -J-XstartOnFirstThread -S spec spec
31
+
32
+ On Linux:
33
+
34
+ jruby -S spec spec/
35
+
36
+
37
+ Contributing
38
+ ------------
39
+
40
+ Just so you know: You're free to use whatever IDE or editor to code on java-mateview.
41
+ You can use the rake tasks to compile your code and run the tests easily.
42
+
43
+ If you do however use the Eclipse IDE you also get the Eclipse project settings right away
44
+ when checking out the repository.
45
+ Alas, there are platform dependent libraries this project relies on, you need to do one little
46
+ thing to be on the way to code in eclipse (The rake + ant files do this in their own way).
47
+
48
+
49
+ Eclipse Setup
50
+ -------------
51
+
52
+ * Clone the repository so you have your own version to work with.
53
+ * Import the project.
54
+ * Set up a variable to point to the lib/{your platform here}/swt.jar
55
+ - Go to: Window -> Preferences -> Java -> Build Path -> Classpath Variables
56
+ - Choose "new" -> File
57
+ - Name the variable SWT_JAR and point it to the lib/{platform}/swt.jar in the java-mateview folder.
58
+
data/Rakefile ADDED
@@ -0,0 +1,94 @@
1
+ require 'rake/clean'
2
+ require 'net/http'
3
+
4
+ jruby_command = case Config::CONFIG["host_os"]
5
+ when /darwin/i
6
+ 'jruby -J-XstartOnFirstThread '
7
+ else
8
+ 'jruby '
9
+ end
10
+
11
+ task :default => 'jruby:test'
12
+
13
+ namespace :java do
14
+ desc "Rebuild the java class files"
15
+ task :compile do
16
+ puts "Compiling java files to *.class files"
17
+ sh %+ant compile+
18
+ end
19
+
20
+ desc "Run jUnit tests against freshly compiled java classes"
21
+ task :test do
22
+ puts "Running JUnit Tets"
23
+ sh %+ant test+
24
+ end
25
+
26
+ desc "Run Benchmarks"
27
+ task :benchmark do
28
+ puts "Compiling java files to *.class files"
29
+ sh %+ant compile-bench+
30
+ runner = 'ch.mollusca.benchmarking.BenchmarkRunner'
31
+ classes = ['com.redcareditor.mate.GrammarBenchmark']
32
+ classpath = '.:bench/:bin/:lib/joni.jar:lib/jdom.jar:lib/jcodings.jar'
33
+ classes.each do |clazz|
34
+ sh "java -cp #{classpath} #{runner} #{clazz}"
35
+ end
36
+ end
37
+ end
38
+
39
+ namespace :jruby do
40
+ desc "Run ruby tests against a freshly compiled build"
41
+ task :test => ['java:test'] do
42
+ puts "Running RSpec Tests"
43
+ sh %+#{jruby_command} -S spec spec/+
44
+ end
45
+ end
46
+
47
+
48
+ namespace :build do
49
+ desc "Fetch the swt jars from the gem"
50
+ task :prepare do
51
+ require 'rubygems'
52
+ require 'java'
53
+ gem 'swt'
54
+ require 'swt/jar'
55
+ swt_jar_dir = File.dirname(Swt.jar_path)
56
+
57
+
58
+ mkdir_p File.expand_path("../lib/swt_jars", __FILE__)
59
+ %w(linux linux64 osx osx64 win32).each do |platform|
60
+ dir = File.expand_path("../lib/swt_jars/#{platform}", __FILE__)
61
+ mkdir_p dir
62
+ from = swt_jar_dir + "/swt_#{platform}.jar"
63
+ to = dir + "/swt.jar"
64
+ cp from, to
65
+ end
66
+
67
+ mkdir_p File.expand_path("../lib/jface_jars", __FILE__)
68
+
69
+ Dir[swt_jar_dir + "/jface/org.ecl*.jar"].each do |from, to|
70
+ to = File.expand_path("../lib/jface_jars/#{File.basename(from)}", __FILE__)
71
+ cp from, to
72
+ end
73
+ end
74
+
75
+ desc "Get jruby-complete to build release jar"
76
+ task :get_jruby do
77
+ jruby_complete = "jruby-complete-#{JRUBY_VERSION}.jar"
78
+ location = "http://dist.codehaus.org/jruby/#{JRUBY_VERSION}/#{jruby_complete}"
79
+ local_path = "lib/#{jruby_complete}"
80
+ unless File.exists?(local_path)
81
+ puts "Getting required #{jruby_complete}"
82
+ response = Net::HTTP.get(URI.parse(location))
83
+ File.open(local_path, "wb") { |file| file.write(response) }
84
+ else
85
+ puts "Already have required #{jruby_complete}, skipping download"
86
+ end
87
+ end
88
+
89
+ desc "Build the release *.jar"
90
+ task :release => [:get_jruby] do
91
+ puts "Building release *.jar"
92
+
93
+ end
94
+ end
@@ -0,0 +1,41 @@
1
+
2
+ require 'javamateview/joni'
3
+ require 'javamateview/jcodings'
4
+ require 'javamateview/jdom'
5
+
6
+ require 'javamateview/jar/java-mateview'
7
+
8
+ module JavaMateView
9
+ import com.redcareditor.mate.Bundle
10
+ import com.redcareditor.mate.Grammar
11
+ import com.redcareditor.mate.MateText
12
+ import com.redcareditor.mate.Parser
13
+ import com.redcareditor.mate.ParserScheduler
14
+ import com.redcareditor.mate.Pattern
15
+ import com.redcareditor.mate.Scope
16
+ import com.redcareditor.mate.ScopeMatcher
17
+ import com.redcareditor.theme.Theme
18
+ import com.redcareditor.theme.ThemeManager
19
+
20
+ class MateText
21
+ def set_root_scope_by_content_name(grammar_name, name)
22
+ scope = JavaMateView::Scope.new(self, "re")
23
+ bs = JavaMateView::Bundle.bundles
24
+ ruby = bs.detect {|b| b.name == grammar_name}
25
+ ps = ruby.grammars.first.patterns
26
+ dps = ps.select {|pt| pt.is_a?(Java::ComRedcareditorMate::DoublePattern) }
27
+ rps = dps.detect {|pt| pt.contentName == name }
28
+ scope.pattern = rps
29
+ scope.isOpen = true
30
+ self.parser.root = scope
31
+ end
32
+
33
+ def delay_parsing
34
+ parser.parserScheduler.deactivate
35
+ yield
36
+ parser.parserScheduler.reactivate
37
+ end
38
+ end
39
+ end
40
+
41
+
@@ -0,0 +1,334 @@
1
+
2
+ Dir[File.dirname(__FILE__) + "/*.jar"].each {|fn| require fn }
3
+ require File.join(File.dirname(__FILE__), *%w(.. src ruby java-mateview))
4
+
5
+ class MateExample < Jface::ApplicationWindow
6
+ attr_reader :mate_text, :contents
7
+
8
+ def initialize
9
+ super(nil)
10
+ end
11
+
12
+ # this is another way of making a listener
13
+ class MyListener
14
+ include com.redcareditor.mate.IGrammarListener
15
+
16
+ def grammarChanged(new_name)
17
+ puts "listened for #{new_name} in #{self}"
18
+ end
19
+ end
20
+
21
+ def createContents(parent)
22
+ @contents = Swt::Widgets::Composite.new(parent, Swt::SWT::NONE)
23
+ @contents.layout = Swt::Layout::FillLayout.new
24
+ @mate_text = JavaMateView::MateText.new(@contents, false)
25
+
26
+ @mate_text.add_grammar_listener do |new_name|
27
+ puts "listened for #{new_name} in #{self}"
28
+ end
29
+ @mate_text.set_grammar_by_name "Ruby"
30
+ @mate_text.set_theme_by_name "Mac Classic"
31
+ @mate_text.set_font "Monaco", 15
32
+ return @contents
33
+ end
34
+
35
+ def initializeBounds
36
+ shell.set_size(500,400)
37
+ end
38
+
39
+ def createMenuManager
40
+ main_menu = Jface::MenuManager.new
41
+
42
+ file_menu = Jface::MenuManager.new("Tests")
43
+ main_menu.add file_menu
44
+
45
+ replace1_action = ReplaceContents1.new
46
+ replace1_action.window = self
47
+ replace1_action.text = "Contents RUBY"
48
+ file_menu.add replace1_action
49
+
50
+ replace2_action = ReplaceContents2.new
51
+ replace2_action.window = self
52
+ replace2_action.text = "Contents HTML"
53
+ file_menu.add replace2_action
54
+
55
+ replace3_action = ReplaceContents3.new
56
+ replace3_action.window = self
57
+ replace3_action.text = "Contents long-lined JavaScript (slow)"
58
+ file_menu.add replace3_action
59
+
60
+ set_ruby_action = SetRuby.new
61
+ set_ruby_action.window = self
62
+ set_ruby_action.text = "Set Ruby Grammar"
63
+ file_menu.add set_ruby_action
64
+
65
+ set_html_action = SetHTML.new
66
+ set_html_action.window = self
67
+ set_html_action.text = "Set HTML Grammar"
68
+ file_menu.add set_html_action
69
+
70
+ set_java_script_action = SetJavaScript.new
71
+ set_java_script_action.window = self
72
+ set_java_script_action.text = "Set JavaScript Grammar"
73
+ file_menu.add set_java_script_action
74
+
75
+ set_mc_action = SetMacClassic.new
76
+ set_mc_action.window = self
77
+ set_mc_action.text = "Set Mac Classic"
78
+ file_menu.add set_mc_action
79
+
80
+ set_twilight_action = SetTwilight.new
81
+ set_twilight_action.window = self
82
+ set_twilight_action.text = "Set Twilight"
83
+ file_menu.add set_twilight_action
84
+
85
+ set_scopes_action = PrintScopeTree.new
86
+ set_scopes_action.window = self
87
+ set_scopes_action.text = "Print Scope Tree"
88
+ file_menu.add set_scopes_action
89
+
90
+ set_block_selection = SetBlockSelection.new
91
+ set_block_selection.window = self
92
+ set_block_selection.text = "Set Block Selection"
93
+ file_menu.add set_block_selection
94
+
95
+ set_block_selection = SetNotBlockSelection.new
96
+ set_block_selection.window = self
97
+ set_block_selection.text = "Set Not Block Selection"
98
+ file_menu.add set_block_selection
99
+
100
+ always_parse_all = AlwaysParseAll.new
101
+ always_parse_all.window = self
102
+ always_parse_all.text = "Always Parse All"
103
+ file_menu.add always_parse_all
104
+
105
+ toggle_invisibles = ToggleInvisibles.new
106
+ toggle_invisibles.window = self
107
+ toggle_invisibles.text = "Show/Hide Invisibles"
108
+ file_menu.add toggle_invisibles
109
+
110
+ toggle_word_wrap = ToggleWordWrap.new
111
+ toggle_word_wrap.window = self
112
+ toggle_word_wrap.text = "Toggle Word Wrap"
113
+ file_menu.add toggle_word_wrap
114
+
115
+ remove_annotations = RemoveAnnotations.new
116
+ remove_annotations.window = self
117
+ remove_annotations.text = "Remove Annotations"
118
+ file_menu.add remove_annotations
119
+
120
+ add_annotations = AddAnnotations.new
121
+ add_annotations.window = self
122
+ add_annotations.text = "Add Annotations"
123
+ file_menu.add add_annotations
124
+
125
+ return main_menu
126
+ end
127
+
128
+ class AddAnnotations < Jface::Action
129
+ attr_accessor :window
130
+
131
+ class AnnotationListener
132
+ def initialize(mt)
133
+ @mt = mt
134
+ end
135
+
136
+ def method_missing(event, *args)
137
+ p [event, args]
138
+ end
139
+ end
140
+
141
+ def run
142
+ mt = @window.mate_text
143
+ mt.add_annotation_type(
144
+ "error.type",
145
+ File.dirname(__FILE__) + "/example/little-star.png",
146
+ Swt::Graphics::RGB.new(200, 0, 0));
147
+ mt.add_annotation_type(
148
+ "happy.type",
149
+ File.dirname(__FILE__) + "/example/little-smiley.png",
150
+ Swt::Graphics::RGB.new(0, 0, 200));
151
+ mt.add_annotation("error.type", 1, "Learn how to spell \"text!\"", 5, 5);
152
+ mt.add_annotation("happy.type", 1, "Learn how to spell \"text!\"", 50, 5);
153
+ mt.add_annotation_listener(AnnotationListener.new(@window.mate_text))
154
+ p [:online, 0, mt.annotations_on_line(0).to_a]
155
+ p [:online, 1, mt.annotations_on_line(1).to_a]
156
+ p [:online, 2, mt.annotations_on_line(2).to_a]
157
+ p [:online, 3, mt.annotations_on_line(3).to_a]
158
+ p [:online, 4, mt.annotations_on_line(4).to_a]
159
+ end
160
+ end
161
+
162
+ class RemoveAnnotations < Jface::Action
163
+ attr_accessor :window
164
+
165
+ def run
166
+ @window.mate_text.annotations.each {|a| @window.mate_text.removeAnnotation(a) }
167
+ end
168
+ end
169
+
170
+ class ToggleWordWrap < Jface::Action
171
+ attr_accessor :window
172
+
173
+ def run
174
+ mt = @window.mate_text
175
+ mt.set_word_wrap(!mt.get_word_wrap)
176
+ end
177
+ end
178
+
179
+ class ToggleInvisibles < Jface::Action
180
+ attr_accessor :window
181
+
182
+ def run
183
+ @window.mate_text.showInvisibles(!@window.mate_text.showing_invisibles)
184
+ end
185
+ end
186
+
187
+ class AlwaysParseAll < Jface::Action
188
+ attr_accessor :window
189
+
190
+ def run
191
+ @window.mate_text.parser.parserScheduler.alwaysParseAll = true;
192
+ end
193
+ end
194
+
195
+ class SetBlockSelection < Jface::Action
196
+ attr_accessor :window
197
+
198
+ def run
199
+ @window.mate_text.get_text_widget.set_block_selection(true)
200
+ end
201
+ end
202
+
203
+ class SetNotBlockSelection < Jface::Action
204
+ attr_accessor :window
205
+
206
+ def run
207
+ @window.mate_text.get_text_widget.set_block_selection(false)
208
+ end
209
+ end
210
+
211
+ class SetMacClassic < Jface::Action
212
+ attr_accessor :window
213
+
214
+ def run
215
+ @window.mate_text.set_theme_by_name("Mac Classic")
216
+ end
217
+ end
218
+
219
+ class PrintScopeTree < Jface::Action
220
+ attr_accessor :window
221
+
222
+ def run
223
+ puts @window.mate_text.parser.root.pretty(0)
224
+ end
225
+ end
226
+
227
+ class SetTwilight < Jface::Action
228
+ attr_accessor :window
229
+
230
+ def run
231
+ @window.mate_text.set_theme_by_name("Twilight")
232
+ end
233
+ end
234
+
235
+ class SetRuby < Jface::Action
236
+ attr_accessor :window
237
+
238
+ def run
239
+ @window.mate_text.set_grammar_by_name("Ruby")
240
+ end
241
+ end
242
+
243
+ class SetHTML < Jface::Action
244
+ attr_accessor :window
245
+
246
+ def run
247
+ @window.mate_text.set_grammar_by_name("HTML")
248
+ end
249
+ end
250
+
251
+ class SetJavaScript < Jface::Action
252
+ attr_accessor :window
253
+
254
+ def run
255
+ @window.mate_text.set_grammar_by_name("JavaScript")
256
+ end
257
+ end
258
+
259
+ class ReplaceContents1 < Jface::Action
260
+ attr_accessor :window
261
+
262
+ def run
263
+ s = Time.now
264
+ ##until Time.now - s > 120
265
+ @window.mate_text.getMateDocument.set(File.read(File.dirname(__FILE__) + "/test_big_ruby_file.rb")*3)
266
+ #@window.mate_text.getMateDocument.set("def foo")
267
+ #end
268
+ puts "parse took #{Time.now - s}s"
269
+ puts "num scopes: #{@window.mate_text.parser.root.count_descendants}"
270
+ end
271
+
272
+ def source
273
+ foo=<<-RUBY
274
+ class ExitAction < Jface::Action
275
+ attr_accessor :window
276
+
277
+ def run
278
+ window.close
279
+ end
280
+ end
281
+
282
+ RUBY
283
+ end
284
+ end
285
+
286
+ class ReplaceContents2 < Jface::Action
287
+ attr_accessor :window
288
+
289
+ def run
290
+ @window.mate_text.getMateDocument.set(source*50)
291
+ end
292
+
293
+ def source
294
+ foo=<<-HTML
295
+ <div class="nav">
296
+ <ul>
297
+ <li>Foo</li>
298
+ <li>Bar</li>
299
+ <li>Baz</li>
300
+ </ul>
301
+ </div>
302
+
303
+ HTML
304
+ end
305
+ end
306
+
307
+ class ReplaceContents3 < Jface::Action
308
+ attr_accessor :window
309
+
310
+ def run
311
+ src = File.read("lib/example/jquery-142min.js")
312
+ s = Time.now
313
+ @window.mate_text.getMateDocument.set(src)
314
+ puts "parse took #{Time.now - s}s"
315
+ puts "num scopes: #{@window.mate_text.parser.root.count_descendants}"
316
+ end
317
+ end
318
+
319
+ def self.run
320
+ JavaMateView::Bundle.load_bundles("input/")
321
+ p JavaMateView::Bundle.bundles.to_a.map {|b| b.name }
322
+ JavaMateView::ThemeManager.load_themes("input/")
323
+ p JavaMateView::ThemeManager.themes.to_a.map {|t| t.name }
324
+
325
+ window = MateExample.new
326
+ window.block_on_open = true
327
+ window.addMenuBar
328
+ window.open
329
+ Swt::Widgets::Display.getCurrent.dispose
330
+ end
331
+ end
332
+
333
+ MateExample.run
334
+