mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-24 00:14:06 +00:00
Revert "the last headword in the block has incorrect data length"
This reverts commit b617323bfc
.
This commit is contained in:
parent
efcf033f7e
commit
e7f60a9335
|
@ -595,12 +595,10 @@ MdictParser::HeadWordIndex MdictParser::splitHeadWordBlock( QByteArray const & b
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MdictParser::readRecordBlock( MdictParser::HeadWordIndex & headWordIndex,
|
bool MdictParser::readRecordBlock( MdictParser::HeadWordIndex & headWordIndex,
|
||||||
MdictParser::RecordHandler & recordHandler,
|
MdictParser::RecordHandler & recordHandler )
|
||||||
bool cross_block_read )
|
|
||||||
{
|
{
|
||||||
// cache the index, the headWordIndex is already sorted
|
// cache the index, the headWordIndex is already sorted
|
||||||
size_t idx = 0;
|
size_t idx = 0;
|
||||||
bool readNextBlock = false;
|
|
||||||
|
|
||||||
for ( HeadWordIndex::const_iterator i = headWordIndex.begin(); i != headWordIndex.end(); ++i )
|
for ( HeadWordIndex::const_iterator i = headWordIndex.begin(); i != headWordIndex.end(); ++i )
|
||||||
{
|
{
|
||||||
|
@ -613,41 +611,21 @@ bool MdictParser::readRecordBlock( MdictParser::HeadWordIndex & headWordIndex,
|
||||||
RecordIndex const & recordIndex = recordBlockInfos_[idx];
|
RecordIndex const & recordIndex = recordBlockInfos_[idx];
|
||||||
HeadWordIndex::const_iterator iNext = i + 1;
|
HeadWordIndex::const_iterator iNext = i + 1;
|
||||||
qint64 recordSize;
|
qint64 recordSize;
|
||||||
auto current = *i;
|
if ( iNext == headWordIndex.end() )
|
||||||
|
recordSize = recordIndex.shadowEndPos - i->first;
|
||||||
if( iNext == headWordIndex.end() )
|
|
||||||
{
|
|
||||||
qint64 lastWordSize = recordIndex.shadowEndPos - current.first;
|
|
||||||
|
|
||||||
readNextBlock = cross_block_read && readNextHeadWordIndex( headWordIndex );
|
|
||||||
if(readNextBlock)
|
|
||||||
{
|
|
||||||
recordSize = qMin(lastWordSize, headWordIndex.begin()->first - current.first);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
recordSize = lastWordSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
recordSize = iNext->first - current.first;
|
recordSize = iNext->first - i->first;
|
||||||
|
|
||||||
RecordInfo recordInfo;
|
RecordInfo recordInfo;
|
||||||
recordInfo.compressedBlockPos = recordPos_ + recordIndex.startPos;
|
recordInfo.compressedBlockPos = recordPos_ + recordIndex.startPos;
|
||||||
recordInfo.recordOffset = current.first - recordIndex.shadowStartPos;
|
recordInfo.recordOffset = i->first - recordIndex.shadowStartPos;
|
||||||
recordInfo.decompressedBlockSize = recordIndex.decompressedSize;
|
recordInfo.decompressedBlockSize = recordIndex.decompressedSize;
|
||||||
recordInfo.compressedBlockSize = recordIndex.compressedSize;
|
recordInfo.compressedBlockSize = recordIndex.compressedSize;
|
||||||
recordInfo.recordSize = recordSize;
|
recordInfo.recordSize = recordSize;
|
||||||
|
|
||||||
recordHandler.handleRecord( current.second, recordInfo );
|
recordHandler.handleRecord( i->second, recordInfo );
|
||||||
|
|
||||||
if( readNextBlock )
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( readNextBlock )
|
|
||||||
readRecordBlock( headWordIndex, recordHandler, cross_block_read );
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ public:
|
||||||
|
|
||||||
bool open( const char * filename );
|
bool open( const char * filename );
|
||||||
bool readNextHeadWordIndex( HeadWordIndex & headWordIndex );
|
bool readNextHeadWordIndex( HeadWordIndex & headWordIndex );
|
||||||
bool readRecordBlock( HeadWordIndex & headWordIndex, RecordHandler & recordHandler, bool cross_block_read=false );
|
bool readRecordBlock( HeadWordIndex & headWordIndex, RecordHandler & recordHandler );
|
||||||
|
|
||||||
// helpers
|
// helpers
|
||||||
static QString toUtf16( const char * fromCode, const char * from, size_t fromSize );
|
static QString toUtf16( const char * fromCode, const char * from, size_t fromSize );
|
||||||
|
|
4
mdx.cc
4
mdx.cc
|
@ -1440,9 +1440,9 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f
|
||||||
MdictParser::HeadWordIndex headWordIndex;
|
MdictParser::HeadWordIndex headWordIndex;
|
||||||
|
|
||||||
// enumerating word and its definition
|
// enumerating word and its definition
|
||||||
if ( parser.readNextHeadWordIndex( headWordIndex ) )
|
while ( parser.readNextHeadWordIndex( headWordIndex ) )
|
||||||
{
|
{
|
||||||
parser.readRecordBlock( headWordIndex, articleHandler, true);
|
parser.readRecordBlock( headWordIndex, articleHandler );
|
||||||
}
|
}
|
||||||
|
|
||||||
// enumerating resources if there's any
|
// enumerating resources if there's any
|
||||||
|
|
Loading…
Reference in a new issue