[luadocumentor] add support of optional tags.
diff --git a/libraries/luadocumentor/docgenerator.lua b/libraries/luadocumentor/docgenerator.lua
index 780ea73..23469e5 100644
--- a/libraries/luadocumentor/docgenerator.lua
+++ b/libraries/luadocumentor/docgenerator.lua
@@ -24,7 +24,7 @@
local M = {}
M.defaultsitemainpagename = 'index'
-function M.generatedocforfiles(filenames, cssname)
+function M.generatedocforfiles(filenames, cssname,noheuristic)
if not filenames then return nil, 'No files provided.' end
--
-- Generate API model elements for all files
@@ -38,7 +38,7 @@
local code = file:read('*all')
file:close()
-- Get module for current file
- local apimodule, err = lddextractor.generateapimodule(filename, code)
+ local apimodule, err = lddextractor.generateapimodule(filename, code,noheuristic)
-- Handle modules with module name
if apimodule and apimodule.name then
diff --git a/libraries/luadocumentor/extractors.lua b/libraries/luadocumentor/extractors.lua
index f06e07e..0c62ef0 100644
--- a/libraries/luadocumentor/extractors.lua
+++ b/libraries/luadocumentor/extractors.lua
@@ -31,6 +31,16 @@
-- Enable to retrieve "---" comments from Lua code
function M.lua( code )
if not code then return nil, 'No code provided' end
+
+ -- manage shebang
+ if code then code = code:gsub("^(#.-\n)", function (s) return string.rep(' ',string.len(s)) end) end
+
+ -- check for errors
+ local f, err = loadstring(code,'source_to_check')
+ if not f then
+ return nil, 'Syntax error.\n' .. err
+ end
+
-- Get ast from file
local status, ast = pcall(mlc.src_to_ast, mlc, code)
--
@@ -39,10 +49,6 @@
if not status then
return nil, 'There might be a syntax error.\n' .. ast
end
- local status, error = pcall(compiler.check_ast, ast)
- if not status then
- return nil, 'An error occurred while parsing.\n'..error
- end
--
-- Extract commented nodes from AST
diff --git a/libraries/luadocumentor/lddextractor.lua b/libraries/luadocumentor/lddextractor.lua
index 4022e60..fbf57b1 100644
--- a/libraries/luadocumentor/lddextractor.lua
+++ b/libraries/luadocumentor/lddextractor.lua
@@ -12,7 +12,6 @@
require 'metalua.package'
local compiler = require 'metalua.compiler'
local mlc = compiler.new()
-local apimodelbuilder = require 'models.apimodelbuilder'
local M = {}
--
@@ -66,21 +65,45 @@
return table.concat(filecontent)..'return nil\n'
end
-- Create API Model module from a 'comment only' lua file
-function M.generateapimodule(filename, code)
+function M.generateapimodule(filename, code,noheuristic)
if not filename then return nil, 'No file name given.' end
if not code then return nil, 'No code provided.' end
- local commentfile, error = M.generatecommentfile(filename, code)
- if not commentfile then
- return nil, 'Unable to create api module for "'..filename..'".\n'..error
- end
- local status, ast = pcall(mlc.src_to_ast, mlc, commentfile)
+ if type(filename) ~= "string" then return nil, 'No string for file name provided' end
+
+ -- for non lua file get comment file
+ if filename:gmatch('.*%.(.*)')() ~= 'lua' then
+ local err
+ code, err = M.generatecommentfile(filename, code)
+ if not code then
+ return nil, 'Unable to create api module for "'..filename..'".\n'..err
+ end
+ else
+ -- for lua file check syntax error
+
+ -- manage shebang
+ if code then code = code:gsub("^(#.-\n)", function (s) return string.rep(' ',string.len(s)) end) end
+
+ -- check for errors
+ local f, err = loadstring(code,'source_to_check')
+ if not f then
+ return nil, 'File'..filename..'contains syntax error.\n' .. err
+ end
+ end
+
+ local status, ast = pcall(mlc.src_to_ast, mlc, code)
if not status then
return nil, 'Unable to compute ast for "'..filename..'".\n'..ast
end
- local status, error = pcall(compiler.check_ast, ast)
- if not status then
- return nil, '"'..filename..'" contains an error.\n'..error
- end
- return apimodelbuilder.createmoduleapi(ast)
+
+ -- Create api model
+ local apimodelbuilder = require 'models.apimodelbuilder'
+ local _file, comment2apiobj = apimodelbuilder.createmoduleapi(ast)
+
+ -- create internal model
+ if not noheuristic then
+ local internalmodelbuilder = require "models.internalmodelbuilder"
+ local _internalcontent = internalmodelbuilder.createinternalcontent(ast,_file,comment2apiobj)
+ end
+ return _file
end
return M
diff --git a/libraries/luadocumentor/luadocumentor.lua b/libraries/luadocumentor/luadocumentor.lua
index d0a06fa..20bdeea 100755
--- a/libraries/luadocumentor/luadocumentor.lua
+++ b/libraries/luadocumentor/luadocumentor.lua
@@ -41,6 +41,7 @@
* api: Will produce API file(s) from specified file(s) or directories.
-d, --dir (default docs) Define an output directory. If the given directory doesn't exist, it will be created.
-h, --help Display the help.
+ -n, --noheuristic Do not use code analysis, use only comments to generate documentation.
-s, --style (default !) The path of your own css file, if you don't want to use the default one. (usefull only for the doc format)
[directories|files] Define the paths or the directories of inputs files. Only Lua or C files containing a @module tag will be considered.
]]
@@ -139,7 +140,7 @@
return
end
-- Generate html form files
-local parsedfiles, unparsed = docgenerator.generatedocforfiles(filestoparse, cssfilename)
+local parsedfiles, unparsed = docgenerator.generatedocforfiles(filestoparse, cssfilename,args.noheuristic)
-- Show warnings on unparsed files
if #unparsed > 0 then