# DON'T FORGET TO CHANGE THE LAST LINE OF THE htmlize METHOD!!! # Converts 'colored' strings to HTML def colored_htmlize(str) open_tags = [] colored_index = get_next_colored_index(str) while colored_index do match_size = colored_index[1].size match = colored_index[1][1..match_size] # strip escape character start = colored_index[0] finish = colored_index[1].size + start - 1 if match[0..1] == '[3' # colors case match when '[30m' # black html_color = 'black' when '[31m' # red html_color = 'red' when '[32m' # green html_color = 'green' when '[33m' # yellow html_color = 'yellow' when '[34m' # blue html_color = 'blue' when '[35m' # magenta html_color = 'magenta' when '[36m' # cyan html_color = 'cyan' when '[37m' # white html_color = 'white' end str[start..finish] = "" open_tags << "font" else case match when '[0m' # clear if open_tags.size > 0 str[start..finish] = "" open_tags.pop end when '[1m' # bold str[start..finish] = "" open_tags << "strong" when '[4m' # underline str[start..finish] = "" open_tags << "u" when '[7m' # reverse # not implemented end end colored_index = get_next_colored_index(str) end str end # helper method for colored_htmlize def get_next_colored_index(str) start = str.index(/\e\[3[0-7]m|\e\[[0147]m/) if start finish = str.index('m', start) value = str[start..finish] [start,value] else nil end end