Module: Ansi

Defined in:
lib/ansi.rb

Overview

Helpers for wrapping text in ANSI escape codes and expanding inline DSL tokens.

Constant Summary collapse

NAME =
"ruby-ansi-formatter"
VERSION =
"0.1.0"
FORMATS =

Maps public formatter names to their DSL prefixes and ANSI escape codes.

{
  reset: {
    prefix: "R",
    code: "\e[0m",
  },
  bold: {
    prefix: "B",
    code: "\e[1m",
  },
  dim: {
    prefix: "D",
    code: "\e[2m",
  },
  italic: {
    prefix: "I",
    code: "\e[3m",
  },
  underline: {
    prefix: "U",
    code: "\e[4m",
  },
  invert: {
    prefix: "X",
    code: "\e[7m",
  },
  hidden: {
    prefix: "H",
    code: "\e[8m",
  },
  strikethrough: {
    prefix: "S",
    code: "\e[9m",
  },
  double_underline: {
    prefix: "DU",
    code: "\e[21m",
  },
  overline: {
    prefix: "OV",
    code: "\e[53m",
  },
  red: {
    prefix: "r",
    code: "\e[31m",
  },
  green: {
    prefix: "g",
    code: "\e[32m",
  },
  yellow: {
    prefix: "y",
    code: "\e[33m",
  },
  blue: {
    prefix: "b",
    code: "\e[34m",
  },
  magenta: {
    prefix: "m",
    code: "\e[35m",
  },
  cyan: {
    prefix: "c",
    code: "\e[36m",
  },
  white: {
    prefix: "w",
    code: "\e[37m",
  },
  bright_red: {
    prefix: "br",
    code: "\e[91m",
  },
  bright_green: {
    prefix: "bg",
    code: "\e[92m",
  },
  bright_yellow: {
    prefix: "by",
    code: "\e[93m",
  },
  bright_blue: {
    prefix: "bb",
    code: "\e[94m",
  },
  bright_magenta: {
    prefix: "bm",
    code: "\e[95m",
  },
  bright_cyan: {
    prefix: "bc",
    code: "\e[96m",
  },
  bright_white: {
    prefix: "bw",
    code: "\e[97m",
  },
}.freeze

Class Method Summary collapse

Class Method Details

.codesArray<String>

Returns ANSI escape codes for all registered formatters.

Returns:

  • (Array<String>)


143
144
145
146
147
# File 'lib/ansi.rb', line 143

def codes
  @codes ||= FORMATS.map do |_format, data|
    data[:code]
  end
end

.format(string) ⇒ String

Expands %<prefix>(text) and %<format_name>(text) DSL tokens in string.

Supports multiline content, nested tokens, and restoration of outer active formatting after nested token resets.

Parameters:

  • string (String)

Returns:

  • (String)


156
157
158
# File 'lib/ansi.rb', line 156

def format(string)
  parse_text(string)
end

.formatsArray<Symbol>

Returns registered formatter names.

Returns:

  • (Array<Symbol>)


127
128
129
# File 'lib/ansi.rb', line 127

def formats
  @formats ||= FORMATS.keys
end

.prefixesArray<String>

Returns DSL prefixes for all registered formatters.

Returns:

  • (Array<String>)


134
135
136
137
138
# File 'lib/ansi.rb', line 134

def prefixes
  @prefixes ||= FORMATS.map do |_format, data|
    data[:prefix]
  end
end