Check-in [be5950faa4]
Overview
Comment:Initial implementation of a diff program and required libraries
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:be5950faa4368797e3a5565710cee07fd210aba8
User & Date: spaskalev on 2014-12-14 00:16:31
Other Links: manifest | tags
Context
2014-12-14
01:03
[bits] fixed package documentation [bits] added tests for the bool-backed vector [diff] added a real test, commented out the visual debug aids [plaindiff] added comments, removed commented code, added a helper []line getter [math] removed math package as it is currently unused check-in: d5adabf68e user: spaskalev tags: trunk
00:16
Initial implementation of a diff program and required libraries check-in: be5950faa4 user: spaskalev tags: trunk
00:04
initial empty check-in check-in: 6c8d2e7c32 user: root tags: trunk
Changes

Added src/0dev.org/bits/bits.go version [6b768844ff].

























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Package bits provides a bit vector backed with uints
package bits

import (
	"strconv"
)

// The Vector interface defines methods on the bit vector
type Vector interface {
	// Retrieves the bit at the designated position
	Peek(uint) bool
	// Sets the bit at the designated position
	Poke(uint, bool)
	// Flips the bit at the designated position
	Flip(uint)
	// Returns the total number of elements supported by the vector
	Len() uint
}

type boolvector []bool

// Retrieves the bit at the designated position
func (v boolvector) Peek(pos uint) bool {
	return v[pos]
}

// Sets the bit at the designated position
func (v boolvector) Poke(pos uint, val bool) {
	v[pos] = val
}

// Flips the bit at the designated position
func (v boolvector) Flip(pos uint) {
	v[pos] = !v[pos]
}

// Returns the total number of elements supported by the vector
func (v boolvector) Len() uint {
	return uint(len(v))
}

type vector []uint

// Retrieves the bit at the designated position
func (v vector) Peek(pos uint) bool {
	var slot, offset uint = at(pos)
	return (v[slot] & (1 << offset)) > 0
}

// Sets the bit at the designated position
func (v vector) Poke(pos uint, val bool) {
	var slot, offset uint = at(pos)
	if val {
		v[slot] |= (1 << offset)
	} else {
		v[slot] &^= (1 << offset)
	}
}

// Flips the bit at the designated position
func (v vector) Flip(pos uint) {
	var slot, offset uint = at(pos)
	v[slot] ^= (1 << offset)
}

// Returns the total number of elements supported by the vector
func (v vector) Len() uint {
	return uint(len(v) * strconv.IntSize)
}

func at(pos uint) (uint, uint) {
	return pos / strconv.IntSize, pos % strconv.IntSize
}

// Create a new bit vector sized up to the desired number of elements
func New(size uint) Vector {
	var length uint = size / strconv.IntSize

	if size%strconv.IntSize > 0 {
		// Allocate one additional slot if the desired
		// size is does not divide by 32/64
		length++
	}

	var slice []uint = make([]uint, length)
	return vector(slice)
}

func NewBool(size uint) Vector {
	var slice []bool = make([]bool, size)
	return boolvector(slice)
}

Added src/0dev.org/bits/bits_test.go version [c68b8d450a].



































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package bits

import (
	"strconv"
	"testing"
)

func TestSize(t *testing.T) {
	sizes := []uint{0, 31, 32, 33, 61, 63, 64, 127, 128, 129}

	for _, size := range sizes {
		v := New(size)
		if v.Len() < size || v.Len() > size+strconv.IntSize {
			t.Error("Invalid length", v.Len(), "expected", size)
		}
	}
}

func TestEmpty(t *testing.T) {
	var size uint = 128
	v := New(size)

	// Check if it is empty by default
	for i := uint(0); i < size; i++ {
		if v.Peek(i) {
			t.Error("Invalid raised bit at", i)
		}
	}
}

func TestBasic(t *testing.T) {
	var size uint = 128
	v := New(size)

	// Raise and lower each position explicitly
	for i := uint(0); i < size; i++ {
		v.Poke(i, true)
		if !v.Peek(i) {
			t.Error("Invalid lowered bit at", i)
		}

		v.Poke(i, false)
		if v.Peek(i) {
			t.Error("Invalid raised bit at", i)
		}
	}
}

func TestFlip(t *testing.T) {
	var size uint = 128
	v := New(size)

	// Raise and lower each position by flipping
	for i := uint(0); i < size; i++ {
		v.Flip(i)
		if !v.Peek(i) {
			t.Error("Invalid lowered bit at", i)
		}

		v.Flip(i)
		if v.Peek(i) {
			t.Error("Invalid raised bit at", i)
		}
	}
}

Added src/0dev.org/commands/plaindiff/main.go version [d48eb80ca4].











































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package main

import (
	diff "0dev.org/diff"
	"bufio"
	"flag"
	"fmt"
	"hash"
	"hash/fnv"
	"io"
	"os"
)

const usage = "Usage: plaindiff <file1> <file2>"

func main() {
	flag.Parse()

	var args []string = flag.Args()
	if len(args) != 2 {
		os.Stderr.WriteString(usage)
		os.Exit(1)
	}

	var hd hashDiff
	hd.hash = fnv.New64a()
	hd.first = read(args[0], hd.hash)
	hd.second = read(args[1], hd.hash)

	var result diff.Delta = diff.Diff(&hd)
	//var marks []diff.Mark = make([]diff.Mark, len(result.Added)+len(result.Removed))

	//var added, removed []diff.Mark = result.Added, result.Removed
	fmt.Println(result)

	gen := source(result)
	for have, added, mark := gen(); have; have, added, mark = gen() {
		var from []line
		if added {
			from = hd.second
		} else {
			from = hd.first
		}

		fmt.Println()
		for i := mark.From; i < mark.Length; i++ {
			fmt.Print(i)
			if added {
				fmt.Print(" > ")
			} else {
				fmt.Print(" < ")
			}
			fmt.Println(from[i].text)
		}
	}

}

func source(d diff.Delta) func() (bool, bool, diff.Mark) {
	var addedAt, removedAt int = 0, 0
	return func() (bool, bool, diff.Mark) {
		var addsOver bool = addedAt == len(d.Added)
		var removesOver bool = removedAt == len(d.Removed)

		var add, remove diff.Mark

		// Check whether both mark slices have been exhausted
		if addsOver && removesOver {
			return false, false, diff.Mark{}
		}

		// Return an add if removes are over
		if removesOver {
			add = d.Added[addedAt]
			addedAt++
			return true, true, add
		}

		// Return a remove if the adds are over
		if addsOver {
			remove = d.Removed[removedAt]
			removedAt++
			return true, false, remove
		}

		add = d.Added[addedAt]
		remove = d.Removed[removedAt]

		// Prioritize a remove if it happens before an add
		if remove.From <= add.From {
			removedAt++
			return true, false, remove
		}

		// Else
		addedAt++
		return true, true, add

	}
}

