devver-germinate 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +12 -0
- data/README.rdoc +26 -4
- data/TODO +80 -8
- data/bin/germ +162 -38
- data/examples/basic.rb +14 -9
- data/examples/short.rb +2 -0
- data/features/author-formats-article.feature +3 -3
- data/features/{author-lists-info.feature → author-lists-info.pending_feature} +3 -0
- data/features/author-publishes-article.feature +52 -0
- data/features/author-selects-hunks.feature +1 -1
- data/features/author-sets-variables.feature +88 -0
- data/features/{author-views-stuff.feature → author-views-stuff.pending_feature} +4 -0
- data/features/example_articles/escaping.txt +1 -0
- data/features/example_articles/specials.rb +3 -3
- data/features/example_output/specials.txt +9 -5
- data/features/step_definitions/germinate.rb +9 -0
- data/germinate.gemspec +3 -3
- data/lib/germinate.rb +1 -1
- data/lib/germinate/application.rb +82 -31
- data/lib/germinate/hunk.rb +20 -0
- data/lib/germinate/insertion.rb +10 -2
- data/lib/germinate/librarian.rb +129 -31
- data/lib/germinate/origin.rb +5 -0
- data/lib/germinate/pipeline.rb +2 -0
- data/lib/germinate/publisher.rb +57 -0
- data/lib/germinate/reader.rb +51 -8
- data/lib/germinate/selector.rb +18 -6
- data/lib/germinate/shared_style_attributes.rb +18 -1
- data/lib/germinate/{process.rb → shell_process.rb} +27 -8
- data/lib/germinate/shell_publisher.rb +19 -0
- data/lib/germinate/simple_publisher.rb +7 -0
- data/lib/germinate/source_file.rb +41 -0
- data/lib/germinate/text_transforms.rb +38 -9
- data/lib/germinate/transform_process.rb +25 -0
- data/lib/germinate/variable.rb +23 -0
- data/sample.rb +14 -0
- data/spec/germinate/application_spec.rb +18 -1
- data/spec/germinate/article_editor_spec.rb +3 -3
- data/spec/germinate/code_hunk_spec.rb +28 -0
- data/spec/germinate/file_hunk_spec.rb +1 -0
- data/spec/germinate/hunk_spec.rb +1 -0
- data/spec/germinate/insertion_spec.rb +2 -1
- data/spec/germinate/librarian_spec.rb +280 -85
- data/spec/germinate/pipeline_spec.rb +10 -0
- data/spec/germinate/process_spec.rb +31 -6
- data/spec/germinate/publisher_spec.rb +130 -0
- data/spec/germinate/reader_spec.rb +58 -2
- data/spec/germinate/selector_spec.rb +34 -14
- data/spec/germinate/shell_publisher_spec.rb +61 -0
- data/spec/germinate/source_file_spec.rb +99 -0
- data/spec/germinate/text_hunk_spec.rb +45 -0
- data/spec/germinate/text_transforms_spec.rb +90 -2
- data/spec/germinate/transform_process_spec.rb +50 -0
- data/spec/germinate/variable_spec.rb +14 -0
- metadata +19 -7
- data/lib/germinate/article_formatter.rb +0 -75
- data/spec/germinate/article_formatter_spec.rb +0 -153
data/spec/germinate/hunk_spec.rb
CHANGED
@@ -11,7 +11,8 @@ module Germinate
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should use the library to resolve itself" do
|
14
|
-
@library.should_receive(:[]).
|
14
|
+
@library.should_receive(:[]).
|
15
|
+
with(@selector, anything, anything).and_return(@hunk)
|
15
16
|
@it.resolve.should == @hunk
|
16
17
|
end
|
17
18
|
end
|
@@ -17,6 +17,10 @@ module Germinate
|
|
17
17
|
end
|
18
18
|
|
19
19
|
context "by default" do
|
20
|
+
it "should have access to the special _transform process" do
|
21
|
+
@it.process('_transform').should be_a_kind_of(TransformProcess)
|
22
|
+
end
|
23
|
+
|
20
24
|
it "should not have a comment prefix" do
|
21
25
|
@it.comment_prefix.should == nil
|
22
26
|
@it.comment_prefix_known?.should be_false
|
@@ -88,7 +92,9 @@ module Germinate
|
|
88
92
|
|
89
93
|
context "given an insertion in my_section with selector @my_selector" do
|
90
94
|
before :each do
|
91
|
-
@it.
|
95
|
+
@it.disable_all_transforms!
|
96
|
+
@it.add_code!("my_sample", "line 1\n")
|
97
|
+
@it.add_insertion!("my_section", "@my_sample", { :comment_prefix => "@" })
|
92
98
|
end
|
93
99
|
|
94
100
|
it "should add an Insertion to the named section" do
|
@@ -96,7 +102,7 @@ module Germinate
|
|
96
102
|
end
|
97
103
|
|
98
104
|
it "should give the insertion the selector @my_selector" do
|
99
|
-
@it.section("my_section").last.selector.to_s.should == "@
|
105
|
+
@it.section("my_section").last.selector.to_s.should == "@my_sample"
|
100
106
|
end
|
101
107
|
|
102
108
|
it "should give the insertion a reference to the library" do
|
@@ -106,6 +112,11 @@ module Germinate
|
|
106
112
|
it "should apply any passed attributes to the insertion" do
|
107
113
|
@it.section("my_section").last.comment_prefix.should == "@"
|
108
114
|
end
|
115
|
+
|
116
|
+
it "should include the insertion in the $TEXT hunk" do
|
117
|
+
@it['$TEXT'].first.should be_a_kind_of(Insertion)
|
118
|
+
@it['$TEXT'].first.selector.should == "@my_sample"
|
119
|
+
end
|
109
120
|
end
|
110
121
|
|
111
122
|
context "given a process to file" do
|
@@ -113,8 +124,8 @@ module Germinate
|
|
113
124
|
@it.add_process!("myproc", "cowsay")
|
114
125
|
end
|
115
126
|
|
116
|
-
it "should make the process available as a
|
117
|
-
@it.process("myproc").should be_a_kind_of(Germinate::
|
127
|
+
it "should make the process available as a ShellProcess object" do
|
128
|
+
@it.process("myproc").should be_a_kind_of(Germinate::ShellProcess)
|
118
129
|
end
|
119
130
|
|
120
131
|
it "should store the process name" do
|
@@ -128,19 +139,29 @@ module Germinate
|
|
128
139
|
it "should include the process when listing known processes" do
|
129
140
|
@it.process_names.should include("myproc")
|
130
141
|
end
|
142
|
+
|
143
|
+
it "should give the process a reference to the librarians variables" do
|
144
|
+
@it.process("myproc").variables.should equal(@it.variables)
|
145
|
+
end
|
131
146
|
end
|
132
147
|
|
133
148
|
context "given a code sample and some processes" do
|
134
149
|
before :each do
|
135
|
-
@output_a = ["line 1a", "line 2a"]
|
136
|
-
@output_b = ["line 1b", "line 2b"]
|
137
|
-
@process_a = stub("
|
138
|
-
|
139
|
-
|
140
|
-
|
150
|
+
@output_a = Hunk.new(["line 1a", "line 2a"])
|
151
|
+
@output_b = Hunk.new(["line 1b", "line 2b"])
|
152
|
+
@process_a = stub("ShellProcess A",
|
153
|
+
:call => @output_a,
|
154
|
+
:name => "foo",
|
155
|
+
:command => "aaa")
|
156
|
+
@process_b = stub("ShellProcess B",
|
157
|
+
:call => @output_b,
|
158
|
+
:name => "bar",
|
159
|
+
:command => "bbb")
|
160
|
+
Germinate::ShellProcess.stub!(:new).
|
161
|
+
with("foo", "aaa", {}).
|
141
162
|
and_return(@process_a)
|
142
|
-
Germinate::
|
143
|
-
with("bar", "bbb").
|
163
|
+
Germinate::ShellProcess.stub!(:new).
|
164
|
+
with("bar", "bbb", {}).
|
144
165
|
and_return(@process_b)
|
145
166
|
|
146
167
|
@it.add_code!("A", "line 1")
|
@@ -155,7 +176,7 @@ module Germinate
|
|
155
176
|
end
|
156
177
|
|
157
178
|
it "should call the processes on the selected text" do
|
158
|
-
@process_a.should_receive(:call).with(["line 1", "line 2"]).
|
179
|
+
@process_a.should_receive(:call).with(["line 1\n", "line 2\n"]).
|
159
180
|
and_return(@output_a)
|
160
181
|
@process_b.should_receive(:call).with(@output_a).
|
161
182
|
and_return(@output_b)
|
@@ -163,6 +184,184 @@ module Germinate
|
|
163
184
|
@it[@selector].should == ["line 1b", "line 2b"]
|
164
185
|
end
|
165
186
|
end
|
187
|
+
|
188
|
+
context "when asked to make a pipeline of the two processes" do
|
189
|
+
before :each do
|
190
|
+
@pipeline = @it.make_pipeline("bar|foo")
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should return a Pipeline object" do
|
194
|
+
@pipeline.should be_a_kind_of(Germinate::Pipeline)
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should return a two-process pipeline" do
|
198
|
+
@pipeline.should have(2).processes
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should include the named processes in the pipeline" do
|
202
|
+
@pipeline.processes[0].name.should == "bar"
|
203
|
+
@pipeline.processes[0].command.should == "bbb"
|
204
|
+
@pipeline.processes[1].name.should == "foo"
|
205
|
+
@pipeline.processes[1].command.should == "aaa"
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
context "when asked to make an empty pipeline" do
|
210
|
+
before :each do
|
211
|
+
@pipeline = @it.make_pipeline("")
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should return an empty pipeline" do
|
215
|
+
@pipeline.should have(0).processes
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
context "given a new publisher" do
|
221
|
+
before :each do
|
222
|
+
@publisher_name = "MyPub"
|
223
|
+
@publisher_type = "shell"
|
224
|
+
@publisher_options = {'foo' => 'bar'}
|
225
|
+
@publisher = stub("Publisher")
|
226
|
+
Germinate::Publisher.stub!(:make).and_return(@publisher)
|
227
|
+
end
|
228
|
+
|
229
|
+
it "should construct a new publisher object" do
|
230
|
+
Germinate::Publisher.should_receive(:make).
|
231
|
+
with(@publisher_name, @publisher_type, @it, @publisher_options).
|
232
|
+
and_return(@publisher)
|
233
|
+
@it.add_publisher!(@publisher_name, @publisher_type, @publisher_options)
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should make the new publisher available by name" do
|
237
|
+
@it.add_publisher!(@publisher_name, @publisher_type, @publisher_options)
|
238
|
+
@it.publisher(@publisher_name).should equal(@publisher)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should raise an error when an unknown publisher is requested" do
|
242
|
+
@it.add_publisher!(@publisher_name, @publisher_type, @publisher_options)
|
243
|
+
lambda do
|
244
|
+
@it.publisher("foo")
|
245
|
+
end.should raise_error(IndexError)
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
context "given a variable directive" do
|
250
|
+
before :each do
|
251
|
+
@line = " :SET: FOO, 123"
|
252
|
+
@it.set_variable!(@line, 111, "FOO", "123")
|
253
|
+
end
|
254
|
+
|
255
|
+
it "should add a variable with the given name and value" do
|
256
|
+
@it.variables["FOO"].should == "123"
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should set the variables line to the given value" do
|
260
|
+
@it.variables["FOO"].line.should equal(@line)
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should set the variables line_number to the given value" do
|
264
|
+
@it.variables["FOO"].origin.line_number.should == 111
|
265
|
+
end
|
266
|
+
|
267
|
+
it "should set the variables source path to its own source path" do
|
268
|
+
@it.variables["FOO"].origin.source_path.to_s.should == "SOURCE_PATH"
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
context "given a variable setting when the variable already has a value" do
|
273
|
+
before :each do
|
274
|
+
@it.set_variable!(" :SET: FOO, 123", 1, "FOO", "123")
|
275
|
+
@it.set_variable!(" :SET: FOO, 456", 1, "FOO", "456")
|
276
|
+
end
|
277
|
+
|
278
|
+
it "should replace the old variable value with the new one" do
|
279
|
+
@it.variables["FOO"].should == "456"
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
context "setting a new variable" do
|
284
|
+
before :each do
|
285
|
+
@it.add_text!("a", " # some text")
|
286
|
+
@it.comment_prefix = " # "
|
287
|
+
@it.variables["FOO"] = 123
|
288
|
+
end
|
289
|
+
|
290
|
+
it "should add a new line" do
|
291
|
+
@it.lines.last.should == " # :SET: 'FOO', '123'\n"
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should set the variable to reference the new line" do
|
295
|
+
@it.variables["FOO"].line.should equal(@it.lines.last)
|
296
|
+
end
|
297
|
+
|
298
|
+
it "should set the line number for the new line" do
|
299
|
+
@it.variables["FOO"].origin.line_number.should == 2
|
300
|
+
end
|
301
|
+
|
302
|
+
it "should set the variable's source file to its own" do
|
303
|
+
@it.variables["FOO"].origin.source_path.should == "SOURCE_PATH"
|
304
|
+
end
|
305
|
+
|
306
|
+
it "should set the variable's value as a string" do
|
307
|
+
@it.variables["FOO"].should == "123"
|
308
|
+
end
|
309
|
+
|
310
|
+
it "should set the updatad flag" do
|
311
|
+
@it.should be_updated
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
context "setting an existing variable" do
|
316
|
+
before :each do
|
317
|
+
@it.comment_prefix = " # "
|
318
|
+
@it.variables["FOO"] = 123
|
319
|
+
@it.add_text!("a", " # some text")
|
320
|
+
@it.updated = false
|
321
|
+
@it.variables["FOO"] = 456
|
322
|
+
end
|
323
|
+
|
324
|
+
it "should not add a new line" do
|
325
|
+
@it.should have(2).lines
|
326
|
+
end
|
327
|
+
|
328
|
+
it "should point to an already existing line" do
|
329
|
+
@it.variables["FOO"].line.should equal(@it.lines.first)
|
330
|
+
end
|
331
|
+
|
332
|
+
it "should keep variable line number" do
|
333
|
+
@it.variables["FOO"].origin.line_number.should == 1
|
334
|
+
end
|
335
|
+
|
336
|
+
it "should keep variable source path" do
|
337
|
+
@it.variables["FOO"].origin.source_path.should == "SOURCE_PATH"
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should update the variable's value" do
|
341
|
+
@it.variables["FOO"].should == "456"
|
342
|
+
end
|
343
|
+
|
344
|
+
it "should set the updatad flag" do
|
345
|
+
@it.should be_updated
|
346
|
+
end
|
347
|
+
|
348
|
+
it "should update the source line with a new directive" do
|
349
|
+
@it.lines.first.should == " # :SET: 'FOO', '456'\n"
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
context "storing changes" do
|
354
|
+
before :each do
|
355
|
+
@it.add_text!("A", "Line 1")
|
356
|
+
@it.add_text!("B", "Line 2")
|
357
|
+
@source_file = stub("Source File")
|
358
|
+
@it.source_file = @source_file
|
359
|
+
end
|
360
|
+
|
361
|
+
it "should send all lines to the source file object to be written" do
|
362
|
+
@source_file.should_receive(:write!).with(["Line 1\n", "Line 2\n"])
|
363
|
+
@it.store_changes!
|
364
|
+
end
|
166
365
|
end
|
167
366
|
|
168
367
|
context "given an assortment of lines" do
|
@@ -185,69 +384,69 @@ module Germinate
|
|
185
384
|
|
186
385
|
it "should be able to retrieve all the lines in order" do
|
187
386
|
@it.lines.should == [
|
188
|
-
"FM 1",
|
189
|
-
"FM 2",
|
190
|
-
"CONTROL 1",
|
191
|
-
"TEXT 1",
|
192
|
-
"TEXT 2",
|
193
|
-
"CONTROL 2",
|
194
|
-
"CODE 1",
|
195
|
-
"CONTROL 3",
|
196
|
-
"TEXT 3",
|
197
|
-
"TEXT 4",
|
198
|
-
"CODE 2",
|
199
|
-
"CODE 2l2",
|
200
|
-
"CODE 2l3",
|
201
|
-
"CODE 2l4",
|
387
|
+
"FM 1\n",
|
388
|
+
"FM 2\n",
|
389
|
+
"CONTROL 1\n",
|
390
|
+
"TEXT 1\n",
|
391
|
+
"TEXT 2\n",
|
392
|
+
"CONTROL 2\n",
|
393
|
+
"CODE 1\n",
|
394
|
+
"CONTROL 3\n",
|
395
|
+
"TEXT 3\n",
|
396
|
+
"TEXT 4\n",
|
397
|
+
"CODE 2\n",
|
398
|
+
"CODE 2l2\n",
|
399
|
+
"CODE 2l3\n",
|
400
|
+
"CODE 2l4\n",
|
202
401
|
]
|
203
402
|
end
|
204
403
|
|
205
404
|
it "should be able to retrieve text lines" do
|
206
405
|
@it.text_lines.should == [
|
207
|
-
"TEXT 1",
|
208
|
-
"TEXT 2",
|
209
|
-
"TEXT 3",
|
210
|
-
"TEXT 4"
|
406
|
+
"TEXT 1\n",
|
407
|
+
"TEXT 2\n",
|
408
|
+
"TEXT 3\n",
|
409
|
+
"TEXT 4\n"
|
211
410
|
]
|
212
411
|
end
|
213
412
|
|
214
413
|
it "should be able to retrieve code lines" do
|
215
414
|
@it.code_lines.should == [
|
216
|
-
"CODE 1",
|
217
|
-
"CODE 2",
|
218
|
-
"CODE 2l2",
|
219
|
-
"CODE 2l3",
|
220
|
-
"CODE 2l4",
|
415
|
+
"CODE 1\n",
|
416
|
+
"CODE 2\n",
|
417
|
+
"CODE 2l2\n",
|
418
|
+
"CODE 2l3\n",
|
419
|
+
"CODE 2l4\n",
|
221
420
|
]
|
222
421
|
end
|
223
422
|
|
224
423
|
it "should be able to retrieve front matter" do
|
225
424
|
@it.front_matter_lines.should == [
|
226
|
-
"FM 1",
|
227
|
-
"FM 2",
|
425
|
+
"FM 1\n",
|
426
|
+
"FM 2\n",
|
228
427
|
]
|
229
428
|
end
|
230
429
|
|
231
430
|
it "should be able to retrieve text by section" do
|
232
431
|
@it.section("SECTION1").should == [
|
233
|
-
"TEXT 1",
|
234
|
-
"TEXT 2"
|
432
|
+
"TEXT 1\n",
|
433
|
+
"TEXT 2\n"
|
235
434
|
]
|
236
435
|
@it.section("SECTION2").should == [
|
237
|
-
"TEXT 3",
|
238
|
-
"TEXT 4"
|
436
|
+
"TEXT 3\n",
|
437
|
+
"TEXT 4\n"
|
239
438
|
]
|
240
439
|
end
|
241
440
|
|
242
441
|
it "should be able to retrieve code by sample name" do
|
243
442
|
@it.sample("SECTION1").should == [
|
244
|
-
"CODE 1"
|
443
|
+
"CODE 1\n"
|
245
444
|
]
|
246
445
|
@it.sample("SECTION2").should == [
|
247
|
-
"CODE 2",
|
248
|
-
"CODE 2l2",
|
249
|
-
"CODE 2l3",
|
250
|
-
"CODE 2l4",
|
446
|
+
"CODE 2\n",
|
447
|
+
"CODE 2l2\n",
|
448
|
+
"CODE 2l3\n",
|
449
|
+
"CODE 2l4\n",
|
251
450
|
]
|
252
451
|
end
|
253
452
|
|
@@ -276,8 +475,8 @@ module Germinate
|
|
276
475
|
end
|
277
476
|
|
278
477
|
it "should be able to retrieve lines using a selector" do
|
279
|
-
@it[Selector.new("@SECTION1", nil)].should == ["CODE 1"]
|
280
|
-
@it["@SECTION1"].should == ["CODE 1"]
|
478
|
+
@it[Selector.new("@SECTION1", nil)].should == ["CODE 1\n"]
|
479
|
+
@it["@SECTION1"].should == ["CODE 1\n"]
|
281
480
|
end
|
282
481
|
|
283
482
|
context "given the $SOURCE selector with no subscripts" do
|
@@ -297,50 +496,46 @@ module Germinate
|
|
297
496
|
|
298
497
|
SELECTOR_EXAMPLES = [
|
299
498
|
# Selector Expected Excerpt Expected Type
|
300
|
-
[ "@SECTION1", ["CODE 1"],
|
301
|
-
[ "@SECTION2:1", ["CODE 2"],
|
302
|
-
[ "@SECTION2:2..3", ["CODE 2l2", "CODE 2l3"],
|
303
|
-
[ "@SECTION2:2,2", ["CODE 2l2", "CODE 2l3"],
|
304
|
-
[ "@SECTION2:/l2/../l3/", ["CODE 2l2", "CODE 2l3"],
|
305
|
-
[ "@SECTION2:/l2/.../l3/", ["CODE 2l2"],
|
499
|
+
[ "@SECTION1", ["CODE 1\n"], CodeHunk ],
|
500
|
+
[ "@SECTION2:1", ["CODE 2\n"], CodeHunk ],
|
501
|
+
[ "@SECTION2:2..3", ["CODE 2l2\n", "CODE 2l3\n"], CodeHunk ],
|
502
|
+
[ "@SECTION2:2,2", ["CODE 2l2\n", "CODE 2l3\n"], CodeHunk ],
|
503
|
+
[ "@SECTION2:/l2/../l3/", ["CODE 2l2\n", "CODE 2l3\n"], CodeHunk ],
|
504
|
+
[ "@SECTION2:/l2/.../l3/", ["CODE 2l2\n"], CodeHunk ],
|
306
505
|
[ "@SECTION2:/2/,3", [
|
307
|
-
"CODE 2",
|
308
|
-
"CODE 2l2",
|
309
|
-
"CODE 2l3"],
|
506
|
+
"CODE 2\n",
|
507
|
+
"CODE 2l2\n",
|
508
|
+
"CODE 2l3\n"], CodeHunk ],
|
310
509
|
[ "@SECTION2:/l2/..-1", [
|
311
|
-
"CODE 2l2",
|
312
|
-
"CODE 2l3",
|
313
|
-
"CODE 2l4"],
|
510
|
+
"CODE 2l2\n",
|
511
|
+
"CODE 2l3\n",
|
512
|
+
"CODE 2l4\n"], CodeHunk ],
|
314
513
|
[ "$CODE", [
|
315
|
-
"CODE 1",
|
316
|
-
"CODE 2",
|
317
|
-
"CODE 2l2",
|
318
|
-
"CODE 2l3",
|
319
|
-
"CODE 2l4", ],
|
514
|
+
"CODE 1\n",
|
515
|
+
"CODE 2\n",
|
516
|
+
"CODE 2l2\n",
|
517
|
+
"CODE 2l3\n",
|
518
|
+
"CODE 2l4\n", ], CodeHunk
|
320
519
|
],
|
321
520
|
[ "$SOURCE", [
|
322
|
-
"FM 1",
|
323
|
-
"FM 2",
|
324
|
-
"CONTROL 1",
|
325
|
-
"TEXT 1",
|
326
|
-
"TEXT 2",
|
327
|
-
"CONTROL 2",
|
328
|
-
"CODE 1",
|
329
|
-
"CONTROL 3",
|
330
|
-
"TEXT 3",
|
331
|
-
"TEXT 4",
|
332
|
-
"CODE 2",
|
333
|
-
"CODE 2l2",
|
334
|
-
"CODE 2l3",
|
335
|
-
"CODE 2l4",
|
521
|
+
"FM 1\n",
|
522
|
+
"FM 2\n",
|
523
|
+
"CONTROL 1\n",
|
524
|
+
"TEXT 1\n",
|
525
|
+
"TEXT 2\n",
|
526
|
+
"CONTROL 2\n",
|
527
|
+
"CODE 1\n",
|
528
|
+
"CONTROL 3\n",
|
529
|
+
"TEXT 3\n",
|
530
|
+
"TEXT 4\n",
|
531
|
+
"CODE 2\n",
|
532
|
+
"CODE 2l2\n",
|
533
|
+
"CODE 2l3\n",
|
534
|
+
"CODE 2l4\n",
|
336
535
|
], FileHunk
|
337
536
|
],
|
338
537
|
[ "$TEXT", [
|
339
|
-
"TEXT 1",
|
340
|
-
"TEXT 2",
|
341
|
-
"TEXT 3",
|
342
|
-
"TEXT 4"
|
343
|
-
], CodeHunk
|
538
|
+
"TEXT 1 TEXT 2 TEXT 3 TEXT 4" ], TextHunk
|
344
539
|
],
|
345
540
|
|
346
541
|
]
|