Compare commits

...

18 commits

Author SHA1 Message Date
xiaoyifang cc070a46ef
Merge 3c5233f2a1 into 0680edd1e9 2024-11-22 00:29:08 +08:00
shenleban tongying 0680edd1e9
clean: delete unused QSemaphore and do a header cleanup
Some checks are pending
SonarCloud / Build and analyze (push) Waiting to run
2024-11-21 13:06:17 +00:00
shenleban tongying d3700f2926
refactor: move transliteration code to src/dict/transliteration
Some checks are pending
SonarCloud / Build and analyze (push) Waiting to run
2024-11-21 07:21:57 +00:00
shenleban tongying f2ce85cda2
clean: remove duplicated getName overrides
Some checks are pending
SonarCloud / Build and analyze (push) Waiting to run
2024-11-20 07:50:43 -05:00
atauzki 9c46e5c317
fix: wrong use of QBtyeArrayView::compare (#1971)
* fix wrong use of `QBtyeArrayView::compare`

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-11-20 20:02:36 +08:00
shenleban tongying 5b9a1611ff
clean: delete stub_msvc.h 2024-11-20 05:27:01 -05:00
shenleban tongying 112874b0e3
clean: unify a common idx file read pattern uint32_t size + data
Some checks are pending
SonarCloud / Build and analyze (push) Waiting to run
2024-11-20 03:22:08 -05:00
xiaoyifang 3c5233f2a1 1 2024-11-11 09:19:29 +08:00
YiFang Xiao c5ca1b7d63 1 2024-11-11 09:16:14 +08:00
YiFang Xiao 5092ebe2ee 1 2024-11-11 09:16:14 +08:00
YiFang Xiao 5bef4cef22 1 2024-11-11 09:16:14 +08:00
xiaoyifang 59d01868da 1: do not update name 2024-11-11 09:16:14 +08:00
xiaoyifang 10b0496cce 1: do not update name 2024-11-11 09:16:14 +08:00
xiaoyifang 1cf495e7dd Revert "opt: update name should reflect the latest info"
This reverts commit 1272ea2d20a7908b9a69d6b551511916f97cc024.
2024-11-11 09:16:14 +08:00
xiaoyifang c2fc90801b opt: update name should reflect the latest info 2024-11-11 09:16:14 +08:00
autofix-ci[bot] 2de2141758 [autofix.ci] apply automated fixes 2024-11-11 09:16:14 +08:00
xiaoyifang db4c352d6c opt: erase the need to removeTabs 2024-11-11 09:16:14 +08:00
xiaoyifang 7c32cad65a opt: erase the need to removeTabs 2024-11-11 09:16:14 +08:00
55 changed files with 167 additions and 415 deletions

View file

@ -1,7 +1,6 @@
#include "audiooutput.hh" #include "audiooutput.hh"
#include <QAudioFormat> #include <QtConcurrentRun>
#include <QtConcurrent/qtconcurrentrun.h>
#include <QFuture> #include <QFuture>
#include <QWaitCondition> #include <QWaitCondition>
#include <QCoreApplication> #include <QCoreApplication>

View file

@ -4,9 +4,6 @@
#include <QStyle> #include <QStyle>
#include <QMessageBox> #include <QMessageBox>
#include <string> #include <string>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include <QBuffer> #include <QBuffer>
#include <QTextCodec> #include <QTextCodec>
@ -31,10 +28,10 @@ std::string c_string( const QString & str )
return std::string( str.toUtf8().constData() ); return std::string( str.toUtf8().constData() );
} }
bool endsWithIgnoreCase( const string & str1, string str2 ) bool endsWithIgnoreCase( QByteArrayView str, QByteArrayView extension )
{ {
return ( str1.size() >= (unsigned)str2.size() ) return ( str.size() >= extension.size() )
&& ( strcasecmp( str1.c_str() + ( str1.size() - str2.size() ), str2.data() ) == 0 ); && ( str.last( extension.size() ).compare( extension, Qt::CaseInsensitive ) == 0 );
} }
QString escapeAmps( QString const & str ) QString escapeAmps( QString const & str )

View file

