|
- local md = {}
- function md.parse(md)
- local it = {}
- it.l = {}
- it[#it+1] = {["content"]="",["bold"]=false,["italic"]=false}
- local lc,llc = "",""
- local function newpart()
- it[#it+1] = {["content"]="",["bold"]=it[#it].bold,["italic"]=it[#it].italic}
- end
- newpart()
- local lm = false
- for c in md:gmatch(".") do
- if c == "*" then
- if lc == "*" then
- it[#it].italic = false
- it[#it].italic = it[#it-1].italic
- it[#it].bold = not it[#it].bold
- else
- newpart()
- it[#it].italic = not it[#it].italic
- end
- elseif c == "[" then
- newpart()
- elseif c == "(" and lc == "]" then
- lm = true
- it[#it].content = it[#it].content:sub(1,-2)
- it[#it].address = ""
- elseif c == ")" and lm then
- lm = false
- it.l[#it.l+1] = it[#it].address
- it[#it].addrid = #it.l
- newpart()
- else
- if not lm then
- it[#it].content = it[#it].content .. c
- else
- it[#it].address = it[#it].address .. c
- end
- end
- llc = lc
- lc = c
- end
- for k,v in pairs(it) do
- if v.content then
- v.content = v.content:gsub("\n","\r\n")
- end
- end
- return it
- end
- return md
|