| -------------------------------------------------------------------------------- |
| -- Copyright (c) 2012 Sierra Wireless. |
| -- All rights reserved. This program and the accompanying materials |
| -- are made available under the terms of the Eclipse Public License v1.0 |
| -- which accompanies this distribution, and is available at |
| -- http://www.eclipse.org/legal/epl-v10.html |
| -- |
| -- Contributors: |
| -- Kevin KIN-FOO <kkinfoo@sierrawireless.com> |
| -- - initial API and implementation and initial documentation |
| -------------------------------------------------------------------------------- |
| |
| -- |
| -- Load documentation generator and update its path |
| -- |
| local templateengine = require 'templateengine' |
| for name, def in pairs( require 'template.utils' ) do |
| templateengine.env [ name ] = def |
| end |
| |
| -- Load documentation extractor and set handled languages |
| local lddextractor = require 'lddextractor' |
| |
| local M = {} |
| M.defaultsitemainpagename = 'index' |
| |
| function M.generatedocforfiles(filenames, cssname,noheuristic) |
| if not filenames then return nil, 'No files provided.' end |
| -- |
| -- Generate API model elements for all files |
| -- |
| local generatedfiles = {} |
| local wrongfiles = {} |
| for _, filename in pairs( filenames ) do |
| -- Load file content |
| local file, error = io.open(filename, 'r') |
| if not file then return nil, 'Unable to read "'..filename..'"\n'..err end |
| local code = file:read('*all') |
| file:close() |
| -- Get module for current file |
| local apimodule, err = lddextractor.generateapimodule(filename, code,noheuristic) |
| |
| -- Handle modules with module name |
| if apimodule and apimodule.name then |
| generatedfiles[ apimodule.name ] = apimodule |
| elseif not apimodule then |
| -- Track faulty files |
| table.insert(wrongfiles, 'Unable to extract comments from "'..filename..'".\n'..err) |
| elseif not apimodule.name then |
| -- Do not generate documentation for unnamed modules |
| table.insert(wrongfiles, 'Unable to create documentation for "'..filename..'", no module name provided.') |
| end |
| end |
| -- |
| -- Defining index, which will summarize all modules |
| -- |
| local index = { |
| modules = generatedfiles, |
| name = M.defaultsitemainpagename, |
| tag='index' |
| } |
| generatedfiles[ M.defaultsitemainpagename ] = index |
| |
| -- |
| -- Define page cursor |
| -- |
| local page = { |
| currentmodule = nil, |
| headers = { [[<link rel="stylesheet" href="]].. cssname ..[[" type="text/css"/>]] }, |
| modules = generatedfiles, |
| tag = 'page' |
| } |
| |
| -- |
| -- Iterate over modules, generating complete doc pages |
| -- |
| for _, module in pairs( generatedfiles ) do |
| -- Update current cursor page |
| page.currentmodule = module |
| -- Generate page |
| local content, error = templateengine.applytemplate(page) |
| if not content then return nil, error end |
| module.body = content |
| end |
| return generatedfiles, wrongfiles |
| end |
| return M |