// A line-based diff.Interface implementation
type hashDiff struct {
	first, second []line
	hash          hash.Hash64
}

func (h *hashDiff) Equal(i, j int) bool {
	// return h.first[i].text == h.second[j].text
	if h.first[i].hash != h.second[j].hash {
		return false
	} else {
		return h.first[i].text == h.second[j].text
	}
}

func (h *hashDiff) Len() (int, int) {
	return len(h.first), len(h.second)
}

type line struct {
	hash uint64
	text string
}

// Reads all lines in a file and returns a line entry for each
func read(name string, h hash.Hash64) []line {
	var f *os.File
	var e error

	f, e = os.Open(name)
	fatal(e)

	var result []line = lines(f, h)
	fatal(f.Close())

	return result
}

// Reads all lines and returns a line entry for each
func lines(r io.Reader, h hash.Hash64) []line {
	var scanner *bufio.Scanner = bufio.NewScanner(r)
	var result []line = make([]line, 0)
	for scanner.Scan() {
		h.Reset()
		h.Write(scanner.Bytes())
		result = append(result, line{hash: h.Sum64(), text: scanner.Text()})
	}
	return result
}

// Write an error to stderr
func stderr(e error) {
	if e != nil {
		os.Stderr.WriteString(e.Error())
	}
}

// Write an error to stderr and exit
func fatal(e error) {
	if e != nil {
		stderr(e)
		os.Exit(1)
	}
}

Added src/0dev.org/commands/plaindiff/rime1.txt version [9a1d11f8a2].

























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
It is an ancient Mariner,
And he stoppeth one of three.
'By thy long grey beard and glittering eye,
Now wherefore stopp'st thou me?

The Bridegroom's doors are opened wide,
And I am next of kin;
The guests are met, the feast is set:
May'st hear the merry din.'

He holds him with his skinny hand,
'There was a ship,' quoth he.
'Hold off! unhand me, grey-beard loon!'
Eftsoons his hand dropt he.

He holds him with his glittering eye—
The Wedding-Guest stood still,
And listens like a three years' child:
The Mariner hath his will.

The Wedding-Guest sat on a stone:
He cannot choose but hear;
And thus spake on that ancient man,
The bright-eyed Mariner.

'The ship was cheered, the harbour cleared,
Merrily did we drop
Below the kirk, below the hill,
Below the lighthouse top.

The Sun came up upon the left,
Out of the sea came he!
And he shone bright, and on the right
Went down into the sea.

Higher and higher every day,
Till over the mast at noon—'
The Wedding-Guest here beat his breast,
For he heard the loud bassoon.

The bride hath paced into the hall,
Red as a rose is she;
Nodding their heads before her goes
The merry minstrelsy.

The Wedding-Guest he beat his breast,
Yet he cannot choose but hear;
And thus spake on that ancient man,
The bright-eyed Mariner.

And now the STORM-BLAST came, and he
Was tyrannous and strong:
He struck with his o'ertaking wings,
And chased us south along.

With sloping masts and dipping prow,
As who pursued with yell and blow
Still treads the shadow of his foe,
And forward bends his head,
The ship drove fast, loud roared the blast,
And southward aye we fled.

And now there came both mist and snow,
And it grew wondrous cold:
And ice, mast-high, came floating by,
As green as emerald.

And through the drifts the snowy clifts
Did send a dismal sheen:
Nor shapes of men nor beasts we ken—
The ice was all between.

The ice was here, the ice was there,
The ice was all around:
It cracked and growled, and roared and howled,
Like noises in a swound!

At length did cross an Albatross,
Thorough the fog it came;
As if it had been a Christian soul,
We hailed it in God's name.

It ate the food it ne'er had eat,
And round and round it flew.
The ice did split with a thunder-fit;
The helmsman steered us through!

And a good south wind sprung up behind;
The Albatross did follow,
And every day, for food or play,
Came to the mariner's hollo!

In mist or cloud, on mast or shroud,
It perched for vespers nine;
Whiles all the night, through fog-smoke white,
Glimmered the white Moon-shine.'

'God save thee, ancient Mariner!
From the fiends, that plague thee thus!—
Why look'st thou so?'—With my cross-bow
I shot the ALBATROSS.

PART II
The Sun now rose upon the right:
Out of the sea came he,
Still hid in mist, and on the left
Went down into the sea.

And the good south wind still blew behind,
But no sweet bird did follow,
Nor any day for food or play
Came to the mariner's hollo!

And I had done a hellish thing,
And it would work 'em woe:
For all averred, I had killed the bird
That made the breeze to blow.
Ah wretch! said they, the bird to slay,
That made the breeze to blow!

Nor dim nor red, like God's own head,
The glorious Sun uprist:
Then all averred, I had killed the bird
That brought the fog and mist.
'Twas right, said they, such birds to slay,
That bring the fog and mist.

The fair breeze blew, the white foam flew,
The furrow followed free;
We were the first that ever burst
Into that silent sea.

Down dropt the breeze, the sails dropt down,
'Twas sad as sad could be;
And we did speak only to break
The silence of the sea!

All in a hot and copper sky,
The bloody Sun, at noon,
Right up above the mast did stand,
No bigger than the Moon.

Day after day, day after day,
We stuck, nor breath nor motion;
As idle as a painted ship
Upon a painted ocean.

Water, water, every where,
And all the boards did shrink;
Water, water, every where,
Nor any drop to drink.

The very deep did rot: O Christ!
That ever this should be!
Yea, slimy things did crawl with legs
Upon the slimy sea.

About, about, in reel and rout
The death-fires danced at night;
The water, like a witch's oils,
Burnt green, and blue and white.

And some in dreams assurèd were
Of the Spirit that plagued us so;
Nine fathom deep he had followed us
From the land of mist and snow.

And every tongue, through utter drought,
Was withered at the root;
We could not speak, no more than if
We had been choked with soot.

Ah! well a-day! what evil looks
Had I from old and young!
Instead of the cross, the Albatross
About my neck was hung.

PART III
There passed a weary time. Each throat
Was parched, and glazed each eye.
A weary time! a weary time!
How glazed each weary eye,

When looking westward, I beheld
A something in the sky.

At first it seemed a little speck,
And then it seemed a mist;
It moved and moved, and took at last
A certain shape, I wist.

A speck, a mist, a shape, I wist!
And still it neared and neared:
As if it dodged a water-sprite,
It plunged and tacked and veered.

With throats unslaked, with black lips baked,
We could nor laugh nor wail;
Through utter drought all dumb we stood!
I bit my arm, I sucked the blood,
And cried, A sail! a sail!

With throats unslaked, with black lips baked,
Agape they heard me call:
Gramercy! they for joy did grin,
And all at once their breath drew in.
As they were drinking all.

