blob: 47af9b8527259257c29f71b7b3db94c7c72077b1 [file] [log] [blame]
#!/usr/bin/lua
-------------------------------------------------------------------------------
-- Copyright (c) 2012 Sierra Wireless and others.
-- 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:
-- Sierra Wireless - initial API and implementation
-------------------------------------------------------------------------------
-- Fetch libraries form current plugin
package.path = './?.lua;../lib/?.lua;../../../libraries/metalua/?.lua;../../../libraries/modelsbuilder/?.lua;../../../libraries/luaformatter/?.lua;../../../libraries/templateengine/?.lua;../../../libraries/penlight/?.lua;../../../libraries/doctemplates/?.lua;../../../libraries/markdown/?.lua;'
package.mpath = '../../../libraries/metalua/?.mlua;../../../libraries/modelsbuilder/?.mlua;'
require 'metalua.loader'
local compiler = require 'metalua.compiler'
local mlc = compiler.new()
local apimodelbuilder = require 'models.apimodelbuilder'
local modeltransformations = require 'modeltransformations'
local templateengine = require 'templateengine'
for key, value in pairs(require 'template.utils') do
templateengine.env[key] = value
end
if #arg < 1 then
print 'No file to serialize.'
return
end
for k = 1, #arg do
-- Load source to serialize
local filename = arg[k]
-- Load file
local luafile = io.open(filename, 'r')
local luasource = luafile:read('*a')
luafile:close()
-- Generate AST
local ast = mlc:src_to_ast(luasource)
local status, astvalid, errormsg = pcall(compiler.check_ast, ast)
if not astvalid then
return nil, string.format('Unable to generate AST for %s.\n%s', filename, errormsg)
end
--Generate API model
local apimodel = apimodelbuilder.createmoduleapi(ast)
-- Generate html form API Model
local htmlcode, errormessage = templateengine.applytemplate(apimodel)
if not htmlcode then
print( string.format('Unable to generate html for %s.\n%s', luasourcepath, errormessage) )
end
-- Generate html form API Model
local htmlcode, errormessage = templateengine.applytemplate(apimodel)
if not htmlcode then
print( string.format('Unable to generate html for %s.\n%s', luasourcepath, errormessage) )
end
local htmlfilename = filename:gsub('([%w%-_/\\]+)%.lua$', '%1.html')
-- Save serialized model
local htmlfile = io.open(htmlfilename, 'w')
htmlfile:write( htmlcode )
htmlfile:close()
-- This a success
print( string.format('%s serialized to %s.', filename, htmlfilename) )
end