<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="143447" data-post-id="143447">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertDober" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertDober/120/4842_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertDober
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="MarioFlach" data-post="11" data-topic="25208">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/marioflach/48/24564_2.png" class="avatar"> MarioFlach:</div>
<blockquote>
<p>Just select the text you want to quote in the comment you want and click the “Quote” popover link.</p>
</blockquote>
</aside>
<p>Thanks so much</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143447" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-143447" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143447"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="143795" data-post-id="143795">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="MarioFlach" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/MarioFlach/120/24564_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  MarioFlach
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="RobertDober" data-post="9" data-topic="25208">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/robertdober/48/4842_2.png" class="avatar"> RobertDober:</div>
<blockquote>
<p>There are some subtle differences to Floki, which was the inspiration for the AST, it would be great if the use of Floki.raw_html/2 would work. Please let me know.</p>
</blockquote>
</aside>
<p>I’ve tested with different inputs and <code>Floki.raw_html/2</code> definitely works great (with basic typography tags, lists, code blocks) so far.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143795" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-143795" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143795"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="143800" data-post-id="143800">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertDober" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertDober/120/4842_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertDober
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="MarioFlach" data-post="13" data-topic="25208">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/marioflach/48/24564_2.png" class="avatar"> MarioFlach:</div>
<blockquote>
<p>I’ve tested with different inputs and <code>Floki.raw_html/2</code> definitely works great (with basic typography tags, lists, code blocks) so far.</p>
</blockquote>
</aside>
<p>Great news, thx</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143800" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-143800" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143800"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="143963" data-post-id="143963">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="MarioFlach" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/MarioFlach/120/24564_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  MarioFlach
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I started experimenting with the AST. Pretty straight forward for what I want to do:</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/f/a/fa4aaf98c0b0f91ab49a654e01850eaaaffae106.jpeg" data-download-href="https://forum.elixirforum.com/uploads/default/fa4aaf98c0b0f91ab49a654e01850eaaaffae106" title="58" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/3X/f/a/fa4aaf98c0b0f91ab49a654e01850eaaaffae106_2_652x600.jpeg" alt="58" data-base62-sha1="zIbnEmqD0j7dweTY83ONjcYCWZ8" width="652" height="600" srcset="https://forum.elixirforum.com/uploads/default/optimized/3X/f/a/fa4aaf98c0b0f91ab49a654e01850eaaaffae106_2_652x600.jpeg, https://forum.elixirforum.com/uploads/default/optimized/3X/f/a/fa4aaf98c0b0f91ab49a654e01850eaaaffae106_2_978x900.jpeg 1.5x, https://forum.elixirforum.com/uploads/default/optimized/3X/f/a/fa4aaf98c0b0f91ab49a654e01850eaaaffae106_2_1304x1200.jpeg 2x" data-dominant-color="F9F9F9"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">58</span><span class="informations">1568×1442 98.5 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule GitGud.Web.Markdown do
  @moduledoc """
  Conveniences for rendering Markdown.
  """

  @doc """
  Renders a Markdown formatted `content` to HTML.
  """
  @spec markdown(binary | nil) :: binary | nil
  def markdown(nil), do: nil
  def markdown(content) do
    case Earmark.as_ast(content) do
      {:ok, ast, _warnings} -&gt;
        ast
        |&gt; transform_ast()
        |&gt; Floki.raw_html()
    end
  end

  #
  # Helpers
  #

  defp transform_ast(ast) do
    ast
    |&gt; Enum.map(&amp;transform_ast_node/1)
    |&gt; List.flatten()
  end

  defp transform_ast_node({tag, _attrs, _ast} = node) when tag in ["code"], do: node
  defp transform_ast_node({tag, attrs, ast}) do
    {tag, attrs, transform_ast(ast)}
  end

  defp transform_ast_node(content) when is_binary(content) do
    content = Regex.replace(~r/:([a-z0-1\+]+):/, content, &amp;emojify_short_name/2)
    auto_link(content, Regex.scan(~r/#[0-9]+|@[a-zA-Z0-9_-]+|[a-f0-9]{7}/, content, return: :index))
  end

  defp emojify_short_name(match, short_name) do
    if emoji = Exmoji.from_short_name(short_name),
     do: Exmoji.EmojiChar.render(emoji),
   else: match
  end

  defp auto_link(content, []), do: content
  defp auto_link(content, indexes) do
    {content, rest, _offset} =
      Enum.reduce(List.flatten(indexes), {[], content, 0}, fn {idx, len}, {acc, rest, offset} -&gt;
        {head, rest} = String.split_at(rest, idx - offset)
        {link, rest} =
          case String.split_at(rest, len) do
            {"#" &lt;&gt; number, rest} -&gt;
              {{"a", [], ["##{number}"]}, rest} # TODO
            {"@" &lt;&gt; login, rest} -&gt;
              {{"a", [{"class", "has-text-black"}], ["@#{login}"]}, rest} # TODO
            {hash, rest} -&gt;
              {{"a", [], [{"code", [{"class", "has-text-link"}], [hash]}]}, rest} # TODO
          end
        {acc ++ [head, link], rest, idx+len}
      end)
    List.flatten(content, [rest])
  end
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143963" data-batch-url="/posts/batch_likers">
                        7
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-143963" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143963"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="143974" data-post-id="143974">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertDober" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertDober/120/4842_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertDober
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I am afraid of what will happen with comments, as I <strong>deliberately</strong> chose to diverge from <code>Floki's</code> decision here.</p>
<p>But I can change this, given the value to refeed into <code>Floki.raw_html/1</code> might provide, so please keep the great information flow up.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143974" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-143974" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143974"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="144028" data-post-id="144028">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="MarioFlach" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/MarioFlach/120/24564_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  MarioFlach
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Using <code>Floki.raw_html/1</code> is just a means to an end until <code>Earmark</code> provides it’s own AST → HTML function. I would not bother much about compatibility between the two. Perhaps if the only divergence is for comments it might be easier to just change that…</p>
<p>In my experimental implementation, parsing the <em>text content</em> of each node works fine but I’m wondering if this is the way to go.</p>
<p>Basically, each time I encounter an AST node <em>text content</em> (ignoring <code>"code"</code> tags) , I</p>
<ol>
<li>use a regex to replace <code>:emoji:</code> to unicode emojis.</li>
<li>use a regex to match <code>#N</code> (issue reference), <code>@USER</code> (user mention)  and <code>ffffff</code> (commit hash).</li>
</ol>
<pre data-code-wrap="elixir"><code class="lang-elixir">defp transform_ast_node(content) when is_binary(content) do
  content = Regex.replace(~r/:([a-z0-1\+]+):/, content, &amp;emojify_short_name/2)
  auto_link(content, Regex.scan(~r/#[0-9]+|@[a-zA-Z0-9_-]+|[a-f0-9]{7}/, content, return: :index))
end
</code></pre>
<p>Now 1) is replacing text directly while 2) injects new nodes (links) into the AST.</p>
<p>I have more complex use-cases that will inject new nodes into the AST but sometime, I will require to mark/flag theses as “already parsed” for further processing. This is something that already happens with <code>"code"</code> tags. I just want further processing to skip theses parts because there are already in their “final-state”.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="144028" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-144028" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144028"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="144035" data-post-id="144035">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertDober" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertDober/120/4842_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertDober
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hmm it might then be a good idea to apply the robustness principle if not too costly.</p>
<p>Maybe the transformer should accept also extended tuples in the AST, e.g.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">    {:code, [], children, _}
</code></pre>
<p>That would allow AST transformers to leave their annotations.</p>
<p>However it will fence us in concerning later extensions of the AST format, an alternative would be to allow <strong>only</strong></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">    {:code, [], children, {:meta, _}}
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="144035" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-144035" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144035"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="144579" data-post-id="144579">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertDober" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertDober/120/4842_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertDober
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>RELEASE NOTES for the latest Earmark Release <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>version 1.4.1 2019/09/24</p>
<ul>
<li>
<p><a href="https://github.com/pragdave/earmark/issues/277" rel="noopener nofollow ugc">277 Expose an AST to HTML Transformer</a><br>
While it should be faster to call <code>to_ast|&gt;transform</code> it cannot be used instead of <code>as_html</code> yet<br>
as the API is not yet stable and some subtle differences in the output need to be addressed.</p>
</li>
<li>
<p><a href="https://github.com/pragdave/earmark/issues/278" rel="noopener nofollow ugc">278 Implementing better GFM Table support </a><br>
Because of compatility issues we use a new option <code>gfm_tables</code> defaulting to <code>false</code> for this.<br>
Using this option <code>Earmark</code> will implement its own table extension <strong>+</strong> GFM tables at the same<br>
time.</p>
</li>
<li>
<p><a href="https://github.com/pragdave/earmark/issues/279" rel="noopener nofollow ugc">279 Languages in code blocks were limited to alphanum names, thus excluding, e.g. C# </a></p>
</li>
<li>
<p><a href="https://github.com/pragdave/earmark/issues/281" rel="noopener nofollow ugc">281 Urls in links were URL endoded, that is actually a bug </a><br>
It is the markdown author’s responsability to url encode her urls, if she does so correctly<br>
we double encoded the url before this fix.</p>
</li>
<li>
<p><a href="https://github.com/pragdave/earmark/issues/282" rel="noopener nofollow ugc">282 Always create a <code>&lt;tbody&gt;</code> in tables</a><br>
Although strictly speaking a <code>&lt;tbody&gt;</code> is only needed when there is a <code>&lt;thead&gt;</code>, semantic<br>
HTML suggests the presence of <code>&lt;tbody&gt;</code> anyway.</p>
</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="144579" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-144579" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144579"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="144580" data-post-id="144580">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertDober" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertDober/120/4842_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertDober
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Slight change in the API, after some reflection, how an internal extension might look like.<br>
I prefer to keep the cool name <code>meta:</code> for myself <img src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title=":blush:" class="emoji" alt=":blush:" loading="lazy" width="20" height="20"></p>
<p>So the acceptable ast would be extended by a map rather where the <code>custom:</code> key shall be reserved for 3rd party applications</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">      {tag, atts, children, %{custom: ...}}
</code></pre>
<p>c.f. <a href="https://github.com/pragdave/earmark/issues/288" class="inline-onebox" rel="noopener nofollow ugc">Allow metadata in the ast passed into the transformer · Issue #288 · pragdave/earmark · GitHub</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="144580" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-144580" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144580"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="144659" data-post-id="144659">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="RobertDober" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/RobertDober/120/4842_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  RobertDober
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="RobertDober" data-post="19" data-topic="25208">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/robertdober/48/4842_2.png" class="avatar"> RobertDober:</div>
<blockquote>
<p>While it should be faster to call <code>to_ast|&gt;transform</code> it cannot be used instead of <code>as_html</code> yet<br>
as the API is not yet stable and some subtle differences in the output need to be addressed.</p>
</blockquote>
</aside>
<p>benchmarking shows no speed difference whatsover, indicating that parsing is the dominant speed factor</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="144659" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/earmark-elixirs-markdown-converter/25208/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-144659" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="144659"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/25208/load_more?page=3">Load more posts (114 remaining)</a>
</div></template></turbo-stream>