 
   ## Lists
 
-  defp process_list(line, rest, count, indent) do
+  defp process_list(line, rest, count, indent, colors) do
     IO.write indent <> "• "
     { contents, rest, done } = process_list_next(rest, count, false, [])
-    process_text(contents, [line], indent <> "  ", true)
+    process_text(contents, [line], indent <> "  ", true, colors)
     if done, do: IO.puts(IO.ANSI.reset)
-    process(rest, indent)
+    process(rest, indent, colors)
   end
 
   # Process the thing after a list item entry. It can be either:

  @doc """
  Prints the documentation body.
  """
  def print(doc, use_ansi // IO.ANSI.terminal?) do
    if use_ansi do
      doc
      |> String.split(["\r\n","\n"], trim: false)
      |> Enum.map(&String.rstrip/1)
      |> process("")
    else
      IO.puts doc
    end
    IEx.dont_display_result
  end

  defp process([], _indent), do: nil

  defp process(["# " <> heading | rest], _indent) do
    write_h1(String.strip(heading))
    process(rest, "")
  end

  defp process(["## " <> heading | rest], _indent) do
    write_h2(String.strip(heading))
    process(rest, "")
  end

  defp process(["### " <> heading | rest], indent) do
    write_h3(String.strip(heading), indent)
    process(rest, indent)
  end

  defp process(["" | rest], indent) do
    process(rest, indent)
  end

  defp process(["    " <> line | rest], indent) do
    process_code(rest, [line], indent)
  end

  defp process([line | rest], indent) do
    { stripped, count } = strip_spaces(line, 0)
    case stripped do
      <<bullet, ?\s, item :: binary >> when bullet in @bullets ->
        process_list(item, rest, count, indent)
      _ ->
        process_text(rest, [line], indent, false)
    end
  end



  ## Code blocks

  defp process_code([], code, indent, _colors) do
    write_code(code, indent)
  end

  # Blank line between code blocks
  defp process_code([ "", "    " <> line | rest ], code, indent, colors) do
    process_code(rest, [line, "" | code], indent, colors)
  end

  defp process_code([ "    " <> line | rest ], code, indent, colors) do
    process_code(rest, [line|code], indent, colors)
  end

  defp process_code(rest, code, indent, colors) do
    write_code(code, indent)
    process(rest, indent, colors)
  end

  defp write_code(code, indent) do
