get("#137") -- split
get("#515") -- splitLines
get("#389") -- mminsert/mmcontains
get("#521") -- asciiTable
get("#522") -- tryCopyFromParents
keywordsText = getSnippet("#2000023")
new = getSnippet("#2000019") -- with partial annotations
old = getSnippet("#2000015") -- with annotations
overwriteAnnotations = true
-- find all keywords
keywords = {}
for _, l in ipairs(splitLines(keywordsText)) do
_, _, x, kw = l:find("^line ([^:]+): +(.*)")
if x == nil then
print("Warning: ignoring line. "..l)
else
keywords[kw] = true
end
end
-- look for them in known annotations
kw2ann = {}
for _, l in ipairs(splitLines(old)) do
local _, _, ann, s = l:find("^(.*) | (.*)$")
if ann then
ann = ann:gsub("^ +", ""):gsub(" +$", "")
for kw, _ in pairs(keywords) do
if s:find(kw, 1, true) then
if not mmcontains(kw2ann, kw, ann) then
mminsert(kw2ann, kw, ann)
end
end
end
end
end
uniquekeywords = {}
for kw, l in pairs(kw2ann) do
print("keyword "..kw.." maps to "..table.concat(l, "/"))
if #l == 1 then
uniquekeywords[kw] = l[1]
end
end
print()
line = 0
newLines, annotations = {}, {}
for _, l in ipairs(splitLines(new)) do
line = line+1
local _, _, ann, s = l:find("^(.*) | (.*)$")
if ann then
ann = ann:gsub("^ +", ""):gsub(" +$", "")
if overwriteAnnotations or ann == '' then
for kw, ann2 in pairs(uniquekeywords) do
if s:find(kw, 1, true) then
ann = ann2
goto found
end
end
::found::
if ann == nil then error() end
if ann ~= '' then
print("New annotation derived for line "..line..": "..ann)
end
end
table.insert(newLines, s)
table.insert(annotations, ann)
end
end
tryCopyFromParents(newLines, annotations)
print()
print(mergeTexts(annotations, newLines))Began life as a copy of #512
test run test run with input download show line numbers
Travelled to 12 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #520 |
| Snippet name: | Backport keywords from new case to known case |
| Eternal ID of this version: | #520/1 |
| Text MD5: | af924905e452cf8bc826f28109cb123c |
| Author: | stefan |
| Category: | |
| Type: | Lua code |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2015-03-11 19:00:48 |
| Source code size: | 1918 bytes / 78 lines |
| Pitched / IR pitched: | No / Yes |
| Views / Downloads: | 1055 / 262 |
| Referenced in: | #2000024 - Output of #520 #3000190 - Answer for stefanreich(>> t 20 questions) #3000382 - Answer for ferdie (>> t = 1, f = 0) #3000383 - Answer for funkoverflow (>> t=1, f=0 okay) #3000384 - Answer for 6uru0fsh1va (>> t-sql?) |