diff --git a/lib/earmark_parser/helpers/lookahead_helpers.ex b/lib/earmark_parser/helpers/lookahead_helpers.ex index 718ffab3..69e48ef1 100644 --- a/lib/earmark_parser/helpers/lookahead_helpers.ex +++ b/lib/earmark_parser/helpers/lookahead_helpers.ex @@ -1,5 +1,4 @@ defmodule Earmark.Parser.Helpers.LookaheadHelpers do - @moduledoc false import Earmark.Parser.Helpers.LeexHelpers @@ -13,8 +12,7 @@ defmodule Earmark.Parser.Helpers.LookaheadHelpers do Otherwise `{nil, 0}` is returned """ def opens_inline_code(%{line: line, lnb: lnb}) do - # case tokenize(line, with: :string_lexer) |> IO.inspect() |> has_still_opening_backtix(nil) do - case tokenize(line, with: :string_lexer) |> has_still_opening_backtix(nil) do + case tokenize(line, with: :earmark_string_lexer) |> has_still_opening_backtix(nil) do nil -> {nil, 0} {_, btx} -> {btx, lnb} end @@ -29,7 +27,8 @@ defmodule Earmark.Parser.Helpers.LookaheadHelpers do """ # (#{},{_,_}) -> {_,_} def still_inline_code(%{line: line, lnb: lnb}, old = {pending, _pending_lnb}) do - case tokenize(line, with: :string_lexer) |> has_still_opening_backtix({:old, pending}) do + case tokenize(line, with: :earmark_string_lexer) + |> has_still_opening_backtix({:old, pending}) do nil -> {nil, 0} {:new, btx} -> {btx, lnb} {:old, _} -> old diff --git a/lib/earmark_parser/parser/link_parser.ex b/lib/earmark_parser/parser/link_parser.ex index 598bda4c..d979ebd5 100644 --- a/lib/earmark_parser/parser/link_parser.ex +++ b/lib/earmark_parser/parser/link_parser.ex @@ -1,5 +1,4 @@ defmodule Earmark.Parser.Parser.LinkParser do - @moduledoc false import Earmark.Parser.Helpers.LeexHelpers, only: [tokenize: 2] import Earmark.Parser.Helpers.YeccHelpers, only: [parse!: 2] @@ -28,12 +27,16 @@ defmodule Earmark.Parser.Parser.LinkParser do @doc false def parse_link(src, lnb) do - case parse!(src, lexer: :link_text_lexer, parser: :link_text_parser) do - {link_or_img, link_text, parsed_text} -> - beheaded = behead(src, to_string(parsed_text)) - tokens = tokenize(beheaded, with: :link_text_lexer) - p_url(tokens, lnb) |> make_result(to_string(link_text), to_string(parsed_text), link_or_img) - _ -> nil + case parse!(src, lexer: :earmark_link_text_lexer, parser: :earmark_link_text_parser) do + {link_or_img, link_text, parsed_text} -> + beheaded = behead(src, to_string(parsed_text)) + tokens = tokenize(beheaded, with: :earmark_link_text_lexer) + + p_url(tokens, lnb) + |> make_result(to_string(link_text), to_string(parsed_text), link_or_img) + + _ -> + nil end end @@ -61,14 +64,19 @@ defmodule Earmark.Parser.Parser.LinkParser do # All these are just added to the url defp url([{:open_bracket, text} | ts], result, needed, lnb), do: url(ts, add(result, text), needed, lnb) + defp url([{:close_bracket, text} | ts], result, needed, lnb), do: url(ts, add(result, text), needed, lnb) + defp url([{:any_quote, text} | ts], result, needed, lnb), do: url(ts, add(result, text), needed, lnb) + defp url([{:verbatim, text} | ts], result, needed, lnb), do: url(ts, add(result, text), needed, lnb) + defp url([{:ws, text} | ts], result, needed, lnb), do: url(ts, add(result, text), needed, lnb) + defp url([{:escaped, text} | ts], result, needed, lnb), do: url(ts, add(result, text), needed, lnb) @@ -78,7 +86,9 @@ defmodule Earmark.Parser.Parser.LinkParser do defp bail_out_to_title(ts, result) do with remaining_text <- ts |> Enum.map(&text_of_token/1) |> Enum.join("") do case title(remaining_text) do - nil -> nil + nil -> + nil + {title_text, inner_title} -> add_title(result, {title_text, inner_title}) end @@ -87,6 +97,7 @@ defmodule Earmark.Parser.Parser.LinkParser do defp text_of_token(token) defp text_of_token({:escaped, text}), do: "\\#{text}" + defp text_of_token({_, text}) do text end diff --git a/src/link_text_lexer.xrl b/src/earmark_link_text_lexer.xrl similarity index 100% rename from src/link_text_lexer.xrl rename to src/earmark_link_text_lexer.xrl diff --git a/src/link_text_parser.yrl b/src/earmark_link_text_parser.yrl similarity index 100% rename from src/link_text_parser.yrl rename to src/earmark_link_text_parser.yrl diff --git a/src/string_lexer.xrl b/src/earmark_string_lexer.xrl similarity index 100% rename from src/string_lexer.xrl rename to src/earmark_string_lexer.xrl