def METHOD_NAME(self, input):
    """Parse the given input into source units.
    :param input: the source, either a string or filehandle
    """
    if hasattr(input, "name"):
        self.filename = input.name
    if isinstance(input, bytes):
        input = BytesIO(input)
    _split_regex = re.compile(r"^(?:// )?\"(.*)\" => \"(.*)\",$", re.UNICODE)
    try:
        _location = "translated"
        for line in input:
            line = line.decode(self.encoding)
            # The tiki file fails to identify each section so we have to look for start and end
            # points and if we're outside of them we assume the string is translated
            if line.count("### Start of unused words"):
                _location = "unused"
            elif line.count("### start of untranslated words"):
                _location = "untranslated"
            elif line.count("### start of possibly untranslated words"):
                _location = "possiblyuntranslated"
            elif line.count("### end of unused words"):
                _location = "translated"
            elif line.count("### end of untranslated words"):
                _location = "translated"
            elif line.count("### end of possibly untranslated words"):
                _location = "translated"
            match = _split_regex.match(line)
            if match:
                unit = self.addsourceunit("".join(match.group(1)))
                # Untranslated words get an empty msgstr
                if not _location == "untranslated":
                    unit.target = match.group(2)
                unit.addlocation(_location)
    finally:
        input.close()