清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
require "iuplua" require "iupluacontrols" --iup.Message("abc", "def") --[[ fileDlg = iup.filedlg{dialogtype = "save", title = "file save", filter = "*.bmp", filerinfo = "Bitmap files", directory = "C:\\Windows"} fileDlg:popup(iup.anywhere, iup.anywhere) --]] --fl = io.open("E:\\Program\\Lua\\Scrawl\\cander.lua") --for line in fl:lines() do print(line) end local isOnlyShowDiff = false local tabTxtFileLeft, tabTxtFileRight = {}, {} function openFile(filePath) local tab = {} --clear local flh = io.open(filePath) for line in flh:lines() do tab[#tab + 1] = {} tab[#tab].str = line end --for _, v in ipairs(tab) do print(v) end return tab end btnAll = iup.button{title = "Show All", id = 1} btnOnly = iup.button{title = "Only Show Difference", id = 2} --print(iup.button1) --[[ print(type(iup)) for k, v in pairs(iup) do if type(v) == "number" then print(k, v) end end --]] function changeShow(ih, but, pressed, x, y, stat) --print(ih.id) --print(but, pressed) if(but == iup.BUTTON1 and pressed == 0) then --print(ih.id) --isOnlyShowDiff = not isOnlyShowDiff if tonumber(ih.id) == 1 then isOnlyShowDiff = false else isOnlyShowDiff = true end print(isOnlyShowDiff) end end btnAll.button_cb, btnOnly.button_cb = changeShow, changeShow hbox1 = iup.hbox{btnAll, btnOnly; margin = "3x3", gap = "2"} slnLeft = iup.text{size = "300x", value = ""} btnLeft = iup.button{title = "Browse"} hbox2 = iup.hbox{slnLeft, btnLeft; margin = "3x3", gap = "2"} mlnLeft = iup.multiline{size = "450x400", value = "", readonly = "yes", formatting = "yes"} --[[ tags = iup.user{bulk = "Yes", cleanout = "Yes"} iup.Append(tags, iup.user{selection = "1,1:1,10", fgcolor = "255 0 0"}) iup.Append(tags, iup.user{selection = "2,1:2,10", fgcolor = "0 255 0"}) iup.Append(tags, iup.user{selection = "3,1:3,10", bgcolor = "100 255 255"}) --mlnLeft.addformattag = tags function mlnLeft.caret_cb(ih, lin, col, pos) str = lin..",1:"..lin..",100" tags2 = iup.user{bulk = "yes", cleanout = "Yes"} iup.Append(tags2, iup.user{selection = str, bgcolor = "255 0 255"}) mlnLeft.addformattag = tags2 print(lin, col, pos, str) end --]] vbox1 = iup.vbox{hbox2, mlnLeft} slnRight = iup.text{size = "300x", value = ""} btnRight = iup.button{title = "Browse"} hbox3 = iup.hbox{slnRight, btnRight; margin = "3x3", gap = "2"} flDlg = iup.filedlg{dialogtype = "OPEN", title = "Open File", filter = "*.*", directory = "D:\\"} --[[ xxa = "abc" print("abc" == "abc") print(xxa == "abc") xxb = "abc" print(xxa == xxb) --]] --like max-len common sub-squeue problem function markLabel(p, i, j, tab1, tab2) if i == 0 or j == 0 then for k = 1, i do tab1[k].label = 0 end for k = 1, j do tab2[k].label = 0 end return end local a local b if j == 1 then a = 0 else a = p[i][j - 1] end if i == 1 then b = 0 else b = p[i - 1][j] end if p[i][j] == a then tab2[j].label = 0 return markLabel(p, i, j - 1, tab1, tab2) elseif p[i][j] == b then tab1[i].label = 0 return markLabel(p, i - 1, j, tab1, tab2) else tab1[i].label, tab2[j].label = 1, 1 return markLabel(p, i - 1, j - 1, tab1, tab2) end end function computeDiff(tab1, tab2) local p = {} local n, m = #tab1, #tab2 for i = 1, n do p[i] = {} end for i = 1, n do for j = 1, m do local a local b if j == 1 then a = 0 else a = p[i][j - 1] end if i == 1 then b = 0 else b = p[i - 1][j] end if tab1[i].str == tab2[j].str then p[i][j] = math.max(a, b) + 1 else p[i][j] = math.max(a, b) end end end markLabel(p, n, m, tab1, tab2) --[[ for i = 1, n do print(i, tab1[i].label, tab2[i].label) end --]] end mlnRight = iup.multiline{size = "450x400", readonly = "yes", formatting = "yes"} vbox2 = iup.vbox{hbox3, mlnRight} hbox4 = iup.hbox{vbox1, vbox2} vbox3 = iup.vbox{hbox1, hbox4} function showResult() local tagsLeft = iup.user{bulk = "Yes", cleanout = "Yes"} local tagsRight = iup.user{bulk = "Yes", cleanout = "Yes"} local strLeft = "" local strRight = "" for i = 1, #tabTxtFileLeft do if isOnlyShowDiff then strLeft = strLeft .. "\n" else strLeft = strLeft .. tabTxtFileLeft[i].str .. "\n" end if tabTxtFileLeft[i].label == 0 then iup.Append(tagsLeft, iup.user{selection = i .. ",1:" .. i .. ",500", fgcolor = "200 0 0"}) else iup.Append(tagsLeft, iup.user{selection = i .. ",1:" .. i .. ",500", fgcolor = "0 200 0"}) end end for i = 1, #tabTxtFileRight do if isOnlyShowDiff then strRight = strRight .. "\n" else strRight = strRight .. tabTxtFileRight[i].str .. "\n" end if tabTxtFileRight[i].label == 0 then iup.Append(tagsRight, iup.user{selection = i .. ",1:" .. i .. ",500", fgcolor = "0 0 200"}) else iup.Append(tagsRight, iup.user{selection = i .. ",1:" .. i .. ",500", fgcolor = "0 200 0"}) end end print(strLeft, strRight) mlnLeft.value, mlnRight.value = strLeft, strRight mlnLeft.addformattag = tagsLeft mlnRight.addformattag = tagsRight end function selectFile(ih, but, pressed, x, y, stat) if but == iup.BUTTON1 and pressed == 0 then flDlg:popup(iup.ANYWHERE, iup.ANYWHERE) --print(flDlg.value) if ih == btnLeft and flDlg.value ~= nil then slnLeft.value = flDlg.value tabTxtFileLeft = openFile(flDlg.value) --print(#tabTxtFileLeft) --for _, v in ipairs(tabTxtFileLeft) do print(v.str) end --print(flDlg.value) elseif ih == btnRight and flDlg.value ~= nil then slnRight.value = flDlg.value tabTxtFileRight = openFile(flDlg.value) end if slnLeft.value ~= nil and slnLeft.value ~= "" and slnRight.value ~= nil and slnRight.value ~= "" then --print(slnLeft.value, slnRight.value) --print("asdgasg", slnRight.value) computeDiff(tabTxtFileLeft, tabTxtFileRight) showResult() iup.Flush() end end end btnLeft.button_cb, btnRight.button_cb = selectFile, selectFile dlg = iup.dialog{vbox3; title = "Contrast Soft"} dlg:show() iup.MainLoop()