opt: extract GDWORD replace logic (#1889)
Some checks failed
SonarCloud / Build and analyze (push) Has been cancelled

* opt: extract GDWORD replace logic


---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
xiaoyifang 2024-11-02 20:18:11 +08:00 committed by GitHub
parent 5ab89cac8c
commit 39aef4c4de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 74 additions and 65 deletions

View file

@ -8,6 +8,7 @@
#include <stub_msvc.h>
#endif
#include <QBuffer>
#include <QTextCodec>
using std::string;
namespace Utils {
@ -119,3 +120,55 @@ void removeDirectory( string const & directory )
}
} // namespace Utils::Fs
namespace Utils::WebSite {
QString urlReplaceWord( const QString url, QString inputWord )
{
//copy temp url
auto urlString = url;
urlString.replace( "%25GDWORD%25", inputWord.toUtf8().toPercentEncoding() );
QTextCodec * codec = QTextCodec::codecForName( "Windows-1251" );
if ( codec ) {
urlString.replace( "%25GD1251%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "Big-5" );
if ( codec ) {
urlString.replace( "%25GDBIG5%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "Big5-HKSCS" );
if ( codec ) {
urlString.replace( "%25GDBIG5HKSCS%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "Shift-JIS" );
if ( codec ) {
urlString.replace( "%25GDSHIFTJIS%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "GB18030" );
if ( codec ) {
urlString.replace( "%25GDGBK%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
// Handle all ISO-8859 encodings
for ( int x = 1; x <= 16; ++x ) {
codec = QTextCodec::codecForName( QString( "ISO 8859-%1" ).arg( x ).toLatin1() );
if ( codec ) {
urlString.replace( QString( "%25GDISO%1%25" ).arg( x ).toUtf8(),
codec->fromUnicode( inputWord ).toPercentEncoding() );
}
// Skip encodings 11..12, they don't exist
if ( x == 10 ) {
x = 12;
}
}
return urlString;
}
} // namespace Utils::WebSite

View file

@ -341,6 +341,10 @@ void removeDirectory( QString const & directory );
void removeDirectory( string const & directory );
} // namespace Fs
namespace WebSite {
QString urlReplaceWord( const QString url, QString word );
}
QString escapeAmps( QString const & str );
QString unescapeAmps( QString const & str );

View file

@ -10,6 +10,7 @@
#include <QFileInfo>
#include "gddebug.hh"
#include "globalbroadcaster.hh"
#include "fmt/compile.h"
#include <QRegularExpression>
@ -312,73 +313,23 @@ void WebSiteArticleRequest::requestFinished( QNetworkReply * r )
}
}
disconnect( netReply, 0, 0, 0 );
disconnect( netReply, nullptr, 0, 0 );
netReply->deleteLater();
finish();
}
sptr< DataRequest >
WebSiteDictionary::getArticle( wstring const & str, vector< wstring > const &, wstring const & context, bool )
sptr< DataRequest > WebSiteDictionary::getArticle( wstring const & str,
vector< wstring > const & /*alts*/,
wstring const & context,
bool /*ignoreDiacritics*/ )
{
QByteArray urlString;
// Context contains the right url to go to
if ( context.size() ) {
urlString = Utf8::encode( context ).c_str();
}
else {
urlString = urlTemplate;
QString inputWord = QString::fromStdU32String( str );
urlString.replace( "%25GDWORD%25", inputWord.toUtf8().toPercentEncoding() );
QTextCodec * codec = QTextCodec::codecForName( "Windows-1251" );
if ( codec ) {
urlString.replace( "%25GD1251%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "Big-5" );
if ( codec ) {
urlString.replace( "%25GDBIG5%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "Big5-HKSCS" );
if ( codec ) {
urlString.replace( "%25GDBIG5HKSCS%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "Shift-JIS" );
if ( codec ) {
urlString.replace( "%25GDSHIFTJIS%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
codec = QTextCodec::codecForName( "GB18030" );
if ( codec ) {
urlString.replace( "%25GDGBK%25", codec->fromUnicode( inputWord ).toPercentEncoding() );
}
// Handle all ISO-8859 encodings
for ( int x = 1; x <= 16; ++x ) {
codec = QTextCodec::codecForName( QString( "ISO 8859-%1" ).arg( x ).toLatin1() );
if ( codec ) {
urlString.replace( QString( "%25GDISO%1%25" ).arg( x ).toUtf8(),
codec->fromUnicode( inputWord ).toPercentEncoding() );
}
if ( x == 10 ) {
x = 12; // Skip encodings 11..12, they don't exist
}
}
}
QString urlString = Utils::WebSite::urlReplaceWord( QString( urlTemplate ), QString::fromStdU32String( str ) );
if ( inside_iframe ) {
// Just insert link in <iframe> tag
string result = "<div class=\"website_padding\"></div>";
string result = R"(<div class="website_padding"></div>)";
//heuristic add url to global whitelist.
QUrl url( urlString );
@ -392,14 +343,15 @@ WebSiteDictionary::getArticle( wstring const & str, vector< wstring > const &, w
encodeUrl = urlString;
}
result += string( "<iframe id=\"gdexpandframe-" ) + getId() +
"\" src=\""+encodeUrl.toStdString() +
"\" onmouseover=\"processIframeMouseOver('gdexpandframe-" + getId() + "');\" "
"onmouseout=\"processIframeMouseOut();\" "
"scrolling=\"no\" "
"style=\"overflow:visible; width:100%; display:block; border:none;\" sandbox=\"allow-same-origin allow-scripts allow-popups\">"
"</iframe>";
fmt::format_to( std::back_inserter( result ),
R"(<iframe id="gdexpandframe-{}" src="{}"
onmouseover="processIframeMouseOver('gdexpandframe-{}');"
onmouseout="processIframeMouseOut();" scrolling="no"
style="overflow:visible; width:100%; display:block; border:none;"
sandbox="allow-same-origin allow-scripts allow-popups"></iframe>)",
getId(),
encodeUrl.toStdString(),
getId() );
auto dr = std::make_shared< DataRequestInstant >( true );
dr->appendString( result );