@ -40,7 +40,7 @@ inline QString rstrip( const QString & str )
} }
std::string c_string( const QString & str ); std::string c_string( const QString & str );
bool endsWithIgnoreCase( const string & str1, string str2 ); bool endsWithIgnoreCase( QByteArrayView str, QByteArrayView extension );
/** /**
* remove punctuation , space, symbol * remove punctuation , space, symbol
* *

View file

@ -16,19 +16,11 @@
#include <set> #include <set>
#include <string> #include <string>
#ifdef _MSC_VER #include <QDir>
#include <stub_msvc.h>
#endif
#include <QString> #include <QString>
#include <QSemaphore>
#include <QThreadPool>
#include <QAtomicInt> #include <QAtomicInt>
#include <QDomDocument>
#include <QtEndian> #include <QtEndian>
#include <QRegularExpression> #include <QRegularExpression>
#include "ufile.hh"
#include "wstring_qt.hh"
#include "utils.hh" #include "utils.hh"
namespace Aard { namespace Aard {
@ -295,11 +287,7 @@ AardDictionary::AardDictionary( string const & id, string const & indexFile, vec
// Read dictionary name // Read dictionary name
idx.seek( sizeof( idxHeader ) ); idx.seek( sizeof( idxHeader ) );
vector< char > dName( idx.read< quint32 >() ); idx.readU32SizeAndData<>( dictionaryName );
if ( dName.size() ) {
idx.read( &dName.front(), dName.size() );
dictionaryName = string( &dName.front(), dName.size() );
}
// Initialize the index // Initialize the index

View file

@ -14,23 +14,17 @@
#include "language.hh" #include "language.hh"
#include "utf8.hh" #include "utf8.hh"
#include "utils.hh" #include "utils.hh"
#include <ctype.h> #include <ctype.h>
#include <list> #include <list>
#include <map> #include <map>
#include <set> #include <set>
#include <string.h> #include <string.h>
#include <zlib.h> #include <zlib.h>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include <QAtomicInt> #include <QAtomicInt>
#include <QCryptographicHash>
#include <QDir>
#include <QPainter> #include <QPainter>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSemaphore>
#include <QThreadPool>
namespace Bgl { namespace Bgl {
@ -258,15 +252,7 @@ BglDictionary::BglDictionary( string const & id, string const & indexFile, strin
// Read the dictionary's name // Read the dictionary's name
size_t len = idx.read< uint32_t >(); idx.readU32SizeAndData<>( dictionaryName );
if ( len ) {
vector< char > nameBuf( len );
idx.read( &nameBuf.front(), len );
dictionaryName = string( &nameBuf.front(), len );
}
// Initialize the index // Initialize the index
@ -899,8 +885,8 @@ void BglResourceRequest::run()
break; break;
} }
vector< char > nameData( idx.read< uint32_t >() ); vector< char > nameData;
idx.read( &nameData.front(), nameData.size() ); idx.readU32SizeAndData<>( nameData );
for ( size_t x = nameData.size(); x--; ) { for ( size_t x = nameData.size(); x--; ) {
nameData[ x ] = tolower( nameData[ x ] ); nameData[ x ] = tolower( nameData[ x ] );
@ -917,9 +903,9 @@ void BglResourceRequest::run()
data.resize( idx.read< uint32_t >() ); data.resize( idx.read< uint32_t >() );
vector< unsigned char > compressedData( idx.read< uint32_t >() ); vector< unsigned char > compressedData;
idx.read( &compressedData.front(), compressedData.size() ); idx.readU32SizeAndData<>( compressedData );
unsigned long decompressedLength = data.size(); unsigned long decompressedLength = data.size();

View file

@ -4,9 +4,6 @@
#include "btreeidx.hh" #include "btreeidx.hh"
#include "folding.hh" #include "folding.hh"
#include "utf8.hh" #include "utf8.hh"
#include <QRunnable>
#include <QThreadPool>
#include <QSemaphore>
#include <math.h> #include <math.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
@ -18,7 +15,7 @@
#include "wildcard.hh" #include "wildcard.hh"
#include "globalbroadcaster.hh" #include "globalbroadcaster.hh"
#include <QtConcurrent> #include <QtConcurrentRun>
#include <zlib.h> #include <zlib.h>
namespace BtreeIndexing { namespace BtreeIndexing {

View file

@ -5,17 +5,12 @@
#include "dict/dictionary.hh" #include "dict/dictionary.hh"
#include "dictfile.hh" #include "dictfile.hh"
#include <algorithm>
#include <map> #include <map>
#include <stdint.h> #include <stdint.h>
#include <string> #include <string>
#include <vector> #include <vector>
#include <QFuture> #include <QFuture>
#include <QList> #include <QList>
#include <QSet>
#include <QList>
/// A base for the dictionary which creates a btree index to look up /// A base for the dictionary which creates a btree index to look up

View file

@ -7,7 +7,6 @@
#include "utf8.hh" #include "utf8.hh"
#include "dictzip.hh" #include "dictzip.hh"
#include "htmlescape.hh" #include "htmlescape.hh"
#include "langcoder.hh" #include "langcoder.hh"
#include <map> #include <map>
#include <set> #include <set>
@ -18,15 +17,12 @@
#include <stdlib.h> #include <stdlib.h>
#include "gddebug.hh" #include "gddebug.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include <QDir>
#include <QUrl> #include <QUrl>
#include <QRegularExpression> #include <QRegularExpression>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
namespace DictdFiles { namespace DictdFiles {
using std::map; using std::map;
@ -96,11 +92,6 @@ public:
~DictdDictionary(); ~DictdDictionary();
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
return map< Dictionary::Property, string >(); return map< Dictionary::Property, string >();
@ -163,11 +154,7 @@ DictdDictionary::DictdDictionary( string const & id,
// Read the dictionary name // Read the dictionary name
idx.seek( sizeof( idxHeader ) ); idx.seek( sizeof( idxHeader ) );
vector< char > dName( idx.read< uint32_t >() ); idx.readU32SizeAndData<>( dictionaryName );
if ( dName.size() > 0 ) {
idx.read( &dName.front(), dName.size() );
dictionaryName = string( &dName.front(), dName.size() );
}
// Open the .dict file // Open the .dict file

View file

@ -7,11 +7,12 @@
#include <QUrl> #include <QUrl>
#include <QTcpSocket> #include <QTcpSocket>
#include <QString> #include <QString>
#include <list>
#include "htmlescape.hh" #include "htmlescape.hh"
#include <QCryptographicHash>
#include <QDir>
#include <QFileInfo>
#include <QRegularExpression> #include <QRegularExpression>
#include <QtConcurrent> #include <QtConcurrentRun>
namespace DictServer { namespace DictServer {
@ -176,7 +177,6 @@ class DictServerDictionary: public Dictionary::Class
{ {
Q_OBJECT Q_OBJECT
string name;
QString url, icon; QString url, icon;
quint32 langId; quint32 langId;
QString errorString; QString errorString;
@ -196,11 +196,13 @@ public:
QString const & strategies_, QString const & strategies_,
QString const & icon_ ): QString const & icon_ ):
Dictionary::Class( id, vector< string >() ), Dictionary::Class( id, vector< string >() ),
name( name_ ),
url( url_ ), url( url_ ),
icon( icon_ ), icon( icon_ ),
langId( 0 ) langId( 0 )
{ {
dictionaryName = name_;
int pos = url.indexOf( "://" ); int pos = url.indexOf( "://" );
if ( pos < 0 ) { if ( pos < 0 ) {
url = "dict://" + url; url = "dict://" + url;
@ -301,11 +303,6 @@ public:
disconnectFromServer( socket ); disconnectFromServer( socket );
} }
string getName() noexcept override
{
return name;
}
map< Property, string > getProperties() noexcept override map< Property, string > getProperties() noexcept override
{ {
return {}; return {};
@ -925,4 +922,4 @@ vector< sptr< Dictionary::Class > > makeDictionaries( Config::DictServers const
return result; return result;
} }
#include "dictserver.moc" #include "dictserver.moc"
} // namespace DictServer } // namespace DictServer

View file

@ -11,7 +11,6 @@
#include "htmlescape.hh" #include "htmlescape.hh"
#include "iconv.hh" #include "iconv.hh"
#include "filetype.hh" #include "filetype.hh"
#include "audiolink.hh" #include "audiolink.hh"
#include "langcoder.hh" #include "langcoder.hh"
#include "wstring_qt.hh" #include "wstring_qt.hh"
@ -19,40 +18,22 @@
#include "gddebug.hh" #include "gddebug.hh"
#include "tiff.hh" #include "tiff.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include <map> #include <map>
#include <set> #include <set>
#include <string> #include <string>
#include <vector> #include <vector>
#include <list> #include <list>
#include <wctype.h> #include <wctype.h>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include <QSemaphore>
#include <QThreadPool> #include <QThreadPool>
#include <QAtomicInt> #include <QAtomicInt>
#include <QUrl> #include <QUrl>
#include <QDir> #include <QDir>
#include <QFileInfo> #include <QFileInfo>
#include <QPainter> #include <QPainter>
#include <QStringList>
#include <QRegularExpression> #include <QRegularExpression>
// For TIFF conversion
#include <QImage>
#include <QByteArray> #include <QByteArray>
#include <QBuffer> #include <QSvgRenderer>
#include <QtConcurrentRun>
// For SVG handling
#include <QtSvg/QSvgRenderer>
#include <QtConcurrent>
#include "utils.hh" #include "utils.hh"
namespace Dsl { namespace Dsl {
@ -158,7 +139,6 @@ class DslDictionary: public BtreeIndexing::BtreeDictionary
QAtomicInt deferredInitDone; QAtomicInt deferredInitDone;
QMutex deferredInitMutex; QMutex deferredInitMutex;
bool deferredInitRunnableStarted; bool deferredInitRunnableStarted;
QSemaphore deferredInitRunnableExited;
string initError; string initError;
@ -176,10 +156,6 @@ public:
~DslDictionary(); ~DslDictionary();
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
@ -303,17 +279,9 @@ DslDictionary::DslDictionary( string const & id, string const & indexFile, vecto
idx.seek( sizeof( idxHeader ) ); idx.seek( sizeof( idxHeader ) );
vector< char > dName( idx.read< uint32_t >() ); idx.readU32SizeAndData<>( dictionaryName );
if ( dName.size() > 0 ) { idx.readU32SizeAndData<>( preferredSoundDictionary );
idx.read( &dName.front(), dName.size() );
dictionaryName = string( &dName.front(), dName.size() );
}
vector< char > sName( idx.read< uint32_t >() );
if ( sName.size() > 0 ) {
idx.read( &sName.front(), sName.size() );
preferredSoundDictionary = string( &sName.front(), sName.size() );
}
resourceDir1 = getDictionaryFilenames()[ 0 ] + ".files" + Utils::Fs::separator(); resourceDir1 = getDictionaryFilenames()[ 0 ] + ".files" + Utils::Fs::separator();
QString s = QString::fromStdString( getDictionaryFilenames()[ 0 ] ); QString s = QString::fromStdString( getDictionaryFilenames()[ 0 ] );
@ -1421,7 +1389,6 @@ class DslArticleRequest: public Dictionary::DataRequest
bool ignoreDiacritics; bool ignoreDiacritics;
QAtomicInt isCancelled; QAtomicInt isCancelled;
QSemaphore hasExited;
QFuture< void > f; QFuture< void > f;
public: public:
@ -1598,7 +1565,6 @@ class DslResourceRequest: public Dictionary::DataRequest
string resourceName; string resourceName;
QAtomicInt isCancelled; QAtomicInt isCancelled;
QSemaphore hasExited;
QFuture< void > f; QFuture< void > f;
public: public:
@ -1745,11 +1711,10 @@ vector< sptr< Dictionary::Class > > makeDictionaries( vector< string > const & f
continue; continue;
} }
// Make sure it's not an abbreviation file // Make sure it's not an abbreviation file. extSize of ".dsl" or ".dsl.dz"
int extSize = ( uncompressedDsl ? 4 : 7 ); if ( int extSize = ( uncompressedDsl ? 4 : 7 ); ( fileName.size() >= ( 5 + extSize ) )
if ( fileName.size() - extSize >= 5 && ( QByteArrayView( fileName ).chopped( extSize ).last( 5 ).compare( "_abrv", Qt::CaseInsensitive ) == 0 ) ) {
&& strncasecmp( fileName.c_str() + fileName.size() - extSize - 5, "_abrv", 5 ) == 0 ) {
// It is, skip it // It is, skip it
continue; continue;
} }

View file

@ -1,26 +1,19 @@
/* This file is (c) 2014 Abs62 /* This file is (c) 2014 Abs62
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#include <QDir>
#ifndef NO_EPWING_SUPPORT #ifndef NO_EPWING_SUPPORT
#include "epwing_book.hh" #include "epwing_book.hh"
#include "epwing.hh" #include "epwing.hh"
#include <QByteArray> #include <QByteArray>
#include <QDir>
#include <QRunnable>
#include <QSemaphore>
#include <map> #include <map>
#include <QtConcurrent> #include <QtConcurrentRun>
#include <set> #include <set>
#include <string> #include <string>
#include "btreeidx.hh" #include "btreeidx.hh"
#include "folding.hh" #include "folding.hh"
#include "gddebug.hh" #include "gddebug.hh"
#include "chunkedstorage.hh" #include "chunkedstorage.hh"
#include "wstring_qt.hh"
#include "filetype.hh" #include "filetype.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include "globalregex.hh" #include "globalregex.hh"
@ -82,7 +75,6 @@ class EpwingDictionary: public BtreeIndexing::BtreeDictionary
QMutex idxMutex; QMutex idxMutex;
File::Index idx; File::Index idx;
IdxHeader idxHeader; IdxHeader idxHeader;
string bookName;
ChunkedStorage::Reader chunks; ChunkedStorage::Reader chunks;
Epwing::Book::EpwingBook eBook; Epwing::Book::EpwingBook eBook;
QString cacheDirectory; QString cacheDirectory;
@ -96,15 +88,6 @@ public:
~EpwingDictionary(); ~EpwingDictionary();
string getName() noexcept override
{
return bookName;
}
void setName( string _name ) noexcept override
{
bookName = _name;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
@ -227,7 +210,7 @@ EpwingDictionary::EpwingDictionary( string const & id,
idx.seek( sizeof( idxHeader ) ); idx.seek( sizeof( idxHeader ) );
if ( data.size() > 0 ) { if ( data.size() > 0 ) {
idx.read( &data.front(), idxHeader.nameSize ); idx.read( &data.front(), idxHeader.nameSize );
bookName = string( &data.front(), idxHeader.nameSize ); dictionaryName = string( &data.front(), idxHeader.nameSize );
} }
// Initialize eBook // Initialize eBook

View file

@ -18,8 +18,12 @@
#include <QString> #include <QString>
#include <QtCore5Compat/QTextCodec> #include <QtCore5Compat/QTextCodec>
#ifdef _MSC_VER // POSIX symbol unavailable on Windows needed for eb headers
#include <stub_msvc.h> #ifdef Q_OS_WIN
#ifndef _SSIZE_T
#define _SSIZE_T
#define ssize_t long
#endif
#endif #endif
#include <eb/eb.h> #include <eb/eb.h>

View file

@ -20,7 +20,6 @@ namespace {
class ForvoDictionary: public Dictionary::Class class ForvoDictionary: public Dictionary::Class
{ {
string name;
QString apiKey, languageCode; QString apiKey, languageCode;
QNetworkAccessManager & netMgr; QNetworkAccessManager & netMgr;
@ -32,17 +31,13 @@ public:
QString const & languageCode_, QString const & languageCode_,
QNetworkAccessManager & netMgr_ ): QNetworkAccessManager & netMgr_ ):
Dictionary::Class( id, vector< string >() ), Dictionary::Class( id, vector< string >() ),
name( name_ ),
apiKey( apiKey_ ), apiKey( apiKey_ ),
languageCode( languageCode_ ), languageCode( languageCode_ ),
netMgr( netMgr_ ) netMgr( netMgr_ )
{ {
dictionaryName = name_;
} }
string getName() noexcept override
{
return name;
}
map< Property, string > getProperties() noexcept override map< Property, string > getProperties() noexcept override
{ {

View file

@ -16,32 +16,21 @@
#include "dictzip.hh" #include "dictzip.hh"
#include "indexedzip.hh" #include "indexedzip.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include "htmlescape.hh" #include "htmlescape.hh"
#include "filetype.hh" #include "filetype.hh"
#include "tiff.hh" #include "tiff.hh"
#include "audiolink.hh" #include "audiolink.hh"
#include <QString> #include <QString>
#include <QSemaphore>
#include <QThreadPool>
#include <QAtomicInt> #include <QAtomicInt>
// For TIFF conversion
#include <QImage>
#include <QByteArray> #include <QByteArray>
#include <QBuffer> #include <QDir>
#include <QRegularExpression> #include <QRegularExpression>
#include <QtCore5Compat/QTextCodec> #include <QtCore5Compat/QTextCodec>
#include <string> #include <string>
#include <list> #include <list>
#include <map> #include <map>
#include <set> #include <set>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
namespace Gls { namespace Gls {
@ -361,11 +350,6 @@ public:
~GlsDictionary(); ~GlsDictionary();
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
return map< Dictionary::Property, string >(); return map< Dictionary::Property, string >();
@ -461,11 +445,7 @@ GlsDictionary::GlsDictionary( string const & id, string const & indexFile, vecto
idx.seek( sizeof( idxHeader ) ); idx.seek( sizeof( idxHeader ) );
vector< char > dName( idx.read< uint32_t >() ); idx.readU32SizeAndData<>( dictionaryName );
if ( dName.size() > 0 ) {
idx.read( &dName.front(), dName.size() );
dictionaryName = string( &dName.front(), dName.size() );
}
// Initialize the index // Initialize the index

View file

@ -6,30 +6,22 @@
#include "htmlescape.hh" #include "htmlescape.hh"
#include "iconv.hh" #include "iconv.hh"
#include "folding.hh" #include "folding.hh"
#include "wstring_qt.hh"
#include "language.hh" #include "language.hh"
#include "langcoder.hh" #include "langcoder.hh"
#include <QRunnable>
#include <QThreadPool>
#include <QSemaphore>
#include <QRegularExpression> #include <QRegularExpression>
#include <QDir> #include <QDir>
#include <QCoreApplication> #include <QCoreApplication>
#include <QFileInfo> #include <QFileInfo>
#include <set> #include <set>
#include "gddebug.hh"
#include "utils.hh"
#include <QtConcurrentRun>
#ifndef INCLUDE_LIBRARY_PATH #ifndef INCLUDE_LIBRARY_PATH
#include <hunspell.hxx> #include <hunspell.hxx>
#else #else
#include <hunspell/hunspell.hxx> #include <hunspell/hunspell.hxx>
#endif #endif
#include "gddebug.hh"
#include "utils.hh"
#include <QtConcurrent>
namespace HunspellMorpho { namespace HunspellMorpho {
@ -41,7 +33,6 @@ namespace {
class HunspellDictionary: public Dictionary::Class class HunspellDictionary: public Dictionary::Class
{ {
string name;
Hunspell hunspell; Hunspell hunspell;
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
@ -56,19 +47,15 @@ public:
/// files[ 0 ] should be .aff file, files[ 1 ] should be .dic file. /// files[ 0 ] should be .aff file, files[ 1 ] should be .dic file.
HunspellDictionary( string const & id, string const & name_, vector< string > const & files ): HunspellDictionary( string const & id, string const & name_, vector< string > const & files ):
Dictionary::Class( id, files ), Dictionary::Class( id, files ),
name( name_ ),
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
hunspell( Utf8ToLocal8Bit( files[ 0 ] ).c_str(), Utf8ToLocal8Bit( files[ 1 ] ).c_str() ) hunspell( Utf8ToLocal8Bit( files[ 0 ] ).c_str(), Utf8ToLocal8Bit( files[ 1 ] ).c_str() )
#else #else
hunspell( files[ 0 ].c_str(), files[ 1 ].c_str() ) hunspell( files[ 0 ].c_str(), files[ 1 ].c_str() )
#endif #endif
{ {
dictionaryName = name_;
} }
string getName() noexcept override
{
return name;
}
map< Property, string > getProperties() noexcept override map< Property, string > getProperties() noexcept override
{ {

View file

@ -60,7 +60,6 @@ private slots:
class LinguaDictionary: public Dictionary::Class class LinguaDictionary: public Dictionary::Class
{ {
string name;
QString languageCode; QString languageCode;
QString langWikipediaID; QString langWikipediaID;
QNetworkAccessManager & netMgr; QNetworkAccessManager & netMgr;
@ -68,10 +67,10 @@ class LinguaDictionary: public Dictionary::Class
public: public:
LinguaDictionary( string const & id, string name_, QString languageCode_, QNetworkAccessManager & netMgr_ ): LinguaDictionary( string const & id, string name_, QString languageCode_, QNetworkAccessManager & netMgr_ ):
Dictionary::Class( id, vector< string >() ), Dictionary::Class( id, vector< string >() ),
name( std::move( name_ ) ),
languageCode( std::move( languageCode_ ) ), languageCode( std::move( languageCode_ ) ),
netMgr( netMgr_ ) netMgr( netMgr_ )
{ {
dictionaryName = name_;
/* map of iso lang code to wikipedia lang id /* map of iso lang code to wikipedia lang id
Data was obtained by this query on https://commons-query.wikimedia.org/ Data was obtained by this query on https://commons-query.wikimedia.org/
@ -166,10 +165,6 @@ WHERE {
} }
} }
string getName() noexcept override
{
return name;
}
map< Property, string > getProperties() noexcept override map< Property, string > getProperties() noexcept override
{ {

View file

@ -11,12 +11,6 @@
#include "dict/sounddir.hh" #include "dict/sounddir.hh"
#include "dict/hunspell.hh" #include "dict/hunspell.hh"
#include "dictdfiles.hh" #include "dictdfiles.hh"
#include "dict/romaji.hh"
#include "dict/customtransliteration.hh"
#include "dict/russiantranslit.hh"
#include "dict/german.hh"
#include "dict/greektranslit.hh"
#include "dict/belarusiantranslit.hh"
#include "dict/website.hh" #include "dict/website.hh"
#include "dict/forvo.hh" #include "dict/forvo.hh"
#include "dict/programs.hh" #include "dict/programs.hh"
@ -34,12 +28,19 @@
#include "dict/lingualibre.hh" #include "dict/lingualibre.hh"
#include "metadata.hh" #include "metadata.hh"
#include "dict/transliteration/belarusian.hh"
#include "dict/transliteration/custom.hh"
#include "dict/transliteration/german.hh"
#include "dict/transliteration/greek.hh"
#include "dict/transliteration/romaji.hh"
#include "dict/transliteration/russian.hh"
#ifndef NO_EPWING_SUPPORT #ifndef NO_EPWING_SUPPORT
#include "dict/epwing.hh" #include "dict/epwing.hh"
#endif #endif
#ifdef MAKE_CHINESE_CONVERSION_SUPPORT #ifdef MAKE_CHINESE_CONVERSION_SUPPORT
#include "dict/chinese.hh" #include "dict/transliteration/chinese.hh"
#endif #endif
#include <QMessageBox> #include <QMessageBox>
@ -224,7 +225,7 @@ void loadDictionaries( QWidget * parent,
loadDicts.wait(); loadDicts.wait();
if ( loadDicts.getExceptionText().size() ) { if ( !loadDicts.getExceptionText().empty() ) {
QMessageBox::critical( parent, QMessageBox::critical( parent,
QCoreApplication::translate( "LoadDictionaries", "Error loading dictionaries" ), QCoreApplication::translate( "LoadDictionaries", "Error loading dictionaries" ),
QString::fromUtf8( loadDicts.getExceptionText().c_str() ) ); QString::fromUtf8( loadDicts.getExceptionText().c_str() ) );
@ -243,10 +244,10 @@ void loadDictionaries( QWidget * parent,
///// We create transliterations synchronously since they are very simple ///// We create transliterations synchronously since they are very simple
#ifdef MAKE_CHINESE_CONVERSION_SUPPORT #ifdef MAKE_CHINESE_CONVERSION_SUPPORT
addDicts( Chinese::makeDictionaries( cfg.transliteration.chinese ) ); addDicts( ChineseTranslit::makeDictionaries( cfg.transliteration.chinese ) );
#endif #endif
addDicts( Romaji::makeDictionaries( cfg.transliteration.romaji ) ); addDicts( RomajiTranslit::makeDictionaries( cfg.transliteration.romaji ) );
addDicts( CustomTranslit::makeDictionaries( cfg.transliteration.customTrans ) ); addDicts( CustomTranslit::makeDictionaries( cfg.transliteration.customTrans ) );
// Make Russian transliteration // Make Russian transliteration

View file

@ -14,10 +14,6 @@
#include <set> #include <set>
#include <string> #include <string>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#define OV_EXCLUDE_STATIC_CALLBACKS #define OV_EXCLUDE_STATIC_CALLBACKS
#include <vorbis/vorbisfile.h> #include <vorbis/vorbisfile.h>
#include <QDir> #include <QDir>

View file

@ -11,22 +11,16 @@
#include "chunkedstorage.hh" #include "chunkedstorage.hh"
#include "gddebug.hh" #include "gddebug.hh"
#include "langcoder.hh" #include "langcoder.hh"
#include "audiolink.hh" #include "audiolink.hh"
#include "ex.hh" #include "ex.hh"
#include "mdictparser.hh" #include "mdictparser.hh"
#include "filetype.hh" #include "filetype.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include "htmlescape.hh" #include "htmlescape.hh"
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <set> #include <set>
#include <list> #include <list>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include "globalregex.hh" #include "globalregex.hh"
#include "tiff.hh" #include "tiff.hh"
#include "utils.hh" #include "utils.hh"
@ -35,8 +29,9 @@
#include <QDir> #include <QDir>
#include <QRegularExpression> #include <QRegularExpression>
#include <QString> #include <QString>
#include <QStringBuilder>
#include <QThreadPool> #include <QThreadPool>
#include <QtConcurrent> #include <QtConcurrentRun>
namespace Mdx { namespace Mdx {
@ -218,10 +213,6 @@ public:
void deferredInit() override; void deferredInit() override;
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
@ -310,12 +301,7 @@ MdxDictionary::MdxDictionary( string const & id, string const & indexFile, vecto
{ {
// Read the dictionary's name // Read the dictionary's name
idx.seek( sizeof( idxHeader ) ); idx.seek( sizeof( idxHeader ) );
size_t len = idx.read< uint32_t >(); idx.readU32SizeAndData<>( dictionaryName );
vector< char > buf( len );
if ( len > 0 ) {
idx.read( &buf.front(), len );
dictionaryName = string( &buf.front(), len );
}
//fallback, use filename as dictionary name //fallback, use filename as dictionary name
if ( dictionaryName.empty() ) { if ( dictionaryName.empty() ) {
@ -324,12 +310,7 @@ MdxDictionary::MdxDictionary( string const & id, string const & indexFile, vecto
} }
// then read the dictionary's encoding // then read the dictionary's encoding
len = idx.read< uint32_t >(); idx.readU32SizeAndData<>( encoding );
if ( len > 0 ) {
buf.resize( len );
idx.read( &buf.front(), len );
encoding = string( &buf.front(), len );
}
dictFile.setFileName( QString::fromUtf8( dictionaryFiles[ 0 ].c_str() ) ); dictFile.setFileName( QString::fromUtf8( dictionaryFiles[ 0 ].c_str() ) );
dictFile.open( QIODevice::ReadOnly ); dictFile.open( QIODevice::ReadOnly );

View file

@ -13,18 +13,12 @@
#include "utf8.hh" #include "utf8.hh"
#include <map> #include <map>
#include <QAtomicInt> #include <QAtomicInt>
#include <QDir>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSemaphore>
#include <QString> #include <QString>
#include <set> #include <set>
#include <string> #include <string>
#include "utils.hh"
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
namespace Sdict { namespace Sdict {
@ -119,10 +113,6 @@ public:
~SdictDictionary(); ~SdictDictionary();
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
@ -196,11 +186,7 @@ SdictDictionary::SdictDictionary( string const & id,
// Read dictionary name // Read dictionary name
idx.seek( sizeof( idxHeader ) ); idx.seek( sizeof( idxHeader ) );
vector< char > dName( idx.read< uint32_t >() ); idx.readU32SizeAndData<>( dictionaryName );
if ( dName.size() > 0 ) {
idx.read( &dName.front(), dName.size() );
dictionaryName = string( &dName.front(), dName.size() );
}
// Initialize the index // Initialize the index

View file

@ -10,29 +10,22 @@
#include "utf8.hh" #include "utf8.hh"
#include "decompress.hh" #include "decompress.hh"
#include "langcoder.hh" #include "langcoder.hh"
#include "wstring_qt.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include "htmlescape.hh" #include "htmlescape.hh"
#include "filetype.hh" #include "filetype.hh"
#include "tiff.hh" #include "tiff.hh"
#include "utils.hh" #include "utils.hh"
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include "iconv.hh" #include "iconv.hh"
#include <QString> #include <QString>
#include <QStringBuilder>
#include <QFile> #include <QFile>
#include <QFileInfo> #include <QFileInfo>
#include <QDir> #include <QDir>
#include <QMap> #include <QMap>
#include <QProcess> #include <QProcess>
#include <QList> #include <QList>
#include <QtEndian>
#include <QRegularExpression> #include <QRegularExpression>
#include <string> #include <string>
#include <vector> #include <vector>
#include <utility> #include <utility>
@ -618,10 +611,6 @@ public:
~SlobDictionary(); ~SlobDictionary();
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {

View file

@ -61,7 +61,6 @@ bool indexIsOldOrBad( string const & indexFile )
class SoundDirDictionary: public BtreeIndexing::BtreeDictionary class SoundDirDictionary: public BtreeIndexing::BtreeDictionary
{ {
string name;
QMutex idxMutex; QMutex idxMutex;
File::Index idx; File::Index idx;
IdxHeader idxHeader; IdxHeader idxHeader;
@ -76,10 +75,6 @@ public:
vector< string > const & dictionaryFiles, vector< string > const & dictionaryFiles,
QString const & iconFilename_ ); QString const & iconFilename_ );
string getName() noexcept override
{
return name;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
@ -113,12 +108,13 @@ SoundDirDictionary::SoundDirDictionary( string const & id,
vector< string > const & dictionaryFiles, vector< string > const & dictionaryFiles,
QString const & iconFilename_ ): QString const & iconFilename_ ):
BtreeDictionary( id, dictionaryFiles ), BtreeDictionary( id, dictionaryFiles ),
name( name_ ),
idx( indexFile, QIODevice::ReadOnly ), idx( indexFile, QIODevice::ReadOnly ),
idxHeader( idx.read< IdxHeader >() ), idxHeader( idx.read< IdxHeader >() ),
chunks( idx, idxHeader.chunksOffset ), chunks( idx, idxHeader.chunksOffset ),
iconFilename( iconFilename_ ) iconFilename( iconFilename_ )
{ {
dictionaryName = name_;
// Initialize the index // Initialize the index
openIndex( IndexInfo( idxHeader.indexBtreeMaxElements, idxHeader.indexRootOffset ), idx, idxMutex ); openIndex( IndexInfo( idxHeader.indexBtreeMaxElements, idxHeader.indexRootOffset ), idx, idxMutex );

View file

@ -11,39 +11,30 @@
#include "htmlescape.hh" #include "htmlescape.hh"
#include "langcoder.hh" #include "langcoder.hh"
#include "gddebug.hh" #include "gddebug.hh"
#include "filetype.hh" #include "filetype.hh"
#include "indexedzip.hh" #include "indexedzip.hh"
#include "tiff.hh" #include "tiff.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include "audiolink.hh" #include "audiolink.hh"
#include <zlib.h> #include <zlib.h>
#include <map> #include <map>
#include <set> #include <set>
#include <string> #include <string>
#include <QString>
#include <QAtomicInt>
#include <QDomDocument>
#include "ufile.hh"
#include "utils.hh"
#include <QRegularExpression>
#include "globalregex.hh"
#include <QDir>
#include <stdlib.h>
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
#include <arpa/inet.h> #include <arpa/inet.h>
#else #else
#include <winsock.h> #include <winsock.h>
#endif #endif
#include <stdlib.h>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include <QString>
#include <QSemaphore>
#include <QAtomicInt>
#include <QStringList>
#include <QDomDocument>
#include "ufile.hh"
#include "utils.hh"
#include <QRegularExpression>
#include "globalregex.hh"
namespace Stardict { namespace Stardict {
@ -131,7 +122,6 @@ class StardictDictionary: public BtreeIndexing::BtreeDictionary
QMutex idxMutex; QMutex idxMutex;
File::Index idx; File::Index idx;
IdxHeader idxHeader; IdxHeader idxHeader;
string bookName;
string sameTypeSequence; string sameTypeSequence;
ChunkedStorage::Reader chunks; ChunkedStorage::Reader chunks;
QMutex dzMutex; QMutex dzMutex;
@ -145,17 +135,6 @@ public:
~StardictDictionary(); ~StardictDictionary();
string getName() noexcept override
{
return bookName;
}
void setName( string _name ) noexcept override
{
bookName = _name;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {
return map< Dictionary::Property, string >(); return map< Dictionary::Property, string >();
@ -239,10 +218,10 @@ StardictDictionary::StardictDictionary( string const & id,
BtreeDictionary( id, dictionaryFiles ), BtreeDictionary( id, dictionaryFiles ),
idx( indexFile, QIODevice::ReadOnly ), idx( indexFile, QIODevice::ReadOnly ),
idxHeader( idx.read< IdxHeader >() ), idxHeader( idx.read< IdxHeader >() ),
bookName( loadString( idxHeader.bookNameSize ) ),
sameTypeSequence( loadString( idxHeader.sameTypeSequenceSize ) ), sameTypeSequence( loadString( idxHeader.sameTypeSequenceSize ) ),
chunks( idx, idxHeader.chunksOffset ) chunks( idx, idxHeader.chunksOffset )
{ {
dictionaryName = loadString( idxHeader.bookNameSize );
// Open the .dict file // Open the .dict file
DZ_ERRORS error; DZ_ERRORS error;

View file

@ -0,0 +1 @@
Translit

View file

@ -1,7 +1,7 @@
/* This file is (c) 2013 Maksim Tamkovicz <quendimax@gmail.com> /* This file is (c) 2013 Maksim Tamkovicz <quendimax@gmail.com>
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#include "belarusiantranslit.hh" #include "belarusian.hh"
#include "transliteration.hh" #include "transliteration.hh"
#include <QCoreApplication> #include <QCoreApplication>

View file

@ -3,7 +3,6 @@
#pragma once #pragma once
#include <vector>
#include "dictionary.hh" #include "dictionary.hh"
// Support for Belarusian transliteration // Support for Belarusian transliteration

View file

@ -4,16 +4,13 @@
#include "chinese.hh" #include "chinese.hh"
#include <stdexcept> #include <stdexcept>
#include <QCoreApplication> #include <QCoreApplication>
// #ifdef Q_OS_MAC
#include <opencc/opencc.h> #include <opencc/opencc.h>
// #endif
// #include <opencc/SimpleConverter.hpp>
#include "folding.hh" #include "folding.hh"
#include "gddebug.hh" #include "gddebug.hh"
#include "transliteration.hh" #include "transliteration.hh"
#include "utf8.hh" #include "utf8.hh"
namespace Chinese { namespace ChineseTranslit {
class CharacterConversionDictionary: public Transliteration::BaseTransliterationDictionary class CharacterConversionDictionary: public Transliteration::BaseTransliterationDictionary
{ {
@ -162,4 +159,4 @@ std::vector< sptr< Dictionary::Class > > makeDictionaries( Config::Chinese const
return result; return result;
} }
} // namespace Chinese } // namespace ChineseTranslit

View file

@ -3,12 +3,10 @@
#pragma once #pragma once
#include <map>
#include "config.hh"
#include "dictionary.hh" #include "dictionary.hh"
/// Chinese character conversion support. /// Chinese character conversion support.
namespace Chinese { namespace ChineseTranslit {
std::vector< sptr< Dictionary::Class > > makeDictionaries( Config::Chinese const & ); std::vector< sptr< Dictionary::Class > > makeDictionaries( Config::Chinese const & );
} }

View file

@ -1,4 +1,4 @@
#include "customtransliteration.hh" #include "custom.hh"
#include "dictionary.hh" #include "dictionary.hh"
#include <QCoreApplication> #include <QCoreApplication>

View file

@ -1,7 +1,6 @@
#pragma once #pragma once
#include <vector>
#include "transliteration.hh" #include "transliteration.hh"
// Support for Belarusian transliteration // Support for Belarusian transliteration

View file

@ -1,7 +1,7 @@
/* This file is (c) 2010 Jennie Petoumenou <epetoumenou@gmail.com> /* This file is (c) 2010 Jennie Petoumenou <epetoumenou@gmail.com>
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#include "greektranslit.hh" #include "greek.hh"
#include "transliteration.hh" #include "transliteration.hh"
#include <QCoreApplication> #include <QCoreApplication>

View file

@ -1,7 +1,9 @@
#include "romaji.hh" #include "romaji.hh"
#include <QCoreApplication> #include <QCoreApplication>
namespace Romaji { namespace RomajiTranslit {
using std::vector;
class HepburnHiragana: public Transliteration::Table class HepburnHiragana: public Transliteration::Table
{ {
@ -375,4 +377,4 @@ vector< sptr< Dictionary::Class > > makeDictionaries( Config::Romaji const & r )
return result; return result;
} }
} // namespace Romaji } // namespace RomajiTranslit

View file

@ -4,12 +4,9 @@
#pragma once #pragma once
#include "transliteration.hh" #include "transliteration.hh"
#include "config.hh"
/// Japanese romanization (Romaji) support. /// Japanese romanization (Romaji) support.
namespace Romaji { namespace RomajiTranslit {
using std::vector; std::vector< sptr< Dictionary::Class > > makeDictionaries( Config::Romaji const & );
} // namespace RomajiTranslit
vector< sptr< Dictionary::Class > > makeDictionaries( Config::Romaji const & );
} // namespace Romaji

View file

@ -1,7 +1,7 @@
/* This file is (c) 2008-2012 Konstantin Isakov <ikm@goldendict.org> /* This file is (c) 2008-2012 Konstantin Isakov <ikm@goldendict.org>
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#include "russiantranslit.hh" #include "russian.hh"
#include "transliteration.hh" #include "transliteration.hh"
#include <QCoreApplication> #include <QCoreApplication>

View file

@ -81,6 +81,18 @@ public:
/// Like the above, but uses its own local internal buffer and strips newlines by default. /// Like the above, but uses its own local internal buffer and strips newlines by default.
std::string gets( bool stripNl = true ); std::string gets( bool stripNl = true );
/// Read 32bit as uint, then reading the subsequent data into a container
template< typename T >
void readU32SizeAndData( T & container )
{
uint32_t size = 0;
read( &size, sizeof( uint32_t ) );
if ( size > 0 ) {
container.resize( size );
read( container.data(), size );
}
};
/// export QFile::readall /// export QFile::readall
QByteArray readall(); QByteArray readall();

View file

@ -22,7 +22,6 @@ namespace {
class WebSiteDictionary: public Dictionary::Class class WebSiteDictionary: public Dictionary::Class
{ {
string name;
QByteArray urlTemplate; QByteArray urlTemplate;
bool experimentalIframe; bool experimentalIframe;
QString iconFilename; QString iconFilename;
@ -38,12 +37,13 @@ public:
bool inside_iframe_, bool inside_iframe_,
QNetworkAccessManager & netMgr_ ): QNetworkAccessManager & netMgr_ ):
Dictionary::Class( id, vector< string >() ), Dictionary::Class( id, vector< string >() ),
name( name_ ),
iconFilename( iconFilename_ ), iconFilename( iconFilename_ ),
inside_iframe( inside_iframe_ ), inside_iframe( inside_iframe_ ),
netMgr( netMgr_ ), netMgr( netMgr_ ),
experimentalIframe( false ) experimentalIframe( false )
{ {
dictionaryName = name_;
if ( urlTemplate_.startsWith( "http://" ) || urlTemplate_.startsWith( "https://" ) ) { if ( urlTemplate_.startsWith( "http://" ) || urlTemplate_.startsWith( "https://" ) ) {
experimentalIframe = true; experimentalIframe = true;
} }
@ -53,10 +53,6 @@ public:
dictionaryDescription = urlTemplate_; dictionaryDescription = urlTemplate_;
} }
string getName() noexcept override
{
return name;
}
map< Property, string > getProperties() noexcept override map< Property, string > getProperties() noexcept override
{ {
@ -478,7 +474,8 @@ void WebSiteDictionary::loadIcon() noexcept
loadIconFromFile( fInfo.absoluteFilePath(), true ); loadIconFromFile( fInfo.absoluteFilePath(), true );
} }
} }
if ( dictionaryIcon.isNull() && !loadIconFromText( ":/icons/webdict.svg", QString::fromStdString( name ) ) ) { if ( dictionaryIcon.isNull()
&& !loadIconFromText( ":/icons/webdict.svg", QString::fromStdString( dictionaryName ) ) ) {
dictionaryIcon = QIcon( ":/icons/webdict.svg" ); dictionaryIcon = QIcon( ":/icons/webdict.svg" );
} }
dictionaryIconLoaded = true; dictionaryIconLoaded = true;

View file

@ -8,7 +8,6 @@
#include "chunkedstorage.hh" #include "chunkedstorage.hh"
#include "dictzip.hh" #include "dictzip.hh"
#include "htmlescape.hh" #include "htmlescape.hh"
#include <map> #include <map>
#include <set> #include <set>
#include <string> #include <string>
@ -17,29 +16,19 @@
#include <wctype.h> #include <wctype.h>
#include <stdlib.h> #include <stdlib.h>
#include "gddebug.hh" #include "gddebug.hh"
#include "wstring_qt.hh"
#include "xdxf2html.hh" #include "xdxf2html.hh"
#include "ufile.hh" #include "ufile.hh"
#include "dictzip.hh"
#include "langcoder.hh" #include "langcoder.hh"
#include "indexedzip.hh" #include "indexedzip.hh"
#include "filetype.hh" #include "filetype.hh"
#include "tiff.hh" #include "tiff.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include <QIODevice> #include <QIODevice>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QTextDocument>
#include <QFileInfo> #include <QFileInfo>
#include <QDir> #include <QDir>
#include <QPainter> #include <QPainter>
#include <QRegularExpression> #include <QRegularExpression>
#include <QSemaphore>
#include <QThreadPool>
#include <QAtomicInt> #include <QAtomicInt>
#include "utils.hh" #include "utils.hh"
@ -152,10 +141,6 @@ public:
~XdxfDictionary(); ~XdxfDictionary();
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {

View file

@ -5,7 +5,6 @@
#include "zim.hh" #include "zim.hh"
#include "btreeidx.hh" #include "btreeidx.hh"
#include "folding.hh" #include "folding.hh"
#include "gddebug.hh" #include "gddebug.hh"
#include "utf8.hh" #include "utf8.hh"
@ -17,24 +16,18 @@
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include "htmlescape.hh" #include "htmlescape.hh"
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include <QByteArray> #include <QByteArray>
#include <QFile> #include <QFile>
#include <QString> #include <QString>
#include <QAtomicInt> #include <QAtomicInt>
#include <QImage> #include <QImage>
#include <QDir> #include <QDir>
#include <QRegularExpression> #include <QRegularExpression>
#include <string> #include <string>
#include <set> #include <set>
#include <map> #include <map>
#include <algorithm> #include <algorithm>
#include <QtConcurrent> #include <QtConcurrentRun>
#include <utility> #include <utility>
#include "globalregex.hh" #include "globalregex.hh"
#include <zim/zim.h> #include <zim/zim.h>
@ -168,10 +161,6 @@ public:
~ZimDictionary() = default; ~ZimDictionary() = default;
string getName() noexcept override
{
return dictionaryName;
}
map< Dictionary::Property, string > getProperties() noexcept override map< Dictionary::Property, string > getProperties() noexcept override
{ {

View file

@ -19,9 +19,6 @@
#include <QFile> #include <QFile>
#include <QDir> #include <QDir>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
#include "utils.hh" #include "utils.hh"

View file

@ -2,8 +2,7 @@
#include <QString> #include <QString>
#include <QList> #include <QList>
#include <QtConcurrent> #include <QtConcurrentRun>
#include "dict/dictionary.hh" #include "dict/dictionary.hh"
#include "btreeidx.hh" #include "btreeidx.hh"
#include "fulltextsearch.hh" #include "fulltextsearch.hh"

View file

@ -1,14 +1,14 @@
/* This file is (c) 2014 Abs62 /* This file is (c) 2014 Abs62
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */ * Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#include "fulltextsearch.hh"
#include "ftshelpers.hh" #include "ftshelpers.hh"
#include "fulltextsearch.hh"
#include "gddebug.hh" #include "gddebug.hh"
#include "help.hh"
#include <QThreadPool>
#include <QMessageBox>
#include "globalregex.hh" #include "globalregex.hh"
#include "help.hh"
#include <QFutureSynchronizer>
#include <QMessageBox>
#include <QThreadPool>
namespace FTS { namespace FTS {

View file

@ -1,19 +1,10 @@
#pragma once #pragma once
#include <QAbstractListModel>
#include <QAction>
#include <QList>
#include <QTimer> #include <QTimer>
#include <QThread>
#include <QRunnable> #include <QRunnable>
#include <QSemaphore> #include <QSemaphore>
#include <QStringList>
#include <QRegularExpression>
#include "dict/dictionary.hh" #include "dict/dictionary.hh"
#include "ui_fulltextsearch.h" #include "ui_fulltextsearch.h"
#include "config.hh" #include "config.hh"
#include "instances.hh" #include "instances.hh"
#include "delegate.hh" #include "delegate.hh"

View file

@ -9,9 +9,6 @@
#include <QLocale> #include <QLocale>
#include <QRegularExpression> #include <QRegularExpression>
#ifdef _MSC_VER
#include <stub_msvc.h>
#endif
// Language codes // Language codes
QMap< QString, GDLangCode > LangCoder::LANG_CODE_MAP = { QMap< QString, GDLangCode > LangCoder::LANG_CODE_MAP = {
@ -231,10 +228,10 @@ QString LangCoder::intToCode2( quint32 val )
quint32 LangCoder::findIdForLanguage( gd::wstring const & lang ) quint32 LangCoder::findIdForLanguage( gd::wstring const & lang )
{ {
const auto langFolded = Utf8::encode( lang ); const auto langFolded = QByteArrayView( Utf8::encode( lang ) );
for ( auto const & lc : LANG_CODE_MAP ) { for ( auto const & lc : LANG_CODE_MAP ) {
if ( strcasecmp( langFolded.c_str(), lc.lang.c_str() ) == 0 ) { if ( langFolded.compare( lc.lang, Qt::CaseInsensitive ) == 0 ) {
return code2toInt( lc.code2.toStdString().c_str() ); return code2toInt( lc.code2.toStdString().c_str() );
} }
} }

View file

@ -204,26 +204,11 @@ void EditDictionaries::acceptChangedSources( bool rebuildGroups )
// Those hold pointers to dictionaries, we need to free them. // Those hold pointers to dictionaries, we need to free them.
groupInstances.clear(); groupInstances.clear();
groups.clear();
orderAndProps.clear();
loadDictionaries( this, cfg, dictionaries, dictNetMgr ); loadDictionaries( this, cfg, dictionaries, dictNetMgr );
Instances::updateNames( savedGroups, dictionaries );
Instances::updateNames( savedOrder, dictionaries );
Instances::updateNames( savedInactive, dictionaries );
if ( rebuildGroups ) { if ( rebuildGroups ) {
ui.tabs->removeTab( 1 ); orderAndProps->rebuild( savedOrder, savedInactive, dictionaries );
ui.tabs->removeTab( 1 ); groups->rebuild( dictionaries, savedGroups, orderAndProps->getCurrentDictionaryOrder() );
orderAndProps = new OrderAndProps( this, savedOrder, savedInactive, dictionaries );
groups = new Groups( this, dictionaries, savedGroups, orderAndProps->getCurrentDictionaryOrder() );
ui.tabs->insertTab( 1, orderAndProps, QIcon( ":/icons/book.svg" ), tr( "&Dictionaries" ) );
ui.tabs->insertTab( 2, groups, QIcon( ":/icons/bookcase.svg" ), tr( "&Groups" ) );
connect( groups, &Groups::showDictionaryInfo, this, &EditDictionaries::showDictionaryInfo );
connect( orderAndProps, &OrderAndProps::showDictionaryHeadwords, this, &EditDictionaries::showDictionaryHeadwords );
} }
setUpdatesEnabled( true ); setUpdatesEnabled( true );
} }

View file

@ -64,6 +64,24 @@ Groups::Groups( QWidget * parent,
countChanged(); countChanged();
} }
void Groups::rebuild( vector< sptr< Dictionary::Class > > const & dicts_,
Config::Groups const & groups_,
Config::Group const & order )
{
this->setUpdatesEnabled( false );
dicts = dicts_;
groups = groups_;
ui.dictionaries->setAsSource();
ui.dictionaries->populate( Instances::Group( order, dicts, Config::Group() ).dictionaries, dicts );
// Populate groups' widget
ui.groups->populate( groups, dicts, ui.dictionaries->getCurrentDictionaries() );
countChanged();
this->setUpdatesEnabled( true );
}
void Groups::editGroup( unsigned id ) void Groups::editGroup( unsigned id )
{ {
for ( int x = 0; x < groups.size(); ++x ) { for ( int x = 0; x < groups.size(); ++x ) {

View file

@ -18,7 +18,9 @@ public:
std::vector< sptr< Dictionary::Class > > const &, std::vector< sptr< Dictionary::Class > > const &,
Config::Groups const &, Config::Groups const &,
Config::Group const & order ); Config::Group const & order );
void rebuild( std::vector< sptr< Dictionary::Class > > const & dicts_,
Config::Groups const & groups_,
Config::Group const & order );
/// Instructs the dialog to position itself on editing the given group. /// Instructs the dialog to position itself on editing the given group.
void editGroup( unsigned id ); void editGroup( unsigned id );
@ -31,7 +33,7 @@ public:
private: private:
Ui::Groups ui; Ui::Groups ui;
std::vector< sptr< Dictionary::Class > > const & dicts; std::vector< sptr< Dictionary::Class > > dicts;
Config::Groups groups; Config::Groups groups;
QToolButton * groupsListButton; QToolButton * groupsListButton;

View file

@ -133,6 +133,25 @@ OrderAndProps::OrderAndProps( QWidget * parent,
showDictNumbers(); showDictNumbers();
} }
void OrderAndProps::rebuild( Config::Group const & dictionaryOrder,
Config::Group const & inactiveDictionaries,
std::vector< sptr< Dictionary::Class > > const & allDictionaries )
{
Instances::Group order( dictionaryOrder, allDictionaries, Config::Group() );
Instances::Group inactive( inactiveDictionaries, allDictionaries, Config::Group() );
Instances::complementDictionaryOrder( order, inactive, allDictionaries );
setUpdatesEnabled( false );
ui.dictionaryOrder->populate( order.dictionaries, allDictionaries );
ui.inactiveDictionaries->populate( inactive.dictionaries, allDictionaries );
disableDictionaryDescription();
showDictNumbers();
setUpdatesEnabled( true );
}
Config::Group OrderAndProps::getCurrentDictionaryOrder() const Config::Group OrderAndProps::getCurrentDictionaryOrder() const
{ {
Instances::Group g; Instances::Group g;

View file

@ -17,7 +17,9 @@ public:
Config::Group const & dictionaryOrder, Config::Group const & dictionaryOrder,
Config::Group const & inactiveDictionaries, Config::Group const & inactiveDictionaries,
std::vector< sptr< Dictionary::Class > > const & allDictionaries ); std::vector< sptr< Dictionary::Class > > const & allDictionaries );
void rebuild( Config::Group const & dictionaryOrder,
Config::Group const & inactiveDictionaries,
std::vector< sptr< Dictionary::Class > > const & allDictionaries );
Config::Group getCurrentDictionaryOrder() const; Config::Group getCurrentDictionaryOrder() const;
Config::Group getCurrentInactiveDictionaries() const; Config::Group getCurrentInactiveDictionaries() const;

View file

@ -1,17 +0,0 @@
#pragma once
#include <string>
#ifdef _MSC_VER
#if !defined(strcasecmp)
# define strcasecmp _strcmpi
#endif
#if !defined(strncasecmp)
# define strncasecmp _strnicmp
#endif
#ifndef _SSIZE_T
#define _SSIZE_T
#define ssize_t long
#endif
#endif