From b01543aef72c5c2edabaf69ab7f0be0953d578c7 Mon Sep 17 00:00:00 2001 From: Yuri Pereira Constante Date: Fri, 12 Jan 2024 14:46:55 -0300 Subject: [PATCH] Optimize leftpad on raw_html (#526) * Optimize leftpad on raw_html * Avoid pad_increase when children is empty * Format --- lib/floki/raw_html.ex | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/floki/raw_html.ex b/lib/floki/raw_html.ex index beaba76a..67993013 100644 --- a/lib/floki/raw_html.ex +++ b/lib/floki/raw_html.ex @@ -43,7 +43,7 @@ defmodule Floki.RawHTML do padding = case Keyword.fetch(options, :pretty) do - {:ok, true} -> %{pad: " ", line_ending: "\n", depth: 0} + {:ok, true} -> %{pad: "", pad_increase: " ", line_ending: "\n", depth: 0} _ -> :noop end @@ -178,10 +178,16 @@ defmodule Floki.RawHTML do _ -> encoder end + children_content = + case children do + [] -> "" + _ -> build_raw_html(children, "", encoder, pad_increase(padding), self_closing_tags) + end + [ tag_with_attrs(type, attrs, children, padding, encoder, self_closing_tags), line_ending(padding), - build_raw_html(children, "", encoder, pad_increase(padding), self_closing_tags), + children_content, close_end_tag(type, children, padding, self_closing_tags) ] end @@ -211,7 +217,7 @@ defmodule Floki.RawHTML do do: map_intersperse(Map.to_list(attrs), separator, mapper) defp leftpad(:noop), do: "" - defp leftpad(%{pad: pad, depth: depth}), do: String.duplicate(pad, depth) + defp leftpad(%{pad: pad}), do: pad defp leftpad_content(:noop, string), do: string @@ -226,7 +232,11 @@ defmodule Floki.RawHTML do end defp pad_increase(:noop), do: :noop - defp pad_increase(padder = %{depth: depth}), do: %{padder | depth: depth + 1} + + defp pad_increase(padder = %{depth: depth, pad_increase: pad_increase}) do + depth = depth + 1 + %{padder | depth: depth, pad: String.duplicate(pad_increase, depth)} + end defp line_ending(:noop), do: "" defp line_ending(%{line_ending: line_ending}), do: line_ending