123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- -- docroc v0.1.0 - Lua documentation generator
- -- https://github.com/bjornbytes/docroc
- -- License - MIT, see LICENSE for details.
- local docroc = {}
- function docroc.process(filename)
- local file = io.open(filename, 'r')
- local text = file:read('*a')
- file:close()
- local comments = {}
- text:gsub('%s*%-%-%-(.-)\n([%w\n][^\n%-]*)', function(chunk, context)
- chunk = chunk:gsub('^%s*%-*%s*', ''):gsub('\n%s*%-*%s*', ' ')
- chunk = chunk:gsub('^[^@]', '@description %1')
- context = context:match('[^\n]+')
- local tags = {}
- chunk:gsub('@(%w+)%s?([^@]*)', function(name, body)
- body = body:gsub('(%s+)$', '')
- local processor = docroc.processors[name]
- local tag = processor and processor(body) or {}
- tag.tag = name
- tag.text = body
- tags[name] = tags[name] or {}
- table.insert(tags[name], tag)
- table.insert(tags, tag)
- end)
- table.insert(comments, {
- tags = tags,
- context = context
- })
- end)
- return comments
- end
- docroc.processors = {
- arg = function(body)
- local name = body:match('^%s*(%w+)') or body:match('^%s*%b{}%s*(%w+)')
- local description = body:match('%-%s*(.*)$')
- local optional, default
- local type = body:match('^%s*(%b{})'):sub(2, -2):gsub('(%=)(.*)', function(_, value)
- optional = true
- default = value
- if #default == 0 then default = nil end
- return ''
- end)
- return {
- type = type,
- name = name,
- description = description,
- optional = optional,
- default = default
- }
- end,
- returns = function(body)
- local type
- body:gsub('^%s*(%b{})', function(match)
- type = match:sub(2, -2)
- return ''
- end)
- local description = body:match('^%s*(.*)')
- return {
- type = type,
- description = description
- }
- end
- }
- return docroc
|