diff options
author | Lukas Larsson <lukas@erlang.org> | 2020-03-11 12:30:19 +0100 |
---|---|---|
committer | Lukas Larsson <lukas@erlang.org> | 2020-03-27 11:02:23 +0100 |
commit | 398e668961c1c52d752131f2f37230eb567f17f6 (patch) | |
tree | 1e411aecf946bb43e98fdca2169949026bf2e708 /lib/erl_docgen | |
parent | 0799c2b0e9ae5fce18d092a153fff884d1dd3912 (diff) | |
download | erlang-398e668961c1c52d752131f2f37230eb567f17f6.tar.gz |
docgen: Generate correct see tags for edoc and specs
Diffstat (limited to 'lib/erl_docgen')
-rw-r--r-- | lib/erl_docgen/priv/dtd/common.dtd | 32 | ||||
-rw-r--r-- | lib/erl_docgen/priv/dtd/common.refs.dtd | 6 | ||||
-rw-r--r-- | lib/erl_docgen/priv/dtd/erlref.dtd | 2 | ||||
-rw-r--r-- | lib/erl_docgen/src/docgen_edoc_xml_cb.erl | 21 | ||||
-rw-r--r-- | lib/erl_docgen/src/docgen_otp_specs.erl | 8 | ||||
-rw-r--r-- | lib/erl_docgen/src/docgen_xmerl_xml_cb.erl | 15 |
6 files changed, 65 insertions, 19 deletions
diff --git a/lib/erl_docgen/priv/dtd/common.dtd b/lib/erl_docgen/priv/dtd/common.dtd index ca680c15b6..d4d5d989a5 100644 --- a/lib/erl_docgen/priv/dtd/common.dtd +++ b/lib/erl_docgen/priv/dtd/common.dtd @@ -22,13 +22,15 @@ <!ENTITY % common.entities SYSTEM "common.entities.dtd" > %common.entities; +<!ENTITY % refs "seemfa|seeerl|seetype|seeapp|seecom|seecref|seefile|seeguide|url" > + <!ENTITY % block "p|pre|code|list|taglist|codeinclude" > -<!ENTITY % inline "#PCDATA|c|i|em|strong|term|br|seealso| - url|marker|anno|image" > +<!ENTITY % inline "#PCDATA|c|i|em|strong|term|br|%refs;| + marker|anno|image" > <!-- XXX --> <!ELEMENT p (%inline;)* > -<!ELEMENT pre (#PCDATA|seealso|url|input|anno)* > -<!ELEMENT input (#PCDATA|seealso|url|anno)* > +<!ELEMENT pre (#PCDATA|%refs;|input|anno)* > +<!ELEMENT input (#PCDATA|%refs;|anno)* > <!ELEMENT code (#PCDATA|anno)* > <!ATTLIST code type (erl|c|none) "none" > <!ELEMENT quote (p)* > @@ -50,13 +52,29 @@ <!ELEMENT list (item+) > <!ATTLIST list type (ordered|bulleted) "bulleted" > <!ELEMENT taglist (marker*,tag,item+)+ > -<!ELEMENT tag (#PCDATA|c|i|em|br|seealso|url|marker|anno)* > +<!ELEMENT tag (#PCDATA|c|i|em|br|%refs;|marker|anno)* > <!ELEMENT item (%inline;|%block;|warning|note|dont|do|quote|table)* > <!-- References --> -<!ELEMENT seealso (#PCDATA|c|i|em|anno)* > -<!ATTLIST seealso marker CDATA #REQUIRED > +<!ENTITY % refinline "#PCDATA|c|i|em|anno" > + +<!ELEMENT seemfa (%refinline;)* > +<!ATTLIST seemfa marker CDATA #REQUIRED > +<!ELEMENT seeerl (%refinline;)* > +<!ATTLIST seeerl marker CDATA #REQUIRED > +<!ELEMENT seetype (%refinline;)* > +<!ATTLIST seetype marker CDATA #REQUIRED > +<!ELEMENT seeapp (%refinline;)* > +<!ATTLIST seeapp marker CDATA "" > +<!ELEMENT seecom (%refinline;)* > +<!ATTLIST seecom marker CDATA #REQUIRED > +<!ELEMENT seecref (%refinline;)* > +<!ATTLIST seecref marker CDATA #REQUIRED > +<!ELEMENT seefile (%refinline;)* > +<!ATTLIST seefile marker CDATA #REQUIRED > +<!ELEMENT seeguide (%refinline;)* > +<!ATTLIST seeguide marker CDATA "" > <!ELEMENT url (#PCDATA) > <!ATTLIST url href CDATA #REQUIRED > <!ELEMENT marker EMPTY > diff --git a/lib/erl_docgen/priv/dtd/common.refs.dtd b/lib/erl_docgen/priv/dtd/common.refs.dtd index 07c876a17f..9a60d52682 100644 --- a/lib/erl_docgen/priv/dtd/common.refs.dtd +++ b/lib/erl_docgen/priv/dtd/common.refs.dtd @@ -36,8 +36,8 @@ <!ATTLIST type variable CDATA #IMPLIED name CDATA #IMPLIED name_i CDATA #IMPLIED> -<!ELEMENT v (#PCDATA|seealso)* > -<!ELEMENT d (#PCDATA|seealso|c|i|em)* > +<!ELEMENT v (#PCDATA|%refs;)* > +<!ELEMENT d (#PCDATA|%refs;|c|i|em)* > <!ELEMENT desc (%block;|quote|br|marker|warning|note|dont|do)* > <!ELEMENT authors (aname,email)+ > <!ELEMENT aname (#PCDATA) > @@ -49,6 +49,6 @@ <!ELEMENT datatype_title (#PCDATA) > <!ELEMENT datatype (name+,desc?) > <!ATTLIST datatype ghlink CDATA #IMPLIED> -<!ELEMENT type_desc (#PCDATA|anno|c|seealso)* > +<!ELEMENT type_desc (#PCDATA|anno|c|%refs;)* > <!ATTLIST type_desc variable CDATA #IMPLIED name CDATA #IMPLIED> diff --git a/lib/erl_docgen/priv/dtd/erlref.dtd b/lib/erl_docgen/priv/dtd/erlref.dtd index 8202ea5a4d..960a00025d 100644 --- a/lib/erl_docgen/priv/dtd/erlref.dtd +++ b/lib/erl_docgen/priv/dtd/erlref.dtd @@ -30,7 +30,7 @@ <!-- `name' is used in common.refs.dtd and must therefore be defined in each *ref. dtd --> -<!ELEMENT name (#PCDATA|seealso)* > +<!ELEMENT name (#PCDATA|%refs;)* > <!ATTLIST name name CDATA #IMPLIED arity CDATA #IMPLIED clause_i CDATA #IMPLIED diff --git a/lib/erl_docgen/src/docgen_edoc_xml_cb.erl b/lib/erl_docgen/src/docgen_edoc_xml_cb.erl index 19743cf221..06781f4b32 100644 --- a/lib/erl_docgen/src/docgen_edoc_xml_cb.erl +++ b/lib/erl_docgen/src/docgen_edoc_xml_cb.erl @@ -951,7 +951,7 @@ seealso_function(Es) -> see(#xmlElement{content=Es0} = E) -> Href0 = get_attrval(href, E), {Href, Es} = otp_xmlify_a_href(Href0, Es0), - [{seealso, [{marker, Href}], Es}]. + [makesee(Href, Es)]. equiv(Es) -> case get_content(equiv, Es) of @@ -970,13 +970,28 @@ equiv(Es) -> {c,Expr1}; Ref0 -> {Ref, _Es2} = otp_xmlify_a_href(Ref0, [E]), - {seealso, [{marker, Ref}], Expr1} + makesee(Ref, Expr1) end end, [{p, ["Equivalent to ", Expr2, "."]}, ?NL] end end. +makesee(Ref, Es) -> + case split(Ref,"#") of + [Mod,"type-"++Anchor] -> + {seetype,[{marker,Mod ++ "#" ++ Anchor}], Es}; + ["type-"++Anchor] -> + {seetype,[{marker,"#" ++ Anchor}], Es}; + _Else -> + case split(Ref,"/") of + [_] -> + {seeerl, [{marker,Ref}], Es}; + [_,_] -> + {seemfa, [{marker,Ref}], Es} + end + end. + authors(Es) -> case get_elem(author, Es) of [] -> @@ -1123,7 +1138,7 @@ see_type(E, Es0) -> %% Fails for parametrized types: Text = #xmlText{value = lists:append(Es0)}, {Href, Es} = otp_xmlify_a_href(Href0, [Text]), - [{seealso, [{marker, Href}], Es}] + [makesee(Href, Es)] catch _:_ -> Es0 diff --git a/lib/erl_docgen/src/docgen_otp_specs.erl b/lib/erl_docgen/src/docgen_otp_specs.erl index 311ec1471a..7a81056aae 100644 --- a/lib/erl_docgen/src/docgen_otp_specs.erl +++ b/lib/erl_docgen/src/docgen_otp_specs.erl @@ -252,10 +252,10 @@ diaf(L, St, " "++O, R, Opts) -> diaf(L, St, "\n"++O, R, Opts) -> Ss = lists:takewhile(fun(C) -> C =:= $\s end, O), diaf(L, St, lists:nthtail(length(Ss), O), ["\n"++Ss | R], Opts); -diaf([{seealso, HRef0, S0} | L], St, O0, R, Opts) -> +diaf([{seetype, HRef0, S0} | L], St, O0, R, Opts) -> {S, O} = diaf(S0, app_fix(O0), Opts), HRef = fix_mod_ref(HRef0, Opts), - diaf(L, St, O, [{seealso, HRef, S} | R], Opts); + diaf(L, St, O, [{seetype, HRef, S} | R], Opts); diaf("="++L, St, "::"++O, R, Opts) -> %% EDoc uses "=" for record field types; Dialyzer uses "::". Maybe %% there should be an option for this, possibly affecting other @@ -329,8 +329,8 @@ fix_mod_ref([{marker, S}]=HRef0, #opts{file_suffix = FS}) -> see(E, Es) -> case href(E) of [] -> Es; - Ref -> - [{seealso, Ref, Es}] + [{marker,Ref}] -> + [{seetype, [{marker,lists:flatten(string:replace(Ref,"#type-","#"))}], Es}] end. href(E) -> diff --git a/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl b/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl index 9d69143c3c..01b6ececcb 100644 --- a/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl +++ b/lib/erl_docgen/src/docgen_xmerl_xml_cb.erl @@ -65,7 +65,7 @@ convert_tag(a, [Attr]) -> true -> {url, [Attr]}; false -> - {seealso, [Attr#xmlAttribute{name=marker}]} + makesee(Val) end; name -> {marker, [Attr#xmlAttribute{name=id}]} @@ -94,3 +94,16 @@ is_url(FileRef) -> "" -> false; % no extension = xml file _Ext -> true % extension end. + +makesee(Ref) -> + case string:split(Ref,"#") of + [Mod,"type-"++Anchor] -> + {seetype,[#xmlAttribute{name = marker, value = Mod ++ "#" ++ Anchor}]}; + _Else -> + case string:split(Ref,"/") of + [_] -> + {seeerl, [#xmlAttribute{name = marker, value = Ref}]}; + [_,_] -> + {seemfa, [#xmlAttribute{name = marker, value = Ref}]} + end + end. |