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', 'blue' => '34', 'magenta' => '35', 'cyan' => '36', 'bold' => '1', 'italic' => '3', 'underline' => '4', 'reset' => '0', # semantic 'error' => '31', # red 'success' => '32', # success 'warning' => '33', # yellow 'info' => '34', # 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: true) ⇒ 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
69 70 71 |
# File 'lib/cli/ui/formatter.rb', line 69 def initialize(text) @text = text end |
Instance Method Details
#format(sgr_map = SGR_MAP, enable_color: true) ⇒ 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
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/cli/ui/formatter.rb', line 83 def format(sgr_map = SGR_MAP, enable_color: true) @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 |