Packages

Library for parsing Bibtex files using NimbleParsec.

Current section

Files

Jump to
bibtex_parser lib writer writer.ex
Raw

lib/writer/writer.ex

defmodule BibtexParser.Writer do
@moduledoc false
def to_string(entries) when is_list(entries) do
entries
|> Enum.map(&BibtexParser.Writer.to_string/1)
|> Enum.join("\n\n")
end
def to_string(entry) do
entry = sanitize(entry)
lines = ["@#{entry.type}{#{entry.label}"]
lines =
entry.tags
|> Enum.sort_by(&elem(&1, 0))
|> Enum.filter(fn {_tag, content} ->
content != ''
end)
|> Enum.reduce(lines, fn {tag, value}, lines ->
line = " #{tag} = {#{value}}"
lines ++ [line]
end)
lines = lines ++ ["}"]
Enum.join(lines, ",\n")
end
defp sanitize(entry) do
type = Kernel.to_string(entry.type)
Map.put(entry, :type, String.downcase(type))
end
end