aboutsummaryrefslogtreecommitdiffstats
path: root/lib/docbuilder/src/docb_tr_cite2html.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/docbuilder/src/docb_tr_cite2html.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/docbuilder/src/docb_tr_cite2html.erl')
-rw-r--r--lib/docbuilder/src/docb_tr_cite2html.erl136
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.