Kuddle.V2.Utils (Kuddle v1.1.1)

Copy Markdown View Source

Summary

Types

char_or_code()

@type char_or_code() :: binary() | integer()

esc_multiline()

@type esc_multiline() :: {:esc | :uesc, [char_or_code()]}

Functions

dedent_multline_by_spaces(left, right, state \\ :start)

is_utf8_bad_id_char(c)

(macro)

is_utf8_disallowed_char(c)

(macro)

is_utf8_equals_like_char(c)

(macro)

is_utf8_newline_like_char(c)

(macro)

is_utf8_non_identifier_char(c)

(macro)

is_utf8_space_like_char(c)

(macro)

is_utf8_special_char(c)

(macro)

is_utf8_twochar_newline(c1, c2)

(macro)

multiline_determine_spaces(list)

multiline_list_to_utf8_binary(list)

@spec multiline_list_to_utf8_binary(list()) :: {:ok, binary()} | {:error, term()}

Variant of list_to_utf8_binary, but specifically for handling multiline strings

need_quote?(str, state \\ :start)

parse_float_string(bin, state \\ :start, acc \\ [])

split_multiline_list(list, line \\ {:uesc, []}, acc \\ [])

@spec split_multiline_list([char_or_code()], esc_multiline(), [esc_multiline()]) :: [
  esc_multiline()
]

Splits a multiline list, this will mark each line with its escape status, a line with a :esc status should not be used for whitespace trimming/dedent, as it was explictly set.

One thing to note is all lines in the returned list start with a newline if its not the first line.

The returned array is always reversed, so the last line will be first

split_spaces(rest, acc \\ [])

@spec split_spaces(binary(), list()) :: {spaces :: binary(), rest :: binary()}

Splits off as many space characters as possible

split_spaces_and_newlines(rest, meta, acc \\ [])

split_up_to_newline(rest, meta, acc \\ [])

@spec split_up_to_newline(binary(), any(), [any()]) ::
  {:ok, binary(), binary(), meta :: any()} | {:error, term()}

valid_identifier?(str, state \\ :start)

Check if a string is a valid identifier (that is a plain unbroken character sequence)