diff --git a/diff/css/style.css b/diff/css/style.css index 42faed89..88ad135a 100644 --- a/diff/css/style.css +++ b/diff/css/style.css @@ -83,7 +83,8 @@ body { font-size: 14px; font-weight: normal; margin-left: 5px; - width: 200px; + overflow: hidden; + width: 310px; text-align: left; } @@ -145,6 +146,7 @@ body { font-weight: normal; margin: 0px; margin-bottom: 4px; + overflow: hidden; padding: 2px 40px 2px 12px; position: relative; } @@ -157,6 +159,23 @@ body { -webkit-transition: background 0s; } +.menulist .menulistitem .delete { + background: url('../img/x.png') center no-repeat; + background-size: auto 15px; + cursor: default; + filter: alpha(opacity=70); + height: 10px; + opacity: 0.7; + position: absolute; + right: 5px; + top: 10px; + width: 10px; +} + +.menulist .menulistitem .delete:hover { + opacity: 1; +} + input[type=text] { background-color: #fff; border: 1px solid #d9d9d9; @@ -331,7 +350,6 @@ input[type=text].form-error{ padding: 0 10px; position: absolute; text-align: center; - top: 46px; transition: opacity 0.13s; -webkit-transition: opacity 0.13s; white-space: nowrap; @@ -396,6 +414,10 @@ input[type=text].form-error{ width: 24px; } +#left-side .tooltip.new-diff { + top: 42px; +} + #left-side #prev-chunk { background: url('../img/arrow-up.jpg') center no-repeat; background-size: auto 20px; @@ -408,8 +430,12 @@ input[type=text].form-error{ } #left-side .tooltip.prev-chunk { - left: 13px; - top: 105px; + left: 0px; + top: 110px; +} + +#left-side .tooltip.prev-chunk .pointer { + left: 23px; } #left-side #next-chunk { @@ -423,11 +449,15 @@ input[type=text].form-error{ width: 20px; } -#left-side .tooltip.prev-chunk { - left: 13px; +#left-side .tooltip.next-chunk { + left: 0px; top: 135px; } +#left-side .tooltip.next-chunk .pointer { + left: 23px; +} + #left-side #expand-all, #left-side #collapse-all { cursor: pointer; @@ -443,18 +473,26 @@ input[type=text].form-error{ } #left-side .tooltip.expand-all { - top: 65px; + top: 73px; left: 0px; } +#left-side .tooltip.expand-all .pointer { + left: 15px; +} + #left-side #collapse-all { background: url('../img/minus_all.png') center no-repeat; left: 21px; } #left-side .tooltip.collapse-all { - top: 65px; - left: 23px; + top: 73px; + left: 18px; +} + +#left-side .tooltip.collapse-all .pointer { + left: 15px; } #left-side #expand-all.disabled, @@ -477,31 +515,31 @@ input[type=text].form-error{ width: 30px; } -#check-container { - border-right: 2px solid #666; -} - -#arrow-container::-webkit-scrollbar { +#arrow-container::-webkit-scrollbar, +#check-container::-webkit-scrollbar { display: none; } #arrow-container .arrow { background: url('../img/arrow-right.png') center no-repeat; - background-size: auto 95px; + background-size: auto 85px; height: 16px; opacity: 0; } #check-container .check { - background: url('../img/checkmark.png') center no-repeat; - background-size: auto 16px; - height: 16px; + background: url('../img/arrow-left.png') center no-repeat; + background-size: auto 85px; + height: 20px; + margin-left: 5px; + margin-bottom: -4px; opacity: 0; } #arrow-container .undo, #check-container .undo, -#arrow-container .holder { +#arrow-container .holder, +#check-container .holder { background: url('../img/undo.svg') right no-repeat; height: 16px; opacity: 0; @@ -545,6 +583,11 @@ div.file-name { padding-top: 15px; } +span.file-name-info { + color: #777; + font-size: 11px; +} + .file-diff, textarea { background: #fff; @@ -563,13 +606,11 @@ textarea { width: 100%; } -#file0-container .file-diff::-webkit-scrollbar, -#file1-container .file-diff::-webkit-scrollbar { +#file0-container .file-diff::-webkit-scrollbar { display: none; } -#file0-container .file-diff, -#file1-container .file-diff { +#file0-container .file-diff { border-right: 1px solid #999; } @@ -590,10 +631,16 @@ div.button.save { .tooltip.save { right: 0px; + top: 39px; +} + +.tooltip.save .pointer { + left: 43px; } .tooltip.edit { right: 55px; + top: 39px; } div.button.done { @@ -760,6 +807,15 @@ div.button.done { background: none; } +#file0-container .file-diff div.correct span.ins { + display: block; + background: none; +} + +#file0-container .file-diff div.correct span.del { + display: none; +} + .file-diff div.correct span { background: none; } diff --git a/diff/img/arrow-l.jpeg b/diff/img/arrow-l.jpeg new file mode 100644 index 00000000..fa9822d8 Binary files /dev/null and b/diff/img/arrow-l.jpeg differ diff --git a/diff/img/arrow-r.jpeg b/diff/img/arrow-r.jpeg new file mode 100644 index 00000000..3681a21e Binary files /dev/null and b/diff/img/arrow-r.jpeg differ diff --git a/diff/js/background.js b/diff/js/background.js index 24065ab0..4c80630f 100644 --- a/diff/js/background.js +++ b/diff/js/background.js @@ -11,4 +11,8 @@ function onLaunched(launchData) { }); } +chrome.runtime.onInstalled.addListener(function() { + chrome.storage.local.set({}); +}); + chrome.experimental.app.onLaunched.addListener(onLaunched); diff --git a/diff/js/diff.js b/diff/js/diff.js index 5c0cf21f..b9e0e35e 100644 --- a/diff/js/diff.js +++ b/diff/js/diff.js @@ -17,10 +17,10 @@ $(document).ready(function() { var buttons = [ '#new-diff', '#save', '#edit', - // '#expand-all', - // '#collapse-all', - // '#next-chunk', - // '#prev-chunk' + '#expand-all', + '#collapse-all', + '#next-chunk', + '#prev-chunk' ]; for (var i = 0; i < buttons.length; i++) { @@ -100,7 +100,7 @@ $(document).ready(function() { function keyboardShortcut(event) { if (event.which == 74) selectNextChunk(); - else if (event.which == 75) + else if (evenjjkt.which == 75) selectPrevChunk(); else if ((event.which == 76) && (selectedChunk > 0) && (selectedChunk <= totalChunks)) @@ -129,8 +129,10 @@ function getText(fileNum) { && !$(lines[i]).hasClass('hidden')) { var line = $(lines[i]).children(); for (var j = 0; j < line.length; j++) { - if ($(lines[i]).hasClass('left')) { - if (!$(line[j]).hasClass('ins')) + if ($(lines[i]).hasClass('merged')) { + if (fileNum == 1 && !$(line[j]).hasClass('ins')) + text += $(line[j]).html(); + if (fileNum == 0 && !$(line[j]).hasClass('del')) text += $(line[j]).html(); } else { if (fileNum == 0 && !$(line[j]).hasClass('ins')) @@ -218,6 +220,12 @@ function computeDiff(file1, file2) { } } +function patchToFile2(file1, patchText) { + var patches = dmp.patch_fromText(patchText); + var patchData = dmp.patch_apply(patches, file1); + return patchData[0]; +} + function createHtmlLines(diffs) { var pattern_amp = /&/g; var pattern_lt = / div').each(function() { if (!isBlankLine(this, realLineNum)) { - $(this).html('
' + $(this).html() + '
'); + $(this).html('
' + $(this).html() + '
'); $(this).prepend('
' + lineNum + '
'); if ($(this).parent().hasClass('0')) $(this).prepend('
'); @@ -620,10 +634,10 @@ function moveChunk(chunkNum) { for (var i = 0; i < lines1.length; i++) { var realLineNum = getRealLine(lines1[i]); var text = ''; - if ($('.file-diff.0 .' + realLineNum).children('.text.right').length > 0) + if ($('.file-diff.0 .' + realLineNum).children('.text.orig').length > 0) text = $('.file-diff.0 .' + realLineNum + ' > div.text').html(); - var div = '
' + text + '
'; - $('.file-diff.1 > .' + realLineNum + ' > .text.right').addClass('hidden'); + var div = '
' + text + '
'; + $('.file-diff.1 > .' + realLineNum + ' > .text.orig').addClass('hidden'); $('.file-diff.1 > .' + realLineNum).append(div); $('.file-diff.0 > .' + realLineNum).addClass('fix'); $('.file-diff.1 > .' + realLineNum).addClass('fix'); @@ -650,8 +664,8 @@ function undoMoveChunk(chunkNum) { var lines2 = $('.file-diff.1').children('div.' + chunkNum); for (var i = 0; i < lines1.length; i++) { var lineNum = getRealLine(lines1[i]); - $('.file-diff.1 > .' + lineNum + ' > .text.right').removeClass('hidden'); - $('.file-diff.1 > .' + lineNum + ' > .left').remove(); + $('.file-diff.1 > .' + lineNum + ' > .text.orig').removeClass('hidden'); + $('.file-diff.1 > .' + lineNum + ' > .merged').remove(); $('.file-diff.0 > .' + lineNum).removeClass('fix'); $('.file-diff.1 > .' + lineNum).removeClass('fix'); } @@ -677,6 +691,12 @@ function checkRight(chunkNum) { var lines2 = $('.file-diff.1').children('div.' + chunkNum); for (var i = 0; i < lines1.length; i++) { var realLineNum = getRealLine(lines1[i]); + var text = ''; + if ($('.file-diff.1 .' + realLineNum).children('.text.orig').length > 0) + text = $('.file-diff.1 .' + realLineNum + ' > div.text').html(); + var div = '
' + text + '
'; + $('.file-diff.0 > .' + realLineNum + ' > .text.orig').addClass('hidden'); + $('.file-diff.0 > .' + realLineNum).append(div); $('.file-diff.0 > .' + realLineNum).addClass('correct'); $('.file-diff.1 > .' + realLineNum).addClass('correct'); } @@ -690,6 +710,8 @@ function checkRight(chunkNum) { $('#num-diffs').html(numChunks + ' conflict'); else $('#num-diffs').html(numChunks + ' conflicts'); + var text = getText(0); + saveFile(text, 'file0.txt'); var num = parseInt(chunkNum.slice(6)); if (selectedChunk == num) selectNextChunk(); @@ -700,6 +722,8 @@ function undoCheckRight(chunkNum) { var lines2 = $('.file-diff.1').children('div.' + chunkNum); for (var i = 0; i < lines1.length; i++) { var lineNum = getRealLine(lines1[i]); + $('.file-diff.0 > .' + lineNum + ' > .text.orig').removeClass('hidden'); + $('.file-diff.0 > .' + lineNum + ' > .merged').remove(); $('.file-diff.0 > .' + lineNum).removeClass('correct'); $('.file-diff.1 > .' + lineNum).removeClass('correct'); } @@ -714,6 +738,8 @@ function undoCheckRight(chunkNum) { $('#num-diffs').html(numChunks + ' conflict'); else $('#num-diffs').html(numChunks + ' conflicts'); + var text = getText(0); + saveFile(text, 'file0.txt'); var num = parseInt(chunkNum.slice(6)); selectChunk(num); } diff --git a/diff/js/filesystem.js b/diff/js/filesystem.js index 28bc7858..f930548e 100644 --- a/diff/js/filesystem.js +++ b/diff/js/filesystem.js @@ -6,7 +6,7 @@ var FILE_SIZE = 1024 * 1024; var displayNames = [null, null]; -var paths = [null, null]; +var paths = {}; var fileEntries = [null, null]; var texts = [null, null]; var urlNum = null; @@ -110,21 +110,34 @@ $(document).ready(function() { function registerMenulistitemClicks() { $('li.menulistitem').click(function() { - if (!$(this).hasClass('selected')) { - var fileNum = $(this).parent().attr('class').split(' ')[1]; - var fileName = $(this).text(); + if ($(this).hasClass('choose-new-file')) { + var fileNum = parseInt($(this).parent().attr('class').split(' ')[1]); + selectFile(fileNum, true); + } + else if (!$(this).hasClass('selected')) { + var fileNum = parseInt($(this).parent().attr('class').split(' ')[1]); + var fileName = $(this).children('.file-name').text(); $(this).parent().children('li.menulistitem').removeClass('selected'); $(this).addClass('selected'); displayNames[fileNum] = fileName; - texts[fileNum] = fileHistory[fileName]; + texts[fileNum] = fileHistory[paths[fileName]]; + setFileName(fileNum); saveFile(texts[fileNum], 'file' + fileNum + '.txt'); - saveFile(displayNames[fileNum], 'name' + fileNum + '.txt'); - submitDiffs(); + saveFile(paths[displayNames[fileNum]], 'name' + fileNum + '.txt'); + computeDiff(texts[0], texts[1]); } - console.log($('.menulist').hasClass('shown')); - console.log($(this).parent().hasClass('shown')); $('.menulist').removeClass('shown'); - console.log($('.menulist').hasClass('shown')); + }); + + $('li.menulistitem .delete').click(function() { + var name = $(this).parent().children('.file-name').text(); + var path = paths[name]; + delete fileHistory[path]; + chrome.storage.local.set({'fileHistory': fileHistory}); + $('li.menulistitem').each(function() { + if ($(this).children('.file-name').text() == name) + $(this).remove(); + }) }); } @@ -139,11 +152,13 @@ function selectURL() { function(text) { var urlSecs = url.split('/'); displayNames[urlNum] = urlSecs[urlSecs.length-1]; + paths[displayNames[urlNum]] = url; badURL = false; texts[urlNum] = text; + rememberFile(fileNum); var name = 'file' + urlNum + '.txt'; saveFile(text, name); - saveFile(displayNames[urlNum], 'name' + urlNum + '.txt'); + saveFile(paths[displayNames[urlNum]], 'name' + urlNum + '.txt'); }, 'html' ); @@ -152,12 +167,14 @@ function selectURL() { } } -function selectFile(fileNum) { +function selectFile(fileNum, chooseNew) { chrome.fileSystem.chooseFile({'type': 'openFile'}, function(fileEntry) { fileEntries[fileNum] = fileEntry; chrome.fileSystem.getDisplayPath(fileEntry, function(path) { - path = path.split('/'); - displayNames[fileNum] = path[path.length - 1]; + var pathList = path.split('/'); + var l = pathList.length - 1; + displayNames[fileNum] = pathList[l]; + paths[displayNames[fileNum]] = path; $('.modal-dialog.new-diff .file-name.' + fileNum).text(displayNames[fileNum]); fileEntries[fileNum].file(function(file) { var reader = new FileReader(); @@ -168,8 +185,10 @@ function selectFile(fileNum) { texts[fileNum] = this.result; rememberFile(fileNum); var name = 'file' + fileNum + '.txt'; - saveFile(this.result, name); - saveFile(displayNames[fileNum], 'name' + fileNum + '.txt'); + saveFile(texts[fileNum], name); + saveFile(paths[displayNames[fileNum]], 'name' + fileNum + '.txt'); + if (chooseNew) + chooseNewFile(fileNum); }; reader.readAsText(file); }, errorHandler); @@ -177,36 +196,89 @@ function selectFile(fileNum) { }); } -function rememberFile(fileNum) { - fileHistory[displayNames[fileNum]] = texts[fileNum]; - $('ul.menulist.' + fileNum + ' .menulistitem').removeClass('selected'); - $('ul.menulist.' + fileNum).append(''); - $('ul.menulist.' + ((fileNum + 1) % 2)).append(''); - registerMenulistitemClicks(); +function getExtension(fileName) { + var parts = fileName.split('.'); + return parts[parts.length - 1]; } -function selectRememberedFile(fileNum, fileName) { - texts[fileNum] = fileHistory[fileName]; - displayNames[fileNum] = fileName; - submitDiffs(); +function isPatch(fileName) { + return getExtension(fileName).toLowerCase() == 'patch'; +} + +function addToMenulistDisplayed(listNum, displayNum, selected) { + var name = displayNames[displayNum]; + var path = paths[displayNames[displayNum]].split('/').slice(-5, -2).join('/'); + $('ul.menulist.' + listNum).append( + ''); +} + +function addToMenulist(path) { + var pathSecs = path.split('/'); + var name = pathSecs[pathSecs.length - 1]; + var displayPath = pathSecs.slice(-5, -2).join('/'); + paths[name] = path; + for (var listNum = 0; listNum < 2; listNum++) { + $('ul.menulist.' + listNum).append( + ''); + } +} + +function setFileName(fileNum) { + var name = displayNames[fileNum]; + var path = paths[displayNames[fileNum]].split('/').slice(-5, -2).join('/'); + $('#file' + fileNum + '-container .label.file-name').html( + '' + name + '' + + ' - ' + path + ''); } function createDropdown() { - for (var i = 0; i < 2; i++) { - $('ul.menulist.' + i).append('' - + ''); + $('ul.menulist').html(''); + for (path in fileHistory) { + if (path == paths[displayNames[0]]) { + addToMenulistDisplayed(0, 0, 'selected'); + addToMenulistDisplayed(0, 1, ''); + } + else if (path == paths[displayNames[1]]) { + addToMenulistDisplayed(1, 0, ''); + addToMenulistDisplayed(1, 1, 'selected'); + } + else { + addToMenulist(path); + } } registerMenulistitemClicks(); } +function rememberFile(fileNum) { + fileHistory[paths[displayNames[fileNum]]] = texts[fileNum]; + chrome.storage.local.set({'fileHistory': fileHistory}); + $('ul.menulist.' + fileNum + ' .menulistitem').removeClass('selected'); + addToMenulistDisplayed(fileNum, fileNum, 'selected'); + addToMenulistDisplayed(((fileNum + 1) % 2), fileNum, ''); + registerMenulistitemClicks(); +} + +function selectRememberedFile(fileNum, fileName) { + texts[fileNum] = fileHistory[paths[fileName]]; + displayNames[fileNum] = fileName; + submitDiffs(); +} + function submitDiffs() { if (texts[0] && texts[1] && !badURL) { - $('.file-name.0').text(displayNames[0]); - $('.file-name.1').text(displayNames[1]); + setFileName(0); + setFileName(1); + if (isPatch(displayNames[1])) { + texts[1] = patchToFile2(texts[0], texts[1]); + rememberFile(1); + saveFile(texts[1], 'file1.txt'); + } computeDiff(texts[0], texts[1]); $('.modal-dialog.new-diff .close-button').click(); $('.button.edit').removeClass('hidden'); @@ -222,6 +294,24 @@ function submitDiffs() { } } +function chooseNewFile(fileNum) { + setFileName(fileNum); + if (texts[0] && texts[1]) { + if ((fileNum == 1) && isPatch(displayNames[1])) { + texts[1] = patchToFile2(texts[0], texts[1]); + rememberFile(1); + saveFile(texts[1], 'file1.txt'); + } + computeDiff(texts[0], texts[1]); + } + else + $('.file-diff.' + fileNum).text(texts[fileNum]); + if (fileNum == 1) { + $('.button.edit').removeClass('hidden'); + $('.button.save').removeClass('hidden'); + } +} + function saveFile(content, fileName) { window.webkitRequestFileSystem( window.PERSISTENT, @@ -263,10 +353,13 @@ function readFile(fileName, fileNum) { var reader = new FileReader(); reader.onloadend = function(e) { texts[fileNum] = this.result; - fileHistory[displayNames[fileNum]] = texts[fileNum]; if (texts[0] && texts[1]) { - createDropdown(); - computeDiff(texts[0], texts[1]); + chrome.storage.local.get(function(items) { + for (key in items['fileHistory']) + fileHistory[key] = items['fileHistory'][key]; + createDropdown(); + computeDiff(texts[0], texts[1]); + }); } }; reader.readAsText(file); @@ -284,8 +377,12 @@ function readFileName(fileName, fileNum) { fileEntry.file(function(file) { var reader = new FileReader(); reader.onloadend = function(e) { - displayNames[fileNum] = this.result; - $('.file-name.' + fileNum).text(displayNames[fileNum]); + path = this.result; + var pathList = path.split('/'); + var l = pathList.length - 1; + displayNames[fileNum] = pathList[l]; + paths[displayNames[fileNum]] = path; + setFileName(fileNum); readFile('file' + fileNum + '.txt', fileNum); }; reader.readAsText(file); diff --git a/diff/main.html b/diff/main.html index b9098288..7f58b6fe 100644 --- a/diff/main.html +++ b/diff/main.html @@ -51,21 +51,15 @@ No File Selected ​​​​​​​​​​​ -
+
@@ -73,15 +67,12 @@ No File Selected ​​​​​​​​​​​ - - - + @@ -91,8 +82,6 @@
-
-
diff --git a/diff/manifest.json b/diff/manifest.json index d811693f..01014b3b 100644 --- a/diff/manifest.json +++ b/diff/manifest.json @@ -10,6 +10,7 @@ } }, "permissions": ["experimental", + "storage", "unlimitedStorage", "fileSystem", "fileSystemWrite", diff --git a/diff/tests/.DS_Store b/diff/tests/.DS_Store new file mode 100644 index 00000000..5008ddfc Binary files /dev/null and b/diff/tests/.DS_Store differ diff --git a/diff/tests/patch.patch b/diff/tests/patch.patch new file mode 100644 index 00000000..2566ff0c --- /dev/null +++ b/diff/tests/patch.patch @@ -0,0 +1,70 @@ +@@ -10,37 +10,38 @@ + very model of a +-moder ++cartoo + n Major-General, +@@ -45,53 +45,52 @@ + al,%0A +-I've information vegetable, anim ++My animation's comical, unusu + al, and +-miner ++whimsic + al,%0A +@@ -126,37 +126,36 @@ + and I quote the +-fight ++play + s historical%0AFro +@@ -205,240 +205,8 @@ + l;%0A%0A +-I'm very well acquainted, too, with matters mathematical,%0AI understand equations, both the simple and quadratical,%0AAbout binomial theorem I'm teeming with a lot o' news,%0AWith many cheerful facts about the square of the hypotenuse.%0A%0A + I'm +@@ -331,36 +331,37 @@ + ers +-vegetable, anim ++comical, unusu + al, and +-miner ++whimsic + al,%0A +@@ -377,37 +377,38 @@ + very model of a +-moder ++cartoo + n Major-General. +@@ -409,16 +409,235 @@ + neral.%0A%0A ++I know our mythic history, King Arthur's and Sir Caradoc's;%0AI answer hard acrostics, I've a pretty taste for paradox,%0AI quote in elegiacs all the crimes of Heliogabalus,%0AIn conics I can floor peculiarities parabolous;%0A%0A + I can te +@@ -1011,36 +1011,37 @@ + ers +-vegetable, anim ++comical, unusu + al, and +-miner ++whimsic + al,%0A +@@ -1057,37 +1057,38 @@ + very model of a +-moder ++cartoo + n Major-General. +@@ -1709,36 +1709,37 @@ + ers +-vegetable, anim ++comical, unusu + al, and +-miner ++whimsic + al,%0A +@@ -1755,37 +1755,38 @@ + very model of a +-moder ++cartoo + n Major-General. +@@ -3777,37 +3777,38 @@ + very model of a +-moder ++cartoo + n Major-General. \ No newline at end of file diff --git a/diff/tests/t1.txt b/diff/tests/t1.txt deleted file mode 100644 index f2551882..00000000 --- a/diff/tests/t1.txt +++ /dev/null @@ -1,134 +0,0 @@ -I am the very model of a modern Major-General, -I've information vegetable, animal, and mineral, -I know the kings of England, and I quote the fights historical -From Marathon to Waterloo, in order categorical; - -I'm very well acquainted, too, with matters mathematical, -I understand equations, both the simple and quadratical, -About binomial theorem I'm teeming with a lot o' news, -With many cheerful facts about the square of the hypotenuse. - -I'm very good at integral and differential calculus; -I know the scientific names of beings animalculous: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -I know our mythic history, King Arthur's and Sir Caradoc's; -I answer hard acrostics, I've a pretty taste for paradox, -I quote in elegiacs all the crimes of Heliogabalus, -In conics I can floor peculiarities parabolous; - -I can tell undoubted Raphaels from Gerard Dows and Zoffanies, -I know the croaking chorus from The Frogs of Aristophanes! -Then I can hum a fugue of which I've heard the music's din afore, -And whistle all the airs from that infernal nonsense Pinafore. - -Then I can write a washing bill in Babylonic cuneiform, -And tell you ev'ry detail of Caractacus's uniform: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -In fact, when I know what is meant by "mamelon" and "ravelin", -When I can tell at sight a Mauser rifle from a Javelin, -When such affairs as sorties and surprises I'm more wary at, -And when I know precisely what is meant by "commissariat", - -When I have learnt what progress has been made in modern gunnery, -When I know more of tactics than a novice in a nunnery— -In short, when I've a smattering of elemental strategy— -You'll say a better Major-General has never sat a gee. - -For my military knowledge, though I'm plucky and adventury, -Has only been brought down to the beginning of the century; -But still, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -I am the very model of a modern Major-General, -I've information vegetable, animal, and mineral, -I know the kings of England, and I quote the fights historical -From Marathon to Waterloo, in order categorical; - -I'm very well acquainted, too, with matters mathematical, -I understand equations, both the simple and quadratical, -About binomial theorem I'm teeming with a lot o' news, -With many cheerful facts about the square of the hypotenuse. - -I'm very good at integral and differential calculus; -I know the scientific names of beings animalculous: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -I know our mythic history, King Arthur's and Sir Caradoc's; -I answer hard acrostics, I've a pretty taste for paradox, -I quote in elegiacs all the crimes of Heliogabalus, -In conics I can floor peculiarities parabolous; - -I can tell undoubted Raphaels from Gerard Dows and Zoffanies, -I know the croaking chorus from The Frogs of Aristophanes! -Then I can hum a fugue of which I've heard the music's din afore, -And whistle all the airs from that infernal nonsense Pinafore. - -Then I can write a washing bill in Babylonic cuneiform, -And tell you ev'ry detail of Caractacus's uniform: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -In fact, when I know what is meant by "mamelon" and "ravelin", -When I can tell at sight a Mauser rifle from a Javelin, -When such affairs as sorties and surprises I'm more wary at, -And when I know precisely what is meant by "commissariat", - -When I have learnt what progress has been made in modern gunnery, -When I know more of tactics than a novice in a nunnery— -In short, when I've a smattering of elemental strategy— -You'll say a better Major-General has never sat a gee. - -For my military knowledge, though I'm plucky and adventury, -Has only been brought down to the beginning of the century; -But still, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -I am the very model of a modern Major-General, -I've information vegetable, animal, and mineral, -I know the kings of England, and I quote the fights historical -From Marathon to Waterloo, in order categorical; - -I'm very well acquainted, too, with matters mathematical, -I understand equations, both the simple and quadratical, -About binomial theorem I'm teeming with a lot o' news, -With many cheerful facts about the square of the hypotenuse. - -I'm very good at integral and differential calculus; -I know the scientific names of beings animalculous: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -I know our mythic history, King Arthur's and Sir Caradoc's; -I answer hard acrostics, I've a pretty taste for paradox, -I quote in elegiacs all the crimes of Heliogabalus, -In conics I can floor peculiarities parabolous; - -I can tell undoubted Raphaels from Gerard Dows and Zoffanies, -I know the croaking chorus from The Frogs of Aristophanes! -Then I can hum a fugue of which I've heard the music's din afore, -And whistle all the airs from that infernal nonsense Pinafore. - -Then I can write a washing bill in Babylonic cuneiform, -And tell you ev'ry detail of Caractacus's uniform: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -In fact, when I know what is meant by "mamelon" and "ravelin", -When I can tell at sight a Mauser rifle from a Javelin, -When such affairs as sorties and surprises I'm more wary at, -And when I know precisely what is meant by "commissariat", - -When I have learnt what progress has been made in modern gunnery, -When I know more of tactics than a novice in a nunnery— -In short, when I've a smattering of elemental strategy— -You'll say a better Major-General has never sat a gee. - -For my military knowledge, though I'm plucky and adventury, -Has only been brought down to the beginning of the century; -But still, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. \ No newline at end of file diff --git a/diff/tests/t2.txt b/diff/tests/t2.txt deleted file mode 100644 index d6683d0c..00000000 --- a/diff/tests/t2.txt +++ /dev/null @@ -1,129 +0,0 @@ -I am the very model of a cartoon Major-General, -My animation's comical, unusual, and whimsical, -I know the kings of England, and I quote the plays historical -From Marathon to Waterloo, in order categorical; - -I'm very good at integral and differential calculus; -I know the scientific names of beings animalculous: -In short, in matters comical, unusual, and whimsical, -I am the very model of a cartoon Major-General. - -I know our mythic history, King Arthur's and Sir Caradoc's; -I answer hard acrostics, I've a pretty taste for paradox, -I quote in elegiacs all the crimes of Heliogabalus, -In conics I can floor peculiarities parabolous; - -I can tell undoubted Raphaels from Gerard Dows and Zoffanies, -I know the croaking chorus from The Frogs of Aristophanes! -Then I can hum a fugue of which I've heard the music's din afore, -And whistle all the airs from that infernal nonsense Pinafore. - -Then I can write a washing bill in Babylonic cuneiform, -And tell you ev'ry detail of Caractacus's uniform: -In short, in matters comical, unusual, and whimsical, -I am the very model of a cartoon Major-General. - -In fact, when I know what is meant by "mamelon" and "ravelin", -When I can tell at sight a Mauser rifle from a Javelin, -When such affairs as sorties and surprises I'm more wary at, -And when I know precisely what is meant by "commissariat", - -When I have learnt what progress has been made in modern gunnery, -When I know more of tactics than a novice in a nunnery— -In short, when I've a smattering of elemental strategy— -You'll say a better Major-General has never sat a gee. - -For my military knowledge, though I'm plucky and adventury, -Has only been brought down to the beginning of the century; -But still, in matters comical, unusual, and whimsical, -I am the very model of a cartoon Major-General. - -I am the very model of a modern Major-General, -I've information vegetable, animal, and mineral, -I know the kings of England, and I quote the fights historical -From Marathon to Waterloo, in order categorical; - -I'm very well acquainted, too, with matters mathematical, -I understand equations, both the simple and quadratical, -About binomial theorem I'm teeming with a lot o' news, -With many cheerful facts about the square of the hypotenuse. - -I'm very good at integral and differential calculus; -I know the scientific names of beings animalculous: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -I know our mythic history, King Arthur's and Sir Caradoc's; -I answer hard acrostics, I've a pretty taste for paradox, -I quote in elegiacs all the crimes of Heliogabalus, -In conics I can floor peculiarities parabolous; - -I can tell undoubted Raphaels from Gerard Dows and Zoffanies, -I know the croaking chorus from The Frogs of Aristophanes! -Then I can hum a fugue of which I've heard the music's din afore, -And whistle all the airs from that infernal nonsense Pinafore. - -Then I can write a washing bill in Babylonic cuneiform, -And tell you ev'ry detail of Caractacus's uniform: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -In fact, when I know what is meant by "mamelon" and "ravelin", -When I can tell at sight a Mauser rifle from a Javelin, -When such affairs as sorties and surprises I'm more wary at, -And when I know precisely what is meant by "commissariat", - -When I have learnt what progress has been made in modern gunnery, -When I know more of tactics than a novice in a nunnery— -In short, when I've a smattering of elemental strategy— -You'll say a better Major-General has never sat a gee. - -For my military knowledge, though I'm plucky and adventury, -Has only been brought down to the beginning of the century; -But still, in matters vegetable, animal, and mineral, -I am the very model of a cartoon Major-General. - -I am the very model of a modern Major-General, -I've information vegetable, animal, and mineral, -I know the kings of England, and I quote the fights historical -From Marathon to Waterloo, in order categorical; - -I'm very well acquainted, too, with matters mathematical, -I understand equations, both the simple and quadratical, -About binomial theorem I'm teeming with a lot o' news, -With many cheerful facts about the square of the hypotenuse. - -I'm very good at integral and differential calculus; -I know the scientific names of beings animalculous: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -I know our mythic history, King Arthur's and Sir Caradoc's; -I answer hard acrostics, I've a pretty taste for paradox, -I quote in elegiacs all the crimes of Heliogabalus, -In conics I can floor peculiarities parabolous; - -I can tell undoubted Raphaels from Gerard Dows and Zoffanies, -I know the croaking chorus from The Frogs of Aristophanes! -Then I can hum a fugue of which I've heard the music's din afore, -And whistle all the airs from that infernal nonsense Pinafore. - -Then I can write a washing bill in Babylonic cuneiform, -And tell you ev'ry detail of Caractacus's uniform: -In short, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. - -In fact, when I know what is meant by "mamelon" and "ravelin", -When I can tell at sight a Mauser rifle from a Javelin, -When such affairs as sorties and surprises I'm more wary at, -And when I know precisely what is meant by "commissariat", - -When I have learnt what progress has been made in modern gunnery, -When I know more of tactics than a novice in a nunnery— -In short, when I've a smattering of elemental strategy— -You'll say a better Major-General has never sat a gee. - -For my military knowledge, though I'm plucky and adventury, -Has only been brought down to the beginning of the century; -But still, in matters vegetable, animal, and mineral, -I am the very model of a modern Major-General. \ No newline at end of file