aboutsummaryrefslogtreecommitdiffstats
path: root/lib/docbuilder/src/docb_tr_refs2kwic.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/docbuilder/src/docb_tr_refs2kwic.erl')
-rw-r--r--lib/docbuilder/src/docb_tr_refs2kwic.erl156
1 files changed, 156 insertions, 0 deletions
diff --git a/lib/docbuilder/src/docb_tr_refs2kwic.erl b/lib/docbuilder/src/docb_tr_refs2kwic.erl
new file mode 100644
index 0000000000..dc60c329fc
--- /dev/null
+++ b/lib/docbuilder/src/docb_tr_refs2kwic.erl
@@ -0,0 +1,156 @@
+%% ``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_tr_refs2kwic).
+
+-export([extension/0, transform/3, rule/2]).
+
+%% Output parts of a parsetree that contains a series of reference
+%% manual pages. The tags considered are: module, file, app, com and lib
+%% (and their corresponding *summary tags), and name, fsummary, c, em,
+%% ret and pcdata.
+
+extension() ->
+ ".kwc".
+
+transform(File, Tree, Opts) ->
+ {refs, [], Trees} = Tree,
+ FileTree = {srcfile, [], [{pcdata, [], File}]},
+ AppName = docb_util:lookup_option(name, Opts, "unknown"),
+ AppTree = {appname, [], [{pcdata, [], AppName}]},
+ Vsn = docb_util:lookup_option(vsn, Opts, "unknown"),
+ VsnTree = {appvsn, [], [{pcdata, [], Vsn}]},
+ NewTree = {refs, [], [FileTree, AppTree, VsnTree| Trees]},
+ {NewTree, Opts}.
+
+rule([refs|_],_) ->
+ {"%% Automatically generated. Do not edit.\n", ""};
+
+rule([srcfile| _], _) ->
+ {"{srcfile, \"", "\"}.\n"};
+
+rule([appname| _], _) ->
+ {"{appname, \"", "\"}.\n"};
+
+rule([appvsn| _], _) ->
+ {"{appvsn, \"", "\"}.\n"};
+
+rule([erlref|_ ], _) ->
+ {"", ""};
+
+rule([fileref|_ ], _) ->
+ {"", ""};
+
+rule([appref|_ ], _) ->
+ {"", ""};
+
+rule([comref|_ ], _) ->
+ {"", ""};
+
+rule([cref|_ ], _) ->
+ {"", ""};
+
+rule([module| _], {_, [File], _}) ->
+ {drop, "{module, \"" ++ File ++ "\"}.\n"};
+
+rule([file|_], {_, [File], _}) ->
+ {drop, "{file, \"" ++ File ++ "\"}.\n"};
+
+rule([app|_], {_, [File], _}) ->
+ {drop, "{app, \"" ++ File ++ "\"}.\n"};
+
+rule([com|_], {_, [File], _}) ->
+ {drop, "{com, \"" ++ File ++ "\"}.\n"};
+
+rule([lib|_], {_, [File], _}) ->
+ {drop, "{lib, \"" ++ File ++ "\"}.\n"};
+
+rule([modulesummary|_], _) ->
+ {"{modulesummary, \"", "\"}.\n"};
+
+rule([filesummary|_], _) ->
+ {"{filesummary, \"", "\"}.\n"};
+
+rule([appsummary|_], _) ->
+ {"{appsummary, \"", "\"}.\n"};
+
+rule([comsummary|_], _) ->
+ {"{comsummary, \"", "\"}.\n"};
+
+rule([libsummary|_], _) ->
+ {"{libsummary, \"", "\"}.\n"};
+
+rule([funcs|_ ], _) ->
+ {"", ""};
+
+rule([func|_ ], _) ->
+ {"", ""};
+
+rule([name,func,funcs,cref|_], {_,[_File], [_Ret,{pcdata,[],Name}]}) ->
+ FName = lists:flatten(docb_html_util:pcdata_to_html(Name)),
+ TName = docb_util:trim(FName),
+ case catch docb_util:fknidx(TName, "/") of
+ {'EXIT',_} ->
+ {drop, ["{name, \"", escq(TName), "\"}.\n"]};
+ FuncName ->
+ {drop, ["{name, \"", escq(FuncName), "\"}.\n"]}
+ end;
+
+rule([name,func,funcs,erlref|_], {_,[_File], [{pcdata,[],Name}]}) ->
+ FName = lists:flatten(docb_html_util:pcdata_to_html(Name)),
+ TName = docb_util:trim(FName),
+ case catch docb_util:fknidx(TName, "/") of
+ {'EXIT',_} ->
+ {drop, ["{name, \"", escq(TName), "\"}.\n"]};
+ FuncName ->
+ {drop, ["{name, \"", escq(FuncName), "\"}.\n"]}
+ end;
+
+rule([name, func| _], {_, [_File], [{pcdata, [], Name}]}) ->
+ FName = lists:flatten(docb_html_util:pcdata_to_html(Name)),
+ TName = docb_util:trim(FName),
+ Cmd = case string:tokens(TName, " ") of
+ [Cmd0| _] ->
+ Cmd0;
+ _ ->
+ TName
+ end,
+ {drop, ["{name, \"", escq(Cmd), "\"}.\n"]};
+
+rule([fsummary| _], _) ->
+ {"{fsummary, \"", "\"}.\n"};
+
+rule([c, fsummary|_], _) ->
+ {"", ""};
+
+rule([em, fsummary|_], _) ->
+ {"", ""};
+
+rule([pcdata| _], {_, _, Data}) ->
+ FData = lists:flatten(docb_html_util:pcdata_to_html(Data)),
+ Out = lists:map(fun($\n) -> $ ; (C) -> C end, FData),
+ {drop, escq(Out)};
+
+rule(_, _) ->
+ {drop, ""}.
+
+escq(Cs) ->
+ lists:flatmap(fun($") ->
+ "\\\"";
+ (C) -> [C]
+ end,
+ Cs).