File 0261-stdlib-Add-h4-h5-h6-to-application-erlang-html.patch of Package erlang
From 48fb6ae330ad543fdf19f8c5c957aece74f4488e Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Wed, 20 Jan 2021 15:31:52 +0100
Subject: [PATCH 1/7] stdlib: Add h4+h5+h6 to application/erlang+html
These headers are emitted by edoc.
---
lib/erl_docgen/doc/src/doc_storage.xml | 3 ++-
lib/stdlib/src/shell_docs.erl | 18 ++++++++++--------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/lib/erl_docgen/doc/src/doc_storage.xml b/lib/erl_docgen/doc/src/doc_storage.xml
index 2c719b3f20..c397c73eef 100644
--- a/lib/erl_docgen/doc/src/doc_storage.xml
+++ b/lib/erl_docgen/doc/src/doc_storage.xml
@@ -61,7 +61,8 @@
-type chunk_element_type() :: chunk_element_inline_type() | chunk_element_block_type().
-type chunk_element_inline_type() :: a | code | em | i.
-type chunk_element_block_type() :: p | 'div' | br | pre | ul |
- ol | li | dl | dt | dd | h1 | h2 | h3.
+ ol | li | dl | dt | dd |
+ h1 | h2 | h3 | h4 | h5 | h6.
</code>
<p>The different element types follow their HTML meaning when rendered.
The following are some general rules for how the chunk elements are allowed
diff --git a/lib/stdlib/src/shell_docs.erl b/lib/stdlib/src/shell_docs.erl
index 5abb3a7f0c..8fa9ec3675 100644
--- a/lib/stdlib/src/shell_docs.erl
+++ b/lib/stdlib/src/shell_docs.erl
@@ -38,13 +38,13 @@
columns
}).
--define(ALL_ELEMENTS,[a,p,'div',br,h1,h2,h3,i,em,pre,code,ul,ol,li,dl,dt,dd]).
+-define(ALL_ELEMENTS,[a,p,'div',br,h1,h2,h3,h4,h5,h6,i,em,pre,code,ul,ol,li,dl,dt,dd]).
%% inline elements are:
-define(INLINE,[i,em,code,a]).
-define(IS_INLINE(ELEM),(((ELEM) =:= a) orelse ((ELEM) =:= code)
orelse ((ELEM) =:= i) orelse ((ELEM) =:= em))).
%% non-inline elements are:
--define(BLOCK,[p,'div',pre,br,ul,ol,li,dl,dt,dd,h1,h2,h3]).
+-define(BLOCK,[p,'div',pre,br,ul,ol,li,dl,dt,dd,h1,h2,h3,h4,h5,h6]).
-define(IS_BLOCK(ELEM),not ?IS_INLINE(ELEM)).
-define(IS_PRE(ELEM),(((ELEM) =:= pre))).
@@ -62,7 +62,8 @@
-type chunk_element_type() :: chunk_element_inline_type() | chunk_element_block_type().
-type chunk_element_inline_type() :: a | code | em | i.
-type chunk_element_block_type() :: p | 'div' | br | pre | ul |
- ol | li | dl | dt | dd | h1 | h2 | h3.
+ ol | li | dl | dt | dd |
+ h1 | h2 | h3 | h4 | h5 | h6.
-spec validate(Module) -> ok when
Module :: module() | docs_v1().
@@ -130,9 +131,9 @@ validate_docs({Tag,Attr,Content},Path) ->
false ->
ok
end,
- %% Test that there are no block tags within a pre, h1, h2 or h3
- case lists:member(pre,Path) or lists:member(h1,Path) or
- lists:member(h2,Path) or lists:member(h3,Path) of
+ %% Test that there are no block tags within a pre, h*
+ case lists:member(pre,Path) or
+ lists:any(fun(H) -> lists:member(H,Path) end, [h1,h2,h3,h4,h5,h6]) of
true when ?IS_BLOCK(Tag) ->
throw({cannot_put_block_tag_within_pre,Tag,Path});
_ ->
@@ -741,12 +742,13 @@ render_element({IgnoreMe,_,Content}, State, Pos, Ind,D)
when IgnoreMe =:= a ->
render_docs(Content, State, Pos, Ind,D);
-%% Catch h1, h2 and h3 before the padding is done as they reset padding
+%% Catch h* before the padding is done as they reset padding
render_element({h1,_,Content},State,0 = Pos,_Ind,D) ->
trimnlnl(render_element({code,[],[{em,[],Content}]}, State, Pos, 0, D));
render_element({h2,_,Content},State,0 = Pos,_Ind,D) ->
trimnlnl(render_element({em,[],Content}, State, Pos, 0, D));
-render_element({h3,_,Content},State,Pos,_Ind,D) when Pos =< 2 ->
+render_element({H,_,Content},State,Pos,_Ind,D)
+ when Pos =< 2, H =:= h3 orelse H =:= h4 orelse H =:= h5 orelse H =:= h6 ->
trimnlnl(render_element({code,[],Content}, State, Pos, 2, D));
render_element({pre,_Attr,_Content} = E,State,Pos,Ind,D) when Pos > Ind ->
--
2.26.2