mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-23 16:04:06 +00:00
Compare commits
18 commits
a51b590f86
...
cc070a46ef
Author | SHA1 | Date | |
---|---|---|---|
cc070a46ef | |||
0680edd1e9 | |||
d3700f2926 | |||
f2ce85cda2 | |||
9c46e5c317 | |||
5b9a1611ff | |||
112874b0e3 | |||
3c5233f2a1 | |||
c5ca1b7d63 | |||
5092ebe2ee | |||
5bef4cef22 | |||
59d01868da | |||
10b0496cce | |||
1cf495e7dd | |||
c2fc90801b | |||
2de2141758 | |||
db4c352d6c | |||
7c32cad65a |
|
@ -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>
|
||||||
|
|
|
@ -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 )
|
||||||
|
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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;
|
||||||
|
|
1
src/dict/transliteration/README.md
Normal file
1
src/dict/transliteration/README.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Translit
|
|
@ -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>
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include "dictionary.hh"
|
#include "dictionary.hh"
|
||||||
|
|
||||||
// Support for Belarusian transliteration
|
// Support for Belarusian transliteration
|
|
@ -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
|
|
@ -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 & );
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
#include "customtransliteration.hh"
|
#include "custom.hh"
|
||||||
#include "dictionary.hh"
|
#include "dictionary.hh"
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include "transliteration.hh"
|
#include "transliteration.hh"
|
||||||
|
|
||||||
// Support for Belarusian transliteration
|
// Support for Belarusian transliteration
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
|
@ -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>
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 ) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
Loading…
Reference in a new issue