%% ``The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved via the world wide web at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% The Initial Developer of the Original Code is Ericsson Utvecklings AB.
%% Portions created by Ericsson are Copyright 1999-2000, Ericsson
%% Utvecklings AB. All Rights Reserved.''
%%
%% $Id$
%%
-module(docb_gen).
-export([module/1, module/2, users_guide/1, users_guide/2]).
-record(args, {suffix=".xml",
layout=docb_edoc_xml_cb,
def=[],
includes=[],
preprocess=false,
sort_functions=true}).
%% module(File) -> ok | {error, Reason}
%% module(File, Opts) -> ok | {error, Reason}
%% File = string(), file name with or without ".erl" extension
%% Opts -- see code
%% Reason = badfile | {badopt, Term}
module(File0) ->
module(File0, []).
module(File0, RawOpts) ->
File = case filename:extension(File0) of
".erl" -> File0;
_ -> File0++".erl"
end,
case filelib:is_regular(File) of
true ->
case parse(RawOpts, #args{}) of
{ok, Args} ->
Opts = [{def, Args#args.def},
{includes, Args#args.includes},
{preprocess, Args#args.preprocess},
{sort_functions, Args#args.sort_functions},
{app_default, "OTPROOT"},
{file_suffix, Args#args.suffix},
{dir, "."},
{layout, Args#args.layout}],
edoc:file(File, Opts);
Error ->
Error
end;
false ->
{error, badfile}
end.
%% users_guide(File) -> ok | {error, Reason}
%% users_guide(File, Opts) -> ok | {error, Reason}
%% File = string()
%% Opts -- see code
%% Reason = badfile | {badopt, Opt}
users_guide(File) ->
users_guide(File, []).
users_guide(File, RawOpts) ->
case filelib:is_regular(File) of
true ->
case parse(RawOpts, #args{}) of
{ok, Args} ->
Opts = [{def, Args#args.def},
{app_default, "OTPROOT"},
{file_suffix, Args#args.suffix},
{layout, Args#args.layout}],
Env = edoc_lib:get_doc_env(Opts),
{ok, Tags} =
edoc_extract:file(File, overview, Env, Opts),
Data =
edoc_data:overview("Overview", Tags, Env, Opts),
F = fun(M) -> M:overview(Data, Opts) end,
Text = edoc_lib:run_layout(F, Opts),
OutFile = "chapter" ++ Args#args.suffix,
edoc_lib:write_file(Text, ".", OutFile);
Error ->
Error
end;
false ->
{error, badfile}
end.
parse([{output,xml} | RawOpts], Args) ->
parse(RawOpts, Args); % default, no update of record necessary
parse([{output,sgml} | RawOpts], Args) ->
parse(RawOpts, Args#args{suffix=".sgml", layout=docb_edoc_sgml_cb});
parse([{def,Defs} | RawOpts], Args) ->
case parse_defs(Defs) of
true ->
Args2 = Args#args{def=Args#args.def++Defs},
parse(RawOpts, Args2);
false ->
{error, {badopt, {def,Defs}}}
end;
parse([{includes,Dirs} | RawOpts], Args) ->
case parse_includes(Dirs) of
true ->
Args2 = Args#args{includes=Args#args.includes++Dirs},
parse(RawOpts, Args2);
false ->
{error, {badopt, {includes,Dirs}}}
end;
parse([{preprocess,Bool} | RawOpts], Args) when Bool==true;
Bool==false ->
parse(RawOpts, Args#args{preprocess=Bool});
parse([{sort_functions,Bool} | RawOpts], Args) when Bool==true;
Bool==false ->
parse(RawOpts, Args#args{sort_functions=Bool});
parse([], Args) ->
{ok, Args};
parse([Opt | _RawOpts], _Args) ->
{error, {badopt, Opt}}.
parse_defs(Defs) ->
lists:all(fun({Key,Val}) when is_atom(Key), is_list(Val) -> true;
(_) -> false
end,
Defs).
parse_includes(Dirs) ->
lists:all(fun(Dir) when is_list(Dir) -> true;
(_) -> false
end,
Dirs).