Class: CLI::UI::Formatter
- Inherits:
-
Object
- Object
- CLI::UI::Formatter
- Defined in:
- lib/cli/ui/formatter.rb
Defined Under Namespace
Classes: FormatError
Constant Summary collapse
- SGR_MAP =
Available mappings of formattings To use any of them, you can use {<key>:<string>} There are presentational (colours and formatters) and semantic (error, info, command) formatters available
{ # presentational 'red' => '31', 'green' => '32', 'yellow' => '33', # default blue is low-contrast against black in some default terminal color scheme 'blue' => '94', # 9x = high-intensity fg color x 'magenta' => '35', 'cyan' => '36', 'bold' => '1', 'italic' => '3', 'underline' => '4', 'reset' => '0', # semantic 'error' => '31', # red 'success' => '32', # success 'warning' => '33', # yellow 'info' => '94', # bright blue 'command' => '36', # cyan }.freeze
- BEGIN_EXPR =
'{{'
- END_EXPR =
'}}'
- SCAN_FUNCNAME =
/\w+:/
- SCAN_GLYPH =
/.}}/
- SCAN_BODY =
/ .*? ( #{BEGIN_EXPR} | #{END_EXPR} | \z ) /mx
- DISCARD_BRACES =
0..-3
- LITERAL_BRACES =
:__literal_braces__
Instance Method Summary collapse
-
#format(sgr_map = SGR_MAP, enable_color: CLI::UI.enable_color?) ⇒ Object
Format the text using a map.
-
#initialize(text) ⇒ Formatter
constructor
Initialize a formatter with text.
Constructor Details
#initialize(text) ⇒ Formatter
Initialize a formatter with text.
Attributes
-
text
- the text to format
70 71 72 |
# File 'lib/cli/ui/formatter.rb', line 70 def initialize(text) @text = text end |
Instance Method Details
#format(sgr_map = SGR_MAP, enable_color: CLI::UI.enable_color?) ⇒ Object
Format the text using a map.
Attributes
-
sgr_map
- the mapping of the formattings. Defaults toSGR_MAP
Options
-
:enable_color
- enable color output? Default is true unless output is redirected
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/cli/ui/formatter.rb', line 84 def format(sgr_map = SGR_MAP, enable_color: CLI::UI.enable_color?) @nodes = [] stack = parse_body(StringScanner.new(@text)) prev_fmt = nil content = @nodes.each_with_object(+'') do |(text, fmt), str| if prev_fmt != fmt && enable_color text = apply_format(text, fmt, sgr_map) end str << text prev_fmt = fmt end stack.reject! { |e| e == LITERAL_BRACES } return content unless enable_color return content if stack == prev_fmt unless stack.empty? && (@nodes.size.zero? || @nodes.last[1].empty?) content << apply_format('', stack, sgr_map) end content end |