35 lines
1.0 KiB
Elixir
35 lines
1.0 KiB
Elixir
defmodule Outlook.InternalTree.Translation do
|
|
|
|
alias Outlook.InternalTree.{InternalNode,TranslationUnit}
|
|
|
|
def render_translation([%TranslationUnit{} = tunit | rest], translation) do
|
|
tl_tunit = Map.get(translation, tunit.nid)
|
|
[ %TranslationUnit{tl_tunit |
|
|
eph: add_title_attribute(tunit.eph, tunit.content)
|
|
} | render_translation(rest, translation) ]
|
|
end
|
|
|
|
def render_translation([%InternalNode{type: :element} = node | rest], translation) do
|
|
[ %InternalNode{node |
|
|
content: render_translation(node.content, translation)
|
|
} | render_translation(rest, translation) ]
|
|
end
|
|
|
|
def render_translation([node | rest], translation) do
|
|
[ node | render_translation(rest, translation) ]
|
|
end
|
|
|
|
def render_translation([], _), do: []
|
|
|
|
|
|
defp add_title_attribute(eph, html_string) do
|
|
attributes = Map.get(eph, :attributes, %{})
|
|
|> Map.put(:title,
|
|
html_string
|
|
|> Floki.parse_fragment!()
|
|
|> Floki.text()
|
|
)
|
|
Map.put(eph, :attributes, attributes)
|
|
end
|
|
end
|