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
{