robust_excel_ole 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RobustExcelOle
4
+ class Cell
5
+ attr_reader :cell
6
+
7
+ def initialize(win32_cell)
8
+ if win32_cell.MergeCells
9
+ @cell = win32_cell.MergeArea.Item(1,1)
10
+ else
11
+ @cell = win32_cell
12
+ end
13
+ end
14
+
15
+ def method_missing(id, *args)
16
+ @cell.send(id, *args)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,40 @@
1
+ module RobustExcelOle
2
+ module Cygwin
3
+ require 'Win32API'
4
+
5
+ @conv_to_full_posix_path =
6
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_full_posix_path', 'PP', 'I')
7
+ @conv_to_posix_path =
8
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_posix_path', 'PP', 'I')
9
+ @conv_to_full_win32_path =
10
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_full_win32_path', 'PP', 'I')
11
+ @conv_to_win32_path =
12
+ Win32API.new('cygwin1.dll', 'cygwin_conv_to_win32_path', 'PP', 'I')
13
+
14
+ def cygpath(options, path)
15
+ absolute = shortname = false
16
+ func = nil
17
+ options.delete(" \t-").chars {|opt|
18
+ case opt
19
+ when ?u
20
+ func = [@conv_to_full_posix_path, @conv_to_posix_path]
21
+ when ?w
22
+ func = [@conv_to_full_win32_path, @conv_to_win32_path]
23
+ when ?a
24
+ absolute = true
25
+ when ?s
26
+ shortname = true
27
+ end
28
+ }
29
+ raise "first argument must contain -u or -w" if func.nil?
30
+ func = absolute ? func[0] : func[1]
31
+ buf = "\0" * 300
32
+ if func.Call(path, buf) == -1
33
+ raise "cannot convert path name"
34
+ end
35
+ buf.delete!("\0")
36
+ buf
37
+ end
38
+ module_function :cygpath
39
+ end
40
+ end
@@ -0,0 +1,182 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module RobustExcelOle
4
+
5
+ class ExcelApp
6
+
7
+ attr_writer :ole_app
8
+
9
+ @@hwnd2app = {}
10
+
11
+ # closes one excel application
12
+ def self.close_one_app
13
+ excel = running_app
14
+ if excel then
15
+ excel.Workbooks.Close
16
+ excel_hwnd = excel.HWnd
17
+ excel.Quit
18
+ #excel.ole_free
19
+ weak_excel_ref = WeakRef.new(excel)
20
+ excel = nil
21
+ GC.start
22
+ sleep 0.2
23
+ #sleep 0.1
24
+ if weak_excel_ref.weakref_alive? then
25
+ #if WIN32OLE.ole_reference_count(weak_xlapp) > 0
26
+ begin
27
+ weak_excel_ref.ole_free
28
+ puts "successfully ole_freed #{weak_excel_ref}"
29
+ rescue
30
+ puts "could not do ole_free on #{weak_excel_ref}"
31
+ end
32
+ end
33
+
34
+ @@hwnd2app[excel_hwnd].die rescue nil
35
+ #@@hwnd2app[excel_hwnd] = nil
36
+ end
37
+
38
+
39
+ free_all_ole_objects
40
+
41
+ return
42
+ process_id = Win32API.new("user32", "GetWindowThreadProcessId", ["I","P"], "I")
43
+ pid_puffer = " " * 32
44
+ process_id.call(excel_hwnd, pid_puffer)
45
+ pid = pid_puffer.unpack("L")[0]
46
+ Process.kill("KILL", pid)
47
+ end
48
+
49
+ def self.free_all_ole_objects
50
+ anz_objekte = 0
51
+ ObjectSpace.each_object(WIN32OLE) do |o|
52
+ anz_objekte += 1
53
+ #p [:Name, (o.Name rescue (o.Count rescue "no_name"))]
54
+ #p [:ole_object_name, (o.ole_object_name rescue nil)]
55
+ #p [:methods, (o.ole_methods rescue nil)] unless (o.Name rescue false)
56
+ #puts o.ole_type rescue nil
57
+ #trc_info :obj_hwnd, o.HWnd rescue nil
58
+ #trc_info :obj_Parent, o.Parent rescue nil
59
+ begin
60
+ o.ole_free
61
+ puts "olefree OK"
62
+ rescue
63
+ puts "olefree_error: #{$!}"
64
+ #puts $!.backtrace.first(9).join "\n"
65
+ end
66
+ end
67
+ puts "went through #{anz_objekte} OLE objects"
68
+ end
69
+
70
+ # closes all excel applications
71
+ def self.close_all
72
+ while running_app do
73
+ close_one_app
74
+ GC.start
75
+ sleep 0.3
76
+ #free_all_ole_objects
77
+ end
78
+ end
79
+
80
+ # returns a running excel application, if a non-dead excel appication exists, nil otherwise
81
+ def self.running_app
82
+ result = WIN32OLE.connect('Excel.Application') rescue nil
83
+ if result
84
+ begin
85
+ result.Visible # send any method, just to see if it responds
86
+ rescue
87
+ puts "dead excel app " + ("Window-handle = #{result.HWnd}" rescue "without window handle")
88
+ return nil
89
+ end
90
+ end
91
+ result
92
+ end
93
+
94
+ # creates a new excel application
95
+ def self.create
96
+ new(:reuse => false)
97
+ end
98
+
99
+ # uses a running excel application, if such an application exists
100
+ # creates a new one, otherwise
101
+ def self.reuse_if_possible
102
+ new(:reuse => true)
103
+ end
104
+
105
+ # returns an excel application
106
+ #
107
+ # options:
108
+ # :reuse (boolean) use an already running excel application (default: true)
109
+ # :displayalerts (boolean) allow display alerts in Excel (default: false)
110
+ # :visible (boolean) make visible in Excel (default: false)
111
+ def self.new(options= {})
112
+ options = {:reuse => true}.merge(options)
113
+
114
+ ole_app = nil
115
+ if options[:reuse] then
116
+ ole_app = running_app
117
+ if ole_app
118
+ #p "bestehende Applikation wird wieder benutzt"
119
+ ole_app.DisplayAlerts = options[:displayalerts] unless options[:displayalerts]==nil
120
+ ole_app.Visible = options[:visible] unless options[:visible]==nil
121
+ end
122
+ end
123
+
124
+ options = {
125
+ :displayalerts => false,
126
+ :visible => false,
127
+ }.merge(options)
128
+ #p "kreiere neue application"
129
+ unless ole_app
130
+ ole_app = WIN32OLE.new('Excel.application')
131
+ ole_app.DisplayAlerts = options[:displayalerts]
132
+ ole_app.Visible = options[:visible]
133
+ end
134
+
135
+ hwnd = ole_app.HWnd
136
+ stored = @@hwnd2app[hwnd]
137
+
138
+ if stored
139
+ result = stored
140
+ else
141
+ WIN32OLE.const_load(ole_app, RobustExcelOle) unless RobustExcelOle.const_defined?(:CONSTANTS)
142
+ result = super(options)
143
+ result.ole_app = ole_app
144
+ @@hwnd2app[hwnd] = result
145
+ end
146
+ result
147
+ end
148
+
149
+
150
+ def initialize(options= {})
151
+ end
152
+
153
+
154
+ def hwnd_xxxx
155
+ self.HWnd #rescue Win32 nil
156
+ end
157
+
158
+ # returns true, if the excel applications are identical, false otherwise
159
+ def == other_app
160
+ self.hwnd == other_app.hwnd if other_app.is_a?(ExcelApp)
161
+ end
162
+
163
+ # set this excel application to nil
164
+ def die
165
+ @ole_app = nil
166
+ end
167
+
168
+ # returns true, if the excel application is alive, false otherwise
169
+ def alive?
170
+ @ole_app.Name
171
+ true
172
+ rescue
173
+ puts $!.message
174
+ false
175
+ end
176
+
177
+ def method_missing(name, *args)
178
+ @ole_app.send(name, *args)
179
+ end
180
+
181
+ end
182
+ end
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ module RobustExcelOle
3
+ class Range
4
+ include Enumerable
5
+
6
+ def initialize(win32_range)
7
+ @range = win32_range
8
+ end
9
+
10
+ def each
11
+ @range.each do |row_or_column|
12
+ yield RobustExcelOle::Cell.new(row_or_column)
13
+ end
14
+ end
15
+
16
+ def values(range = nil)
17
+ #+# result = self.map(&:value).flatten
18
+ result = self.map{|x| x.value}.flatten
19
+ #+# range ? result.each_with_index.select{ |row_or_column, i| range.include?(i) }.map{ |i| i[0] } : result
20
+ if range
21
+ relevant_result = []
22
+ result.each_with_index{ |row_or_column, i| relevant_result << row_or_column if range.include?(i) }
23
+ relevant_result
24
+ else
25
+ result
26
+ end
27
+ end
28
+
29
+ def [] index
30
+ @cells ||= []
31
+ @cells[index + 1] ||= RobustExcelOle::Cell.new(@range.Cells.Item(index + 1))
32
+ end
33
+
34
+ def method_missing(id, *args)
35
+ @range.send(id, *args)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ {
2
+ "folders":
3
+ [
4
+ {
5
+ "path": "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole"
6
+ }
7
+ ]
8
+ }
@@ -0,0 +1,347 @@
1
+ {
2
+ "auto_complete":
3
+ {
4
+ "selected_items":
5
+ [
6
+ [
7
+ "rub",
8
+ "rubygems"
9
+ ],
10
+ [
11
+ "module_",
12
+ "module_eval"
13
+ ],
14
+ [
15
+ "Schm",
16
+ "SchmiebaSub_TempModule"
17
+ ],
18
+ [
19
+ "schm",
20
+ "SchmiebaMain_TempModule"
21
+ ],
22
+ [
23
+ "req",
24
+ "require"
25
+ ],
26
+ [
27
+ "wrap",
28
+ "wrap_in_module"
29
+ ]
30
+ ]
31
+ },
32
+ "buffers":
33
+ [
34
+ {
35
+ "file": "book.rb",
36
+ "settings":
37
+ {
38
+ "buffer_size": 2756,
39
+ "line_ending": "Windows"
40
+ }
41
+ }
42
+ ],
43
+ "build_system": "",
44
+ "command_palette":
45
+ {
46
+ "height": 196.0,
47
+ "selected_items":
48
+ [
49
+ [
50
+ "INST",
51
+ "Package Control: Install Package"
52
+ ],
53
+ [
54
+ "pack",
55
+ "Package Control: Upgrade/Overwrite All Packages"
56
+ ],
57
+ [
58
+ "upg",
59
+ "Package Control: Upgrade/Overwrite All Packages"
60
+ ],
61
+ [
62
+ "",
63
+ "Package Control: Upgrade Package"
64
+ ],
65
+ [
66
+ "ins",
67
+ "Package Control: Install Package"
68
+ ],
69
+ [
70
+ "pa",
71
+ "Package Control: Install Package"
72
+ ]
73
+ ],
74
+ "width": 386.0
75
+ },
76
+ "console":
77
+ {
78
+ "height": 126.0
79
+ },
80
+ "distraction_free":
81
+ {
82
+ "menu_visible": true,
83
+ "show_minimap": false,
84
+ "show_open_files": false,
85
+ "show_tabs": false,
86
+ "side_bar_visible": false,
87
+ "status_bar_visible": false
88
+ },
89
+ "file_history":
90
+ [
91
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/spec/book_spec.rb",
92
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/lib/robust_excel_ole.rb",
93
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/lib/robust_excel_ole/book.rb",
94
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/ruby/einmaleins_test.rb",
95
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/robust_excel_ole/spec/spec_helper.rb",
96
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/unit/wandler/wandler_hr5_test.rb",
97
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/unit/system_fkt/excel_zugriff/exlzug_ats_test.rb",
98
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/RubyTest.sublime-settings",
99
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/models/system_fkt/excel_zugriff/exlzug_basis.rb",
100
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/ruby/einmaleins_v07.rb",
101
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/unit/dbf_boxes/v_objekte/rk_test.rb",
102
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/models/dbf_boxes/v_objekte/rk.rb",
103
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/test/schmiedebasis_test.rb",
104
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/controllers/gui_apollo/schmiedebasis.rb",
105
+ "/C/Dokumente und Einstellungen/Zauberthomas/Eigene Dateien/aSrc/app/galaxy_script/g_script/galaxy_object.rb",
106
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/Preferences.sublime-settings",
107
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/Default/Preferences.sublime-settings",
108
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/RubyTest/RubyTest.sublime-settings",
109
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/Distraction Free.sublime-settings",
110
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/JSON.sublime-settings",
111
+ "/I/gim/ats/TodoListe.txt",
112
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Packages/User/RubyTest.last-run",
113
+ "/I/gim/ats/aSrc/test/testbasis.rb",
114
+ "/I/gim/ats/aSrc/test/fixture_generell.rb",
115
+ "/C/ProgLang/Ruby-1.8.6/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb",
116
+ "/I/gim/ats/aSrc/app/controllers/prozesse/diener.rb",
117
+ "/C/Dokumente und Einstellungen/sound/Lokale Einstellungen/Temp/tar2rubyscript.d.3800.1/tsExpo/app/controllers/prozesse/diener.rb",
118
+ "/I/gim/ats/aSrc/app/controllers/ats_konsole.rb",
119
+ "/I/gim/ats/aSrc/test/controllers/prozesse/dienstherr_test.rb",
120
+ "/I/gim/ats/aSrc/lib/controllers/prozesse/dienstherr.rb",
121
+ "/I/gim/ats/aSrc/lib/schmiedebasis.rb",
122
+ "/C/ProgLang/Ruby-1.8.6/lib/ruby/gems/1.8/gems/autotest-standalone-4.5.11/lib/autotest/notify.rb",
123
+ "/C/Dokumente und Einstellungen/sound/Anwendungsdaten/Sublime Text 3/Installed Packages/RubyTest.sublime-package",
124
+ "/I/gim/ats/aSrc/app/.loadpath",
125
+ "/I/gim/ats/aSrc/app/iconv.rb",
126
+ "/I/gim/ats/aSrc/app/init_x.rb",
127
+ "/I/gim/ats/aSrc/app/schmiedebasis.rb",
128
+ "/I/gim/ats/aSrc/app/temp_app.rb",
129
+ "/I/gim/ats/aSrc/app/testhilfe.rb",
130
+ "/I/gim/ats/aSrc/app/version.rb",
131
+ "/I/gim/ats/aSrc/app/models/wandler/dbf2exl.rb",
132
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung.rb",
133
+ "/I/gim/ats/aSrc/app/models/wandler/satz_split.rb",
134
+ "/I/gim/ats/aSrc/app/models/wandler/wandler_allgemein.rb",
135
+ "/I/gim/ats/aSrc/app/models/wandler/wandler_hr5.rb",
136
+ "/I/gim/ats/aSrc/app/models/wandler/wandler_zu_excel.rb",
137
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung/zuord_hr5.rb",
138
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung/zuord_hr6.rb",
139
+ "/I/gim/ats/aSrc/app/models/wandler/excel_zuordnung/zuord_ng1.rb",
140
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/eintrag_persistenz.rb",
141
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/haupt_konfig_hash.rb",
142
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/inifile_hash.rb",
143
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/konfig_option.rb",
144
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/konfig_optionen.rb",
145
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/konfig_opts.rb",
146
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/ort_persistenz.rb",
147
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/schmiedebasis.rb",
148
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung/vergleichs_ergebnis.rb",
149
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff/exlzug_ats.rb",
150
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff/exlzug_basis.rb",
151
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff/exlzug_openclose.rb",
152
+ "/I/gim/ats/aSrc/app/models/system_fkt/datei_aufraeumer.rb",
153
+ "/I/gim/ats/aSrc/app/models/system_fkt/dbase_zugriff.rb",
154
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_prozesse.rb",
155
+ "/I/gim/ats/aSrc/app/models/system_fkt/excel_zugriff.rb",
156
+ "/I/gim/ats/aSrc/app/models/system_fkt/protokollierer.rb",
157
+ "/I/gim/ats/aSrc/app/models/system_fkt/schmiedebasis.rb",
158
+ "/I/gim/ats/aSrc/app/models/system_fkt/speicherung.rb",
159
+ "/I/gim/ats/aSrc/app/models/system_fkt/tasten_sender.rb",
160
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekt.rb",
161
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte.rb",
162
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/va.rb",
163
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vb.rb",
164
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vd.rb",
165
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vk.rb",
166
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/vt.rb",
167
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/v_objekte/rk.rb",
168
+ "/I/gim/ats/aSrc/app/models/basis_logik/zeit.rb",
169
+ "/I/gim/ats/aSrc/app/controllers/teste_tv2_a03.rb",
170
+ "/I/gim/ats/aSrc/app/controllers/teste_tv2.rb",
171
+ "/I/gim/ats/aSrc/app/controllers/schmiedebasis.rb",
172
+ "/I/gim/ats/aSrc/app/controllers/orte_controller.rb",
173
+ "/I/gim/ats/aSrc/app/controllers/mathstar_per_tasten.rb",
174
+ "/I/gim/ats/aSrc/app/controllers/mathstar_per_dll.rb",
175
+ "/I/gim/ats/aSrc/app/controllers/iterator.rb",
176
+ "/I/gim/ats/aSrc/app/controllers/galaxy_script.rb",
177
+ "/I/gim/ats/aSrc/app/controllers/dbf_vergleicher.rb",
178
+ "/I/gim/ats/aSrc/app/controllers/controller.rb",
179
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/gui_ap.rb",
180
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/gui_basis_ap.rb",
181
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/guikonfig_ap.rb",
182
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/guivertr_ap.rb",
183
+ "/I/gim/ats/aSrc/app/controllers/gui_apollo/schmiedebasis.rb",
184
+ "/I/gim/ats/aSrc/app/controllers/prozesse/aufgaben.rb",
185
+ "/I/gim/ats/aSrc/app/controllers/prozesse/dienstherr.rb",
186
+ "/I/gim/ats/aSrc/app/controllers/prozesse/dienstkontakt.rb",
187
+ "/I/gim/ats/aSrc/app/controllers/prozesse/schmiedebasis.rb",
188
+ "/I/gim/ats/aSrc/app/controllers/teste_tv2_prober2.rb",
189
+ "/C/ProgLang/Ruby-1.8.6/lib/ruby/gems/1.8/gems/wrap_in_module-0.1.0/lib/wrap_in_module.rb",
190
+ "/I/gim/ats/aSrc/app/oldandnewlocation.rb",
191
+ "/I/gim/ats/aSrc/app/models/dbf_boxes/monkeypatch_dbf_gem.rb",
192
+ "/I/gim/ats/aSrc/test/schmiedebasis_test.rb",
193
+ "/I/gim/ats/aSrc/test/unit/ort_haupt_test.rb",
194
+ "/I/gim/ats/aSrc/app/models/ort_exlist.rb",
195
+ "/I/gim/ats/aSrc/app/models/ort_haupt.rb",
196
+ "/I/gim/ats/aSrc/app/models/orte.rb",
197
+ "/I/gim/ats/aSrc/app/models/schmiedebasis.rb",
198
+ "/I/gim/ats/aSrc/app/models/ort_excel.rb",
199
+ "/I/gim/ats/aSrc/app/models/dbf_boxes.rb",
200
+ "/I/gim/ats/aSrc/app/models/generali.rb",
201
+ "/I/gim/ats/aSrc/init.rb",
202
+ "/I/gim/ats/rakefile.rb"
203
+ ],
204
+ "find":
205
+ {
206
+ "height": 27.0
207
+ },
208
+ "find_in_files":
209
+ {
210
+ "height": 0.0,
211
+ "where_history":
212
+ [
213
+ "C:\\D,C:\\Dokumente und Einstellungen\\Zauberthomas\\Eigene Dateien\\aSrc\\app"
214
+ ]
215
+ },
216
+ "find_state":
217
+ {
218
+ "case_sensitive": false,
219
+ "find_history":
220
+ [
221
+ "&",
222
+ "&:",
223
+ "ExcelApplicationHelfer",
224
+ "flex",
225
+ "flexm",
226
+ "SchmiebaSub_TempModule",
227
+ "SchmiebaMain_TempModule"
228
+ ],
229
+ "highlight": true,
230
+ "in_selection": false,
231
+ "preserve_case": false,
232
+ "regex": false,
233
+ "replace_history":
234
+ [
235
+ "SB_Sub_TempModule",
236
+ "SB_Main_TempModule"
237
+ ],
238
+ "reverse": false,
239
+ "show_context": true,
240
+ "use_buffer2": true,
241
+ "whole_word": false,
242
+ "wrap": true
243
+ },
244
+ "groups":
245
+ [
246
+ {
247
+ "selected": 0,
248
+ "sheets":
249
+ [
250
+ {
251
+ "buffer": 0,
252
+ "file": "book.rb",
253
+ "settings":
254
+ {
255
+ "buffer_size": 2756,
256
+ "regions":
257
+ {
258
+ },
259
+ "selection":
260
+ [
261
+ [
262
+ 0,
263
+ 0
264
+ ]
265
+ ],
266
+ "settings":
267
+ {
268
+ "syntax": "Packages/Ruby/Ruby.tmLanguage",
269
+ "tab_size": 2,
270
+ "translate_tabs_to_spaces": true
271
+ },
272
+ "translation.x": 0.0,
273
+ "translation.y": 0.0,
274
+ "zoom_level": 1.0
275
+ },
276
+ "type": "text"
277
+ }
278
+ ]
279
+ }
280
+ ],
281
+ "incremental_find":
282
+ {
283
+ "height": 27.0
284
+ },
285
+ "input":
286
+ {
287
+ "height": 37.0
288
+ },
289
+ "layout":
290
+ {
291
+ "cells":
292
+ [
293
+ [
294
+ 0,
295
+ 0,
296
+ 1,
297
+ 1
298
+ ]
299
+ ],
300
+ "cols":
301
+ [
302
+ 0.0,
303
+ 1.0
304
+ ],
305
+ "rows":
306
+ [
307
+ 0.0,
308
+ 1.0
309
+ ]
310
+ },
311
+ "menu_visible": true,
312
+ "output.exec":
313
+ {
314
+ "height": 301.0
315
+ },
316
+ "output.find_results":
317
+ {
318
+ "height": 0.0
319
+ },
320
+ "replace":
321
+ {
322
+ "height": 50.0
323
+ },
324
+ "save_all_on_build": true,
325
+ "select_file":
326
+ {
327
+ "height": 0.0,
328
+ "selected_items":
329
+ [
330
+ ],
331
+ "width": 0.0
332
+ },
333
+ "select_project":
334
+ {
335
+ "height": 0.0,
336
+ "selected_items":
337
+ [
338
+ ],
339
+ "width": 0.0
340
+ },
341
+ "show_minimap": true,
342
+ "show_open_files": false,
343
+ "show_tabs": true,
344
+ "side_bar_visible": true,
345
+ "side_bar_width": 132.0,
346
+ "status_bar_visible": true
347
+ }