diff --git a/src/common/htmlescape.cc b/src/common/htmlescape.cc
index b19bed52a..aacd51846 100644
--- a/src/common/htmlescape.cc
+++ b/src/common/htmlescape.cc
@@ -130,26 +130,25 @@ string escapeForJavaScript( string const & str )
return result;
}
-QString stripHtml( QString & tmp )
+QString stripHtml( QString tmp )
{
- tmp.replace(
- QRegularExpression(
- "<(?:\\s*/?(?:div|h[1-6r]|q|p(?![alr])|br|li(?![ns])|td|blockquote|[uo]l|pre|d[dl]|nav|address))[^>]{0,}>",
- QRegularExpression::CaseInsensitiveOption ),
- " " );
- tmp.replace( QRegularExpression( "<[^>]*>" ), " " );
+ static QRegularExpression htmlRegex(
+ "<(?:\\s*/?(?:div|h[1-6r]|q|p(?![alr])|br|li(?![ns])|td|blockquote|[uo]l|pre|d[dl]|nav|address))[^>]{0,}>",
+ QRegularExpression::CaseInsensitiveOption );
+ tmp.replace( htmlRegex, " " );
+ static QRegularExpression htmlElementRegex( "<[^>]*>" );
+ tmp.replace( htmlElementRegex, " " );
return tmp;
}
-QString unescape( QString const & str, HtmlOption option )
+QString unescape( QString str, HtmlOption option )
{
// Does it contain HTML? If it does, we need to strip it
if ( str.contains( '<' ) || str.contains( '&' ) ) {
- QString tmp = str;
if ( option == HtmlOption::Strip ) {
- stripHtml( tmp );
+ str = stripHtml( str );
}
- return QTextDocumentFragment::fromHtml( tmp.trimmed() ).toPlainText();
+ return QTextDocumentFragment::fromHtml( str.trimmed() ).toPlainText();
}
return str;
}
diff --git a/src/common/htmlescape.hh b/src/common/htmlescape.hh
index 0c3442bde..e437cde15 100644
--- a/src/common/htmlescape.hh
+++ b/src/common/htmlescape.hh
@@ -25,9 +25,9 @@ string preformat( string const &, bool baseRightToLeft = false );
// Escapes the given string to be included in JavaScript.
string escapeForJavaScript( string const & );
-QString stripHtml( QString & tmp );
+QString stripHtml( QString tmp );
// Replace html entities
-QString unescape( QString const & str, HtmlOption option = HtmlOption::Strip );
+QString unescape( QString str, HtmlOption option = HtmlOption::Strip );
QString fromHtmlEscaped( QString const & str );
string unescapeUtf8( string const & str, HtmlOption option = HtmlOption::Strip );
diff --git a/src/dict/stardict.cc b/src/dict/stardict.cc
index 468626413..6a4b0f3c0 100644
--- a/src/dict/stardict.cc
+++ b/src/dict/stardict.cc
@@ -422,10 +422,12 @@ class PowerWordDataProcessor
}
old = s;
}
- s.replace( QRegularExpression( "&.\\s*\\{",
- QRegularExpression::UseUnicodePropertiesOption
- | QRegularExpression::DotMatchesEverythingOption ),
- "" );
+
+ static QRegularExpression leadingBrace( "&.\\s*\\{",
+ QRegularExpression::UseUnicodePropertiesOption
+ | QRegularExpression::DotMatchesEverythingOption );
+
+ s.replace( leadingBrace, "" );
s.replace( "}", "" );
}
@@ -448,18 +450,18 @@ string StardictDictionary::handleResource( char type, char const * resource, siz
{
QString articleText = QString( "
" ) + QString::fromUtf8( resource, size ) + "
";
- QRegularExpression imgRe( R"((<\s*(?:img|script)\s+[^>]*src\s*=\s*["']?)(?!(?:data|https?|ftp):))",
- QRegularExpression::CaseInsensitiveOption );
- QRegularExpression linkRe( R"((<\s*link\s+[^>]*href\s*=\s*["']?)(?!(?:data|https?|ftp):))",
- QRegularExpression::CaseInsensitiveOption );
+ static QRegularExpression imgRe( R"((<\s*(?:img|script)\s+[^>]*src\s*=\s*["']?)(?!(?:data|https?|ftp):))",
+ QRegularExpression::CaseInsensitiveOption );
+ static QRegularExpression linkRe( R"((<\s*link\s+[^>]*href\s*=\s*["']?)(?!(?:data|https?|ftp):))",
+ QRegularExpression::CaseInsensitiveOption );
articleText.replace( imgRe, "\\1bres://" + QString::fromStdString( getId() ) + "/" )
.replace( linkRe, "\\1bres://" + QString::fromStdString( getId() ) + "/" );
// Handle links to articles
- QRegularExpression linksReg( R"(]*)href\s*=\s*['"](bword://)?([^'"]+)['"])",
- QRegularExpression::CaseInsensitiveOption );
+ static QRegularExpression linksReg( R"(]*)href\s*=\s*['"](bword://)?([^'"]+)['"])",
+ QRegularExpression::CaseInsensitiveOption );
int pos = 0;
@@ -508,9 +510,9 @@ string StardictDictionary::handleResource( char type, char const * resource, siz
// Handle "audio" tags
- QRegularExpression audioRe( R"(<\s*audio\s*src\s*=\s*(["']+)([^"']+)(["'])\s*>(.*))",
- QRegularExpression::CaseInsensitiveOption
- | QRegularExpression::DotMatchesEverythingOption );
+ static QRegularExpression audioRe( R"(<\s*audio\s*src\s*=\s*(["']+)([^"']+)(["'])\s*>(.*))",
+ QRegularExpression::CaseInsensitiveOption
+ | QRegularExpression::DotMatchesEverythingOption );
pos = 0;
@@ -523,20 +525,19 @@ string StardictDictionary::handleResource( char type, char const * resource, siz
QString src = match.captured( 2 );
- if ( src.indexOf( "://" ) >= 0 )
+ if ( src.indexOf( "://" ) >= 0 ) {
articleNewText += match.captured();
-
+ }
else {
- std::string href = "\"gdau://" + getId() + "/" + src.toUtf8().data() + "\"";
- QString newTag = QString::fromUtf8(
- ( addAudioLink( href, getId() ) + "" ).c_str() );
- newTag += match.captured( 4 );
- if ( match.captured( 4 ).indexOf( "";
+ newTag += match.captured( 4 ).toUtf8().constData();
+ if ( match.captured( 4 ).indexOf( ")";
+ }
newTag += "";
- articleNewText += newTag;
+ articleNewText += QString::fromStdString( newTag );
}
}
if ( pos ) {
@@ -544,8 +545,8 @@ string StardictDictionary::handleResource( char type, char const * resource, siz
articleText = articleNewText;
articleNewText.clear();
}
-
- return ( articleText.toUtf8().data() );
+ auto text = articleText.toUtf8();
+ return text.data();
}
case 'm': // Pure meaning, usually means preformatted text
return "" + Html::preformat( string( resource, size ), isToLanguageRTL() ) + "
";
@@ -614,8 +615,8 @@ void StardictDictionary::pangoToHtml( QString & text )
* Attributes "fallback", "lang", "gravity", "gravity_hint" just ignored
*/
- QRegularExpression spanRegex( "]*)>", QRegularExpression::CaseInsensitiveOption );
- QRegularExpression styleRegex( "(\\w+)=\"([^\"]*)\"" );
+ static QRegularExpression spanRegex( "]*)>", QRegularExpression::CaseInsensitiveOption );
+ static QRegularExpression styleRegex( "(\\w+)=\"([^\"]*)\"" );
text.replace( "\n", "
" );
@@ -1554,7 +1555,8 @@ void StardictResourceRequest::run()
QString id = QString::fromUtf8( dict.getId().c_str() );
int pos = 0;
- QRegularExpression links( R"(url\(\s*(['"]?)([^'"]*)(['"]?)\s*\))", QRegularExpression::CaseInsensitiveOption );
+ static QRegularExpression links( R"(url\(\s*(['"]?)([^'"]*)(['"]?)\s*\))",
+ QRegularExpression::CaseInsensitiveOption );
QString newCSS;
QRegularExpressionMatchIterator it = links.globalMatch( css );
diff --git a/src/ui/articleview.cc b/src/ui/articleview.cc
index 3c6d306ad..d66ab8397 100644
--- a/src/ui/articleview.cc
+++ b/src/ui/articleview.cc
@@ -137,7 +137,7 @@ ArticleView::ArticleView( QWidget * parent,
connect( searchPanel->previous, &QPushButton::clicked, this, &ArticleView::on_searchPrevious_clicked );
connect( searchPanel->next, &QPushButton::clicked, this, &ArticleView::on_searchNext_clicked );
connect( searchPanel->close, &QPushButton::clicked, this, &ArticleView::on_searchCloseButton_clicked );
- connect( searchPanel->caseSensitive, &QPushButton::clicked, this, &ArticleView::on_searchCaseSensitive_clicked );
+ connect( searchPanel->caseSensitive, &QCheckBox::toggled, this, &ArticleView::on_searchCaseSensitive_clicked );
connect( searchPanel->lineEdit, &QLineEdit::textEdited, this, &ArticleView::on_searchText_textEdited );
connect( searchPanel->lineEdit, &QLineEdit::returnPressed, this, &ArticleView::on_searchText_returnPressed );
connect( ftsSearchPanel->next, &QPushButton::clicked, this, &ArticleView::on_ftsSearchNext_clicked );
@@ -1963,8 +1963,11 @@ void ArticleView::on_searchCloseButton_clicked()
closeSearch();
}
-void ArticleView::on_searchCaseSensitive_clicked()
+void ArticleView::on_searchCaseSensitive_clicked( bool checked )
{
+ //clear the previous findText results.
+ //when the results is empty, the highlight has not been removed.more likely a qt bug.
+ webview->findText( "" );
performFindOperation( false );
}
@@ -2027,11 +2030,6 @@ void ArticleView::performFindOperation( bool backwards )
findText( text, f, [ text, this ]( bool match ) {
bool nomatch = !text.isEmpty() && !match;
- if ( nomatch ) {
- //clear the previous findText results.
- //when the results is empty, the highlight has not been removed.more likely a qt bug.
- webview->findText( "" );
- }
Utils::Widget::setNoResultColor( searchPanel->lineEdit, nomatch );
} );
}
diff --git a/src/ui/articleview.hh b/src/ui/articleview.hh
index 36b6b20b0..2aa82f8f0 100644
--- a/src/ui/articleview.hh
+++ b/src/ui/articleview.hh
@@ -357,7 +357,7 @@ private slots:
void on_searchText_textEdited();
void on_searchText_returnPressed();
void on_searchCloseButton_clicked();
- void on_searchCaseSensitive_clicked();
+ void on_searchCaseSensitive_clicked( bool );
void on_ftsSearchPrevious_clicked();
void on_ftsSearchNext_clicked();