Web Dev Solutions

Catalin Mititiuc

defmodule Pandoc do @moduledoc """ Documentation for `Pandoc`. """ def run(profile, ["--watch" | _]) do config = Application.get_env(:pandoc, profile) opts = [cd: config[:cd] || File.cwd!()] dirs = [opts[:cd], Path.join(opts[:cd], "_drafts")] ref = __MODULE__.Supervisor |> Supervisor.start_child( Supervisor.child_spec({Pandoc.Watcher, [profile, dirs: dirs]}, restart: :transient, id: __MODULE__.Watcher ) ) |> case do {:ok, pid} -> pid {:error, {:already_started, pid}} -> pid end |> Process.monitor() receive do {:DOWN, ^ref, _, _, _} -> :ok end end def run(profile, path) do config = Application.get_env(:pandoc, profile) args = config[:args] || [] opts = [ cd: config[:cd] || File.cwd!(), into: IO.stream(:stdio, :line), stderr_to_stdout: true ] new_filename = path |> Path.basename() |> String.replace_suffix(".md", ".html") |> String.slice(11..-1//1) new_path = args |> List.last() |> Path.join(new_filename) out_path = Path.join(opts[:cd], new_path) |> Path.expand() if File.exists?(path) do args = List.replace_at(args, -1, out_path) "pandoc" |> System.cmd(args ++ [path], opts) |> elem(1) else File.rm(out_path) end end end