docb_tr_application2html.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 288 行
ERL
288 行
%% ``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_application2html).-export([extension/0, transform/3, rule/2, rule/3]).extension() -> ".html".transform(File, {application, _Attrs, [Header|Rest]}, Opts0) -> %% Extract header data Title = docb_html_util:extract_header_data(title, Header), case docb_util:an_option(kwicindex_only, Opts0) of false -> %% Create the framing HTML document OutFile = docb_util:outfile(File++"_frame", ".html", Opts0), case file:open(OutFile, write) of {ok, Fd} -> io:format(Fd,"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\"><!-- This document was generated using DocBuilder-" ++ docb_util:version() ++ " --><HTML><HEAD> <TITLE>~s</TITLE>" ++ docb_util:html_snippet(head, Opts0) ++"</HEAD><FRAMESET COLS=\"150, *\"> <FRAME SRC=\"~s\" NAME=\"toc\"> <FRAME SRC=\"~s\" NAME=\"document\"> <NOFRAMES> <BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\" LINK=\"#0000FF\" VLINK=\"#FF00FF\" ALINK=\"#FF0000\"> <P>This documentation requires a browser that can handle frames </BODY> </NOFRAMES></FRAMESET></HTML>", [Title, File++".html", File++"_first.html"]), file:close(Fd) end, %% Create the front HTML document docb_main:transform(first, html, Opts0, File ++ "_first", {first, [], [Header|Rest]}); true -> ok end, %% Extract files to include Files = case Rest of [{description, _, _}|NewRest] -> lists:map(fun({include, [{_, _, F}], _}) -> F end, NewRest); [{include, _, _}|_NewRest] -> lists:map(fun({include, [{_, _, F}], _}) -> F end, Rest) end, %% Concat all reference manuals into a *big* parse tree ConcatTree = concat_files(Files, Opts0), %% Create the kwic index src file to be put in outdir docb_main:transform(refs, kwic, Opts0, File, {refs,[],ConcatTree}), case docb_util:an_option(kwicindex_only, Opts0) of false -> %% Create an index docb_main:transform(index, html, Opts0, File ++ "_index", {index, [], [Header|ConcatTree]}), %% Create a cite dictionary docb_main:transform(cite, html, Opts0, File ++ "_cite", {cite, [], [Header|ConcatTree]}), %% Create a term dictionary docb_main:transform(term, html, Opts0, File ++ "_term", {term, [], [Header|ConcatTree]}), %% Transform each reference page case docb_util:an_option(framework_only, Opts0) of true -> ok; false -> transform_refs(Files, [dict,{part_application,File}|Opts0]) end; true -> ok end, %% Find all fascicules to be put in the top menu of the table of %% contents Ext = docb_util:lookup_option(src_type, Opts0), Opts2 = case filelib:is_regular("fascicules"++Ext) of true -> case docb_main:parse1("fascicules", Opts0) of {ok, Parse} -> FascData = get_fasc_data(Parse), case lists:keysearch(File, 1, FascData) of {value, {_, _, "YES", _}} -> OrigFile = docb_util:outfile(File++"_frame", ".html", Opts0), EntryFile = docb_util:outfile("index", ".html",Opts0), docb_util:message(info, "Copying ~s to ~s", [OrigFile,EntryFile]), file:copy(OrigFile, EntryFile); _ -> ok end, [{fascdata, FascData}| Opts0]; errors -> %% Do not bother docb_util:message( warning, "fascicules~s could not be parsed," " no index.html created", [Ext]), Opts0 end; false -> %% do not bother docb_util:message(warning, "fascicules~s not found, " "no index.html created", [Ext]), Opts0 end, %% Create ToC parse tree {{toc, [{"FILE", "CDATA", File}], [Header|make_toc(ConcatTree)]}, Opts2}.concat_files(Files, Opts) -> concat_files(Files, [], Opts).concat_files([File|Rest], Body, Opts) -> case docb_main:parse1(File, Opts) of {ok, Parse} -> NewParse=expand([Parse], File), %% Remove the reference manual header [{Ref, [], [_Hdr| NewBody]}] = NewParse, RefParse = [{Ref, [], NewBody}], lists:append(Body, concat_files(Rest, RefParse, Opts)); errors -> errors end;concat_files([], Body, _Opts) -> Body.expand([], _) -> [];expand([{pcdata, Attrs, More}|Rest], File) -> [{pcdata, Attrs, More}|expand(Rest, File)];expand([{name, Attrs, More}|Rest], File) -> [{name, [{"FILE", "CDATA", File}|Attrs], More}|expand(Rest, File)];expand([{module, Attrs, More}|Rest], File) -> [{module, [{"FILE", "CDATA", File}|Attrs], More}|expand(Rest,File)];expand([{file, Attrs, More}|Rest], File) -> [{file, [{"FILE", "CDATA", File}|Attrs], More}|expand(Rest, File)];expand([{app, Attrs, More}|Rest], File) -> [{app, [{"FILE", "CDATA", File}|Attrs], More}|expand(Rest, File)];expand([{lib, Attrs, More}|Rest], File) -> [{lib, [{"FILE", "CDATA", File}|Attrs], More}|expand(Rest, File)];expand([{com, Attrs, More}|Rest], File) -> [{com, [{"FILE", "CDATA", File}|Attrs], More}|expand(Rest, File)];expand([{Tag, Attrs, More}|Rest], File) -> [{Tag, Attrs, expand(More, File)}|expand(Rest, File)].transform_refs([], _) -> ok;transform_refs([File|Rest], Opts) -> Ext = docb_util:lookup_option(src_type, Opts), docb_util:message(info, "Processing \"~s~s\"", [File, Ext]), docb_main:process(File, Opts), transform_refs(Rest, Opts).make_toc([]) -> [];make_toc([{pcdata, _Attrs, _More}|Rest]) -> make_toc(Rest);make_toc([{module, Attrs, More}|Rest]) -> [{module, Attrs, More}|make_toc(Rest)];make_toc([{file, Attrs, More}|Rest]) -> [{file, Attrs, More}|make_toc(Rest)];make_toc([{app, Attrs, More}|Rest]) -> [{app, Attrs, More}|make_toc(Rest)];make_toc([{lib, Attrs, More}|Rest]) -> [{lib, Attrs, More}|make_toc(Rest)];make_toc([{com, Attrs, More}|Rest]) -> [{com, Attrs, More}|make_toc(Rest)];make_toc([{_Tag, _Attrs, More}|Rest]) -> lists:append(make_toc(More), make_toc(Rest)).rule([module|_], {_, [File], _}) -> {"<SMALL><A TARGET=\"document\" HREF=\"" ++ docb_html_util:make_anchor_href(File) ++ "\">", "</A></SMALL><BR>\n"};rule([file|_], {_, [File], _}) -> {"<SMALL><A TARGET=\"document\" HREF=\"" ++ docb_html_util:make_anchor_href(File) ++ "\">", "</A></SMALL><BR>\n"};rule([app|_], {_, [File], _}) -> {"<SMALL><A TARGET=\"document\" HREF=\"" ++ docb_html_util:make_anchor_href(File) ++ "\">", "</A></SMALL><BR>\n"};rule([lib|_], {_, [File], _}) -> {"<SMALL><A TARGET=\"document\" HREF=\"" ++ docb_html_util:make_anchor_href(File) ++ "\">", "</A></SMALL><BR>\n"};rule([com|_], {_, [File], _}) -> {"<SMALL><A TARGET=\"document\" HREF=\"" ++ docb_html_util:make_anchor_href(File) ++ "\">", "</A></SMALL><BR>\n"};rule([pcdata|_], {_, _, Data}) -> {drop, docb_html_util:pcdata_to_html(Data)};rule(_, _) -> {drop, ""}.rule([toc|_], {_Depth, [File], [Header|_]}, Opts) -> case docb_util:lookup_option(fascdata, Opts) of false -> {{docb_html_layout:application_toc_top( docb_html_util:all_header_data(Header), File, Opts), docb_html_layout:part_toc_bot()}, Opts}; FascData -> HRefTexts = lists:map( fun({_File, HRef, _Entry, PCText}) -> {HRef, docb_html_util:pcdata_to_html(PCText)} end, FascData), {{docb_html_layout:application_toc_top( docb_html_util:all_header_data(Header), File, Opts, HRefTexts) ++ "\n<P>\n", docb_html_layout:part_toc_bot()}, Opts} end.%% Returns: [{File, HRef, Entry, Text}].get_fasc_data({fascicules, _, Fascs}) -> lists:map( fun({fascicule, Atts, Trees}) -> AVals = get_avals(Atts), PCText = get_pc_text(Trees), list_to_tuple(lists:append([AVals, [PCText]])) end, Fascs).get_avals(Atts) -> lists:map(fun(Tuple) -> element(3, Tuple) end, Atts).get_pc_text([{pcdata, _, Text}]) -> Text.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?