1
1
defmodule Earmark.Parser.Helpers.HtmlParser do
2
-
3
2
@ moduledoc false
4
3
5
4
import Earmark.Parser.Helpers.StringHelpers , only: [ behead: 2 ]
6
5
import Earmark.Parser.LineScanner , only: [ void_tag?: 1 ]
7
6
8
7
def parse_html ( lines )
9
- def parse_html ( [ tag_line | rest ] ) do
8
+
9
+ def parse_html ( [ tag_line | rest ] ) do
10
10
case _parse_tag ( tag_line ) do
11
- { :ok , tag , "" } -> [ _parse_rest ( rest , tag , [ ] ) ]
12
- { :ok , tag , suffix } -> [ _parse_rest ( rest , tag , [ suffix ] ) ]
13
- { :ext , tag , "" } -> [ _parse_rest ( rest , tag , [ ] ) ]
14
- { :ext , tag , suffix } -> [ _parse_rest ( rest , tag , [ ] ) , [ suffix ] ]
11
+ { :ok , tag , "" } -> [ _parse_rest ( rest , tag , [ ] ) ]
12
+ { :ok , tag , suffix } -> [ _parse_rest ( rest , tag , [ suffix ] ) ]
13
+ { :ext , tag , "" } -> [ _parse_rest ( rest , tag , [ ] ) ]
14
+ { :ext , tag , suffix } -> [ _parse_rest ( rest , tag , [ ] ) , [ suffix ] ]
15
15
end
16
16
end
17
17
@@ -53,9 +53,9 @@ defmodule Earmark.Parser.Helpers.HtmlParser do
53
53
54
54
defp _close_tag_tail ( tag , atts , closing? , suffix ) do
55
55
if closing? || void_tag? ( tag ) do
56
- { :ext , { tag , Enum . reverse ( atts ) } , suffix }
56
+ { :ext , { tag , Enum . reverse ( atts ) } , suffix }
57
57
else
58
- { :ok , { tag , Enum . reverse ( atts ) } , suffix }
58
+ { :ok , { tag , Enum . reverse ( atts ) } , suffix }
59
59
end
60
60
end
61
61
@@ -64,18 +64,36 @@ defmodule Earmark.Parser.Helpers.HtmlParser do
64
64
65
65
@ verbatim % { verbatim: true }
66
66
defp _parse_rest ( rest , tag_tpl , lines )
67
+
67
68
defp _parse_rest ( [ ] , tag_tpl , lines ) do
68
- tag_tpl |> Tuple . append ( Enum . reverse ( lines ) ) |> Tuple . append ( @ verbatim )
69
+ tag_tpl
70
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) , Enum . reverse ( lines ) )
71
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) + 1 , @ verbatim )
69
72
end
70
- defp _parse_rest ( [ last_line ] , { tag , _ } = tag_tpl , lines ) do
73
+
74
+ defp _parse_rest ( [ last_line ] , { tag , _ } = tag_tpl , lines ) do
71
75
case Regex . run ( ~r{ \A \s *</#{ tag } >\s *(.*)} , last_line ) do
72
- nil -> tag_tpl |> Tuple . append ( Enum . reverse ( [ last_line | lines ] ) ) |> Tuple . append ( @ verbatim )
73
- [ _ , "" ] -> tag_tpl |> Tuple . append ( Enum . reverse ( lines ) ) |> Tuple . append ( @ verbatim )
74
- [ _ , suffix ] -> [ tag_tpl |> Tuple . append ( Enum . reverse ( lines ) ) |> Tuple . append ( @ verbatim ) , suffix ]
76
+ nil ->
77
+ tag_tpl
78
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) , Enum . reverse ( [ last_line | lines ] ) )
79
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) + 1 , @ verbatim )
80
+
81
+ [ _ , "" ] ->
82
+ tag_tpl
83
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) , Enum . reverse ( lines ) )
84
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) + 1 , @ verbatim )
85
+
86
+ [ _ , suffix ] ->
87
+ [
88
+ tag_tpl
89
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) , Enum . reverse ( lines ) )
90
+ |> Tuple . insert_at ( tuple_size ( tag_tpl ) + 1 , @ verbatim ) ,
91
+ suffix
92
+ ]
75
93
end
76
94
end
77
- defp _parse_rest ( [ inner_line | rest ] , tag_tpl , lines ) do
78
- _parse_rest ( rest , tag_tpl , [ inner_line | lines ] )
79
- end
80
95
81
- end
96
+ defp _parse_rest ( [ inner_line | rest ] , tag_tpl , lines ) do
97
+ _parse_rest ( rest , tag_tpl , [ inner_line | lines ] )
98
+ end
99
+ end
0 commit comments