zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

render.ex (1702B)


      1 defmodule Absinthe.Utils.Render do
      2   @moduledoc false
      3 
      4   import Inspect.Algebra
      5 
      6   def join(docs, joiner) do
      7     fold_doc(docs, fn doc, acc ->
      8       concat([doc, concat(List.wrap(joiner)), acc])
      9     end)
     10   end
     11 
     12   def render_string_value(string, indent \\ 2) do
     13     string
     14     |> String.trim()
     15     |> String.split("\n")
     16     |> case do
     17       [string_line] ->
     18         concat([~s("), escape_string(string_line), ~s(")])
     19 
     20       string_lines ->
     21         concat(
     22           nest(
     23             block_string([~s(""")] ++ string_lines),
     24             indent,
     25             :always
     26           ),
     27           concat(line(), ~s("""))
     28         )
     29     end
     30   end
     31 
     32   @escaped_chars [?", ?\\, ?/, ?\b, ?\f, ?\n, ?\r, ?\t]
     33 
     34   defp escape_string(string) do
     35     escape_string(string, [])
     36   end
     37 
     38   defp escape_string(<<char, rest::binary>>, acc) when char in @escaped_chars do
     39     escape_string(rest, [acc | escape_char(char)])
     40   end
     41 
     42   defp escape_string(<<char::utf8, rest::binary>>, acc) do
     43     escape_string(rest, [acc | <<char::utf8>>])
     44   end
     45 
     46   defp escape_string(<<>>, acc) do
     47     to_string(acc)
     48   end
     49 
     50   defp escape_char(?"), do: [?\\, ?"]
     51   defp escape_char(?\\), do: [?\\, ?\\]
     52   defp escape_char(?/), do: [?\\, ?/]
     53   defp escape_char(?\b), do: [?\\, ?b]
     54   defp escape_char(?\f), do: [?\\, ?f]
     55   defp escape_char(?\n), do: [?\\, ?n]
     56   defp escape_char(?\r), do: [?\\, ?r]
     57   defp escape_char(?\t), do: [?\\, ?t]
     58 
     59   defp block_string([string]) do
     60     string(string)
     61   end
     62 
     63   defp block_string([string | rest]) do
     64     string
     65     |> string()
     66     |> concat(block_string_line(rest))
     67     |> concat(block_string(rest))
     68   end
     69 
     70   defp block_string_line(["", _ | _]), do: nest(line(), :reset)
     71   defp block_string_line(_), do: line()
     72 end