From 4282827506aeafdd58c045d31506a46cfb78ad39 Mon Sep 17 00:00:00 2001 From: Xiao YiFang Date: Mon, 20 Mar 2023 21:53:02 +0800 Subject: [PATCH] epwing:handle invalid position --- epwing.cc | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/epwing.cc b/epwing.cc index bcb3f448..82ab84e8 100644 --- a/epwing.cc +++ b/epwing.cc @@ -352,6 +352,8 @@ void EpwingDictionary::loadArticleNextPage(string & articleHeadword, string & ar { text = QString( "Article reading error: %1") .arg( QString::fromUtf8( e.what() ) ); + articleText = string( text.toUtf8().data() ); + return; } articleHeadword = string( headword.toUtf8().data() ); @@ -384,9 +386,11 @@ void EpwingDictionary::loadArticlePreviousPage( { Mutex::Lock _( eBook.getLibMutex() ); pos = eBook.getArticlePreviousPage( headword, text, articlePage, articleOffset, false ); - } catch( std::exception & e ) - { - text = QString( "Article reading error: %1" ).arg( QString::fromUtf8( e.what() ) ); + } + catch( std::exception & e ) { + text = QString( "Article reading error: %1" ).arg( QString::fromUtf8( e.what() ) ); + articleText = string( text.toUtf8().data() ); + return; } articleHeadword = string( headword.toUtf8().data() ); @@ -629,17 +633,17 @@ void EpwingArticleRequest::run() articlesIncluded.insert( chain[ x ].articleOffset ); } - // Also try to find word in the built-in dictionary index - getBuiltInArticle(word, pages, offsets, mainArticles ); - for( unsigned x = 0; x < alts.size(); ++x ) - { - getBuiltInArticle( alts[ x ], pages, offsets, alternateArticles ); - } - - QRegularExpressionMatch m = RX::Epwing::refWord.match( gd::toQString( word ) ); bool ref = m.hasMatch(); + if( !ref ) { + // Also try to find word in the built-in dictionary index + getBuiltInArticle( word, pages, offsets, mainArticles ); + for( unsigned x = 0; x < alts.size(); ++x ) { + getBuiltInArticle( alts[ x ], pages, offsets, alternateArticles ); + } + } + if ( mainArticles.empty() && alternateArticles.empty() && !ref) { // No such word