Skip to content

Commit

Permalink
fix : fulltext search will crash
Browse files Browse the repository at this point in the history
close issue #69
  • Loading branch information
xiaoyifang committed May 19, 2022
1 parent 0bd724b commit 15d9104
Showing 1 changed file with 28 additions and 29 deletions.
57 changes: 28 additions & 29 deletions articleview.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2482,34 +2482,6 @@ void ArticleView::highlightFTSResults()
{
closeSearch();

const QUrl & url = ui.definition->url();

bool ignoreDiacritics = Utils::Url::hasQueryItem( url, "ignore_diacritics" );

QString regString = Utils::Url::queryItemValue( url, "regexp" );
if( ignoreDiacritics )
regString = gd::toQString( Folding::applyDiacriticsOnly( gd::toWString( regString ) ) );
else
regString = regString.remove( AccentMarkHandler::accentMark() );

QRegularExpression regexp;
if( Utils::Url::hasQueryItem( url, "wildcards" ) )
regexp.setPattern( wildcardsToRegexp( regString ) );
else
regexp.setPattern( regString );

QRegularExpression::PatternOptions patternOptions =
QRegularExpression::DotMatchesEverythingOption | QRegularExpression::UseUnicodePropertiesOption |
QRegularExpression::MultilineOption | QRegularExpression::InvertedGreedinessOption;
if( !Utils::Url::hasQueryItem( url, "matchcase" ) )
patternOptions |= QRegularExpression::CaseInsensitiveOption;
regexp.setPatternOptions( patternOptions );

if( regexp.pattern().isEmpty() || !regexp.isValid() )
return;

sptr< AccentMarkHandler > marksHandler = ignoreDiacritics ? new DiacriticsHandler : new AccentMarkHandler;

// Clear any current selection
if( ui.definition->selectedText().size() )
{
Expand All @@ -2519,6 +2491,33 @@ void ArticleView::highlightFTSResults()
ui.definition->page()->toPlainText(
[ & ]( const QString pageText )
{
const QUrl & url = ui.definition->url();

bool ignoreDiacritics = Utils::Url::hasQueryItem( url, "ignore_diacritics" );

QString regString = Utils::Url::queryItemValue( url, "regexp" );
if( ignoreDiacritics )
regString = gd::toQString( Folding::applyDiacriticsOnly( gd::toWString( regString ) ) );
else
regString = regString.remove( AccentMarkHandler::accentMark() );

QRegularExpression regexp;
if( Utils::Url::hasQueryItem( url, "wildcards" ) )
regexp.setPattern( wildcardsToRegexp( regString ) );
else
regexp.setPattern( regString );

QRegularExpression::PatternOptions patternOptions =
QRegularExpression::DotMatchesEverythingOption | QRegularExpression::UseUnicodePropertiesOption |
QRegularExpression::MultilineOption | QRegularExpression::InvertedGreedinessOption;
if( !Utils::Url::hasQueryItem( url, "matchcase" ) )
patternOptions |= QRegularExpression::CaseInsensitiveOption;
regexp.setPatternOptions( patternOptions );

if( regexp.pattern().isEmpty() || !regexp.isValid() )
return;
sptr< AccentMarkHandler > marksHandler = ignoreDiacritics ? new DiacriticsHandler : new AccentMarkHandler;

marksHandler->setText( pageText );

QRegularExpressionMatchIterator it = regexp.globalMatch( marksHandler->normalizedText() );
Expand Down Expand Up @@ -2547,7 +2546,7 @@ void ArticleView::highlightFTSResults()

ftsSearchMatchCase = Utils::Url::hasQueryItem( url, "matchcase" );

QWebEnginePage::FindFlags flags( 0 );
QWebEnginePage::FindFlags flags( QWebEnginePage::FindBackward );

if( ftsSearchMatchCase )
flags |= QWebEnginePage::FindCaseSensitively;
Expand Down

0 comments on commit 15d9104

Please sign in to comment.