'Override this method to support alternative .mo formats.'

def _parse(self, fp):

    unpack = struct.unpack
    filename = getattr(fp, 'name', '')
    self._catalog = catalog = {}
    self.plural = (lambda n: int((n != 1)))
    buf = fp.read()
    buflen = len(buf)
    magic = unpack('<I', buf[:4])[0]
    if (magic == self.LE_MAGIC):
        (version, msgcount, masteridx, transidx) = unpack('<4I', buf[4:20])
        ii = '<II'
    elif (magic == self.BE_MAGIC):
        (version, msgcount, masteridx, transidx) = unpack('>4I', buf[4:20])
        ii = '>II'
    else:
        raise IOError(0, 'Bad    magic    number', filename)
    for i in xrange(0, msgcount):
        (mlen, moff) = unpack(ii, buf[masteridx:(masteridx + 8)])
        mend = (moff + mlen)
        (tlen, toff) = unpack(ii, buf[transidx:(transidx + 8)])
        tend = (toff + tlen)
        if ((mend < buflen) and (tend < buflen)):
            msg = buf[moff:mend]
            tmsg = buf[toff:tend]
        else:
            raise IOError(0, 'File    is    corrupt', filename)
        if (mlen == 0):
            lastk = k = None
            for item in tmsg.splitlines():
                item = item.strip()
                if (not item):
                    continue
                if (':' in item):
                    (k, v) = item.split(':', 1)
                    k = k.strip().lower()
                    v = v.strip()
                    self._info[k] = v
                    lastk = k
                elif lastk:
                    self._info[lastk] += ('\n' + item)
                if (k == 'content-type'):
                    self._charset = v.split('charset=')[1]
                elif (k == 'plural-forms'):
                    v = v.split(';')
                    plural = v[1].split('plural=')[1]
                    self.plural = c2py(plural)
        if ('\x00' in msg):
            (msgid1, msgid2) = msg.split('\x00')
            tmsg = tmsg.split('\x00')
            if self._charset:
                msgid1 = unicode(msgid1, self._charset)
                tmsg = [unicode(x, self._charset) for x in tmsg]
            for i in range(len(tmsg)):
                catalog[(msgid1, i)] = tmsg[i]
        else:
            if self._charset:
                msg = unicode(msg, self._charset)
                tmsg = unicode(tmsg, self._charset)
            catalog[msg] = tmsg
        masteridx += 8
        transidx += 8
