मैंने यह तरीका बनाया जिससे मुझे मदद मिल सके। यह कोई बड़ी बात नहीं है लेकिन यह काम करता है:
def colorize(text, color = "default", bgColor = "default")
colors = {"default" => "38","black" => "30","red" => "31","green" => "32","brown" => "33", "blue" => "34", "purple" => "35",
"cyan" => "36", "gray" => "37", "dark gray" => "1;30", "light red" => "1;31", "light green" => "1;32", "yellow" => "1;33",
"light blue" => "1;34", "light purple" => "1;35", "light cyan" => "1;36", "white" => "1;37"}
bgColors = {"default" => "0", "black" => "40", "red" => "41", "green" => "42", "brown" => "43", "blue" => "44",
"purple" => "45", "cyan" => "46", "gray" => "47", "dark gray" => "100", "light red" => "101", "light green" => "102",
"yellow" => "103", "light blue" => "104", "light purple" => "105", "light cyan" => "106", "white" => "107"}
color_code = colors[color]
bgColor_code = bgColors[bgColor]
return "\033[#{bgColor_code};#{color_code}m#{text}\033[0m"
end
इसका उपयोग कैसे करें:
puts "#{colorize("Hello World")}"
puts "#{colorize("Hello World", "yellow")}"
puts "#{colorize("Hello World", "white","light red")}"
संभावित सुधार हो सकते हैं:
colorsऔर bgColorsहर बार विधि को कहा जाता है और उन्हें परिवर्तित नहीं किया जा रहा है।
- अन्य विकल्प जोड़े की तरह
bold, underline, dim, आदि
इस विधि के लिए काम नहीं करता है p, जैसा pकि inspectइसके तर्क के लिए है। उदाहरण के लिए:
p "#{colorize("Hello World")}"
"\ e [0; 38mHello World \ e [0m" दिखाएगा
मैं के साथ यह परीक्षण किया puts, printऔर लॉगर मणि, और यह ठीक काम करता है।
मैंने इसमें सुधार किया और एक क्लास बनाई colorsऔर bgColorsक्लास कॉन्स्टेंट हैं और colorizeएक क्लास मेथड है:
EDIT: बेहतर कोड शैली, वर्ग चर के बजाय परिभाषित स्थिरांक, तारों के बजाय प्रतीकों का उपयोग करते हुए, अधिक विकल्प जोड़े गए जैसे, बोल्ड, इटैलिक, आदि।
class Colorizator
COLOURS = { default: '38', black: '30', red: '31', green: '32', brown: '33', blue: '34', purple: '35',
cyan: '36', gray: '37', dark_gray: '1;30', light_red: '1;31', light_green: '1;32', yellow: '1;33',
light_blue: '1;34', light_purple: '1;35', light_cyan: '1;36', white: '1;37' }.freeze
BG_COLOURS = { default: '0', black: '40', red: '41', green: '42', brown: '43', blue: '44',
purple: '45', cyan: '46', gray: '47', dark_gray: '100', light_red: '101', light_green: '102',
yellow: '103', light_blue: '104', light_purple: '105', light_cyan: '106', white: '107' }.freeze
FONT_OPTIONS = { bold: '1', dim: '2', italic: '3', underline: '4', reverse: '7', hidden: '8' }.freeze
def self.colorize(text, colour = :default, bg_colour = :default, **options)
colour_code = COLOURS[colour]
bg_colour_code = BG_COLOURS[bg_colour]
font_options = options.select { |k, v| v && FONT_OPTIONS.key?(k) }.keys
font_options = font_options.map { |e| FONT_OPTIONS[e] }.join(';').squeeze
return "\e[#{bg_colour_code};#{font_options};#{colour_code}m#{text}\e[0m".squeeze(';')
end
end
आप इसका उपयोग करके कर सकते हैं:
Colorizator.colorize "Hello World", :gray, :white
Colorizator.colorize "Hello World", :light_blue, bold: true
Colorizator.colorize "Hello World", :light_blue, :white, bold: true, underline: true