File 1213-Add-search-options-for-new-ex_doc.patch of Package erlang
From d92002842eb3f1dd0c42e7d77d46f8b027d14122 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20W=C4=85sowski?= <michal@erlang.org>
Date: Tue, 16 Dec 2025 12:33:23 +0100
Subject: [PATCH 3/4] Add search options for new ex_doc
---
make/ex_doc.exs | 195 +++++++++++++++++++++++------------------
make/ex_doc_wrapper.in | 4 +
2 files changed, 115 insertions(+), 84 deletions(-)
diff --git a/make/ex_doc.exs b/make/ex_doc.exs
index ca49433d1f..3800cbdd64 100644
--- a/make/ex_doc.exs
+++ b/make/ex_doc.exs
@@ -179,92 +179,119 @@ annotations = Access.get(local_config, :annotations_for_docs, fn _ -> [] end)
current_datetime = System.os_time() |> DateTime.from_unix!(:native)
-config = [
- proglang: :erlang,
- source_url_pattern: source_url_pattern,
- assets: %{Path.join(cwd, "/assets") => "assets"},
- logo: Path.join(:code.root_dir(), "system/doc/assets/erlang-logo.png"),
- before_closing_head_tag: fn _ -> "<style>.dark img { background-color: white; }</style>" end,
- before_closing_footer_tag: fn _ ->
- ~s'<p>Copyright © 1996-#{current_datetime.year} <a href="https://www.ericsson.com">Ericsson AB</a></p>'
- end,
- annotations_for_docs: fn md ->
- if Map.has_key?(md, :exported) && not md.exported do
- ["not exported"] ++ annotations.(md)
- else
- annotations.(md)
- end
- end,
- groups_for_extras:
- (Access.get(local_config, :groups_for_extras, []) ++
- [
- "User's Guides": ~r/guides/,
- "Command Line Tools": ~r|references/.*_cmd.md$|,
- References: ~r|references|,
- "Internal Docs": ~r/internal_doc/
- ])
- |> Enum.uniq(),
- extras: extras,
- skip_undefined_reference_warnings_on: ["notes.md"],
- groups_for_docs:
- (Access.get(local_config, :groups_for_docs, []) ++ groups_for_docs) |> Enum.uniq(),
- deps:
- deps ++
- [
- general_info: Path.join([link_libdir, "..", "doc"]),
- erts: Path.join([link_libdir, "..", "erts", "doc", "html"]),
- system: Path.join([link_libdir, "..", "system", "doc", "html"])
- ],
- before_closing_body_tag: fn
- :html ->
- """
- <script defer src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script>
- <script>
- let initialized = false;
-
- window.addEventListener("exdoc:loaded", () => {
- if (!initialized) {
- mermaid.initialize({
- startOnLoad: false,
- theme: document.body.className.includes("dark") ? "dark" : "default"
- });
- initialized = true;
- }
-
- let id = 0;
- for (const codeEl of document.querySelectorAll("pre code.mermaid")) {
- const preEl = codeEl.parentElement;
- const graphDefinition = codeEl.textContent;
- const graphEl = document.createElement("div");
- const graphId = "mermaid-graph-" + id++;
- mermaid.render(graphId, graphDefinition).then(({svg, bindFunctions}) => {
- graphEl.innerHTML = svg;
- bindFunctions?.(graphEl);
- preEl.insertAdjacentElement("afterend", graphEl);
- preEl.remove();
- });
- }
- });
- </script>
- """
-
- _ ->
- ""
- end,
- before_closing_head_tag: fn
- :epub ->
- """
- <style type="text/css">
- .content-inner pre code.mermaid {
- display: none;
- }
- </style>
- """
+## Check ExDoc version
+version_str =
+ case System.get_env("EX_DOC_VERSION") do
+ value when value in [nil, ""] -> raise "EX_DOC_VERSION environment variable is required"
+ value -> value
+ end
- _ ->
- ""
+version =
+ Regex.run(~r/v(\d+\.\d+\.\d+)/, version_str, capture: :all_but_first)
+ |> List.first()
+ |> Version.parse!()
+
+search_config =
+ if Version.compare(version, "0.39.0") in [:gt, :eq] do
+ [
+ search: [
+ %{
+ name: "Search erlang documentation",
+ help: "Search erlang documentation"
+ }
+ ]
+ ]
+ else
+ []
end
-]
+
+config =
+ [
+ proglang: :erlang,
+ source_url_pattern: source_url_pattern,
+ assets: %{Path.join(cwd, "/assets") => "assets"},
+ logo: Path.join(:code.root_dir(), "system/doc/assets/erlang-logo.png"),
+ before_closing_head_tag: fn _ -> "<style>.dark img { background-color: white; }</style>" end,
+ before_closing_footer_tag: fn _ ->
+ ~s'<p>Copyright © 1996-#{current_datetime.year} <a href="https://www.ericsson.com">Ericsson AB</a></p>'
+ end,
+ annotations_for_docs: fn md ->
+ if Map.has_key?(md, :exported) && not md.exported do
+ ["not exported"] ++ annotations.(md)
+ else
+ annotations.(md)
+ end
+ end,
+ groups_for_extras:
+ (Access.get(local_config, :groups_for_extras, []) ++
+ [
+ "User's Guides": ~r/guides/,
+ "Command Line Tools": ~r|references/.*_cmd.md$|,
+ References: ~r|references|,
+ "Internal Docs": ~r/internal_doc/
+ ])
+ |> Enum.uniq(),
+ extras: extras,
+ skip_undefined_reference_warnings_on: ["notes.md"],
+ groups_for_docs:
+ (Access.get(local_config, :groups_for_docs, []) ++ groups_for_docs) |> Enum.uniq(),
+ deps:
+ deps ++
+ [
+ general_info: Path.join([link_libdir, "..", "doc"]),
+ erts: Path.join([link_libdir, "..", "erts", "doc", "html"]),
+ system: Path.join([link_libdir, "..", "system", "doc", "html"])
+ ],
+ before_closing_body_tag: fn
+ :html ->
+ """
+ <script defer src="https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.min.js"></script>
+ <script>
+ let initialized = false;
+
+ window.addEventListener("exdoc:loaded", () => {
+ if (!initialized) {
+ mermaid.initialize({
+ startOnLoad: false,
+ theme: document.body.className.includes("dark") ? "dark" : "default"
+ });
+ initialized = true;
+ }
+
+ let id = 0;
+ for (const codeEl of document.querySelectorAll("pre code.mermaid")) {
+ const preEl = codeEl.parentElement;
+ const graphDefinition = codeEl.textContent;
+ const graphEl = document.createElement("div");
+ const graphId = "mermaid-graph-" + id++;
+ mermaid.render(graphId, graphDefinition).then(({svg, bindFunctions}) => {
+ graphEl.innerHTML = svg;
+ bindFunctions?.(graphEl);
+ preEl.insertAdjacentElement("afterend", graphEl);
+ preEl.remove();
+ });
+ }
+ });
+ </script>
+ """
+
+ _ ->
+ ""
+ end,
+ before_closing_head_tag: fn
+ :epub ->
+ """
+ <style type="text/css">
+ .content-inner pre code.mermaid {
+ display: none;
+ }
+ </style>
+ """
+
+ _ ->
+ ""
+ end
+ ] ++ search_config
Keyword.merge(
config,
diff --git a/make/ex_doc_wrapper.in b/make/ex_doc_wrapper.in
index ab2981be3f..7b3238f252 100755
--- a/make/ex_doc_wrapper.in
+++ b/make/ex_doc_wrapper.in
@@ -47,4 +47,8 @@ if [ -z "${EX_DOC}" ]; then
fi
fi
+## Detect ex_doc version and store it in a variable
+## This is currently used to handle search engine changes in v0.39.0
+export EX_DOC_VERSION=$(escript@EXEEXT@ $EX_DOC --version)
+
escript@EXEEXT@ "${EX_DOC}" "${ARGS[@]}"
--
2.51.0