code: def parse_input(tagged_string, disable_colors, keep_tags):
      codes = ANSICodeMapping(tagged_string)
      output_colors = getattr(tagged_string, 'value_colors', tagged_string)
      if not keep_tags:
          for tag, replacement in (('{' + k + '}', '' if v is None else '\033[%dm' % v) for k, v in codes.items()):
              output_colors = output_colors.replace(tag, replacement)
      output_no_colors = RE_ANSI.sub('', output_colors)
      if disable_colors:
          return output_no_colors, output_no_colors
      while True:
          simplified = RE_COMBINE.sub(r'\033[\1;\2m', output_colors)
          if simplified == output_colors:
              break
          output_colors = simplified
      output_colors = prune_overridden(output_colors)
      previous_escape = None
      segments = list()
      for item in (i for i in RE_SPLIT.split(output_colors) if i):
          if RE_SPLIT.match(item):
              if item != previous_escape:
                  segments.append(item)
                  previous_escape = item
          else:
              segments.append(item)
      output_colors = ''.join(segments)
      return output_colors, output_no_colors