import unicodedata


def displayText (text):
    """ Convert text into a string that is always renderable without combining,
    control or invisible characters """
    if text is None:
        return text
    if all (map (lambda x: unicodedata.combining (x) != 0, text)):
        # add circle if combining
        return '\u25cc' + text
    invMap = {
        '\t': '⭾',
        '\n': '↳',
        ' ': '\u2423',
        '\b': '⌦',
        '\u200e': '[LRM]', # left to right mark
        '\u061c': '[ALM]', # arabic letter mark
        '\u202c': '[PDF]', # pop directional formatting
        "\u2066": '[LRI]', # left-to-right isolate (lri)
        "\u2067": '[RLI]', # right-to-left isolate (rli)
        "\u2069": '[PDI]', # pop directional isolate (pdi)
        }
    return invMap.get (text, text)