Advertisement
Pinkishu

mdParser

Aug 4th, 2013
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.31 KB | None | 0 0
  1. function trim(s)
  2.   return s:match "^%s*(.-)%s*$"
  3. end
  4.  
  5. function parseMD(mdStr)
  6.     local mdTable = {parent=mdTable}
  7.     local mdLevel = 0
  8.     local curObj = mdTable
  9.     for line in mdStr:gmatch("[^\r\n]+") do
  10.         local trimmedLine = trim(line):lower()
  11.         local part,name = trimmedLine:match("([^%s]+)%s+(.*)")
  12.         local partType,partLevel = part:sub(1,1),#part
  13.         if partType == "#" then
  14.             if partLevel < mdLevel then
  15.                 while partLevel < mdLevel do
  16.                     curObj = curObj.parent
  17.                     mdLevel = mdLevel - 1
  18.                 end
  19.             end
  20.             if partLevel == mdLevel then
  21.                 curObj.parent[name] = {parent=curObj.parent}
  22.                 curObj = curObj.parent[name]
  23.             elseif partLevel > mdLevel then
  24.                 curObj[name] = {parent=curObj}
  25.                 curObj = curObj[name]
  26.                 mdLevel = mdLevel + 1
  27.             end
  28.         elseif partType == "*" then
  29.             local amount,partName = name:match("(%d+)%sx%s(.*)")
  30.             curObj[partName] = amount
  31.         end
  32.     end
  33.  
  34.     --[[
  35.         local f = fs.open("out","w")
  36.     local ser
  37.     ser = function(t)
  38.         local s = "{"
  39.         for k,v in pairs(t) do
  40.             if k ~= "parent" then
  41.                 if type(v) == "table" then
  42.                     s= s .. "[\""..k.."\"]="..ser(v)..","
  43.                 else
  44.                     s = s.."[\""..k.."\"]="..v..","
  45.                 end
  46.             end
  47.         end
  48.         return s.."}"
  49.     end
  50.     f.write(ser(mdTable))
  51.     f.close()--]]
  52.     return mdTable
  53. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement