151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
-
+
+
-
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
|
foreach {plugin info} $plugins {
set descr [dict get $info descr]
puts "Plugin \"$plugin\" : $descr"
}
}
proc preparePlugin {top} {
#FIXA: plugin miffo
disallowEdit $top
$::eskil($top,plugin) eval [list array set ::Pref [array get ::Pref]]
set out1 [tmpFile]
set out2 [tmpFile]
set chi [open $::eskil($top,leftFile) r]
set cho [open $out1 w]
set chi2 [open $::eskil($top,rightFile) r]
set cho2 [open $out2 w]
interp share {} $chi $::eskil($top,plugin)
interp share {} $cho $::eskil($top,plugin)
set usenew1 [$::eskil($top,plugin) eval [list PreProcess left $chi $cho]]
$::eskil($top,plugin) invokehidden close $chi
$::eskil($top,plugin) invokehidden close $cho
interp share {} $chi2 $::eskil($top,plugin)
interp share {} $cho2 $::eskil($top,plugin)
close $chi
close $cho
# TODO: When allowing 8.6, do this in coroutines allowing each call
# to yield and to alternate between them until done
set chi [open $::eskil($top,rightFile) r]
set cho [open $out2 w]
interp share {} $chi $::eskil($top,plugin)
interp share {} $cho $::eskil($top,plugin)
set usenew1 [$::eskil($top,plugin) eval [list PreProcess left $chi $cho]]
set usenew2 [$::eskil($top,plugin) eval [list PreProcess right $chi2 $cho2]]
$::eskil($top,plugin) invokehidden close $chi
$::eskil($top,plugin) invokehidden close $cho
set usenew2 [$::eskil($top,plugin) eval [list PreProcess right $chi $cho]]
$::eskil($top,plugin) invokehidden close $chi
$::eskil($top,plugin) invokehidden close $cho
$::eskil($top,plugin) invokehidden close $chi2
$::eskil($top,plugin) invokehidden close $cho2
close $chi
close $cho
close $chi2
close $cho2
if {$usenew1} {
# The file after processing should be used both
# for comparison and for displaying.
set ::eskil($top,leftFileBak) $::eskil($top,leftFile)
set ::eskil($top,leftFile) $out1
} else {
|
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
|
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
-
+
+
+
|
}
proc EditPrefPluginsOk {top w} {
destroy $w
set ::eskil($top,pluginname) $::eskil($top,edit,pluginname)
set ::eskil($top,plugininfo) $::eskil($top,edit,plugininfo)
if {$::eskil($top,pluginname) ne ""} {
set pinterp [createPluginInterp $::eskil($top,pluginname) $::eskil($top,plugininfo) pinfo]
set pinterp [createPluginInterp $::eskil($top,pluginname) \
$::eskil($top,plugininfo) pinfo]
} else {
set pinterp ""
set pinfo ""
}
set ::eskil($top,plugin) $pinterp
set ::eskil($top,pluginpinfo) $pinfo
}
# Put Tcl code in a text widget, with some syntax highlighting
proc TextViewTcl {t data} {
|