See! see! (I cried) she tacks no more!
Hither to work us weal;
Without a breeze, without a tide,
She steadies with upright keel!

The western wave was all a-flame.
The day was well nigh done!
Almost upon the western wave
Rested the broad bright Sun;
When that strange shape drove suddenly
Betwixt us and the Sun.

And straight the Sun was flecked with bars,
(Heaven's Mother send us grace!)
As if through a dungeon-grate he peered
With broad and burning face.

Alas! (thought I, and my heart beat loud)
How fast she nears and nears!
Are those her sails that glance in the Sun,
Like restless gossameres?

Are those her ribs through which the Sun
Did peer, as through a grate?
And is that Woman all her crew?
Is that a DEATH? and are there two?
Is DEATH that woman's mate?

Her lips were red, her looks were free,
Her locks were yellow as gold:
Her skin was as white as leprosy,
The Night-mare LIFE-IN-DEATH was she,
Who thicks man's blood with cold.

The naked hulk alongside came,
And the twain were casting dice;
'The game is done! I've won! I've won!'
Quoth she, and whistles thrice.

The Sun's rim dips; the stars rush out;
At one stride comes the dark;
With far-heard whisper, o'er the sea,
Off shot the spectre-bark.

We listened and looked sideways up!
Fear at my heart, as at a cup,
My life-blood seemed to sip!
The stars were dim, and thick the night,
The steersman's face by his lamp gleamed white;
From the sails the dew did drip—
Till clomb above the eastern bar
The hornèd Moon, with one bright star
Within the nether tip.

One after one, by the star-dogged Moon,
Too quick for groan or sigh,
Each turned his face with a ghastly pang,
And cursed me with his eye.

Four times fifty living men,
(And I heard nor sigh nor groan)
With heavy thump, a lifeless lump,
They dropped down one by one.

The souls did from their bodies fly,—
They fled to bliss or woe!
And every soul, it passed me by,
Like the whizz of my cross-bow!

PART IV
'I fear thee, ancient Mariner!
I fear thy skinny hand!
And thou art long, and lank, and brown,
As is the ribbed sea-sand.

I fear thee and thy glittering eye,
And thy skinny hand, so brown.'—
Fear not, fear not, thou Wedding-Guest!
This body dropt not down.

Alone, alone, all, all alone,
Alone on a wide wide sea!
And never a saint took pity on
My soul in agony.

The many men, so beautiful!
And they all dead did lie:
And a thousand thousand slimy things
Lived on; and so did I.

I looked upon the rotting sea,
And drew my eyes away;
I looked upon the rotting deck,
And there the dead men lay.

I looked to heaven, and tried to pray;
But or ever a prayer had gusht,
A wicked whisper came, and made
My heart as dry as dust.

I closed my lids, and kept them close,
And the balls like pulses beat;
For the sky and the sea, and the sea and the sky
Lay dead like a load on my weary eye,
And the dead were at my feet.

The cold sweat melted from their limbs,
Nor rot nor reek did they:
The look with which they looked on me
Had never passed away.

An orphan's curse would drag to hell
A spirit from on high;
But oh! more horrible than that
Is the curse in a dead man's eye!
Seven days, seven nights, I saw that curse,
And yet I could not die.

The moving Moon went up the sky,
And no where did abide:
Softly she was going up,
And a star or two beside—

Her beams bemocked the sultry main,
Like April hoar-frost spread;
But where the ship's huge shadow lay,
The charmèd water burnt alway
A still and awful red.

Beyond the shadow of the ship,
I watched the water-snakes:
They moved in tracks of shining white,
And when they reared, the elfish light
Fell off in hoary flakes.

Within the shadow of the ship
I watched their rich attire:
Blue, glossy green, and velvet black,
They coiled and swam; and every track
Was a flash of golden fire.

O happy living things! no tongue
Their beauty might declare:
A spring of love gushed from my heart,
And I blessed them unaware:
Sure my kind saint took pity on me,
And I blessed them unaware.

The self-same moment I could pray;
And from my neck so free
The Albatross fell off, and sank
Like lead into the sea.

PART V
Oh sleep! it is a gentle thing,
Beloved from pole to pole!
To Mary Queen the praise be given!
She sent the gentle sleep from Heaven,
That slid into my soul.

The silly buckets on the deck,
That had so long remained,
I dreamt that they were filled with dew;
And when I awoke, it rained.

My lips were wet, my throat was cold,
My garments all were dank;
Sure I had drunken in my dreams,
And still my body drank.

I moved, and could not feel my limbs:
I was so light—almost
I thought that I had died in sleep,
And was a blessed ghost.

And soon I heard a roaring wind:
It did not come anear;
But with its sound it shook the sails,
That were so thin and sere.

The upper air burst into life!
And a hundred fire-flags sheen,
To and fro they were hurried about!
And to and fro, and in and out,
The wan stars danced between.

And the coming wind did roar more loud,
And the sails did sigh like sedge,
And the rain poured down from one black cloud;
The Moon was at its edge.

The thick black cloud was cleft, and still
The Moon was at its side:
Like waters shot from some high crag,
The lightning fell with never a jag,
A river steep and wide.

The loud wind never reached the ship,
Yet now the ship moved on!
Beneath the lightning and the Moon
The dead men gave a groan.

They groaned, they stirred, they all uprose,
Nor spake, nor moved their eyes;
It had been strange, even in a dream,
To have seen those dead men rise.

The helmsman steered, the ship moved on;
Yet never a breeze up-blew;
The mariners all 'gan work the ropes,
Where they were wont to do;
They raised their limbs like lifeless tools—
We were a ghastly crew.

The body of my brother's son
Stood by me, knee to knee:
The body and I pulled at one rope,
But he said nought to me.

'I fear thee, ancient Mariner!'
Be calm, thou Wedding-Guest!
'Twas not those souls that fled in pain,
Which to their corses came again,
But a troop of spirits blest:

For when it dawned—they dropped their arms,
And clustered round the mast;
Sweet sounds rose slowly through their mouths,
And from their bodies passed.

Around, around, flew each sweet sound,
Then darted to the Sun;
Slowly the sounds came back again,
Now mixed, now one by one.

Sometimes a-dropping from the sky
I heard the sky-lark sing;
Sometimes all little birds that are,
How they seemed to fill the sea and air
With their sweet jargoning!

And now 'twas like all instruments,
Now like a lonely flute;
And now it is an angel's song,
That makes the heavens be mute.

It ceased; yet still the sails made on
A pleasant noise till noon,
A noise like of a hidden brook
In the leafy month of June,
That to the sleeping woods all night
Singeth a quiet tune.

Till noon we quietly sailed on,
Yet never a breeze did breathe:
Slowly and smoothly went the ship,
Moved onward from beneath.

Under the keel nine fathom deep,
From the land of mist and snow,
The spirit slid: and it was he
That made the ship to go.
The sails at noon left off their tune,
And the ship stood still also.

The Sun, right up above the mast,
Had fixed her to the ocean:
But in a minute she 'gan stir,
With a short uneasy motion—
Backwards and forwards half her length
With a short uneasy motion.

Then like a pawing horse let go,
She made a sudden bound:
It flung the blood into my head,
And I fell down in a swound.

How long in that same fit I lay,
I have not to declare;
But ere my living life returned,
I heard and in my soul discerned
Two voices in the air.

'Is it he?' quoth one, 'Is this the man?
By him who died on cross,
With his cruel bow he laid full low
The harmless Albatross.

The spirit who bideth by himself
In the land of mist and snow,
He loved the bird that loved the man
Who shot him with his bow.'

The other was a softer voice,
As soft as honey-dew:
Quoth he, 'The man hath penance done,
And penance more will do.'

PART VI

First Voice
'But tell me, tell me! speak again,
Thy soft response renewing—
What makes that ship drive on so fast?
What is the ocean doing?'

Second Voice
Still as a slave before his lord,
The ocean hath no blast;
His great bright eye most silently
Up to the Moon is cast—

If he may know which way to go;
For she guides him smooth or grim.
See, brother, see! how graciously
She looketh down on him.'

First Voice
'But why drives on that ship so fast,
Without or wave or wind?'

Second Voice
'The air is cut away before,
And closes from behind.

Fly, brother, fly! more high, more high!
Or we shall be belated:
For slow and slow that ship will go,
When the Mariner's trance is abated.'

I woke, and we were sailing on
As in a gentle weather:
'Twas night, calm night, the moon was high;
The dead men stood together.

All stood together on the deck,
For a charnel-dungeon fitter:
All fixed on me their stony eyes,
That in the Moon did glitter.

The pang, the curse, with which they died,
Had never passed away:
I could not draw my eyes from theirs,
Nor turn them up to pray.

And now this spell was snapt: once more
I viewed the ocean green,
And looked far forth, yet little saw
Of what had else been seen—

Like one, that on a lonesome road
Doth walk in fear and dread,
And having once turned round walks on,
And turns no more his head;
Because he knows, a frightful fiend
Doth close behind him tread.

But soon there breathed a wind on me,
Nor sound nor motion made:
Its path was not upon the sea,
In ripple or in shade.

It raised my hair, it fanned my cheek
Like a meadow-gale of spring—
It mingled strangely with my fears,
Yet it felt like a welcoming.

Swiftly, swiftly flew the ship,
Yet she sailed softly too:
Sweetly, sweetly blew the breeze—
On me alone it blew.

Oh! dream of joy! is this indeed
The light-house top I see?
Is this the hill? is this the kirk?
Is this mine own countree?

We drifted o'er the harbour-bar,
And I with sobs did pray—
O let me be awake, my God!
Or let me sleep alway.

The harbour-bay was clear as glass,
So smoothly it was strewn!
And on the bay the moonlight lay,
And the shadow of the Moon.

The rock shone bright, the kirk no less,
That stands above the rock:
The moonlight steeped in silentness
The steady weathercock.

And the bay was white with silent light,
Till rising from the same,
Full many shapes, that shadows were,
In crimson colours came.

A little distance from the prow
Those crimson shadows were:
I turned my eyes upon the deck—
Oh, Christ! what saw I there!

Each corse lay flat, lifeless and flat,
And, by the holy rood!
A man all light, a seraph-man,
On every corse there stood.

This seraph-band, each waved his hand:
It was a heavenly sight!
They stood as signals to the land,
Each one a lovely light;

This seraph-band, each waved his hand,
No voice did they impart—
No voice; but oh! the silence sank
Like music on my heart.

But soon I heard the dash of oars,
I heard the Pilot's cheer;
My head was turned perforce away
And I saw a boat appear.

The Pilot and the Pilot's boy,
I heard them coming fast:
Dear Lord in Heaven! it was a joy
The dead men could not blast.

I saw a third—I heard his voice:
It is the Hermit good!
He singeth loud his godly hymns
That he makes in the wood.
He'll shrieve my soul, he'll wash away
The Albatross's blood.

PART VII
This Hermit good lives in that wood
Which slopes down to the sea.
How loudly his sweet voice he rears!
He loves to talk with marineres
That come from a far countree.

He kneels at morn, and noon, and eve—
He hath a cushion plump:
It is the moss that wholly hides
The rotted old oak-stump.

The skiff-boat neared: I heard them talk,
'Why, this is strange, I trow!
Where are those lights so many and fair,
That signal made but now?'

'Strange, by my faith!' the Hermit said—
'And they answered not our cheer!
The planks looked warped! and see those sails,
How thin they are and sere!
I never saw aught like to them,
Unless perchance it were

Brown skeletons of leaves that lag
My forest-brook along;
When the ivy-tod is heavy with snow,
And the owlet whoops to the wolf below,
That eats the she-wolf's young.'

'Dear Lord! it hath a fiendish look—
(The Pilot made reply)
I am a-feared'—'Push on, push on!'
Said the Hermit cheerily.

The boat came closer to the ship,
But I nor spake nor stirred;
The boat came close beneath the ship,
And straight a sound was heard.

Under the water it rumbled on,
Still louder and more dread:
It reached the ship, it split the bay;
The ship went down like lead.

Stunned by that loud and dreadful sound,
Which sky and ocean smote,
Like one that hath been seven days drowned
My body lay afloat;
But swift as dreams, myself I found
Within the Pilot's boat.

Upon the whirl, where sank the ship,
The boat spun round and round;
And all was still, save that the hill
Was telling of the sound.

I moved my lips—the Pilot shrieked
And fell down in a fit;
The holy Hermit raised his eyes,
And prayed where he did sit.

I took the oars: the Pilot's boy,
Who now doth crazy go,
Laughed loud and long, and all the while
His eyes went to and fro.
'Ha! ha!' quoth he, 'full plain I see,
The Devil knows how to row.'

And now, all in my own countree,
I stood on the firm land!
The Hermit stepped forth from the boat,
And scarcely he could stand.

'O shrieve me, shrieve me, holy man!'
The Hermit crossed his brow.
'Say quick,' quoth he, 'I bid thee say—
What manner of man art thou?'

Forthwith this frame of mine was wrenched
With a woful agony,
Which forced me to begin my tale;
And then it left me free.


Since then, at an uncertain hour,
That agony returns:
And till my ghastly tale is told,
This heart within me burns.

I pass, like night, from land to land;
I have strange power of speech;
That moment that his face I see,
I know the man that must hear me:
To him my tale I teach.

What loud uproar bursts from that door!
The wedding-guests are there:
But in the garden-bower the bride
And bride-maids singing are:
And hark the little vesper bell,
Which biddeth me to prayer!

O Wedding-Guest! this soul hath been
Alone on a wide wide sea:
So lonely 'twas, that God himself
Scarce seemèd there to be.

O sweeter than the marriage-feast,
'Tis sweeter far to me,
To walk together to the kirk
With a goodly company!—

To walk together to the kirk,
And all together pray,
While each to his great Father bends,
Old men, and babes, and loving friends
And youths and maidens gay!

Farewell, farewell! but this I tell
To thee, thou Wedding-Guest!
He prayeth well, who loveth well
Both man and bird and beast.

He prayeth best, who loveth best
All things both great and small;
For the dear God who loveth us,
He made and loveth all.

The Mariner, whose eye is bright,
Whose beard with age is hoar,
Is gone: and now the Wedding-Guest
Turned from the bridegroom's door.

He went like one that hath been stunned,
And is of sense forlorn:
A sadder and a wiser man,
He rose the morrow morn.

Added src/0dev.org/commands/plaindiff/rime2.txt version [4986eb5009].



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
It is an ancient Mariner,
And he stoppeth one of three.
'By thy long grey beard and glittering eye,
Now wherefore stopp'st thou me?

The Bridegroom's doors are opened wide,
And I am next of kin;
The guests are met, the feast is set:
May'st hear the merry din.'

The Bridegroom's doors are opened wide,
And I am next of kin;
The guests are met, the feast is set:
May'st hear the merry din.'


He holds him with his skinny hand,
'There was a ship,' quoth he.
'Hold off! unhand me, grey-beard loon!'
Eftsoons his hand dropt he.

He holds him with his glittering eye—
The Wedding-Guest stood still,
And listens like a three years' child:
The Mariner hath his will.

The Wedding-Guest sat on a stone:
He cannot choose but hear;
And thus spake on that ancient man,
The bright-eyed Mariner.

'The ship was cheered, the harbour cleared,
Merrily did we drop
Below the kirk, below the hill,
Below the lighthouse top.

The Sun came up upon the left,
Out of the sea came he!
And he shone bright, and on the right
Went down into the sea.

Higher and higher every day,
Till over the mast at noon—'
The Wedding-Guest here beat his breast,
For he heard the loud bassoon.

The bride hath paced into the hall,
Red as a rose is she;
Nodding their heads before her goes
The merry minstrelsy.

The Wedding-Guest he beat his breast,
Yet he cannot choose but hear;
And thus spake on that ancient man,
The bright-eyed Mariner.

And now the STORM-BLAST came, and he
Was tyrannous and strong:
He struck with his o'ertaking wings,
And chased us south along.

With sloping masts and dipping prow,
As who pursued with yell and blow
Still treads the shadow of his foe,
And forward bends his head,
The ship drove fast, loud roared the blast,
And southward aye we fled.

And now there came both mist and snow,
And it grew wondrous cold:
And ice, mast-high, came floating by,
As green as emerald.

And through the drifts the snowy clifts
Did send a dismal sheen:
Nor shapes of men nor beasts we ken—
The ice was all between.

The ice was here, the ice was there,
The ice was all around:
It cracked and growled, and roared and howled,
Like noises in a swound!

At length did cross an Albatross,
Thorough the fog it came;
As if it had been a Christian soul,
We hailed it in God's name.

It ate the food it ne'er had eat,
And round and round it flew.
The ice did split with a thunder-fit;
The helmsman steered us through!

And a good south wind sprung up behind;
The Albatross did follow,
And every day, for food or play,
Came to the mariner's hollo!

In mist or cloud, on mast or shroud,
It perched for vespers nine;
Whiles all the night, through fog-smoke white,
Glimmered the white Moon-shine.'

'God save thee, ancient Mariner!
From the fiends, that plague thee thus!—
Why look'st thou so?'—With my cross-bow
I shot the ALBATROSS.

PART II
The Sun now rose upon the right:
Out of the sea came he,
Still hid in mist, and on the left
Went down into the sea.

And the good south wind still blew behind,
But no sweet bird did follow,
Nor any day for food or play
Came to the mariner's hollo!

And I had done a hellish thing,
And it would work 'em woe:
For all averred, I had killed the bird
That made the breeze to blow.
Ah wretch! said they, the bird to slay,
That made the breeze to blow!

Nor dim nor red, like God's own head,
The glorious Sun uprist:
Then all averred, I had killed the bird
That brought the fog and mist.
'Twas right, said they, such birds to slay,
That bring the fog and mist.

The fair breeze blew, the white foam flew,
The furrow followed free;
We were the first that ever burst
Into that silent sea.

Down dropt the breeze, the sails dropt down,
'Twas sad as sad could be;
And we did speak only to break
The silence of the sea!

All in a hot and copper sky,
The bloody Sun, at noon,
Right up above the mast did stand,
No bigger than the Moon.

Day after day, day after day,
We stuck, nor breath nor motion;
As idle as a painted ship
Upon a painted ocean.

Water, water, every where,
And all the boards did shrink;
Water, water, every where,
Nor any drop to drink.

The very deep did rot: O Christ!
That ever this should be!
Yea, slimy things did crawl with legs
Upon the slimy sea.

About, about, in reel and rout
The death-fires danced at night;
The water, like a witch's oils,
Burnt green, and blue and white.

And some in dreams assurèd were
Of the Spirit that plagued us so;
Nine fathom deep he had followed us
From the land of mist and snow.

And every tongue, through utter drought,
Was withered at the root;
We could not speak, no more than if
We had been choked with soot.

Ah! well a-day! what evil looks
Had I from old and young!
Instead of the cross, the Albatross
About my neck was hung.

PART III
There passed a weary time. Each throat
Was parched, and glazed each eye.
A weary time! a weary time!
How glazed each weary eye,

When looking westward, I beheld
A something in the sky.

At first it seemed a little speck,
And then it seemed a mist;
It moved and moved, and took at last
A certain shape, I wist.

A speck, a mist, a shape, I wist!
And still it neared and neared:
As if it dodged a water-sprite,
It plunged and tacked and veered.

With throats unslaked, with black lips baked,
We could nor laugh nor wail;
Through utter drought all dumb we stood!
I bit my arm, I sucked the blood,
And cried, A sail! a sail!

With throats unslaked, with black lips baked,
Agape they heard me call:
Gramercy! they for joy did grin,
And all at once their breath drew in.
As they were drinking all.

See! see! (I cried) she tacks no more!
Hither to work us weal;
Without a breeze, without a tide,
She steadies with upright keel!

The western wave was all a-flame.
The day was well nigh done!
Almost upon the western wave
Rested the broad bright Sun;
When that strange shape drove suddenly
Betwixt us and the Sun.

And straight the Sun was flecked with bars,
(Heaven's Mother send us grace!)
As if through a dungeon-grate he peered
With broad and burning face.

Alas! (thought I, and my heart beat loud)
How fast she nears and nears!
Are those her sails that glance in the Sun,
Like restless gossameres?

Are those her ribs through which the Sun
Did peer, as through a grate?
And is that Woman all her crew?
Is that a DEATH? and are there two?
Is DEATH that woman's mate?

Her lips were red, her looks were free,
Her locks were yellow as gold:
Her skin was as white as leprosy,
The Night-mare LIFE-IN-DEATH was she,
Who thicks man's blood with cold.

The naked hulk alongside came,
And the twain were casting dice;
'The game is done! I've won! I've won!'
Quoth she, and whistles thrice.

The Sun's rim dips; the stars rush out;
At one stride comes the dark;
With far-heard whisper, o'er the sea,
Off shot the spectre-bark.

One after one, by the star-dogged Moon,
Too quick for groan or sigh,
Each turned his face with a ghastly pang,
And cursed me with his eye.

We listened and looked sideways up!
Fear at my heart, as at a cup,
My life-blood seemed to sip!
The stars were dim, and thick the night,
The steersman's face by his lamp gleamed white;
From the sails the dew did drip—
Till clomb above the eastern bar
The hornèd Moon, with one bright star
Within the nether tip.

Four times fifty living men,
(And I heard nor sigh nor groan)
With heavy thump, a lifeless lump,
They dropped down one by one.

The souls did from their bodies fly,—
They fled to bliss or woe!
And every soul, it passed me by,
Like the whizz of my cross-bow!

PART IV
'I fear thee, ancient Mariner!
I fear thy skinny hand!
And thou art long, and lank, and brown,
As is the ribbed sea-sand.

I fear thee and thy glittering eye,
And thy skinny hand, so brown.'—
Fear not, fear not, thou Wedding-Guest!
This body dropt not down.

Alone, alone, all, all alone,
Alone on a wide wide sea!
And never a saint took pity on
My soul in agony.

The many men, so beautiful!
And they all dead did lie:
And a thousand thousand slimy things
Lived on; and so did I.

I looked upon the rotting sea,
And drew my eyes away;
I looked upon the rotting deck,
And there the dead men lay.

I looked to heaven, and tried to pray;
But or ever a prayer had gusht,
A wicked whisper came, and made
My heart as dry as dust.

I closed my lids, and kept them close,
And the balls like pulses beat;
For the sky and the sea, and the sea and the sky
Lay dead like a load on my weary eye,
And the dead were at my feet.

The cold sweat melted from their limbs,
Nor rot nor reek did they:
The look with which they looked on me
Had never passed away.

An orphan's curse would drag to hell
A spirit from on high;
But oh! more horrible than that
Is the curse in a dead man's eye!
Seven days, seven nights, I saw that curse,
And yet I could not die.

The moving Moon went up the sky,
And no where did abide:
Softly she was going up,
And a star or two beside—

Her beams bemocked the sultry main,
Like April hoar-frost spread;
But where the ship's huge shadow lay,
The charmèd water burnt alway
A still and awful red.

Beyond the shadow of the ship,
I watched the water-snakes:
They moved in tracks of shining white,
And when they reared, the elfish light
Fell off in hoary flakes.

Within the shadow of the ship
I watched their rich attire:
Blue, glossy green, and velvet black,
They coiled and swam; and every track
Was a flash of golden fire.

O happy living things! no tongue
Their beauty might declare:
A spring of love gushed from my heart,
And I blessed them unaware:
Sure my kind saint took pity on me,
And I blessed them unaware.

The self-same moment I could pray;
And from my neck so free
The Albatross fell off, and sank
Like lead into the sea.

PART V
Oh sleep! it is a gentle thing,
Beloved from pole to pole!
To Mary Queen the praise be given!
She sent the gentle sleep from Heaven,
That slid into my soul.

The silly buckets on the deck,
That had so long remained,
I dreamt that they were filled with dew;
And when I awoke, it rained.

My lips were wet, my throat was cold,
My garments all were dank;
Sure I had drunken in my dreams,
And still my body drank.

I moved, and could not feel my limbs:
I was so light—almost
I thought that I had died in sleep,
And was a blessed ghost.

And soon I heard a roaring wind:
It did not come anear;
But with its sound it shook the sails,
That were so thin and sere.

The upper air burst into life!
And a hundred fire-flags sheen,
To and fro they were hurried about!
And to and fro, and in and out,
The wan stars danced between.

And the coming wind did roar more loud,
And the sails did sigh like sedge,
And the rain poured down from one black cloud;
The Moon was at its edge.

The thick black cloud was cleft, and still
The Moon was at its side:
Like waters shot from some high crag,
The lightning fell with never a jag,
A river steep and wide.

The loud wind never reached the ship,
Yet now the ship moved on!
Beneath the lightning and the Moon
The dead men gave a groan.

They groaned, they stirred, they all uprose,
Nor spake, nor moved their eyes;
It had been strange, even in a dream,
To have seen those dead men rise.

The helmsman steered, the ship moved on;
Yet never a breeze up-blew;
The mariners all 'gan work the ropes,
Where they were wont to do;
They raised their limbs like lifeless tools—
We were a ghastly crew.

The body of my brother's son
Stood by me, knee to knee:
The body and I pulled at one rope,
But he said nought to me.

'I fear thee, ancient Mariner!'
Be calm, thou Wedding-Guest!
'Twas not those souls that fled in pain,
Which to their corses came again,
But a troop of spirits blest:

For when it dawned—they dropped their arms,
And clustered round the mast;
Sweet sounds rose slowly through their mouths,
And from their bodies passed.

Around, around, flew each sweet sound,
Then darted to the Sun;
Slowly the sounds came back again,
Now mixed, now one by one.

Sometimes a-dropping from the sky
I heard the sky-lark sing;
Sometimes all little birds that are,
How they seemed to fill the sea and air
With their sweet jargoning!

And now 'twas like all instruments,
Now like a lonely flute;
And now it is an angel's song,
That makes the heavens be mute.

It ceased; yet still the sails made on
A pleasant noise till noon,
A noise like of a hidden brook
In the leafy month of June,
That to the sleeping woods all night
Singeth a quiet tune.

Till noon we quietly sailed on,
Yet never a breeze did breathe:
Slowly and smoothly went the ship,
Moved onward from beneath.

Under the keel nine fathom deep,
From the land of mist and snow,
The spirit slid: and it was he
That made the ship to go.
The sails at noon left off their tune,
And the ship stood still also.

The Sun, right up above the mast,
Had fixed her to the ocean:
But in a minute she 'gan stir,
With a short uneasy motion—
Backwards and forwards half her length
With a short uneasy motion.

Then like a pawing horse let go,
She made a sudden bound:
It flung the blood into my head,
And I fell down in a swound.

How long in that same fit I lay,
I have not to declare;
But ere my living life returned,
I heard and in my soul discerned
Two voices in the air.

'Is it he?' quoth one, 'Is this the man?
By him who died on cross,
With his cruel bow he laid full low
The harmless Albatross.

The spirit who bideth by himself
In the land of mist and snow,
He loved the bird that loved the man
Who shot him with his bow.'

The other was a softer voice,
As soft as honey-dew:
Quoth he, 'The man hath penance done,
And penance more will do.'

PART VI

First Voice
'But tell me, tell me! speak again,
Thy soft response renewing—
What makes that ship drive on so fast?
What is the ocean doing?'

Second Voice
Still as a slave before his lord,
The ocean hath no blast;
His great bright eye most silently
Up to the Moon is cast—

If he may know which way to go;
For she guides him smooth or grim.
See, brother, see! how graciously
She looketh down on him.'

First Voice
'But why drives on that ship so fast,
Without or wave or wind?'

Second Voice
'The air is cut away before,
And closes from behind.

Fly, brother, fly! more high, more high!
Or we shall be belated:
For slow and slow that ship will go,
When the Mariner's trance is abated.'

I woke, and we were sailing on
As in a gentle weather:
'Twas night, calm night, the moon was high;
The dead men stood together.

All stood together on the deck,
For a charnel-dungeon fitter:
All fixed on me their stony eyes,
That in the Moon did glitter.

The pang, the curse, with which they died,
Had never passed away:
I could not draw my eyes from theirs,
Nor turn them up to pray.

And now this spell was snapt: once more
I viewed the ocean green,
And looked far forth, yet little saw
Of what had else been seen—

Like one, that on a lonesome road
Doth walk in fear and dread,
And having once turned round walks on,
And turns no more his head;
Because he knows, a frightful fiend
Doth close behind him tread.

But soon there breathed a wind on me,
Nor sound nor motion made:
Its path was not upon the sea,
In ripple or in shade.

It raised my hair, it fanned my cheek
Like a meadow-gale of spring—
It mingled strangely with my fears,
Yet it felt like a welcoming.

Swiftly, swiftly flew the ship,
Yet she sailed softly too:
Sweetly, sweetly blew the breeze—
On me alone it blew.

Oh! dream of joy! is this indeed
The light-house top I see?
Is this the hill? is this the kirk?
Is this mine own countree?

We drifted o'er the harbour-bar,
And I with sobs did pray—
O let me be awake, my God!
Or let me sleep alway.

The harbour-bay was clear as glass,
So smoothly it was strewn!
And on the bay the moonlight lay,
And the shadow of the Moon.

The rock shone bright, the kirk no less,
That stands above the rock:
The moonlight steeped in silentness
The steady weathercock.

And the bay was white with silent light,
Till rising from the same,
Full many shapes, that shadows were,
In crimson colours came.

A little distance from the prow
Those crimson shadows were:
I turned my eyes upon the deck—
Oh, Christ! what saw I there!

Each corse lay flat, lifeless and flat,
And, by the holy rood!
A man all light, a seraph-man,
On every corse there stood.

This seraph-band, each waved his hand:
It was a heavenly sight!
They stood as signals to the land,
Each one a lovely light;

This seraph-band, each waved his hand,
No voice did they impart—
No voice; but oh! the silence sank
Like music on my heart.

But soon I heard the dash of oars,
I heard the Pilot's cheer;
My head was turned perforce away
And I saw a boat appear.

The Pilot and the Pilot's boy,
I heard them coming fast:
Dear Lord in Heaven! it was a joy
The dead men could not blast.

I saw a third—I heard his voice:
It is the Hermit good!
He singeth loud his godly hymns
That he makes in the wood.
He'll shrieve my soul, he'll wash away
The Albatross's blood.

PART VII
This Hermit good lives in that wood
Which slopes down to the sea.
How loudly his sweet voice he rears!
He loves to talk with marineres
That come from a far countree.

He kneels at morn, and noon, and eve—
He hath a cushion plump:
It is the moss that wholly hides
The rotted old oak-stump.

The skiff-boat neared: I heard them talk,
'Why, this is strange, I trow!
Where are those lights so many and fair,
That signal made but now?'

'Strange, by my faith!' the Hermit said—
'And they answered not our cheer!
The planks looked warped! and see those sails,
How thin they are and sere!
I never saw aught like to them,
Unless perchance it were

Brown skeletons of leaves that lag
My forest-brook along;
When the ivy-tod is heavy with snow,
And the owlet whoops to the wolf below,
That eats the she-wolf's young.'

'Dear Lord! it hath a fiendish look—
(The Pilot made reply)
I am a-feared'—'Push on, push on!'
Said the Hermit cheerily.

The boat came closer to the ship,
But I nor spake nor stirred;
The boat came close beneath the ship,
And straight a sound was heard.

Under the water it rumbled on,
Still louder and more dread:
It reached the ship, it split the bay;
The ship went down like lead.

Stunned by that loud and dreadful sound,
Which sky and ocean smote,
Like one that hath been seven days drowned
My body lay afloat;
But swift as dreams, myself I found
Within the Pilot's boat.

Upon the whirl, where sank the ship,
The boat spun round and round;
And all was still, save that the hill
Was telling of the sound.

I moved my lips—the Pilot shrieked
And fell down in a fit;
The holy Hermit raised his eyes,
And prayed where he did sit.

I took the oars: the Pilot's boy,
Who now doth crazy go,
Laughed loud and long, and all the while
His eyes went to and fro.
'Ha! ha!' quoth he, 'full plain I see,
The Devil knows how to row.'

And now, all in my own countree,
I stood on the firm land!
The Hermit stepped forth from the boat,
And scarcely he could stand.

'O shrieve me, shrieve me, holy man!'
The Hermit crossed his brow.
'Say quick,' quoth he, 'I bid thee say—
What manner of man art thou?'

Forthwith this frame of mine was wrenched
With a woful agony,
Which forced me to begin my tale;
And then it left me free.


Since then, at an uncertain hour,
That agony returns:
And till my ghastly tale is told,
This heart within me burns.

I pass, like night, from land to land;
I have strange power of speech;
That moment that his face I see,
I know the man that must hear me:
To him my tale I teach.

What loud uproar bursts from that door!
The wedding-guests are there:
But in the garden-bower the bride
And bride-maids singing are:
And hark the little vesper bell,
Which biddeth me to prayer!

O Wedding-Guest! this soul hath been
Alone on a wide wide sea:
So lonely 'twas, that God himself
Scarce seemèd there to be.

O sweeter than the marriage-feast,
'Tis sweeter far to me,
To walk together to the kirk
With a goodly company!—

To walk together to the kirk,
And all together pray,
While each to his great Father bends,
Old men, and babes, and loving friends
And youths and maidens gay!

Farewell, farewell! but this I tell
To thee, thou Wedding-Guest!
He prayeth well, who loveth well
Both man and bird and beast.

He prayeth best, who loveth best
All things both great and small;
For the dear God who loveth us,
He made and loveth all.

He went like one that hath been stunned,
And is of sense forlorn:
A sadder and a wiser man,
He rose the morrow morn.

Added src/0dev.org/diff/diff.go version [f9b64d21c6].





































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Package diff provides a diff implementation
// for finite, indexable sequences with comparable elements
package diff

import (
	bits "0dev.org/bits"
)

// Interface abstracts the required knowledge to perform a diff
// on any two comparable, fixed-length sequences
type Interface interface {
	// The sequences' lengths
	Len() (int, int)
	// True when the sequences' elements at those indices are equal
	Equal(int, int) bool
}

// A Mark struct marks a length in sequence starting with an offset
type Mark struct {
	From   int
	Length int
}

// A Delta struct is the result of a Diff operation
type Delta struct {
	Added   []Mark
	Removed []Mark
}

// Diffs the provided data and returns e Delta struct
// with added entries' indices in the second sequence and removed from the first
func Diff(data Interface) Delta {
	var len1, len2 = data.Len()
	var mat matrix = matrix{v: bits.New(uint(len1 * len2)), lenX: len1, lenY: len2}

	for i := 0; i < len1; i++ {
		for j := 0; j < len2; j++ {
			mat.v.Poke(mat.at(i, j), data.Equal(i, j))
		}
	}

	return recursiveDiff(box{0, 0, len1, len2}, mat)
}

type match struct {
	x, y   int
	length int
}

type box struct {
	x, y       int
	lenX, lenY int
}

// A helper structure that stores absolute dimension along a linear bit vector
// so that it can always properly translate (x, y) -> z on the vector
type matrix struct {
	v          bits.Vector
	lenX, lenY int
}

// Translates (x, y) to an absolute position on the bit vector
func (m *matrix) at(x, y int) uint {
	return uint(y + (x * m.lenY))
}

func recursiveDiff(bounds box, mat matrix) Delta {
	var m match = largest(bounds, mat)

	if m.length == 0 { // Recursion terminates
		var immediate Delta
		if bounds.lenY-bounds.y > 0 {
			immediate.Added = []Mark{Mark{bounds.y, bounds.lenY}}
		}
		if bounds.lenX-bounds.x > 0 {
			immediate.Removed = []Mark{Mark{bounds.x, bounds.lenX}}
		}
		return immediate
	}

	var left Delta = recursiveDiff(box{bounds.x, bounds.y, m.x, m.y}, mat)
	var right Delta = recursiveDiff(box{m.x + m.length, m.y + m.length, bounds.lenX, bounds.lenY}, mat)

	var result Delta

	result.Added = append(left.Added, right.Added...)
	result.Removed = append(left.Removed, right.Removed...)

	return result
}

// Finds the largest common substring by looking at the provided match matrix
// starting from (bounds.x, bounds.y) with lengths bounds.lenX, bounds.lenY
func largest(bounds box, mat matrix) (result match) {
	for i := bounds.x; i < bounds.lenX; i++ {
		var m match = search(i, bounds.y, bounds.lenX, bounds.lenY, mat)
		if m.length > result.length {
			result = m
		}
	}
	for j := bounds.y + 1; j < bounds.lenY; j++ {
		var m match = search(bounds.x, j, bounds.lenX, bounds.lenY, mat)
		if m.length > result.length {
			result = m
		}
	}
	return
}

// Searches the main diagonal for the longest sequential match line
func search(x, y, lenX, lenY int, mat matrix) (result match) {
	var inMatch bool
	var m match
	for step := 0; step+x < lenX && step+y < lenY; step++ {
		if mat.v.Peek(mat.at(step+x, step+y)) {
			if !inMatch { // Create a new current record if there is none ...
				inMatch, m.x, m.y, m.length = true, step+x, step+y, 1
			} else { // ... otherwise just increment the existing
				m.length++
			}

			if m.length > result.length {
				result = m // Store it if it is longer ...
			}
		} else { // End of current of match
			inMatch = false // ... and reset the current one
		}
	}
	return
}

Added src/0dev.org/diff/diff_test.go version [6f1c8e9901].

















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package diff

import (
	bits "0dev.org/bits"
	"fmt"
	"testing"
)

type diffSlice struct {
	first  []rune
	second []rune
}

func (d diffSlice) Len() (int, int) {
	return len(d.first), len(d.second)
}

func (d diffSlice) Equal(i, j int) bool {
	return d.first[i] == d.second[j]
}

func TestLCS(t *testing.T) {
	fmt.Println("")

	data := diffSlice{
		[]rune("abcdefgh"),
		[]rune("abbcedfh"),
	}

	fmt.Println(Diff(data))

	// first, second, total := LCS(data)
	// fmt.Println(first, second, total)
}

func TestWTF(t *testing.T) {
	data := diffSlice{
		[]rune("abcdefgh"),
		[]rune("abbcedfh"),
	}

	var len1, len2 int = data.Len()
	var mat matrix = matrix{v: bits.NewBool(uint(len1 * len2)), lenX: len1, lenY: len2}

	for i := 0; i < len1; i++ {
		for j := 0; j < len2; j++ {
			mat.v.Poke(mat.at(i, j), data.Equal(i, j))
		}
	}

	debugPrint(box{5, 5, 6, 6}, mat)
	debugPrint(box{5, 5, 7, 7}, mat)
	debugPrint(box{5, 5, 8, 8}, mat)
}

func debugPrint(bounds box, mat matrix) {
	// Debug print
	fmt.Printf("-%d-%d--%d-%d--\n", bounds.x, bounds.y, bounds.lenX, bounds.lenY)
	for i := bounds.x; i < bounds.lenX; i++ {
		fmt.Print("| ")
		for j := bounds.y; j < bounds.lenY; j++ {
			//if vector.Peek(uint(j + (i * bounds.lenY))) {
			if mat.v.Peek(mat.at(i, j)) {
				fmt.Print("\\")
			} else {
				fmt.Print(".")
			}
		}
		fmt.Println(" |")
	}
	fmt.Println("------------")
}

Added src/0dev.org/math/math.go version [1a240e5264].

































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Helper functions that really belong in the SDK or in a generic library...
package math

func MinInt(i1, i2 int) int {
	if i1 <= i2 {
		return i1
	}
	return i2
}

func MaxInt(i1, i2 int) int {
	if i1 >= i2 {
		return i1
	}
	return i2
}