Пример #1
0
DictionaryReader::DictionaryReader(IBitStream *bstr)
    : _bstr(bstr), _isSupported(true), _decoderLoaded(false)
{
    _bstr->readSome(&_header, sizeof(LSDHeader));
    if (strcmp("LingVo", _header.magic) != 0)
        throw NotLSDException();
    if (_header.version == 0x142001 || _header.version == 0x152001) {
        _decoder.reset(new UserDictionaryDecoder());
    } else if (_header.version == 0x141004) {
        _decoder.reset(new SystemDictionaryDecoder(false));
    } else if (_header.version == 0x145001 || _header.version == 0x155001) {
        _decoder.reset(new AbbreviationDictionaryDecoder());
    } else if (_header.version == 0x151005) {
        _decoder.reset(new SystemDictionaryDecoder(true));
    } else {
        _isSupported = false;
        return;
    }

    uint8_t nameLen;
    bstr->readSome(&nameLen, 1);
    _name = readUnicodeString(bstr, nameLen, false);
    auto firstHeading = readUnicodeString(bstr, bstr->read(8), false); (void)firstHeading;
    auto lastHeading = readUnicodeString(bstr, bstr->read(8), false); (void)lastHeading;    
    auto capitals = readUnicodeString(bstr, reverse32(bstr->read(32)), false); (void)capitals;
    uint16_t iconLen;
    bstr->readSome(&iconLen, 2);
    _icon.resize(iconLen);
    bstr->readSome(&_icon[0], iconLen);
    bstr->seek(bstr->tell() + 4); // checksum
    bstr->readSome(&_pagesEnd, 4);
    bstr->readSome(&_overlayData, 4);
}
Пример #2
0
void UserDictionaryDecoder::Read(IBitStream *bstr) {
    int len = bstr->read(32);
    _prefix = readUnicodeString(bstr, len, true);
    _articleSymbols = readSymbols(bstr);
    _headingSymbols = readSymbols(bstr);
    _ltArticles.Read(*bstr);
    _ltHeadings.Read(*bstr);
    _ltPrefixLengths.Read(*bstr);
    _ltPostfixLengths.Read(*bstr);
    _huffman1Number = bstr->read(32);
    _huffman2Number = bstr->read(32);
}
Пример #3
0
cString basicInput::readUnicodeNullString(const uint numberOfCharacter /* = MAX_CHAR */)
{
    cString ret(nil, t_min(numberOfCharacter, (uint)cString::DefaultStringPage));
    readUnicodeString(ret, 0, numberOfCharacter);
    return ret;
}