From 8fb1e81d75a5b849528efaa06d3383d9e7fe591d Mon Sep 17 00:00:00 2001 From: Xiao YiFang Date: Mon, 6 Jun 2022 20:11:32 +0800 Subject: [PATCH 1/4] style:add body : 100% --- article-style.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/article-style.css b/article-style.css index 0cd9103c..a7ea4d2a 100644 --- a/article-style.css +++ b/article-style.css @@ -1,13 +1,14 @@ /******** Global, non-dictionary-specific classes ***********/ -html{ - height:100%; +html { + height: 100%; } body { background: #fefdeb; font-family: Tahoma, Verdana, "Lucida Sans Unicode", sans-serif; + height: 100%; } /* This stylesheet is used to highligh current selection when doing a search. From aa93d9f2d90fc308a56f0036b6b7f577981a47eb Mon Sep 17 00:00:00 2001 From: Xiao YiFang Date: Mon, 6 Jun 2022 20:16:13 +0800 Subject: [PATCH 2/4] opt: replace string() with QString::toStdstring --- aard.cc | 4 ++-- dsl.cc | 2 +- mdictparser.hh | 2 +- mdx.cc | 14 +++++++------- slob.cc | 6 +++--- zim.cc | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aard.cc b/aard.cc index d6a4eab7..df1d92fa 100644 --- a/aard.cc +++ b/aard.cc @@ -429,7 +429,7 @@ void AardDictionary::loadArticle( quint32 address, while( 1 ) { - articleText = string( QObject::tr( "Article loading error" ).toUtf8().constData() ); + articleText = QObject::tr( "Article loading error" ).toStdString(); try { Mutex::Lock _( aardMutex ); @@ -521,7 +521,7 @@ void AardDictionary::loadArticle( quint32 address, articleText = convert( articleText ); } else - articleText = string( QObject::tr( "Article decoding error" ).toUtf8().constData() ); + articleText = QObject::tr( "Article decoding error" ).toStdString(); // See Issue #271: A mechanism to clean-up invalid HTML cards. string cleaner = """""""""""" diff --git a/dsl.cc b/dsl.cc index 84bd687e..164a42fe 100644 --- a/dsl.cc +++ b/dsl.cc @@ -1697,7 +1697,7 @@ void DslArticleRequest::run() { gdWarning( "DSL: Failed loading article from \"%s\", reason: %s\n", dict.getName().c_str(), ex.what() ); articleText = string( "" ) - + string( QObject::tr( "Article loading error" ).toUtf8().constData() ) + + QObject::tr( "Article loading error" ).toStdString() + ""; } diff --git a/mdictparser.hh b/mdictparser.hh index b8dee43e..bd754f56 100644 --- a/mdictparser.hh +++ b/mdictparser.hh @@ -173,7 +173,7 @@ public: { QString s = QString::fromUtf8( article.c_str() ); substituteStylesheet( s, styleSheets ); - return string( s.toUtf8().constData() ); + return s.toStdString(); } protected: diff --git a/mdx.cc b/mdx.cc index 4165d0ab..caa3ec0f 100644 --- a/mdx.cc +++ b/mdx.cc @@ -977,7 +977,7 @@ void MdxDictionary::loadArticle( uint32_t offset, string & articleText, bool noF if( !noFilter ) article = filterResource( articleId, article ); - articleText = string( article.toUtf8().constData() ); + articleText = article.toStdString(); } QString & MdxDictionary::filterResource( QString const & articleId, QString & article ) @@ -1409,7 +1409,7 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f if ( !parser.open( i->c_str() ) ) continue; - string title = string( parser.title().toUtf8().constData() ); + string title = parser.title().toStdString(); initializing.indexingDictionary( title ); for ( vector< string >::const_iterator mddIter = dictFiles.begin() + 1; @@ -1440,7 +1440,7 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f // then the encoding { - string encoding = string( parser.encoding().toUtf8().constData() ); + string encoding = parser.encoding().toStdString(); idx.write< uint32_t >( encoding.size() ); idx.write( encoding.data(), encoding.size() ); } @@ -1457,7 +1457,7 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f // Save dictionary description if there's one { - string description = string( parser.description().toUtf8().constData() ); + string description = parser.description().toStdString(); idxHeader.descriptionAddress = chunks.startNewBlock(); chunks.addToBlock( description.c_str(), description.size() + 1 ); idxHeader.descriptionSize = description.size() + 1; @@ -1491,7 +1491,7 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f mddIndices.push_back( mddIndexedWords ); // Save filename for .mdd files only QFileInfo fi( mddParser->filename() ); - mddFileNames.push_back( string( fi.fileName().toUtf8().constData() ) ); + mddFileNames.push_back( fi.fileName().toStdString() ); mddParsers.pop_front(); } @@ -1514,8 +1514,8 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f for ( MdictParser::StyleSheets::const_iterator iter = styleSheets.begin(); iter != styleSheets.end(); ++iter ) { - string styleBegin( iter->second.first.toUtf8().constData() ); - string styleEnd( iter->second.second.toUtf8().constData() ); + string styleBegin(iter->second.first.toStdString()); + string styleEnd( iter->second.second.toStdString() ); // key idx.write( iter->first ); diff --git a/slob.cc b/slob.cc index 7851ebec..9b952e6a 100644 --- a/slob.cc +++ b/slob.cc @@ -694,12 +694,12 @@ SlobDictionary::SlobDictionary( string const & id, // Read dictionary name - dictionaryName = string( sf.getDictionaryName().toUtf8().constData() ); + dictionaryName = sf.getDictionaryName().toStdString(); if( dictionaryName.empty() ) { QString name = QDir::fromNativeSeparators( FsEncoding::decode( dictionaryFiles[ 0 ].c_str() ) ); int n = name.lastIndexOf( '/' ); - dictionaryName = string( name.mid( n + 1 ).toUtf8().constData() ); + dictionaryName = name.mid( n + 1 ).toStdString(); } // Full-text search parameters @@ -799,7 +799,7 @@ void SlobDictionary::loadArticle( quint32 address, articleText = convert( articleText, entry ); } else - articleText = string( QObject::tr( "Article decoding error" ).toUtf8().constData() ); + articleText = QObject::tr( "Article decoding error" ).toStdString(); // See Issue #271: A mechanism to clean-up invalid HTML cards. string cleaner = """""""""""" diff --git a/zim.cc b/zim.cc index e054778d..6dc8a9b1 100644 --- a/zim.cc +++ b/zim.cc @@ -769,7 +769,7 @@ ZimDictionary::ZimDictionary( string const & id, { QString name = QDir::fromNativeSeparators( FsEncoding::decode( dictionaryFiles[ 0 ].c_str() ) ); int n = name.lastIndexOf( '/' ); - dictionaryName = string( name.mid( n + 1 ).toUtf8().constData() ); + dictionaryName = name.mid( n + 1 ).toStdString(); } else { From 5f856bf2aeee8d4416b968bb698089a3ca4d03a9 Mon Sep 17 00:00:00 2001 From: Xiao YiFang Date: Tue, 7 Jun 2022 08:05:49 +0800 Subject: [PATCH 3/4] refactor getqueryword --- article_netmgr.cc | 5 ++--- articleview.cc | 5 ++--- utils.hh | 19 ++++++++++++++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/article_netmgr.cc b/article_netmgr.cc index 6d0d3f5c..5a172289 100644 --- a/article_netmgr.cc +++ b/article_netmgr.cc @@ -513,11 +513,10 @@ void LocalSchemeHandler::requestStarted(QWebEngineUrlRequestJob *requestJob) request.setUrl( url ); //all the url reached here must be either gdlookup or bword scheme. - auto queryWord = Utils::Url::getQueryWord( url ); - auto word = queryWord.second; + auto [valid, word] = Utils::Url::getQueryWord( url ); // or the condition can be (!queryWord.first || word.isEmpty()) // ( queryWord.first && word.isEmpty() ) is only part of the above condition. - if( queryWord.first && word.isEmpty() ) + if( valid && word.isEmpty() ) { // invalid gdlookup url. return; diff --git a/articleview.cc b/articleview.cc index b1eace83..3d426d89 100644 --- a/articleview.cc +++ b/articleview.cc @@ -1113,9 +1113,8 @@ void ArticleView::openLink( QUrl const & url, QUrl const & ref, audioPlayer->stop(); qDebug() << "open link url:" << url; - auto queryWord = Utils::Url::getQueryWord( url ); - auto word = queryWord.second; - if( queryWord.first && word.isEmpty() ) + auto [valid, word] = Utils::Url::getQueryWord( url ); + if( valid && word.isEmpty() ) { // invalid gdlookup url. return; diff --git a/utils.hh b/utils.hh index be5c2563..a91d0e6e 100644 --- a/utils.hh +++ b/utils.hh @@ -224,7 +224,24 @@ inline std::pair< bool, QString > getQueryWord( QUrl const & url ) if( url.scheme().compare( "bword" ) == 0 ) { validScheme = true; - word = url.path().mid( 1 ); + + auto path = url.path(); + // url like this , bword:word or bword://localhost/word + if( !path.isEmpty() ) + { + //url,bword://localhost/word + if( path.startsWith( "/" ) ) + word = url.path().mid( 1 ); + } + else + { + // url looks like this, bword://word,or bword://localhost + auto host = url.host(); + if( host != "localhost" ) + { + word = host; + } + } } return std::make_pair( validScheme, word ); } From 9daff6ae371b8319470a4281bbb1d9d81bcd9ce9 Mon Sep 17 00:00:00 2001 From: Xiao YiFang Date: Tue, 7 Jun 2022 08:11:10 +0800 Subject: [PATCH 4/4] support mdex builtin link entry: --- articleview.cc | 2 +- main.cc | 2 +- mainwindow.cc | 1 + utils.hh | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/articleview.cc b/articleview.cc index 3d426d89..7e7120bb 100644 --- a/articleview.cc +++ b/articleview.cc @@ -1125,7 +1125,7 @@ void ArticleView::openLink( QUrl const & url, QUrl const & ref, if( url.scheme().compare( "gdpicture" ) == 0 ) ui.definition->load( url ); else - if ( url.scheme().compare( "bword" ) == 0 ) + if ( url.scheme().compare( "bword" ) == 0 || url.scheme().compare( "entry" ) == 0 ) { if( Utils::Url::hasQueryItem( ref, "dictionaries" ) ) { diff --git a/main.cc b/main.cc index 958e2b5d..1d32034d 100644 --- a/main.cc +++ b/main.cc @@ -253,7 +253,7 @@ int main( int argc, char ** argv ) #endif - QStringList localSchemes={"gdlookup","gdau","gico","qrcx","bres","bword","gdprg","gdvideo","gdpicture","gdtts","ifr"}; + QStringList localSchemes={"gdlookup","gdau","gico","qrcx","bres","bword","gdprg","gdvideo","gdpicture","gdtts","ifr", "entry"}; for (int i = 0; i < localSchemes.size(); ++i) { diff --git a/mainwindow.cc b/mainwindow.cc index f8103eae..29f2bee3 100644 --- a/mainwindow.cc +++ b/mainwindow.cc @@ -164,6 +164,7 @@ MainWindow::MainWindow( Config::Class & cfg_ ): localSchemeHandler = new LocalSchemeHandler( articleNetMgr ); QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "gdlookup", localSchemeHandler ); QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "bword", localSchemeHandler ); + QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "entry", localSchemeHandler ); iframeSchemeHandler = new IframeSchemeHandler( this ); QWebEngineProfile::defaultProfile()->installUrlSchemeHandler( "ifr", iframeSchemeHandler ); diff --git a/utils.hh b/utils.hh index a91d0e6e..eb4fee08 100644 --- a/utils.hh +++ b/utils.hh @@ -221,7 +221,7 @@ inline std::pair< bool, QString > getQueryWord( QUrl const & url ) word = url.path().mid( 1 ); } } - if( url.scheme().compare( "bword" ) == 0 ) + if( url.scheme().compare( "bword" ) == 0 || url.scheme().compare( "entry" ) == 0 ) { validScheme = true;