diff --git a/lib/earmark.ex b/lib/earmark.ex
index e5404a57..2acaad78 100644
--- a/lib/earmark.ex
+++ b/lib/earmark.ex
@@ -167,6 +167,22 @@ defmodule Earmark do
iex(4)> Earmark.as_ast(["spaniel"])
{:ok, [{"span"}, [{"class", "superspan"}], ["spaniel"], %{verbatim: true}], []}
+ What is HTML?
+
+ We differ from strict GFM by allowing **all** tags not only HTML5 tagsn this holds for oneliners....
+
+ iex(5)> {:ok, ast, []} = Earmark.as_ast(["
\\n \\n link\\n \\n
\\n", []} For both cases, malformed attributes are ignored and warnings are issued. - iex(7)> [ "Some text", "{:hello}" ] |> Enum.join("\\n") |> Earmark.as_html() + iex(9)> [ "Some text", "{:hello}" ] |> Enum.join("\\n") |> Earmark.as_html() {:error, "\\n Some text\\n
\\n", [{:warning, 2,"Illegal attributes [\\"hello\\"] ignored in IAL"}]} It is possible to escape the IAL in both forms if necessary - iex(8)> markdown = "[link](url)\\\\{: .classy}" - ...(8)> Earmark.as_html(markdown) + iex(10)> markdown = "[link](url)\\\\{: .classy}" + ...(10)> Earmark.as_html(markdown) {:ok, "\\n \\n link\\n \\n {: .classy}\\n
\\n", []} This of course is not necessary in code blocks or text lines containing an IAL-like string, as in the following example - iex(9)> markdown = "hello {:world}" - ...(9)> Earmark.as_html!(markdown) + iex(11)> markdown = "hello {:world}" + ...(11)> Earmark.as_html!(markdown) "\\n hello {:world}\\n
\\n" ## Limitations @@ -389,17 +405,17 @@ defmodule Earmark do end @doc """ - iex(10)> markdown = "My `code` is **best**" - ...(10)> {:ok, ast, []} = Earmark.as_ast(markdown) - ...(10)> ast + iex(12)> markdown = "My `code` is **best**" + ...(12)> {:ok, ast, []} = Earmark.as_ast(markdown) + ...(12)> ast [{"p", [], ["My ", {"code", [{"class", "inline"}], ["code"]}, " is ", {"strong", [], ["best"]}]}] Options are passes like to `as_html`, some do not have an effect though (e.g. `smartypants`) as formatting and escaping is not done for the AST. - iex(11)> markdown = "```elixir\\nIO.puts 42\\n```" - ...(11)> {:ok, ast, []} = Earmark.as_ast(markdown, code_class_prefix: "lang-") - ...(11)> ast + iex(13)> markdown = "```elixir\\nIO.puts 42\\n```" + ...(13)> {:ok, ast, []} = Earmark.as_ast(markdown, code_class_prefix: "lang-") + ...(13)> ast [{"pre", [], [{"code", [{"class", "elixir lang-elixir"}], ["IO.puts 42"]}]}] **Rationale**: diff --git a/lib/earmark/line_scanner.ex b/lib/earmark/line_scanner.ex index 8d76c90b..f695821e 100644 --- a/lib/earmark/line_scanner.ex +++ b/lib/earmark/line_scanner.ex @@ -139,17 +139,11 @@ defmodule Earmark.LineScanner do match = !recursive && Regex.run(~r{\A<([-\w]+?)(?:\s.*)?>.*\1>}, line) -> [_, tag] = match - - if block_tag?(tag), - do: %Line.HtmlOneLine{tag: tag, content: line, indent: 0}, - else: %Line.Text{content: line, indent: 0} + %Line.HtmlOneLine{tag: tag, content: line, indent: 0} match = !recursive && Regex.run(~r{\A<([-\w]+?)(?:\s.*)?/>.*}, line) -> [_, tag] = match - - if block_tag?(tag), - do: %Line.HtmlOneLine{tag: tag, content: line, indent: 0}, - else: %Line.Text{content: line, indent: 0} + %Line.HtmlOneLine{tag: tag, content: line, indent: 0} match = !recursive && Regex.run(~r/^<([-\w]+?)(?:\s.*)?>/, line) -> [_, tag] = match @@ -251,9 +245,10 @@ defmodule Earmark.LineScanner do |> String.replace("<", "<") - @block_tags ~w< address article aside blockquote canvas dd div dl fieldset figcaption h1 h2 h3 h4 h5 h6 header hgroup li main nav noscript ol output p pre section table tfoot ul video> - |> Enum.into(MapSet.new()) - defp block_tag?(tag), do: MapSet.member?(@block_tags, tag) + # Not sure yet if we shall enforce all tags, in that case we shall enlargen @block_tags to @html_tags + # @block_tags ~w< address article aside blockquote canvas dd div dl fieldset figcaption h1 h2 h3 h4 h5 h6 header hgroup li main nav noscript ol output p pre section table tfoot ul video> + # |> Enum.into(MapSet.new()) + # defp block_tag?(tag), do: MapSet.member?(@block_tags, tag) @column_rgx ~r{\A[\s|:-]+\z} defp _determine_if_header(columns) do