Thursday, August 1, 2013

Wiktionary - Recent changes [en]: Module:User:DTLHS/etymtree

Wiktionary - Recent changes [en]
Track the most recent changes to the wiki in this feed. // via fulltextrssfeed.com 
  require "math"     local p = {}     function getLevel(line)      local result = 1      while string.sub(line, result, result) == "*" do          result = result + 1      end      return result - 1  end     function getLangname(line, level)      local result = string.sub(line, level + 2)      return string.sub(result, 1, (result:find(':')) - 1)  end     function getWord(line, level, langname)      return string.sub(line, level + 4 + string.len(langname))  end     function getTree(sourcepage)      -- load entire tree      local result = {}      local i = 1         local treeName = "Template:etymtree/" .. sourcepage      local tree = "\n" .. mw.title.new( treeName ):getContent() .. "\n"         for line in tree:gmatch("[^\n]+") do          if string.sub(line, 1, 1) == "*" then              local level = getLevel(line)              local langname = getLangname(line, level)              local word = getWord(line, level, langname)              result[i] = {level, langname, word, line}              i = i + 1          end      end         return result  end     function lineMatch(tree, i, target_langcode, target_word)      local t = "{{l|" .. target_langcode .. "|" .. target_word      local line = tree[i][3]      if string.find(line, t) ~= nil then          return true      end      return false  end     function getIndex(tree, target_langcode, target_word)      for i, v in ipairs(tree) do          local l = lineMatch(tree, i, target_langcode, target_word)          if l == true then              return i          end      end      return nil  end     function getParent(tree, i)      local data = tree[i]      local level = data[1]      local j = i - 1      while true do                  if tree[j] == nil then                          return tree[j]                  end             if tree[j][1] == (level - 1) then              return j          end          j = j - 1         end  end     function getParents(tree, i)          local result = {}          local parent = getParent(tree, i)          while parent ~= nil do                  table.insert(result, parent)                  parent = getParent(tree, parent)          end          return result  end     function getChildren(tree, i)          local result = {}          local j = i + 1          local level = tree[i][1]             while (tree[j] ~= nil) and (tree[j][1] > level) do                  table.insert(result, j)                  j = j + 1          end          return result  end     function getSisters(tree, i)          local result = {}          local level = tree[i][1]          local langname = tree[i][2]      local parent = getParent(tree, i)      local children = getChildren(tree, parent)          for i, v in ipairs(children) do          if (tree[v][1] == level) then                  table.insert(result, v)          end          end          return result  end     function getDerivedTerms(tree, i)          local result = {}          local children = getChildren(tree, i)          local parent_langname = tree[i][2]          for i, v in ipairs(children) do                  if (tree[v][2] == parent_langname) then                          table.insert(result, v)                  end          end          return result  end     function getRelatedTerms(tree, i)          local result = {}          local sisters = getSisters(tree, i)          local langname = tree[i][2]          for j, v in ipairs(sisters) do                  if (v ~= i) and (tree[v][2] == langname) then                          table.insert(result, v)                  end          end          return result  end     function getCognates(tree, i)          local result = {}          local sisters = getSisters(tree, i)          local langname = tree[i][2]          for j, v in ipairs(sisters) do                  if (v ~= i) and (tree[v][2] ~= langname) then                          table.insert(result, v)                  end          end          return result  end     function makeWikiTable(t, title, columns)          local l = tablelength(t)          local n = math.ceil(l / columns)          local width = 96 / columns             local result = '<div class="NavFrame">\n'          result = result .. '<div class="NavHead" style="text-align:left">' .. title .. '</div>'          result = result .. '\n<div class="NavContent">'          result = result .. '<div style="width:auto;margin:0px;overflow:auto;">\n{| border=0  width=100%\n|-\n| bgcolor="#F8F8FF" valign=top align=left|'             for i, v in ipairs(t) do                     result = result .. "\n" .. v                  -- if (math.mod(i, n) == 0) and (i ~= (n + 1)) and (n ~= 1) then                  --    result = result .. '\n| width=1% |\n| bgcolor="#F8F8FF" valign=top align=left width=' .. tostring(width) .. '%|'                  -- end             end          return result .. "\n" .. "|}</div></div></div>"  end     function formattedEtymology(tree, i)          local result = ""          local parents = getParents(tree, i)          for j, v in ipairs(parents) do                  langname = tree[v][2]                  word = tree[v][3]          if word ~= (nil or "" or " ") then                  result = result .. " from " .. langname .. " " .. word .. ","          end          if word == (nil or "" or " ") then              result = result .. " from " .. langname .. ","          end          end          result = string.sub(result, 2, -2)          return string.upper(string.sub(result, 1, 1)) .. string.sub(result, 2) .. '.'  end     function formattedDescendants(tree, i)          local result = {}          local base_level = tree[i][1]          local children = getChildren(tree, i)          for i, v in ipairs(children) do                  child = tree[v][4]                  child = string.sub(child, base_level + 1)                  table.insert(result, child)          end          return makeWikiTable(result, "Descendants", 1)  end     function formattedDerivedTerms(tree, i)          local result = {}          local base_level = tree[i][1]          local derived_terms = getDerivedTerms(tree, i)          for i, v in ipairs(derived_terms) do                  derived = tree[v][4]                  derived = string.sub(derived, base_level + 1)                  table.insert(result, derived)          end          return makeWikiTable(result, "Derived terms", 1)  end     function formattedRelatedTerms(tree, i)          local result = {}          local base_level = tree[i][1]          local related_terms = getRelatedTerms(tree, i)          for i, v in ipairs(related_terms) do                  related = tree[v][4]                  related = string.sub(related, base_level)                  table.insert(result, related)          end          return makeWikiTable(result, "Related terms", 1)  end     function formattedCognates(tree, i)          local result = {}          local base_level = tree[i][1]          local cognates = getCognates(tree, i)          for i, v in ipairs(cognates) do                  cognate = tree[v][4]                  cognate = string.sub(cognate, base_level)                  table.insert(result, cognate)          end          return makeWikiTable(result, "Cognates", 1)  end     function tablelength(T)          local count = 0          for _ in pairs(T) do count = count + 1 end          return count  end     function p.main(frame)      local args = frame:getParent().args         local sourcepage = args[1]      local langcode = args[2]      local term = args[3]         local tree = getTree(sourcepage)      local i = getIndex(tree, langcode, term)         local etymology = formattedEtymology(tree, i)      local descendants = formattedDescendants(tree, i)      local derived_terms = formattedDerivedTerms(tree, i)      local related_terms = formattedRelatedTerms(tree, i)      local cognates = formattedCognates(tree, i)         return frame:preprocess(etymology .. "\n" .. descendants .. "\n" .. derived_terms .. "\n" .. related_terms .. "\n" .. cognates)  end     return p  

Module:User:DTLHS/etymtree
Aug 2nd 2013, 03:10, by DTLHS

(One intermediate revision by one user not shown)
Line 176: Line 176:
 

langname = tree[v][2]

 

langname = tree[v][2]

 

word = tree[v][3]

 

word = tree[v][3]

result = result .. " from " .. langname .. " " .. word .. ","

+

if word ~= (nil or "" or " ") then

  +

result = result .. " from " .. langname .. " " .. word .. ","

  +

end

  +

if word == (nil or "" or " ") then

  +

result = result .. " from " .. langname .. ","

  +

end

 

end

 

end

 

result = string.sub(result, 2, -2)

 

result = string.sub(result, 2, -2)

You are receiving this email because you subscribed to this feed at blogtrottr.com.

If you no longer wish to receive these emails, you can unsubscribe from this feed, or manage all your subscriptions