:param original_text: ``str``/``Unicode`` containing the original text to get offsets within
    :param things_to_match: ``list(words/phrases)`` whose offsets we wish to find within ``original_text``.

    If ``things_to_match`` is a list of tokenized strings, each element of ``things_to_match`` is expected to be a ``list`` of tokens.
    For example::

        [["Hello", ",", "world", "!"], ["That", "was", "the", "first", "sentence", ";", "here", "is", "the", "second", "."]]

    ``things_to_match`` could also be::

        ["cat", "dog", "octopus"]

    or even a mix of the two.  This function will call :mod:`sourcerater.util.Match.match()` on each element of ``things_to_match``.

    :returns: ``sorted(set([(start, end, word/phrase) for word/phrase in things_to_match]))`` for ALL occurrences of each word/phrase in ``things_to_match``.

def match_lines(original_text, things_to_match):
    '''
    :param original_text: ``str``/``Unicode`` containing the original text to get offsets within
    :param things_to_match: ``list(words/phrases)`` whose offsets we wish to find within ``original_text``.

    If ``things_to_match`` is a list of tokenized strings, each element of ``things_to_match`` is expected to be a ``list`` of tokens.
    For example::

        [["Hello", ",", "world", "!"], ["That", "was", "the", "first", "sentence", ";", "here", "is", "the", "second", "."]]

    ``things_to_match`` could also be::

        ["cat", "dog", "octopus"]

    or even a mix of the two.  This function will call :mod:`sourcerater.util.Match.match()` on each element of ``things_to_match``.

    :returns: ``sorted(set([(start, end, word/phrase) for word/phrase in things_to_match]))`` for ALL occurrences of each word/phrase in ``things_to_match``.
    '''
    matched_lines = []
    unique_things_to_match = (set(things_to_match) if type(things_to_match[0]) is not list else things_to_match)
    
    without_smart_quotes = _cleanup_text(original_text)

    for thing in unique_things_to_match:
        if len(thing) == 0:
            continue
        matches = match(original_text, thing, clean_text=without_smart_quotes)
        matched_lines += matches

    return sorted(set(matched_lines))