diff --git a/Dockerfile b/Dockerfile index b3c4a927c..3fbbcdc14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,10 +47,11 @@ COPY config config RUN mix deps.get --only prod RUN mix deps.compile --only prod -COPY vendor vendor +COPY vendor/language_tool/priv/ vendor/language_tool/priv/ RUN cd ./vendor/language_tool/priv/native/languagetool && ./gradlew shadowJar RUN cp ./vendor/language_tool/priv/native/languagetool/app/build/libs/language-tool.jar priv/native/language-tool.jar +COPY vendor vendor COPY lib lib RUN mix compile --only prod diff --git a/vendor/language_tool/lib/language_tool/backend.ex b/vendor/language_tool/lib/language_tool/backend.ex index 4dde0138d..e1b28a39f 100644 --- a/vendor/language_tool/lib/language_tool/backend.ex +++ b/vendor/language_tool/lib/language_tool/backend.ex @@ -82,17 +82,29 @@ defmodule LanguageTool.Backend do end defp process_check(process, lang, text) do - lang = sanitize_lang(lang) - Exile.Process.write(process, IO.iodata_to_binary([String.pad_trailing(lang, 7), text, "\n"])) + write_process(process, lang, text) - with {:ok, data} <- Exile.Process.read(process), + with {:ok, data} <- read_process_until_result(process), {:ok, data} <- Jason.decode(data) do data else - _ -> nil + _ -> + nil + end + end + + defp read_process_until_result(process) do + case Exile.Process.read(process) do + {:ok, "\n"} -> read_process_until_result(process) + result -> result end end + defp write_process(process, lang, text) do + lang = sanitize_lang(lang) + Exile.Process.write(process, IO.iodata_to_binary([String.pad_trailing(lang, 7), text, "\n"])) + end + defp sanitize_lang(lang) do if lang === "en" do "en-US"