diff options
Diffstat (limited to 'lib/docbuilder/src/docb_tr_cite2html.erl')
-rw-r--r-- | lib/docbuilder/src/docb_tr_cite2html.erl | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/lib/docbuilder/src/docb_tr_cite2html.erl b/lib/docbuilder/src/docb_tr_cite2html.erl new file mode 100644 index 0000000000..4ecbfa4e91 --- /dev/null +++ b/lib/docbuilder/src/docb_tr_cite2html.erl @@ -0,0 +1,136 @@ +%% ``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_cite2html). + +-export([extension/0, transform/3, rule/2, rule/3]). + +extension() -> + ".html". + +transform(_File, Tree, Opts) -> + purge(Tree, Opts). + +purge({Tag, Attrs, [Header|Body]}, Opts) -> + CiteList = case docb_util:lookup_option({defs,cite}, Opts) of + false -> []; + Value -> Value + end, + B1 = purge_body(Body, CiteList), + B2 = lists:ukeysort(2, B1), + {Tag, Attrs, [Header|B2]}. + +purge_body([], _) -> + []; +purge_body([{pcdata,_Attrs,_More}|Rest], CiteList) -> + purge_body(Rest, CiteList); +purge_body([{cite,[{"ID","CDATA",ID}],More}|Rest], CiteList) -> + case lists:keysearch(ID, 1, CiteList) of + false -> + [{cite, [{"NAME","CDATA",ID}, {"ID","CDATA",ID}], More}| + purge_body(Rest, CiteList)]; + {value, {ID, Name, _Description, _Responsible}} -> + [{cite, [{"NAME","CDATA",Name}, {"ID","CDATA",ID}], More}| + purge_body(Rest, CiteList)]; + {value, {ID, Name, _Description}} -> + [{cite, [{"NAME","CDATA",Name}, {"ID","CDATA",ID}], More}| + purge_body(Rest, CiteList)] + end; +purge_body([{_Tag,_Attrs,More}|Rest], CiteList) -> + lists:append(purge_body(More, CiteList), + purge_body(Rest, CiteList)). + +rule([header|_], _) -> + {drop, ""}; + +rule(_, _) -> + {drop, ""}. + +rule([cite|_], {_,[],[Header]}, Opts) -> + HeaderData = docb_html_util:all_header_data(Header), + {{docb_html_layout:chapter_top(HeaderData, Opts) ++ + "\n<center><h1>Bibliography</h1></center>\n", + docb_html_layout:chapter_bot(Opts)}, Opts}; + +rule([cite|_], {_,[],[Header|_]}, Opts) -> + HeaderData = docb_html_util:all_header_data(Header), + {{docb_html_layout:chapter_top(HeaderData, Opts) ++ + "\n<center><h1>Bibliography</h1></center>\n<dl>\n", + "\n</dl>\n" ++ docb_html_layout:chapter_bot(Opts)}, Opts}; + +rule([cite|_], {_,[Data],_}, Opts) -> + {{docb_html_layout:chapter_top(Data, Opts) ++ + "\n<center><h1>Bibliography</h1></center>\n<dl>\n", + "\n</dl>\n" ++ docb_html_layout:chapter_bot(Opts)}, Opts}; + +rule([cite|T], {A, B, [{citedef,C, + [{ctitle, [], [{pcdata,[],CTitle}]}, + {cauthor, [], [{pcdata,[],CAuthor}]}, + {chowpublished, [], + [{pcdata,[],Chowpublished}]}]}]}, Opts) -> + CiteDef = CTitle ++ " " ++ CAuthor ++ " " ++ Chowpublished, + rule([cite|T], {A,B,[{citedef,C,[{pcdata,[],CiteDef}]}]}, Opts); + +rule([cite|_], {_,[Name,ID], [{citedef,[],[{pcdata,[],Def}]}]}, Opts) -> + CiteList = + case docb_util:lookup_option({defs,cite}, Opts) of + false -> []; + Value -> Value + end, + case lists:keysearch(ID, 1, CiteList) of + false -> + {{drop,"\n<dt><a name=\"" ++ ID ++ "\">" ++ + "<strong>" ++ ID ++ "</strong></a></dt>\n<dd>" ++ + docb_html_util:pcdata_to_html(Def) ++ "\n</dd>\n"}, Opts}; + {value, {ID, Name, Description, _Responsible}} -> + docb_util:message(warning, + "Global cite ~s overriding local", [ID]), + {{drop,"\n<dt><a name=\"" ++ ID ++ "\">" ++ + "<strong>" ++ Name ++ "</strong></a></dt>\n<dd>" ++ + docb_html_util:pcdata_to_html(Description) ++ "\n</dd>\n"}, + Opts}; + {value, {ID, Name, Description}} -> + docb_util:message(warning, + "Global cite ~s overriding local", [ID]), + {{drop,"\n<dt><a name=\"" ++ ID ++ "\">" ++ + "<strong>" ++ Name ++ "</strong></a></dt>\n<dd>" ++ + docb_html_util:pcdata_to_html(Description) ++ "\n</dd>\n"}, Opts} + end; + +rule([cite|_], {_,[Name,ID],_}, Opts) -> + CiteList = + case docb_util:lookup_option({defs,cite}, Opts) of + false -> []; + Value -> Value + end, + case lists:keysearch(ID, 1, CiteList) of + false -> + docb_util:message(error, + "The cite ~s has no definition", [ID]), + {{drop,"\n<dt><a name=\"" ++ ID ++ "\">" ++ + "<strong>" ++ ID ++ "</strong></a></dt>\n<dd>" ++ + "??" ++ "\n</dd>\n"}, Opts}; + {value, {ID, Name, Description, _Responsible}} -> + {{drop,"\n<dt><a name=\"" ++ ID ++ "\">" ++ + "<strong>" ++ Name ++ "</strong></a></dt>\n<dd>" ++ + docb_html_util:pcdata_to_html(Description) ++ "\n</dd>\n"}, + Opts}; + {value, {ID, Name, Description}} -> + {{drop,"\n<dt><a name=\"" ++ ID ++ "\">" ++ + "<strong>" ++ Name ++ "</strong></a></dt>\n<dd>" ++ + docb_html_util:pcdata_to_html(Description) ++ "\n</dd>\n"}, Opts} + end. |