Compare commits

..

1 commit

Author SHA1 Message Date
xiaoyifang a51b590f86
Merge 3c5233f2a1 into fa9ad2fdf7 2024-11-20 00:14:54 -08:00
50 changed files with 393 additions and 119 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -11,6 +11,12 @@
#include "dict/sounddir.hh"
#include "dict/hunspell.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/forvo.hh"
#include "dict/programs.hh"
@ -28,19 +34,12 @@
#include "dict/lingualibre.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
#include "dict/epwing.hh"
#endif
#ifdef MAKE_CHINESE_CONVERSION_SUPPORT
#include "dict/transliteration/chinese.hh"
#include "dict/chinese.hh"
#endif
#include <QMessageBox>
@ -244,10 +243,10 @@ void loadDictionaries( QWidget * parent,
///// We create transliterations synchronously since they are very simple
#ifdef MAKE_CHINESE_CONVERSION_SUPPORT
addDicts( ChineseTranslit::makeDictionaries( cfg.transliteration.chinese ) );
addDicts( Chinese::makeDictionaries( cfg.transliteration.chinese ) );
#endif
addDicts( RomajiTranslit::makeDictionaries( cfg.transliteration.romaji ) );
addDicts( Romaji::makeDictionaries( cfg.transliteration.romaji ) );
addDicts( CustomTranslit::makeDictionaries( cfg.transliteration.customTrans ) );
// Make Russian transliteration

View file

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

View file

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

View file

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

View file

@ -4,9 +4,12 @@
#pragma once
#include "transliteration.hh"
#include "config.hh"
/// Japanese romanization (Romaji) support.
namespace RomajiTranslit {
namespace Romaji {
std::vector< sptr< Dictionary::Class > > makeDictionaries( Config::Romaji const & );
} // namespace RomajiTranslit
using std::vector;
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>
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#include "russian.hh"
#include "russiantranslit.hh"
#include "transliteration.hh"
#include <QCoreApplication>

View file

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

View file

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

View file

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

View file

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

View file

@ -1 +0,0 @@
Translit

View file

@ -81,18 +81,6 @@ public:
/// Like the above, but uses its own local internal buffer and strips newlines by default.
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
QByteArray readall();

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

17
src/windows/stub_msvc.h Normal file
View file

@ -0,0 +1,17 @@
#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