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/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. 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..7e7120bb 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; @@ -1126,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/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/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/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/utils.hh b/utils.hh index be5c2563..eb4fee08 100644 --- a/utils.hh +++ b/utils.hh @@ -221,10 +221,27 @@ 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; - 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 ); } 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 {