Mark ordering for reliable comparison.
Provides consistent sorting of marks so that equality checks work regardless of the order marks were applied.
Summary
Functions
Compare two marks lists for equality using sorted comparison.
Sort marks into a consistent order for comparison.
Types
Functions
Compare two marks lists for equality using sorted comparison.
More reliable than set-based comparison as it handles attributed marks with the same type but different attrs correctly.
Examples
iex> Quillon.Transform.MarkOrder.marks_equal?([:bold, :italic], [:italic, :bold])
true
iex> Quillon.Transform.MarkOrder.marks_equal?([:bold], [:italic])
false
iex> Quillon.Transform.MarkOrder.marks_equal?([], [])
true
iex> Quillon.Transform.MarkOrder.marks_equal?(nil, [])
true
iex> Quillon.Transform.MarkOrder.marks_equal?(
...> [{:link, %{href: "/"}}],
...> [{:link, %{href: "/"}}]
...> )
true
iex> Quillon.Transform.MarkOrder.marks_equal?(
...> [{:link, %{href: "/"}}],
...> [{:link, %{href: "/other"}}]
...> )
false
Sort marks into a consistent order for comparison.
Simple marks are sorted by priority, then attributed marks. Unknown marks sort last, alphabetically by name.
Examples
iex> Quillon.Transform.MarkOrder.sort_marks([:italic, :bold])
[:bold, :italic]
iex> Quillon.Transform.MarkOrder.sort_marks([:italic, {:link, %{href: "/"}}, :bold])
[:bold, :italic, {:link, %{href: "/"}}]
iex> Quillon.Transform.MarkOrder.sort_marks([])
[]