diff --git a/Common/3dParty/html/css/src/CNode.cpp b/Common/3dParty/html/css/src/CNode.cpp
index 8073a6266e..2799e375c3 100644
--- a/Common/3dParty/html/css/src/CNode.cpp
+++ b/Common/3dParty/html/css/src/CNode.cpp
@@ -14,6 +14,15 @@ namespace NSCSS
return m_wsName.empty() && m_wsClass.empty() && m_wsId.empty() && m_wsStyle.empty();
}
+ void CNode::Clear()
+ {
+ m_wsName .clear();
+ m_wsClass .clear();
+ m_wsId .clear();
+ m_wsStyle .clear();
+ m_mAttributes.clear();
+ }
+
std::vector CNode::GetData() const
{
std::vector arValues;
diff --git a/Common/3dParty/html/css/src/CNode.h b/Common/3dParty/html/css/src/CNode.h
index 57409a67a5..d8f6d8e4f0 100644
--- a/Common/3dParty/html/css/src/CNode.h
+++ b/Common/3dParty/html/css/src/CNode.h
@@ -22,6 +22,8 @@ namespace NSCSS
bool Empty() const;
+ void Clear();
+
std::vector GetData() const;
bool operator< (const CNode& oNode) const;
bool operator== (const CNode& oNode) const;
diff --git a/Common/3dParty/html/css/src/ConstValues.cpp b/Common/3dParty/html/css/src/ConstValues.cpp
index 56f1b28f79..edef26c42e 100644
--- a/Common/3dParty/html/css/src/ConstValues.cpp
+++ b/Common/3dParty/html/css/src/ConstValues.cpp
@@ -7,12 +7,18 @@ namespace NSCSS
return sValue < oStatistickElement.sValue;
}
+ void CTree::Clear()
+ {
+ m_arrChild.clear();
+ m_oNode.Clear();
+ }
+
void CTree::CountingNumberRepetitions(const CTree &oTree, std::map &mStatictics)
{
if (!oTree.m_oNode.m_wsId.empty())
++mStatictics[StatistickElement{StatistickElement::IsId, L'#' + oTree.m_oNode.m_wsId}];
- if (!oTree.m_oNode.m_wsStyle.empty())
- ++mStatictics[StatistickElement{StatistickElement::IsStyle, oTree.m_oNode.m_wsStyle}];
+ if (!oTree.m_oNode.m_wsStyle.empty())
+ ++mStatictics[StatistickElement{StatistickElement::IsStyle, oTree.m_oNode.m_wsStyle}];
if (!oTree.m_arrChild.empty())
for (const CTree& oChildren : oTree.m_arrChild)
@@ -82,7 +88,7 @@ namespace NSCSS
{L"gainsboro", L"DCDCDC"}, {L"lightgray", L"D3D3D3"}, {L"silver", L"C0C0C0"},
{L"darkgray", L"A9A9A9"}, {L"gray", L"808080"}, {L"dimgray", L"696969"},
{L"lightslategray", L"778899"}, {L"slategray", L"708090"}, {L"darkslategray", L"2F4F4F"},
- {L"black", L"000000"},
+ {L"black", L"000000"}, {L"grey", L"808080"},
/* Outdated */
{L"windowtext", L"000000"}, {L"transparent", L"000000"}
};
diff --git a/Common/3dParty/html/css/src/ConstValues.h b/Common/3dParty/html/css/src/ConstValues.h
index 4e7f8ab9fe..2bc546b54d 100644
--- a/Common/3dParty/html/css/src/ConstValues.h
+++ b/Common/3dParty/html/css/src/ConstValues.h
@@ -33,6 +33,8 @@ namespace NSCSS
NSCSS::CNode m_oNode;
std::vector m_arrChild;
+ void Clear();
+
static void CountingNumberRepetitions(const CTree &oTree, std::map &mStatictics);
};
diff --git a/Common/3dParty/html/css/src/StyleProperties.cpp b/Common/3dParty/html/css/src/StyleProperties.cpp
index 4874c22a7a..fcfc62b0e3 100644
--- a/Common/3dParty/html/css/src/StyleProperties.cpp
+++ b/Common/3dParty/html/css/src/StyleProperties.cpp
@@ -614,11 +614,11 @@ namespace NSCSS
void CColor::SetHEX(const std::wstring &wsValue)
{
- Clear();
-
if (6 != wsValue.length() && 3 != wsValue.length())
return;
+ Clear();
+
if (6 == wsValue.length())
m_oValue = new std::wstring(wsValue);
else
@@ -632,8 +632,6 @@ namespace NSCSS
void CColor::SetUrl(const std::wstring &wsValue)
{
- Clear();
-
if (wsValue.empty())
return;
@@ -648,6 +646,8 @@ namespace NSCSS
return;
}
+ Clear();
+
m_oValue = pURL;
m_enType = ColorUrl;
}
@@ -659,6 +659,16 @@ namespace NSCSS
m_enType = ColorNone;
}
+ char NormalizeNegativeColorValue(INT nValue)
+ {
+ if (nValue > 255)
+ return 0xff;
+ else if (nValue < 0)
+ return (char)(std::abs(nValue) % 255);
+
+ return (char)nValue;
+ }
+
bool CColor::SetValue(const std::wstring &wsValue, unsigned int unLevel, bool bHardMode)
{
if ((CHECK_CONDITIONS && !bHardMode) || (wsValue.empty() && unLevel == m_unLevel))
@@ -692,6 +702,16 @@ namespace NSCSS
SetNone();
bResult = true;
}
+ else if (L"context-stroke" == wsNewValue)
+ {
+ Clear();
+ m_enType = ColorContextStroke;
+ }
+ else if (L"context-fill" == wsNewValue)
+ {
+ Clear();
+ m_enType = ColorContextFill;
+ }
else if (10 <= wsNewValue.length() && wsNewValue.substr(0, 3) == L"rgb")
{
size_t unEnd = wsNewValue.find(L')', 4);
@@ -704,29 +724,18 @@ namespace NSCSS
if (3 > arValues.size())
return false;
- INT nRed = std::ceil(NS_STATIC_FUNCTIONS::CalculatePersentage(arValues[0], 255));
- INT nGreen = std::ceil(NS_STATIC_FUNCTIONS::CalculatePersentage(arValues[1], 255));
- INT nBlue = std::ceil(NS_STATIC_FUNCTIONS::CalculatePersentage(arValues[2], 255));
+ const char chRed = NormalizeNegativeColorValue(std::ceil(NS_STATIC_FUNCTIONS::CalculatePersentage(arValues[0], 255)));
+ const char chGreen = NormalizeNegativeColorValue(std::ceil(NS_STATIC_FUNCTIONS::CalculatePersentage(arValues[1], 255)));
+ const char chBlue = NormalizeNegativeColorValue(std::ceil(NS_STATIC_FUNCTIONS::CalculatePersentage(arValues[2], 255)));
- if (nRed < 0 || nGreen < 0 || nBlue < 0)
- {
- SetEmpty(unLevel);
- return false;
- }
-
- if (255 < nRed) nRed = 255;
- if (255 < nGreen) nGreen = 255;
- if (255 < nBlue) nBlue = 255;
-
- SetRGB(nRed, nGreen, nBlue);
+ SetRGB(chRed, chGreen, chBlue);
if (wsNewValue.substr(0, 4) == L"rgba" && 4 == arValues.size())
m_oOpacity.SetValue(arValues[3], unLevel, bHardMode);
bResult = true;
}
-
- if (5 <= wsNewValue.length())
+ else if (5 <= wsNewValue.length())
{
SetUrl(wsValue);
diff --git a/Common/3dParty/html/css/src/StyleProperties.h b/Common/3dParty/html/css/src/StyleProperties.h
index b8a9e20d0a..91a9afb2f9 100644
--- a/Common/3dParty/html/css/src/StyleProperties.h
+++ b/Common/3dParty/html/css/src/StyleProperties.h
@@ -215,7 +215,9 @@ namespace NSCSS
ColorNone,
ColorRGB,
ColorHEX,
- ColorUrl
+ ColorUrl,
+ ColorContextStroke,
+ ColorContextFill
} ColorType;
class CColor : public CValue
diff --git a/Common/3dParty/hunspell/test/dst/az_Latn_AZ.txt b/Common/3dParty/hunspell/test/dst/az_Latn_AZ.txt
deleted file mode 100644
index 5365bb7974..0000000000
--- a/Common/3dParty/hunspell/test/dst/az_Latn_AZ.txt
+++ /dev/null
@@ -1,213 +0,0 @@
-A [Ü, Ha, Ağ, Ac, Ad, Da, Fa, Ah, Ka, Al, An, Na, Qa]
-qocalmaq [almayacaq, almamaq]
-Alderaan'ın [Federasiyanın]
-hamısı
-həmçinin
-Və
-cavab
-dir
-incəsənət
-kimi
-da
-uzaq
-körpə
-zirzəmi [zəmində]
-ol
-olub
-doğuldu [doğulduğu, doğurduğu]
-bulvar [bunlar]
-fasilə
-nəsllər [nəsillər, nəsnələri, nəslə, nələrlə, səslər]
-gəlin
-lakin
-al
-ilə
-Kaliforniya [Kanalizasiya]
-Kalifornikasiya [Kommunikasiya]
-bilər
-kartlar
-şans
-Çin
-çənə [dənə, çəkə, mənə, nənə, sənə, tənə, çənəyə]
-klublar
-Cobain []
-bürc [borc, gürcü]
-nəzarət
-qiymət
-edə bilməzdim [bilməzdim]
-yaratmaq
-lənət
-rəqs
-saziş
-sövdələşmələr [məsləhətləşmələr]
-dağıdıcı
-almazlar [almanlar, almaz lar, almaz-lar, almaları, marallar, mallara]
-etməz
-etməyərik [etmərik, etmədikləri]
-arzu
-xülyalar [yalanlar]
-Şərq
-kənar
-kənarları [kənar ları, kənar-ları, kənarına, kənarında, kəlamları, aparılarkən]
-məmnunluq
-hamının
-uzaq
-peri [şeri, geri, meri, yeri]
-solğun [dolğun]
-üz
-son
-tap
-ilk
-üçün
--dan [-dam, -da, -an, -dana, -adan, -nda, -daş, -dən, -dağ, -can, -dad, -din, -lan, -don, -qan, adan, andan]
-sərhəd
-qız
-qızın
-yaxşı
-gitara [artaraq]
-əl
-hardcore [hardadır]
-var
-yoxdur
-o [od, ol, on, ot, ov, ox, ü, ı]
-eşitmək
-ürək
-O'nun [Onun, Oyununu]
-ona
-gizli
-yüksək
-ona
-onun
-Hollivud [Holland]
-Mən
-Mənəm
-əgər
-içində
-məlumat
-içində
-dir
-bu
-jack [janra]
-sadəcə
-kral
-qohum
-bilmək
-qoyulmuş
-qanun
-yerləşdirilmək [yerləşdirilməsi, yerləşdirilmiş, yerləşdirilib, yerləşdirildiyini]
-qurğuşun [quruluşunun]
-aparmaq
-yerləşdirilmə [yerləşdirilməsi, yerləşdirilmiş, yerləşdirilib, yerləşdirildiyini]
-məkan
-sevmək
-şans
-edilmiş
-adam
-çox
-Evlənmək
-maska [masa, marka]
-o bilər [bilərlər, bilər]
-bəlkə də [bəlkə]
-mənası
-mən
-meditasiya [dissertasiya]
-xatirə
-ağılın
-pul
-mənim
-heç vaxt [vaxtsa]
-deyil
-heç nə [heçə]
-nömrələr [nömrələri, nömrə lər, nömrə-lər, nömrəli, nömrə]
-of [od, əf, ol, on, ot, ov, ox, ofis]
-of [od, əf, ol, on, ot, ov, ox, ofis]
-üstündə
-bir
-yalnız
-və ya [vəla]
-nəticə
-öz
-Ödə [Də, Ədə, Adə, Edə, Idə, Öndə, Ölə, Önə]
-Şəftəli [Həftəlik]
-yerlər
-oynayır
-oynamaq
-əhali
-porno [sponsor]
-tərifləmək [təriflər, təklifləri, təkliflərlə, təkliflərə]
-ehtimal ki [ehtimal]
-ehtimal
-psixik [psixi, psixoloji]
-kraliça [kralı]
-qaldırmaq
-qalan
-hörmət
-qalxmaq
-yol
-xam
-müqəddəs
-Xilas et [Xilası]
-elmi
-çığırmaq [çağırmaq, çıxarmaq]
-satılır
-şəkil
-xəstələnmək [xəstələnməyi, dəstəklənməsi]
-gümüşçü [gümüş]
-dəri
-əsgər
-bir şey [şeydir]
-Mahnı
-mahnılar
-qılınclar [qılınc lar, qılınc-lar, qılıncı]
-büyü [böyüyü]
-casuslar [ruslar]
-ulduz
-Stansiya
-oğurlamaq [vurğulamaq]
-daşlar
-günəş
-şübhəli
-İsveç
-qılınclar [qılınc lar, qılınc-lar, qılıncı]
-yeniyetmə
-test
-dandan [andan, candan, qandan, yandan, danışanda, adından, yanından, canından]
-bu ki [builki]
-bu ki [builki]
-bu
-onların
-bu
-onlar
-düşünmək
-bu
-onlar
-gel-git [get-gedə]
-üçün
-deyilmişəm [deyilmiş əm, deyilmiş-əm, deyilmişdi, deyilmiş, deyilmi, deyiləm]
-çox
-cəhd et [cəhdlər]
-başa düşdüm []
-qilin [ilin, bilin, dilin]
-titrəmək [itirməmək, itirmək]
-mübarizə aparır? []
-istəyirəm
-müharibə
-idi
-dalğalar [qadağalar, dağlarda, adalar, dağlar]
-geymək [getmək, getməmək]
-silahlar
-yaxşı
-idarə olunan [olunanlardan]
-Qərbi [Hərbi, Qəbri, Qərb, Qərbin, Qəbir, Qərbə, Qəlbi]
-nə
-arasında
-qalib gəlmək [qaliblərin]
-qalib gəlir [qalibləri]
-ilə
-qadın
-dünya
-səhv
-siz
-sizə
-sənsən [səndən, sən sən, sən-sən, nədənsə, mənsə, sənə, səslənən]
-sənin
diff --git a/Common/3dParty/hunspell/test/dst/bg_BG.txt b/Common/3dParty/hunspell/test/dst/bg_BG.txt
deleted file mode 100644
index 57cc73c5c7..0000000000
--- a/Common/3dParty/hunspell/test/dst/bg_BG.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-A [А, Е, О, И, В, С, Я, У]
-остаряване
-Алдераан [Дерайлиран]
-всичко
-също
-и
-отговор
-са
-изкуство
-като
-в
-далеч
-бебе
-мазе
-бъда
-било
-роден
-булевард
-почивка
-породи
-невеста
-но
-купувам
-от
-Калифорния
-Калифорникация [Калифорнийския, Калифорнийка, Калифорния]
-може
-карти
-шанс
-Китай
-брадичка
-клубове
-Кобейн [Кобен]
-съзвездие
-контрол
-цена
-не можех [можехме]
-създаване
-проклятие
-танц
-сделка
-сделки
-унищожение
-диаманти
-не прави [неправи, неуправии, неправдиви]
-не правим [непоправим]
-мечта
-мечти
-Изток
-ръб
-ръбове
-екстаз
-всеки
-далеч
-приказка
-избледнява
-лица
-краен
-намирам
-първи
-за
-от
-предел
-момиче
-момичето
-добре
-китара
-ръка
-хардкор [хардуер]
-има
-няма
-той
-чуя
-сърце
-той е [той]
-нейни
-скрит
-висок
-него
-негов
-Холивуд
-аз
-аз съм [разсъмна]
-ако
-в
-информация
-вътре
-е
-това е [товарен]
-вале
-просто
-крал
-родственик
-знам
-определен
-закон
-поставям
-водя
-води
-местоположение
-обичам
-късмет
-направен
-човек
-много
-Ожени се [Брожение]
-маска
-май
-може би [можещи]
-означава
-аз
-медитация
-спомен
-ума
-пари
-моя
-никога
-не
-нищо
-числа
-от
-изключен
-на
-един
-само
-или
-изход
-свой
-Плати
-праскова
-места
-играе
-играя
-население
-порно [бурно, орно, порено, опорно, спорно, упорно, порна, парно, порне, поено, порни, потно, торно, морно, горно]
-похвала
-вероятно
-вероятен
-психичен
-кралица
-въздигам
-останал
-почит
-възход
-път
-груб
-светия
-Спасявам
-наука
-крясък
-продава
-форма
-по-болен
-златар
-кожа
-войник
-някаква
-Песен
-песни
-пикове
-заклинание
-шпиони
-звезда
-стация [станция, стария, статия, стадия, атестация, стагнация]
-крада
-камъни
-слънце
-подозрителен
-Швеция
-мечове
-тийнейджър [тинейджър, пейджър]
-тест
-отколкото
-това
-това е [товарен]
-на
-техни
-тези
-те с [тесте]
-мисли
-този
-той
-прилив
-до
-каза
-също
-опитайте
-разбрано
-еднорог [едно рог, еднороден]
-вибрация
-водене? [водене, неводен, воден]
-искам
-война
-беше
-вълни
-носете
-оръжия
-Ами
-бяха
-Западна
-какво
-докато
-победа
-победи
-със
-жена
-свят
-грешка
-ти
-ти би [табиети]
-ти си [тифуси]
-вашият
diff --git a/Common/3dParty/hunspell/test/dst/ca_ES.txt b/Common/3dParty/hunspell/test/dst/ca_ES.txt
deleted file mode 100644
index be726d0d8a..0000000000
--- a/Common/3dParty/hunspell/test/dst/ca_ES.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-amor
-llum
-lluum [lluu, llum, lluus, lluïm, lluu m]
-esperança
-espirança [esperança, espirant, espinçadora, espinça, espira]
-llibertat
-força
-forrça [forra, força, forçar]
-pau
-somni
-llibre
-mar
-amistat
-cançó
-flor
-cel
-estrella
-temps
-camí
-vent
-muntanya
-mumntanya [muntanya, muntanyà, muntant]
-riu
-soroll
-silenci
-viatge
-foc
-gel
-paraula
-vida
-dia
-nit
-tarda
-matí
-lluna
-sol
-llac
-marbre
-ferro
-sal
-mel
-sucre
-peix
-ocell
-oceoll [ocell]
-joc
-ritme
-melodia
-pintura
-pentura [puntera, entura, pintura, puntura, ventura, penetrant, apertura, parapent]
-teatre
-dansa
-poema
-història
-llegenda
-mitologia
-festa
-música
-vi
-cervesa
-cervessa [cervesa, cer vessa, cer-vessa, cerves sa, cerves-sa, cervesera, cerveseria, cerveser, cessava]
-formatge
-pa
-ciutat
-poble
-natura
-camp
-bosc
-platja
-sorra
-sorrà
-pedra
-ànima
-cos
-ment
-cor
-somriure
-somriàre [somriure, somrient]
-abraçada
-bes
-parla
-oida [oidà, oïda, ioda, odia, aido, oia, oda, oiada, oxida, aida, sida, onda, mida, dida, vida]
-vista
-tacte
-gust
-olfacte
-color
-forma
-número
-lletra
-sistema
-regla
-escola
-universitat
-univversitat [universitat, universitari, universalitat, universalitzat, universalista]
-mestre
-estudiant
-sabiduria [sabuderia]
-lliçó
-pregunta
-resposta
-risposta [resposta, disposta, ris posta, ris-posta, risp osta, risp-osta, trasposta, posteritat, riosta, polvorista]
-dubte
-certesa
-veritat
-mentida
-promesa
-secret
-descoberta
-descaberta [descoberta, desca berta, desca-berta, descabestrat, descartable, descabota, descarta]
-aventura
-destinació
diff --git a/Common/3dParty/hunspell/test/dst/ca_ES_valencia.txt b/Common/3dParty/hunspell/test/dst/ca_ES_valencia.txt
deleted file mode 100644
index 87fc1cc63b..0000000000
--- a/Common/3dParty/hunspell/test/dst/ca_ES_valencia.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-A
-envellir
-Alderaan [Aldebaran, Aldebrand, Aldeana, Anedera]
-tot
-també
-I
-resposta
-és
-art
-com
-a
-lluny
-nadó
-celler
-ser
-ha estat [hastat]
-nat
-bulevard
-pausa
-generacions
-núvia
-però
-comprar
-amb
-Califòrnia
-Californication [Californiana, Californita]
-pot
-cartes
-oportunitat
-Xina
-mentó
-clubs
-Cobain [Cobai, Cobais, Cobrin, Cob ain, Cob-ain, Cobalamina]
-signe del zodíac [signé del zodíac, signè del zodíac, sígne del zodíac, sïgne del zodíac, signE del zodíac, Signe del zodíac, sIgne del zodíac, sigNe del zodíac, siGne del zodíac]
-control
-preu
-no podria [nodriria, podriria, nodria]
-crear
-maleït
-ballar
-acord
-negocis
-destructiu
-diamants
-no fer [noosfera]
-no fem [nomenem]
-desitjar
-somnis
-Est
-vora
-voreres
-satisfacció
-tots
-llunyà
-fada
-pallid [pallis, palli, pallin, pali]
-cara
-final
-trobar
-primer
-per
-de
-frontera
-noia
-la noia [la noïa, la Noia]
-bé
-guitarra
-mà
-hardcore [recordar]
-hi ha [hifa]
-no hi ha [nó hi ha, nò hi ha, nO hi ha, No hi ha]
-ell
-sentir
-cor
-ell és [estellés]
-seva
-secret
-alt
-ell
-seu
-Hollywood
-jo
-sóc
-si
-en
-informació
-interior
-és
-és
-jack
-només
-rei
-parent
-saber
-fixat
-llei
-col·locar
-plom
-portar
-col·locació
-lloc
-estimar
-oportunitat
-fet
-home
-molts
-casar-se
-màscara
-podria
-potser
-sentit
-jo
-meditació
-memòria
-ment
-diners
-meu
-mai
-no
-res
-números
-de
-fora
-sobre
-un
-només
-o
-resultat
-seu
-pagar
-préssec
-llocs
-jugar
-joc
-població
-porno
-elogiar
-probablement
-probable
-psíquic
-reina
-elevar
-restant
-respecte
-pujar
-camí
-cru
-sant
-salvar
-ciència
-crit
-vendre’s [vendre's, vendre]
-figura
-malalt
-joier
-pell
-soldat
-alguna cosa [glucosamina]
-cançó
-cançons
-cims
-encanteri
-espies
-estrella
-estació
-robar
-pedres
-sol
-sospitós
-Suècia
-espases
-adolescent
-prova
-que
-que
-això
-seu
-aqueixos
-ells
-pensar
-aqueix
-ells
-marees
-per
-no he estat [nó he estat, nò he estat, nO he estat, No he estat]
-molt
-intentar
-entendre
-fer
-tremolar
-lluitar
-desitjar
-guerra
-va ser [vaser, serva]
-ones
-portar
-armes
-bé
-administrat
-Oest
-què
-entre
-guanyar
-guanya
-amb
-dona
-món
-equivocat
-tu
-vostè
-tu ets [tubets]
-teu
diff --git a/Common/3dParty/hunspell/test/dst/cs_CZ.txt b/Common/3dParty/hunspell/test/dst/cs_CZ.txt
deleted file mode 100644
index 916cc8419c..0000000000
--- a/Common/3dParty/hunspell/test/dst/cs_CZ.txt
+++ /dev/null
@@ -1,206 +0,0 @@
-pomaliý [pomalý, pomaličku]
-šťstný [šťastný]
-smuutný [smutný, smutnu]
-horcký [horký, horácký, horecký, horský, hornický, horňácký]
-studiený [studený, studie]
-záludnast [záludnost, záludný]
-náhodillost [nahodilost, náhodnost]
-úpěnlevý [úpěnlivý, úpletový]
-rozspačitý [rozpačitý, rozpačitěný]
-svéhllavý [svéhlavý, svéhlavička]
-jablko
-slunce
-voda
-dům
-pták
-káva
-chleba
-květina
-kniha
-pes
-kočka
-město
-zelený
-modrý
-červený
-bílý
-černý
-velký
-malý
-rychlý
-pomalý
-šťastný
-smutný
-horký
-studený
-nový
-starý
-hezký
-ošklivý
-dobrý
-špatný
-zdravý
-nemocný
-silný
-slabý
-chytrý
-hloupý
-pracovat
-jíst
-pít
-spát
-číst
-psát
-mluvit
-smát se [smát]
-plakat
-zpívat
-hrát
-tančit
-učit se [učitele]
-nakupovat
-vařit
-telefonovat
-dívat se [sedívat]
-poslouchat
-chodit
-běžet
-létat
-plavat
-psát
-učit se [učitele]
-dělat
-mít
-být
-jít
-přijít
-odejít
-dát
-vzít
-říct
-vidět
-slyšet
-cítit
-myslet
-chtít
-moct
-muset
-rád
-nerad
-ano
-ne
-prosím
-děkuji
-na shledanou [shledanou, dohledanou, shledávanou, ohledanou]
-omlouvám se [omlouvání]
-sbohem
-ahoj
-čau
-hej
-jo
-fakt
-super
-blbost
-paráda
-no jo [nojo]
-jasně
-takže
-vlastně
-třeba
-snad
-leštěnka
-pochmurný
-živelný
-ponaučení
-záhada
-pochybnost
-nádhera
-soucit
-záludnost
-náhodilost [nahodilost, náhodnost]
-úpěnlivý
-rozpačitý
-svéhlavý
-marnivost
-blahodar [blaho dar, blaho-dar, lahoda]
-rozčarování
-odchylka
-přelud
-vytrvalost
-neústupnost
-lehkost
-souznění
-rozmarnost
-roztržitost
-úskočnost
-rozkoš
-marasmus
-rozpolcenost
-neúprosnost
-ztřeštěnost
-chmurnost
-okouzlení
-zářivost
-vyrovnanost
-neochvějnost
-neúcta
-bizarnost
-rozmařilost
-nepochopení
-nevýslovný
-pomíjivost
-beznaděj
-úzkost
-odtažitost
-rozerv [rozerve, rozervi, rozervu, rezerv, rozervat]
-rozervanost
-vyčerpanost
-bezcitnost
-záludnost
-nezdolnost
-rozkošátnost [rozkošnost, rozkošatěnost, rozkošnickost, rozkoktanost]
-nezdolatelnost
-rozmarnost
-živelnost
-bezútěšnost
-záhadnost
-neposkvrnitelnost [nepotiskovatelnost, nepopisovatelnost, nepřemostitelnost, nezvratitelnost]
-rozkošnělost [rozkošatělost, rozkošnost, rozkošnickost, rozkošatěnost]
-bezradnost
-neuchopitelnost
-pošetilost
-opojení
-rozervanost
-marnost
-bezstarostnost
-nevinnost
-náladovost
-vyrovnanost
-ztracenost
-bezbřehost
-rozervanost
-opojení
-bezradnost
-neuchopitelnost
-pošetilost
-opojení
-rozervanost
-marnost
-bezstarostnost
-nevinnost
-náladovost
-vyrovnanost
-ztracenost
-bezbřehost
-opojení
-bezradnost
-neuchopitelnost
-pošetilost
-opojení
-rozervanost
-marnost
-bezstarostnost
-nevinnost
-náladovost
-vyrovnanost
-bezbřehost
diff --git a/Common/3dParty/hunspell/test/dst/da_DK.txt b/Common/3dParty/hunspell/test/dst/da_DK.txt
deleted file mode 100644
index b7a362e12d..0000000000
--- a/Common/3dParty/hunspell/test/dst/da_DK.txt
+++ /dev/null
@@ -1,129 +0,0 @@
-Hej
-Goddag
-Tak
-Ja
-Nej
-Måske
-Mad
-Vand
-Hus
-Bil
-Tog
-Cykel
-Skole
-Børn
-Far
-Mor
-Søster
-Bror
-Hund
-Kat
-Fisk
-Fugl
-Træ
-Blomst
-Græs
-Sol
-Måne
-Himmel
-Regn
-Sne
-Sommer
-Vinter
-Forår
-Efterår
-Aften
-Nat
-Dag
-Uge
-Måned
-År
-Læse
-Skrive
-Tale
-Lære [Lære, Læres, Lærer, Læren, Læreø, Læreå, læreå]
-Arbejde
-Sove
-Vågne
-Løbe
-Gå
-Sidde
-Stå
-Lytte
-Se
-Høre [Høre, Høres, Hører, Høreø, Høreå, høreå]
-Spise
-Drikke
-Kød
-Frugt
-Grøntsager
-Ost
-Brød
-Vand
-Juice
-Kaffe
-Te
-Mælk
-Smør [Smør, Smøre, Smørs, Smør']
-Æg
-Salt
-Peber
-Sukker
-Bolle
-Smørrebrød
-Køkken
-Stue
-Soveværelse
-Badeværelse
-Toilet
-Bord
-Stol
-Sofa
-Lampe
-Vindue
-Dør
-Gulv
-Loft
-Væg
-Sofa
-Pude
-Tæppe
-Badekar
-Håndvask
-Spejl
-Håndklæde
-Seng
-Dyne
-Dynee [Dynes, Dyner, Dyne, Dynen, Dynge, Dynees, Dynete, Dyneel, Dynele, Dyneed, Dyneeg, Dyneem, Dynefe, Dyneve]
-Pude
-Pudee [Pudene, Pudre, Puder, Pude, Pudes, Pudse, Puden, Pudet, Pudel]
-Alarm
-Alarmm [Alarm, Alarms]
-Skrivebord
-Stol
-Hus
-Hund
-Kat
-Katt [Kett, Katy, Katty, Kate, Kitt, Kata, Kato, Matt, Watt, Kat, Kast, Kats, Takt, Kart, Katte]
-Bil
-Skole
-Skolee [Skolie, Skolede, Skoler, Skole, Skoles, Skolen, Skolet, Skolde]
-Sol
-Soll [Sol, Sole, Sols, Soli, Sola, Sall, Sold, Solo, Soul]
-Vand
-Vandd [Vanda, Vandy, Vandt, Vand, Vands, Vande, Vandr]
-Mad
-Madd [Mads, Maud, Mad, Made, Mand]
-By
-Barn
-Barnn [Barni, Baran, Barny, Barn, Baren, Barns, Baron]
-Tørklæde
-Skæbne
-Uafhængighed
-Kærlighed
-Kærligheed [Kærlighed, Ærlighed, Hæderlighed, Herlighed, Liderlighed]
-overbelastning
-Modstandsbevægelsen
-Uafhængighedserklæringen
-Forårssommertemperaturen
-Stabiliseringsperioden
diff --git a/Common/3dParty/hunspell/test/dst/de_AT.txt b/Common/3dParty/hunspell/test/dst/de_AT.txt
deleted file mode 100644
index 060081d011..0000000000
--- a/Common/3dParty/hunspell/test/dst/de_AT.txt
+++ /dev/null
@@ -1,131 +0,0 @@
-Ägyptologie
-Ährenamt [Ährensamt, Ährenast, Ährenart, Ährenact, Ährenabt, Ährenakt, Ährenaxt, Ehrenamt, Ohrenamt, -ährenamt, Ährenartig]
-Ängstlichkeit
-Äquatoria
-Abarbeiten
-Abbild
-Abbilden
-Abbildungs [Abbildung, Abbildungs-, Bildungsnah, Unbildung]
-Abbreviatur
-Abbrüche
-Abfassen
-Abfertigen
-Abfolge
-Abfuhr
-Ableugnen
-Ablichten
-Ablöse
-Absätze
-Abschnitts
-Abwechseln
-Abwehren
-Aktiv
-Britannia
-Browserfenster
-Budgetieren
-Bugpartie
-Bukarester
-Burgundersoße
-Butterkrem
-Button
-Cabriolet
-Campanile
-Canapé
-Caprice
-Celsius
-Chamäleon
-Charakteristik
-Chronometer
-Chronometrie
-Cölln
-Connectzustände
-Cursorspur
-Däne
-Dachs
-Dahindämmern
-Darbringen
-Daten
-Datenbankserver
-Desktopsystem
-Detektivfilm
-Dichtertum
-Dinosaurier
-Direktion
-Diskantgambe
-Diskothek
-Druckereicode
-Kapsel
-Karausche
-Katzen
-Klinge
-Klinke
-Kohlrabi
-Koinzidenz
-Kolleg
-Komplott
-Meereis
-Mehrphasigkeit
-Memorieren
-Messen
-Methode
-Metrowaggon
-Meute
-Migräne
-Milieuforschung
-Mindern
-Mineralien
-Mitternacht
-Mobiliar
-Mohrrübe
-Mühelosigkeit
-Normativität
-Notifikation
-Ökonomie
-Orangeton
-Osten
-Subjekt
-Subsidiarität
-Subsumieren
-Tagfalter
-Speicher
-Spielzeugsammlung
-Zahler
-
-Сложные слова []
-Zurückgezogenheit
-Äquipotentialfläche
-Äußerungsbedeutung
-Abfassungszeitraum
-Abgeschlossenheits [Abgeschlossenheit, Abgeschlossenheits-, Unabgeschlossenheit, Aufgeschlossenheit, Abgeschlagenheit, Geschlossenheit]
-Adjunktionsbeseitigung
-Anknüpfungsgrundsätze
-Chiffrierschlüssel
-Knochenmarktransplantation
-Bundeskaderathlet
-Carbonsäurechlorid
-Cardiazoltherapie
-Chancenungleichheit
-Charakterisierungsmöglichkeit
-Chlorophyllkonzentration
-Computerspielemarkt
-Deindustrialisieren
-Dekodierungsmöglichkeit
-Kartoffelschälmesser
-Kernspinresonanztomographie
-Merkmalskombination
-Nachbarschaftszentren
-Opportunitätsprinzip
-Tiefenstaffelung
-Tourismusfachmann
-Sequenzbetrachtung
-
-Слова с ошибками []
-Dechifrierprogramm [Dechiffrierprogramm, Liederprogramm]
-Administratorkenwort [Administratorkennwort, Administratorkonto, Administratorrecht, Distriktadministrator, Distriktsadministrator]
-Spigeln [Spiegeln]
-Tätigkeite [Tätigkeit, Tätigkeiten, Untätigkeit, Nagetätigkeit, Mildtätigkeit, Regietätigkeit]
-Draufgangertum [Draufgängertum, Draufgänger]
-Abschnit [Abschnitt, Abschritt]
-Komunikation [Kommunikation, Exkommunikation, Kommunikativ, Kommunikator, Komplikation]
-Drackereicode [Druckereicode, Dreidecker]
-Bumeln [Baumeln, Bummeln, Blumen, Brummeln, Bummel]
diff --git a/Common/3dParty/hunspell/test/dst/de_CH.txt b/Common/3dParty/hunspell/test/dst/de_CH.txt
deleted file mode 100644
index 196e03636b..0000000000
--- a/Common/3dParty/hunspell/test/dst/de_CH.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-Alpinist
-Alteration
-Alternative
-Alumne
-Amateurfilmer
-Ambulanz
-Amtmänner
-Analogie
-Analytik
-Ananas
-Angabe
-Ankünfte
-Dynastie
-Ebenbürtigkeit
-Echtheitszertifikat
-Editionspläne
-Editor
-Ehrenamtlichkeit
-Eigentümerschaft
-Einbau
-Eindringling
-Eingabequittungsbetrieb
-Einhüllen
-Einkommen
-Einloggen
-Einschließen [Einschliessen, Einschliefen]
-Einsortier [Einsortier-, Einsorter, Eintortier, Einportier, Einvortier, Einsortiere, Einsortiert, Unsortierter, Unsortiert, Einzusortieren, Sortieren]
-Elaboration
-Elementar
-Entertainer
-Entkuppeln
-Entschädigungs [Entschädigung, Entschädigungs-, Entschädigungslos, Entschädigens, Entschädigen]
-Enumerator
-Erbringen
-Erdichten
-Erfahrenheit
-Erhalt
-Erleichtern
-Ersparnis
-Erstatten
-Erzählliteratur
-Helikopter
-Helpdesk
-Herunterladen
-Hindeuten
-Hinterlassenschaft
-Hiob
-Landesprache [Landessprache, Landesrache, Landsprache, Ladesprache, -landesprache]
-flexibilität [Flexibilität, -flexibilität, flexibilisiert]
-floristisch
-flugbillet [Flugbillet, -flugbillet, flugbereit]
-heroben
-herrichten
-herstellen
-herübereilen
-herunterzubücken
-hie
-hieraus
-hilfe [Hilfe, hilf, hilfe-, -hilfe, helfe, hilft, hälfe]
-himbeere [Himbeere, -himbeere, himbeer-, himbeerrot]
-justiz [Justiz, justiz-, -justiz, justiziell]
-kältebeständig
-kärtchen [Kärtchen, -kärtchen, Gärtchen, Bärtchen, kärglichen]
-känguru [Känguru, -känguru]
-kaktusgewächs [Kaktusgewächs, -kaktusgewächs, ausgewechselt]
-kalligrafie [Kalligrafie, -kalligrafie, kalligrafiere, kalligrafische, kalligrafisch]
-kamel [Kamel, kamel-, -kamel, kamen, rammel]
-kampagnendirektor [Kampagnendirektor, -kampagnendirektor, kampagnenartig]
-kapazitär
-kapitalist [Kapitalist, -kapitalist, kapital ist, kapital-ist, kapitalistisch, kapitalisierst, kapitalisiert, kapitalstark]
-karamell [Karamell, karamell-, -karamell, lamellar]
-kardieren
-karpfen [Karpfen, -karpfen, krampfen]
-katalogdaten [Katalogdaten, -katalogdaten, katalogartigen]
-lyzeum [Lyzeum, -lyzeum]
-mahagonirot
-makkaroni [Makkaroni, -makkaroni, marokkanisch]
-malerausbildung [Malerausbildung, -malerausbildung, ausbildungsreif]
-management [Management, -management, managen, gemanagt, angemahnt]
-mangel
-maniküre
-manneskraft [Manneskraft, -manneskraft, maskenhaft]
-mansarde [Mansarde, -mansarde, ansparende]
-mark [Mark, -mark, merk, park, Sark, Park, Bark, markig]
-marketingpraktiker [Marketingpraktiker, -marketingpraktiker, marketingorientiert, marketingwirksamer]
-maschinell
-massage [Massage, massage-, -massage, massige, Passage, Gassage, passagere]
-massengutschifffahrt [Massengutschifffahrt, -massengutschifffahrt, maschinenschriftlich]
-materie [Materie, -materie, materiell, materiefrei, maturiere, mattier]
-medaille [Medaille, -medaille, medaillenlos]
-medizinalshampoo [Medizinalshampoo, -medizinalshampoo, sozialmedizinisch]
-meeresfrüchte [Meeresfrüchte, -meeresfrüchte, Heeresfrüchte, meeresfeuchte, meeresfeucht, früchtereiche, früchtereich]
-quotient [Quotient, -quotient, quotiert, quotieren, quotiere, quotisieren]
-salonwagen [Salonwagen, -salonwagen, lossagen]
-satzeinleitend
-trilateral
-tristesse [Tristesse, -tristesse, tristeste, trist esse, trist-esse, triste, rissfeste, stresse, rissfest]
-tropen [Tropen, tropfen, tropen-, -tropen, trogen, tropenfest]
-vereisen
-verfahren
-verfügungs [verfügungs-, verfügen]
-verhindern
-verkäufer [Verkäufer, -verkäufer, verkämpfe, verkaufe, verkupfer]
-
-Слова с ошибками []
-Anbindungsystem [Anbindungssystem]
-Anglistikdocent [Anglistikdozent, Anglistikstudent, Linguistikdozent]
-Ecco [Echo, Codec]
-Economclass [Economyclass, Economyklasse]
-Einverstandnis [Einverständnis, Einverstandanis, Einverstandnils, Einverstandeis, Einverstandnil, Einverstanden, Seinsverständnis, Koranverständnis, Unverständnis]
-Electrik [Elektrik, Electrabel]
-Historique [Historisiere, Historie]
-herüberzurucken [herüberzugucken, herüberzurücken, herüberzulocken, herüberzustrecken, herüberzublicken, herüberzuschicken]
-kartofel [kartoniere]
-salade [malade, lade]
-sanddornbere [versandbereite]
diff --git a/Common/3dParty/hunspell/test/dst/de_DE.txt b/Common/3dParty/hunspell/test/dst/de_DE.txt
deleted file mode 100644
index 36cde4a624..0000000000
--- a/Common/3dParty/hunspell/test/dst/de_DE.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-Hallo
-Guten Morgen [Morgenläuten, Morgenröten]
-Danke
-Bitte
-Ja
-Nein
-Entschuldigung
-Tschüss
-Liebe
-Freund
-Familie
-Glück
-Gesundheit
-Schule
-Arbeit
-Essen
-Trinken
-Wasser
-Brot
-Käse
-Fleisch
-Gemüse
-Obst
-Kaffee
-Tee
-Milch
-Zucker
-Salz
-Pfeffer
-Haus
-Wohnung
-Bett
-Stuhl
-Tisch
-Sofa
-Fernseher
-Telefon
-Computer
-Buch
-Zeitung
-Schreiben
-Lesen
-Hören
-Sehen
-Fühlen
-Laufen
-Springen
-Schwimmen
-Tanzen
-Singen
-Lachen
-Weinen
-Freude
-Trauer
-Angst
-Mut
-Liebe
-Hass
-Freundschaft
-Beziehung
-Familie
-Eltern
-Kinder
-Geschwister
-Großeltern
-Onkel
-Tante
-Cousin
-Cousine
-Ehemann
-Ehefrau
-Verlobung
-Hochzeit
-Scheidung
-Geburt
-Tod
-Krankheit
-Arzt
-Krankenhaus
-Medikament
-Apotheke
-Gesundheit
-Wohlbefinden
-Fitness
-Diät
-Schlaf
-Ruhe
-Entspannung
-Sport
-Fußball
-Tennis
-Schwimmen
-Laufen
-Radfahren
-Wandern
-Reisen
-Urlaub
-Strand
-Sonne
-Meer
-Komplementär
-Perspektive
-Konsens
-Integrität
-Konsequenz
-Authentizität
-Korrelation
-Charakteristik
-Akzeptanz
-Flexibilität
-Assoziation
-Dekomposition
-Komplexität
-Positivismus
-Universalität
-Stabilität
-Individualität
-Konsistenz
-Konformität
-Dezentralisierung
-Kollaboration
-Partizipation
-Präzision
-Transformation
-Konkurrenz
-Paradoxie
-Redundanz
-Regeneration
-Integration
-Isolation
-Asymmetrie
-Aggregation
-Disziplin
-Resilienz
-Relevanz
-Konfusion
-Komplikation
-Koordination
-Harmonie
-Ineffizienz
-Konstruktion
-Konversion
-Kollusion
-Gerontologie
-Differenzierung
-Dimensionalität
-Inferenz
-Fluktuation
-Kontraktion
-Rezession
-Inflation
-Dekontamination
-Exzellenz
-Innovation
-Isomorphie
-Konnotation
-Insuffizienz
-Konversion
-Kompensation
-Koalition
-Inkongruenz
-Inkontinenz
-Kontrahent
-Konfiskation
-Konjunktur
-Aggression
-Konfrontation
-Kompatibilität
-Prognose
-Akzeleration
-Konstruktion
-Diversifikation
-Prävention
-Sanktion
-Indikation
-Reduktion
-Konkurrenz
-Konfiguration
-Konnotation
-Rezession
-Transformation
-Interaktion
-Kooperation
-Innovation
-Kollision
-Proklamation
-Konnotation
-Konfrontation
-Disposition
-Konkordanz
-Deklamation
-Kollaboration
-Isolation
-Inflation
-Diversifikation
-Konnotation
-Kompensation
-Diffusion
-Dekadenz
-Konserve
-Deklomotion [Deklamation, Deklination, Deletionsklon]
-Kolaboration [Kollaboration, Kollaborativ, Elaboration, Korporation, Inkorporation]
-Isollation [Isolation, Installation, Kollation, Solmisation, Spallation]
-Infllation [Inflation, Inflationär, Inflammation, Inflationiere, Installation]
-Divirsifikation [Diversifikation, Ossifikation, Kodifikation, Ratifikation]
-Konotation [Konnotation, Korotation, Kinotation, Kontotation, Ökonotation, Konnotativ, Annotation, Notation, Konfrontation]
-Kompenssation [Kompensation]
-Difusion [Diffusion, Gasdiffusion, Infusion, Diskussion, Fusion]
-Dekadens [Dekaden, Dekadenz, Dekadent, Dekade, Dekans, Dekagons, Dekkans]
-Kanzerve [Verwanze]
-
diff --git a/Common/3dParty/hunspell/test/dst/el_GR.txt b/Common/3dParty/hunspell/test/dst/el_GR.txt
deleted file mode 100644
index cc8cf011f2..0000000000
--- a/Common/3dParty/hunspell/test/dst/el_GR.txt
+++ /dev/null
@@ -1,123 +0,0 @@
-Αβαντάζ
-Αβασταγά
-Αβγάτισες
-αβέβαιο
-αβέλτερο
-αβέλτεροι
-αβίαστους
-άβλαβοι
-αβοκάντο
-αβράδιαστης
-άβραστη
-αβράχυντου
-άβρεχτα
-αβρή
-αβρότης
-άβυσσον
-αγαθόν
-αγαθούς
-αγάλακτο
-αγγούρι
-αγελαδινού
-αγέρα
-αγεωμέτρητων
-αγίνωτοι
-άγκυρες
-αγορεύσεις
-αγόρευσή
-αγορίνα
-Αγοριού
-Αγροληψία
-Αρμόνια
-βγαίνοντας
-βεβαιώσεων
-διάθεση
-διαίρεση
-Διαιρέσου
-Διαιτολογίου
-διαψεύσουν
-διδασκάλισσας
-ενασκήσεις
-ενασχόληση
-ενασχόλησή
-ενδείξεις
-ενδεχόμενον
-ενδιαμέσου
-Επιστήθιες
-Επιστημο [Επιστημοσύνη]
-Επιστολές
-Επιστολή
-εύπορους
-ευρέα
-ευρημάτων
-ευρύτητά
-ευσταθών
-εύστροφα
-ευσυνειδησία
-εύτακτε
-ευτελείς
-ευτελίζουν
-ιδρυτικό
-ιεροψάλτες
-Ιζόλα
-Ιθαγένειάς
-ικανότατος
-ιλαρότης
-κεφαλής
-κεφαλιάτικες
-κεφαλωτές
-κήπε
-κήπευση
-Κήρυξής
-Λεξικογραφιών
-Λεξιλογικός
-λεοντή
-λεοντής
-ολιγοχρόνιου
-ολικέ
-ολικές
-ολική
-πελαγώνω
-πελατών
-πελάων
-προστατεύει
-προστασίας
-σούρουπου
-σουρούπωμα
-σούρτης
-Σούρωνα
-Σπαγέτα
-Σφάλμα
-Σφάλματά
-σφικτά
-σφικτέ
-σφοδρότητας
-σφοδρού
-σφραγίσω
-σχεδιάζουμε
-σχεδιάζουν
-σχηματίσου
-σχηματίσουμε
-σχολιάζεσαι
-Σχολιάζεστε
-Ενδιαφέροντα
-
-Слова с ошибками []
-Αβασiλευτου [Αβασίλευτου, Αβασίλευτο, Αβόλευτου]
-αγαπούσαv [αγαπούσα, αγαπούσαν, αγαπούσε]
-βeβαιωμένοι [βεβαιωμένοι, βεβαιωμένο]
-εvασxόλησης [ενασχόλησης]
-επιoτολικέ [επιστολικέ, επιστολικό]
-ιδιωτικοποιήσειc [ιδιωτικοποιήσει, ιδιωτικοποιήσεις, ιδιωτικοποιήσετε, ιδιωτικοποιήσεως, ιδιωτικοποιήσεων, ιδιωτικοποιήστε]
-λεπταίσθnτη [λεπταίσθητη, λεπταίσθητα, λεπταίσθητε, λεπταίσθητο]
-πρoστιμάρισμα [προστιμάρισμα, στιμάρισμα]
-σφάλμαtα [σφάλματα, σφάλμα]
-προστάτεuε [προστάτευε, προστάτεψε, προστάτευσε, προστάτες, προστάτευα, προστάτευσα]
-κεxριμπαριού [κεχριμπαριού, κεχριμπαρένιο]
-διαισθnτικότητες [διαισθητικότητες, διαισθητικότητας, διαισθητικότητα, διαισθητικότης, αισθητικότητες]
-αγκιστpώσουv [αγκιστρώσουν]
-αγαθoεργiας [αγαθοεργίας]
-αβεβαιoτητά [αβεβαιότητά, βεβαιότητά]
-αγέρεc [αγέρες]
-διδαxθούμε [διδαχθούμε, διδαχτούμε]
-εuσταθειώv [ευσταθειών]
diff --git a/Common/3dParty/hunspell/test/dst/en_AU.txt b/Common/3dParty/hunspell/test/dst/en_AU.txt
deleted file mode 100644
index 55691a415f..0000000000
--- a/Common/3dParty/hunspell/test/dst/en_AU.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-Acknowledge
-acrophobia
-adventurousness
-aeronautics
-algal
-Alligator
-allegation
-alphabetise
-Analogy
-appropriable
-assembly
-attempt
-Average
-barbecue
-bathtub
-begun
-belongingness
-Better
-binary
-blackberry
-boatswain
-bow-tie
-brambly
-bright-eyed
-bubble
-Calender
-cancellous
-cantankerousness
-carefree
-categorized [categorised, categorise, categorisation, category, decorticated, cauterised, avant-grist]
-cellular
-chaos
-cheerfulise
-childlike
-circumstance
-close-mouthed
-Cocoa
-coherent
-co-located
-Colours
-controversial
-cottage
-creditworthiness
-cut-down
-dedicated
-deep-freeze
-Definitive
-Designs
-digital
-distensible
-dollar
-dyslexia
-Egyptian
-effectively
-etiquette
-excess
-exotica
-fairly
-feedback
-features
-figure's
-fjord
-forty-seven
-government
-haematomata
-helpless
-homologous
-implant
-Indemnify
-inexpert
-interior
-localises
-loquaciousness
-maelstrom
-mechanizable
-melodious
-mezzo-soprano
-mozzie
-municipalisation
-mystifier
-Neoclassicism
-newsletter
-non-professional
-officiation
-orientalisation
-palaeoanthropography
-parrot
-pickpocket
-pioneer
-cryptanalytic
-simplifying
-sommelier
-spicy
-steward
-subcontinental
-swimwear
-Technical
-trajectory
-wholesomeness
-Advantageously
-interindustry
-red-eye
-sub-group
-
-Слова с ошибками []
-Acredited [Credited, A credited, Accredited, Accredit, Accreted, Creditable, Discredit, Acridity, Aegritude]
-agressive [aggressive, regressive, digressive, progressive, transgressive, aggressor, expressive]
-appreciativiness [appreciativeness, appreciatively, appreciative, appreciation, apprehensiveness, operativeness, provocativeness]
-aritmetical [arithmetical, arithmetica, arithmetic, hermetical, antithetical, paramedical, grammatical]
-biosyntesized [biosynthesized, nonsynthesised, synthesised, amniocenteses, amniocentesis]
-lisense [license, senilise, linenise, sensualise, sensise, licence, licensable]
-paranoa [paranoia, paranoid, paranormal, paragon, panorama, Paringa, parental]
-fotoelectronic [photoelectronic]
-semi transparent [semitransparent, transparentise, non-transparent, transparency, semi-permanent, transpiration, superintendence]
-synonymus [synonyms, synonymous, synonym's, synonym us, synonym-us, synonym, anonymous, synchronous, synoecious, anonymise, unanimous]
-wordprocessing [word-processing]
diff --git a/Common/3dParty/hunspell/test/dst/en_CA.txt b/Common/3dParty/hunspell/test/dst/en_CA.txt
deleted file mode 100644
index a23012fcfa..0000000000
--- a/Common/3dParty/hunspell/test/dst/en_CA.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-admire
-admittance
-aggrandizement
-Airmen
-Albatross
-amateur
-angling
-apparatus
-Architecture
-assessment
-attempt's
-awakening
-backgrounder
-Balance's
-barometric
-bashfulness
-beautiful
-belletristic
-blatancy
-bonbon
-border
-Bottom
-bountifulness
-breakpoints
-bulkiness
-businesslike
-can't
-cash
-castle
-Casual
-cauliflower
-celebrity
-childish
-chokecherry
-choreographically
-chronological
-classification
-clearheaded
-coalesce
-Coexistence
-collaborative
-coloured's
-concentration
-draconian
-drainpipe
-demonstrativeness
-dependence
-dependency
-dream
-duplication
-epidemiological
-equitable
-Essence
-Exemption
-exonerate
-fainthearted
-falsification
-ferromagnetic
-flammable
-fraternization
-French
-frontier
-gadget
-galleria
-Gallery
-gateaux
-geocache
-ginger
-glace
-glacier
-globalization
-hockey
-holiday
-housemate
-intensifier
-joystick
-Language
-leaseholder
-non-breakable
-northerly
-o'clock
-oeuvre
-openhandedness
-oscillation
-outface
-outlaw
-overladen
-package
-palazzo
-panama
-Paragraphs
-Parliament
-particular
-pasteurization
-pathogen
-perception
-phenomena
-philanthropically
-physical
-populations
-repugnance
-request
-resplendence
-retroactive
-rigidity
-schedule's
-School
-scintillation
-sensibility
-settlement
-taxiway
-bereft
-
-Слова с ошибками []
-acomplishment [accomplishment, accomplish, compliment]
-anihilate [annihilate, annihilator, annihilation]
-caprise [caprice, cap rise, cap-rise, apprise]
-chambre [chamber, chambray]
-etnographically [ethnographically, pornographically, photographically, typographically, topographically]
-horsmanship [horsemanship, sportsmanship, swordsmanship, marksmanship, showmanship]
-innundation [inundation, foundation, annunciation, insinuation, intimidation]
-lemongras [lemongrass, lemonades]
-omelete [omelette, telemeter]
-retorical [rhetorical, oratorical, categorical, theoretical, reportorial]
-shepishness [sheepishness, snappishness, waspishness, impishness, foppishness]
diff --git a/Common/3dParty/hunspell/test/dst/en_GB.txt b/Common/3dParty/hunspell/test/dst/en_GB.txt
deleted file mode 100644
index 3b8b7a1426..0000000000
--- a/Common/3dParty/hunspell/test/dst/en_GB.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-Abbreviation
-Acceptability
-acquirable
-Addressee
-afterthought
-airworthiness
-all-powerful
-amateurishness
-amorphousness
-anthology
-Auspiciousness
-Bibliographer
-Bilberry
-birthday
-bodyguard
-broadleaved
-brontosaurus
-bumptiousness
-Cabaret
-Californian
-calumny
-cancellation
-cantonal
-capitalize
-careful
-carry-on
-casino
-clown
-co-ordinate
-cockleshell
-decennial
-deckchair
-decryption
-deep-freeze
-Democracy
-financial
-fish-plate
-Flamenco
-housing
-Hybrid
-hydroelectricity
-iceboat
-ichthyology
-idiomatic
-ill-humoured
-imperatrix
-individuality
-interocular
-intrasectoral
-ironwoods
-Jolliness
-Jurisprudent
-knowledgable
-kopeks
-labour-intensive
-laboratory
-lake
-language
-larynx
-latching
-leakiness
-License
-licensed
-licensee
-life-threatening
-linguistics
-long-lived
-machinable
-mainsheet
-Major
-malleability
-man-hour
-Mango
-ninety-five
-nobody
-non-blocking
-non-judicial
-nonconforming
-north-Western
-nutritiousness
-quasi-synchronous
-question
-racoon [raccoon, racoon's, contra]
-radish
-Railway
-Rarity
-saucer
-Save
-Saying
-supplely
-tallish
-target
-Taxi
-teach-in
-technician
-ultramodern
-umbrae
-uncertainness
-unconstitutionality
-washing
-wasn't
-waxen
-weather
-well-formed
-what's-his-name
-whereupon
-Wi-Fi
-Wikipedia
-
-Слова с ошибками []
-Abstractnes [Abstractness, Abstractedness, Abstracter, Abstraction, Abstracted]
-advantageusness [advantageousness, advantageous]
-arhythmical [rhythmical, arrhythmical, a rhythmical, arrhythmic, arrhythmia]
-autosuggestibility [auto-suggestibility]
-kaptor [captor]
-coldshouldering [cold-shouldering]
-humaneneses [humaneness, humanenesses, humannesses, humanness, humanises, humblenesses]
-imaginativness [imaginativeness, imaginative, imaginableness, imitativeness]
-knight-erantry [knight-errantry, straight-eight]
-magasine [magazine, magnesia, imagine]
-night-wachman [night-watchman, nightmarish]
-qualifidly [qualifiedly, qualified, squalidly]
diff --git a/Common/3dParty/hunspell/test/dst/en_US.txt b/Common/3dParty/hunspell/test/dst/en_US.txt
deleted file mode 100644
index a1cd136a72..0000000000
--- a/Common/3dParty/hunspell/test/dst/en_US.txt
+++ /dev/null
@@ -1,218 +0,0 @@
-apple
-banana
-cat
-dog
-egg
-fish
-gold
-house
-ice
-juice
-kite
-lion
-mouse
-night
-orange
-pencil
-queen
-rabbit
-sun
-tea
-umbrella
-vase
-watch
-xylophone
-yellow
-zebra
-arrow
-book
-cake
-car
-day
-elephant
-flower
-hat
-island
-jelly
-king
-lamp
-moon
-nose
-owl
-pink
-quilt
-radio
-sunflower
-tree
-unicorn
-violin
-water
-xylophone
-yellow
-zoo
-apple juice [applesauce]
-blue
-calculator
-desk
-elephant
-fire
-goat
-hat
-ice cream [creamer]
-jacket
-key
-lemon
-map
-notebook
-owl
-pear
-quilt
-rose
-soccer
-table
-umbrella
-vegetable
-whale
-xylophone
-yellow
-zebra
-apple pie [pineapple]
-beach
-computer
-drum
-elephant
-goat cheese [headcheese]
-hat
-ice skate [cheapskate]
-juice box [jukebox]
-kite festival [quite festival]
-lemonade
-mountain
-notebook paper []
-orange juice [orangeade]
-pizza
-queen bee [quin bee, queen bi, keen bee, ween bee]
-rainbow
-snow
-turtle
-umbrella hat [umbrella]
-valley
-Aberration
-Absolution
-Acquiesce
-Adumbrate
-Aesthete
-Altruistic
-Ambivalent
-Anomalous
-Antediluvian
-Antipathy
-Aphorism
-Apocryphal
-Apostasy
-Apparition
-Arduous
-Assiduous
-Audacious
-Austere
-Autonomy
-Avaricious
-Axiomatic
-Baleful
-Bellicose
-Belligerent
-Bereft
-Bilious
-Bombastic
-Cacophony
-Capricious
-Cartography
-Castigate
-Clandestine
-Coalesce
-Cogent
-Cognizant
-Colloquy
-Concomitant
-Confabulate
-Congenial
-Conundrum
-Copious
-Corpulent
-Coven
-Credulous
-Culpable
-Dearth
-Debilitate
-Deleterious
-Denigrate
-Despondent
-Diatribe
-Dilapidated
-Disparage
-Dissemble
-Dissonance
-Duplicity
-Ebullient
-Egregious
-Ephemeral
-Equanimity
-Esoteric
-Euphemism
-Evanescent
-Exacerbate
-Exhort
-Expatriate
-Extol
-Facetious
-Fatuous
-Feckless
-Felicitous
-Feral
-Fervent
-Fetter
-Flummox
-Fractious
-Garrulous
-Hegemony
-Iconoclast
-Idiosyncrasy
-Ignominious
-Impecunious
-Ineffable
-Inexorable
-Inscrutable
-Insidious
-Intrepid
-Intransigent
-Invective
-Irascible
-Juxtapose
-Kowtow
-Languid
-Lassitude
-Lurid
-Malinger
-Maudlin
-Mawkish
-Mendacious
-Metaphysical
-Antransigent [Intransigent, Intransigence, Transient, Intransitive, Transcendent]
-Inwective [Infective, Invective, Ineffective, Instinctive, Inactive]
-Iracible [Irascible, Acquirable]
-Juxtopose [Juxtapose, Juxtaposition]
-Kovtow [Kowtow, Kowloon]
-Langued [Languid, Languished]
-Lasitude [Lassitude, Latitude]
-Larid [Arid, L arid, La rid, La-rid, Laird, Lard, Laid, Lurid]
-Mallinger [Malinger, Salinger, Lingering, Lingerer, Germinal]
-Haudlin [Maudlin, Handling]
-Mavkish [Mawkish, Mavis]
-Mendocious [Mendacious, Mendocino]
-Mitaphysical [Metaphysical, Physicality, Physical]
-timeline [time line, time-line, timberline]
-rollout [roll out, roll-out, rollover]
-workshopped [work shopped, work-shopped, works hopped, works-hopped, workshop]
-deliverables [deliverable, deliverable s, deliverers, deliberative, desirable]
-
-
diff --git a/Common/3dParty/hunspell/test/dst/en_ZA.txt b/Common/3dParty/hunspell/test/dst/en_ZA.txt
deleted file mode 100644
index 89bb91d321..0000000000
--- a/Common/3dParty/hunspell/test/dst/en_ZA.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-Acceptably
-Achievement
-administrate
-all-day
-amount
-average
-bilayer
-blasé
-boutique
-breezy
-byers
-cabdriver
-carefree
-categorised
-Chameleon
-cheerful
-chronology
-cliché
-cooling-off
-courage
-crudités
-decorates
-dooryard
-débâcle
-electromotive
-equalled
-Exotica
-fellow-traveller
-forests
-full-timer
-graded
-habitué
-haven't
-hide-and-seek
-home-building
-interaxial
-kingdom
-largeness
-long-distance
-Majority
-manoeuvre
-Matrix
-metier
-mightn't
-multidisciplinary
-night-time
-officio
-old-style
-organize
-overaggressive
-packing
-parenthesis
-pince-nez
-Plaint
-play-act
-policy-making
-Preheat
-prohibit
-puzzle
-queue
-quite
-re-enact
-reason
-ready-made
-renewal
-resize
-rooihout
-scampi
-schoolteacher
-sea-green
-shop-boy
-sidebar
-skyscraper
-soundless
-spelling
-stakeout
-synchronizing
-take-off
-Thereof
-Trademark
-transportable
-treatment
-tweeness
-under-age
-unmake
-Variate
-Visitant
-volume
-webmaster
-well-prepared
-window
-yesteryear
-first-aid
-Hydrant
-inconstant
-network
-northernmost
-nowhere
-souvenir
-telecommunicate
-
-Слова с ошибками []
-afordable [fordable, affordable, a fordable, formidable, recordable, foreseeable, adorable, avoidable, avoidably]
-anthropologie [anthropology, anthropologies]
-bagage [baggage, bag age, bag-age, Babbage, garbage, bagged, bagel, bakgat, ribcage]
-comparatif [comparative, comparator, compatriot, comparable, comparability, comparably]
-flammeble [flammable, flamelike, lamentable, blameless, flamed, flammability, flamboyance]
-indivizible [indivisible, individualize, indiscernible, divisible, invincible, indefeasible, inadvisability]
-jetlag [jet-lag]
-lettrebox [letterbox, treble, storybook, legislature]
-panoramma [panorama, Panorama, panoramic, paranormal, Panamanian, pentagram, paramagnet]
-posessor [possessor, possess, assessor, processor, professor, poses, posses]
-selfdoubt [self-doubt]
-abandonner [abandoner, abandon, bandoleer, Ndondondwane, Bannerman, abundance, abundant]
diff --git a/Common/3dParty/hunspell/test/dst/es_ES.txt b/Common/3dParty/hunspell/test/dst/es_ES.txt
deleted file mode 100644
index c68b9446d3..0000000000
--- a/Common/3dParty/hunspell/test/dst/es_ES.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-nosotros
-vosotros
-ellos
-ellas
-aquí
-allí
-ahora
-antes
-después
-siempre
-nunca
-también
-solamente
-verdad
-mentira
-bien
-mal
-grande
-pequeño
-rápido
-lento
-nuevo
-viejo
-bueno
-malo
-feliz
-triste
-bonito
-feo
-caliente
-frío
-dulce
-amargo
-fuerte
-débil
-cerca
-lejos
-fácil
-difícil
-cierto
-falso
-caro
-barato
-limpio
-sucio
-fuerte
-débil
-alto
-bajo
-claro
-oscuro
-abierto
-cerrado
-joven
-viejo
-corto
-largo
-alegre
-tranquilo
-nervioso
-amable
-grosero
-conocido
-desconocido
-cortés
-rudo
-agradable
-desagradable
-sabroso
-insípido
-difícil
-fácil
-cansado
-descansado
-moderno
-antiguo
-último
-primero
-posible
-imposible
-rápido
-lento
-sencillo
-complicado
-propio
-ajeno
-abierto
-cerrado
-amable
-desagradable
-seguro
-inseguro
-correcto
-incorrecto
-dulce
-amargo
-Anacoreta
-Sobrentender
-Embriaguez
-Inquebrantable
-Empedernido
-Derramamiento
-Despotricar
-Escafandra
-Aletargamiento
-Estancamiento
-Descarado
-Exégesis [Génesis]
-Contrariedad
-Espeluznante
-Conspiración
-Impedimenta
-Deglutir
-Engreído
-Enmascarado
-Exterminio
-Embelesar
-Permutación [Permutan]
-Desesperanza
-Impenetrable
-Enarbolamiento [Enarbola miento, Enarbola-miento, Enrollamiento, Arrollamiento, Encarcelamiento, Eslabonamiento]
-Errabundo
-Deslinde
-Inefable
-Soliviantar
-Embriaguez
-Perdurable
-Opulencia
-Trémulo
-Desembolso
-Empedernido
-Anquilosar
-Enigmático
-Inquebrantable
-Contrincante
-Desmesurado
-Vanagloriar
-Exasperar
-Desvanecer
-Perpetuidad
-Desbaratar
-Ineficaz
-Zozobra
-Elucubración
-Ineludible
-Desgarramiento
-Atestiguar
-Encascarar [Encascara, Encascaran, Encascaras, Enmascarar, Encascar, Encascar ar, Encascar-ar, Encascabelar, Encascotar, Enmascaran, Enmascara]
-Desembozar
-Irreverente
-Soslayar
-Despiadado
-Embaucar
-Moflete
-Endilgar
-Desfalco
-Embelesamiento
-Desestimar
-Enajenación
-Desavenencia
-Inexorable
-Atolladero
-Egrégoro [Negror]
-Desafiar
-Afable
-Enervar
-Belicoso
-Enervar
-Descacharrante
-Entramado
-Inigualable
-Perplejidad
-Descabellado
-Diligencia
-Enaltecimiento
-Desvergonzado
-Arrebato
-Empatía [Empata, Empate]
-Endiosar
-Peripecia
-Desidia
-Subversión
-Desfachatado
-Desfalco
-Desvirtuar
-Errático
-Desahuciar
-Envilecimiento
-Empecinado
-Estolidez
-Despropósito
-Engatusar
-Culminante
-Sobrentender
-Enseñorear
-Desacato
-segguro [seguro, seg guro, seg-guro, seguiros, segur]
-insseguro [inseguro, insegura]
-correcto
-incarrecto [incorrecto, insurrecto]
-dalce [salce, dale, alce, dance, calce, dalle, dulce, d alce, cendal, cebadal, celda]
-amergo [amero, mergo, amargo, amelgo, a mergo, amorgone]
-Anasoreta [Anacoreta, Masoreta, Trasfretana, Asotanas, Asotanara]
-Sobrententter [Sobrestante, Soberanamente, Sobriamente, Soberbiamente]
-Embreagues [Embregues, Embragues, Embriagues, Embriaguemos, Embragares, Embrague, Embriague]
-Inquebranttable [Inquebrantable, Quebrantable, Infranqueable, Intransitable]
-Empidernedo [Empedernido, Empedernecer, Empedernir]
-
diff --git a/Common/3dParty/hunspell/test/dst/eu_ES.txt b/Common/3dParty/hunspell/test/dst/eu_ES.txt
deleted file mode 100644
index a0335c41c0..0000000000
--- a/Common/3dParty/hunspell/test/dst/eu_ES.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-Abantza
-ñabar
-abasto
-abegikortasun
-aberaskeria
-aberetzar
-abezedario
-abialdi
-Abiatzaile
-abizari
-Aboli
-abonatu
-absenta
-absolutibo
-accelerando
-adabegitsu
-adberbio
-adiaka
-adierazle
-adierazkizun
-adikuntza
-adin
-adinaro
-adineratu
-adin-txikitasun
-administratzaile
-adoleszentzia
-adopzio
-adostu
-aerolabangailu
-Aeroplano
-afalordu
-agente
-agertezin
-agiantza
-agoran
-arradatze
-arrakasta
-Batata
-baterakuntza
-baterakor
-Bateri
-batuar
-baud-abiadura
-batzuenganako
-batzuengandik
-batzuengan
-batzuengatik
-batzuen
-baxera
-berezi
-berezikeria
-beritzete
-beroa
-Beroate
-beroatza
-berorri
-berrabiatu
-berra
-berresgarri
-berripaper
-chap
-dabilzkidake
-dabilzkie
-dagitza
-dagokik
-dagozkieke
-erdiondu
-galdera
-galtzada
-garaitiar
-garantia
-Garaztaketa
-garbitasun
-gastronomiko
-Gaurgero
-gaurgoitik
-legizkie
-legokizue
-legozkidake
-lehenbizi
-nindoakio
-publikotasun
-publizitate
-subsidiario
-substantibo
-sugestio
-superbalorazio
-taidun
-taldeburu
-Talent
-Teknografia
-xantxa
-xerbitor
-xerokopia
-zabaldura
-Zabalkor
-Zabaltza
-zabilzkieken
-zabilzkio
-zaharkote
-zeneritzeketen
-zenerra
-zenezagu
-zengozkigute
-zeniharduke
-zenioke
-zenioketez
-zeniraute
-zenizkien
-zenizkiguke
-Zintut
-Zintuzkedan
-isiltasun
-
-Слова с ошибками []
-abriсot [abrikot, abrigo]
-absenzia [absentzia]
-addikzio [adikzio, dikzio, adukzio, adizio]
-administraziozerbizu [administrazio-zerbitzu, administrazio-zuzenbide, administraziopean]
-bat-bates [bat-batez]
-bermagari [bermagarri, bermagailuari, bermagailuri, armagaberi, bermaguneari]
-cataluniar [kataluniar, catalunyar, kataluniera]
-dakarza [dakartza, dakarna, dakarzu]
-erdemin [erremin, erdimin, iminerdi]
-garatienetarikoa [garatuenetarikoa, ugarienetarikoa, gogoratuenetarikoa, argienetarikoa, aberatsenetarikoa]
-ishil [isil, istil]
-nindezaguane [nindezaguena, nindezaguan, nindezaguanez, nindezaguanek, nindezaguanen, nindezaguanei, nindezaguana, nindezagunan, nindezagutean, nindezagutenan, nindezaguzue]
-nintzainaken [nintzainanek, nintzainake, nintzainakeen, nintzainanen, nintzaiakeenen, nintzaiakeen, nintzakenanen, nintzaiekenan]
-summa [suma, susma, sumoa]
-technologiko [teknologikoko, teknologiko, terminologiko, etnologikoko]
-charmant [charmat, xarmant]
diff --git a/Common/3dParty/hunspell/test/dst/fr_FR.txt b/Common/3dParty/hunspell/test/dst/fr_FR.txt
deleted file mode 100644
index 9b4428ca52..0000000000
--- a/Common/3dParty/hunspell/test/dst/fr_FR.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-Bonjour
-Merci
-Oui
-Non
-S'il
-Excusez-moi
-Pardon
-Bien
-Mal
-Grosse
-Petit
-Beau
-Moche
-Fort
-Faible
-Chaud
-Froid
-Vite
-Lent
-Haut
-Bas
-Loin
-Près
-Heureux
-Triste
-Facile
-Difficile
-Simple
-Compliqué
-Bon
-Mauvais
-Nouveau
-Vieux
-Jeune
-Âgé
-Bienvenue
-Amitié
-Amour
-Famille
-Travail
-Maison
-Voiture
-Manger
-Boire
-Courir
-Marcher
-Nager
-Chanter
-Dormir
-Jouer
-Parler
-Écouter
-Regarder
-Lire
-Écrire
-Acheter
-Vendre
-Aller
-Venir
-Faire
-Dire
-Voir
-Savoir
-Apprendre
-Aimer
-Détester
-Partir
-Rester
-Arriver
-Revenir
-Partager
-Aider
-Aimer
-Ouvrir
-Fermer
-Manger
-Boire
-Avoir
-Être
-Pouvoir
-Vouloir
-Devoir
-Parler
-Écouter
-Rire
-Pleurer
-Danse
-Étudier
-Travailler
-Voyager
-Vivre
-Connaître
-Reconnaître
-Voyager
-Exister
-Choisir
-Donner
-Recevoir
-Aimer
-Oser
-Phénoménologie
-Électroencéphalographie
-Parallélépipède
-Anticonstitutionnellement
-Transsubstantiation
-Éclectisme
-Anachronisme
-Catéchuménat
-Démagogie
-Fructueux
-Ineffable
-Hypothèque
-Propriété
-Procrastination
-Complaisance
-Réminiscence
-Éthique
-Équinoxe
-Exponentiel
-Hétérogénéité
-Imbroglio
-Incorrigible
-Maelström
-Métaphysique
-Protagoniste
-Subliminal
-Verrouillage
-Volumétrique
-Énigmatique
-Époustouflant
-Immatériel
-Infini
-Polyglotte
-Recrudescence
-Prophylactique
-Symbiotique
-Vestibulaire
-Épistémologie
-Faramineux
-Géopolitique
-Hypnotique
-Inamovible
-Intemporel
-Labyrinthe
-Pacifiste
-Quémandeur
-Soporifique
-Ubuesque
-Volumineux
-Effervescence
-Électrophorèse
-Paradoxe
-Prorata
-Quadrupède
-Sarcophage
-Trigonométrie
-Vaccinologie [Carcinologie, Actinologie, Vaccinogène, Accidentologie]
-Xenophobe [Xénophobe, Technophobe]
-Zéphyr
-Génétique
-Labyrintique [Labyrinthique]
-Mégalo
-Nostalgie
-Omniprésent
-Pangramme
-Périlleux
-Quinquennat
-Rémunération
-Scolopendre
-Tautologique
-Utopiste
-Vexatoire
-Wolof
-Xanthine
-Yacht
-Zanzibar
-Axiomatique
-Chronométrer
-Dilettante
-Énervement
-Facétieux
-Générique
-Harmonique
-Illusoire
-Juridique
-Kabbaliste
-Longetivité [Longévité]
-Médiane
-Néologisme
-Oxygène
-Patronymique
-Quotidien
-Rétorique [Rétorque, Rhétorique, Rotorique, Ré torique, Ré-torique, Météorique, Torique, Théorétique, Théorique]
-Sémantique
-Tautologie
-Utopique
-Vaccinologie [Carcinologie, Actinologie, Vaccinogène, Accidentologie]
-Xénophobie
-Yachting
-Zoroastrisme
-Voager [Viager, Voyager, Ouvrager]
-Exisster [Exister]
-Chaiser [Chaires, Chaise, Chaisier, Chaises, Chasser, Chaise r, Chamoiser, Tchadiser]
-Doner [Toner, Zoner, Donner, Drone, Doser, Doter, Dorer, Douer, Doler, Doper, Dîner]
-Resevoir [Redevoir, Recevoir, Revoir, Reversoir, Ivoire, Voire]
-Aimmer [Aimer]
-Osero [Oser, Osera, Oser o, Rosser, Roeser, Rose]
-Phénoménollogie [Phénoménologie]
-Électraencéphallographie []
-Parallélépepède [Parallélépipède]
-
diff --git a/Common/3dParty/hunspell/test/dst/gl_ES.txt b/Common/3dParty/hunspell/test/dst/gl_ES.txt
deleted file mode 100644
index 74cc688633..0000000000
--- a/Common/3dParty/hunspell/test/dst/gl_ES.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-ola
-tipo
-Si
-non
-nonnr [nono]
-comida
-comidaa [comídaa, comidas, comida, comidan]
-auga
-augaa [áugaa, augas, auga, augaba, augada, augala, augara, augar]
-casa
-coche
-cochee [coches, coche, chochee, cachee, checo]
-un tren [oin tren]
-bicicleta
-escola
-escolaa [escóraa, escoala, escolas, escola, escálaa, escolla, escolma, escolar, escolta]
-niños
-pai
-paii [paio, pai, pii, aii, pali, pais]
-nai
-naii [nai, nii, aii, naif, nais, nazi]
-irmá
-irmán
-cachorro
-gato
-gatoo [gato, atoo, gateo, gatos]
-peixe
-peixee [peidee, peixes, peixe, peitee]
-aves
-avess [aveas, avesa, aves, avesas, avesos, vesas, aveso, aveces, escave]
-árbore
-flor
-herba
-o sol [ou sol]
-lúa
-o ceo [ou ceo, o ceou]
-chuvia
-neve
-vexa
-inverno
-primavera
-outono
-noite
-noite
-día
-unha semana [semanalmente]
-mes
-ano
-para ler [parable]
-escribir
-fala
-ensinar
-traballo
-durmir
-durmir
-correr
-vai
-senta
-estado
-para escoitar [parasitario]
-vexa
-escoita
-hai
-beber
-carne
-furtas
-verduras
-queixo
-pan
-auga
-zume
-café
-té
-leite
-aceite
-ovo
-sal
-impacienta
-azucre
-un bocadillo [oin bocadillo]
-cociña
-sala de estar [sala dei estar]
-dormitorio
-baño
-batela
-sofá
-lámpada
-fiestra
-a porta [aporta, portara, portador, porta]
-piso
-teito
-parede
-sofá
-alfombra
-baño
-afundir
-espello
-toalla
-cama
-manta
-almofada
-reloxo de alarma [riloxo de alarma, ríloxo de alarma, reiloxo de alarma, reloxo dei alarma, relouxo de alarma, reloxou de alarma, relollo de alarma]
-escritorio
-cadeira
-marabilloso
-adverbio
-obviamente
-Dominante
-residenciais
-convidado
-perigo
-cuestión
-deporte
-mina
-cordeiro
-cabeza
-tratar
-avogado
-intelixente
-guapo
diff --git a/Common/3dParty/hunspell/test/dst/hr_HR.txt b/Common/3dParty/hunspell/test/dst/hr_HR.txt
deleted file mode 100644
index 6ce3b0a071..0000000000
--- a/Common/3dParty/hunspell/test/dst/hr_HR.txt
+++ /dev/null
@@ -1,215 +0,0 @@
-boliestan [bolestan, obijestan]
-jyak [jak]
-slaby [slabu, slab, slaba, slabe, slabi, slabo]
-pameetan [pametan, pametna, napamet]
-gllup [glup]
-bezuspješhno [bezuspješno, bezuspješnih, bezuspješan, bezuspješna]
-besimeni [besi meni, besi-meni, bezimeni, besanim]
-bezuzban [bezuman, bezuba]
-blagastanje [blagostanje, blaga stanje, blaga-stanje, blagostanja, blistanje, oblaganje]
-bljeskovica [bljeskovima, bljeskovi, bljeskova, bljeskalica, bljeskavi]
-jabuka
-sunce
-voda
-kuća
-ptica
-kava
-kruh
-cvijet
-knjiga
-pas
-mačka
-grad
-zelen
-plav
-crven
-bijel
-crn
-velik
-malen
-brz
-spor
-sretan
-tužan
-vruć
-hladan
-nov
-star
-lijep
-ružan
-dobar
-loš
-zdrav
-bolestan
-jak
-slab
-pametan
-glup
-raditi
-jesti
-piti
-spavati
-čitati
-pisati
-govoriti
-smijati se [smijati]
-plakati
-pjevati
-igrati
-plesati
-učiti se [učiti]
-kupovati
-kuhati
-telefonirati
-gledati
-slušati
-hodati
-trčati
-letjeti
-plivati
-čitati
-pisati
-raditi
-imati
-biti
-ići
-doći
-otići
-dati
-uzeti
-reći
-vidjeti
-čuti
-osjetiti
-misliti
-htjeti
-moći
-morati
-rado
-nerado
-da
-ne
-molim
-hvala
-doviđenja
-oprosti
-zbogom
-zdravo
-čau [ča, ču, čađu, čaju, čamu, času, čađ, čaj, čak, čar, čas, ča u]
-ej
-da
-baš
-super
-glupost
-fantastično
-jasno
-tako
-zapravo
-možda
-lako
-teško
-prozračnost
-usplahirenost
-neoblomivost [neslomivom]
-prezir
-proigranost [prostranost, programiranosti, razigranosti, pristranost]
-uznemirenost
-besprijekornost
-besprizornost [besprizornom, besprizornoj, besprijekornost, besprizorni]
-nepredvidivost
-beznadnost
-promašenost [promašenosti, promašen, osiromašenom, raspršenost]
-protivljenje
-neizreciv
-bezizlaznost
-neuspjelost [neuspjeloj, neuspješnost, neuspjelog, neuspjelom]
-zbunjenost
-neodlučnost
-protivština
-nepovratnost [nepovratnoj, nepovratnom, nepovratna, nepovratnima]
-bezduhovitost [bez duhovitost, bez-duhovitost, duhovitostu, duhovitosti, duhovitosta, duhovitost]
-ravnodušnost
-prolaznost
-neobaveznost [neobaveznosti, neobaveznom, neobaveznoj, neobavezna, neobavezni]
-bezbrižnost
-nepovratnost [nepovratnoj, nepovratnom, nepovratna, nepovratnima]
-promašenost [promašenosti, promašen, osiromašenom, raspršenost]
-neprepoznatljivost [neprepoznatljivosti, ne prepoznatljivost, ne-prepoznatljivost, prepoznatljivosti, prepoznatljivost, neprepoznatljiva, neraspoznatljivosti]
-neukrotivost [neukrotivog, neukrotiv, neučtivost, neotuđivosti]
-bezobzirnost
-nevinost
-nestalnost
-nepostojanost
-bezizlaznost
-nepovratnost [nepovratnoj, nepovratnom, nepovratna, nepovratnima]
-prolaznost
-neodgovornost
-bezbrižnost
-nevolja
-nezadovoljstvo
-prolaznost
-bezuspješno
-bezimeni
-bezuzdan [bez uzdan, bez-uzdan, bezdan, bezdušan, beznadan]
-blagostanje
-bljeskavica [bljeskalica, bljeskavima, bljeska vica, bljeska-vica, bljeskavi, bljeskalici, bljeskava, bljeskalicu]
-boren [borne, obrne, bore, oboren, borbena]
-carovnija [otrovnija, darovnica]
-crpeža [crteža]
-dostojanstvo
-duhovitost
-egzaltacija
-gorkoća [gorkoga, gorkošću]
-histerija
-idila
-ironija
-izdaja
-janjetina
-kajanje
-kavana
-krhotina
-ljepljivost
-lukavstvo
-magnutizam [zategnutima, zamahnutima, izdignutima, vagnutima]
-melankolija
-misticizam
-naivnost
-nelagoda
-neraspoloženje
-obmana
-okrutnost
-opojenost [opojnost, obojenost, opojenoj, popunjenost, podvojenost, opčinjenost]
-prezir
-propast
-ravnodušnost
-sjenka
-skitnica
-spletka
-stid
-sudbina
-susret
-sudbina
-šapat
-tišina
-trepet
-utopija
-uzaludnost
-veličanstvo
-zaborav
-zanesenost
-zanos
-zavjera
-zbunjenost
-zluradost [zluradosti, zlu radost, zlu-radost, zlurad]
-zloslutnost [zloslutnoj, zloslutnom, zloslutnu, zloslutna]
-žargon
-žártva [žrtva]
-šaptanje
-čarobnost
-dileme
-hodočasće [hodočaste, hodočašće]
-lebdjeti
-iznimka
-preobilje [preobilne, preoblikuje]
-probuditi se [probuditi]
-surov
diff --git a/Common/3dParty/hunspell/test/dst/hu_HU.txt b/Common/3dParty/hunspell/test/dst/hu_HU.txt
deleted file mode 100644
index c925ed03d0..0000000000
--- a/Common/3dParty/hunspell/test/dst/hu_HU.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-Szorzótábla
-Réges-régen
-normálméret
-nemeslelkűség
-mindegyik
-milliós
-Mikroflóra
-Mezőgazdaságigép
-meséskönyv
-mennyiség
-Memória
-kártya
-kuráre
-Kurzor
-jégkorong
-jellemesség
-Javak
-irányzás
-iromány
-Inkluzíve
-hűtőedény
-hőmérséklet
-hír
-hétszázas
-hátrány
-háromszáz
-Hintó
-generátor
-gavallérság
-explozíva
-eső
-esdeklés
-epilógus
-Energia
-Előélet
-előterjesztés
-előnézet
-elvonás
-elszigetelés
-ellátmány
-Elevátor
-egynémelykor
-egyenlőség
-eddzenek
-dzsungel
-ananász
-akvárium
-Szépül
-Sztorizik
-szobroz
-szimbolizál
-szemlélődik
-sugdolózik
-majmol
-Macskáz
-Létesít
-Lokalizálódik
-litografál
-levelesedik
-lepet
-közömbösít
-kételkedik
-kivirágoz
-kerekez
-kedvez
-járkál
-jegyzőkönyvez
-iskolázik
-individualizál
-csendesít
-borsoz
-billentet
-bajmolódik
-anyagozik
-alkonyodik
-Aktualizál
-színes
-szemelt
-lassú
-hatékony
-hasznos
-gyúlékony
-gyári
-abszurd
-örökjog
-öregkor
-ömlő
-Zászlaj [Zászlajú, Zászlaja, Zászlai, Zászlóalj]
-Zseblámpa
-regényirodalom
-realitás
-raktárhelyiség
-pötty
-pótlék
-pótdíj
-pályafutás
-Promóció
-Processzus
-poloska
-pernye
-pediáter
-parancsnoklás
-
-Слова с ошибками []
-sponzorálás [szponzorálás, szponzorál, zongorálás]
-mihamarábiak [mihamarábbiak, mihamarabbiak, mihamarábbi, hamarábbiak, mihamarább]
-idohatár [időhatár]
-hypnotizmus [hipnotizmus, nepotizmus]
-departement [département]
-légiesul [légiesül, légiósul]
-kutagat [kutatgat, kutazgat, kutasat, kutakat, kutadat, kutamat, kútagát, kútágat, kútágát, kutat]
-költségtakkarékos [költségtakarékos, költségtakarékkos, költséghatékony]
-redukzió [redukció, redukáló]
-pilanatfelvétel [pillanatfelvétel, pialantfelvétel, adatfelvétel]
diff --git a/Common/3dParty/hunspell/test/dst/id_ID.txt b/Common/3dParty/hunspell/test/dst/id_ID.txt
deleted file mode 100644
index 2d95d3b740..0000000000
--- a/Common/3dParty/hunspell/test/dst/id_ID.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-acang-acang
-Adiksi
-Adventisius
-Advokat
-afirmatif
-agroindustry [agroindustri, nonindustri]
-agrisilvikultur
-akhir-akhir
-akomodatif
-aksi
-aljabar
-anggul
-anotasi
-antusiasme
-apoteker
-bahagia
-bakat
-bangkang
-Bankir
-Barikade
-bebaru
-belar
-beleid
-bencana
-bentangur
-beritawan
-besuk
-bilingualisme
-Cecak
-Celempong
-cencawan
-cengkar
-ceremai
-cermin
-cudang
-Dampal
-dampan
-dansa
-datung
-debitur
-defensi
-defisit
-demper
-dendang
-Derivasi
-Desember
-deskripsi
-diskotek
-diskusi
-distansi
-dragon
-dramatisasi
-Eksamen
-Eksistensi
-eksperimen
-ekstensifikasi
-ekuitas
-elektron
-gelut
-Geofisikawan
-Gerbang
-gerempang
-influenza
-Informasi
-Inisiator
-insekta
-institusional
-instruksional
-jelajah
-Kamrad
-Kapilaritas
-kapster
-kardiovaskular
-karismatik
-keranjingan
-komunal
-Limitatif
-Linguistik
-lintang
-masabodoh [masa bodoh, masa-bodoh, mastodon]
-matematikus
-medisinal
-Melankolia
-Memorabilia
-nasional
-nasionisme
-Panen
-pangkek
-peranti
-perian
-persekusi
-perunjung
-regenerasi
-reglementer
-robotika
-runjang
-Sabtu
-Simbang
-simpati
-tebing
-topi
-Unggal
-unsuri
-urbanisasi
-variabel
-wahana
-warganegara [warga negara, warga-negara, negarawan, antarnegara, mancanegara, waranggana]
-
-Слова с ошибками []
-Abonement [Abonemen, Bombardemen]
-Abcente [Absente, Centet]
-ambivalan [ambivalen, ambilan, ambalan]
-bakteriostatic [bakteriostatik, bakteriolisis]
-cekaw [cekat, cekak, cekau, cekam, cekal, cekah, kacek]
-darmavisata [darmawisata, darmatirta, mandataris]
-declarasi [deklarasi, deflagrasi]
-duplex [dupleks]
-ecozona [ekozona, eco zona, eco-zona]
-gempur-mengempur [gempur-menggempur, gempul-gempul]
-jejengok [jejengkok, jengkeng]
-transitive [transitif, transvetisme, transit, transisi]
diff --git a/Common/3dParty/hunspell/test/dst/it_IT.txt b/Common/3dParty/hunspell/test/dst/it_IT.txt
deleted file mode 100644
index 5b9d3363bd..0000000000
--- a/Common/3dParty/hunspell/test/dst/it_IT.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-Ciao
-Ciaoo [Ciao, Ciano, Ciao o, Ciocia]
-Buongiorno
-Buonasera
-Buonassera [Buonasera, Buon assera, Buon-assera, Buonalbergo]
-Grazie
-Prego
-Arrivederci
-Buonanotte
-Scusa
-Per favore [Favorevole]
-Amore
-Amico
-Famiglia
-Casa
-Città
-Strada
-Montagna
-Montaga [Montagna, Montata, Montana, Montala, Montava, Montaggi, Montaguto, Montano, Montato]
-Mare
-Sole
-Luna
-Stelle
-Giorno
-Notte
-Colazione
-Clazione [Colazione, Coazione, Cl azione, Cl-azione, Clonazione, Collazione, Clorazione, Chelazione]
-Pranzo
-Cena
-Acqua
-Vino
-Caffè
-Pane
-Formaggio
-Pasta
-Pizza
-Gelato
-Dolce
-Salato
-Frutta
-Verdura
-Carne
-Pesce
-Pollo
-Uovo
-Sale
-Pepe
-Olio
-Burro
-Zucchero
-Latte
-Yogurt
-Insalata
-Zuppa
-Bistecca
-Prosciutto
-Parmigiano
-Biscotti
-Cioccolato
-Spagggrhetti [Spaghetti, Spaghetteria]
-Spaghetti
-Lasagne
-Risotto
-Gnocchi
-Penne
-Ravioli
-Cannelloni
-Pesto
-Caprese
-Limoncello
-Espresso
-Cappuccino
-Tiramisù
-Panna cotta [Panbiscotto]
-Cannoli
-Panettone
-Brioche
-Focaccia
-Foacdccia [Focaccia]
-Crostini
-Arancini
-Antipasto
-Primo piatto [Rimpiattato, Primariato, Rimpiatto, Rimpatriato]
-Secondo piatto [Attosecondo]
-Contorno
-Pane tostato [Tostapane]
-Marmellata
-Accoglienza
-Affascinante
-Aggressività
-Alleviare
-Appassionato
-Armonioso
-Autonomia
-Autovfnomia [Autonomia, Autotomia]
-Barbarie
-Beneficiare
-Bizzarro
-Burocrazia
-Cambiamento
-Capriccioso
-Cautela
-Commemorare
-Comportamento
-Conseguenza
-Controverso
-Coraggioso
-Debolezza
-Decisivo
-Delizioso
-Desiderare
-Destrezza
-Determinato
-Determin [Determina, Determini, Determino, Determinò, Termine]
-Difficoltà
-Disponibilità
-Divertimento
-Eccentrico
-Efficienza
-Elettrizzante
-Emergere
-Empatia
-Energia
-Equilibrio
-Esperienza
-Fantastico
-Fenomenale
-Generosità
-Gratitudine
-Immaginazione
-Impressionante
-Impressiante [Impressi ante, Impressi-ante, Impressionante, Impressionate, Imprestante, Impressioniste]
-Indipendenza
-Ingenuità
-Innovazione
-Intelligenza
-Intensità
-Intrigante
-Ispirazione
-Instabilità
-Irresistibile
-Leggenda
-Libertà
-Luminoso
-Magistrale
-Malinconia
-Meraviglioso
-Metamorfosi
-Miracolo
-Misterioso
-Nostalgia
-Opportunità
-Originalità
-Passione
-Pericoloso
-Prestigioso
-Prodigioso
-Prospettiva
-Raffinato
-Rafinato [Raffinato, Rapinato, Affinato, Trainato, Raffrenato, Raffilato]
-Ricchezza
-Rispettoso
-Sensibilità
-Sorprendente
-Spontaneità
-Spontaneita [Spontaneità, Spontaneista]
-Stravagante
-Suggestivo
-Surreale
-Tenerezza
-Trasformazione
-Unicità
-Vibrante
-Vittoria
-Volontà
-Amicizia
-Avventura
-Bellezza
-Calma
-Danza
-Eleganza
-Felicità
-Gioia
-Incanto
-Magia
-Natura
-Odore
-Passatempo
-Quotidiano
-Relax
-Serenità
-Tesoro
-Umorismo
-Vacanza
-Zelo
-Avventuriero
-Speranza
-Risate
-Armonia
-Incanto
diff --git a/Common/3dParty/hunspell/test/dst/kk_KZ.txt b/Common/3dParty/hunspell/test/dst/kk_KZ.txt
deleted file mode 100644
index 3547d29f05..0000000000
--- a/Common/3dParty/hunspell/test/dst/kk_KZ.txt
+++ /dev/null
@@ -1,209 +0,0 @@
-сөз
-адам
-қала
-тау
-ауа
-су
-аспан
-жер
-бала
-ата
-ана
-тамақ
-кітап
-ұстаз
-оқу
-тұтыну
-тыныш
-тұз
-ауру
-денсаулық
-топ
-маусым
-төс
-көз
-жүрек
-сарғыш
-көп
-аз
-ертең
-түн
-түс
-жас
-қара
-ақ
-көк
-қызыл
-шай
-салт
-ыстық
-суық
-қазақ
-жеті
-он
-жүз
-мың
-бір
-екі
-үш
-төрт
-бес
-алты
-жеті
-сегіз
-тоғыз
-он
-бақша
-бұлақ
-қиыр
-досым
-ақша
-патша
-таң
-кеш
-тауар
-күн
-апат
-риза
-ауырсыну
-орман
-жаңбыр
-бауыр
-жел
-тұман
-үй
-бұлақ
-көше
-айнала
-шайыр
-тағам
-сусын
-топ
-бас
-әрекет
-тіл
-кеме
-сиыр
-қой
-ешкі
-шөп
-ит
-тұқым
-қарындаш
-апа
-ана
-әке
-дала
-тарлау
-дәуір
-таңдай
-жыл
-басқарушылар
-басқарушшылар [басқарушылар, басқарушы, басқармасылар, басқаруғалар, бақылаушыларлар]
-жауапкер
-ерекшеліктерімендерге
-тұмылдырықтатқыздан
-білімділігінге
-білімдарды
-алалықсыздар
-айырмашылықтарын
-тұрақтандырып
-сылтауратқандарыңызды
-қолдар
-байланысқадан
-жетілдірілген
-зарарсыздандырады
-ескеріп
-ескеріпп [ескеріп, ескеріпі, ескеріле]
-міндеттемелеріндерге
-кезеңдердің
-себепсіздік
-біреудейлер
-беделілерің
-кездестіріңіз
-шектердің
-көңіл
-көңл [көң, көл, көңіл, көңі]
-мол
-алайда
-мәселе
-мәселеу [мәселе, мәселең, мәселен, мәселес, мәпелеу, мәуелеу, мәселем, мә селеу, селеу]
-сендің
-келер
-келерр [келер, керлер, келері, кереле, еркеле, кермеле, келекеле]
-кәне
-көпір
-күндіз
-сана
-белгілер
-дайын
-ез
-қайшы
-саф
-рең
-шақ
-үміткер
-бақыт
-бақытт [бақыт, бақытта, бақытты, бақырт, бақыты]
-республика
-консервациялау
-мемлекеттік
-тағатсыздан
-адамда
-бәрі
-бең
-беңр [бең, бер]
-жасағанда
-жасағоанда [жасағанда, жасалғанда, жасасқанда, жасаманда, жасақанда]
-жабайылық
-заманда
-көшірдік
-мерейі
-Мерейій [Мерейі, Мерейің, Мерейім, Мерейлі, Мерей, Мейір]
-мөлшерсіздікк [мөлшерсіздік, өлшемсіздік, мөлшерсіз, өлшеусіздік]
-мөлшерсіздік
-пенді
-тылда
-мәртебесімен
-аппаратпен
-тегінді
-кездеме
-ересектік
-көңілсіздік
-тәуекелсіздік
-қанағатсыздық
-ғаділетсіздік
-сайдақы
-басым
-тәжікеден
-тұрғын
-қонақ
-қауіпсіздік
-қадірсіздік
-білгішсінбейсіңдер
-талқандас
-кешікті
-қоздырғышы
-бас
-емдейсіңдер
-құқылы
-тақылет
-әдемі
-көткеншектейсіңдер
-әжет
-қайтар
-белсену
-түсінбеймін
-жағымсыздық
-сыздар
-мәртебесі
-тұрғыны
-мезгіл
-әлбетте
-барысын
-оқылған
-безге
-жаса
-аламаңдайсыңдар
-кереметті
-епетейсіздік
diff --git a/Common/3dParty/hunspell/test/dst/ko_KR.txt b/Common/3dParty/hunspell/test/dst/ko_KR.txt
deleted file mode 100644
index 5d30797f0c..0000000000
--- a/Common/3dParty/hunspell/test/dst/ko_KR.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-안녕하세요
-감사합니다
-사랑해요
-미안합니다
-음식
-친구
-가방
-집
-학교
-컴퓨터
-물
-밥
-책
-산
-바다
-날씨
-일
-노래
-치킨
-반찬
-꽃
-숙제
-가족
-아이
-게임
-영화
-생일
-시간
-동물
-여행
-차
-쇼핑
-추천
-대화
-전화
-사진
-운동
-잠
-병원
-음료수
-능력
-주말
-전자기기
-고양이
-강아지
-바나나
-가을
-겨울
-봄
-여름
-옷
-신발
-지하철
-택시
-버스
-비행기
-샴푸
-브러시
-삼계탕
-국수
-불고기
-된장
-김치
-먹다
-마시다
-보다
-듣다
-놀다
-하다
-가다
-오다
-서다
-늦다
-일어나다
-자다
-빨갛다
-파랗다
-노랗다
-녹색
-보라색
-맛있다
-시원하다
-덥다
-추운
-기분
-슬프다
-즐겁다
-정신이
-바쁘다
-참새
-나비
-병아리
-돌
-물고기
-향신료
-시장
-기차
-공원
-해변
-지갑
-병원
-대학
-교통
-공항
-천재
-연구
-일본
-중국
-사업
-지식
-성격
-자금
-기술
-정부
-전략
-협력
-혁신
-경제
-철학
-신체
-영감
-현상
-역사
-태양
-설명
-사회
-환경
-자연
-현실
-존경
-정확
-장애
-낙관
-발전
-절망
-일상
-소멸
-도전
-반복
-포기
-파괴
-혁혹 [현혹, 혈족]
-소외 [쇠오, 소아, 시외, 소오, 소에, 소의, 소와, 소요, 소유, 소위, 소야, 소되, 소뇌, 소 외, 소외감]
-식민지
-혐오
-출산
-행복
-불평
-판매
-위험
-안녕하ㅎ요 [안녕하다]
-감사합ㅅ다 [감사하다, 감사하여가다, 감사해가다]
-사랑ㄱ해요 [사랑해요, 사랑해내요]
-미안ㅎ합니다 [미안합니다, 미안한체합니다, 미안할만합니다, 미안해갑니다, 미안하여갑니다]
-친ㅔ구 [친구]
-가ㅎ방 [가방, 감방]
-
diff --git a/Common/3dParty/hunspell/test/dst/lb_LU.txt b/Common/3dParty/hunspell/test/dst/lb_LU.txt
deleted file mode 100644
index 37c698dbc9..0000000000
--- a/Common/3dParty/hunspell/test/dst/lb_LU.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-Aarbecht
-Aarbechtszäitorganisatioun
-Aartgenoss
-Abenteuer
-abrëll [Abrëll, brëll]
-absence [Absence]
-Abusives
-Abzebillercher
-Acquéreur
-Adjointeë
-Affischéiertes
-Airbussen
-Alldeegleches
-Angschtzoustä
-Basketballspiller
-Baufirme
-bauren [Bauren, bauen, brauen]
-bekanntes
-Beleg
-Berodung
-Bewältegung
-Datentransfer
-Dateschutz
-Decisives
-Donneschden
-Drangsaléiertes
-Dränk
-Giischtgen
-Grondlag
-grondreegel [Grondreegel, grondleeënd]
-Géies
-Handelsdag
-hausaufgab [Hausaufgab, ausbaufäheg]
-hierschtdag [Hierschtdag, hierarchescht]
-Häerzi
-Industriell
-Infrastrukturelles
-Interessi
-Internetfore
-Intervall
-Kamell
-Kantoner
-Karamell
-Klenges
-Nopeschhaus
-Motors
-Muer
-Muerenter
-Musek
-Nettoverméige
-niess [miess, Niess, iess, giess, Siess, Fiess]
-Protektioun
-Prouf
-Provisioun
-Prozessor
-Präis
-Präsens
-Sanitäres
-Schauspiller
-Schema
-Taxatioun
-Telefonsgespréich
-termingrë [Termingrë, verminnte]
-terrass [Terrass, zerrass]
-Textdatei
-Textsprooch
-Titulaire
-Titel
-erausféieren
-erausjoe
-gëeicht
-onglécklecherweis
-unzesammelen
-unzespille
-Approvisionnement
-
-Сложные слова []
-Aktiegesellschaft
-Aktivitéitsdéclaratioun
-Alarmstëmmung
-Allgemengverständleches
-Bankenoperatioun
-Bensinsreserven
-Besteierungsofkommes
-Diskriminéierungsmoossnam
-Dokumentatiounsaarbecht
-Haaptrecommandatioun
-Héchstgeschwindegkeet
-Héichproblematesches
-Hëllefsdéngscht
-Integratiounsméisseges
-Iwwersetzungsprogramm
-Kapitaliséierungsdimensioun
-Museksinstrument
-Publicitéitsmarché
-Transportproblem
-
-Слова с ошибками []
-Abonnnement [Abonnement, Joresabonnement, Abonnenti, Abonnent, Agebonnent]
-Accomodéiertes [Accommodéiertes, Accommodéiert, Accordéiertes, Accommodéiers]
-Agrarcenter [Agrarzenter, Agrozenter]
-Begrennung [Begrënnung, Begrenzung, Benennung, Verbrennung, Begrenzen, Trennung]
-Berodunszentren [Berodungszentren, Berodungszentre, Berodungszentr, Berodungszenter]
-Deeluung [Deelung, Andeelung, Opdeelung, Verdeelung, Zelldeelung]
-Dialogue [Dialoge, Dialog]
-Dictaten [Diktaten, Dichten]
-Inspektor
-Iwereileges [Iwwereileges, Iwwereilegtes, Iwwereileg, Iwwerfälleges]
-Pedagogik
-Televisionschaîn [Televisiounschaîn, Televisiounsgeschäft]
-Bechäftegungsméiglechkeet [Beschäftegungsméiglechkeet]
-Gläicheetspolitik [Gläichheetspolitik, Sécherheetspolitik, Gesondheetspolitik, Geschäftspolitik, Dechetspolitik]
-Musekheichschoul [Musekhéichschoul, Museksschoul]
-Satelliten [Satellitten, Satellitte, Satellit]
-Addressbichelchen [Adressbichelchen, Reklammbichelchen]
-Aarbechtsfield [Aarbechtsfeld, Aarbechtsgefier, Aarbechtsblieder, Aarbechtsatelier, Aarbechtsalldag]
-
-
diff --git a/Common/3dParty/hunspell/test/dst/lt_LT.txt b/Common/3dParty/hunspell/test/dst/lt_LT.txt
deleted file mode 100644
index 09068f6d85..0000000000
--- a/Common/3dParty/hunspell/test/dst/lt_LT.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-Abstraktus
-šachmatai
-žadintoja
-agurkas
-Aikštė
-Akinukai
-akmuo
-šakoti
-aktualinti
-aktorius
-šalinis
-šaltinis
-bernystė
-beskuo
-būgnelis
-Bilietas
-bilingvizmas
-daržavietė
-Darbadienis
-Darbas
-darbuotoja
-dargi
-daržinė
-daugintoja
-Daugiaveiksmis
-delnė
-įdelnis
-detalizuoti
-šerdelė
-erdvėti
-šeriškas
-šeštadienis
-etiketas
-Evoliucija
-fabrikantė
-Fantastika
-Fenomenas
-fikusas
-gaudinėti
-gausėja
-gūbrinti
-geležis
-geležtė
-gelsvis
-geranoris
-Gertys
-gerviukas
-giesmininkė
-Gikas
-Goža
-griaustinis
-grįžinys
-gėrioja
-griozdas
-grizijo
-gryčia
-grožėja
-grįžti
-grupė
-gąstauti
-Jaukas
-jodinėjo
-jodyti
-keturnagis
-Kiaušina
-Kiaurymė
-kiausta
-kietakaktis
-ūkiškas
-kilimėlis
-kilometrinis
-ūkininkaitė
-ūkinis
-krykti
-lapuotis
-laukas
-laupti
-laužtė
-Maudulys
-Maumedis
-mažutėlis
-mazgotuvė
-mechanikė
-medeinė
-medikamentinis
-meduolinis
-Nūdien
-nebrendėlė
-Negu
-neiginys
-parudenys
-pasakotojas
-pasausė
-pasieninis
-paskyriui
-paslapčiom
-Pasodas
-Pat
-Pataikūniškas
-patarška
-patentinis
-proskyna
-protekiniais
-provizoriškas
-rėkčioti
-rūmas
-rodyklinis
-Romanistas
-Skylmatis
-Skyriklis
-skolininkas
-skraidžioja
-skruzdėda
-skėtrus
-
-Слова с ошибками []
-Abbreviatūra [Abreviatūra, Klaviatūra]
-alpinismas [alpinsimas, alpinimas, alpinistas, alpinizmas, alpinistinis, alpinistini, alpinamas, alpinariumas]
-amortizacia [amortizacija, amortizacini, amortizavo, amortizuoti]
-daugiamžis [daugiaamžis, daugiaamži, daugiamatis, daugiametis, daugiažiedis]
-deziderativinis [dezideratyvinis, dezideratyvini, prezidentinis, rezidentinis]
-generazija [generacija, energija]
-keturiasdešimtūkstantas [keturiasdešimttūkstantas, keturiasdešimttūkstanta, aštuoniasdešimttūkstantas, šešiasdešimttūkstantas, aštuoniasdešimttūkstanta]
-krivuluoja [krivuliuoja, kreivuliuoja, kultivuoja]
-Šnaukstai [Šnaukštai, Niaukstai, Šniauktai, Šniaukštai, Auksintai]
-pazintinis [pažintinis, parazitinis, pantinis, patentinis, panteistinis]
-progresa [progresai, progresas, progreso, progrese, progresu, progresą, progresų, progresavo, progresija]
diff --git a/Common/3dParty/hunspell/test/dst/lv_LV.txt b/Common/3dParty/hunspell/test/dst/lv_LV.txt
deleted file mode 100644
index 6cd9ccc2a0..0000000000
--- a/Common/3dParty/hunspell/test/dst/lv_LV.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-Sveiks
-Sveikks [Sveiks, Sveikas, Sveikās, Sveikts, Sveikus, Sveikos, Sveikt, Saveiks, Ieveiks, Veiks]
-Labrīt
-Lbrīt [Larīt, Lorīt, Labrīt]
-Paldies
-Paldiess [Paldies, Paliess, Palaidies]
-Lūdzu
-Luzu [Lizu, Ludzu, Auzu, Zuzu, Guzu, Lauzu, Lupu, Lubu, Lugu, Lūzu, Luču]
-Atvainojiet
-Atvainvfojiet [Atvaimanājiet]
-Prieks
-Perieks [Peries, Prieks, Persiks]
-Draugs
-Dravfugs [Draugs]
-Ģimene
-Gimene [Ķimene, Ģimene]
-Māja
-Maja [Maija, Paja, Raja, Laja, Maža, Maka, Mija, Mana, Masa, Māja, Mata, Maša, Maza, Mala]
-Pilsēta
-Pilseta [Pilsēta, Pil seta, Pil-seta, Piebilsta]
-Ceļš
-Ceļšs [Ceļš, Ceļošs, Ceļas, Ceļus, Ceļos]
-Kalns
-Jūra
-Sauls [Auls, Kauls, Rauls, Pauls, Salus, Sauks, Sals, Saules, Sakuls, Saulēs, Saguls, Sulas, Salsu, Sauli, Sauss]
-Mēness
-Zvaigznes
-Diena
-Nakts
-Brokastis
-Pusdienas
-Vakariņas
-Vīns
-Kafija
-Maize
-Siers
-Makaroni
-Pica
-Saldējums
-Deserts
-Sāļš
-Augļi
-Dārzeņi
-Gaļa
-Zivis
-Vistas
-Ola
-Sāls
-Pipari
-Eļļa
-Sviests
-Cukurs
-Piens
-Jogurts
-Salāti
-Zupa
-Salds
-Šokolāde
-Spageti
-Rīsi
-Kakao
-Biezpiens
-Kūka
-Tēja
-Karalis
-Zelts
-Ezis
-Tulpe
-Lācis
-Kaķis
-Suns
-Putns
-Vārna
-Zaķis
-Pele
-Ābols
-Aita
-Zirgs
-Lauva
-Pūķis
-Lasis
-Vilks
-Vējš
-Uguns
-Ūdens
-Zeme
-Debesis
-Saule
-Rūpniecība
-Aizkustinošs
-Izdzīvošana
-Nepieciešamība
-Atbildība
-Lieliski
-Apmierināts
-Neparasts
-Izglītība
-Sarežģīts
-Atsevišķs
-Pamatots
-Organizācija
-Sadarbība
-Efektīvs
-Daudzveidīgs
-Novērtēt
-Pārsteidzošs
-Inovatīvs
-Vērtība
-Aizraujošs
-Nopietns
-Komunikācija
-Māksla
-Dzīvība
-Ekskluzīvs
-Tehnoloģijas
-Rezultāts
-Atbalsts
-Nodrošinātība
-Pārbaudīt
-Radošs
-Sociāls
-Izteiksmīgs
-Brīvība
-Pieredze
-Ietekme
-Pārmaiņas
-Drosmīgs
-Racionāls
-Empātija
-Izpratne
-Risinājums
-Iespējas
-Atklāts
-Vadošais
-Eksperimentāls
-Neatkarība
-Tīrība
-Samierināšanās
-Motivācija
-Harmonija
-Dinamisks
-Iedvesma
-Izglītojošs
-Komplicēts
-Pieejamība
-Sadarbība
-Tūlītējs
-Saprotams
-Neizsakāms
-Lieliskums
-Inovācijas
-Aizrautība
-Pārdomas
-Sapratne
-Rezultatīvs
-Iespējams
-Pārbaude
-Sociālais
-Izteiksme
-Brīvība
-Pieredzējis
-Ietekmīgs
-Pārmaiņu
-Racionāla
-Izpratni
-Risinājumi
-Iespējams
-Atklāta
-Vadošā
-Eksperimentāla
-Neatkarība
-Tīra
-Motivējošs
-Harmonisks
-Dinamika
-Iedvesmojošs
-Spēks
-Mīlestība
-Pasaule
-Daba
-Skaistums
-Miers
-Sapnis
-Prieks
-Rītausma
-Brīnums
-Izcils
-Saikne
-Dzirksts
-Pārmaiņas
-Atbalsts
-Izcilība
-Satriecošs
-Dzīvīgums
-Pārveidošana
-Uzdrīkstēšanās
-Uzticamība
-Ieguldījums
-Vērtība
-Līdzsvars
-Saskaņa
-Izsmalcinātība
-Pateicība
-Atzinība
-Pārsteigums
diff --git a/Common/3dParty/hunspell/test/dst/mn_MN.txt b/Common/3dParty/hunspell/test/dst/mn_MN.txt
deleted file mode 100644
index b590811bfc..0000000000
--- a/Common/3dParty/hunspell/test/dst/mn_MN.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-Баатар
-Багаа
-Базар
-Барра
-Бат-Очир
-Баттуул
-Батхэсэн
-Баярмаа
-Билгэх
-Бор
-Бөөнцагаан
-Бүрэнхайрхан
-Бямбагар
-Бэх
-Гарам
-Гантиг
-Гурвантэс
-Гүр
-Гэрэлтуяа
-Давст
-Дангаа
-Дансран
-Дарь-Эх
-Дөргөн
-Дундбүрд
-Дэмүүл
-Дэлгэрцэцэг
-Жавзан
-Жарантай
-Заглул
-Зүүнхөвөө
-Кир
-Корона
-Лүн
-Лха
-Лхаваан
-Майхан
-Манлай
-Мөндөөхөө
-Мөнхөт
-Мөрөн
-Мөнххаан
-Мөст
-Мэгэд
-Мухар
-Найдалмаа
-Найтингейл
-Налайх
-Нарантуул
-Намтай
-Насантогтох
-Номин
-Нямсамбуу
-Нэүдэй
-Орог
-Очир
-Өнөржаргал
-Өөдөс
-Өргөн
-Паган
-Пас
-Пүрэвдорж
-Пүрэвхүү
-Сайнаа
-Сайхандулаан
-Сундуй
-Сэлх
-Сүүж
-Сээр
-Тайван
-Тарав
-Тогтуун
-Төрболд
-Төхөм
-Төмөр
-Түргэн
-Түшиг
-Түгтөмөр
-Түшиг
-Удвал
-Улиастай
-Улаандэл
-гүедэцгээчих
-дэвхэрлүүлсхийчих
-дэвхэлцгээчих
-дэвшигдүүлгэчих
-дэвшилцчих
-дэвээ
-дэггүйчүүд
-наламгардуулалц
-налбаруулзна
-
-Слова с ошибками []
-Батарчулуун [Баатарчулуун, Батар чулуун, Батарч улуун]
-Баруунхарааа [Баруунхарааг, Баруунхараа, Баруунхараагаа, Баруунхараад]
-Даважаргал [Даваажаргал]
-Дөрволжин [Дөрвөлжин]
-Мягмараран [Мягмараар, Мягмарнаран]
-Оюунтулхуур [Унтуурхуул]
-оторчилсхилгэ [оторчилсхийлгэ, оторчилсхийчих, оторчилсхий, отогчилсхийлгэ, хорчилсхийлгэ]
-Асрамжлулгацгаачих [Асрамжлуулгацгаачих]
-гүентүүлгэцгэээ [гүентүүлгэцгээе, гүентүүлгэцгээ, гүентүүлгэцгээгээ, гүентүүлгэцгээж, гүентүүлгэцгээн, гүентүүлгэцгээнэ, гүентүүлгэцгээв, гүентүүлгэцгээг, гүентүүлгэцгээх, гүентүүлгэцгээм]
-наладаадуулга [налдаадуулга, наадалдуулгаа, наадалдуулга, налдаадуулцгаа, наадамдуулгаа]
diff --git a/Common/3dParty/hunspell/test/dst/nb_NO.txt b/Common/3dParty/hunspell/test/dst/nb_NO.txt
deleted file mode 100644
index 37cb4b46e6..0000000000
--- a/Common/3dParty/hunspell/test/dst/nb_NO.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-Bahamasøyene
-Festarrangement
-Festarrangemang [Festarrangement, Festarrangør, Fellesarrangement, Storarrangementa]
-Festival
-festligheta
-festnummer
-forhandlernett
-forgylle
-fotballstyre
-Fotgå
-fotoamatørene
-Fotogalleri
-fotokopiere
-generalkostnadene
-generaltabbe
-generøs
-Generell
-genmodifisertst
-handlingsresymeet
-hardhet
-Harmfull
-hastighetsregulering
-havbanke
-havforskningsundersøkelsene
-informasjonsutveksling
-Infrarødest
-kaffeautomat
-kaldslig
-kalenderåra
-kjekk
-kjendisstoffa
-kjærlighetslyrikk
-kjøkken
-Kontantautomat
-kontantlån
-kontrahere
-kontraheringsplikt
-Låskasse
-læregutt
-læreprosess
-Museums
-museumssamling
-musikkorps
-myggstikka
-myndighetsaldere
-omløpstider
-omregn
-områdeplan
-omriss
-omsetningsgjeld
-omsjaltning
-omsetningsvolumer
-omslutning
-omslyngning
-omsonst
-omstendeligheta
-Omstart
-Omstreifende
-Omsyn
-omtåketheta
-oppdagelse
-oppbygning
-oppebære
-oppfølgingsapparat
-oppgjørsbank
-oppgjørsblankett
-opphøringene
-partisipere
-randverdi
-rapportskriver
-rasjonalisering
-Rate
-selsak
-selskapsinntekt
-selskapsoverskudd
-selvbetjeningene
-snabbingene
-Snadderene
-Sytti
-søkekriterium
-søkemulighetene
-søkeargumenter
-søkingen
-søkne
-sølvlaga
-sørlandsk
-søtningene
-tabellrad
-Tabellkolonne
-Takhalm
-taksene
-takseringssystema
-tal
-trolsk
-trosinnholdene
-utfoldelsesmuligheta
-Utformingsmetode
-Utgift
-vekstfaktor
-vekstforhold
-
-Слова с ошибками []
-Arbeidstagerorganisasion [Arbeidstagerorganisasjon, Arbeidstakerorganisasjon, Arbeidsgiverorganisasjon, Sosialarbeiderorganisasjon, Arbeiderorganisasjon]
-festsprel [festsprell, festsprek, festsprelt, festspell, feltprest, fengselsprest]
-forhandlingsdirektor [forhandlingsdirektør, forhandlingssekretær, forhandlingstekniskere, forhandlingstaktiskere, forhandlingskontor]
-handlingforløpa [handlingsforløpa, handling forløpa, handling-forløpa, handlingsforløp, lønnsforhandlinga, lønnsforhandling, forhandlingspart]
-kjempeflinktt [kjempeflinkt, kjempeflinkest, kjempeflink, kjempeflott, kjempefint]
-lanetilbud [lånetilbud, langetilbud, landetilbud, linetilbud, laketilbud, langtilbud, lagetilbud, landtilbud, danetilbud, lunetilbud, vanetilbud, fanetilbud, banetilbud, hanetilbud, kantinetilbud]
-omraming [omramming, omringing, omringning, ramming, omring]
-omsvøpssfull [omsvøpsfull, omsvøpslaus]
-raportmateriale [rapportmateriale, kartmaterialer, kartmateriale, programmateriale, skrapmateriale]
-serstilt [særstilt, ser stilt, ser-stilt, seerstilt, tverrstilt, storstilt, lederstil, stiliser]
-taksamst [takksamst, takksamt, takksam, samletakst, samstav]
diff --git a/Common/3dParty/hunspell/test/dst/nl_NL.txt b/Common/3dParty/hunspell/test/dst/nl_NL.txt
deleted file mode 100644
index ce7cdbafcc..0000000000
--- a/Common/3dParty/hunspell/test/dst/nl_NL.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-Advertentie
-Advocate
-affirmatie
-afgevaardigd
-afneemster
-allerbekendst
-alternatieveling
-annulering
-anticycloon
-Backtrackroute [Jacktrackroute, Backtrackrouten, Baktrackroute, Backtrackroute-, Backtrack-route, Back-trackroute, Backtrackroutes]
-Bearbeiden
-becijfer
-bediening
-bedrag
-beduiden
-beïnvloeding
-benadeling
-bepaaldelijk
-Catalogiseer
-Catering
-cellulair
-classificator
-collaboreren
-collectiviteit
-comfortabel
-complimenteus
-contractant
-correctionaliseren
-daaraanvolgend
-dagelijks
-deelgenoot
-degelijkheid
-demarqueren
-Denotative [Denotatie, Denominatieve]
-deposant
-dergelijken
-detail
-deugen
-diakritisch
-Directioneel
-dusgenaamd
-eendrachtigheid
-Eenzaamheid
-eersteklascoupé
-Eigenschap
-felicitatietelegram
-centerkanaal [centerkabaal, enterkanaal, centerkanaal-, center-kanaal, callcenter]
-Chargeer
-filiaal
-klare
-Klassikaal
-kleinhandel
-evolutie
-exemplaar
-exequiën
-familiaal
-fauteuil
-luister
-magistratelijk
-perelaar
-Permitteren
-Perseveratie
-persoonlijk
-pictogram
-pixel
-sloten
-sluimer
-sneltoets
-Soldij
-Solliciteren
-zegepraal
-zelfbeeld
-zevendaags
-aangeslotene
-meermaals
-expedieert
-jaargetijden
-kaderleden
-Kapitelen
-
-Сложные слова []
-avontuurlijkheid
-bedrijfsmaatschappelijk
-begrotingstechnisch
-belangstellingssfeer
-concurrentievoordeel
-conferentieganger
-democratisch-liberaal
-discontoverhoging
-doctoraatsverhandeling
-dubbeldeksbus
-economisch-financieel
-energiezuinig
-erkentelijkheid
-evenwichtigheid
-klimaatsverandering
-koffiezetmachine
-koopmansgebruik
-maatschapsovereenkomst
-personeelsconsulent
-sociaalwetenschappelijk
-zelfverzekerdheid
-fondsenwervende
-
-Слова с ошибками []
-afficher [affiche, afficheer, affiche-, affiches]
-algorithme [algoritme, algoritmiek]
-beeindiging [beëindiging]
-client [cliënt]
-consnteren [consenteren, contesteren, constateren, consulteren, confronteren]
-deactivieren [deactiveren, deactiveerde, reactiveren, deactiveert, geactiveerden]
-deblockering [deblokkering]
-electrisch [elektrisch]
-certificat [certificaat, certificatie, certificeert, certificeer, certificeren]
-sovereiniteit [soevereiniteit, suzereiniteit, sereniteit, universiteit]
diff --git a/Common/3dParty/hunspell/test/dst/nn_NO.txt b/Common/3dParty/hunspell/test/dst/nn_NO.txt
deleted file mode 100644
index 90d328d8e3..0000000000
--- a/Common/3dParty/hunspell/test/dst/nn_NO.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-Ankeret
-Anleggsbedrift
-Annandag
-annonseavis
-annuell
-ansats
-ansvarsmedviten
-Antibiotikai
-apal
-apoteki
-apparattavlor
-appetitt
-Aprikos
-arbeidsdokument
-arbeidsmarknad
-barndom
-bastematte
-bautingi
-Bedriftsleiar
-befolkningi
-begynnarkurs
-Beheld
-belastningi
-beredskapsnivå
-beredskapsperiode
-berglandskapi
-berrfrost
-beskjedi
-beskrivingi
-betalingsoppdrag
-betalingsplikt
-bevismateriale
-bildeband
-bildebruki
-bildespråki
-bildeteksti
-bilingval
-billettlukone
-binær
-bione
-bjørkegreini
-bjørnebæri
-blenge
-blokkeringi
-blomsterbordi
-blyerts
-bogen
-bokstavrekningi
-bokstavteikni
-Borddisk
-effektevaluering
-elgkalv
-Elone
-emballer
-faktainformasjon
-familiebedrifti
-familieterapeut
-fastbuande
-Februar
-feili
-fisketom
-hengelåsi
-istandsetjingi
-Item
-jaguar
-jamlig
-janen
-jarnbanestasjon
-kjende
-kjentfolki
-kjæleri
-kjøledisk
-kjørety
-midli
-Mideftnar
-midtstrek
-multiplikasjonstabell
-museumsdirektør
-onsdag
-operasjon
-operasjonskode
-opinionsskapingi
-opningi
-Personalkonsulent
-Personligdom
-persontryggleik
-petroleumspris
-redningsaksjon
-reduksjon
-refusnik
-seinst
-sekretær
-seljande
-sendeferd
-Standpunkt
-støyisolering
-støytvis
-terminoppgåve
-tidløysone
-tidsfølgjone
-Tilbakebetalingstid
-uprofesjonell
-upåklageleg
-
-Слова с ошибками []
-Anlegsarbeid [Anleggsarbeid, Tvangsarbeid, Grunnlagsarbeid, Føregangsarbeid, Bergingsarbeid]
-anonse [annonse, nonsens, anse]
-ansversproblematikk [ansvarsproblematikk, vurderingsproblematikk, ventelisteproblematikk, valdsproblematikk, drivhusproblematikk]
-barneforteling [barneforteljing, barnefordeling, barneforsking, barnefarforelegg, barnebefolkning, barnebortføring]
-besoksliste [besøksliste, sortsliste]
-bilophoggingi [bilopphoggingi, bilopphogging, opphogging]
-effektivitetskontrol [effektivitetskontroll, effektivitetsforskjell, effektivitetsproblem, effektivitetsnøytral, effektivitetsforbetring]
-fakturaerklering [fakturaerklæring, faktureringsliste, overfakturering]
-miljøbyrad [miljøbyråd, miljøby rad, miljøby-rad, miljøbragd]
-selskapskat [selskap skat, selskap-skat, selskaps kat, selskaps-kat, selskapsskatt, selskapskapital, selskapsrett, selskapstype]
-cement [sement, dement, centime, cent]
diff --git a/Common/3dParty/hunspell/test/dst/oc_FR.txt b/Common/3dParty/hunspell/test/dst/oc_FR.txt
deleted file mode 100644
index 26c580cdf5..0000000000
--- a/Common/3dParty/hunspell/test/dst/oc_FR.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-Ajustaira
-alaguiar
-alausièr
-alberguèri
-alcaloïdic
-alègrament
-alenament
-algorisme
-Alimentacion
-allergologia
-alpèstra
-amaisament
-amorteirar
-analista
-analogic
-atucament
-Audicion
-auquièr
-auscultacion
-auscultar
-ausèri
-autenticament
-brilhant
-brumós
-Burgada
-cabelièira
-cadeçar
-Caducèu
-çaicontra
-calcièrs
-Calmar
-camarilha
-cambièra
-canalhariá
-casse
-cedar
-cendrós
-cèrca
-cèrtes
-cestòdes
-chantièr
-chartrós
-Chassís
-dimensionar
-diptèrs
-dirèctament
-discrecionària
-discriminar
-Distraire
-dòler
-Enòrme
-enqueriái
-espicifòrme
-esquelèt
-Esquèrra
-estetic
-innocéncia
-innocentàs
-Maniquèu
-mantelejar
-Nauchièr
-natièr
-oxigèn
-pacanariá
-pagés
-pagesiá
-Primièirament
-requereguèri
-requisitòria
-saumelèri
-S'autodeterminar
-sautarèl
-scientament
-scientologia
-secador
-secretèri
-sècta
-sectorial
-s'efarcimar
-s'endeven
-s'engarrar
-sentimental
-s'entrepausar
-shampó
-sextant
-sòli
-Solidament
-soquèla [soquèla, roquèla]
-subrejornada
-suedés
-utilitària
-Utilizaire
-vacàs
-vaisselèri
-valiái
-validament
-
-Слова с ошибками []
-albatros [albatròs]
-amistanza [amistança, amistat, animista]
-brunonièr [brunhonièr, prunhonièr]
-carpentier [carpentièr]
-centrifugation [centrifugacion, centrifugadoira, centrifugador, centrifugar, centrifuga]
-estelhad [estelhas, estelha, estelhada, estelhar, estelhan, estelhat, estelham, estrelhada, estervelhada, estenalhada, estendalha]
-primaria [primariá, primària, primarai, primaris, primari, primariam, primacia, primarga]
-s'embractar [s'embracetar, s'embraceta, s'embodracar, s'embarrassar, embracetar]
-sosembrançament [sosembrancament, embraçament, asombrament]
-vascularisacion [vascularizacion, secularizacion, cardiovascular]
diff --git a/Common/3dParty/hunspell/test/dst/pl_PL.txt b/Common/3dParty/hunspell/test/dst/pl_PL.txt
deleted file mode 100644
index 3cb6dba99f..0000000000
--- a/Common/3dParty/hunspell/test/dst/pl_PL.txt
+++ /dev/null
@@ -1,225 +0,0 @@
-dom
-pies
-kot
-auto
-drzewo
-książka
-szkoła
-przyjaciel
-mama
-tata
-dziecko
-jabłko
-czekolada
-kawa
-herbata
-telefon
-telewizor
-komputer
-muzyka
-sport
-zdrowie
-piękno
-praca
-miłość
-szczęście
-czas
-pieniądze
-język
-kraj
-miasto
-zima
-lato
-jesień
-wiosna
-morze
-góry
-jezioro
-rzeka
-park
-zwierzę
-ptak
-ryba
-drewno
-złoto
-srebro
-metal
-szkło
-buty
-sukienka
-spodnie
-koszula
-czapka
-płaszcz
-ręka
-noga
-oko
-ucho
-nos
-usta
-ząb
-głowa
-serce
-mózg
-król
-królowa
-książę
-księżniczka
-chłopak
-dziewczyna
-mężczyzna
-kobieta
-staruszek
-staruszka
-lekarz
-pielęgniarka
-nauczyciel
-uczennica
-student
-studentka
-kucharz
-kelner
-wojna
-pokój
-mapa
-flaga
-śmiech
-płacz
-sen
-marzenie
-praca
-nauka
-sztuka
-teatr
-kino
-muzeum
-kaplica
-kościół
-zamek
-most
-droga
-
-Сложные слова на польском языке []
-
-1. konstantynopolitańczykowianeczka [nicejsko-konstantynopolitańskiego]
-2. niezadogłębienieńskujący []
-3. antykontraatakujący [finansująco-kontraktujący]
-4. supersamoobsługiwalnymi [kancelaryjno-archiwalnymi]
-5. rozpierduchlanoculka [nieporozpierdzielanie]
-6. nieodezwawiałobyś [nieodprzedmiotawiany]
-7. przystawieniowy [przedstawieniowy, nieprzystawienie, niepoprzystawianie, nieprzystawianie]
-8. nieprzeżyciowakościami [nieprzewartościowywaniami, nieprzewartościowaniami]
-9. nieprzekazywających [nieprzekrzywiających, nieprzejednywających, nieprzywdziewających, nieprzepoczwarzających]
-10. przeciwzakwaszeniowych [zatokowo-przedsionkowych]
-11. nieszczęściodrapańskiego [ogrodniczo-pszczelarskiego]
-12. społeczno-wychowawczyniami [socjalizacyjno-wychowawczymi]
-13. seledynowo-fioletowymi [mięśniowo-szkieletowymi]
-14. przeciwdeszczową [przeciwdeszczową, przeciwdeszczowy]
-15. mikroelektroniczno-kwalitacyjną [reumatologiczno-rehabilitacyjną]
-16. nieokreślonościowo-losowo-obiektywnie []
-17. zagubieniecioburakowatej []
-18. antyneuroleptyzanckim []
-19. nieupubliczniającymi [nieuwieloznaczniającymi]
-20. splądrowałbyś [wyeksplorowałbyś]
-21. konserwowano-spożywczymi [konserwiarsko-zamrażalniczymi]
-22. ożelośćiowo-miłosnej []
-23. nieprzyzwoitolicjią [nieprzypieczętowującą]
-24. nieodporowościę [nieodpoliturowanie]
-25. rzeszołkofiołkowatymi []
-26. niezakapiactwuja [niezakatrupiająca]
-27. nieoszczędniewczelnianków [oszczędnościowo-rozliczeniowa]
-28. przekształconowaczkołępów []
-29. rozwińczywianiu [nieporozwiązywaniu]
-30. nieprzeskakiwalnościami [nieprzewartościowywaniami]
-31. modernizująco-rewolucyjnego [reumatologiczno-rehabilitacyjnego]
-32. nadzwyczajnieuzdolnionymi []
-33. przemocno-wsparciański [warciańsko-odrzańskiemu]
-34. przepyszno-peltzerowskiego [faszystowsko-hitlerowskiego]
-35. kwestionowano-wzmocnieniami []
-36. nieodczynieństwującą [nieodrzeczywistniającą]
-37. niezasłużonowypasionego []
-38. likwidującego/zarządzającego [odchudzająco-oczyszczającego]
-39. szeszcześtoplutowanych [nieprzeinstrumentowanych]
-40. niewpadkowościowi [wielonarodowościowi]
-41. antynazizhownemu [niebizantynizowanemu]
-42. nieuchronnieprzekroczeniowym [oszczędnościowo-rozliczeniowym]
-43. niezatrawialnieprzyjemnego []
-44. kardiopulmonologiczno-angiologów [endokrynologiczno-ginekologicznemu]
-45. gorączkowointensywnościowego [wydolnościowo-sprawnościowego]
-46. antykonstytucyjnorozpadowego [konstytucyjno-monarchicznego]
-47. nieobawiamysię/źródleni []
-48. prerewolucyjnolphillipsowi []
-49. szóstkaniewygranych [niewykrystalizowywanych]
-50. nieupadkokogeneracyjnymi [korekcyjno-kompensacyjnymi]
-51. społeczno-humanitarnarządzaniami []
-52. nieodziewowiędzy [nieumiędzynarodowienie]
-53. przemocnochamować []
-54. społecznosensacyjnosądowym [kompensacyjno-wyrównawczymi]
-55. przerażającorzymskiego [kobylińsko-borzymskiego]
-56. nieprzemontowanych/zamuzowych []
-57. referendumkonstytucyjno-reformujące []
-58. niezniesłowiałszymi [niezesłowiańszczonymi]
-59. niebohaterystycznymi [charakterystyczniejszymi]
-60. produktodenarodowomenopauzalem []
-61. odrywającopierdolca [niedopierdzielająca]
-62. niegotowożywione [żywieniowo-noclegowi]
-63. niepostronnynarodzonemu [kilkudziesięciostronicowemu]
-64. przedniaautochtonicznym [urbanistyczno-architektonicznym]
-65. nadciągniono-wchodzących []
-66. promocjostworczym [czteromocarstwowym]
-67. niezapowiadającychkoalicji []
-68. bezgłupinczłapie []
-69. wyomjaził []
-70. wagotonizacyjno-radiofonizowanego []
-71. gospodarczo-zasadotwórczej [organizacyjno-gospodarczej]
-72. skrupulatno-rzeźniczobardziej []
-73. samokiedy-konstytucyjnej [konstytucyjno-monarchicznej]
-74. niedomętnością [nieumiejętnością]
-75. nieoszustamiwykorzystana []
-76. przeprowadzonoświeckie [nieprzeprojektowywanie]
-77. nieuniknionaobowiązkowo-plastycznej []
-78. poduszkowo-nicościowych [porządkowo-czystościowych]
-79. niepowodzeńbutmizeryjewego []
-80. skojarzeniowocolorowymi [wypoczynkowo-szkoleniowymi]
-81. przytułkamiwciągarkowych []
-82. wchodziłoprzeciwniepowszechny []
-83. karaublicznociągana [publiczno-prywatnego]
-84. przedpolitycznilubelskim [hemolityczno-mocznicowemu]
-85. niezapowiedziano-date-expanded []
-86. licznościłodziennej [termiczno-wilgotnościowej]
-87. niezawinieniomatołek []
-88. pakujączwobilardowego []
-89. rewersdopisek []
-90. przeprosinoworadosną [nieprzeprojektowywaną]
-91. nieakceptacyjnoprospekcyjnymi [adaptacyjno-rehabilitacyjnymi]
-92. jedniżużytym [nienadużytymi]
-93. ainikopciksemilitechnikowany []
-94. motszynopiszącym [niewspółtowarzyszącym]
-95. nieprzerejestrowanasezonowanie []
-96. słupotartackimoblikiem []
-97. nieodbieraniemniedostępności []
-98. dorozwinięcówkobiet []
-99. szybopojabytesłowickiego []
-100. przystępnoracjmujacych []
-
-Слова с ошибками []
-
-jedniiżużytym [nienadużytymi]
-
-wiomjaził [jaziowy]
-
-niezzniesłoowiałszymi [niezesłowiańszczonymi, niezesłowiańszczanymi, niezesłowiańszczającymi, najniesłowniejszymi]
-
-superrsammoobsługiwalnymi [muzealno-archiwalnymi]
-
-przemoocnochamować [przeprogramować]
-
-staruszzka [staruszka, staruszeczka, staruszek, staroruska, starszaka]
-
-tiatr [tiar, titr, tatr, teatr, wiatr, otiatra, otiatria, tristia]
-
-woina [wpina, wona, wina, wozina, dwoina, wolina, wonna, wcina, toina, wodna, doina, wolna, wojna, wgina, woźna]
-
-teleffon [telefon, telef fon, telef-fon, telefoto]
-
-zołoto [złoto, gołoto, hołoto, Gołoto, Hołoto, zołotnik]
diff --git a/Common/3dParty/hunspell/test/dst/pt_BR.txt b/Common/3dParty/hunspell/test/dst/pt_BR.txt
deleted file mode 100644
index 1f66fc5565..0000000000
--- a/Common/3dParty/hunspell/test/dst/pt_BR.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-que
-eu
-não
-de
-você
-para
-ele
-se
-é
-um
-sim
-por
-isso
-em
-uma
-uuma [u uma, uma, usma, suma, numa, ruma, duma, puma, fuma, juma]
-está
-como
-com
-bem
-na
-me
-mas
-do
-era
-quando
-então
-tudo
-tydo [tudo, tido, todo]
-aqui
-disse
-estava
-esâtava [estava, tavares]
-lá
-fazer
-vai
-sobre
-vamos
-homem
-hollmem [homem-gol]
-bom
-ok [o k, o, k, oó, os, oi, oc, ou, om, oh]
-agora
-coisa
-coissa [coisca, coiça, coisas, coisa, cossa, comissa, cisosa, cissoa, cossai]
-quero
-foi
-meu
-seu
-só
-eles
-as
-posso
-pocso [posso, poco, poso, psoco, poiso, pouso, pocho]
-estou
-mais
-mim
-certo
-dizer
-dizdizerr [dizer]
-os
-no
-sei
-ela
-vocês
-sua
-todos
-sabe
-minha
-alguma
-algyyma [amalgama]
-casa
-muito
-oh
-quallquer [qualquer, alquerque, malquerer, alqueria, alquermes]
-qualquer
-da
-estamos
-até
-onde
-onede [enode, onde, monede, neode, onere, olede, nedendo]
-ao
-tenho
-nós
-tem
-tinha
-tiinha [tinão ha, tiazinha, toinha, tinha, tirinha, tidinha, tipinha, tianha, tainha]
-quê
-ir
-ou
-pode
-quer
-vou
-seus
-dia
-estão
-nos
-cabeça
-quem
-anos
-depois
-sou
-vez
-vá
-fez
-irmão
-câmera
-câmeara [cameara, cameará, câmera, câmara, acâmera, comeara]
diff --git a/Common/3dParty/hunspell/test/dst/pt_PT.txt b/Common/3dParty/hunspell/test/dst/pt_PT.txt
deleted file mode 100644
index 9477e3d006..0000000000
--- a/Common/3dParty/hunspell/test/dst/pt_PT.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-pan [pana, pane, pano, pen, par, pai, pau, paz, San, Van, Dan, pança]
-manteiga
-menteiga [manteiga, antigamente]
-queijo
-salchichón [salsicha]
-saуlchichón []
-óleo
-pimenta
-pimmenta [pimenta, pigmenta, pimenteira, pavimenta, implementa, impiamente]
-sal
-baga
-mel
-geléia [geleia]
-cogumelo
-cebola
-cóbola [cebola]
-banana
-cenoura
-pêra [pera, para, pira, pura]
-beterraba
-frutas
-melão
-melancia
-bolo
-chocolate
-carne
-batatas
-salada
-salóda [salda, salada, salsada]
-tomate
-pepino
-pipino [pepino, pi pino, pi-pino, pipi no, pipi-no, filipino, pino]
-col [cola, cole, colo, coa, cal, coe, cor, rol, sol, coo, com]
-mingau [mingua, mingai, minga, mingar, mingas, mingou, mingam]
-sopa
-sanduíche
-refrigerante
-refrigarante [refrigerante, refrigerar, intrigante]
-água
-café
-chá
-leite
-suco
-scuco [suco, cuco, cucos]
-maçã
-uvas
-laranja
-abacaxi
-adacaxi [abacaxi, cacada]
-damasco
-demasco [damasco, demarco, remasco, de masco, de-masco, descasco]
-açucar [açúcar, açucara, açucare, açucaro, açudar]
-arroz
-macarrão
-res [rés, ser, ares, reis, ires, ores, dres, rei, ris, ses, rãs, rês]
-porco
-frango
-costeleta
-cãsteleta [costeleta, chapeleta]
-limão
-ervilha
-pão
-peixe
-caramelo
-sorvete
-nogueira
-ovo
-pêssego
-xícara
-xíícara [xícara, caraíba]
-vidro
-prato
-colher
-garfo
-faca
-pires
-garrafa
-guardanapo
-café da manhã [ssafé da manhã]
-almoço
-jantar
-avião
-carro
-bonde
-ônibus [ónibus]
-trem
-bicicleta
-janeiro
-fevereiro
-fevíreiro [fevereiro, ferreiro]
-março
-abril
-maio
-junho
-julho
-agosto
-setembro
-setembra [setembro, seteara]
-outubro
-novembro
-dezembro
-desembro [desmembro, dezembro, deslumbro, setembro, desdobro]
-caneta
-livro
-xadrez
-telefone
-relógio
-pente
-televisão
-ferro
-sabão
-rádio
-bolsa
-cartão
-mala
-presente
-câmera [câmara, comera]
-computador
-camputador [computador, captador]
-filme
-flor
-vaso
-quadro
-lenço
-bola
-balão
-brinquedo
-brinqueedo [brinquedo, branqueado]
-conta
-sobre
-papel
-pepel [papel, repele, pele]
-jornal
-letra
-bilhete
diff --git a/Common/3dParty/hunspell/test/dst/ro_RO.txt b/Common/3dParty/hunspell/test/dst/ro_RO.txt
deleted file mode 100644
index b1bd892905..0000000000
--- a/Common/3dParty/hunspell/test/dst/ro_RO.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-casă
-copil
-carte
-masă
-școală
-lumină
-apă
-munte
-soare
-lună
-pâine
-fruct
-floare
-stradă
-mașină
-aer
-timp
-zi
-noapte
-nor
-vânt
-ochi
-gură
-nas
-mână
-picior
-inimă
-sânge
-cap
-ureche
-voce
-melodie
-culoare
-formă
-linie
-cerc
-dreptunghi
-cercetare
-știință
-limbă
-frază
-literă
-cifră
-număr
-sunet
-zgomot
-telefon
-internet
-computer
-program
-ecran
-tastatură
-mouse
-joc
-sport
-muzică
-artă
-film
-televizor
-radio
-planetă
-stea
-univers
-galaxie
-atom
-moleculă
-substanță
-energie
-lumină
-căldură
-frig
-aparat
-instrument
-mașinărie
-unelte
-hrană
-băutură
-haine
-pantofi
-păr
-piele
-ochelari
-ceas
-bijuterie
-pământ
-apă
-aer
-foc
-metal
-lemn
-piatră
-hârtie
-cerneală
-pix
-carte
-cadru
-tablou
-sculptură
-model
-formă
-anticonstituționalitate [anti constituționalitate, anti-constituționalitate, anticonstituționali tate, anticonstituționali-tate, anticonstituționale, neconstituționalitate, anticonstituțională, constituționalitate]
-dezvoltare
-inexpugnabil
-nefast
-concomitent
-antiseptic
-recalcitrant
-perseverență
-extravagant
-inexorabil
-colosal
-plauzibil
-efervescent
-perspicacitate
-superfluu [superfluă, superfulger]
-subversiv
-incoruptibil
-inefabil
-hiperbolic
-indefectibil [indestructibil, indefinibil]
-peremptoriu
-ambivalent
-paradoxal
-heterogen [eterogen, heterogonie]
-indiferent
-periferic
-subliminal
-ultraviolet
-indeferent [indiferent, interferent, deferent, inaderent, independent]
-conglomerație
-circumstanțial
-contraproducător [contra producător, contra-producător, contraproductivă, contraproductiv, neproducător]
-conglomerat
-insurmontabil
-intransigent
-insidios
-inerent
-consternant
-ambiguitate
-inerție
-inconsolabil
-oniric
-remarcabil
-repudiat
-subiectiv
-periculos
-infatigabil
-abnegare
-exuberant
-facet [face, falet, facem]
-represiune
-implacabil
-indiferent
-infatigabil
-insolit
-intempestiv
-incandescent
-letargic
-magistral
-magnanim [magnaliu]
-nefast
-oblivial [bolivian]
-oportun
-periculos
-plutitor
-propice
-reprobabil
-risipitor
-robust
-salutar
-simetric
-solicitant
-stringent
-sufocant
-superficial
-tranzitoriu
-tributar
-trivial
-umilitor
-unic
-vehement
-vernal
-vicios
-victorios
-vindicativ
-virtuos
-vizibil
-volatil
-vorace
-vulnerabil
-xenofob
-xerofil
-yonder [pondere]
-yang
-yodel [model]
-zonal
-zodiac
-zoon [ozon, zono, zoom, zoo, zon, zobon, zovon, zvon, zoo n]
-zoomorf
-zurbagiu
-Caaă [Casă, Cară, Cată, Cală, Cană, Cauă, Camă, Capă, Cadă, Cață, Cază, Cavă, Cașă]
-Soaare [Soare, Sotare, Solare, Sonare, Somare, Soțioare]
-Cartr [Carte, Cart, Carter, Carta, Carto, Cartu, Cartă]
-Appă [Papă, Apă, Arpă, Aptă]
-Coopil [Copil, Copilo, Copiilor]
-Frumoss [Frumos, Frumos s, Frumoasă]
-Feriсire [Fericire, Rereferire, Ferire]
-Prietenn [Prieten, Prieteni, Prietena, Prietene, Prieteno, Prietenu, Prietenă, Prieten n, Prietinie, Prietin, Pretenție]
-Muziică [Muzică, Muzic, Muică]
-Exeplu [Exemplu]
diff --git a/Common/3dParty/hunspell/test/dst/ru_RU.txt b/Common/3dParty/hunspell/test/dst/ru_RU.txt
deleted file mode 100644
index 938369e89b..0000000000
--- a/Common/3dParty/hunspell/test/dst/ru_RU.txt
+++ /dev/null
@@ -1,197 +0,0 @@
-должен
-доллжен [должен, доложен]
-наш
-думаю
-думмаю [думаю]
-свою
-сам
-всем
-ни
-нас
-пока
-этом
-этой
-ваша
-всеми
-возьми
-моей
-сама
-вся
-день
-само
-всей
-бывает
-себе
-пойду
-куда
-ими
-твоей
-всю
-своего
-твой
-пусть
-ним
-про
-точно
-иметь
-которые
-тогда
-сюда
-наше
-самой
-взять
-наверное
-домой
-совсем
-те
-тобой
-наверно
-что-то
-будто
-твои
-пути
-дома
-такие
-тех
-такое
-его
-самой
-вашей
-наверное
-мои
-например
-типа
-значит
-люблю
-минут
-пор
-случае
-искусство
-лучше
-того
-такому
-ждать
-видеть
-мною
-ждал
-имя
-важно
-чего-то
-самому
-обычно
-представляет
-мечтать
-стало
-помните
-взять
-моих
-самим
-своим
-вообще
-самими
-здесь
-обратно
-сразу
-таким
-ежели
-наоборот
-куда
-таков
-мечтает
-значит
-покажи
-такими
-кстати
-почти
-всякий
-научит
-вдоль
-тогдашний
-толком
-занимает
-Аквапланирование
-Барокамера
-Библиографирование
-Биосинтез
-Взаимодействующий
-Вибраторный
-Виртуальность
-Вооруженность
-Господствующий
-Десантно-штурмовой
-Диагностировать
-Дипломатический
-Дисгармония
-Дискриминационный
-Достопримечательный
-Жизнеустройство
-Интернациональный
-Инфицированный
-Кальцинировать
-Ключичный
-Коннотация
-Лиловатый
-Люминесцентный
-Метрополитен
-Многоплановый
-Модернизировать
-Наивысший
-Наименее
-Неопределенный
-Нераскрытый
-Неоднократный
-Неохотно
-Непостижимый
-Неусыпный
-Обезьяноподобный
-Обзавестись
-Оптический
-Оптимизировать
-Осуществиться
-Очистительный
-Парафинировать
-Переключатель
-Пограничный
-Подготовительный
-Подрядчик
-Полиморфный
-Почитать
-Преисполниться
-Преподаватель
-Преследователь
-Прирожденный
-Проектирование
-Профанация
-Разграничительный
-Распоряжающийся
-Реконструктивный
-Революционный
-Рентгенологический
-Рискованный
-Роскошествовать
-Самоунижение
-Сверхъестественный
-Светочувствительный
-Семантика
-Сингулярность
-Совершенствовать
-Соединительный
-Сосуществование
-Спорообразующий
-Стационарный
-Столовая
-Сторицей
-Сцепной
-Трансформирующий
-Триумвират
-Укротитель
-Универсальный
-Федеративный
-Хронометраж
-Целостность
-Криумвират [Триумвират]
-Укратитель [Укротитель]
-Универссальный [Универсальный]
-Фидиративный []
-Хранометраж [Хронометраж]
-Целосность [Целостность]
diff --git a/Common/3dParty/hunspell/test/dst/sk_SK.txt b/Common/3dParty/hunspell/test/dst/sk_SK.txt
deleted file mode 100644
index d8167476c9..0000000000
--- a/Common/3dParty/hunspell/test/dst/sk_SK.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-hiša [šiša, Riša, Miša, hi ša, hi-ša]
-pes
-mačka
-avto [atto, asto, auto, zavito]
-drevo
-knjiga [kvadriga]
-šola [šila, šoka, šla, švola, škola, šosa, vola, šora, rola, kola, mola, dola, šopa, pola, hola]
-prijatelj [prijatej, prijate, prijatie]
-mama
-oče [očne, otče, toče, očke, koče, moče, očeš, oči, one, ose, oke, oje, obe, očí, očú]
-otrok
-jabolko [jablko]
-čokolada [čokoláda]
-kava
-čaj
-telefon [telefón, telefot]
-televizija [televízia]
-računalnik [račianski]
-glasba [glasnosť]
-šport
-zdravje [zdravej, zdravie, zdravte, zdravme, zdrav je, zdrav-je]
-lepota [pelota, slepota, lopota, lehota, klepotať, epoleta, poleptať]
-delo
-ljubezen [lezeniu]
-sreča [srnča, skeča, smeča]
-čas
-denar [denár, nedar]
-jezik [veziko]
-država [držiava, držala, dŕžava, dĺžava]
-mesto
-zima
-poletje [polejte, poleje, poletuje, polje]
-jesen [jeseň, jesne, nesej, jeden, jesene, jeseni, jesení]
-pomlad [omlad, poklad, p omlad, pomlka]
-morje [morke, more, moje, morte, morme, mor je, mor-je, morčej]
-gore [hore, gofre, nore, kore, more, zore, bore, šore, Nore, Tore, Lore, Zore, gágore]
-jezero [jazero, je zero, je-zero, zero]
-reka [areka, rieka, rekta, repka, rezka, raka, roka, rekt, seka, reva, veka, deka, repa, reku, ruka]
-park
-žival [žuval, živa, živel, živil, rival, ži val, ži-val, živ al, živ-al, živa l, žičieval]
-ptica [pica, pätica, psica, štica]
-riba [rabi, roba, ria, iba, raba, ribi, ryba, rúba, róba, Tiba, r iba, babri]
-les
-zlato
-srebro [rebro, s rebro, striebro]
-kovina [okovina, krovina, ovinka, konina, novina, korina, rovina, kozina, košina, kofina, rakovina, kávovina]
-steklo [šteklo, seklo, stekalo, stieklo, stenklo, streklo, stoklo, steblo, stĺklo]
-čevlji [nevlhči]
-obleka
-hlače [hláče, tlače, hlase, hlave, hlade, plače]
-srajca [rajca, krajca, s rajca]
-kapa
-plašč [plaš, plač, plaší, plaš č]
-roka
-noga [noha, nota, nosa, nova, nora, loga, koga, doga, joga, noža, noša, noxa, Toga, neogab]
-oko
-uho [ujo, ho, tuho, uhor, uhol, uhlo, ucho, uhoľ, uňho, hou, oho, uto, uhm, cho, uhú]
-nos
-ustnice [ustrice, kapustnice]
-zob
-glava [hlava, Ilava, Slava]
-srce [drce, srnce, srdce, srne, srde, síce, súce]
-možgani [moganie]
-kralj [kraj, kraal]
-kraljica [kraslica]
-princ
-princesa
-fant
-dekle [deke, dele, pekle, de kle, de-kle, debakle]
-moški [košmi, kamoši]
-ženska [ženská, ženiska, žensky, ženskí, ženský, ženskú, ženské]
-starec
-starka [starká, straka, statka, starla, stara, ostarka, staríka, starca, starkí, starký, starkú, starké]
-zdravnik [zdrav nik, zdrav-nik, zdravenia]
-medicinska sestra [medicínska sestra]
-učitelj [učitelík]
-učenka [učeníka, učenia, učenca, utečenka]
-študent
-študentka
-kuhar [kurare]
-natakar [katakana, katarakta, katarakt]
-vojna
-mir [mri, mor, mi, mira, mire, mier, emir, miri, miru, mar, air, mer, min, sir, mil]
-zemljevid [zemediel]
-zastava [zástava, zastáva, zastav, zastavia, zastaval, zastavaj, zastavať, zostava, zastala, zastaví]
-smeh [sneh, smej, sme, steh, smer, smel, smeč, smeť, sme h]
-jok [koj, kok, joj, jol, ojok, jak, jot, tok, sok, vok, rok, lok, mok, dok, job]
-spanje [spanie]
-sanje [sane, saje, sanuje, banje]
-delo
-učenje [učenej, učene, učenie]
-umetnost [etnosti]
-gledališče [nepojedali]
-kino
-muzej [mušej, muzeálnej]
-kapela
-cerkev
-grad [grád, gard, hrad, graf, rad, grand, gram, gray, úrad, Arad]
-most
-cesta
-
-Сложные слова []
-
-1. Neparlamentarna [parlamentarizmus]
-2. Samozadosten [rozradostene]
-3. Nepristranski [protistranícki]
-4. Pretirano [pretrénovanosti]
-5. Nepredušno [nepriedušnosť]
-6. Nesreča []
-7. Razpršeno [zhoršenou]
-8. Nesprejemljiv [nesprejazdňujeme]
-9. Prekomeren [rekompenzovať]
-10. Prostovoljstvo [sprostredkovateľstvo]
-11. Izolirati []
-12. Trmast []
-13. Brezpogojno []
-14. Neodvisnost [neodôvodnenosti]
-15. Skupnost [ústupnosti]
-16. Neizvedljiv []
-17. Nelegitimen [nelegitimizuje]
-18. Nevzdržen []
-19. Preobremenjenost []
-20. Ogrevalni sistem []
-21. Preoblikovati [aplikovateľnosti]
-22. Nezaslišano [nezasluhujúci]
-23. Neugoden []
-24. Prezasedenost [prezamestnanosť]
-25. Nesreča []
-26. Neupravičeno [nenapraviteľnosť]
-27. Mednaroden [mŕtvonarodeným]
-28. Kompatibilnost [najkompatibilnejšom]
-29. Neuspeh [neusporte]
-30. Neobvladljiv []
-31. Neskončen [neskončenej]
-32. Neprimeren [neprimeranie]
-33. Amortizacija [amortizovaných]
-34. Koncentracija [dekoncentrácia]
-35. Cirkulacija [recirkulácia]
-36. Obremenitev [odbremenenie]
-37. Gromozanski []
-38. Simbol []
-39. Vinjeta []
-40. Digitalizacija [digitalizovaný]
-41. Funkcionalnost [funkcionalistické]
-42. Rentabilnost [nerentabilnosti]
-43. Ekshibicionizem [exhibicionizmus]
-44. Frustracija [frustrujúci]
-45. Neprilagodljiv []
-46. Severnoameriški []
-47. Ekskluzivnost []
-48. Preverjanje [preverovanej]
-49. Celoživljenjsko []
-50. Privlačnost [neprivlastňovala]
-51. Periferija [periferický]
-52. Sokrivda [dokrivkať]
-53. Kompromis [kompromisník]
-54. Strpnost [ostrovtipnosť]
-55. Racionalizacija [zracionalizovania]
-56. Birokracija [gerontokracia]
-57. Odraslost [odrastenými]
-58. Stabilnost [nestabilnosti]
-59. Nepredvidljivost [najnepredstaviteľnejšou]
-60. Razkošje []
-61. Smrtnost [úmrtnostným]
-62. Obveščenost [presvedčenosti]
-63. Produktivnost [neproduktívnosti]
-64. Neugodje []
-65. Zapletenost [zakrpatenosti]
-66. Hegemonija []
-67. Umetnost [menostatikum]
-68. Tranzicija [tranzitivita]
-69. Individualnost [individualisticky]
-70. Kontaminacija [kontaminantmi]
-71. Inkubacija []
-72. Prikrito [prikrátko]
-73. Etnični [Letničie]
-74. Sovražnost [samovražednosť]
-75. Atraktivnost [abstraktnosti]
-76. Nestrpnost [nepriestupnosti]
-77. Divergenca [divergencia]
-78. Digitalna pismenost []
-79. Stabilizacija [autostabilizácia]
-80. Raznolikost []
-
-Слова с ошибками []
-
- Kontamenacija [Kontaminácia]
-
- Grommozanski [Grobianski]
-
- Neobvladlliv [Neobkradli]
-
- Neparlametarna [Neparlamentný, Parlamentárnej, Parlamentne]
-
- Nevrzdržen [Združene, Zdražene]
-
- voina [vonia, vina, vojna, voľna, voština]
-
- muzei [muzeálni]
-
- ryba
-
- serebro [se rebro, se-rebro, rebro]
-
- televiziia [televízia]
diff --git a/Common/3dParty/hunspell/test/dst/sl_SI.txt b/Common/3dParty/hunspell/test/dst/sl_SI.txt
deleted file mode 100644
index 6bd9384141..0000000000
--- a/Common/3dParty/hunspell/test/dst/sl_SI.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-Hiša
-Sonce
-Miza
-Stol
-Ptica
-Trava
-Drevo
-Noč
-Luna
-Morje
-Gora
-Cvet
-Riba
-Rdeča
-Modra
-Zelena
-Rumena
-Bela
-Črna
-Kamen
-Pes
-Mačka
-Roka
-Noga
-Glava
-Oči
-Uho
-Nos
-Usta
-Jabolko
-Hruška
-Sliva
-Jagoda
-Malina
-Lubenica
-Kruh
-Mleko
-Sir
-Mesnica
-Sadje
-Zelenjava
-Voda
-Zrak
-Ogenj
-Sneg
-Dež
-Oblak
-Veter
-Zima
-Poletje
-Jesen
-Pomlad
-Zajec
-Lisica
-Volk
-Medved
-Lev
-Tigrica
-Slon
-Konj
-Krava
-Ovca
-Piščanec
-Jajce
-Mleko
-Kava
-Čaj
-Sok
-Vino
-Pivo
-Hrana
-Pecivo
-Testo
-Marmelada
-Kruh
-Sir
-Olje
-Sol
-Poper
-Sladkor
-Kava
-Čaj
-Vino
-Pivo
-Šola
-Učitelj
-Učenec
-Knjiga
-Pisarna
-Računalnik
-Telefon
-Glasba
-Slika
-Film
-Gledališče
-Mesto
-Vas
-Trg
-Cesta
-Reka
-Avtomatizacija
-Razvoj
-Komunikacija
-Kompjuter [Juterškov]
-Programiranje
-Elektronski
-Inženiring
-Elektrifikacija
-Kombinacija
-Sistem
-Informacija
-Univerza
-Biblioteka
-Univerzitetni
-Laboratorij
-Raziskava
-Razvojna
-Inovacija
-Intelektualni
-Integriteta
-Izobraževanje
-Izvajanje
-Preverjanje
-Tehnologija
-Implementacija
-Program
-Sodelovanje
-Proizvodnja
-Industrija
-Organizacija
-Administracija
-Proaktivnost [Retroaktivnost, Produktivnosti, Produktivnost, Provokativnost]
-Kreativnost
-Projektni
-Razumevanje
-Kvaliteta
-Upravljanje
-Ocenjevanje
-Statistika
-Kompetentnost
-Konsolidacija
-Realizacija
-Kapaciteta
-Distribucija
-Kompatibilnost
-Konceptualizacija [Konceptualizem]
-Povezava
-Posodobitev
-Fleksibilnost
-Ekonomija
-Organiziranje
-Konkurenca
-Stabilnost
-Ekologija
-Osebnost
-Zavzetost
-Entuziazem [Entuziast]
-Motivacija
-Avtorizacija
-Kreacija
-Akumulacija
-Monotonija
-Diferenciacija
-Transformacija
-Koncentracija
-Inovativnost
-Aktivnost
-Vzpostavljanje
-Reorganizacija
-Kategorizacija
-Partikularnost
-Homogenost
-Izjemenost [Izjemnost, Izjemen ost, Izjemen-ost, Zmenjenosti, Izrojenost, Izmišljenost, Izrinjenost]
-Generalizacija
-Hierarhija
-Koordinacija
-Inspiracija
-Evaluacija
-Ustvarjalnost
-Oblikovanje
-Kompatibilnost
-Konkretizacija
-Proaktivnost [Retroaktivnost, Produktivnosti, Produktivnost, Provokativnost]
-Identifikacija
-Kapaciteta
-Intervencija
-Konsolidacija
-Realizacija
-Eksplozivnost
-Abstrakcija
-Individualnost
-Integracija
-Segmentacija [Sedimentacija, Sedimentacij, Argumentacija, Alimentacija]
-Asimilacija
-Artikulacija [Artikuliranja, Artikulirala, Cirkulacija, Kalkulacija]
-Kolaboracija
-Asociacija
-Stabilizacija
-Kooperacija
-Transformacija
-Hšza [Hrza]
-Kmojnikacija [Komunikacija]
-Progrramiranjee [Programiranje, Reprogramiranj, Programiranega, Programiranj]
-Elektornkski [Elektorski, Elektorkin, Elektronski, Elektorki]
-Inženeirrng [Inženiring]
-Izzobraževanjee [Izobraževanje, Izobraževanj, Izobraževanega, Izobraževane]
-Infomracija [Informacija, Informacij, Rafinacijam]
-Razvoojnaa [Razvojen]
-Proizvdonja [Proizvodnja, Proizvajanja, Proizvajanj, Proizvaja]
-Akitvnostt [Aktivnost]
diff --git a/Common/3dParty/hunspell/test/dst/sr_Cyrl_RS.txt b/Common/3dParty/hunspell/test/dst/sr_Cyrl_RS.txt
deleted file mode 100644
index ef1ecd7824..0000000000
--- a/Common/3dParty/hunspell/test/dst/sr_Cyrl_RS.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-кућа
-пас
-мачка
-аутомобил
-дрво
-књига
-школа
-пријатељ
-мама
-тата
-дете
-јабука
-чоколада
-кафа
-чај
-телефон
-телевизија
-рачунар
-музика
-спорт
-здравље
-лепота
-посао
-љубав
-срећа
-време
-новац
-језик
-земља
-град
-зима
-лето
-јесен
-пролеће
-море
-планине
-језеро
-река
-парк
-животиња
-птица
-риба
-дрво
-злато
-сребро
-метал
-стакло
-ципеле
-одећа
-панталоне
-кошуља
-капа
-капут
-рука
-нога
-око
-уво
-нос
-усне
-зуб
-глава
-срце
-мозак
-краљ
-краљица
-принц
-принцеза
-дечак
-девојчица
-мушкарац
-жена
-старац
-старица
-доктор
-медицинска сестра [војномедицинска]
-наставник
-ученик
-студент
-студенткиња
-кувар
-конобар
-рат
-мир
-мапа
-застава
-смех
-плач
-сан
-сањарење
-посао
-учење
-уметност
-позориште
-биоскоп
-музеј
-црква
-дворац
-мост
-улица
-пут
-
-Сложные слова [Словенства]
-
-Конечно! Вот сто сложных слов на сербском языке на кириллице: []
-
-1. Контраст [контрастира, контраста, контрастно, контрастна]
-2. Компликација [компликацијама, компликација, компликације]
-3. Конструкција [реконструкција, конструкцијама, конструкција, конструкцију]
-4. Диспропорција [пропорцијалном]
-5. Корелација [корелацијама, корелација]
-6. Колаборација [колаборација]
-7. Консервативан [конзервативан]
-8. Диференцијација [диференцијације, диференцијацијом, диференцијална, диференцијални]
-9. Експерименталан [експерименталним, експериментална, експериментални, експерименталне]
-10. Инвалидитет [инвалидитет]
-11. Легитиман [нелегитиман]
-12. Оптимизација [аклиматизација]
-13. Компетентан [некомпетентан, компетентан]
-14. Документација [документација, документацијом, документацију, документације]
-15. Персистентан [асистенткиња]
-16. Апроксимација [апроксимације]
-17. Екстраваганција [екстравагантност]
-18. Катастрафалан [катастрофалан]
-19. Резервација [резервација]
-20. Прогресиван [прогресиван]
-21. Идентификација [идентификација, идентификације]
-22. Генерација [регенерација, генерација]
-23. Криминалистички [криминалистички, криминалистичка, криминалистичке]
-24. Дестабилизација [индустријализација]
-25. Корумпиран [корумпирана, корумпиран]
-26. Конфронтација [контаминација]
-27. Експлозиван [експлозиван]
-28. Функционалан [функционалности]
-29. Релевантан [релевантан]
-30. Квалификација [квалификацијама, дисквалификација, квалификација]
-31. Акредитација [рехабилитација]
-32. Петиција [петицијама]
-33. Каустичан [аутистичан]
-34. Периодичан [периодичан]
-35. Контроверзан [контроверзна]
-36. Гигантски [гигантских]
-37. Принципијалан [беспринципијелан]
-38. Управоливост [расположивости]
-39. Имунизација [имунизација]
-40. Магнетичан [магнетично]
-41. Оперативан [оперативан]
-42. Десант [десантне]
-43. Хиерархија [хијерархија]
-44. Феминистички [феминистичког]
-45. Сегментација [сегментацијом]
-46. Колоритан [колорисан]
-47. Деградација [деградација]
-48. Диверзификација [диверсификацију]
-49. Казуистички [карикатуристички]
-50. Реципрочан [реципрочан]
-51. Манипулативан [манипулативна]
-52. Екстензиван [екстензивна]
-53. Колективни [колективни]
-54. Каузалитет [локалитету]
-55. Синхронизација [синхронизација]
-56. Кампања [кампањама]
-57. Товарни [товарника]
-58. Хируршки [хируршких]
-59. Шампионат [шампионати]
-60. Геостационаран [револуционарност]
-61. Опустошан [опустошености]
-62. Клема []
-63. Стационарни [стационарна]
-64. Секуларни [секуларних]
-65. Исегментација [сегментацијом]
-66. Дебелина [дебелића]
-67. Прецизан [непрецизан]
-68. Рафиниран [рафинирани]
-69. Психолошки [психолошких, психолошки]
-70. Турбулентан [корпулентан]
-71. Интегритет [интегритет]
-72. Идеолошки [идеолошких]
-73. Манифестација [манифестација]
-74. Имплицитан [имплицитан]
-75. Хомогеност [хомогеност]
-76. Изолација [хидроизолација]
-77. Хетерогеност []
-78. Спекулативан [спекулативна]
-79. Вагу [превагу]
-80. Математички [математичким, математички]
-81. Гематолошки [стоматолошки]
-82. Психијатријски [психијатријске]
-83. Блокада [блокадама]
-84. Заплена [заплетена]
-85. Монопол [монополом]
-86. Дисидент [дисидентски]
-87. Екстрадиција [екстрадиција]
-88. Ревизија [ревизијама]
-89. Ваидан []
-90. Колонизација [колонизација]
-91. Мотивација [мотивација]
-92. Просек [просектор]
-93. Ресурс [ресурсу]
-94. Хуманизам [хуманизам]
-95. Дравски [Подравских]
-96. Коалиција [коалиција]
-97. Картеля [картелима]
-98. Резолуција [резолуција]
-99. Менталитет [менталитет]
-100. Епидемиологија [дијалектологија]
-
-С ошибками []
-
- Колонизакаија [Колонизација, Колонизацији, Колонијализам, Колонијализма]
-
- Епидемиогија [Епидемија, Епидемијом, Демагогија]
-
- Казуистикаки [Казуистика, Казуистике, Статистика]
-
- Хуманкзам [Хуманизам, Хуманизма]
-
- Манитулативан [Манипулативна, Ултимативан, Ултимативни]
-
- сањваење [сањање]
-
- утење [хтење, утање, стење, умење, утеше, утече, учење, утехе, утеже, уђење, утезање]
-
- автомобил [аутомобил, обилатом]
-
- мекицинска сестра [војномедицинска]
-
- стукло [стукли, тукло, стукла, стакло, стекло, свукло]
diff --git a/Common/3dParty/hunspell/test/dst/sr_Latn_RS.txt b/Common/3dParty/hunspell/test/dst/sr_Latn_RS.txt
deleted file mode 100644
index 8996675c19..0000000000
--- a/Common/3dParty/hunspell/test/dst/sr_Latn_RS.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-ananas
-anarhistički
-antidepresiv [depresivan, depresivna, represivan, depresivne]
-Anđeo
-avion
-banana
-banka
-belina
-bespomoćnost
-bibliotekar
-bibliaoteikar [bibliotekarka, bibliotekar, biblioteka]
-brod
-citat
-crkva
-cvet
-cveće
-demokratija
-demackratija [demokratija, demokratizacija, demokratiji, demokratije]
-demokratizacija
-Dobrota
-dom
-Dragi
-ekran
-eksperimentalni
-eksplozija
-epidemiologija [epistemologija, ideologija]
-farmakologija
-filantropija
-flaša
-frizura
-fudbal [fudbal, fudbala, fudbalu]
-garaža
-generalitet
-geografski
-globalizam
-gnezdo
-grad
-građanstvo
-grlo
-hamburger
-Harmonija
-himalaji [Himalaji, malajski]
-hiperbola
-hipotermija [hidroterapija]
-hleb
-Hrabrost
-hrana [hrana]
-Hvala
-igra
-igračka
-individualnost
-infrastruktura
-internet
-inmternet [internet, interne]
-jabuka
-jahač
-jastuk
-jednakost
-jubilej
-jurisprudencija
-kafa
-krevet
-kriminalisticki [kriminalistički, kriminalistika, kriminalistička, kriminalistiku, kriminalističke]
-kriminalistika
-kuća
-kvantitativni
-lampa
-latiaratura [mlatarati, rasturati, maturirala, landarati]
-Lepota
-lingvistika
-literatura
-ljubav
-Ljubavi
-ljubavnica
-Ljubazan
-Ljubim
-lubenica
-majica
-majka
-mašina
-mikroorganizama
-mikroskopija [mikroskop ija, mikroskop-ija, mikroskopi ja, mikroskopi-ja, mikroskopi, mikroskopska, mikroskopa, mikroskopski]
-Milost
-Mir
-Mirno
-nacionalizam
-nedopustiv
-neurologija
-novčanik
-noć
-nož
-oktobar
-okultizam
-optimističan [optimistička, optimistički, optimističke, optimističku]
-optimističnost [optimistički, optimističke, optimistička, optimističku]
-ormar
-Osoba
-oči
-pas
-peškir
-planina [planina, planinar, planinac, planinčina, planini, planinčini, planin]
-poniženje
-Porodica
-Prijatelj
-psihologija
-psihoterapija
-Radost
-računar
-reka
-rekonvalescencija
-reumatologija [dermatologija, hematologija, stomatologija]
-revolucija
-sendvič
-Slatko
-Sloboda
-Slobodan
-Snaga
-socijalizacija [socijalizam, specijalizacija, specijalizacijom, socijalizma]
-socijalizam
-Spreman
-Sreća
-Srećan
-Srećno
-sunce
-superiornost
-Svetlost
-tata
-tehnologija
-telefon
-telekomunikacije
-top
-tradicionalni
-ulica
-univerzalnost
-univerzitet
-univirzdalnost [univerzalnost]
-Usmena
-Znanje
-usta
-Vedar
-vegetarijanstvo
-velikodušnost
-voda
-voz
-Zabava
-zavisnost
-Zdravlje
-zemlja
-Zima
-zjmlja [zemlja]
-zločinački
-zoološki
-Zvezda
-ćilim
-čarapa
-čarobnjak
-časopis
-čizme
-đak
-đevrek
-đumbir
-šešir
-šišmiš
-škola
-šljiva
-šuma
-žaba
-ženskara
-žirafa
-život
-životinjski
-žurka
-
diff --git a/Common/3dParty/hunspell/test/dst/sv_SE.txt b/Common/3dParty/hunspell/test/dst/sv_SE.txt
deleted file mode 100644
index 408fca774d..0000000000
--- a/Common/3dParty/hunspell/test/dst/sv_SE.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-Hus
-Sol
-Mjölk
-Vatten
-Fisk
-Stol
-Grön
-Blomma
-Träd
-Katt
-Hund
-Bok
-Cykel
-Kaffe
-Frukt
-Kött
-Fönster
-Dörr
-Säng
-Lampa
-Bord
-Hår
-Ögon
-Hand
-Fötter
-Näsa
-Mun
-Öra
-Huvud
-Arm
-Ben
-Kläder
-Hatt
-Skor
-Väska
-Papper
-Penna
-Skrivbord
-Telefon
-Radio
-Musik
-Film
-Teater
-Konst
-Sport
-Spel
-Resa
-Bil
-Tåg
-Buss
-Flygplan
-Båt
-Stad
-Land
-Hav
-Sjö
-Flod
-Berg
-Dal
-Park
-Skog
-Sjukhus
-Apotek
-Skola
-Universitet
-Affär
-Restaurang
-Café
-Hotell
-Turist
-Vän
-Familj
-Mamma
-Pappa
-Bror
-Syster
-Barn
-Morfar
-Mormor
-Vänster
-Höger
-Framåt
-Bakåt
-Upp
-Ner
-Snäll
-Osnäll [Snäll, Osäll]
-Glad
-Ledsen
-Trött
-Stark
-Svag
-Tyst
-Bullrig
-Ren
-Smutsig
-Vacker
-Ful
-Liten
-Stor
-Komplexitet
-Oproportionerlig
-Ovillkorlig
-Efterklokhet
-Komplicerad
-Desorientering
-Konstellation
-Otillgänglighet
-Irreversibel
-Förlåtelse
-Overksamhet
-Indifferent
-Hierarki
-Kombinatorik [Kombinatorisk, Kombination]
-Inkompatibilitet
-Absorption
-Konsekvens
-Verklighetsfrånvänd
-Retrospektiv
-Förändringsbarhet [Förändringsbarnet, Förhandlingsbart, Förhandlingsbar]
-Ambivalens
-Besvikenhet [Besviken, Besviket]
-Ineffektivitet
-Intrikat
-Dilemma
-Hesitation
-Absurditet
-Kompromisslös
-Konsolidering
-Föresats
-Tillfredsställelse
-Delegering
-Rekommendation
-Detaljrikedom
-Oanvändbar
-Stagnation
-Nostalgi
-Hemlighetsfull
-Avsaknad
-Perseverans [Perseverera, Reverseras, Reversera]
-Existentialism
-Repetitivitet [Repetitivt, Receptivitet, Repetitiv, Representativitet]
-Intolerans
-Anonymitet
-Obetydlig
-Paradox
-Förvirring
-Juxtaposition
-Reflektion
-Självständighet
-Kollision
-Kreativitet
-Djupgående
-Abstraktion
-Eufori
-Autentisk
-Insinuation
-Omöjlig
-Pessimism
-Inkonsekvens
-Revisionism
-Sensationell
-Obeveklig
-Subjektivitet
-Universalitet
-Entropi
-Omvälvande
-Infiltration
-Konservativ
-Atypisk
-Provokation
-Konfrontation
-Anarki
-Konkurrenskraft
-Defensivitet [Defensivt, Sensitivitet, Defensiv, Densitet]
-Nihilism
-Konklusion
-Apori [Apor, Apors, Porig]
-Korrespondens
-Prioritering
-Exponentiell
-Fragmentering
-Aversion
-Harmoni
-Vanmakt
-Signifikans
-Katalysator
-Förlust
-Enhällighet
-Ambition
-Tendens
-Alienation
-Artificiell
-Uppfyllelse
-Psykosomatisk
-Virtuos
-Egensinnig
-Anpassning
-Hållbarhet
-Konstitution
-Kompleksitet [Komplexitet, Komplementet]
-Oproporsjonerlig [Oproportionerlig, Proportionerlig]
-Uvilkorlig [Villkorlig]
-Etterklokhed [Efterklok]
-Komplisert [Komplicerat]
-Desorientering
-Konstelasjon [Konstellation]
-Utilgjengelighet [Tillgänglighet]
-Irreversibel
-Forlatelse [Förlåtelse]
diff --git a/Common/3dParty/hunspell/test/dst/tr_TR.txt b/Common/3dParty/hunspell/test/dst/tr_TR.txt
deleted file mode 100644
index 0ea601fe67..0000000000
--- a/Common/3dParty/hunspell/test/dst/tr_TR.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-Akşam
-Almak
-Altın
-Anahtar
-Anlamak
-Araba
-Atmak
-Ayakkabı
-Açmak
-Ağaç
-Bahçe
-Bakır
-Bakkal
-Bakmak
-Balık
-Beyaz
-Bilgisayar
-Bilmek
-Binmek
-Bulmak
-Ceket
-Cevaplamak
-Deniz
-Dinlemek
-Doktor
-Duyurulmamış
-Düzenleştirme
-Düşmek
-Düşünmek
-Ekmek
-Elbise
-Eldiven
-Elma
-Erkek
-Etek
-Etmek
-Ev
-Eşarp
-Gelgit
-Geliştiricilikle
-Geliştirilebilir
-Geliştirme
-Gerçekleştirme
-Gezmek
-Geçmek
-Gitar
-Gitmek
-Giymek
-Gri
-Gömlek
-Görülebilirlik
-Görünümlü
-Görünüşlü
-Gözlük
-Gümüş
-Günaydın
-Hareketlendi
-Hareketlilik
-Hava
-Hayalperest
-Hüzün
-Kahve
-Kahverengi
-Kalabalıklar
-Kalem
-Kalkmak
-Kalmak
-Kapatmak
-Kararlılık
-Kararlılıkla
-Kararsızlık
-Kararsızlıkla
-Karpuz
-Kedi
-Kemer
-Kemdkcer [Kemerler]
-Kırmızı
-Kitap
-Kız
-Kızgınmak [Kızgın]
-Koklamak
-Koalye [Kolye, Kavalye]
-Kolye
-Konservatuvar
-Konuşmak
-Korkmak
-Koymak
-Koşmak
-Kravat
-Kullanılabilir
-Kullanılmış
-Kullanılmışlık
-Kullanışlılık
-Kurumsallaşma
-Köpek
-Küpe
-Kütüphane
-Mavi
-Mazbut
-Melankoli
-Merdiven
-Merhaba
-Merhabalar
-Meurhaba [Merhaba, Murabaha]
-Meydan
-Meyhane
-Meyve
-Mor
-Muhafazakar
-Muhteşem
-Mukadderatlarınızdanmışçasına []
-Muvaffak
-Muzaffer
-Muzafferiyet
-Muzip
-Mükemmeldik
-Münasebet
-Münzevi
-Müsrif
-Mütevazi
-Müteessir
-Mütercim
-Mütereddit
-Mütevazı
-Müzmin
-Okul
-Okumak
-Otobüs
-Otoriterlik
-Oynamak
-Pantolon
-Pasta
-Pembe
-Pembei [Pembe, Pembeyi, Pembeli, Pembeci, Pembe i, Pembesi, Pemben]
-Plaj
-Platin
-Saat
-Sandalye
-Sarı
-Satmak
-Sevinmek
-Sevmek
-Sıcak
-Sıradaymışız
-Siyah
-Sormak
-Soymak
-Soğuk
-Su
-Sükûnet [Sükunet, Sünnet]
-Sürrealist
-Süt
-Tabak
-Tadına bakmak [Alınamamaktadır]
-Tatlı
-Tavuk
-Telefoncu
-Televizyon
-Temizlemek
-Teşekkürler
-Türkuaz
-Tuirkuazu [Türkuaz]
-Turuncu
-Tutmak
-Ulaştırılabilir
-Uygulanabilir
-Uyumak
-Uçak
-Yapmak
-Yatak
-Yazmak
-Yemek
-Yeşil
-Yıkanmak
-Yıldız
-Yol
-Yöneltilmezken
-Yüzme
-Yüzük
-Zenginleştirmek
-Çalışamamıştı
-Çalışmak
-Çalışmamıştır
-Çanta
-Çay
-Çıkarmak
-Çiçek
-Çorap
-Özelleştirilmiş
-Özelleştirme
-Özgürleştirme
-Üzülmek
-İnmek
-İsteksizlik
-İsteksizlikle
-İstikrarlı
-İstikrarlılık
-İstisnai
-İslamiyetle
-İzlemek
-İçmek
-İşbirliği
-İşitmek
-Şapka
-Şemsiye
diff --git a/Common/3dParty/hunspell/test/dst/uk_UA.txt b/Common/3dParty/hunspell/test/dst/uk_UA.txt
deleted file mode 100644
index be4941540b..0000000000
--- a/Common/3dParty/hunspell/test/dst/uk_UA.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-абдукція
-абіогенез
-амбівалентнасть [амбівалентність, амбівалентний, бівалентність, біоеквівалентність, внівалентність]
-амбівалентність
-анахранізм [анахронізм, брахманізм, анархізм, нанізм]
-анахронізм
-антропогенез
-антропологія
-антропоморфізм
-апатія
-археологія
-архетип
-аскетизм
-астрономія
-афект
-бачити
-бігти
-білий
-біллий [білий, збілілий]
-біологія
-бувай
-будинок
-будь ласка [будь ласку]
-бути
-важко
-велиикий [великий, великоокий]
-великий
-веселка
-взяти
-вибачте
-відчувати
-вода
-волюнтаризм
-втаємниченість
-вчитися
-гарний
-гарячий
-гегемонія
-географія
-герменевтика
-герменевтика
-гештальт [штатгальтер]
-говорити
-гойдалка
-готувати
-грати
-дати
-дедукція
-деконструктивізм [де конструктивізм, де-конструктивізм, конструктивізм, неконструктивно]
-деконструкція
-демаркація
-детермінізм
-дзвіночок
-дивитися
-дисгарммонія [дисгармонія, дисгармоніям, дисгармонійний, фісгармонія]
-дисгармонія
-дисфункція
-дисфункця [дисфункція, дистинкція]
-дихотомія
-до побачення [побачення]
-добрий
-доктрина
-думати
-дурний
-дурня
-дякую
-евфемізм
-езотерика
-ей
-екзистенціалізм
-екзистенціалізм
-екзистенцілізм [екзистенціалізм, екзистенціаліст, екзистенція]
-екзистенція
-економіка
-емерджентність
-ентелехія
-епістемологія
-ефемерність
-ефемерність
-занепадництво
-звісно
-здоровий
-зелений
-йти
-ілюзорність
-ілюзорність
-імплікація
-інвектива
-індукція
-інтроспекціїя [інтроспекції, інтроспекція, інтроспекції я, ретроспекція]
-їсти
-історія
-каблучка
-кава
-казус
-калюжа
-катарсис
-каченя
-каштани
-квітка
-кішка
-класно
-книга
-когнітивістика [когнітивність, когнітивна]
-комаха
-консенсус
-космогенез [номогенез, екогенез]
-купувати
-легко
-лінгвістика
-літати
-маленький
-марнослів'я
-математика
-мати
-метаморфоза
-метелик
-метелиця
-містифікація
-місто
-могти
-можливо
-мусити
-насправді
-не радий [нерадий, незрадний]
-незворушність
-ні
-нігілізм
-новий
-нонсенс
-ностальгія
-павучок
-парадокс
-пес
-писати
-пити
-піти
-плавати
-плакати
-повільний
-поганий
-політологія
-постмодернізм
-потворний
-працювати
-привіт
-прийти
-психоаналіз
-птах
-радий
-ремінісценція
-рефлексія
-робити
-розбурхання [розбухання, розбурханий, розпухання, бурхання]
-розумний
-сильний
-сингулярність
-синестезія [кінестезія, анестезія]
-синій
-синішй [синій, синішай, синішати]
-синкретизм
-сказати
-скатертина
-слабкий
-слухати
-сміятися
-сніг
-соліпсизм
-соломинка
-сонечко
-сонце
-соціологія
-спати
-співати
-справді
-старий
-структуралізм
-сумний
-так
-так
-танцювати
-телефонувати
-тож
-трансцендентність
-фантастично
-фаталізм
-фемінізм
-феномен
-феноменологія
-фізика
-філософія
-фрактал
-хворий
-хімія
-хліб
-хліб
-ходити
-холодний
-хотіти
-чао [чадо, чан, чат, чар, час, чад, дао, чаш, чай, чаї, чаю]
-червонй [червоний, червоній, червоно, червона, червоні, червону, червоне, червоню, червонявий]
-червоний
-черевики
-читати
-чорнй [чорний, чорній, чорно, чорна, чорни, чорні, чорну, чорне, чорню]
-чорний
-чути
-швидкий
-щасливий
-яблуко
diff --git a/Common/3dParty/hunspell/test/dst/uz_Cyrl_UZ.txt b/Common/3dParty/hunspell/test/dst/uz_Cyrl_UZ.txt
deleted file mode 100644
index 7aee309965..0000000000
--- a/Common/3dParty/hunspell/test/dst/uz_Cyrl_UZ.txt
+++ /dev/null
@@ -1,262 +0,0 @@
-Mарт [Арт, Ғарт, Қарт, Карт, Шарт, Фарт, Варт, Парт, Сарт, Март]
-Ёз
-Ём
-Ёхуд
-Август
-Адвакат [Адвокат, Адэкват]
-Адреси
-айтган-лирангиз
-айқин
-амалга
-анча
-Апрел
-арзонроқ
-аҳамият [аҳамият, аҳамияти, ҳамият, ҳамжамият]
-аҳднома
-бажарилади
-бажарилди
-баланд
-ихтисослан
-банкрот
-баҳона
-Баҳор
-бераман
-берасизми
-беринг
-бериш
-бешинчи
-биз
-Бизга
-Бизнинг
-билан [билан, биланг, билани]
-Бирор
-Бозорнинг
-бор
-бошқа
-Бу
-Бугун
-будингиз
-бунга
-бундай
-Бухгалтерлик
-бўлади
-бўладими
-бўлиши
-бўлмаган
-бўлса
-бўш
-бўшайди
-бўшатасиз
-вазифасига
-вазият
-вариант
-вақт
-газетадаги
-газетадан
-даромад
-Декабрь
-Душанба
-Эрталаб
-Етказиб
-Жисмоний
-Жуда
-Жума
-зарур
-зиёфат
-Ижара
-ижарага
-икки
-Илтимос
-Индинга
-информатизациялари
-Иситгич
-иши
-ишлатсак
-Ишхона
-Июль
-Июнь
-Йўқ
-йил
-йилдан
-кам
-Шинамгина
-кампанияси
-келдим
-келишимдан
-келмоқчи
-келсам
-келтириш
-керак
-керакдир
-керакми
-кета-ди [кетади, кетарди, кета-чи, кета-кета, дискета]
-кеч
-Кеча
-кечага
-Кечаси
-Кечир
-Кечирдинг
-кирла
-кирадими
-кондиционер
-коррупциядир
-кран
-Куз
-Кун
-куни
-кўрмоқчи
-кўчиб
-лойиҳа
-Май
-маълумоти
-маълумотларни
-Маъмурият
-маъруза
-Мен
-музлатгич
-мумкин
-муфмкин [мумкин]
-мутахассис
-мушовир
-муҳим
-нарса
-нархи
-Нархини
-нақд
-ўшанақасини
-неча
-Номардлик
-Ноябри
-интернетдаги
-ойнаси
-ойнинг
-Октябри
-олдин
-олдиндан
-олмаймиз
-олмоқчи
-орқали
-шоти
-шорти [шоти, орти, ортиш, шотир, корти, форти, шарти, порти, сорти, ширти, торти, борти, шомурти]
-Оқшом
-пайдо
-Панжшанба
-пулини
-Раҳмат
-резюме
-реклама
-Салом
-Сармоядор
-Сентябрь
-Сешанба
-Сиз
-сизга
-сизда
-Сизнинг
-синган
-сифатида
-совуқ
-софвуқ [совуқ]
-Солиқларни
-Статистик
-сўм
-тажрибали
-тайёргарлик
-тайёрладик
-тайёрладингизми
-таклиф
-талафот
-талафоти
-таъминловчилардан
-танишинг
-таржимон
-тарржимон [таржимон, тарраксимон]
-тахминан
-ташкил
-Телефонни
-технология
-Безантирани
-тозалан
-тозалигига [тозалигига, газтозалагич]
-Тонгда
-топширишимиз
-топшириқ
-турли
-турмоқчи
-тутсак
-Тушлик
-ўладиганингиз
-тўлай
-тўлаймиз
-тилдиришинг
-тўлиқ
-уйингиз
-уйни
-уч
-учун
-ўқидим
-фақат
-Феврал
-хабар
-Хайрли кун [Хайрли кўн]
-Мотамхонаси
-хонлик
-Чек
-Чоршанба
-Шанба
-шарт-номани
-шартини
-шартлар
-шартлари
-шартни
-шартнома
-шахс
-шовқин
-Шом
-Шу
-эди
-Эртага
-Эртадан сўнг [Эртасиганг]
-Эшитишимга
-эълон
-эълонингиз
-эълонингизни
-эътироф
-Юклаш
-Якшанба
-Январи
-Ярим кеча [Яримкеча, Яримчиликча]
-яхши
-қабул
-қаерда
-Қанақа
-қаноатманда
-қанча
-қачон
-қизиқарлидир
-қиламиз
-қилганим [қилганим, қилганими, қилгандайин]
-қилдим
-қилинг
-қилинди
-қилишди
-қиммат
-қиммати
-Қимматидан
-қирқ
-Қиш
-қувонарлими
-қўнғироқ
-Қўшимча
-ҳайвонини
-ҳам
-ҳамза
-Ҳар
-ҳафтага
-ҳақиқатан
-ҳисоблаб
-Ҳозир
-ҳужжатни
-Ўтган кун [Ўтган кўн]
-
-
diff --git a/Common/3dParty/hunspell/test/dst/uz_Latn_UZ.txt b/Common/3dParty/hunspell/test/dst/uz_Latn_UZ.txt
deleted file mode 100644
index 0b2717d0ce..0000000000
--- a/Common/3dParty/hunspell/test/dst/uz_Latn_UZ.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-Salom
-Sallom [Slalom, Salom, Musallo, Alloma, Salo]
-Rahmat
-Rhmat [Rahmat, Marhamat]
-Iltimos
-Iltimo [Iltimos, Tilsimot, Timol]
-Kattalar
-Kattalarvf [Kattalashtir]
-Yaxshi
-Yashi [Ayshi, Tashi, Yash, Yasashi, Yarashish, Yalashish, Yaxshi]
-Kelajak
-Keljajak [Kelajak]
-Oilaviy
-Oilaaviy [Oilaviy, Hosilaviy]
-Qarindosh
-Qarinndosh [Qarindosh, Qayindoshlar, Oqarinish]
-Shahar
-Shaha [Shah, Shalha]
-Dengiz
-Dengizzz [Dengiz]
-Quyosh
-Quyyosh [Quyosh, Quysh]
-Yulduz
-Oyim
-Kechqurun
-Tushun
-Suvchi
-Sharob
-Choyxona
-Nonushta
-Tushlik
-Muzqaymoq
-Desert
-Tuzluq
-Mevalar
-Sabzavot
-Baliq
-Tuxumli
-Sabza
-Sariq
-Salatlar
-Shirinlik
-Shokolad
-Rishta
-Kakao
-Pishloq
-Tort
-Qaymoq
-Sutli
-Qatiq
-Salomatlik
-Temir
-Zahar
-Oqimli
-Shamol
-Olov
-Yer
-Osmon
-Shanba
-Dushanba
-Seshanba
-Chorshanba
-Payshanba
-Juma
-Yakshanba
-Oltin
-Tong
-Bomdod
-Asr
-Shom
-Kun
-Oqsoqol
-Shoshqaloq
-Kulgili
-Muxlislilar
-Tavsiflash
-Tuzilishga
-Mustaqillik
-Tushuntirish
-Boshqarish
-Mashhurlik
-Tarkibiy
-Tahlil
-Ishchi
-Xalqaro
-Tarjima
-Mustahkamlik
-Chaqaloq
-Istiqbol
-Tasvir
-Taklif
-Tasavvur
-Jiddiy
-Majburiyat
-Asosiy
-Tahdid
-Tushunmovchilik
-Ishonch
-Maqomi
-Ijodkor
-Tadbirkor
-Hayotiy
-Mashhur
-Bemorlik
-Tadbir
-Jismoniy
-Madaniyat
-Xavfsizlik
-Sifatli
-Suvli
-Sotuvchi
-Chetel
-Tashqi
-Sotuv
-Tarbiyalanish
-Murabbo
-Sariqcha
-Qovun
-Shaharlik
-Muhimlik
-Tarbiyachilik
-Xatolik
-Balandlik
-Yuzaki
-Kuyov
-Qiziquvchan
-Orzular
-Mashq
-Qalampir
-Muammo
-Sadoqatli
-Yovuzlik
-Fikr-mulohaza
-Boylik
-Tushuncha
-Zanjir
-Eslatma
-Tabassum
-Ishonuvchi
-Chidamlilik
-Ilova
-Birodarlik
-Oqilona
-Ijodiyot
-Tayanch
-Hurmat
-Baxtli
-Tajriba
-Samimiylik
-Shifokor
-Ishrat
-Baho
-Namoyish
-Qiyinchilik
-Bolalar
-Ishonchli
-Taqdir
-Shovqinli
-Xalqaro
-Baxt
-Fursat
-Hurmatli
-Qulaylik
-Zamonaviy
-Sadoqat
-Sabr
-Nikoh
-Jasorat
-Barkamollik
-Dunyoqarash
-Omadli
-Foydali
-Yorqin
-Mehribonlik
-Fazilatli
-Kutubxona
-Istiqomatli
-Fido
-Bahor
-Shafqatsizlik
-Tafakkur
-Fazilat
-Qochish
-Laziz
-Uzoq
-Ilhom
-Omad
-Hurmatli
-Tandir
-Sherzod
-Bahoriy
-Dilshod
-Baxtli
-Shonli
-Nurli
-Shafqatsizlik
-Oqqush
-Boylik
-Toza
-Sabrli
diff --git a/Common/3dParty/hunspell/test/dst/vi_VN.txt b/Common/3dParty/hunspell/test/dst/vi_VN.txt
deleted file mode 100644
index bcc3ab3150..0000000000
--- a/Common/3dParty/hunspell/test/dst/vi_VN.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-Bánh
-Bang
-bênh
-bướng
-bậy
-Chanh
-chum
-chuyện
-chép
-Chùng
-chắp
-chệnh
-chới
-chữ
-công
-cạc
-cột
-cứu
-Doanh
-duyên
-dùng
-dể
-dọng
-gia
-giày
-giêng
-Giảng
-giềng
-hon
-Hoẳn
-Hài
-hôm
-hước
-hấu
-hớt
-hữu
-Khiển
-Khoào
-khuya
-khuyến
-khách
-khén
-khẩn
-khắp
-khựng
-kẻo
-lang
-liền
-Loàng
-Luỗng
-lình
-lương
-lấp
-lệnh
-lịnh
-lốn
-lời
-lựng
-Muộn
-Mãnh
-mại
-mạn
-mổ
-mởn
-nghiễm
-nghều
-Ngoáy
-Nguyên
-ngóp
-người
-ngỏ
-ngớp
-ngụa
-ngửng
-nhiếp
-nhu
-nhà
-nhân
-Nhóm
-nhưỡng
-nhắm
-nhổn
-nhứt
-ninh
-noi
-nãy
-nạn
-nốt
-ong
-pao
-phiên
-phiêu
-Phên
-Phương tiện []
-phẩm chất []
-phố đi bộ [phố đì bộ, phố đĩ bộ]
-quan trọng [quàn trọng, quản trọng, quán trọng, quăn trọng, quằn trọng, quắn trọng, quặn trọng, quân trọng, quần trọng, quẩn trọng, quẫn trọng, quấn trọng, quận trọng]
-quyền lợi [quyền]
-quán cà phê [qùán cà phê, qủán cà phê, qũán cà phê, qúán cà phê, qụán cà phê, qưán cà phê, qừán cà phê, qửán cà phê, qữán cà phê, qứán cà phê, qựán cà phê]
-quảng cáo [quảng]
-Quốc
-Quốc tế [Quốc]
-riêng biệt [triêng]
-rưỡi
-Rải
-Rẻng
-rộng rãi [rộng]
-siễn
-sum
-Sõng
-Sưu
-sưu tập []
-sử dụng [sử đụng]
-Thiệt thòi []
-Thuộc về [Thuộc]
-thuộc tính []
-
-Слова с ошибками []
-thiệte [thiệt, thiệt e, thiện]
-quốq tế []
-nguên [nguyên, nguồn]
-khoao [khoào, khoai, khoa, khao, khoeo, khoèo, khoan]
-chenh [chênh, chềnh, chểnh, chễnh, chếnh, chệnh, cheng, chen, chanh, chành, chảnh, chánh, chạnh, chinh, chình]
-chhùng [chùng, chùn, hùng]
-man
-doah [doa, doanh, doan, doa h]
-khien [khiên, khiền, khiển, khiến, khin, khen]
-ngoay
diff --git a/Common/3dParty/hunspell/test/main.cpp b/Common/3dParty/hunspell/test/main.cpp
index 49e6bae235..34b91a2874 100644
--- a/Common/3dParty/hunspell/test/main.cpp
+++ b/Common/3dParty/hunspell/test/main.cpp
@@ -135,6 +135,10 @@ int main(int argc, char *argv[])
std::wstring sAff = sDictionariesDir + L"/" + sName + L"/" + sName + L".aff";
std::wstring sDic = sDictionariesDir + L"/" + sName + L"/" + sName + L".dic";
+ // skip check diffs if dictionary is not exists
+ if (!NSFile::CFileBinary::Exists(sAff) || !NSFile::CFileBinary::Exists(sDic))
+ continue;
+
std::string sAffA = U_TO_UTF8(sAff);
std::string sDicA = U_TO_UTF8(sDic);
diff --git a/Common/3dParty/hunspell/test/src/az_Latn_AZ.txt b/Common/3dParty/hunspell/test/src/az_Latn_AZ.txt
deleted file mode 100644
index 4d97adce04..0000000000
--- a/Common/3dParty/hunspell/test/src/az_Latn_AZ.txt
+++ /dev/null
@@ -1,213 +0,0 @@
-A
-qocalmaq
-Alderaan'ın
-hamısı
-həmçinin
-Və
-cavab
-dir
-incəsənət
-kimi
-da
-uzaq
-körpə
-zirzəmi
-ol
-olub
-doğuldu
-bulvar
-fasilə
-nəsllər
-gəlin
-lakin
-al
-ilə
-Kaliforniya
-Kalifornikasiya
-bilər
-kartlar
-şans
-Çin
-çənə
-klublar
-Cobain
-bürc
-nəzarət
-qiymət
-edə bilməzdim
-yaratmaq
-lənət
-rəqs
-saziş
-sövdələşmələr
-dağıdıcı
-almazlar
-etməz
-etməyərik
-arzu
-xülyalar
-Şərq
-kənar
-kənarları
-məmnunluq
-hamının
-uzaq
-peri
-solğun
-üz
-son
-tap
-ilk
-üçün
--dan
-sərhəd
-qız
-qızın
-yaxşı
-gitara
-əl
-hardcore
-var
-yoxdur
-o
-eşitmək
-ürək
-O'nun
-ona
-gizli
-yüksək
-ona
-onun
-Hollivud
-Mən
-Mənəm
-əgər
-içində
-məlumat
-içində
-dir
-bu
-jack
-sadəcə
-kral
-qohum
-bilmək
-qoyulmuş
-qanun
-yerləşdirilmək
-qurğuşun
-aparmaq
-yerləşdirilmə
-məkan
-sevmək
-şans
-edilmiş
-adam
-çox
-Evlənmək
-maska
-o bilər
-bəlkə də
-mənası
-mən
-meditasiya
-xatirə
-ağılın
-pul
-mənim
-heç vaxt
-deyil
-heç nə
-nömrələr
-of
-of
-üstündə
-bir
-yalnız
-və ya
-nəticə
-öz
-Ödə
-Şəftəli
-yerlər
-oynayır
-oynamaq
-əhali
-porno
-tərifləmək
-ehtimal ki
-ehtimal
-psixik
-kraliça
-qaldırmaq
-qalan
-hörmət
-qalxmaq
-yol
-xam
-müqəddəs
-Xilas et
-elmi
-çığırmaq
-satılır
-şəkil
-xəstələnmək
-gümüşçü
-dəri
-əsgər
-bir şey
-Mahnı
-mahnılar
-qılınclar
-büyü
-casuslar
-ulduz
-Stansiya
-oğurlamaq
-daşlar
-günəş
-şübhəli
-İsveç
-qılınclar
-yeniyetmə
-test
-dandan
-bu ki
-bu ki
-bu
-onların
-bu
-onlar
-düşünmək
-bu
-onlar
-gel-git
-üçün
-deyilmişəm
-çox
-cəhd et
-başa düşdüm
-qilin
-titrəmək
-mübarizə aparır?
-istəyirəm
-müharibə
-idi
-dalğalar
-geymək
-silahlar
-yaxşı
-idarə olunan
-Qərbi
-nə
-arasında
-qalib gəlmək
-qalib gəlir
-ilə
-qadın
-dünya
-səhv
-siz
-sizə
-sənsən
-sənin
diff --git a/Common/3dParty/hunspell/test/src/bg_BG.txt b/Common/3dParty/hunspell/test/src/bg_BG.txt
deleted file mode 100644
index a09b554067..0000000000
--- a/Common/3dParty/hunspell/test/src/bg_BG.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-A
-остаряване
-Алдераан
-всичко
-също
-и
-отговор
-са
-изкуство
-като
-в
-далеч
-бебе
-мазе
-бъда
-било
-роден
-булевард
-почивка
-породи
-невеста
-но
-купувам
-от
-Калифорния
-Калифорникация
-може
-карти
-шанс
-Китай
-брадичка
-клубове
-Кобейн
-съзвездие
-контрол
-цена
-не можех
-създаване
-проклятие
-танц
-сделка
-сделки
-унищожение
-диаманти
-не прави
-не правим
-мечта
-мечти
-Изток
-ръб
-ръбове
-екстаз
-всеки
-далеч
-приказка
-избледнява
-лица
-краен
-намирам
-първи
-за
-от
-предел
-момиче
-момичето
-добре
-китара
-ръка
-хардкор
-има
-няма
-той
-чуя
-сърце
-той е
-нейни
-скрит
-висок
-него
-негов
-Холивуд
-аз
-аз съм
-ако
-в
-информация
-вътре
-е
-това е
-вале
-просто
-крал
-родственик
-знам
-определен
-закон
-поставям
-водя
-води
-местоположение
-обичам
-късмет
-направен
-човек
-много
-Ожени се
-маска
-май
-може би
-означава
-аз
-медитация
-спомен
-ума
-пари
-моя
-никога
-не
-нищо
-числа
-от
-изключен
-на
-един
-само
-или
-изход
-свой
-Плати
-праскова
-места
-играе
-играя
-население
-порно
-похвала
-вероятно
-вероятен
-психичен
-кралица
-въздигам
-останал
-почит
-възход
-път
-груб
-светия
-Спасявам
-наука
-крясък
-продава
-форма
-по-болен
-златар
-кожа
-войник
-някаква
-Песен
-песни
-пикове
-заклинание
-шпиони
-звезда
-стация
-крада
-камъни
-слънце
-подозрителен
-Швеция
-мечове
-тийнейджър
-тест
-отколкото
-това
-това е
-на
-техни
-тези
-те с
-мисли
-този
-той
-прилив
-до
-каза
-също
-опитайте
-разбрано
-еднорог
-вибрация
-водене?
-искам
-война
-беше
-вълни
-носете
-оръжия
-Ами
-бяха
-Западна
-какво
-докато
-победа
-победи
-със
-жена
-свят
-грешка
-ти
-ти би
-ти си
-вашият
diff --git a/Common/3dParty/hunspell/test/src/ca_ES.txt b/Common/3dParty/hunspell/test/src/ca_ES.txt
deleted file mode 100644
index 3fd8739062..0000000000
--- a/Common/3dParty/hunspell/test/src/ca_ES.txt
+++ /dev/null
@@ -1,112 +0,0 @@
-amor
-llum
-lluum
-esperança
-espirança
-llibertat
-força
-forrça
-pau
-somni
-llibre
-mar
-amistat
-cançó
-flor
-cel
-estrella
-temps
-camí
-vent
-muntanya
-mumntanya
-riu
-soroll
-silenci
-viatge
-foc
-gel
-paraula
-vida
-dia
-nit
-tarda
-matí
-lluna
-sol
-llac
-marbre
-ferro
-sal
-mel
-sucre
-peix
-ocell
-oceoll
-joc
-ritme
-melodia
-pintura
-pentura
-teatre
-dansa
-poema
-història
-llegenda
-mitologia
-festa
-música
-vi
-cervesa
-cervessa
-formatge
-pa
-ciutat
-poble
-natura
-camp
-bosc
-platja
-sorra
-sorrà
-pedra
-ànima
-cos
-ment
-cor
-somriure
-somriàre
-abraçada
-bes
-parla
-oida
-vista
-tacte
-gust
-olfacte
-color
-forma
-número
-lletra
-sistema
-regla
-escola
-universitat
-univversitat
-mestre
-estudiant
-sabiduria
-lliçó
-pregunta
-resposta
-risposta
-dubte
-certesa
-veritat
-mentida
-promesa
-secret
-descoberta
-descaberta
-aventura
-destinació
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/ca_ES_valencia.txt b/Common/3dParty/hunspell/test/src/ca_ES_valencia.txt
deleted file mode 100644
index 8b31af1a39..0000000000
--- a/Common/3dParty/hunspell/test/src/ca_ES_valencia.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-A
-envellir
-Alderaan
-tot
-també
-I
-resposta
-és
-art
-com
-a
-lluny
-nadó
-celler
-ser
-ha estat
-nat
-bulevard
-pausa
-generacions
-núvia
-però
-comprar
-amb
-Califòrnia
-Californication
-pot
-cartes
-oportunitat
-Xina
-mentó
-clubs
-Cobain
-signe del zodíac
-control
-preu
-no podria
-crear
-maleït
-ballar
-acord
-negocis
-destructiu
-diamants
-no fer
-no fem
-desitjar
-somnis
-Est
-vora
-voreres
-satisfacció
-tots
-llunyà
-fada
-pallid
-cara
-final
-trobar
-primer
-per
-de
-frontera
-noia
-la noia
-bé
-guitarra
-mà
-hardcore
-hi ha
-no hi ha
-ell
-sentir
-cor
-ell és
-seva
-secret
-alt
-ell
-seu
-Hollywood
-jo
-sóc
-si
-en
-informació
-interior
-és
-és
-jack
-només
-rei
-parent
-saber
-fixat
-llei
-col·locar
-plom
-portar
-col·locació
-lloc
-estimar
-oportunitat
-fet
-home
-molts
-casar-se
-màscara
-podria
-potser
-sentit
-jo
-meditació
-memòria
-ment
-diners
-meu
-mai
-no
-res
-números
-de
-fora
-sobre
-un
-només
-o
-resultat
-seu
-pagar
-préssec
-llocs
-jugar
-joc
-població
-porno
-elogiar
-probablement
-probable
-psíquic
-reina
-elevar
-restant
-respecte
-pujar
-camí
-cru
-sant
-salvar
-ciència
-crit
-vendre’s
-figura
-malalt
-joier
-pell
-soldat
-alguna cosa
-cançó
-cançons
-cims
-encanteri
-espies
-estrella
-estació
-robar
-pedres
-sol
-sospitós
-Suècia
-espases
-adolescent
-prova
-que
-que
-això
-seu
-aqueixos
-ells
-pensar
-aqueix
-ells
-marees
-per
-no he estat
-molt
-intentar
-entendre
-fer
-tremolar
-lluitar
-desitjar
-guerra
-va ser
-ones
-portar
-armes
-bé
-administrat
-Oest
-què
-entre
-guanyar
-guanya
-amb
-dona
-món
-equivocat
-tu
-vostè
-tu ets
-teu
diff --git a/Common/3dParty/hunspell/test/src/cs_CZ.txt b/Common/3dParty/hunspell/test/src/cs_CZ.txt
deleted file mode 100644
index a76fe6803e..0000000000
--- a/Common/3dParty/hunspell/test/src/cs_CZ.txt
+++ /dev/null
@@ -1,206 +0,0 @@
-pomaliý
-šťstný
-smuutný
-horcký
-studiený
-záludnast
-náhodillost
-úpěnlevý
-rozspačitý
-svéhllavý
-jablko
-slunce
-voda
-dům
-pták
-káva
-chleba
-květina
-kniha
-pes
-kočka
-město
-zelený
-modrý
-červený
-bílý
-černý
-velký
-malý
-rychlý
-pomalý
-šťastný
-smutný
-horký
-studený
-nový
-starý
-hezký
-ošklivý
-dobrý
-špatný
-zdravý
-nemocný
-silný
-slabý
-chytrý
-hloupý
-pracovat
-jíst
-pít
-spát
-číst
-psát
-mluvit
-smát se
-plakat
-zpívat
-hrát
-tančit
-učit se
-nakupovat
-vařit
-telefonovat
-dívat se
-poslouchat
-chodit
-běžet
-létat
-plavat
-psát
-učit se
-dělat
-mít
-být
-jít
-přijít
-odejít
-dát
-vzít
-říct
-vidět
-slyšet
-cítit
-myslet
-chtít
-moct
-muset
-rád
-nerad
-ano
-ne
-prosím
-děkuji
-na shledanou
-omlouvám se
-sbohem
-ahoj
-čau
-hej
-jo
-fakt
-super
-blbost
-paráda
-no jo
-jasně
-takže
-vlastně
-třeba
-snad
-leštěnka
-pochmurný
-živelný
-ponaučení
-záhada
-pochybnost
-nádhera
-soucit
-záludnost
-náhodilost
-úpěnlivý
-rozpačitý
-svéhlavý
-marnivost
-blahodar
-rozčarování
-odchylka
-přelud
-vytrvalost
-neústupnost
-lehkost
-souznění
-rozmarnost
-roztržitost
-úskočnost
-rozkoš
-marasmus
-rozpolcenost
-neúprosnost
-ztřeštěnost
-chmurnost
-okouzlení
-zářivost
-vyrovnanost
-neochvějnost
-neúcta
-bizarnost
-rozmařilost
-nepochopení
-nevýslovný
-pomíjivost
-beznaděj
-úzkost
-odtažitost
-rozerv
-rozervanost
-vyčerpanost
-bezcitnost
-záludnost
-nezdolnost
-rozkošátnost
-nezdolatelnost
-rozmarnost
-živelnost
-bezútěšnost
-záhadnost
-neposkvrnitelnost
-rozkošnělost
-bezradnost
-neuchopitelnost
-pošetilost
-opojení
-rozervanost
-marnost
-bezstarostnost
-nevinnost
-náladovost
-vyrovnanost
-ztracenost
-bezbřehost
-rozervanost
-opojení
-bezradnost
-neuchopitelnost
-pošetilost
-opojení
-rozervanost
-marnost
-bezstarostnost
-nevinnost
-náladovost
-vyrovnanost
-ztracenost
-bezbřehost
-opojení
-bezradnost
-neuchopitelnost
-pošetilost
-opojení
-rozervanost
-marnost
-bezstarostnost
-nevinnost
-náladovost
-vyrovnanost
-bezbřehost
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/da_DK.txt b/Common/3dParty/hunspell/test/src/da_DK.txt
deleted file mode 100644
index 1581a61660..0000000000
--- a/Common/3dParty/hunspell/test/src/da_DK.txt
+++ /dev/null
@@ -1,129 +0,0 @@
-Hej
-Goddag
-Tak
-Ja
-Nej
-Måske
-Mad
-Vand
-Hus
-Bil
-Tog
-Cykel
-Skole
-Børn
-Far
-Mor
-Søster
-Bror
-Hund
-Kat
-Fisk
-Fugl
-Træ
-Blomst
-Græs
-Sol
-Måne
-Himmel
-Regn
-Sne
-Sommer
-Vinter
-Forår
-Efterår
-Aften
-Nat
-Dag
-Uge
-Måned
-År
-Læse
-Skrive
-Tale
-Lære
-Arbejde
-Sove
-Vågne
-Løbe
-Gå
-Sidde
-Stå
-Lytte
-Se
-Høre
-Spise
-Drikke
-Kød
-Frugt
-Grøntsager
-Ost
-Brød
-Vand
-Juice
-Kaffe
-Te
-Mælk
-Smør
-Æg
-Salt
-Peber
-Sukker
-Bolle
-Smørrebrød
-Køkken
-Stue
-Soveværelse
-Badeværelse
-Toilet
-Bord
-Stol
-Sofa
-Lampe
-Vindue
-Dør
-Gulv
-Loft
-Væg
-Sofa
-Pude
-Tæppe
-Badekar
-Håndvask
-Spejl
-Håndklæde
-Seng
-Dyne
-Dynee
-Pude
-Pudee
-Alarm
-Alarmm
-Skrivebord
-Stol
-Hus
-Hund
-Kat
-Katt
-Bil
-Skole
-Skolee
-Sol
-Soll
-Vand
-Vandd
-Mad
-Madd
-By
-Barn
-Barnn
-Tørklæde
-Skæbne
-Uafhængighed
-Kærlighed
-Kærligheed
-overbelastning
-Modstandsbevægelsen
-Uafhængighedserklæringen
-Forårssommertemperaturen
-Stabiliseringsperioden
diff --git a/Common/3dParty/hunspell/test/src/de_AT.txt b/Common/3dParty/hunspell/test/src/de_AT.txt
deleted file mode 100644
index fccb06c431..0000000000
--- a/Common/3dParty/hunspell/test/src/de_AT.txt
+++ /dev/null
@@ -1,131 +0,0 @@
-Ägyptologie
-Ährenamt
-Ängstlichkeit
-Äquatoria
-Abarbeiten
-Abbild
-Abbilden
-Abbildungs
-Abbreviatur
-Abbrüche
-Abfassen
-Abfertigen
-Abfolge
-Abfuhr
-Ableugnen
-Ablichten
-Ablöse
-Absätze
-Abschnitts
-Abwechseln
-Abwehren
-Aktiv
-Britannia
-Browserfenster
-Budgetieren
-Bugpartie
-Bukarester
-Burgundersoße
-Butterkrem
-Button
-Cabriolet
-Campanile
-Canapé
-Caprice
-Celsius
-Chamäleon
-Charakteristik
-Chronometer
-Chronometrie
-Cölln
-Connectzustände
-Cursorspur
-Däne
-Dachs
-Dahindämmern
-Darbringen
-Daten
-Datenbankserver
-Desktopsystem
-Detektivfilm
-Dichtertum
-Dinosaurier
-Direktion
-Diskantgambe
-Diskothek
-Druckereicode
-Kapsel
-Karausche
-Katzen
-Klinge
-Klinke
-Kohlrabi
-Koinzidenz
-Kolleg
-Komplott
-Meereis
-Mehrphasigkeit
-Memorieren
-Messen
-Methode
-Metrowaggon
-Meute
-Migräne
-Milieuforschung
-Mindern
-Mineralien
-Mitternacht
-Mobiliar
-Mohrrübe
-Mühelosigkeit
-Normativität
-Notifikation
-Ökonomie
-Orangeton
-Osten
-Subjekt
-Subsidiarität
-Subsumieren
-Tagfalter
-Speicher
-Spielzeugsammlung
-Zahler
-
-Сложные слова
-Zurückgezogenheit
-Äquipotentialfläche
-Äußerungsbedeutung
-Abfassungszeitraum
-Abgeschlossenheits
-Adjunktionsbeseitigung
-Anknüpfungsgrundsätze
-Chiffrierschlüssel
-Knochenmarktransplantation
-Bundeskaderathlet
-Carbonsäurechlorid
-Cardiazoltherapie
-Chancenungleichheit
-Charakterisierungsmöglichkeit
-Chlorophyllkonzentration
-Computerspielemarkt
-Deindustrialisieren
-Dekodierungsmöglichkeit
-Kartoffelschälmesser
-Kernspinresonanztomographie
-Merkmalskombination
-Nachbarschaftszentren
-Opportunitätsprinzip
-Tiefenstaffelung
-Tourismusfachmann
-Sequenzbetrachtung
-
-Слова с ошибками
-Dechifrierprogramm
-Administratorkenwort
-Spigeln
-Tätigkeite
-Draufgangertum
-Abschnit
-Komunikation
-Drackereicode
-Bumeln
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/de_CH.txt b/Common/3dParty/hunspell/test/src/de_CH.txt
deleted file mode 100644
index 12c4663080..0000000000
--- a/Common/3dParty/hunspell/test/src/de_CH.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-Alpinist
-Alteration
-Alternative
-Alumne
-Amateurfilmer
-Ambulanz
-Amtmänner
-Analogie
-Analytik
-Ananas
-Angabe
-Ankünfte
-Dynastie
-Ebenbürtigkeit
-Echtheitszertifikat
-Editionspläne
-Editor
-Ehrenamtlichkeit
-Eigentümerschaft
-Einbau
-Eindringling
-Eingabequittungsbetrieb
-Einhüllen
-Einkommen
-Einloggen
-Einschließen
-Einsortier
-Elaboration
-Elementar
-Entertainer
-Entkuppeln
-Entschädigungs
-Enumerator
-Erbringen
-Erdichten
-Erfahrenheit
-Erhalt
-Erleichtern
-Ersparnis
-Erstatten
-Erzählliteratur
-Helikopter
-Helpdesk
-Herunterladen
-Hindeuten
-Hinterlassenschaft
-Hiob
-Landesprache
-flexibilität
-floristisch
-flugbillet
-heroben
-herrichten
-herstellen
-herübereilen
-herunterzubücken
-hie
-hieraus
-hilfe
-himbeere
-justiz
-kältebeständig
-kärtchen
-känguru
-kaktusgewächs
-kalligrafie
-kamel
-kampagnendirektor
-kapazitär
-kapitalist
-karamell
-kardieren
-karpfen
-katalogdaten
-lyzeum
-mahagonirot
-makkaroni
-malerausbildung
-management
-mangel
-maniküre
-manneskraft
-mansarde
-mark
-marketingpraktiker
-maschinell
-massage
-massengutschifffahrt
-materie
-medaille
-medizinalshampoo
-meeresfrüchte
-quotient
-salonwagen
-satzeinleitend
-trilateral
-tristesse
-tropen
-vereisen
-verfahren
-verfügungs
-verhindern
-verkäufer
-
-Слова с ошибками
-Anbindungsystem
-Anglistikdocent
-Ecco
-Economclass
-Einverstandnis
-Electrik
-Historique
-herüberzurucken
-kartofel
-salade
-sanddornbere
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/de_DE.txt b/Common/3dParty/hunspell/test/src/de_DE.txt
deleted file mode 100644
index 3ab503f810..0000000000
--- a/Common/3dParty/hunspell/test/src/de_DE.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-Hallo
-Guten Morgen
-Danke
-Bitte
-Ja
-Nein
-Entschuldigung
-Tschüss
-Liebe
-Freund
-Familie
-Glück
-Gesundheit
-Schule
-Arbeit
-Essen
-Trinken
-Wasser
-Brot
-Käse
-Fleisch
-Gemüse
-Obst
-Kaffee
-Tee
-Milch
-Zucker
-Salz
-Pfeffer
-Haus
-Wohnung
-Bett
-Stuhl
-Tisch
-Sofa
-Fernseher
-Telefon
-Computer
-Buch
-Zeitung
-Schreiben
-Lesen
-Hören
-Sehen
-Fühlen
-Laufen
-Springen
-Schwimmen
-Tanzen
-Singen
-Lachen
-Weinen
-Freude
-Trauer
-Angst
-Mut
-Liebe
-Hass
-Freundschaft
-Beziehung
-Familie
-Eltern
-Kinder
-Geschwister
-Großeltern
-Onkel
-Tante
-Cousin
-Cousine
-Ehemann
-Ehefrau
-Verlobung
-Hochzeit
-Scheidung
-Geburt
-Tod
-Krankheit
-Arzt
-Krankenhaus
-Medikament
-Apotheke
-Gesundheit
-Wohlbefinden
-Fitness
-Diät
-Schlaf
-Ruhe
-Entspannung
-Sport
-Fußball
-Tennis
-Schwimmen
-Laufen
-Radfahren
-Wandern
-Reisen
-Urlaub
-Strand
-Sonne
-Meer
-Komplementär
-Perspektive
-Konsens
-Integrität
-Konsequenz
-Authentizität
-Korrelation
-Charakteristik
-Akzeptanz
-Flexibilität
-Assoziation
-Dekomposition
-Komplexität
-Positivismus
-Universalität
-Stabilität
-Individualität
-Konsistenz
-Konformität
-Dezentralisierung
-Kollaboration
-Partizipation
-Präzision
-Transformation
-Konkurrenz
-Paradoxie
-Redundanz
-Regeneration
-Integration
-Isolation
-Asymmetrie
-Aggregation
-Disziplin
-Resilienz
-Relevanz
-Konfusion
-Komplikation
-Koordination
-Harmonie
-Ineffizienz
-Konstruktion
-Konversion
-Kollusion
-Gerontologie
-Differenzierung
-Dimensionalität
-Inferenz
-Fluktuation
-Kontraktion
-Rezession
-Inflation
-Dekontamination
-Exzellenz
-Innovation
-Isomorphie
-Konnotation
-Insuffizienz
-Konversion
-Kompensation
-Koalition
-Inkongruenz
-Inkontinenz
-Kontrahent
-Konfiskation
-Konjunktur
-Aggression
-Konfrontation
-Kompatibilität
-Prognose
-Akzeleration
-Konstruktion
-Diversifikation
-Prävention
-Sanktion
-Indikation
-Reduktion
-Konkurrenz
-Konfiguration
-Konnotation
-Rezession
-Transformation
-Interaktion
-Kooperation
-Innovation
-Kollision
-Proklamation
-Konnotation
-Konfrontation
-Disposition
-Konkordanz
-Deklamation
-Kollaboration
-Isolation
-Inflation
-Diversifikation
-Konnotation
-Kompensation
-Diffusion
-Dekadenz
-Konserve
-Deklomotion
-Kolaboration
-Isollation
-Infllation
-Divirsifikation
-Konotation
-Kompenssation
-Difusion
-Dekadens
-Kanzerve
-
diff --git a/Common/3dParty/hunspell/test/src/el_GR.txt b/Common/3dParty/hunspell/test/src/el_GR.txt
deleted file mode 100644
index badd16854f..0000000000
--- a/Common/3dParty/hunspell/test/src/el_GR.txt
+++ /dev/null
@@ -1,123 +0,0 @@
-Αβαντάζ
-Αβασταγά
-Αβγάτισες
-αβέβαιο
-αβέλτερο
-αβέλτεροι
-αβίαστους
-άβλαβοι
-αβοκάντο
-αβράδιαστης
-άβραστη
-αβράχυντου
-άβρεχτα
-αβρή
-αβρότης
-άβυσσον
-αγαθόν
-αγαθούς
-αγάλακτο
-αγγούρι
-αγελαδινού
-αγέρα
-αγεωμέτρητων
-αγίνωτοι
-άγκυρες
-αγορεύσεις
-αγόρευσή
-αγορίνα
-Αγοριού
-Αγροληψία
-Αρμόνια
-βγαίνοντας
-βεβαιώσεων
-διάθεση
-διαίρεση
-Διαιρέσου
-Διαιτολογίου
-διαψεύσουν
-διδασκάλισσας
-ενασκήσεις
-ενασχόληση
-ενασχόλησή
-ενδείξεις
-ενδεχόμενον
-ενδιαμέσου
-Επιστήθιες
-Επιστημο
-Επιστολές
-Επιστολή
-εύπορους
-ευρέα
-ευρημάτων
-ευρύτητά
-ευσταθών
-εύστροφα
-ευσυνειδησία
-εύτακτε
-ευτελείς
-ευτελίζουν
-ιδρυτικό
-ιεροψάλτες
-Ιζόλα
-Ιθαγένειάς
-ικανότατος
-ιλαρότης
-κεφαλής
-κεφαλιάτικες
-κεφαλωτές
-κήπε
-κήπευση
-Κήρυξής
-Λεξικογραφιών
-Λεξιλογικός
-λεοντή
-λεοντής
-ολιγοχρόνιου
-ολικέ
-ολικές
-ολική
-πελαγώνω
-πελατών
-πελάων
-προστατεύει
-προστασίας
-σούρουπου
-σουρούπωμα
-σούρτης
-Σούρωνα
-Σπαγέτα
-Σφάλμα
-Σφάλματά
-σφικτά
-σφικτέ
-σφοδρότητας
-σφοδρού
-σφραγίσω
-σχεδιάζουμε
-σχεδιάζουν
-σχηματίσου
-σχηματίσουμε
-σχολιάζεσαι
-Σχολιάζεστε
-Ενδιαφέροντα
-
-Слова с ошибками
-Αβασiλευτου
-αγαπούσαv
-βeβαιωμένοι
-εvασxόλησης
-επιoτολικέ
-ιδιωτικοποιήσειc
-λεπταίσθnτη
-πρoστιμάρισμα
-σφάλμαtα
-προστάτεuε
-κεxριμπαριού
-διαισθnτικότητες
-αγκιστpώσουv
-αγαθoεργiας
-αβεβαιoτητά
-αγέρεc
-διδαxθούμε
-εuσταθειώv
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/en_AU.txt b/Common/3dParty/hunspell/test/src/en_AU.txt
deleted file mode 100644
index f9404bce0d..0000000000
--- a/Common/3dParty/hunspell/test/src/en_AU.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-Acknowledge
-acrophobia
-adventurousness
-aeronautics
-algal
-Alligator
-allegation
-alphabetise
-Analogy
-appropriable
-assembly
-attempt
-Average
-barbecue
-bathtub
-begun
-belongingness
-Better
-binary
-blackberry
-boatswain
-bow-tie
-brambly
-bright-eyed
-bubble
-Calender
-cancellous
-cantankerousness
-carefree
-categorized
-cellular
-chaos
-cheerfulise
-childlike
-circumstance
-close-mouthed
-Cocoa
-coherent
-co-located
-Colours
-controversial
-cottage
-creditworthiness
-cut-down
-dedicated
-deep-freeze
-Definitive
-Designs
-digital
-distensible
-dollar
-dyslexia
-Egyptian
-effectively
-etiquette
-excess
-exotica
-fairly
-feedback
-features
-figure's
-fjord
-forty-seven
-government
-haematomata
-helpless
-homologous
-implant
-Indemnify
-inexpert
-interior
-localises
-loquaciousness
-maelstrom
-mechanizable
-melodious
-mezzo-soprano
-mozzie
-municipalisation
-mystifier
-Neoclassicism
-newsletter
-non-professional
-officiation
-orientalisation
-palaeoanthropography
-parrot
-pickpocket
-pioneer
-cryptanalytic
-simplifying
-sommelier
-spicy
-steward
-subcontinental
-swimwear
-Technical
-trajectory
-wholesomeness
-Advantageously
-interindustry
-red-eye
-sub-group
-
-Слова с ошибками
-Acredited
-agressive
-appreciativiness
-aritmetical
-biosyntesized
-lisense
-paranoa
-fotoelectronic
-semi transparent
-synonymus
-wordprocessing
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/en_CA.txt b/Common/3dParty/hunspell/test/src/en_CA.txt
deleted file mode 100644
index f3bf6608a7..0000000000
--- a/Common/3dParty/hunspell/test/src/en_CA.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-admire
-admittance
-aggrandizement
-Airmen
-Albatross
-amateur
-angling
-apparatus
-Architecture
-assessment
-attempt's
-awakening
-backgrounder
-Balance's
-barometric
-bashfulness
-beautiful
-belletristic
-blatancy
-bonbon
-border
-Bottom
-bountifulness
-breakpoints
-bulkiness
-businesslike
-can't
-cash
-castle
-Casual
-cauliflower
-celebrity
-childish
-chokecherry
-choreographically
-chronological
-classification
-clearheaded
-coalesce
-Coexistence
-collaborative
-coloured's
-concentration
-draconian
-drainpipe
-demonstrativeness
-dependence
-dependency
-dream
-duplication
-epidemiological
-equitable
-Essence
-Exemption
-exonerate
-fainthearted
-falsification
-ferromagnetic
-flammable
-fraternization
-French
-frontier
-gadget
-galleria
-Gallery
-gateaux
-geocache
-ginger
-glace
-glacier
-globalization
-hockey
-holiday
-housemate
-intensifier
-joystick
-Language
-leaseholder
-non-breakable
-northerly
-o'clock
-oeuvre
-openhandedness
-oscillation
-outface
-outlaw
-overladen
-package
-palazzo
-panama
-Paragraphs
-Parliament
-particular
-pasteurization
-pathogen
-perception
-phenomena
-philanthropically
-physical
-populations
-repugnance
-request
-resplendence
-retroactive
-rigidity
-schedule's
-School
-scintillation
-sensibility
-settlement
-taxiway
-bereft
-
-Слова с ошибками
-acomplishment
-anihilate
-caprise
-chambre
-etnographically
-horsmanship
-innundation
-lemongras
-omelete
-retorical
-shepishness
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/en_GB.txt b/Common/3dParty/hunspell/test/src/en_GB.txt
deleted file mode 100644
index f50273dd01..0000000000
--- a/Common/3dParty/hunspell/test/src/en_GB.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-Abbreviation
-Acceptability
-acquirable
-Addressee
-afterthought
-airworthiness
-all-powerful
-amateurishness
-amorphousness
-anthology
-Auspiciousness
-Bibliographer
-Bilberry
-birthday
-bodyguard
-broadleaved
-brontosaurus
-bumptiousness
-Cabaret
-Californian
-calumny
-cancellation
-cantonal
-capitalize
-careful
-carry-on
-casino
-clown
-co-ordinate
-cockleshell
-decennial
-deckchair
-decryption
-deep-freeze
-Democracy
-financial
-fish-plate
-Flamenco
-housing
-Hybrid
-hydroelectricity
-iceboat
-ichthyology
-idiomatic
-ill-humoured
-imperatrix
-individuality
-interocular
-intrasectoral
-ironwoods
-Jolliness
-Jurisprudent
-knowledgable
-kopeks
-labour-intensive
-laboratory
-lake
-language
-larynx
-latching
-leakiness
-License
-licensed
-licensee
-life-threatening
-linguistics
-long-lived
-machinable
-mainsheet
-Major
-malleability
-man-hour
-Mango
-ninety-five
-nobody
-non-blocking
-non-judicial
-nonconforming
-north-Western
-nutritiousness
-quasi-synchronous
-question
-racoon
-radish
-Railway
-Rarity
-saucer
-Save
-Saying
-supplely
-tallish
-target
-Taxi
-teach-in
-technician
-ultramodern
-umbrae
-uncertainness
-unconstitutionality
-washing
-wasn't
-waxen
-weather
-well-formed
-what's-his-name
-whereupon
-Wi-Fi
-Wikipedia
-
-Слова с ошибками
-Abstractnes
-advantageusness
-arhythmical
-autosuggestibility
-kaptor
-coldshouldering
-humaneneses
-imaginativness
-knight-erantry
-magasine
-night-wachman
-qualifidly
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/en_US.txt b/Common/3dParty/hunspell/test/src/en_US.txt
deleted file mode 100644
index f910ca76ce..0000000000
--- a/Common/3dParty/hunspell/test/src/en_US.txt
+++ /dev/null
@@ -1,216 +0,0 @@
-apple
-banana
-cat
-dog
-egg
-fish
-gold
-house
-ice
-juice
-kite
-lion
-mouse
-night
-orange
-pencil
-queen
-rabbit
-sun
-tea
-umbrella
-vase
-watch
-xylophone
-yellow
-zebra
-arrow
-book
-cake
-car
-day
-elephant
-flower
-hat
-island
-jelly
-king
-lamp
-moon
-nose
-owl
-pink
-quilt
-radio
-sunflower
-tree
-unicorn
-violin
-water
-xylophone
-yellow
-zoo
-apple juice
-blue
-calculator
-desk
-elephant
-fire
-goat
-hat
-ice cream
-jacket
-key
-lemon
-map
-notebook
-owl
-pear
-quilt
-rose
-soccer
-table
-umbrella
-vegetable
-whale
-xylophone
-yellow
-zebra
-apple pie
-beach
-computer
-drum
-elephant
-goat cheese
-hat
-ice skate
-juice box
-kite festival
-lemonade
-mountain
-notebook paper
-orange juice
-pizza
-queen bee
-rainbow
-snow
-turtle
-umbrella hat
-valley
-Aberration
-Absolution
-Acquiesce
-Adumbrate
-Aesthete
-Altruistic
-Ambivalent
-Anomalous
-Antediluvian
-Antipathy
-Aphorism
-Apocryphal
-Apostasy
-Apparition
-Arduous
-Assiduous
-Audacious
-Austere
-Autonomy
-Avaricious
-Axiomatic
-Baleful
-Bellicose
-Belligerent
-Bereft
-Bilious
-Bombastic
-Cacophony
-Capricious
-Cartography
-Castigate
-Clandestine
-Coalesce
-Cogent
-Cognizant
-Colloquy
-Concomitant
-Confabulate
-Congenial
-Conundrum
-Copious
-Corpulent
-Coven
-Credulous
-Culpable
-Dearth
-Debilitate
-Deleterious
-Denigrate
-Despondent
-Diatribe
-Dilapidated
-Disparage
-Dissemble
-Dissonance
-Duplicity
-Ebullient
-Egregious
-Ephemeral
-Equanimity
-Esoteric
-Euphemism
-Evanescent
-Exacerbate
-Exhort
-Expatriate
-Extol
-Facetious
-Fatuous
-Feckless
-Felicitous
-Feral
-Fervent
-Fetter
-Flummox
-Fractious
-Garrulous
-Hegemony
-Iconoclast
-Idiosyncrasy
-Ignominious
-Impecunious
-Ineffable
-Inexorable
-Inscrutable
-Insidious
-Intrepid
-Intransigent
-Invective
-Irascible
-Juxtapose
-Kowtow
-Languid
-Lassitude
-Lurid
-Malinger
-Maudlin
-Mawkish
-Mendacious
-Metaphysical
-Antransigent
-Inwective
-Iracible
-Juxtopose
-Kovtow
-Langued
-Lasitude
-Larid
-Mallinger
-Haudlin
-Mavkish
-Mendocious
-Mitaphysical
-timeline
-rollout
-workshopped
-deliverables
diff --git a/Common/3dParty/hunspell/test/src/en_ZA.txt b/Common/3dParty/hunspell/test/src/en_ZA.txt
deleted file mode 100644
index f509809717..0000000000
--- a/Common/3dParty/hunspell/test/src/en_ZA.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-Acceptably
-Achievement
-administrate
-all-day
-amount
-average
-bilayer
-blasé
-boutique
-breezy
-byers
-cabdriver
-carefree
-categorised
-Chameleon
-cheerful
-chronology
-cliché
-cooling-off
-courage
-crudités
-decorates
-dooryard
-débâcle
-electromotive
-equalled
-Exotica
-fellow-traveller
-forests
-full-timer
-graded
-habitué
-haven't
-hide-and-seek
-home-building
-interaxial
-kingdom
-largeness
-long-distance
-Majority
-manoeuvre
-Matrix
-metier
-mightn't
-multidisciplinary
-night-time
-officio
-old-style
-organize
-overaggressive
-packing
-parenthesis
-pince-nez
-Plaint
-play-act
-policy-making
-Preheat
-prohibit
-puzzle
-queue
-quite
-re-enact
-reason
-ready-made
-renewal
-resize
-rooihout
-scampi
-schoolteacher
-sea-green
-shop-boy
-sidebar
-skyscraper
-soundless
-spelling
-stakeout
-synchronizing
-take-off
-Thereof
-Trademark
-transportable
-treatment
-tweeness
-under-age
-unmake
-Variate
-Visitant
-volume
-webmaster
-well-prepared
-window
-yesteryear
-first-aid
-Hydrant
-inconstant
-network
-northernmost
-nowhere
-souvenir
-telecommunicate
-
-Слова с ошибками
-afordable
-anthropologie
-bagage
-comparatif
-flammeble
-indivizible
-jetlag
-lettrebox
-panoramma
-posessor
-selfdoubt
-abandonner
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/es_ES.txt b/Common/3dParty/hunspell/test/src/es_ES.txt
deleted file mode 100644
index 05520c2d2f..0000000000
--- a/Common/3dParty/hunspell/test/src/es_ES.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-nosotros
-vosotros
-ellos
-ellas
-aquí
-allí
-ahora
-antes
-después
-siempre
-nunca
-también
-solamente
-verdad
-mentira
-bien
-mal
-grande
-pequeño
-rápido
-lento
-nuevo
-viejo
-bueno
-malo
-feliz
-triste
-bonito
-feo
-caliente
-frío
-dulce
-amargo
-fuerte
-débil
-cerca
-lejos
-fácil
-difícil
-cierto
-falso
-caro
-barato
-limpio
-sucio
-fuerte
-débil
-alto
-bajo
-claro
-oscuro
-abierto
-cerrado
-joven
-viejo
-corto
-largo
-alegre
-tranquilo
-nervioso
-amable
-grosero
-conocido
-desconocido
-cortés
-rudo
-agradable
-desagradable
-sabroso
-insípido
-difícil
-fácil
-cansado
-descansado
-moderno
-antiguo
-último
-primero
-posible
-imposible
-rápido
-lento
-sencillo
-complicado
-propio
-ajeno
-abierto
-cerrado
-amable
-desagradable
-seguro
-inseguro
-correcto
-incorrecto
-dulce
-amargo
-Anacoreta
-Sobrentender
-Embriaguez
-Inquebrantable
-Empedernido
-Derramamiento
-Despotricar
-Escafandra
-Aletargamiento
-Estancamiento
-Descarado
-Exégesis
-Contrariedad
-Espeluznante
-Conspiración
-Impedimenta
-Deglutir
-Engreído
-Enmascarado
-Exterminio
-Embelesar
-Permutación
-Desesperanza
-Impenetrable
-Enarbolamiento
-Errabundo
-Deslinde
-Inefable
-Soliviantar
-Embriaguez
-Perdurable
-Opulencia
-Trémulo
-Desembolso
-Empedernido
-Anquilosar
-Enigmático
-Inquebrantable
-Contrincante
-Desmesurado
-Vanagloriar
-Exasperar
-Desvanecer
-Perpetuidad
-Desbaratar
-Ineficaz
-Zozobra
-Elucubración
-Ineludible
-Desgarramiento
-Atestiguar
-Encascarar
-Desembozar
-Irreverente
-Soslayar
-Despiadado
-Embaucar
-Moflete
-Endilgar
-Desfalco
-Embelesamiento
-Desestimar
-Enajenación
-Desavenencia
-Inexorable
-Atolladero
-Egrégoro
-Desafiar
-Afable
-Enervar
-Belicoso
-Enervar
-Descacharrante
-Entramado
-Inigualable
-Perplejidad
-Descabellado
-Diligencia
-Enaltecimiento
-Desvergonzado
-Arrebato
-Empatía
-Endiosar
-Peripecia
-Desidia
-Subversión
-Desfachatado
-Desfalco
-Desvirtuar
-Errático
-Desahuciar
-Envilecimiento
-Empecinado
-Estolidez
-Despropósito
-Engatusar
-Culminante
-Sobrentender
-Enseñorear
-Desacato
-segguro
-insseguro
-correcto
-incarrecto
-dalce
-amergo
-Anasoreta
-Sobrententter
-Embreagues
-Inquebranttable
-Empidernedo
-
diff --git a/Common/3dParty/hunspell/test/src/eu_ES.txt b/Common/3dParty/hunspell/test/src/eu_ES.txt
deleted file mode 100644
index 9cbd124e59..0000000000
--- a/Common/3dParty/hunspell/test/src/eu_ES.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-Abantza
-ñabar
-abasto
-abegikortasun
-aberaskeria
-aberetzar
-abezedario
-abialdi
-Abiatzaile
-abizari
-Aboli
-abonatu
-absenta
-absolutibo
-accelerando
-adabegitsu
-adberbio
-adiaka
-adierazle
-adierazkizun
-adikuntza
-adin
-adinaro
-adineratu
-adin-txikitasun
-administratzaile
-adoleszentzia
-adopzio
-adostu
-aerolabangailu
-Aeroplano
-afalordu
-agente
-agertezin
-agiantza
-agoran
-arradatze
-arrakasta
-Batata
-baterakuntza
-baterakor
-Bateri
-batuar
-baud-abiadura
-batzuenganako
-batzuengandik
-batzuengan
-batzuengatik
-batzuen
-baxera
-berezi
-berezikeria
-beritzete
-beroa
-Beroate
-beroatza
-berorri
-berrabiatu
-berra
-berresgarri
-berripaper
-chap
-dabilzkidake
-dabilzkie
-dagitza
-dagokik
-dagozkieke
-erdiondu
-galdera
-galtzada
-garaitiar
-garantia
-Garaztaketa
-garbitasun
-gastronomiko
-Gaurgero
-gaurgoitik
-legizkie
-legokizue
-legozkidake
-lehenbizi
-nindoakio
-publikotasun
-publizitate
-subsidiario
-substantibo
-sugestio
-superbalorazio
-taidun
-taldeburu
-Talent
-Teknografia
-xantxa
-xerbitor
-xerokopia
-zabaldura
-Zabalkor
-Zabaltza
-zabilzkieken
-zabilzkio
-zaharkote
-zeneritzeketen
-zenerra
-zenezagu
-zengozkigute
-zeniharduke
-zenioke
-zenioketez
-zeniraute
-zenizkien
-zenizkiguke
-Zintut
-Zintuzkedan
-isiltasun
-
-Слова с ошибками
-abriсot
-absenzia
-addikzio
-administraziozerbizu
-bat-bates
-bermagari
-cataluniar
-dakarza
-erdemin
-garatienetarikoa
-ishil
-nindezaguane
-nintzainaken
-summa
-technologiko
-charmant
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/fr_FR.txt b/Common/3dParty/hunspell/test/src/fr_FR.txt
deleted file mode 100644
index 5ab592e094..0000000000
--- a/Common/3dParty/hunspell/test/src/fr_FR.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-Bonjour
-Merci
-Oui
-Non
-S'il
-Excusez-moi
-Pardon
-Bien
-Mal
-Grosse
-Petit
-Beau
-Moche
-Fort
-Faible
-Chaud
-Froid
-Vite
-Lent
-Haut
-Bas
-Loin
-Près
-Heureux
-Triste
-Facile
-Difficile
-Simple
-Compliqué
-Bon
-Mauvais
-Nouveau
-Vieux
-Jeune
-Âgé
-Bienvenue
-Amitié
-Amour
-Famille
-Travail
-Maison
-Voiture
-Manger
-Boire
-Courir
-Marcher
-Nager
-Chanter
-Dormir
-Jouer
-Parler
-Écouter
-Regarder
-Lire
-Écrire
-Acheter
-Vendre
-Aller
-Venir
-Faire
-Dire
-Voir
-Savoir
-Apprendre
-Aimer
-Détester
-Partir
-Rester
-Arriver
-Revenir
-Partager
-Aider
-Aimer
-Ouvrir
-Fermer
-Manger
-Boire
-Avoir
-Être
-Pouvoir
-Vouloir
-Devoir
-Parler
-Écouter
-Rire
-Pleurer
-Danse
-Étudier
-Travailler
-Voyager
-Vivre
-Connaître
-Reconnaître
-Voyager
-Exister
-Choisir
-Donner
-Recevoir
-Aimer
-Oser
-Phénoménologie
-Électroencéphalographie
-Parallélépipède
-Anticonstitutionnellement
-Transsubstantiation
-Éclectisme
-Anachronisme
-Catéchuménat
-Démagogie
-Fructueux
-Ineffable
-Hypothèque
-Propriété
-Procrastination
-Complaisance
-Réminiscence
-Éthique
-Équinoxe
-Exponentiel
-Hétérogénéité
-Imbroglio
-Incorrigible
-Maelström
-Métaphysique
-Protagoniste
-Subliminal
-Verrouillage
-Volumétrique
-Énigmatique
-Époustouflant
-Immatériel
-Infini
-Polyglotte
-Recrudescence
-Prophylactique
-Symbiotique
-Vestibulaire
-Épistémologie
-Faramineux
-Géopolitique
-Hypnotique
-Inamovible
-Intemporel
-Labyrinthe
-Pacifiste
-Quémandeur
-Soporifique
-Ubuesque
-Volumineux
-Effervescence
-Électrophorèse
-Paradoxe
-Prorata
-Quadrupède
-Sarcophage
-Trigonométrie
-Vaccinologie
-Xenophobe
-Zéphyr
-Génétique
-Labyrintique
-Mégalo
-Nostalgie
-Omniprésent
-Pangramme
-Périlleux
-Quinquennat
-Rémunération
-Scolopendre
-Tautologique
-Utopiste
-Vexatoire
-Wolof
-Xanthine
-Yacht
-Zanzibar
-Axiomatique
-Chronométrer
-Dilettante
-Énervement
-Facétieux
-Générique
-Harmonique
-Illusoire
-Juridique
-Kabbaliste
-Longetivité
-Médiane
-Néologisme
-Oxygène
-Patronymique
-Quotidien
-Rétorique
-Sémantique
-Tautologie
-Utopique
-Vaccinologie
-Xénophobie
-Yachting
-Zoroastrisme
-Voager
-Exisster
-Chaiser
-Doner
-Resevoir
-Aimmer
-Osero
-Phénoménollogie
-Électraencéphallographie
-Parallélépepède
-
diff --git a/Common/3dParty/hunspell/test/src/gl_ES.txt b/Common/3dParty/hunspell/test/src/gl_ES.txt
deleted file mode 100644
index 1fa4436b77..0000000000
--- a/Common/3dParty/hunspell/test/src/gl_ES.txt
+++ /dev/null
@@ -1,120 +0,0 @@
-ola
-tipo
-Si
-non
-nonnr
-comida
-comidaa
-auga
-augaa
-casa
-coche
-cochee
-un tren
-bicicleta
-escola
-escolaa
-niños
-pai
-paii
-nai
-naii
-irmá
-irmán
-cachorro
-gato
-gatoo
-peixe
-peixee
-aves
-avess
-árbore
-flor
-herba
-o sol
-lúa
-o ceo
-chuvia
-neve
-vexa
-inverno
-primavera
-outono
-noite
-noite
-día
-unha semana
-mes
-ano
-para ler
-escribir
-fala
-ensinar
-traballo
-durmir
-durmir
-correr
-vai
-senta
-estado
-para escoitar
-vexa
-escoita
-hai
-beber
-carne
-furtas
-verduras
-queixo
-pan
-auga
-zume
-café
-té
-leite
-aceite
-ovo
-sal
-impacienta
-azucre
-un bocadillo
-cociña
-sala de estar
-dormitorio
-baño
-batela
-sofá
-lámpada
-fiestra
-a porta
-piso
-teito
-parede
-sofá
-alfombra
-baño
-afundir
-espello
-toalla
-cama
-manta
-almofada
-reloxo de alarma
-escritorio
-cadeira
-marabilloso
-adverbio
-obviamente
-Dominante
-residenciais
-convidado
-perigo
-cuestión
-deporte
-mina
-cordeiro
-cabeza
-tratar
-avogado
-intelixente
-guapo
diff --git a/Common/3dParty/hunspell/test/src/hr_HR.txt b/Common/3dParty/hunspell/test/src/hr_HR.txt
deleted file mode 100644
index 6fbcfb98f7..0000000000
--- a/Common/3dParty/hunspell/test/src/hr_HR.txt
+++ /dev/null
@@ -1,215 +0,0 @@
-boliestan
-jyak
-slaby
-pameetan
-gllup
-bezuspješhno
-besimeni
-bezuzban
-blagastanje
-bljeskovica
-jabuka
-sunce
-voda
-kuća
-ptica
-kava
-kruh
-cvijet
-knjiga
-pas
-mačka
-grad
-zelen
-plav
-crven
-bijel
-crn
-velik
-malen
-brz
-spor
-sretan
-tužan
-vruć
-hladan
-nov
-star
-lijep
-ružan
-dobar
-loš
-zdrav
-bolestan
-jak
-slab
-pametan
-glup
-raditi
-jesti
-piti
-spavati
-čitati
-pisati
-govoriti
-smijati se
-plakati
-pjevati
-igrati
-plesati
-učiti se
-kupovati
-kuhati
-telefonirati
-gledati
-slušati
-hodati
-trčati
-letjeti
-plivati
-čitati
-pisati
-raditi
-imati
-biti
-ići
-doći
-otići
-dati
-uzeti
-reći
-vidjeti
-čuti
-osjetiti
-misliti
-htjeti
-moći
-morati
-rado
-nerado
-da
-ne
-molim
-hvala
-doviđenja
-oprosti
-zbogom
-zdravo
-čau
-ej
-da
-baš
-super
-glupost
-fantastično
-jasno
-tako
-zapravo
-možda
-lako
-teško
-prozračnost
-usplahirenost
-neoblomivost
-prezir
-proigranost
-uznemirenost
-besprijekornost
-besprizornost
-nepredvidivost
-beznadnost
-promašenost
-protivljenje
-neizreciv
-bezizlaznost
-neuspjelost
-zbunjenost
-neodlučnost
-protivština
-nepovratnost
-bezduhovitost
-ravnodušnost
-prolaznost
-neobaveznost
-bezbrižnost
-nepovratnost
-promašenost
-neprepoznatljivost
-neukrotivost
-bezobzirnost
-nevinost
-nestalnost
-nepostojanost
-bezizlaznost
-nepovratnost
-prolaznost
-neodgovornost
-bezbrižnost
-nevolja
-nezadovoljstvo
-prolaznost
-bezuspješno
-bezimeni
-bezuzdan
-blagostanje
-bljeskavica
-boren
-carovnija
-crpeža
-dostojanstvo
-duhovitost
-egzaltacija
-gorkoća
-histerija
-idila
-ironija
-izdaja
-janjetina
-kajanje
-kavana
-krhotina
-ljepljivost
-lukavstvo
-magnutizam
-melankolija
-misticizam
-naivnost
-nelagoda
-neraspoloženje
-obmana
-okrutnost
-opojenost
-prezir
-propast
-ravnodušnost
-sjenka
-skitnica
-spletka
-stid
-sudbina
-susret
-sudbina
-šapat
-tišina
-trepet
-utopija
-uzaludnost
-veličanstvo
-zaborav
-zanesenost
-zanos
-zavjera
-zbunjenost
-zluradost
-zloslutnost
-žargon
-žártva
-šaptanje
-čarobnost
-dileme
-hodočasće
-lebdjeti
-iznimka
-preobilje
-probuditi se
-surov
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/hu_HU.txt b/Common/3dParty/hunspell/test/src/hu_HU.txt
deleted file mode 100644
index aae52a65b7..0000000000
--- a/Common/3dParty/hunspell/test/src/hu_HU.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-Szorzótábla
-Réges-régen
-normálméret
-nemeslelkűség
-mindegyik
-milliós
-Mikroflóra
-Mezőgazdaságigép
-meséskönyv
-mennyiség
-Memória
-kártya
-kuráre
-Kurzor
-jégkorong
-jellemesség
-Javak
-irányzás
-iromány
-Inkluzíve
-hűtőedény
-hőmérséklet
-hír
-hétszázas
-hátrány
-háromszáz
-Hintó
-generátor
-gavallérság
-explozíva
-eső
-esdeklés
-epilógus
-Energia
-Előélet
-előterjesztés
-előnézet
-elvonás
-elszigetelés
-ellátmány
-Elevátor
-egynémelykor
-egyenlőség
-eddzenek
-dzsungel
-ananász
-akvárium
-Szépül
-Sztorizik
-szobroz
-szimbolizál
-szemlélődik
-sugdolózik
-majmol
-Macskáz
-Létesít
-Lokalizálódik
-litografál
-levelesedik
-lepet
-közömbösít
-kételkedik
-kivirágoz
-kerekez
-kedvez
-járkál
-jegyzőkönyvez
-iskolázik
-individualizál
-csendesít
-borsoz
-billentet
-bajmolódik
-anyagozik
-alkonyodik
-Aktualizál
-színes
-szemelt
-lassú
-hatékony
-hasznos
-gyúlékony
-gyári
-abszurd
-örökjog
-öregkor
-ömlő
-Zászlaj
-Zseblámpa
-regényirodalom
-realitás
-raktárhelyiség
-pötty
-pótlék
-pótdíj
-pályafutás
-Promóció
-Processzus
-poloska
-pernye
-pediáter
-parancsnoklás
-
-Слова с ошибками
-sponzorálás
-mihamarábiak
-idohatár
-hypnotizmus
-departement
-légiesul
-kutagat
-költségtakkarékos
-redukzió
-pilanatfelvétel
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/id_ID.txt b/Common/3dParty/hunspell/test/src/id_ID.txt
deleted file mode 100644
index dff2ed986e..0000000000
--- a/Common/3dParty/hunspell/test/src/id_ID.txt
+++ /dev/null
@@ -1,121 +0,0 @@
-acang-acang
-Adiksi
-Adventisius
-Advokat
-afirmatif
-agroindustry
-agrisilvikultur
-akhir-akhir
-akomodatif
-aksi
-aljabar
-anggul
-anotasi
-antusiasme
-apoteker
-bahagia
-bakat
-bangkang
-Bankir
-Barikade
-bebaru
-belar
-beleid
-bencana
-bentangur
-beritawan
-besuk
-bilingualisme
-Cecak
-Celempong
-cencawan
-cengkar
-ceremai
-cermin
-cudang
-Dampal
-dampan
-dansa
-datung
-debitur
-defensi
-defisit
-demper
-dendang
-Derivasi
-Desember
-deskripsi
-diskotek
-diskusi
-distansi
-dragon
-dramatisasi
-Eksamen
-Eksistensi
-eksperimen
-ekstensifikasi
-ekuitas
-elektron
-gelut
-Geofisikawan
-Gerbang
-gerempang
-influenza
-Informasi
-Inisiator
-insekta
-institusional
-instruksional
-jelajah
-Kamrad
-Kapilaritas
-kapster
-kardiovaskular
-karismatik
-keranjingan
-komunal
-Limitatif
-Linguistik
-lintang
-masabodoh
-matematikus
-medisinal
-Melankolia
-Memorabilia
-nasional
-nasionisme
-Panen
-pangkek
-peranti
-perian
-persekusi
-perunjung
-regenerasi
-reglementer
-robotika
-runjang
-Sabtu
-Simbang
-simpati
-tebing
-topi
-Unggal
-unsuri
-urbanisasi
-variabel
-wahana
-warganegara
-
-Слова с ошибками
-Abonement
-Abcente
-ambivalan
-bakteriostatic
-cekaw
-darmavisata
-declarasi
-duplex
-ecozona
-gempur-mengempur
-jejengok
-transitive
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/it_IT.txt b/Common/3dParty/hunspell/test/src/it_IT.txt
deleted file mode 100644
index 02852a870c..0000000000
--- a/Common/3dParty/hunspell/test/src/it_IT.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-Ciao
-Ciaoo
-Buongiorno
-Buonasera
-Buonassera
-Grazie
-Prego
-Arrivederci
-Buonanotte
-Scusa
-Per favore
-Amore
-Amico
-Famiglia
-Casa
-Città
-Strada
-Montagna
-Montaga
-Mare
-Sole
-Luna
-Stelle
-Giorno
-Notte
-Colazione
-Clazione
-Pranzo
-Cena
-Acqua
-Vino
-Caffè
-Pane
-Formaggio
-Pasta
-Pizza
-Gelato
-Dolce
-Salato
-Frutta
-Verdura
-Carne
-Pesce
-Pollo
-Uovo
-Sale
-Pepe
-Olio
-Burro
-Zucchero
-Latte
-Yogurt
-Insalata
-Zuppa
-Bistecca
-Prosciutto
-Parmigiano
-Biscotti
-Cioccolato
-Spagggrhetti
-Spaghetti
-Lasagne
-Risotto
-Gnocchi
-Penne
-Ravioli
-Cannelloni
-Pesto
-Caprese
-Limoncello
-Espresso
-Cappuccino
-Tiramisù
-Panna cotta
-Cannoli
-Panettone
-Brioche
-Focaccia
-Foacdccia
-Crostini
-Arancini
-Antipasto
-Primo piatto
-Secondo piatto
-Contorno
-Pane tostato
-Marmellata
-Accoglienza
-Affascinante
-Aggressività
-Alleviare
-Appassionato
-Armonioso
-Autonomia
-Autovfnomia
-Barbarie
-Beneficiare
-Bizzarro
-Burocrazia
-Cambiamento
-Capriccioso
-Cautela
-Commemorare
-Comportamento
-Conseguenza
-Controverso
-Coraggioso
-Debolezza
-Decisivo
-Delizioso
-Desiderare
-Destrezza
-Determinato
-Determin
-Difficoltà
-Disponibilità
-Divertimento
-Eccentrico
-Efficienza
-Elettrizzante
-Emergere
-Empatia
-Energia
-Equilibrio
-Esperienza
-Fantastico
-Fenomenale
-Generosità
-Gratitudine
-Immaginazione
-Impressionante
-Impressiante
-Indipendenza
-Ingenuità
-Innovazione
-Intelligenza
-Intensità
-Intrigante
-Ispirazione
-Instabilità
-Irresistibile
-Leggenda
-Libertà
-Luminoso
-Magistrale
-Malinconia
-Meraviglioso
-Metamorfosi
-Miracolo
-Misterioso
-Nostalgia
-Opportunità
-Originalità
-Passione
-Pericoloso
-Prestigioso
-Prodigioso
-Prospettiva
-Raffinato
-Rafinato
-Ricchezza
-Rispettoso
-Sensibilità
-Sorprendente
-Spontaneità
-Spontaneita
-Stravagante
-Suggestivo
-Surreale
-Tenerezza
-Trasformazione
-Unicità
-Vibrante
-Vittoria
-Volontà
-Amicizia
-Avventura
-Bellezza
-Calma
-Danza
-Eleganza
-Felicità
-Gioia
-Incanto
-Magia
-Natura
-Odore
-Passatempo
-Quotidiano
-Relax
-Serenità
-Tesoro
-Umorismo
-Vacanza
-Zelo
-Avventuriero
-Speranza
-Risate
-Armonia
-Incanto
diff --git a/Common/3dParty/hunspell/test/src/kk_KZ.txt b/Common/3dParty/hunspell/test/src/kk_KZ.txt
deleted file mode 100644
index 69010faa9b..0000000000
--- a/Common/3dParty/hunspell/test/src/kk_KZ.txt
+++ /dev/null
@@ -1,209 +0,0 @@
-сөз
-адам
-қала
-тау
-ауа
-су
-аспан
-жер
-бала
-ата
-ана
-тамақ
-кітап
-ұстаз
-оқу
-тұтыну
-тыныш
-тұз
-ауру
-денсаулық
-топ
-маусым
-төс
-көз
-жүрек
-сарғыш
-көп
-аз
-ертең
-түн
-түс
-жас
-қара
-ақ
-көк
-қызыл
-шай
-салт
-ыстық
-суық
-қазақ
-жеті
-он
-жүз
-мың
-бір
-екі
-үш
-төрт
-бес
-алты
-жеті
-сегіз
-тоғыз
-он
-бақша
-бұлақ
-қиыр
-досым
-ақша
-патша
-таң
-кеш
-тауар
-күн
-апат
-риза
-ауырсыну
-орман
-жаңбыр
-бауыр
-жел
-тұман
-үй
-бұлақ
-көше
-айнала
-шайыр
-тағам
-сусын
-топ
-бас
-әрекет
-тіл
-кеме
-сиыр
-қой
-ешкі
-шөп
-ит
-тұқым
-қарындаш
-апа
-ана
-әке
-дала
-тарлау
-дәуір
-таңдай
-жыл
-басқарушылар
-басқарушшылар
-жауапкер
-ерекшеліктерімендерге
-тұмылдырықтатқыздан
-білімділігінге
-білімдарды
-алалықсыздар
-айырмашылықтарын
-тұрақтандырып
-сылтауратқандарыңызды
-қолдар
-байланысқадан
-жетілдірілген
-зарарсыздандырады
-ескеріп
-ескеріпп
-міндеттемелеріндерге
-кезеңдердің
-себепсіздік
-біреудейлер
-беделілерің
-кездестіріңіз
-шектердің
-көңіл
-көңл
-мол
-алайда
-мәселе
-мәселеу
-сендің
-келер
-келерр
-кәне
-көпір
-күндіз
-сана
-белгілер
-дайын
-ез
-қайшы
-саф
-рең
-шақ
-үміткер
-бақыт
-бақытт
-республика
-консервациялау
-мемлекеттік
-тағатсыздан
-адамда
-бәрі
-бең
-беңр
-жасағанда
-жасағоанда
-жабайылық
-заманда
-көшірдік
-мерейі
-Мерейій
-мөлшерсіздікк
-мөлшерсіздік
-пенді
-тылда
-мәртебесімен
-аппаратпен
-тегінді
-кездеме
-ересектік
-көңілсіздік
-тәуекелсіздік
-қанағатсыздық
-ғаділетсіздік
-сайдақы
-басым
-тәжікеден
-тұрғын
-қонақ
-қауіпсіздік
-қадірсіздік
-білгішсінбейсіңдер
-талқандас
-кешікті
-қоздырғышы
-бас
-емдейсіңдер
-құқылы
-тақылет
-әдемі
-көткеншектейсіңдер
-әжет
-қайтар
-белсену
-түсінбеймін
-жағымсыздық
-сыздар
-мәртебесі
-тұрғыны
-мезгіл
-әлбетте
-барысын
-оқылған
-безге
-жаса
-аламаңдайсыңдар
-кереметті
-епетейсіздік
diff --git a/Common/3dParty/hunspell/test/src/ko_KR.txt b/Common/3dParty/hunspell/test/src/ko_KR.txt
deleted file mode 100644
index 3ef2abd2ce..0000000000
--- a/Common/3dParty/hunspell/test/src/ko_KR.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-안녕하세요
-감사합니다
-사랑해요
-미안합니다
-음식
-친구
-가방
-집
-학교
-컴퓨터
-물
-밥
-책
-산
-바다
-날씨
-일
-노래
-치킨
-반찬
-꽃
-숙제
-가족
-아이
-게임
-영화
-생일
-시간
-동물
-여행
-차
-쇼핑
-추천
-대화
-전화
-사진
-운동
-잠
-병원
-음료수
-능력
-주말
-전자기기
-고양이
-강아지
-바나나
-가을
-겨울
-봄
-여름
-옷
-신발
-지하철
-택시
-버스
-비행기
-샴푸
-브러시
-삼계탕
-국수
-불고기
-된장
-김치
-먹다
-마시다
-보다
-듣다
-놀다
-하다
-가다
-오다
-서다
-늦다
-일어나다
-자다
-빨갛다
-파랗다
-노랗다
-녹색
-보라색
-맛있다
-시원하다
-덥다
-추운
-기분
-슬프다
-즐겁다
-정신이
-바쁘다
-참새
-나비
-병아리
-돌
-물고기
-향신료
-시장
-기차
-공원
-해변
-지갑
-병원
-대학
-교통
-공항
-천재
-연구
-일본
-중국
-사업
-지식
-성격
-자금
-기술
-정부
-전략
-협력
-혁신
-경제
-철학
-신체
-영감
-현상
-역사
-태양
-설명
-사회
-환경
-자연
-현실
-존경
-정확
-장애
-낙관
-발전
-절망
-일상
-소멸
-도전
-반복
-포기
-파괴
-혁혹
-소외
-식민지
-혐오
-출산
-행복
-불평
-판매
-위험
-안녕하ㅎ요
-감사합ㅅ다
-사랑ㄱ해요
-미안ㅎ합니다
-친ㅔ구
-가ㅎ방
-
diff --git a/Common/3dParty/hunspell/test/src/lb_LU.txt b/Common/3dParty/hunspell/test/src/lb_LU.txt
deleted file mode 100644
index e7dd0e3d59..0000000000
--- a/Common/3dParty/hunspell/test/src/lb_LU.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-Aarbecht
-Aarbechtszäitorganisatioun
-Aartgenoss
-Abenteuer
-abrëll
-absence
-Abusives
-Abzebillercher
-Acquéreur
-Adjointeë
-Affischéiertes
-Airbussen
-Alldeegleches
-Angschtzoustä
-Basketballspiller
-Baufirme
-bauren
-bekanntes
-Beleg
-Berodung
-Bewältegung
-Datentransfer
-Dateschutz
-Decisives
-Donneschden
-Drangsaléiertes
-Dränk
-Giischtgen
-Grondlag
-grondreegel
-Géies
-Handelsdag
-hausaufgab
-hierschtdag
-Häerzi
-Industriell
-Infrastrukturelles
-Interessi
-Internetfore
-Intervall
-Kamell
-Kantoner
-Karamell
-Klenges
-Nopeschhaus
-Motors
-Muer
-Muerenter
-Musek
-Nettoverméige
-niess
-Protektioun
-Prouf
-Provisioun
-Prozessor
-Präis
-Präsens
-Sanitäres
-Schauspiller
-Schema
-Taxatioun
-Telefonsgespréich
-termingrë
-terrass
-Textdatei
-Textsprooch
-Titulaire
-Titel
-erausféieren
-erausjoe
-gëeicht
-onglécklecherweis
-unzesammelen
-unzespille
-Approvisionnement
-
-Сложные слова
-Aktiegesellschaft
-Aktivitéitsdéclaratioun
-Alarmstëmmung
-Allgemengverständleches
-Bankenoperatioun
-Bensinsreserven
-Besteierungsofkommes
-Diskriminéierungsmoossnam
-Dokumentatiounsaarbecht
-Haaptrecommandatioun
-Héchstgeschwindegkeet
-Héichproblematesches
-Hëllefsdéngscht
-Integratiounsméisseges
-Iwwersetzungsprogramm
-Kapitaliséierungsdimensioun
-Museksinstrument
-Publicitéitsmarché
-Transportproblem
-
-Слова с ошибками
-Abonnnement
-Accomodéiertes
-Agrarcenter
-Begrennung
-Berodunszentren
-Deeluung
-Dialogue
-Dictaten
-Inspektor
-Iwereileges
-Pedagogik
-Televisionschaîn
-Bechäftegungsméiglechkeet
-Gläicheetspolitik
-Musekheichschoul
-Satelliten
-Addressbichelchen
-Aarbechtsfield
-
-
diff --git a/Common/3dParty/hunspell/test/src/lt_LT.txt b/Common/3dParty/hunspell/test/src/lt_LT.txt
deleted file mode 100644
index 1f04ae6ce1..0000000000
--- a/Common/3dParty/hunspell/test/src/lt_LT.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-Abstraktus
-šachmatai
-žadintoja
-agurkas
-Aikštė
-Akinukai
-akmuo
-šakoti
-aktualinti
-aktorius
-šalinis
-šaltinis
-bernystė
-beskuo
-būgnelis
-Bilietas
-bilingvizmas
-daržavietė
-Darbadienis
-Darbas
-darbuotoja
-dargi
-daržinė
-daugintoja
-Daugiaveiksmis
-delnė
-įdelnis
-detalizuoti
-šerdelė
-erdvėti
-šeriškas
-šeštadienis
-etiketas
-Evoliucija
-fabrikantė
-Fantastika
-Fenomenas
-fikusas
-gaudinėti
-gausėja
-gūbrinti
-geležis
-geležtė
-gelsvis
-geranoris
-Gertys
-gerviukas
-giesmininkė
-Gikas
-Goža
-griaustinis
-grįžinys
-gėrioja
-griozdas
-grizijo
-gryčia
-grožėja
-grįžti
-grupė
-gąstauti
-Jaukas
-jodinėjo
-jodyti
-keturnagis
-Kiaušina
-Kiaurymė
-kiausta
-kietakaktis
-ūkiškas
-kilimėlis
-kilometrinis
-ūkininkaitė
-ūkinis
-krykti
-lapuotis
-laukas
-laupti
-laužtė
-Maudulys
-Maumedis
-mažutėlis
-mazgotuvė
-mechanikė
-medeinė
-medikamentinis
-meduolinis
-Nūdien
-nebrendėlė
-Negu
-neiginys
-parudenys
-pasakotojas
-pasausė
-pasieninis
-paskyriui
-paslapčiom
-Pasodas
-Pat
-Pataikūniškas
-patarška
-patentinis
-proskyna
-protekiniais
-provizoriškas
-rėkčioti
-rūmas
-rodyklinis
-Romanistas
-Skylmatis
-Skyriklis
-skolininkas
-skraidžioja
-skruzdėda
-skėtrus
-
-Слова с ошибками
-Abbreviatūra
-alpinismas
-amortizacia
-daugiamžis
-deziderativinis
-generazija
-keturiasdešimtūkstantas
-krivuluoja
-Šnaukstai
-pazintinis
-progresa
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/lv_LV.txt b/Common/3dParty/hunspell/test/src/lv_LV.txt
deleted file mode 100644
index 5198404759..0000000000
--- a/Common/3dParty/hunspell/test/src/lv_LV.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-Sveiks
-Sveikks
-Labrīt
-Lbrīt
-Paldies
-Paldiess
-Lūdzu
-Luzu
-Atvainojiet
-Atvainvfojiet
-Prieks
-Perieks
-Draugs
-Dravfugs
-Ģimene
-Gimene
-Māja
-Maja
-Pilsēta
-Pilseta
-Ceļš
-Ceļšs
-Kalns
-Jūra
-Sauls
-Mēness
-Zvaigznes
-Diena
-Nakts
-Brokastis
-Pusdienas
-Vakariņas
-Vīns
-Kafija
-Maize
-Siers
-Makaroni
-Pica
-Saldējums
-Deserts
-Sāļš
-Augļi
-Dārzeņi
-Gaļa
-Zivis
-Vistas
-Ola
-Sāls
-Pipari
-Eļļa
-Sviests
-Cukurs
-Piens
-Jogurts
-Salāti
-Zupa
-Salds
-Šokolāde
-Spageti
-Rīsi
-Kakao
-Biezpiens
-Kūka
-Tēja
-Karalis
-Zelts
-Ezis
-Tulpe
-Lācis
-Kaķis
-Suns
-Putns
-Vārna
-Zaķis
-Pele
-Ābols
-Aita
-Zirgs
-Lauva
-Pūķis
-Lasis
-Vilks
-Vējš
-Uguns
-Ūdens
-Zeme
-Debesis
-Saule
-Rūpniecība
-Aizkustinošs
-Izdzīvošana
-Nepieciešamība
-Atbildība
-Lieliski
-Apmierināts
-Neparasts
-Izglītība
-Sarežģīts
-Atsevišķs
-Pamatots
-Organizācija
-Sadarbība
-Efektīvs
-Daudzveidīgs
-Novērtēt
-Pārsteidzošs
-Inovatīvs
-Vērtība
-Aizraujošs
-Nopietns
-Komunikācija
-Māksla
-Dzīvība
-Ekskluzīvs
-Tehnoloģijas
-Rezultāts
-Atbalsts
-Nodrošinātība
-Pārbaudīt
-Radošs
-Sociāls
-Izteiksmīgs
-Brīvība
-Pieredze
-Ietekme
-Pārmaiņas
-Drosmīgs
-Racionāls
-Empātija
-Izpratne
-Risinājums
-Iespējas
-Atklāts
-Vadošais
-Eksperimentāls
-Neatkarība
-Tīrība
-Samierināšanās
-Motivācija
-Harmonija
-Dinamisks
-Iedvesma
-Izglītojošs
-Komplicēts
-Pieejamība
-Sadarbība
-Tūlītējs
-Saprotams
-Neizsakāms
-Lieliskums
-Inovācijas
-Aizrautība
-Pārdomas
-Sapratne
-Rezultatīvs
-Iespējams
-Pārbaude
-Sociālais
-Izteiksme
-Brīvība
-Pieredzējis
-Ietekmīgs
-Pārmaiņu
-Racionāla
-Izpratni
-Risinājumi
-Iespējams
-Atklāta
-Vadošā
-Eksperimentāla
-Neatkarība
-Tīra
-Motivējošs
-Harmonisks
-Dinamika
-Iedvesmojošs
-Spēks
-Mīlestība
-Pasaule
-Daba
-Skaistums
-Miers
-Sapnis
-Prieks
-Rītausma
-Brīnums
-Izcils
-Saikne
-Dzirksts
-Pārmaiņas
-Atbalsts
-Izcilība
-Satriecošs
-Dzīvīgums
-Pārveidošana
-Uzdrīkstēšanās
-Uzticamība
-Ieguldījums
-Vērtība
-Līdzsvars
-Saskaņa
-Izsmalcinātība
-Pateicība
-Atzinība
-Pārsteigums
diff --git a/Common/3dParty/hunspell/test/src/mn_MN.txt b/Common/3dParty/hunspell/test/src/mn_MN.txt
deleted file mode 100644
index ac86b087ab..0000000000
--- a/Common/3dParty/hunspell/test/src/mn_MN.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-Баатар
-Багаа
-Базар
-Барра
-Бат-Очир
-Баттуул
-Батхэсэн
-Баярмаа
-Билгэх
-Бор
-Бөөнцагаан
-Бүрэнхайрхан
-Бямбагар
-Бэх
-Гарам
-Гантиг
-Гурвантэс
-Гүр
-Гэрэлтуяа
-Давст
-Дангаа
-Дансран
-Дарь-Эх
-Дөргөн
-Дундбүрд
-Дэмүүл
-Дэлгэрцэцэг
-Жавзан
-Жарантай
-Заглул
-Зүүнхөвөө
-Кир
-Корона
-Лүн
-Лха
-Лхаваан
-Майхан
-Манлай
-Мөндөөхөө
-Мөнхөт
-Мөрөн
-Мөнххаан
-Мөст
-Мэгэд
-Мухар
-Найдалмаа
-Найтингейл
-Налайх
-Нарантуул
-Намтай
-Насантогтох
-Номин
-Нямсамбуу
-Нэүдэй
-Орог
-Очир
-Өнөржаргал
-Өөдөс
-Өргөн
-Паган
-Пас
-Пүрэвдорж
-Пүрэвхүү
-Сайнаа
-Сайхандулаан
-Сундуй
-Сэлх
-Сүүж
-Сээр
-Тайван
-Тарав
-Тогтуун
-Төрболд
-Төхөм
-Төмөр
-Түргэн
-Түшиг
-Түгтөмөр
-Түшиг
-Удвал
-Улиастай
-Улаандэл
-гүедэцгээчих
-дэвхэрлүүлсхийчих
-дэвхэлцгээчих
-дэвшигдүүлгэчих
-дэвшилцчих
-дэвээ
-дэггүйчүүд
-наламгардуулалц
-налбаруулзна
-
-Слова с ошибками
-Батарчулуун
-Баруунхарааа
-Даважаргал
-Дөрволжин
-Мягмараран
-Оюунтулхуур
-оторчилсхилгэ
-Асрамжлулгацгаачих
-гүентүүлгэцгэээ
-наладаадуулга
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/nb_NO.txt b/Common/3dParty/hunspell/test/src/nb_NO.txt
deleted file mode 100644
index 7218490a61..0000000000
--- a/Common/3dParty/hunspell/test/src/nb_NO.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-Bahamasøyene
-Festarrangement
-Festarrangemang
-Festival
-festligheta
-festnummer
-forhandlernett
-forgylle
-fotballstyre
-Fotgå
-fotoamatørene
-Fotogalleri
-fotokopiere
-generalkostnadene
-generaltabbe
-generøs
-Generell
-genmodifisertst
-handlingsresymeet
-hardhet
-Harmfull
-hastighetsregulering
-havbanke
-havforskningsundersøkelsene
-informasjonsutveksling
-Infrarødest
-kaffeautomat
-kaldslig
-kalenderåra
-kjekk
-kjendisstoffa
-kjærlighetslyrikk
-kjøkken
-Kontantautomat
-kontantlån
-kontrahere
-kontraheringsplikt
-Låskasse
-læregutt
-læreprosess
-Museums
-museumssamling
-musikkorps
-myggstikka
-myndighetsaldere
-omløpstider
-omregn
-områdeplan
-omriss
-omsetningsgjeld
-omsjaltning
-omsetningsvolumer
-omslutning
-omslyngning
-omsonst
-omstendeligheta
-Omstart
-Omstreifende
-Omsyn
-omtåketheta
-oppdagelse
-oppbygning
-oppebære
-oppfølgingsapparat
-oppgjørsbank
-oppgjørsblankett
-opphøringene
-partisipere
-randverdi
-rapportskriver
-rasjonalisering
-Rate
-selsak
-selskapsinntekt
-selskapsoverskudd
-selvbetjeningene
-snabbingene
-Snadderene
-Sytti
-søkekriterium
-søkemulighetene
-søkeargumenter
-søkingen
-søkne
-sølvlaga
-sørlandsk
-søtningene
-tabellrad
-Tabellkolonne
-Takhalm
-taksene
-takseringssystema
-tal
-trolsk
-trosinnholdene
-utfoldelsesmuligheta
-Utformingsmetode
-Utgift
-vekstfaktor
-vekstforhold
-
-Слова с ошибками
-Arbeidstagerorganisasion
-festsprel
-forhandlingsdirektor
-handlingforløpa
-kjempeflinktt
-lanetilbud
-omraming
-omsvøpssfull
-raportmateriale
-serstilt
-taksamst
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/nl_NL.txt b/Common/3dParty/hunspell/test/src/nl_NL.txt
deleted file mode 100644
index 3efaf4df40..0000000000
--- a/Common/3dParty/hunspell/test/src/nl_NL.txt
+++ /dev/null
@@ -1,115 +0,0 @@
-Advertentie
-Advocate
-affirmatie
-afgevaardigd
-afneemster
-allerbekendst
-alternatieveling
-annulering
-anticycloon
-Backtrackroute
-Bearbeiden
-becijfer
-bediening
-bedrag
-beduiden
-beïnvloeding
-benadeling
-bepaaldelijk
-Catalogiseer
-Catering
-cellulair
-classificator
-collaboreren
-collectiviteit
-comfortabel
-complimenteus
-contractant
-correctionaliseren
-daaraanvolgend
-dagelijks
-deelgenoot
-degelijkheid
-demarqueren
-Denotative
-deposant
-dergelijken
-detail
-deugen
-diakritisch
-Directioneel
-dusgenaamd
-eendrachtigheid
-Eenzaamheid
-eersteklascoupé
-Eigenschap
-felicitatietelegram
-centerkanaal
-Chargeer
-filiaal
-klare
-Klassikaal
-kleinhandel
-evolutie
-exemplaar
-exequiën
-familiaal
-fauteuil
-luister
-magistratelijk
-perelaar
-Permitteren
-Perseveratie
-persoonlijk
-pictogram
-pixel
-sloten
-sluimer
-sneltoets
-Soldij
-Solliciteren
-zegepraal
-zelfbeeld
-zevendaags
-aangeslotene
-meermaals
-expedieert
-jaargetijden
-kaderleden
-Kapitelen
-
-Сложные слова
-avontuurlijkheid
-bedrijfsmaatschappelijk
-begrotingstechnisch
-belangstellingssfeer
-concurrentievoordeel
-conferentieganger
-democratisch-liberaal
-discontoverhoging
-doctoraatsverhandeling
-dubbeldeksbus
-economisch-financieel
-energiezuinig
-erkentelijkheid
-evenwichtigheid
-klimaatsverandering
-koffiezetmachine
-koopmansgebruik
-maatschapsovereenkomst
-personeelsconsulent
-sociaalwetenschappelijk
-zelfverzekerdheid
-fondsenwervende
-
-Слова с ошибками
-afficher
-algorithme
-beeindiging
-client
-consnteren
-deactivieren
-deblockering
-electrisch
-certificat
-sovereiniteit
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/nn_NO.txt b/Common/3dParty/hunspell/test/src/nn_NO.txt
deleted file mode 100644
index 6c0c1b48bc..0000000000
--- a/Common/3dParty/hunspell/test/src/nn_NO.txt
+++ /dev/null
@@ -1,116 +0,0 @@
-Ankeret
-Anleggsbedrift
-Annandag
-annonseavis
-annuell
-ansats
-ansvarsmedviten
-Antibiotikai
-apal
-apoteki
-apparattavlor
-appetitt
-Aprikos
-arbeidsdokument
-arbeidsmarknad
-barndom
-bastematte
-bautingi
-Bedriftsleiar
-befolkningi
-begynnarkurs
-Beheld
-belastningi
-beredskapsnivå
-beredskapsperiode
-berglandskapi
-berrfrost
-beskjedi
-beskrivingi
-betalingsoppdrag
-betalingsplikt
-bevismateriale
-bildeband
-bildebruki
-bildespråki
-bildeteksti
-bilingval
-billettlukone
-binær
-bione
-bjørkegreini
-bjørnebæri
-blenge
-blokkeringi
-blomsterbordi
-blyerts
-bogen
-bokstavrekningi
-bokstavteikni
-Borddisk
-effektevaluering
-elgkalv
-Elone
-emballer
-faktainformasjon
-familiebedrifti
-familieterapeut
-fastbuande
-Februar
-feili
-fisketom
-hengelåsi
-istandsetjingi
-Item
-jaguar
-jamlig
-janen
-jarnbanestasjon
-kjende
-kjentfolki
-kjæleri
-kjøledisk
-kjørety
-midli
-Mideftnar
-midtstrek
-multiplikasjonstabell
-museumsdirektør
-onsdag
-operasjon
-operasjonskode
-opinionsskapingi
-opningi
-Personalkonsulent
-Personligdom
-persontryggleik
-petroleumspris
-redningsaksjon
-reduksjon
-refusnik
-seinst
-sekretær
-seljande
-sendeferd
-Standpunkt
-støyisolering
-støytvis
-terminoppgåve
-tidløysone
-tidsfølgjone
-Tilbakebetalingstid
-uprofesjonell
-upåklageleg
-
-Слова с ошибками
-Anlegsarbeid
-anonse
-ansversproblematikk
-barneforteling
-besoksliste
-bilophoggingi
-effektivitetskontrol
-fakturaerklering
-miljøbyrad
-selskapskat
-cement
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/oc_FR.txt b/Common/3dParty/hunspell/test/src/oc_FR.txt
deleted file mode 100644
index 23c82dafd0..0000000000
--- a/Common/3dParty/hunspell/test/src/oc_FR.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-Ajustaira
-alaguiar
-alausièr
-alberguèri
-alcaloïdic
-alègrament
-alenament
-algorisme
-Alimentacion
-allergologia
-alpèstra
-amaisament
-amorteirar
-analista
-analogic
-atucament
-Audicion
-auquièr
-auscultacion
-auscultar
-ausèri
-autenticament
-brilhant
-brumós
-Burgada
-cabelièira
-cadeçar
-Caducèu
-çaicontra
-calcièrs
-Calmar
-camarilha
-cambièra
-canalhariá
-casse
-cedar
-cendrós
-cèrca
-cèrtes
-cestòdes
-chantièr
-chartrós
-Chassís
-dimensionar
-diptèrs
-dirèctament
-discrecionària
-discriminar
-Distraire
-dòler
-Enòrme
-enqueriái
-espicifòrme
-esquelèt
-Esquèrra
-estetic
-innocéncia
-innocentàs
-Maniquèu
-mantelejar
-Nauchièr
-natièr
-oxigèn
-pacanariá
-pagés
-pagesiá
-Primièirament
-requereguèri
-requisitòria
-saumelèri
-S'autodeterminar
-sautarèl
-scientament
-scientologia
-secador
-secretèri
-sècta
-sectorial
-s'efarcimar
-s'endeven
-s'engarrar
-sentimental
-s'entrepausar
-shampó
-sextant
-sòli
-Solidament
-soquèla
-subrejornada
-suedés
-utilitària
-Utilizaire
-vacàs
-vaisselèri
-valiái
-validament
-
-Слова с ошибками
-albatros
-amistanza
-brunonièr
-carpentier
-centrifugation
-estelhad
-primaria
-s'embractar
-sosembrançament
-vascularisacion
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/pl_PL.txt b/Common/3dParty/hunspell/test/src/pl_PL.txt
deleted file mode 100644
index 81c4afafce..0000000000
--- a/Common/3dParty/hunspell/test/src/pl_PL.txt
+++ /dev/null
@@ -1,225 +0,0 @@
-dom
-pies
-kot
-auto
-drzewo
-książka
-szkoła
-przyjaciel
-mama
-tata
-dziecko
-jabłko
-czekolada
-kawa
-herbata
-telefon
-telewizor
-komputer
-muzyka
-sport
-zdrowie
-piękno
-praca
-miłość
-szczęście
-czas
-pieniądze
-język
-kraj
-miasto
-zima
-lato
-jesień
-wiosna
-morze
-góry
-jezioro
-rzeka
-park
-zwierzę
-ptak
-ryba
-drewno
-złoto
-srebro
-metal
-szkło
-buty
-sukienka
-spodnie
-koszula
-czapka
-płaszcz
-ręka
-noga
-oko
-ucho
-nos
-usta
-ząb
-głowa
-serce
-mózg
-król
-królowa
-książę
-księżniczka
-chłopak
-dziewczyna
-mężczyzna
-kobieta
-staruszek
-staruszka
-lekarz
-pielęgniarka
-nauczyciel
-uczennica
-student
-studentka
-kucharz
-kelner
-wojna
-pokój
-mapa
-flaga
-śmiech
-płacz
-sen
-marzenie
-praca
-nauka
-sztuka
-teatr
-kino
-muzeum
-kaplica
-kościół
-zamek
-most
-droga
-
-Сложные слова на польском языке
-
-1. konstantynopolitańczykowianeczka
-2. niezadogłębienieńskujący
-3. antykontraatakujący
-4. supersamoobsługiwalnymi
-5. rozpierduchlanoculka
-6. nieodezwawiałobyś
-7. przystawieniowy
-8. nieprzeżyciowakościami
-9. nieprzekazywających
-10. przeciwzakwaszeniowych
-11. nieszczęściodrapańskiego
-12. społeczno-wychowawczyniami
-13. seledynowo-fioletowymi
-14. przeciwdeszczową
-15. mikroelektroniczno-kwalitacyjną
-16. nieokreślonościowo-losowo-obiektywnie
-17. zagubieniecioburakowatej
-18. antyneuroleptyzanckim
-19. nieupubliczniającymi
-20. splądrowałbyś
-21. konserwowano-spożywczymi
-22. ożelośćiowo-miłosnej
-23. nieprzyzwoitolicjią
-24. nieodporowościę
-25. rzeszołkofiołkowatymi
-26. niezakapiactwuja
-27. nieoszczędniewczelnianków
-28. przekształconowaczkołępów
-29. rozwińczywianiu
-30. nieprzeskakiwalnościami
-31. modernizująco-rewolucyjnego
-32. nadzwyczajnieuzdolnionymi
-33. przemocno-wsparciański
-34. przepyszno-peltzerowskiego
-35. kwestionowano-wzmocnieniami
-36. nieodczynieństwującą
-37. niezasłużonowypasionego
-38. likwidującego/zarządzającego
-39. szeszcześtoplutowanych
-40. niewpadkowościowi
-41. antynazizhownemu
-42. nieuchronnieprzekroczeniowym
-43. niezatrawialnieprzyjemnego
-44. kardiopulmonologiczno-angiologów
-45. gorączkowointensywnościowego
-46. antykonstytucyjnorozpadowego
-47. nieobawiamysię/źródleni
-48. prerewolucyjnolphillipsowi
-49. szóstkaniewygranych
-50. nieupadkokogeneracyjnymi
-51. społeczno-humanitarnarządzaniami
-52. nieodziewowiędzy
-53. przemocnochamować
-54. społecznosensacyjnosądowym
-55. przerażającorzymskiego
-56. nieprzemontowanych/zamuzowych
-57. referendumkonstytucyjno-reformujące
-58. niezniesłowiałszymi
-59. niebohaterystycznymi
-60. produktodenarodowomenopauzalem
-61. odrywającopierdolca
-62. niegotowożywione
-63. niepostronnynarodzonemu
-64. przedniaautochtonicznym
-65. nadciągniono-wchodzących
-66. promocjostworczym
-67. niezapowiadającychkoalicji
-68. bezgłupinczłapie
-69. wyomjaził
-70. wagotonizacyjno-radiofonizowanego
-71. gospodarczo-zasadotwórczej
-72. skrupulatno-rzeźniczobardziej
-73. samokiedy-konstytucyjnej
-74. niedomętnością
-75. nieoszustamiwykorzystana
-76. przeprowadzonoświeckie
-77. nieuniknionaobowiązkowo-plastycznej
-78. poduszkowo-nicościowych
-79. niepowodzeńbutmizeryjewego
-80. skojarzeniowocolorowymi
-81. przytułkamiwciągarkowych
-82. wchodziłoprzeciwniepowszechny
-83. karaublicznociągana
-84. przedpolitycznilubelskim
-85. niezapowiedziano-date-expanded
-86. licznościłodziennej
-87. niezawinieniomatołek
-88. pakujączwobilardowego
-89. rewersdopisek
-90. przeprosinoworadosną
-91. nieakceptacyjnoprospekcyjnymi
-92. jedniżużytym
-93. ainikopciksemilitechnikowany
-94. motszynopiszącym
-95. nieprzerejestrowanasezonowanie
-96. słupotartackimoblikiem
-97. nieodbieraniemniedostępności
-98. dorozwinięcówkobiet
-99. szybopojabytesłowickiego
-100. przystępnoracjmujacych
-
-Слова с ошибками
-
-jedniiżużytym
-
-wiomjaził
-
-niezzniesłoowiałszymi
-
-superrsammoobsługiwalnymi
-
-przemoocnochamować
-
-staruszzka
-
-tiatr
-
-woina
-
-teleffon
-
-zołoto
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/pt_BR.txt b/Common/3dParty/hunspell/test/src/pt_BR.txt
deleted file mode 100644
index 6f39dbef64..0000000000
--- a/Common/3dParty/hunspell/test/src/pt_BR.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-que
-eu
-não
-de
-você
-para
-ele
-se
-é
-um
-sim
-por
-isso
-em
-uma
-uuma
-está
-como
-com
-bem
-na
-me
-mas
-do
-era
-quando
-então
-tudo
-tydo
-aqui
-disse
-estava
-esâtava
-lá
-fazer
-vai
-sobre
-vamos
-homem
-hollmem
-bom
-ok
-agora
-coisa
-coissa
-quero
-foi
-meu
-seu
-só
-eles
-as
-posso
-pocso
-estou
-mais
-mim
-certo
-dizer
-dizdizerr
-os
-no
-sei
-ela
-vocês
-sua
-todos
-sabe
-minha
-alguma
-algyyma
-casa
-muito
-oh
-quallquer
-qualquer
-da
-estamos
-até
-onde
-onede
-ao
-tenho
-nós
-tem
-tinha
-tiinha
-quê
-ir
-ou
-pode
-quer
-vou
-seus
-dia
-estão
-nos
-cabeça
-quem
-anos
-depois
-sou
-vez
-vá
-fez
-irmão
-câmera
-câmeara
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/pt_PT.txt b/Common/3dParty/hunspell/test/src/pt_PT.txt
deleted file mode 100644
index ed038092d0..0000000000
--- a/Common/3dParty/hunspell/test/src/pt_PT.txt
+++ /dev/null
@@ -1,135 +0,0 @@
-pan
-manteiga
-menteiga
-queijo
-salchichón
-saуlchichón
-óleo
-pimenta
-pimmenta
-sal
-baga
-mel
-geléia
-cogumelo
-cebola
-cóbola
-banana
-cenoura
-pêra
-beterraba
-frutas
-melão
-melancia
-bolo
-chocolate
-carne
-batatas
-salada
-salóda
-tomate
-pepino
-pipino
-col
-mingau
-sopa
-sanduíche
-refrigerante
-refrigarante
-água
-café
-chá
-leite
-suco
-scuco
-maçã
-uvas
-laranja
-abacaxi
-adacaxi
-damasco
-demasco
-açucar
-arroz
-macarrão
-res
-porco
-frango
-costeleta
-cãsteleta
-limão
-ervilha
-pão
-peixe
-caramelo
-sorvete
-nogueira
-ovo
-pêssego
-xícara
-xíícara
-vidro
-prato
-colher
-garfo
-faca
-pires
-garrafa
-guardanapo
-café da manhã
-almoço
-jantar
-avião
-carro
-bonde
-ônibus
-trem
-bicicleta
-janeiro
-fevereiro
-fevíreiro
-março
-abril
-maio
-junho
-julho
-agosto
-setembro
-setembra
-outubro
-novembro
-dezembro
-desembro
-caneta
-livro
-xadrez
-telefone
-relógio
-pente
-televisão
-ferro
-sabão
-rádio
-bolsa
-cartão
-mala
-presente
-câmera
-computador
-camputador
-filme
-flor
-vaso
-quadro
-lenço
-bola
-balão
-brinquedo
-brinqueedo
-conta
-sobre
-papel
-pepel
-jornal
-letra
-bilhete
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/ro_RO.txt b/Common/3dParty/hunspell/test/src/ro_RO.txt
deleted file mode 100644
index 2cd141c941..0000000000
--- a/Common/3dParty/hunspell/test/src/ro_RO.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-casă
-copil
-carte
-masă
-școală
-lumină
-apă
-munte
-soare
-lună
-pâine
-fruct
-floare
-stradă
-mașină
-aer
-timp
-zi
-noapte
-nor
-vânt
-ochi
-gură
-nas
-mână
-picior
-inimă
-sânge
-cap
-ureche
-voce
-melodie
-culoare
-formă
-linie
-cerc
-dreptunghi
-cercetare
-știință
-limbă
-frază
-literă
-cifră
-număr
-sunet
-zgomot
-telefon
-internet
-computer
-program
-ecran
-tastatură
-mouse
-joc
-sport
-muzică
-artă
-film
-televizor
-radio
-planetă
-stea
-univers
-galaxie
-atom
-moleculă
-substanță
-energie
-lumină
-căldură
-frig
-aparat
-instrument
-mașinărie
-unelte
-hrană
-băutură
-haine
-pantofi
-păr
-piele
-ochelari
-ceas
-bijuterie
-pământ
-apă
-aer
-foc
-metal
-lemn
-piatră
-hârtie
-cerneală
-pix
-carte
-cadru
-tablou
-sculptură
-model
-formă
-anticonstituționalitate
-dezvoltare
-inexpugnabil
-nefast
-concomitent
-antiseptic
-recalcitrant
-perseverență
-extravagant
-inexorabil
-colosal
-plauzibil
-efervescent
-perspicacitate
-superfluu
-subversiv
-incoruptibil
-inefabil
-hiperbolic
-indefectibil
-peremptoriu
-ambivalent
-paradoxal
-heterogen
-indiferent
-periferic
-subliminal
-ultraviolet
-indeferent
-conglomerație
-circumstanțial
-contraproducător
-conglomerat
-insurmontabil
-intransigent
-insidios
-inerent
-consternant
-ambiguitate
-inerție
-inconsolabil
-oniric
-remarcabil
-repudiat
-subiectiv
-periculos
-infatigabil
-abnegare
-exuberant
-facet
-represiune
-implacabil
-indiferent
-infatigabil
-insolit
-intempestiv
-incandescent
-letargic
-magistral
-magnanim
-nefast
-oblivial
-oportun
-periculos
-plutitor
-propice
-reprobabil
-risipitor
-robust
-salutar
-simetric
-solicitant
-stringent
-sufocant
-superficial
-tranzitoriu
-tributar
-trivial
-umilitor
-unic
-vehement
-vernal
-vicios
-victorios
-vindicativ
-virtuos
-vizibil
-volatil
-vorace
-vulnerabil
-xenofob
-xerofil
-yonder
-yang
-yodel
-zonal
-zodiac
-zoon
-zoomorf
-zurbagiu
-Caaă
-Soaare
-Cartr
-Appă
-Coopil
-Frumoss
-Feriсire
-Prietenn
-Muziică
-Exeplu
diff --git a/Common/3dParty/hunspell/test/src/ru_RU.txt b/Common/3dParty/hunspell/test/src/ru_RU.txt
deleted file mode 100644
index 28d99377fc..0000000000
--- a/Common/3dParty/hunspell/test/src/ru_RU.txt
+++ /dev/null
@@ -1,197 +0,0 @@
-должен
-доллжен
-наш
-думаю
-думмаю
-свою
-сам
-всем
-ни
-нас
-пока
-этом
-этой
-ваша
-всеми
-возьми
-моей
-сама
-вся
-день
-само
-всей
-бывает
-себе
-пойду
-куда
-ими
-твоей
-всю
-своего
-твой
-пусть
-ним
-про
-точно
-иметь
-которые
-тогда
-сюда
-наше
-самой
-взять
-наверное
-домой
-совсем
-те
-тобой
-наверно
-что-то
-будто
-твои
-пути
-дома
-такие
-тех
-такое
-его
-самой
-вашей
-наверное
-мои
-например
-типа
-значит
-люблю
-минут
-пор
-случае
-искусство
-лучше
-того
-такому
-ждать
-видеть
-мною
-ждал
-имя
-важно
-чего-то
-самому
-обычно
-представляет
-мечтать
-стало
-помните
-взять
-моих
-самим
-своим
-вообще
-самими
-здесь
-обратно
-сразу
-таким
-ежели
-наоборот
-куда
-таков
-мечтает
-значит
-покажи
-такими
-кстати
-почти
-всякий
-научит
-вдоль
-тогдашний
-толком
-занимает
-Аквапланирование
-Барокамера
-Библиографирование
-Биосинтез
-Взаимодействующий
-Вибраторный
-Виртуальность
-Вооруженность
-Господствующий
-Десантно-штурмовой
-Диагностировать
-Дипломатический
-Дисгармония
-Дискриминационный
-Достопримечательный
-Жизнеустройство
-Интернациональный
-Инфицированный
-Кальцинировать
-Ключичный
-Коннотация
-Лиловатый
-Люминесцентный
-Метрополитен
-Многоплановый
-Модернизировать
-Наивысший
-Наименее
-Неопределенный
-Нераскрытый
-Неоднократный
-Неохотно
-Непостижимый
-Неусыпный
-Обезьяноподобный
-Обзавестись
-Оптический
-Оптимизировать
-Осуществиться
-Очистительный
-Парафинировать
-Переключатель
-Пограничный
-Подготовительный
-Подрядчик
-Полиморфный
-Почитать
-Преисполниться
-Преподаватель
-Преследователь
-Прирожденный
-Проектирование
-Профанация
-Разграничительный
-Распоряжающийся
-Реконструктивный
-Революционный
-Рентгенологический
-Рискованный
-Роскошествовать
-Самоунижение
-Сверхъестественный
-Светочувствительный
-Семантика
-Сингулярность
-Совершенствовать
-Соединительный
-Сосуществование
-Спорообразующий
-Стационарный
-Столовая
-Сторицей
-Сцепной
-Трансформирующий
-Триумвират
-Укротитель
-Универсальный
-Федеративный
-Хронометраж
-Целостность
-Криумвират
-Укратитель
-Универссальный
-Фидиративный
-Хранометраж
-Целосность
diff --git a/Common/3dParty/hunspell/test/src/sk_SK.txt b/Common/3dParty/hunspell/test/src/sk_SK.txt
deleted file mode 100644
index 1bc44a6dda..0000000000
--- a/Common/3dParty/hunspell/test/src/sk_SK.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-hiša
-pes
-mačka
-avto
-drevo
-knjiga
-šola
-prijatelj
-mama
-oče
-otrok
-jabolko
-čokolada
-kava
-čaj
-telefon
-televizija
-računalnik
-glasba
-šport
-zdravje
-lepota
-delo
-ljubezen
-sreča
-čas
-denar
-jezik
-država
-mesto
-zima
-poletje
-jesen
-pomlad
-morje
-gore
-jezero
-reka
-park
-žival
-ptica
-riba
-les
-zlato
-srebro
-kovina
-steklo
-čevlji
-obleka
-hlače
-srajca
-kapa
-plašč
-roka
-noga
-oko
-uho
-nos
-ustnice
-zob
-glava
-srce
-možgani
-kralj
-kraljica
-princ
-princesa
-fant
-dekle
-moški
-ženska
-starec
-starka
-zdravnik
-medicinska sestra
-učitelj
-učenka
-študent
-študentka
-kuhar
-natakar
-vojna
-mir
-zemljevid
-zastava
-smeh
-jok
-spanje
-sanje
-delo
-učenje
-umetnost
-gledališče
-kino
-muzej
-kapela
-cerkev
-grad
-most
-cesta
-
-Сложные слова
-
-1. Neparlamentarna
-2. Samozadosten
-3. Nepristranski
-4. Pretirano
-5. Nepredušno
-6. Nesreča
-7. Razpršeno
-8. Nesprejemljiv
-9. Prekomeren
-10. Prostovoljstvo
-11. Izolirati
-12. Trmast
-13. Brezpogojno
-14. Neodvisnost
-15. Skupnost
-16. Neizvedljiv
-17. Nelegitimen
-18. Nevzdržen
-19. Preobremenjenost
-20. Ogrevalni sistem
-21. Preoblikovati
-22. Nezaslišano
-23. Neugoden
-24. Prezasedenost
-25. Nesreča
-26. Neupravičeno
-27. Mednaroden
-28. Kompatibilnost
-29. Neuspeh
-30. Neobvladljiv
-31. Neskončen
-32. Neprimeren
-33. Amortizacija
-34. Koncentracija
-35. Cirkulacija
-36. Obremenitev
-37. Gromozanski
-38. Simbol
-39. Vinjeta
-40. Digitalizacija
-41. Funkcionalnost
-42. Rentabilnost
-43. Ekshibicionizem
-44. Frustracija
-45. Neprilagodljiv
-46. Severnoameriški
-47. Ekskluzivnost
-48. Preverjanje
-49. Celoživljenjsko
-50. Privlačnost
-51. Periferija
-52. Sokrivda
-53. Kompromis
-54. Strpnost
-55. Racionalizacija
-56. Birokracija
-57. Odraslost
-58. Stabilnost
-59. Nepredvidljivost
-60. Razkošje
-61. Smrtnost
-62. Obveščenost
-63. Produktivnost
-64. Neugodje
-65. Zapletenost
-66. Hegemonija
-67. Umetnost
-68. Tranzicija
-69. Individualnost
-70. Kontaminacija
-71. Inkubacija
-72. Prikrito
-73. Etnični
-74. Sovražnost
-75. Atraktivnost
-76. Nestrpnost
-77. Divergenca
-78. Digitalna pismenost
-79. Stabilizacija
-80. Raznolikost
-
-Слова с ошибками
-
- Kontamenacija
-
- Grommozanski
-
- Neobvladlliv
-
- Neparlametarna
-
- Nevrzdržen
-
- voina
-
- muzei
-
- ryba
-
- serebro
-
- televiziia
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/sl_SI.txt b/Common/3dParty/hunspell/test/src/sl_SI.txt
deleted file mode 100644
index 3a2674932d..0000000000
--- a/Common/3dParty/hunspell/test/src/sl_SI.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-Hiša
-Sonce
-Miza
-Stol
-Ptica
-Trava
-Drevo
-Noč
-Luna
-Morje
-Gora
-Cvet
-Riba
-Rdeča
-Modra
-Zelena
-Rumena
-Bela
-Črna
-Kamen
-Pes
-Mačka
-Roka
-Noga
-Glava
-Oči
-Uho
-Nos
-Usta
-Jabolko
-Hruška
-Sliva
-Jagoda
-Malina
-Lubenica
-Kruh
-Mleko
-Sir
-Mesnica
-Sadje
-Zelenjava
-Voda
-Zrak
-Ogenj
-Sneg
-Dež
-Oblak
-Veter
-Zima
-Poletje
-Jesen
-Pomlad
-Zajec
-Lisica
-Volk
-Medved
-Lev
-Tigrica
-Slon
-Konj
-Krava
-Ovca
-Piščanec
-Jajce
-Mleko
-Kava
-Čaj
-Sok
-Vino
-Pivo
-Hrana
-Pecivo
-Testo
-Marmelada
-Kruh
-Sir
-Olje
-Sol
-Poper
-Sladkor
-Kava
-Čaj
-Vino
-Pivo
-Šola
-Učitelj
-Učenec
-Knjiga
-Pisarna
-Računalnik
-Telefon
-Glasba
-Slika
-Film
-Gledališče
-Mesto
-Vas
-Trg
-Cesta
-Reka
-Avtomatizacija
-Razvoj
-Komunikacija
-Kompjuter
-Programiranje
-Elektronski
-Inženiring
-Elektrifikacija
-Kombinacija
-Sistem
-Informacija
-Univerza
-Biblioteka
-Univerzitetni
-Laboratorij
-Raziskava
-Razvojna
-Inovacija
-Intelektualni
-Integriteta
-Izobraževanje
-Izvajanje
-Preverjanje
-Tehnologija
-Implementacija
-Program
-Sodelovanje
-Proizvodnja
-Industrija
-Organizacija
-Administracija
-Proaktivnost
-Kreativnost
-Projektni
-Razumevanje
-Kvaliteta
-Upravljanje
-Ocenjevanje
-Statistika
-Kompetentnost
-Konsolidacija
-Realizacija
-Kapaciteta
-Distribucija
-Kompatibilnost
-Konceptualizacija
-Povezava
-Posodobitev
-Fleksibilnost
-Ekonomija
-Organiziranje
-Konkurenca
-Stabilnost
-Ekologija
-Osebnost
-Zavzetost
-Entuziazem
-Motivacija
-Avtorizacija
-Kreacija
-Akumulacija
-Monotonija
-Diferenciacija
-Transformacija
-Koncentracija
-Inovativnost
-Aktivnost
-Vzpostavljanje
-Reorganizacija
-Kategorizacija
-Partikularnost
-Homogenost
-Izjemenost
-Generalizacija
-Hierarhija
-Koordinacija
-Inspiracija
-Evaluacija
-Ustvarjalnost
-Oblikovanje
-Kompatibilnost
-Konkretizacija
-Proaktivnost
-Identifikacija
-Kapaciteta
-Intervencija
-Konsolidacija
-Realizacija
-Eksplozivnost
-Abstrakcija
-Individualnost
-Integracija
-Segmentacija
-Asimilacija
-Artikulacija
-Kolaboracija
-Asociacija
-Stabilizacija
-Kooperacija
-Transformacija
-Hšza
-Kmojnikacija
-Progrramiranjee
-Elektornkski
-Inženeirrng
-Izzobraževanjee
-Infomracija
-Razvoojnaa
-Proizvdonja
-Akitvnostt
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/sr_Cyrl_RS.txt b/Common/3dParty/hunspell/test/src/sr_Cyrl_RS.txt
deleted file mode 100644
index 9002894db6..0000000000
--- a/Common/3dParty/hunspell/test/src/sr_Cyrl_RS.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-кућа
-пас
-мачка
-аутомобил
-дрво
-књига
-школа
-пријатељ
-мама
-тата
-дете
-јабука
-чоколада
-кафа
-чај
-телефон
-телевизија
-рачунар
-музика
-спорт
-здравље
-лепота
-посао
-љубав
-срећа
-време
-новац
-језик
-земља
-град
-зима
-лето
-јесен
-пролеће
-море
-планине
-језеро
-река
-парк
-животиња
-птица
-риба
-дрво
-злато
-сребро
-метал
-стакло
-ципеле
-одећа
-панталоне
-кошуља
-капа
-капут
-рука
-нога
-око
-уво
-нос
-усне
-зуб
-глава
-срце
-мозак
-краљ
-краљица
-принц
-принцеза
-дечак
-девојчица
-мушкарац
-жена
-старац
-старица
-доктор
-медицинска сестра
-наставник
-ученик
-студент
-студенткиња
-кувар
-конобар
-рат
-мир
-мапа
-застава
-смех
-плач
-сан
-сањарење
-посао
-учење
-уметност
-позориште
-биоскоп
-музеј
-црква
-дворац
-мост
-улица
-пут
-
-Сложные слова
-
-Конечно! Вот сто сложных слов на сербском языке на кириллице:
-
-1. Контраст
-2. Компликација
-3. Конструкција
-4. Диспропорција
-5. Корелација
-6. Колаборација
-7. Консервативан
-8. Диференцијација
-9. Експерименталан
-10. Инвалидитет
-11. Легитиман
-12. Оптимизација
-13. Компетентан
-14. Документација
-15. Персистентан
-16. Апроксимација
-17. Екстраваганција
-18. Катастрафалан
-19. Резервација
-20. Прогресиван
-21. Идентификација
-22. Генерација
-23. Криминалистички
-24. Дестабилизација
-25. Корумпиран
-26. Конфронтација
-27. Експлозиван
-28. Функционалан
-29. Релевантан
-30. Квалификација
-31. Акредитација
-32. Петиција
-33. Каустичан
-34. Периодичан
-35. Контроверзан
-36. Гигантски
-37. Принципијалан
-38. Управоливост
-39. Имунизација
-40. Магнетичан
-41. Оперативан
-42. Десант
-43. Хиерархија
-44. Феминистички
-45. Сегментација
-46. Колоритан
-47. Деградација
-48. Диверзификација
-49. Казуистички
-50. Реципрочан
-51. Манипулативан
-52. Екстензиван
-53. Колективни
-54. Каузалитет
-55. Синхронизација
-56. Кампања
-57. Товарни
-58. Хируршки
-59. Шампионат
-60. Геостационаран
-61. Опустошан
-62. Клема
-63. Стационарни
-64. Секуларни
-65. Исегментација
-66. Дебелина
-67. Прецизан
-68. Рафиниран
-69. Психолошки
-70. Турбулентан
-71. Интегритет
-72. Идеолошки
-73. Манифестација
-74. Имплицитан
-75. Хомогеност
-76. Изолација
-77. Хетерогеност
-78. Спекулативан
-79. Вагу
-80. Математички
-81. Гематолошки
-82. Психијатријски
-83. Блокада
-84. Заплена
-85. Монопол
-86. Дисидент
-87. Екстрадиција
-88. Ревизија
-89. Ваидан
-90. Колонизација
-91. Мотивација
-92. Просек
-93. Ресурс
-94. Хуманизам
-95. Дравски
-96. Коалиција
-97. Картеля
-98. Резолуција
-99. Менталитет
-100. Епидемиологија
-
-С ошибками
-
- Колонизакаија
-
- Епидемиогија
-
- Казуистикаки
-
- Хуманкзам
-
- Манитулативан
-
- сањваење
-
- утење
-
- автомобил
-
- мекицинска сестра
-
- стукло
\ No newline at end of file
diff --git a/Common/3dParty/hunspell/test/src/sr_Latn_RS.txt b/Common/3dParty/hunspell/test/src/sr_Latn_RS.txt
deleted file mode 100644
index 48cd99d072..0000000000
--- a/Common/3dParty/hunspell/test/src/sr_Latn_RS.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-ananas
-anarhistički
-antidepresiv
-Anđeo
-avion
-banana
-banka
-belina
-bespomoćnost
-bibliotekar
-bibliaoteikar
-brod
-citat
-crkva
-cvet
-cveće
-demokratija
-demackratija
-demokratizacija
-Dobrota
-dom
-Dragi
-ekran
-eksperimentalni
-eksplozija
-epidemiologija
-farmakologija
-filantropija
-flaša
-frizura
-fudbal
-garaža
-generalitet
-geografski
-globalizam
-gnezdo
-grad
-građanstvo
-grlo
-hamburger
-Harmonija
-himalaji
-hiperbola
-hipotermija
-hleb
-Hrabrost
-hrana
-Hvala
-igra
-igračka
-individualnost
-infrastruktura
-internet
-inmternet
-jabuka
-jahač
-jastuk
-jednakost
-jubilej
-jurisprudencija
-kafa
-krevet
-kriminalisticki
-kriminalistika
-kuća
-kvantitativni
-lampa
-latiaratura
-Lepota
-lingvistika
-literatura
-ljubav
-Ljubavi
-ljubavnica
-Ljubazan
-Ljubim
-lubenica
-majica
-majka
-mašina
-mikroorganizama
-mikroskopija
-Milost
-Mir
-Mirno
-nacionalizam
-nedopustiv
-neurologija
-novčanik
-noć
-nož
-oktobar
-okultizam
-optimističan
-optimističnost
-ormar
-Osoba
-oči
-pas
-peškir
-planina
-poniženje
-Porodica
-Prijatelj
-psihologija
-psihoterapija
-Radost
-računar
-reka
-rekonvalescencija
-reumatologija
-revolucija
-sendvič
-Slatko
-Sloboda
-Slobodan
-Snaga
-socijalizacija
-socijalizam
-Spreman
-Sreća
-Srećan
-Srećno
-sunce
-superiornost
-Svetlost
-tata
-tehnologija
-telefon
-telekomunikacije
-top
-tradicionalni
-ulica
-univerzalnost
-univerzitet
-univirzdalnost
-Usmena
-Znanje
-usta
-Vedar
-vegetarijanstvo
-velikodušnost
-voda
-voz
-Zabava
-zavisnost
-Zdravlje
-zemlja
-Zima
-zjmlja
-zločinački
-zoološki
-Zvezda
-ćilim
-čarapa
-čarobnjak
-časopis
-čizme
-đak
-đevrek
-đumbir
-šešir
-šišmiš
-škola
-šljiva
-šuma
-žaba
-ženskara
-žirafa
-život
-životinjski
-žurka
-
diff --git a/Common/3dParty/hunspell/test/src/sv_SE.txt b/Common/3dParty/hunspell/test/src/sv_SE.txt
deleted file mode 100644
index 99b61d1576..0000000000
--- a/Common/3dParty/hunspell/test/src/sv_SE.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-Hus
-Sol
-Mjölk
-Vatten
-Fisk
-Stol
-Grön
-Blomma
-Träd
-Katt
-Hund
-Bok
-Cykel
-Kaffe
-Frukt
-Kött
-Fönster
-Dörr
-Säng
-Lampa
-Bord
-Hår
-Ögon
-Hand
-Fötter
-Näsa
-Mun
-Öra
-Huvud
-Arm
-Ben
-Kläder
-Hatt
-Skor
-Väska
-Papper
-Penna
-Skrivbord
-Telefon
-Radio
-Musik
-Film
-Teater
-Konst
-Sport
-Spel
-Resa
-Bil
-Tåg
-Buss
-Flygplan
-Båt
-Stad
-Land
-Hav
-Sjö
-Flod
-Berg
-Dal
-Park
-Skog
-Sjukhus
-Apotek
-Skola
-Universitet
-Affär
-Restaurang
-Café
-Hotell
-Turist
-Vän
-Familj
-Mamma
-Pappa
-Bror
-Syster
-Barn
-Morfar
-Mormor
-Vänster
-Höger
-Framåt
-Bakåt
-Upp
-Ner
-Snäll
-Osnäll
-Glad
-Ledsen
-Trött
-Stark
-Svag
-Tyst
-Bullrig
-Ren
-Smutsig
-Vacker
-Ful
-Liten
-Stor
-Komplexitet
-Oproportionerlig
-Ovillkorlig
-Efterklokhet
-Komplicerad
-Desorientering
-Konstellation
-Otillgänglighet
-Irreversibel
-Förlåtelse
-Overksamhet
-Indifferent
-Hierarki
-Kombinatorik
-Inkompatibilitet
-Absorption
-Konsekvens
-Verklighetsfrånvänd
-Retrospektiv
-Förändringsbarhet
-Ambivalens
-Besvikenhet
-Ineffektivitet
-Intrikat
-Dilemma
-Hesitation
-Absurditet
-Kompromisslös
-Konsolidering
-Föresats
-Tillfredsställelse
-Delegering
-Rekommendation
-Detaljrikedom
-Oanvändbar
-Stagnation
-Nostalgi
-Hemlighetsfull
-Avsaknad
-Perseverans
-Existentialism
-Repetitivitet
-Intolerans
-Anonymitet
-Obetydlig
-Paradox
-Förvirring
-Juxtaposition
-Reflektion
-Självständighet
-Kollision
-Kreativitet
-Djupgående
-Abstraktion
-Eufori
-Autentisk
-Insinuation
-Omöjlig
-Pessimism
-Inkonsekvens
-Revisionism
-Sensationell
-Obeveklig
-Subjektivitet
-Universalitet
-Entropi
-Omvälvande
-Infiltration
-Konservativ
-Atypisk
-Provokation
-Konfrontation
-Anarki
-Konkurrenskraft
-Defensivitet
-Nihilism
-Konklusion
-Apori
-Korrespondens
-Prioritering
-Exponentiell
-Fragmentering
-Aversion
-Harmoni
-Vanmakt
-Signifikans
-Katalysator
-Förlust
-Enhällighet
-Ambition
-Tendens
-Alienation
-Artificiell
-Uppfyllelse
-Psykosomatisk
-Virtuos
-Egensinnig
-Anpassning
-Hållbarhet
-Konstitution
-Kompleksitet
-Oproporsjonerlig
-Uvilkorlig
-Etterklokhed
-Komplisert
-Desorientering
-Konstelasjon
-Utilgjengelighet
-Irreversibel
-Forlatelse
diff --git a/Common/3dParty/hunspell/test/src/tr_TR.txt b/Common/3dParty/hunspell/test/src/tr_TR.txt
deleted file mode 100644
index 9ad60f3664..0000000000
--- a/Common/3dParty/hunspell/test/src/tr_TR.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-Akşam
-Almak
-Altın
-Anahtar
-Anlamak
-Araba
-Atmak
-Ayakkabı
-Açmak
-Ağaç
-Bahçe
-Bakır
-Bakkal
-Bakmak
-Balık
-Beyaz
-Bilgisayar
-Bilmek
-Binmek
-Bulmak
-Ceket
-Cevaplamak
-Deniz
-Dinlemek
-Doktor
-Duyurulmamış
-Düzenleştirme
-Düşmek
-Düşünmek
-Ekmek
-Elbise
-Eldiven
-Elma
-Erkek
-Etek
-Etmek
-Ev
-Eşarp
-Gelgit
-Geliştiricilikle
-Geliştirilebilir
-Geliştirme
-Gerçekleştirme
-Gezmek
-Geçmek
-Gitar
-Gitmek
-Giymek
-Gri
-Gömlek
-Görülebilirlik
-Görünümlü
-Görünüşlü
-Gözlük
-Gümüş
-Günaydın
-Hareketlendi
-Hareketlilik
-Hava
-Hayalperest
-Hüzün
-Kahve
-Kahverengi
-Kalabalıklar
-Kalem
-Kalkmak
-Kalmak
-Kapatmak
-Kararlılık
-Kararlılıkla
-Kararsızlık
-Kararsızlıkla
-Karpuz
-Kedi
-Kemer
-Kemdkcer
-Kırmızı
-Kitap
-Kız
-Kızgınmak
-Koklamak
-Koalye
-Kolye
-Konservatuvar
-Konuşmak
-Korkmak
-Koymak
-Koşmak
-Kravat
-Kullanılabilir
-Kullanılmış
-Kullanılmışlık
-Kullanışlılık
-Kurumsallaşma
-Köpek
-Küpe
-Kütüphane
-Mavi
-Mazbut
-Melankoli
-Merdiven
-Merhaba
-Merhabalar
-Meurhaba
-Meydan
-Meyhane
-Meyve
-Mor
-Muhafazakar
-Muhteşem
-Mukadderatlarınızdanmışçasına
-Muvaffak
-Muzaffer
-Muzafferiyet
-Muzip
-Mükemmeldik
-Münasebet
-Münzevi
-Müsrif
-Mütevazi
-Müteessir
-Mütercim
-Mütereddit
-Mütevazı
-Müzmin
-Okul
-Okumak
-Otobüs
-Otoriterlik
-Oynamak
-Pantolon
-Pasta
-Pembe
-Pembei
-Plaj
-Platin
-Saat
-Sandalye
-Sarı
-Satmak
-Sevinmek
-Sevmek
-Sıcak
-Sıradaymışız
-Siyah
-Sormak
-Soymak
-Soğuk
-Su
-Sükûnet
-Sürrealist
-Süt
-Tabak
-Tadına bakmak
-Tatlı
-Tavuk
-Telefoncu
-Televizyon
-Temizlemek
-Teşekkürler
-Türkuaz
-Tuirkuazu
-Turuncu
-Tutmak
-Ulaştırılabilir
-Uygulanabilir
-Uyumak
-Uçak
-Yapmak
-Yatak
-Yazmak
-Yemek
-Yeşil
-Yıkanmak
-Yıldız
-Yol
-Yöneltilmezken
-Yüzme
-Yüzük
-Zenginleştirmek
-Çalışamamıştı
-Çalışmak
-Çalışmamıştır
-Çanta
-Çay
-Çıkarmak
-Çiçek
-Çorap
-Özelleştirilmiş
-Özelleştirme
-Özgürleştirme
-Üzülmek
-İnmek
-İsteksizlik
-İsteksizlikle
-İstikrarlı
-İstikrarlılık
-İstisnai
-İslamiyetle
-İzlemek
-İçmek
-İşbirliği
-İşitmek
-Şapka
-Şemsiye
diff --git a/Common/3dParty/hunspell/test/src/uk_UA.txt b/Common/3dParty/hunspell/test/src/uk_UA.txt
deleted file mode 100644
index b139dedfbd..0000000000
--- a/Common/3dParty/hunspell/test/src/uk_UA.txt
+++ /dev/null
@@ -1,210 +0,0 @@
-абдукція
-абіогенез
-амбівалентнасть
-амбівалентність
-анахранізм
-анахронізм
-антропогенез
-антропологія
-антропоморфізм
-апатія
-археологія
-архетип
-аскетизм
-астрономія
-афект
-бачити
-бігти
-білий
-біллий
-біологія
-бувай
-будинок
-будь ласка
-бути
-важко
-велиикий
-великий
-веселка
-взяти
-вибачте
-відчувати
-вода
-волюнтаризм
-втаємниченість
-вчитися
-гарний
-гарячий
-гегемонія
-географія
-герменевтика
-герменевтика
-гештальт
-говорити
-гойдалка
-готувати
-грати
-дати
-дедукція
-деконструктивізм
-деконструкція
-демаркація
-детермінізм
-дзвіночок
-дивитися
-дисгарммонія
-дисгармонія
-дисфункція
-дисфункця
-дихотомія
-до побачення
-добрий
-доктрина
-думати
-дурний
-дурня
-дякую
-евфемізм
-езотерика
-ей
-екзистенціалізм
-екзистенціалізм
-екзистенцілізм
-екзистенція
-економіка
-емерджентність
-ентелехія
-епістемологія
-ефемерність
-ефемерність
-занепадництво
-звісно
-здоровий
-зелений
-йти
-ілюзорність
-ілюзорність
-імплікація
-інвектива
-індукція
-інтроспекціїя
-їсти
-історія
-каблучка
-кава
-казус
-калюжа
-катарсис
-каченя
-каштани
-квітка
-кішка
-класно
-книга
-когнітивістика
-комаха
-консенсус
-космогенез
-купувати
-легко
-лінгвістика
-літати
-маленький
-марнослів'я
-математика
-мати
-метаморфоза
-метелик
-метелиця
-містифікація
-місто
-могти
-можливо
-мусити
-насправді
-не радий
-незворушність
-ні
-нігілізм
-новий
-нонсенс
-ностальгія
-павучок
-парадокс
-пес
-писати
-пити
-піти
-плавати
-плакати
-повільний
-поганий
-політологія
-постмодернізм
-потворний
-працювати
-привіт
-прийти
-психоаналіз
-птах
-радий
-ремінісценція
-рефлексія
-робити
-розбурхання
-розумний
-сильний
-сингулярність
-синестезія
-синій
-синішй
-синкретизм
-сказати
-скатертина
-слабкий
-слухати
-сміятися
-сніг
-соліпсизм
-соломинка
-сонечко
-сонце
-соціологія
-спати
-співати
-справді
-старий
-структуралізм
-сумний
-так
-так
-танцювати
-телефонувати
-тож
-трансцендентність
-фантастично
-фаталізм
-фемінізм
-феномен
-феноменологія
-фізика
-філософія
-фрактал
-хворий
-хімія
-хліб
-хліб
-ходити
-холодний
-хотіти
-чао
-червонй
-червоний
-черевики
-читати
-чорнй
-чорний
-чути
-швидкий
-щасливий
-яблуко
diff --git a/Common/3dParty/hunspell/test/src/uz_Cyrl_UZ.txt b/Common/3dParty/hunspell/test/src/uz_Cyrl_UZ.txt
deleted file mode 100644
index b92bea172f..0000000000
--- a/Common/3dParty/hunspell/test/src/uz_Cyrl_UZ.txt
+++ /dev/null
@@ -1,262 +0,0 @@
-Mарт
-Ёз
-Ём
-Ёхуд
-Август
-Адвакат
-Адреси
-айтган-лирангиз
-айқин
-амалга
-анча
-Апрел
-арзонроқ
-аҳамият
-аҳднома
-бажарилади
-бажарилди
-баланд
-ихтисослан
-банкрот
-баҳона
-Баҳор
-бераман
-берасизми
-беринг
-бериш
-бешинчи
-биз
-Бизга
-Бизнинг
-билан
-Бирор
-Бозорнинг
-бор
-бошқа
-Бу
-Бугун
-будингиз
-бунга
-бундай
-Бухгалтерлик
-бўлади
-бўладими
-бўлиши
-бўлмаган
-бўлса
-бўш
-бўшайди
-бўшатасиз
-вазифасига
-вазият
-вариант
-вақт
-газетадаги
-газетадан
-даромад
-Декабрь
-Душанба
-Эрталаб
-Етказиб
-Жисмоний
-Жуда
-Жума
-зарур
-зиёфат
-Ижара
-ижарага
-икки
-Илтимос
-Индинга
-информатизациялари
-Иситгич
-иши
-ишлатсак
-Ишхона
-Июль
-Июнь
-Йўқ
-йил
-йилдан
-кам
-Шинамгина
-кампанияси
-келдим
-келишимдан
-келмоқчи
-келсам
-келтириш
-керак
-керакдир
-керакми
-кета-ди
-кеч
-Кеча
-кечага
-Кечаси
-Кечир
-Кечирдинг
-кирла
-кирадими
-кондиционер
-коррупциядир
-кран
-Куз
-Кун
-куни
-кўрмоқчи
-кўчиб
-лойиҳа
-Май
-маълумоти
-маълумотларни
-Маъмурият
-маъруза
-Мен
-музлатгич
-мумкин
-муфмкин
-мутахассис
-мушовир
-муҳим
-нарса
-нархи
-Нархини
-нақд
-ўшанақасини
-неча
-Номардлик
-Ноябри
-интернетдаги
-ойнаси
-ойнинг
-Октябри
-олдин
-олдиндан
-олмаймиз
-олмоқчи
-орқали
-шоти
-шорти
-Оқшом
-пайдо
-Панжшанба
-пулини
-Раҳмат
-резюме
-реклама
-Салом
-Сармоядор
-Сентябрь
-Сешанба
-Сиз
-сизга
-сизда
-Сизнинг
-синган
-сифатида
-совуқ
-софвуқ
-Солиқларни
-Статистик
-сўм
-тажрибали
-тайёргарлик
-тайёрладик
-тайёрладингизми
-таклиф
-талафот
-талафоти
-таъминловчилардан
-танишинг
-таржимон
-тарржимон
-тахминан
-ташкил
-Телефонни
-технология
-Безантирани
-тозалан
-тозалигига
-Тонгда
-топширишимиз
-топшириқ
-турли
-турмоқчи
-тутсак
-Тушлик
-ўладиганингиз
-тўлай
-тўлаймиз
-тилдиришинг
-тўлиқ
-уйингиз
-уйни
-уч
-учун
-ўқидим
-фақат
-Феврал
-хабар
-Хайрли кун
-Мотамхонаси
-хонлик
-Чек
-Чоршанба
-Шанба
-шарт-номани
-шартини
-шартлар
-шартлари
-шартни
-шартнома
-шахс
-шовқин
-Шом
-Шу
-эди
-Эртага
-Эртадан сўнг
-Эшитишимга
-эълон
-эълонингиз
-эълонингизни
-эътироф
-Юклаш
-Якшанба
-Январи
-Ярим кеча
-яхши
-қабул
-қаерда
-Қанақа
-қаноатманда
-қанча
-қачон
-қизиқарлидир
-қиламиз
-қилганим
-қилдим
-қилинг
-қилинди
-қилишди
-қиммат
-қиммати
-Қимматидан
-қирқ
-Қиш
-қувонарлими
-қўнғироқ
-Қўшимча
-ҳайвонини
-ҳам
-ҳамза
-Ҳар
-ҳафтага
-ҳақиқатан
-ҳисоблаб
-Ҳозир
-ҳужжатни
-Ўтган кун
-
-
diff --git a/Common/3dParty/hunspell/test/src/uz_Latn_UZ.txt b/Common/3dParty/hunspell/test/src/uz_Latn_UZ.txt
deleted file mode 100644
index ee6a1d9356..0000000000
--- a/Common/3dParty/hunspell/test/src/uz_Latn_UZ.txt
+++ /dev/null
@@ -1,200 +0,0 @@
-Salom
-Sallom
-Rahmat
-Rhmat
-Iltimos
-Iltimo
-Kattalar
-Kattalarvf
-Yaxshi
-Yashi
-Kelajak
-Keljajak
-Oilaviy
-Oilaaviy
-Qarindosh
-Qarinndosh
-Shahar
-Shaha
-Dengiz
-Dengizzz
-Quyosh
-Quyyosh
-Yulduz
-Oyim
-Kechqurun
-Tushun
-Suvchi
-Sharob
-Choyxona
-Nonushta
-Tushlik
-Muzqaymoq
-Desert
-Tuzluq
-Mevalar
-Sabzavot
-Baliq
-Tuxumli
-Sabza
-Sariq
-Salatlar
-Shirinlik
-Shokolad
-Rishta
-Kakao
-Pishloq
-Tort
-Qaymoq
-Sutli
-Qatiq
-Salomatlik
-Temir
-Zahar
-Oqimli
-Shamol
-Olov
-Yer
-Osmon
-Shanba
-Dushanba
-Seshanba
-Chorshanba
-Payshanba
-Juma
-Yakshanba
-Oltin
-Tong
-Bomdod
-Asr
-Shom
-Kun
-Oqsoqol
-Shoshqaloq
-Kulgili
-Muxlislilar
-Tavsiflash
-Tuzilishga
-Mustaqillik
-Tushuntirish
-Boshqarish
-Mashhurlik
-Tarkibiy
-Tahlil
-Ishchi
-Xalqaro
-Tarjima
-Mustahkamlik
-Chaqaloq
-Istiqbol
-Tasvir
-Taklif
-Tasavvur
-Jiddiy
-Majburiyat
-Asosiy
-Tahdid
-Tushunmovchilik
-Ishonch
-Maqomi
-Ijodkor
-Tadbirkor
-Hayotiy
-Mashhur
-Bemorlik
-Tadbir
-Jismoniy
-Madaniyat
-Xavfsizlik
-Sifatli
-Suvli
-Sotuvchi
-Chetel
-Tashqi
-Sotuv
-Tarbiyalanish
-Murabbo
-Sariqcha
-Qovun
-Shaharlik
-Muhimlik
-Tarbiyachilik
-Xatolik
-Balandlik
-Yuzaki
-Kuyov
-Qiziquvchan
-Orzular
-Mashq
-Qalampir
-Muammo
-Sadoqatli
-Yovuzlik
-Fikr-mulohaza
-Boylik
-Tushuncha
-Zanjir
-Eslatma
-Tabassum
-Ishonuvchi
-Chidamlilik
-Ilova
-Birodarlik
-Oqilona
-Ijodiyot
-Tayanch
-Hurmat
-Baxtli
-Tajriba
-Samimiylik
-Shifokor
-Ishrat
-Baho
-Namoyish
-Qiyinchilik
-Bolalar
-Ishonchli
-Taqdir
-Shovqinli
-Xalqaro
-Baxt
-Fursat
-Hurmatli
-Qulaylik
-Zamonaviy
-Sadoqat
-Sabr
-Nikoh
-Jasorat
-Barkamollik
-Dunyoqarash
-Omadli
-Foydali
-Yorqin
-Mehribonlik
-Fazilatli
-Kutubxona
-Istiqomatli
-Fido
-Bahor
-Shafqatsizlik
-Tafakkur
-Fazilat
-Qochish
-Laziz
-Uzoq
-Ilhom
-Omad
-Hurmatli
-Tandir
-Sherzod
-Bahoriy
-Dilshod
-Baxtli
-Shonli
-Nurli
-Shafqatsizlik
-Oqqush
-Boylik
-Toza
-Sabrli
diff --git a/Common/3dParty/hunspell/test/src/vi_VN.txt b/Common/3dParty/hunspell/test/src/vi_VN.txt
deleted file mode 100644
index 2982e9eb45..0000000000
--- a/Common/3dParty/hunspell/test/src/vi_VN.txt
+++ /dev/null
@@ -1,128 +0,0 @@
-Bánh
-Bang
-bênh
-bướng
-bậy
-Chanh
-chum
-chuyện
-chép
-Chùng
-chắp
-chệnh
-chới
-chữ
-công
-cạc
-cột
-cứu
-Doanh
-duyên
-dùng
-dể
-dọng
-gia
-giày
-giêng
-Giảng
-giềng
-hon
-Hoẳn
-Hài
-hôm
-hước
-hấu
-hớt
-hữu
-Khiển
-Khoào
-khuya
-khuyến
-khách
-khén
-khẩn
-khắp
-khựng
-kẻo
-lang
-liền
-Loàng
-Luỗng
-lình
-lương
-lấp
-lệnh
-lịnh
-lốn
-lời
-lựng
-Muộn
-Mãnh
-mại
-mạn
-mổ
-mởn
-nghiễm
-nghều
-Ngoáy
-Nguyên
-ngóp
-người
-ngỏ
-ngớp
-ngụa
-ngửng
-nhiếp
-nhu
-nhà
-nhân
-Nhóm
-nhưỡng
-nhắm
-nhổn
-nhứt
-ninh
-noi
-nãy
-nạn
-nốt
-ong
-pao
-phiên
-phiêu
-Phên
-Phương tiện
-phẩm chất
-phố đi bộ
-quan trọng
-quyền lợi
-quán cà phê
-quảng cáo
-Quốc
-Quốc tế
-riêng biệt
-rưỡi
-Rải
-Rẻng
-rộng rãi
-siễn
-sum
-Sõng
-Sưu
-sưu tập
-sử dụng
-Thiệt thòi
-Thuộc về
-thuộc tính
-
-Слова с ошибками
-thiệte
-quốq tế
-nguên
-khoao
-chenh
-chhùng
-man
-doah
-khien
-ngoay
\ No newline at end of file
diff --git a/Common/OfficeFileFormatChecker2.cpp b/Common/OfficeFileFormatChecker2.cpp
index 8fce91db66..ec8a16a627 100644
--- a/Common/OfficeFileFormatChecker2.cpp
+++ b/Common/OfficeFileFormatChecker2.cpp
@@ -238,11 +238,24 @@ bool COfficeFileFormatChecker::isPdfFormatFile(unsigned char *pBuffer, int dwByt
if (NULL == pFirst)
{
- //skip special
- _UINT16 sz = pBuffer[0] + (pBuffer[1] << 8);
- if (sz < dwBytes - 8)
+ char* pData = (char*)pBuffer;
+ for (int i = 0; i < dwBytes - 5; ++i)
{
- pFirst = strstr((char*)(pBuffer + sz), "%PDF-");
+ int nPDF = strncmp(&pData[i], "%PDF-", 5);
+ if (!nPDF)
+ {
+ pFirst = (char*)pBuffer + i;
+ break;
+ }
+ }
+ if (NULL == pFirst)
+ {
+ //skip special
+ _UINT16 sz = pBuffer[0] + (pBuffer[1] << 8);
+ if (sz < dwBytes - 8)
+ {
+ pFirst = strstr((char*)(pBuffer + sz), "%PDF-");
+ }
}
}
if (NULL != pFirst)
diff --git a/DesktopEditor/allthemesgen/allthemesgen.pro b/DesktopEditor/allthemesgen/allthemesgen.pro
index 7746933ab2..8455c0259c 100644
--- a/DesktopEditor/allthemesgen/allthemesgen.pro
+++ b/DesktopEditor/allthemesgen/allthemesgen.pro
@@ -15,7 +15,7 @@ TARGET = allthemesgen
DEFINES += KERNEL_USE_DYNAMIC_LIBRARY
DEFINES += GRAPHICS_USE_DYNAMIC_LIBRARY
-ADD_DEPENDENCY(graphics, kernel, kernel_network, UnicodeConverter, doctrenderer)
+ADD_DEPENDENCY(graphics, kernel, kernel_network, UnicodeConverter, doctrenderer, PdfFile, XpsFile, DjVuFile, DocxRenderer)
core_windows {
DEFINES -= UNICODE
diff --git a/DesktopEditor/doctrenderer/app_builder/docbuilder.pro b/DesktopEditor/doctrenderer/app_builder/docbuilder.pro
index e414a3f70d..ceb33c54a5 100644
--- a/DesktopEditor/doctrenderer/app_builder/docbuilder.pro
+++ b/DesktopEditor/doctrenderer/app_builder/docbuilder.pro
@@ -25,7 +25,7 @@ core_windows {
DESTDIR = $$CORE_BUILDS_BINARY_PATH
################################################
-ADD_DEPENDENCY(graphics, kernel, kernel_network, UnicodeConverter, doctrenderer)
+ADD_DEPENDENCY(graphics, kernel, kernel_network, UnicodeConverter, doctrenderer, PdfFile, XpsFile, DjVuFile, DocxRenderer)
core_linux {
LIBS += -ldl
diff --git a/DesktopEditor/doctrenderer/docbuilder.cpp b/DesktopEditor/doctrenderer/docbuilder.cpp
index b0e4dd7bb6..bfb37ac573 100644
--- a/DesktopEditor/doctrenderer/docbuilder.cpp
+++ b/DesktopEditor/doctrenderer/docbuilder.cpp
@@ -68,8 +68,8 @@ namespace NSDoctRenderer
return m_pInternal->ExecuteCommand(command, retValue);
}
- CDocBuilderContext CDocBuilder::GetContext()
+ CDocBuilderContext CDocBuilder::GetContext(bool enterContext)
{
- return m_pInternal->GetContext();
+ return m_pInternal->GetContext(enterContext);
}
}
diff --git a/DesktopEditor/doctrenderer/docbuilder.h b/DesktopEditor/doctrenderer/docbuilder.h
index 0f56481040..1177046c84 100644
--- a/DesktopEditor/doctrenderer/docbuilder.h
+++ b/DesktopEditor/doctrenderer/docbuilder.h
@@ -204,6 +204,11 @@ namespace NSDoctRenderer
* Creates an array. This method returns the current context and calls its CreateArray method.
*/
static CDocBuilderValue CreateArray(const int& length);
+ /**
+ * Please use CDocBuilderContext::CreateObject
+ * Creates an object. This method returns the current context and calls its CreateObject method.
+ */
+ static CDocBuilderValue CreateObject();
public:
/**
@@ -492,9 +497,10 @@ namespace NSDoctRenderer
/**
* Returns the current JS context.
+ * @param enterContext Whether returned context should be entered or not.
* @return The current JS context
*/
- CDocBuilderContext GetContext();
+ CDocBuilderContext GetContext(bool enterContext = true);
public:
/**
diff --git a/DesktopEditor/doctrenderer/docbuilder.java/make.py b/DesktopEditor/doctrenderer/docbuilder.java/make.py
index 0fdd820f06..9578394f17 100644
--- a/DesktopEditor/doctrenderer/docbuilder.java/make.py
+++ b/DesktopEditor/doctrenderer/docbuilder.java/make.py
@@ -88,16 +88,20 @@ if __name__ == "__main__":
print('Error: javac version is not supported')
exit()
+ # BUILD
release_flags = []
if jdk_version > 8:
release_flags = ['--release', '8']
- # BUILD
+ gen_headers_flags = []
+ if args.headers:
+ headers_dir = file_dir + '/src/jni'
+ gen_headers_flags = ['-h', headers_dir]
+
classes_dir = file_dir + '/build/classes'
makedirs(classes_dir + '/docbuilder/utils')
- headers_dir = file_dir + '/src/jni'
# build all Java classes
- subprocess.call([javac, '-d', classes_dir] + release_flags + java_files, cwd=os.getcwd(), stderr=subprocess.STDOUT)
+ subprocess.call([javac, '-d', classes_dir] + release_flags + gen_headers_flags + java_files, cwd=os.getcwd(), stderr=subprocess.STDOUT)
# PACKING TO JAR
if not args.no_jar:
diff --git a/DesktopEditor/doctrenderer/docbuilder.java/src/java/docbuilder/CDocBuilderValue.java b/DesktopEditor/doctrenderer/docbuilder.java/src/java/docbuilder/CDocBuilderValue.java
index ba17a2ef53..a1c49361ba 100644
--- a/DesktopEditor/doctrenderer/docbuilder.java/src/java/docbuilder/CDocBuilderValue.java
+++ b/DesktopEditor/doctrenderer/docbuilder.java/src/java/docbuilder/CDocBuilderValue.java
@@ -38,6 +38,11 @@ public class CDocBuilderValue {
return c_IsUndefined(c_internal);
}
+ public boolean isBool()
+ {
+ return c_IsBool(c_internal);
+ }
+
public boolean isInt()
{
return c_IsInt(c_internal);
@@ -239,6 +244,7 @@ public class CDocBuilderValue {
private static native boolean c_IsNull(long self);
private static native boolean c_IsUndefined(long self);
+ private static native boolean c_IsBool(long self);
private static native boolean c_IsInt(long self);
private static native boolean c_IsDouble(long self);
private static native boolean c_IsString(long self);
diff --git a/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.cpp b/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.cpp
index cfb3099ea9..d5bb3c18c4 100644
--- a/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.cpp
+++ b/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.cpp
@@ -49,6 +49,12 @@ jboolean Java_docbuilder_CDocBuilderValue_c_1IsUndefined(JNIEnv* env, jclass cls
return (jboolean)pSelf->IsUndefined();
}
+jboolean Java_docbuilder_CDocBuilderValue_c_1IsBool(JNIEnv* env, jclass cls, jlong self)
+{
+ CDocBuilderValue* pSelf = reinterpret_cast(self);
+ return (jboolean)pSelf->IsBool();
+}
+
jboolean Java_docbuilder_CDocBuilderValue_c_1IsInt(JNIEnv* env, jclass cls, jlong self)
{
CDocBuilderValue* pSelf = reinterpret_cast(self);
diff --git a/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.h b/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.h
index 2e0c8e4eb0..32d0018345 100644
--- a/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.h
+++ b/DesktopEditor/doctrenderer/docbuilder.java/src/jni/docbuilder_CDocBuilderValue.h
@@ -63,6 +63,14 @@ JNIEXPORT jboolean JNICALL Java_docbuilder_CDocBuilderValue_c_1IsNull
JNIEXPORT jboolean JNICALL Java_docbuilder_CDocBuilderValue_c_1IsUndefined
(JNIEnv *, jclass, jlong);
+/*
+ * Class: docbuilder_CDocBuilderValue
+ * Method: c_IsBool
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_docbuilder_CDocBuilderValue_c_1IsBool
+ (JNIEnv *, jclass, jlong);
+
/*
* Class: docbuilder_CDocBuilderValue
* Method: c_IsInt
diff --git a/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp b/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp
index f5022fbde7..e8e0fcacd5 100644
--- a/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp
+++ b/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp
@@ -137,6 +137,10 @@ namespace docbuilder_net
bool CDocBuilderValue::IsUndefined()
{
return m_internal->IsUndefined();
+ }
+ bool CDocBuilderValue::IsBool()
+ {
+ return m_internal->IsBool();
}
bool CDocBuilderValue::IsInt()
{
diff --git a/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.h b/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.h
index f3d2370f74..226c4c84d7 100644
--- a/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.h
+++ b/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.h
@@ -72,6 +72,9 @@ namespace docbuilder_net
/// True if this object is undefined.
bool IsUndefined();
+ /// True if this object is a boolean value.
+ bool IsBool();
+
/// True if this object is an integer.
bool IsInt();
diff --git a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py
index 978b306176..c444b92d4a 100644
--- a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py
+++ b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder.py
@@ -49,6 +49,9 @@ def _loadLibrary(path):
_lib.CDocBuilderValue_IsUndefined.argtypes = [OBJECT_HANDLE]
_lib.CDocBuilderValue_IsUndefined.restype = ctypes.c_bool
+ _lib.CDocBuilderValue_IsBool.argtypes = [OBJECT_HANDLE]
+ _lib.CDocBuilderValue_IsBool.restype = ctypes.c_bool
+
_lib.CDocBuilderValue_IsInt.argtypes = [OBJECT_HANDLE]
_lib.CDocBuilderValue_IsInt.restype = ctypes.c_bool
@@ -118,6 +121,9 @@ def _loadLibrary(path):
_lib.CDocBuilderValue_CreateArray.argtypes = [ctypes.c_int]
_lib.CDocBuilderValue_CreateArray.restype = OBJECT_HANDLE
+ _lib.CDocBuilderValue_CreateObject.argtypes = []
+ _lib.CDocBuilderValue_CreateObject.restype = OBJECT_HANDLE
+
_lib.CDocBuilderValue_Call0.argtypes = [OBJECT_HANDLE, ctypes.c_wchar_p]
_lib.CDocBuilderValue_Call0.restype = OBJECT_HANDLE
@@ -277,6 +283,12 @@ class CDocBuilderValue:
self._internal = _lib.CDocBuilderValue_CreateArray(length)
for i in range(length):
self.Set(i, value[i])
+ elif isinstance(value, dict):
+ self._internal = _lib.CDocBuilderValue_CreateObject()
+ for key in value.keys():
+ if not isinstance(key, str):
+ raise TypeError("CDocBuilderValue constructor supports only str keys in dict")
+ self.SetProperty(key, value[key])
elif isinstance(value, CDocBuilderValue):
self._internal = _lib.CDocBuilderValue_Copy(value._internal)
elif isinstance(value, OBJECT_HANDLE):
@@ -301,6 +313,9 @@ class CDocBuilderValue:
def IsUndefined(self):
return _lib.CDocBuilderValue_IsUndefined(self._internal)
+ def IsBool(self):
+ return _lib.CDocBuilderValue_IsBool(self._internal)
+
def IsInt(self):
return _lib.CDocBuilderValue_IsInt(self._internal)
@@ -379,6 +394,10 @@ class CDocBuilderValue:
def CreateArray(length):
return CDocBuilderValue(OBJECT_HANDLE(_lib.CDocBuilderValue_CreateArray(length)))
+ @staticmethod
+ def CreateObject():
+ return CDocBuilderValue(OBJECT_HANDLE(_lib.CDocBuilderValue_CreateObject()))
+
def Call(self, name, *args):
if len(args) == 0:
return CDocBuilderValue(OBJECT_HANDLE(_lib.CDocBuilderValue_Call0(self._internal, ctypes.c_wchar_p(name))))
diff --git a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.cpp b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.cpp
index 6df39de00e..c762f4c1b0 100644
--- a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.cpp
+++ b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.cpp
@@ -39,6 +39,11 @@ bool CDocBuilderValue_IsUndefined(CDocBuilderValue* self)
return self->IsUndefined();
}
+bool CDocBuilderValue_IsBool(CDocBuilderValue* self)
+{
+ return self->IsBool();
+}
+
bool CDocBuilderValue_IsInt(CDocBuilderValue* self)
{
return self->IsInt();
@@ -159,6 +164,11 @@ CDocBuilderValue* CDocBuilderValue_CreateArray(int length)
return new CDocBuilderValue(CDocBuilderValue::CreateArray(length));
}
+CDocBuilderValue* CDocBuilderValue_CreateObject()
+{
+ return new CDocBuilderValue(CDocBuilderValue::CreateObject());
+}
+
CDocBuilderValue* CDocBuilderValue_Call0(CDocBuilderValue* self, const wchar_t* name)
{
return new CDocBuilderValue(self->Call(name));
diff --git a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.h b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.h
index 64b94140b3..a82c52059e 100644
--- a/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.h
+++ b/DesktopEditor/doctrenderer/docbuilder.python/src/docbuilder_functions.h
@@ -24,6 +24,7 @@ DOCBUILDER_FUNC_DECL void CDocBuilderValue_Clear(CDocBuilderValue* self);
DOCBUILDER_FUNC_DECL bool CDocBuilderValue_IsNull(CDocBuilderValue* self);
DOCBUILDER_FUNC_DECL bool CDocBuilderValue_IsUndefined(CDocBuilderValue* self);
+DOCBUILDER_FUNC_DECL bool CDocBuilderValue_IsBool(CDocBuilderValue* self);
DOCBUILDER_FUNC_DECL bool CDocBuilderValue_IsInt(CDocBuilderValue* self);
DOCBUILDER_FUNC_DECL bool CDocBuilderValue_IsDouble(CDocBuilderValue* self);
DOCBUILDER_FUNC_DECL bool CDocBuilderValue_IsString(CDocBuilderValue* self);
@@ -55,6 +56,7 @@ DOCBUILDER_FUNC_DECL CDocBuilderValue* CDocBuilderValue_CreateWithString(const w
DOCBUILDER_FUNC_DECL CDocBuilderValue* CDocBuilderValue_CreateUndefined();
DOCBUILDER_FUNC_DECL CDocBuilderValue* CDocBuilderValue_CreateNull();
DOCBUILDER_FUNC_DECL CDocBuilderValue* CDocBuilderValue_CreateArray(int length);
+DOCBUILDER_FUNC_DECL CDocBuilderValue* CDocBuilderValue_CreateObject();
DOCBUILDER_FUNC_DECL CDocBuilderValue* CDocBuilderValue_Call0(CDocBuilderValue* self, const wchar_t* name);
DOCBUILDER_FUNC_DECL CDocBuilderValue* CDocBuilderValue_Call1(CDocBuilderValue* self, const wchar_t* name, CDocBuilderValue* p1);
diff --git a/DesktopEditor/doctrenderer/docbuilder_p.cpp b/DesktopEditor/doctrenderer/docbuilder_p.cpp
index f740456b2f..68add68351 100644
--- a/DesktopEditor/doctrenderer/docbuilder_p.cpp
+++ b/DesktopEditor/doctrenderer/docbuilder_p.cpp
@@ -253,8 +253,7 @@ bool CV8RealTimeWorker::OpenFile(const std::wstring& sBasePath, const std::wstri
LOGGER_SPEED_LAP("compile");
- if (!m_context->isSnapshotUsed())
- NSDoctRenderer::RunEditor(editorType, m_context, try_catch, config);
+ NSDoctRenderer::RunEditor(editorType, m_context, try_catch, config);
if(try_catch->Check())
return false;
@@ -669,10 +668,17 @@ namespace NSDoctRenderer
}
if (IsEmpty() || !m_internal->m_value->isString())
+ {
+ ret.m_internal->MakeEmpty();
return ret;
+ }
std::wstring sValue = m_internal->m_value->toStringW();
if (sValue.empty())
+ {
+ // return valid empty string
+ ret.m_internal->MakeEmpty();
return ret;
+ }
size_t len = sValue.length();
wchar_t* buffer = new wchar_t[len + 1];
memcpy(buffer, sValue.c_str(), len * sizeof(wchar_t));
@@ -815,6 +821,14 @@ namespace NSDoctRenderer
return ret;
}
+ CDocBuilderValue CDocBuilderValue::CreateObject()
+ {
+ CDocBuilderValue ret;
+ ret.m_internal->m_context = NSJSBase::CJSContext::GetCurrent();
+ ret.m_internal->m_value = NSJSBase::CJSContext::createObject();
+ return ret;
+ }
+
// Functions
CDocBuilderValue CDocBuilderValue::Call(const char* name)
{
diff --git a/DesktopEditor/doctrenderer/docbuilder_p.h b/DesktopEditor/doctrenderer/docbuilder_p.h
index a6443ff25c..e82fd1ffdc 100644
--- a/DesktopEditor/doctrenderer/docbuilder_p.h
+++ b/DesktopEditor/doctrenderer/docbuilder_p.h
@@ -130,12 +130,12 @@ namespace NSDoctRenderer
}
~CString_Private()
{
- if (m_data)
- delete [] m_data;
+ delete[] m_data;
}
void Attach(wchar_t* data)
{
+ delete[] m_data;
m_data = data;
}
@@ -143,7 +143,7 @@ namespace NSDoctRenderer
{
if (copy->m_data)
{
- delete [] copy->m_data;
+ delete[] copy->m_data;
copy->m_data = NULL;
}
@@ -154,6 +154,13 @@ namespace NSDoctRenderer
copy->m_data = new wchar_t[len + 1];
memcpy(copy->m_data, m_data, (len + 1) * sizeof(wchar_t));
}
+
+ void MakeEmpty()
+ {
+ delete[] m_data;
+ m_data = new wchar_t[1];
+ m_data[0] = '\0';
+ }
};
}
@@ -400,6 +407,11 @@ public:
{
m_scopes.push_back(scope);
}
+
+ void AddNewScope(NSDoctRenderer::CDocBuilderContextScopeWrap* scope)
+ {
+ m_scopes.emplace_back(scope);
+ }
};
class CV8RealTimeWorker
@@ -1277,7 +1289,7 @@ namespace NSDoctRenderer
return m_pWorker->ExecuteCommand(command, retValue);
}
- CDocBuilderContext GetContext()
+ CDocBuilderContext GetContext(bool enterContext)
{
CDocBuilderContext ctx;
@@ -1285,6 +1297,14 @@ namespace NSDoctRenderer
ctx.m_internal->m_context = m_pWorker->m_context;
ctx.m_internal->m_context_data = &m_pWorker->m_oContextData;
+
+ if (enterContext)
+ {
+ CDocBuilderContextScopeWrap* scopeWrap = new CDocBuilderContextScopeWrap();
+ scopeWrap->m_scope = new CJSContextScope(m_pWorker->m_context);
+ m_pWorker->m_oContextData.AddNewScope(scopeWrap);
+ }
+
return ctx;
}
diff --git a/DesktopEditor/doctrenderer/doctrenderer.cpp b/DesktopEditor/doctrenderer/doctrenderer.cpp
index d23142ac23..68e8df2c13 100644
--- a/DesktopEditor/doctrenderer/doctrenderer.cpp
+++ b/DesktopEditor/doctrenderer/doctrenderer.cpp
@@ -39,6 +39,7 @@
#include "embed/Default.h"
#include "embed/NativeControlEmbed.h"
#include "embed/GraphicsEmbed.h"
+#include "embed/DrawingFileEmbed.h"
#include "./editors.h"
#include
@@ -232,10 +233,13 @@ namespace NSDoctRenderer
std::vector m_arImagesInChanges;
+ IOfficeDrawingFile* m_pDrawingFile;
+
public:
CDoctRenderer_Private(const std::wstring& sAllFontsPath = L"") : CDoctRendererConfig()
{
LoadConfig(NSFile::GetProcessDirectory(), sAllFontsPath);
+ m_pDrawingFile = NULL;
}
~CDoctRenderer_Private()
{
@@ -274,9 +278,9 @@ namespace NSDoctRenderer
std::cerr << sT << ": " << sE << std::endl;
}
- static bool Doct_renderer_SaveFile(
- CExecuteParams* pParams, NSNativeControl::CNativeControl* pNative, JSSmart context, JSSmart* args, std::wstring& strError, JSSmart& api_js_maybe_null,
- bool bIsPdfBase64 = false)
+ static bool Doct_renderer_SaveFile(CExecuteParams* pParams,
+ NSNativeControl::CNativeControl* pNative, JSSmart context,
+ JSSmart* args, std::wstring& strError, JSSmart& api_js_maybe_null)
{
JSSmart try_catch = context->GetExceptions();
JSSmart global_js = context->GetGlobal();
@@ -446,23 +450,12 @@ namespace NSDoctRenderer
JSSmart typedArray = js_result2->toTypedArray();
NSJSBase::CJSDataBuffer oBuffer = typedArray->getData();
+ DWORD bufferSize = (pNative->m_nSaveBinaryLen == 0) ? (DWORD)oBuffer.Len : (DWORD)pNative->m_nSaveBinaryLen;
+
NSFile::CFileBinary oFile;
if (true == oFile.CreateFileW(pParams->m_strDstFilePath))
{
- if (!bIsPdfBase64)
- {
- oFile.WriteFile(oBuffer.Data, (DWORD)pNative->m_nSaveBinaryLen);
- }
- else
- {
- char* pDataDst = NULL;
- int nDataDst = 0;
- if (NSFile::CBase64Converter::Encode(oBuffer.Data, pNative->m_nSaveBinaryLen, pDataDst, nDataDst))
- {
- oFile.WriteFile((BYTE*)pDataDst, (DWORD)nDataDst);
- RELEASEARRAYOBJECTS(pDataDst);
- }
- }
+ oFile.WriteFile(oBuffer.Data, bufferSize);
oFile.CloseFile();
}
@@ -599,8 +592,10 @@ namespace NSDoctRenderer
LOGGER_SPEED_LAP("compile");
- if (!context->isSnapshotUsed())
- NSDoctRenderer::RunEditor(editorType, context, try_catch, this);
+ NSDoctRenderer::RunEditor(editorType, context, try_catch, this);
+
+ if (editorType == DoctRendererEditorType::PDF && m_pDrawingFile)
+ EmbedDrawingFile(context, m_pDrawingFile);
if (try_catch->Check())
{
@@ -663,10 +658,15 @@ namespace NSDoctRenderer
if (!bIsWatermark)
{
CChangesWorker oWorkerLoader;
- int nVersion = oWorkerLoader.OpenNative(pNative->GetFilePath());
+ int nVersion = 0;
+
+ if (editorType == DoctRendererEditorType::PDF)
+ nVersion = -1;
+ else
+ nVersion = oWorkerLoader.OpenNative(pNative->GetFilePath());
JSSmart args_open[4];
- args_open[0] = oWorkerLoader.GetDataFull()->toValue();
+ args_open[0] = (nVersion != -1) ? oWorkerLoader.GetDataFull()->toValue() : CJSContext::createUndefined();
args_open[1] = CJSContext::createInt(nVersion);
std::wstring sXlsx = NSFile::GetDirectoryName(pNative->GetFilePath()) + L"/Editor.xlsx";
args_open[2] = NSFile::CFileBinary::Exists(sXlsx) ? CJSContext::createString(sXlsx) : CJSContext::createUndefined();
@@ -1087,7 +1087,7 @@ namespace NSDoctRenderer
void CDoctrenderer::CreateSnapshots()
{
-#ifdef V8_VERSION_89_PLUS
+#ifdef V8_SUPPORT_SNAPSHOTS
std::vector editors;
editors.push_back(NSDoctRenderer::DoctRendererEditorType::WORD);
editors.push_back(NSDoctRenderer::DoctRendererEditorType::SLIDE);
@@ -1104,6 +1104,18 @@ namespace NSDoctRenderer
}
#endif
}
+
+ void CDoctrenderer::SetAdditionalParam(const AdditionalParamType& type, void* data)
+ {
+ switch (type)
+ {
+ case AdditionalParamType::DRAWINGFILE:
+ m_pInternal->m_pDrawingFile = (IOfficeDrawingFile*)data;
+ break;
+ default:
+ break;
+ }
+ }
} // namespace NSDoctRenderer
bool Doct_renderer_SaveFile_ForBuilder(
@@ -1115,5 +1127,5 @@ bool Doct_renderer_SaveFile_ForBuilder(
oParams.m_sJsonParams = jsonParams;
JSSmart js_objectApi; // empty
- return NSDoctRenderer::CDoctRenderer_Private::Doct_renderer_SaveFile(&oParams, pNative, context, args, strError, js_objectApi, false);
+ return NSDoctRenderer::CDoctRenderer_Private::Doct_renderer_SaveFile(&oParams, pNative, context, args, strError, js_objectApi);
}
diff --git a/DesktopEditor/doctrenderer/doctrenderer.h b/DesktopEditor/doctrenderer/doctrenderer.h
index 57dc581c14..b3aa76d8d7 100644
--- a/DesktopEditor/doctrenderer/doctrenderer.h
+++ b/DesktopEditor/doctrenderer/doctrenderer.h
@@ -55,6 +55,12 @@ namespace NSDoctRenderer
INVALID = 255
};
}
+
+ enum class AdditionalParamType
+ {
+ DRAWINGFILE = 0,
+ INVALID = 255
+ };
}
namespace NSDoctRenderer
@@ -73,6 +79,8 @@ namespace NSDoctRenderer
void CreateCache(const std::wstring& sAllFontsPath, const std::wstring& sCacheDir);
void CreateSnapshots();
+ void SetAdditionalParam(const AdditionalParamType& type, void* data);
+
private:
CDoctRenderer_Private* m_pInternal;
};
diff --git a/DesktopEditor/doctrenderer/doctrenderer.pro b/DesktopEditor/doctrenderer/doctrenderer.pro
index 387f0a787e..a5789be704 100644
--- a/DesktopEditor/doctrenderer/doctrenderer.pro
+++ b/DesktopEditor/doctrenderer/doctrenderer.pro
@@ -16,11 +16,6 @@ DEFINES += DOCTRENDERER_USE_DYNAMIC_LIBRARY_BUILDING
DEFINES += JSBASE_USE_DYNAMIC_LIBRARY_BUILDING
ADD_DEPENDENCY(graphics, kernel, UnicodeConverter, kernel_network)
-# drawingfile support
-DEFINES += WASM_SERIALIZER_USE_ALLOCATOR
-ADD_DEPENDENCY(PdfFile, XpsFile, DjVuFile, DocxRenderer)
-SOURCES += ../../HtmlRenderer/src/HTMLRendererText.cpp
-
#CONFIG += build_xp
#CONFIG += v8_version_60
core_android:DEFINES += DISABLE_MEMORY_LIMITATION
@@ -32,6 +27,7 @@ HEADERS += \
docbuilder.h
SOURCES += \
+ editors.cpp \
nativecontrol.cpp \
doctrenderer.cpp \
docbuilder.cpp \
@@ -49,8 +45,7 @@ HEADERS += \
nativecontrol.h \
graphics.h \
hash.h \
- server.h \
- drawingfile.h
+ server.h
HEADERS += \
embed/PointerEmbed.h \
@@ -63,7 +58,6 @@ HEADERS += \
embed/TextMeasurerEmbed.h \
embed/HashEmbed.h \
embed/Default.h \
- embed/DrawingFileEmbed.h \
js_internal/js_base.h
SOURCES += \
@@ -76,8 +70,7 @@ SOURCES += \
embed/NativeBuilderDocumentEmbed.cpp \
embed/TextMeasurerEmbed.cpp \
embed/HashEmbed.cpp \
- embed/Default.cpp \
- embed/DrawingFileEmbed.cpp
+ embed/Default.cpp
# Serialize objects to JS
HEADERS += \
@@ -110,7 +103,6 @@ ADD_FILES_FOR_EMBEDDED_CLASS_HEADER(embed/NativeControlEmbed.h)
ADD_FILES_FOR_EMBEDDED_CLASS_HEADER(embed/PointerEmbed.h)
ADD_FILES_FOR_EMBEDDED_CLASS_HEADER(embed/TextMeasurerEmbed.h)
ADD_FILES_FOR_EMBEDDED_CLASS_HEADER(embed/ZipEmbed.h)
-ADD_FILES_FOR_EMBEDDED_CLASS_HEADER(embed/DrawingFileEmbed.h)
include(../graphics/pro/textshaper.pri)
include(../../Common/3dParty/openssl/openssl.pri)
@@ -118,3 +110,19 @@ include(../../Common/3dParty/openssl/openssl.pri)
# downloader
DEFINES += BUIDLER_OPEN_DOWNLOAD_ENABLED
DEFINES += BUIDLER_OPEN_BASE64_ENABLED
+
+CONFIG += drawingfile_support
+drawingfile_support {
+ DEFINES += WASM_SERIALIZER_USE_ALLOCATOR
+ ADD_DEPENDENCY(PdfFile, XpsFile, DjVuFile, DocxRenderer)
+
+ HEADERS += \
+ drawingfile.h \
+ embed/DrawingFileEmbed.h
+
+ SOURCES += \
+ ../../HtmlRenderer/src/HTMLRendererText.cpp \
+ embed/DrawingFileEmbed.cpp
+
+ ADD_FILES_FOR_EMBEDDED_CLASS_HEADER(embed/DrawingFileEmbed.h)
+}
diff --git a/DesktopEditor/doctrenderer/drawingfile.h b/DesktopEditor/doctrenderer/drawingfile.h
index 1a74d8f371..d065058580 100644
--- a/DesktopEditor/doctrenderer/drawingfile.h
+++ b/DesktopEditor/doctrenderer/drawingfile.h
@@ -53,6 +53,8 @@ private:
IOfficeDrawingFile* m_pFile;
int m_nType = -1;
+ bool m_bIsExternalFile;
+
public:
CDrawingFile(NSFonts::IApplicationFonts* pFonts)
{
@@ -69,16 +71,41 @@ public:
m_pImageStorage = NULL;
m_pFile = NULL;
+ m_bIsExternalFile = false;
}
~CDrawingFile()
{
- RELEASEOBJECT(m_pFile);
+ if (!m_bIsExternalFile)
+ RELEASEOBJECT(m_pFile);
RELEASEOBJECT(m_pTextRenderer);
RELEASEOBJECT(m_pFontManager);
RELEASEINTERFACE(m_pApplicationFonts);
RELEASEOBJECT(m_pImageStorage);
}
+ void SetInternalFile(IOfficeDrawingFile* pFile)
+ {
+ m_pFile = pFile;
+ if (!m_pFile)
+ return;
+
+ m_bIsExternalFile = true;
+ switch (m_pFile->GetType())
+ {
+ case odftPDF:
+ m_nType = 0;
+ break;
+ case odftDJVU:
+ m_nType = 1;
+ break;
+ case odftXPS:
+ m_nType = 2;
+ break;
+ default:
+ break;
+ }
+ }
+
public:
static void InitFontsGlobalStorage()
{
@@ -100,7 +127,12 @@ public:
m_pFile = new CPdfFile(m_pApplicationFonts);
if (!m_pFile->LoadFromFile(sFile, L"", sPassword, sPassword))
{
- RELEASEOBJECT(m_pFile);
+ if (4 != ((CPdfFile*)m_pFile)->GetError())
+ {
+ RELEASEOBJECT(m_pFile);
+ }
+ else
+ m_nType = 0;
}
else
m_nType = 0;
@@ -140,7 +172,12 @@ public:
m_pFile = new CPdfFile(m_pApplicationFonts);
if (!m_pFile->LoadFromMemory(data, size, L"", sPassword, sPassword))
{
- RELEASEOBJECT(m_pFile);
+ if (4 != ((CPdfFile*)m_pFile)->GetError())
+ {
+ RELEASEOBJECT(m_pFile);
+ }
+ else
+ m_nType = 0;
}
else
m_nType = 0;
@@ -457,6 +494,14 @@ public:
return NULL;
}
+ std::wstring GetFontBinaryNative(const std::wstring& sName)
+ {
+ if (0 != m_nType)
+ return L"";
+
+ return ((CPdfFile*)m_pFile)->GetEmbeddedFontPath(sName);
+ }
+
private:
int GetPagesCount()
{
diff --git a/DesktopEditor/doctrenderer/editors.cpp b/DesktopEditor/doctrenderer/editors.cpp
new file mode 100644
index 0000000000..bba11ef9da
--- /dev/null
+++ b/DesktopEditor/doctrenderer/editors.cpp
@@ -0,0 +1,249 @@
+#include "./editors.h"
+
+#include "../common/StringBuilder.h"
+
+namespace NSDoctRenderer
+{
+ namespace
+ {
+ void AppendScript(NSStringUtils::CStringBuilderA* builder, const std::wstring& path)
+ {
+ NSFile::CFileBinary oFile;
+
+ if (!oFile.OpenFile(path))
+ return;
+
+ int size = (int)oFile.GetFileSize();
+ if (size < 3)
+ return;
+
+ BYTE* pData = new BYTE[size];
+ DWORD dwReadSize = 0;
+ oFile.ReadFile(pData, (DWORD)size, dwReadSize);
+ oFile.CloseFile();
+
+ int nOffset = 0;
+ if (pData[0] == 0xEF && pData[1] == 0xBB && pData[2] == 0xBF)
+ nOffset = 3;
+
+ builder->WriteString((char*)(pData + nOffset), size - nOffset);
+ builder->WriteString("\n\n");
+ RELEASEARRAYOBJECTS(pData);
+ }
+
+ bool RunScript(JSSmart& context, JSSmart& try_catch, const std::wstring& path)
+ {
+ NSFile::CFileBinary oFile;
+
+ if (!oFile.OpenFile(path))
+ return false;
+
+ int size = (int)oFile.GetFileSize();
+ if (size < 3)
+ return false;
+
+ BYTE* pData = new BYTE[size];
+ DWORD dwReadSize = 0;
+ oFile.ReadFile(pData, (DWORD)size, dwReadSize);
+ oFile.CloseFile();
+
+ int nOffset = 0;
+ if (pData[0] == 0xEF && pData[1] == 0xBB && pData[2] == 0xBF)
+ nOffset = 3;
+
+ context->runScript(std::string((char*)(pData + nOffset), size - nOffset), try_catch);
+ RELEASEARRAYOBJECTS(pData);
+
+ return !try_catch->Check();
+ }
+
+ std::wstring GetAllScript(NSStringUtils::CStringBuilderA* builder, const DoctRendererEditorType& type, CDoctRendererConfig* config, const bool& isSnapshot = false)
+ {
+ for (std::vector::const_iterator i = config->m_arrFiles.cbegin(); i != config->m_arrFiles.cend(); i++)
+ AppendScript(builder, *i);
+
+ std::wstring sFontsPath = config->m_strSdkPath + L"/common/libfont/engine";
+#ifdef SUPPORT_HARFBUZZ_SHAPER
+ sFontsPath += L"/fonts_native.js";
+#else
+ sFontsPath += L"/fonts_ie.js";
+#endif
+
+ std::wstring sCachePath = L"";
+
+ switch (type)
+ {
+ case DoctRendererEditorType::WORD:
+ {
+ AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all-min.js");
+ AppendScript(builder, sFontsPath);
+ AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all.js");
+ sCachePath = config->m_strSdkPath + L"/word/sdk-all";
+ break;
+ }
+ case DoctRendererEditorType::SLIDE:
+ {
+ AppendScript(builder, config->m_strSdkPath + L"/slide/sdk-all-min.js");
+ AppendScript(builder, sFontsPath);
+ AppendScript(builder, config->m_strSdkPath + L"/slide/sdk-all.js");
+ sCachePath = config->m_strSdkPath + L"/slide/sdk-all";
+ break;
+ }
+ case DoctRendererEditorType::CELL:
+ {
+ AppendScript(builder, config->m_strSdkPath + L"/cell/sdk-all-min.js");
+ AppendScript(builder, sFontsPath);
+ AppendScript(builder, config->m_strSdkPath + L"/cell/sdk-all.js");
+ builder->WriteString("\n$.ready();", 11);
+ sCachePath = config->m_strSdkPath + L"/cell/sdk-all";
+ break;
+ }
+ case DoctRendererEditorType::VISIO:
+ {
+ if (!NSFile::CFileBinary::Exists(config->m_strSdkPath + L"/draw/sdk-all-min.js"))
+ return L"";
+ AppendScript(builder, config->m_strSdkPath + L"/draw/sdk-all-min.js");
+ AppendScript(builder, sFontsPath);
+ AppendScript(builder, config->m_strSdkPath + L"/draw/sdk-all.js");
+ sCachePath = config->m_strSdkPath + L"/draw/sdk-all";
+ break;
+ }
+ case DoctRendererEditorType::PDF:
+ {
+ AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all-min.js");
+ AppendScript(builder, sFontsPath);
+ AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all.js");
+ AppendScript(builder, config->m_strSdkPath + L"/pdf/src/engine/drawingfile_native.js");
+ sCachePath = config->m_strSdkPath + L"/pdf/sdk-all";
+ break;
+ }
+ default:
+ break;
+ }
+
+ if (!sCachePath.empty())
+ sCachePath += (isSnapshot ? L".bin" : L".cache");
+
+ return sCachePath;
+ }
+
+ std::wstring GetSnapshotPath(const DoctRendererEditorType& type, CDoctRendererConfig* config)
+ {
+ std::wstring sCachePath = L"";
+
+ switch (type)
+ {
+ case DoctRendererEditorType::WORD:
+ {
+ return config->m_strSdkPath + L"/word/sdk-all.bin";
+ }
+ case DoctRendererEditorType::SLIDE:
+ {
+ return config->m_strSdkPath + L"/slide/sdk-all.bin";
+ }
+ case DoctRendererEditorType::CELL:
+ {
+ return config->m_strSdkPath + L"/cell/sdk-all.bin";
+ }
+ case DoctRendererEditorType::VISIO:
+ {
+ return config->m_strSdkPath + L"/draw/sdk-all.bin";
+ }
+ case DoctRendererEditorType::PDF:
+ {
+ return config->m_strSdkPath + L"/pdf/sdk-all.bin";
+ }
+ default:
+ break;
+ }
+ return L"";
+ }
+
+ bool RunEditorFooter(JSSmart& context, JSSmart& try_catch, CDoctRendererConfig* config)
+ {
+ if (!RunScript(context, try_catch, config->m_strAllFonts))
+ return false;
+
+ std::string sFooter = "window.InitNativeEditors();";
+
+ if (context->isSnapshotUsed())
+ {
+ sFooter += "\
+if (undefined === String.prototype.replaceAll)\
+{\
+String.prototype.replaceAll = function(str, newStr)\
+{\
+ if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]')\
+ return this.replace(str, newStr);\
+ return this.split(str).join(newStr);\
+};\
+}\n";
+ }
+
+ context->runScript(sFooter, try_catch);
+ return !try_catch->Check();
+ }
+ } // namespace
+
+ bool RunEditor(const DoctRendererEditorType& type, JSSmart& context, JSSmart& try_catch, CDoctRendererConfig* config)
+ {
+ if (context->isSnapshotUsed())
+ return RunEditorFooter(context, try_catch, config);
+
+ NSStringUtils::CStringBuilderA builder;
+ builder.AddSize(10 * 1024 * 1024);
+ std::wstring sCachePath = GetAllScript(&builder, type, config);
+
+ if (!sCachePath.empty())
+ {
+ context->runScript(builder.GetData(), try_catch, config->m_bIsUseCache ? sCachePath : L"");
+ RunEditorFooter(context, try_catch, config);
+ }
+
+ return !try_catch->Check();
+ }
+
+ bool GenerateEditorSnapshot(const DoctRendererEditorType& type, CDoctRendererConfig* config)
+ {
+ NSStringUtils::CStringBuilderA builder;
+ builder.AddSize(10 * 1024 * 1024);
+ std::wstring sCachePath = GetAllScript(&builder, type, config, true);
+
+ builder.WriteString("delete String.prototype.replaceAll;");
+
+ if (sCachePath.empty())
+ return false;
+
+ return NSJSBase::CJSContext::generateSnapshot(builder.GetData(), sCachePath);
+ }
+
+ namespace
+ {
+ JSSmart RunEditorWithSnapshot(const DoctRendererEditorType& type, CDoctRendererConfig* config)
+ {
+ #ifndef V8_SUPPORT_SNAPSHOTS
+ return NULL;
+ #endif
+
+ std::wstring sCachePath = GetSnapshotPath(type, config);
+ if (!NSFile::CFileBinary::Exists(sCachePath))
+ return NULL;
+
+ if (sCachePath.empty())
+ return NULL;
+
+ JSSmart context = new NSJSBase::CJSContext(false);
+ context->Initialize(sCachePath);
+
+ return context;
+ }
+ } // namespace
+
+ JSSmart CreateEditorContext(const DoctRendererEditorType& type, CDoctRendererConfig* config)
+ {
+ JSSmart context = RunEditorWithSnapshot(type, config);
+ if (context.is_init())
+ return context;
+ return new NSJSBase::CJSContext();
+ }
+} // namespace NSDoctRenderer
diff --git a/DesktopEditor/doctrenderer/editors.h b/DesktopEditor/doctrenderer/editors.h
index 4fbd706836..13f008f05b 100644
--- a/DesktopEditor/doctrenderer/editors.h
+++ b/DesktopEditor/doctrenderer/editors.h
@@ -34,7 +34,6 @@
#include "./config.h"
#include "../js_internal/js_base.h"
-#include "../common/StringBuilder.h"
#ifdef CreateFile
#undef CreateFile
@@ -53,254 +52,11 @@ namespace NSDoctRenderer
INVALID = 255
};
- static void AppendScript(NSStringUtils::CStringBuilderA* builder, const std::wstring& path)
- {
- NSFile::CFileBinary oFile;
+ bool RunEditor(const DoctRendererEditorType& type, JSSmart& context, JSSmart& try_catch, CDoctRendererConfig* config);
- if (!oFile.OpenFile(path))
- return;
+ bool GenerateEditorSnapshot(const DoctRendererEditorType& type, CDoctRendererConfig* config);
- int size = (int)oFile.GetFileSize();
- if (size < 3)
- return;
-
- BYTE* pData = new BYTE[size];
- DWORD dwReadSize = 0;
- oFile.ReadFile(pData, (DWORD)size, dwReadSize);
- oFile.CloseFile();
-
- int nOffset = 0;
- if (pData[0] == 0xEF && pData[1] == 0xBB && pData[2] == 0xBF)
- nOffset = 3;
-
- builder->WriteString((char*)(pData + nOffset), size - nOffset);
- builder->WriteString("\n\n");
- RELEASEARRAYOBJECTS(pData);
- }
-
- static bool RunScript(JSSmart& context, JSSmart& try_catch, const std::wstring& path)
- {
- NSFile::CFileBinary oFile;
-
- if (!oFile.OpenFile(path))
- return false;
-
- int size = (int)oFile.GetFileSize();
- if (size < 3)
- return false;
-
- BYTE* pData = new BYTE[size];
- DWORD dwReadSize = 0;
- oFile.ReadFile(pData, (DWORD)size, dwReadSize);
- oFile.CloseFile();
-
- int nOffset = 0;
- if (pData[0] == 0xEF && pData[1] == 0xBB && pData[2] == 0xBF)
- nOffset = 3;
-
- context->runScript(std::string((char*)(pData + nOffset), size - nOffset), try_catch);
- RELEASEARRAYOBJECTS(pData);
-
- return !try_catch->Check();
- }
-
- static std::wstring GetAllScript(NSStringUtils::CStringBuilderA* builder, const DoctRendererEditorType& type, CDoctRendererConfig* config, const bool& isSnapshot = false)
- {
- for (std::vector::const_iterator i = config->m_arrFiles.cbegin(); i != config->m_arrFiles.cend(); i++)
- AppendScript(builder, *i);
-
- std::wstring sFontsPath = config->m_strSdkPath + L"/common/libfont/engine";
-#ifdef SUPPORT_HARFBUZZ_SHAPER
- sFontsPath += L"/fonts_native.js";
-#else
- sFontsPath += L"/fonts_ie.js";
-#endif
-
- std::wstring sCachePath = L"";
-
- switch (type)
- {
- case DoctRendererEditorType::WORD:
- {
- AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all-min.js");
- AppendScript(builder, sFontsPath);
- AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all.js");
- sCachePath = config->m_strSdkPath + L"/word/sdk-all";
- break;
- }
- case DoctRendererEditorType::SLIDE:
- {
- AppendScript(builder, config->m_strSdkPath + L"/slide/sdk-all-min.js");
- AppendScript(builder, sFontsPath);
- AppendScript(builder, config->m_strSdkPath + L"/slide/sdk-all.js");
- sCachePath = config->m_strSdkPath + L"/slide/sdk-all";
- break;
- }
- case DoctRendererEditorType::CELL:
- {
- AppendScript(builder, config->m_strSdkPath + L"/cell/sdk-all-min.js");
- AppendScript(builder, sFontsPath);
- AppendScript(builder, config->m_strSdkPath + L"/cell/sdk-all.js");
- builder->WriteString("\n$.ready();", 11);
- sCachePath = config->m_strSdkPath + L"/cell/sdk-all";
- break;
- }
- case DoctRendererEditorType::VISIO:
- {
- if (!NSFile::CFileBinary::Exists(config->m_strSdkPath + L"/draw/sdk-all-min.js"))
- return L"";
- AppendScript(builder, config->m_strSdkPath + L"/draw/sdk-all-min.js");
- AppendScript(builder, sFontsPath);
- AppendScript(builder, config->m_strSdkPath + L"/draw/sdk-all.js");
- sCachePath = config->m_strSdkPath + L"/draw/sdk-all";
- break;
- }
- case DoctRendererEditorType::PDF:
- {
- AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all-min.js");
- AppendScript(builder, sFontsPath);
- AppendScript(builder, config->m_strSdkPath + L"/word/sdk-all.js");
- AppendScript(builder, config->m_strSdkPath + L"/pdf/src/engine/drawingfile_native.js");
- sCachePath = config->m_strSdkPath + L"/pdf/sdk-all";
- break;
- }
- default:
- break;
- }
-
- if (!sCachePath.empty())
- sCachePath += (isSnapshot ? L".bin" : L".cache");
-
- return sCachePath;
- }
-
- static std::wstring GetSnapshotPath(const DoctRendererEditorType& type, CDoctRendererConfig* config)
- {
- std::wstring sCachePath = L"";
-
- switch (type)
- {
- case DoctRendererEditorType::WORD:
- {
- return config->m_strSdkPath + L"/word/sdk-all.bin";
- }
- case DoctRendererEditorType::SLIDE:
- {
- return config->m_strSdkPath + L"/slide/sdk-all.bin";
- }
- case DoctRendererEditorType::CELL:
- {
- return config->m_strSdkPath + L"/cell/sdk-all.bin";
- }
- case DoctRendererEditorType::VISIO:
- {
- return config->m_strSdkPath + L"/draw/sdk-all.bin";
- }
- case DoctRendererEditorType::PDF:
- {
- return config->m_strSdkPath + L"/pdf/sdk-all.bin";
- }
- default:
- break;
- }
- return L"";
- }
-
- static bool RunEditorFooter(JSSmart& context, JSSmart& try_catch, CDoctRendererConfig* config)
- {
- if (!RunScript(context, try_catch, config->m_strAllFonts))
- return false;
-
- std::string sFooter = "\
-window.InitNativeObject();\
-window.InitNativeTextMeasurer();\
-window.InitNativeZLib();\
-AscFonts.checkAllFonts();\n";
-
- if (context->isSnapshotUsed())
- {
- sFooter += "\
-if (undefined === String.prototype.replaceAll)\
-{\
-String.prototype.replaceAll = function(str, newStr)\
-{\
- if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]')\
- return this.replace(str, newStr);\
- return this.split(str).join(newStr);\
-};\
-}\n";
- }
-
- context->runScript(sFooter, try_catch);
- return !try_catch->Check();
- }
-
- static bool RunEditor(const DoctRendererEditorType& type, JSSmart& context, JSSmart& try_catch, CDoctRendererConfig* config)
- {
- NSStringUtils::CStringBuilderA builder;
- builder.AddSize(10 * 1024 * 1024);
- std::wstring sCachePath = GetAllScript(&builder, type, config);
-
- if (!sCachePath.empty())
- {
- context->runScript(builder.GetData(), try_catch, config->m_bIsUseCache ? sCachePath : L"");
- RunEditorFooter(context, try_catch, config);
- }
-
- return !try_catch->Check();
- }
-
- static bool GenerateEditorSnapshot(const DoctRendererEditorType& type, CDoctRendererConfig* config)
- {
- NSStringUtils::CStringBuilderA builder;
- builder.AddSize(10 * 1024 * 1024);
- std::wstring sCachePath = GetAllScript(&builder, type, config, true);
-
- builder.WriteString("delete String.prototype.replaceAll;");
-
- if (sCachePath.empty())
- return false;
-
- return NSJSBase::CJSContext::generateSnapshot(builder.GetData(), sCachePath);
- }
-
- static JSSmart RunEditorWithSnapshot(const DoctRendererEditorType& type, CDoctRendererConfig* config)
- {
-#ifndef V8_VERSION_89_PLUS
- return NULL;
-#endif
-
-#ifndef V8_SUPPORT_SNAPSHOTS
- return NULL;
-#endif
-
- std::wstring sCachePath = GetSnapshotPath(type, config);
- if (!NSFile::CFileBinary::Exists(sCachePath))
- return NULL;
-
- if (sCachePath.empty())
- return NULL;
-
- JSSmart context = new NSJSBase::CJSContext(false);
- context->Initialize(sCachePath);
-
- NSJSBase::CJSContextScope scope(context);
-
- JSSmart try_catch = context->GetExceptions();
-
- if (!RunEditorFooter(context, try_catch, config))
- return NULL;
-
- return context;
- }
-
- static JSSmart CreateEditorContext(const DoctRendererEditorType& type, CDoctRendererConfig* config)
- {
- JSSmart context = RunEditorWithSnapshot(type, config);
- if (context.is_init())
- return context;
- return new NSJSBase::CJSContext();
- }
+ JSSmart CreateEditorContext(const DoctRendererEditorType& type, CDoctRendererConfig* config);
}
#endif // DOC_BUILDER_EDITORS_CONFIG
diff --git a/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.cpp b/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.cpp
index 12263c5eab..163c958d38 100644
--- a/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.cpp
+++ b/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.cpp
@@ -1,6 +1,7 @@
#include "DrawingFileEmbed.h"
+#include "../drawingfile.h"
-JSSmart MoveMemoryToJS(BYTE* pWasmData)
+JSSmart WasmMemoryToJS(BYTE* pWasmData)
{
if (NULL == pWasmData)
return CJSContext::createNull();
@@ -10,12 +11,16 @@ JSSmart MoveMemoryToJS(BYTE* pWasmData)
if (4 >= nLen)
return CJSContext::createNull();
- size_t nBufferSize = (size_t)(nLen - 4);
- BYTE* pMemory = NSJSBase::NSAllocator::Alloc(nBufferSize);
- memcpy(pMemory, pWasmData + 4, nBufferSize);
- free(pWasmData);
+ return NSJSBase::CJSContext::createUint8Array(pWasmData + 4, nLen - 4, true);
+}
- return NSJSBase::CJSContext::createUint8Array(pMemory, (int)nBufferSize, false);
+CDrawingFileEmbed::CDrawingFileEmbed()
+{
+ m_pFile = NULL;
+}
+CDrawingFileEmbed::~CDrawingFileEmbed()
+{
+ RELEASEOBJECT(m_pFile);
}
JSSmart CDrawingFileEmbed::OpenFile(JSSmart sFile, JSSmart sPassword)
@@ -40,58 +45,89 @@ JSSmart CDrawingFileEmbed::GetErrorCode()
JSSmart CDrawingFileEmbed::GetInfo()
{
- return MoveMemoryToJS(m_pFile->GetInfo());
+ return WasmMemoryToJS(m_pFile->GetInfo());
}
JSSmart CDrawingFileEmbed::GetPixmap(JSSmart nPageIndex, JSSmart nRasterW, JSSmart nRasterH, JSSmart nBackgroundColor)
{
- return MoveMemoryToJS(m_pFile->GetPixmap(nPageIndex->toInt32(), nRasterW->toInt32(), nRasterH->toInt32(), nBackgroundColor->toInt32()));
+ int nW = nRasterW->toInt32();
+ int nH = nRasterH->toInt32();
+ BYTE* pData = m_pFile->GetPixmap(nPageIndex->toInt32(), nW, nH, nBackgroundColor->toInt32());
+
+ if (NULL == pData)
+ return CJSContext::createNull();
+
+ return NSJSBase::CJSContext::createUint8Array(pData, 4 * nW * nH, true);
+}
+
+JSSmart CDrawingFileEmbed::DestroyPixmap(JSSmart typedArray)
+{
+ if (!typedArray->isTypedArray())
+ return NULL;
+
+ CBgraFrame oFrame;
+ oFrame.put_Data(typedArray->toTypedArray()->getData().Data);
+ // free on destructor
+ return NULL;
+}
+
+JSSmart CDrawingFileEmbed::GetFontBinary(JSSmart Id)
+{
+ if (0 != m_pFile->GetType())
+ return NULL;
+
+ std::wstring sName = Id->toStringW();
+ std::wstring sFile = m_pFile->GetFontBinaryNative(sName);
+ if (sFile.empty())
+ return NULL;
+
+ return CJSContext::createUint8Array(sFile);
}
JSSmart CDrawingFileEmbed::GetGlyphs(JSSmart nPageIndex)
{
- return MoveMemoryToJS(m_pFile->GetGlyphs(nPageIndex->toInt32()));
+ return WasmMemoryToJS(m_pFile->GetGlyphs(nPageIndex->toInt32()));
}
JSSmart CDrawingFileEmbed::GetLinks(JSSmart nPageIndex)
{
- return MoveMemoryToJS(m_pFile->GetLinks(nPageIndex->toInt32()));
+ return WasmMemoryToJS(m_pFile->GetLinks(nPageIndex->toInt32()));
}
JSSmart CDrawingFileEmbed::GetStructure()
{
- return MoveMemoryToJS(m_pFile->GetStructure());
+ return WasmMemoryToJS(m_pFile->GetStructure());
}
JSSmart CDrawingFileEmbed::GetInteractiveFormsInfo()
{
- return MoveMemoryToJS(m_pFile->GetInteractiveFormsInfo());
+ return WasmMemoryToJS(m_pFile->GetInteractiveFormsInfo());
}
JSSmart CDrawingFileEmbed::GetInteractiveFormsFonts(JSSmart nTypeFonts)
{
- return MoveMemoryToJS(m_pFile->GetInteractiveFormsFonts(nTypeFonts->toInt32()));
+ return WasmMemoryToJS(m_pFile->GetInteractiveFormsFonts(nTypeFonts->toInt32()));
}
JSSmart CDrawingFileEmbed::GetInteractiveFormsAP(JSSmart nRasterW, JSSmart nRasterH, JSSmart nBackgroundColor,
JSSmart nPageIndex,
JSSmart nWidget, JSSmart nView, JSSmart nButtonView)
{
- return MoveMemoryToJS(m_pFile->GetInteractiveFormsAP(nRasterW->toInt32(), nRasterH->toInt32(), nBackgroundColor->toInt32(),
+ return WasmMemoryToJS(m_pFile->GetInteractiveFormsAP(nRasterW->toInt32(), nRasterH->toInt32(), nBackgroundColor->toInt32(),
nPageIndex->toInt32(),
nWidget->toInt32(), nView->toInt32(), nButtonView->toInt32()));
}
JSSmart CDrawingFileEmbed::GetButtonIcons(JSSmart nBackgroundColor, JSSmart nPageIndex, JSSmart bBase64,
JSSmart nButtonWidget, JSSmart nIconView)
{
- return MoveMemoryToJS(m_pFile->GetButtonIcons(nBackgroundColor->toInt32(), nPageIndex->toInt32(), bBase64->toInt32(),
+ return WasmMemoryToJS(m_pFile->GetButtonIcons(nBackgroundColor->toInt32(), nPageIndex->toInt32(), bBase64->toInt32(),
nButtonWidget->toInt32(), nIconView->toInt32()));
}
JSSmart CDrawingFileEmbed::GetAnnotationsInfo(JSSmart nPageIndex)
{
- return MoveMemoryToJS(m_pFile->GetAnnotationsInfo(nPageIndex->toInt32()));
+ return WasmMemoryToJS(m_pFile->GetAnnotationsInfo(nPageIndex->toInt32()));
}
JSSmart CDrawingFileEmbed::GetAnnotationsAP(JSSmart nRasterW, JSSmart nRasterH, JSSmart nBackgroundColor,
JSSmart nPageIndex, JSSmart nAnnot, JSSmart nView)
{
- return MoveMemoryToJS(m_pFile->GetAnnotationsAP(nRasterW->toInt32(), nRasterH->toInt32(), nBackgroundColor->toInt32(),
- nPageIndex->toInt32(), nAnnot->toInt32(), nView->toInt32()));
+ return WasmMemoryToJS(m_pFile->GetAnnotationsAP(nRasterW->toInt32(), nRasterH->toInt32(), nBackgroundColor->toInt32(),
+ nPageIndex->toInt32(), nAnnot->toInt32(), nView->toInt32()));
}
JSSmart CDrawingFileEmbed::DestroyTextInfo()
@@ -105,7 +141,7 @@ JSSmart CDrawingFileEmbed::IsNeedCMap()
}
JSSmart CDrawingFileEmbed::ScanPage(JSSmart nPageIndex, JSSmart mode)
{
- return MoveMemoryToJS(m_pFile->ScanPage(nPageIndex->toInt32(), mode->toInt32()));
+ return WasmMemoryToJS(m_pFile->ScanPage(nPageIndex->toInt32(), mode->toInt32()));
}
JSSmart CDrawingFileEmbed::GetImageBase64(JSSmart rId)
@@ -117,3 +153,28 @@ JSSmart CDrawingFileEmbed::GetImageBase64(JSSmart rId)
*pData = "";
return ret;
}
+
+JSSmart CDrawingFileEmbed::FreeWasmData(JSSmart typedArray)
+{
+ if (!typedArray->isTypedArray())
+ return NULL;
+ BYTE* data = typedArray->toTypedArray()->getData().Data;
+ typedArray->toTypedArray()->Detach();
+ data -= 4; // sizeof int (length in NSWasm::Data)
+ free(data);
+ return NULL;
+}
+
+bool EmbedDrawingFile(JSSmart& context, IOfficeDrawingFile* pFile)
+{
+ CJSContext::Embed(false);
+
+ JSSmart oNativeDrawingFile = CJSContext::createEmbedObject("CDrawingFileEmbed");
+ context->GetGlobal()->set("g_native_drawing_file", oNativeDrawingFile);
+
+ CDrawingFile* pDrFile = new CDrawingFile(pFile->GetFonts());
+ pDrFile->SetInternalFile(pFile);
+ ((CDrawingFileEmbed*)oNativeDrawingFile->getNative())->m_pFile = pDrFile;
+
+ return true;
+}
diff --git a/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.h b/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.h
index 89ab6e228a..06ad7e8f60 100644
--- a/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.h
+++ b/DesktopEditor/doctrenderer/embed/DrawingFileEmbed.h
@@ -1,8 +1,10 @@
#ifndef _BUILD_DRAWING_EMBED_H_
#define _BUILD_DRAWING_EMBED_H_
-#include "../drawingfile.h"
#include "../js_internal/js_base.h"
+#include "../../graphics/pro/officedrawingfile.h"
+
+class CDrawingFile;
using namespace NSJSBase;
class JS_DECL CDrawingFileEmbed : public CJSEmbedObject
@@ -11,14 +13,8 @@ public:
CDrawingFile* m_pFile;
public:
- CDrawingFileEmbed()
- {
- m_pFile = NULL;
- }
- ~CDrawingFileEmbed()
- {
- RELEASEOBJECT(m_pFile);
- }
+ CDrawingFileEmbed();
+ ~CDrawingFileEmbed();
virtual void* getObject() override { return (void*)m_pFile; }
@@ -32,8 +28,8 @@ public:
JSSmart GetInfo();
JSSmart GetPixmap(JSSmart nPageIndex, JSSmart nRasterW, JSSmart nRasterH, JSSmart nBackgroundColor);
+ JSSmart DestroyPixmap(JSSmart typedArray);
- JSSmart GetGlyphs(JSSmart nPageIndex);
JSSmart GetLinks(JSSmart nPageIndex);
JSSmart GetStructure();
JSSmart GetInteractiveFormsInfo();
@@ -44,13 +40,20 @@ public:
JSSmart GetAnnotationsInfo(JSSmart nPageIndex);
JSSmart GetAnnotationsAP(JSSmart nRasterW, JSSmart nRasterH, JSSmart nBackgroundColor, JSSmart nPageIndex, JSSmart nAnnot, JSSmart nView);
+ JSSmart GetFontBinary(JSSmart Id);
+ JSSmart GetGlyphs(JSSmart nPageIndex);
JSSmart DestroyTextInfo();
+
JSSmart IsNeedCMap();
JSSmart ScanPage(JSSmart nPageIndex, JSSmart mode);
JSSmart GetImageBase64(JSSmart rId);
+ JSSmart FreeWasmData(JSSmart typedArray);
+
DECLARE_EMBED_METHODS
};
+bool EmbedDrawingFile(JSSmart& context, IOfficeDrawingFile* pFile);
+
#endif // _BUILD_NATIVE_ZIP_EMBED_H_
diff --git a/DesktopEditor/doctrenderer/embed/jsc/jsc_DrawingFileEmbed.mm b/DesktopEditor/doctrenderer/embed/jsc/jsc_DrawingFileEmbed.mm
index 38a6e013a5..bc460ff302 100644
--- a/DesktopEditor/doctrenderer/embed/jsc/jsc_DrawingFileEmbed.mm
+++ b/DesktopEditor/doctrenderer/embed/jsc/jsc_DrawingFileEmbed.mm
@@ -11,7 +11,7 @@
-(JSValue*) GetErrorCode;
-(JSValue*) GetInfo;
-(JSValue*) GetPixmap : (JSValue*)nPageIndex : (JSValue*)nRasterW : (JSValue*)nRasterH : (JSValue*)nBackgroundColor;
--(JSValue*) GetGlyphs : (JSValue*)nPageIndex;
+-(JSValue*) DestroyPixmap : (JSValue*)typedArray;
-(JSValue*) GetLinks : (JSValue*)nPageIndex;
-(JSValue*) GetStructure;
-(JSValue*) GetInteractiveFormsInfo;
@@ -20,10 +20,13 @@
-(JSValue*) GetButtonIcons : (JSValue*)nBackgroundColor : (JSValue*)nPageIndex : (JSValue*)bBase64 : (JSValue*)nButtonWidget : (JSValue*)nIconView;
-(JSValue*) GetAnnotationsInfo : (JSValue*)nPageIndex;
-(JSValue*) GetAnnotationsAP : (JSValue*)nRasterW : (JSValue*)nRasterH : (JSValue*)nBackgroundColor : (JSValue*)nPageIndex : (JSValue*)nAnnot : (JSValue*)nView;
+-(JSValue*) GetFontBinary : (JSValue*)Id;
+-(JSValue*) GetGlyphs : (JSValue*)nPageIndex;
-(JSValue*) DestroyTextInfo;
-(JSValue*) IsNeedCMap;
-(JSValue*) ScanPage : (JSValue*)nPageIndex : (JSValue*)mode;
-(JSValue*) GetImageBase64 : (JSValue*)rId;
+-(JSValue*) FreeWasmData : (JSValue*)typedArray;
@end
@interface CJSCDrawingFileEmbed : NSObject
@@ -42,7 +45,7 @@ FUNCTION_WRAPPER_JS_0(GetType, GetType)
FUNCTION_WRAPPER_JS_0(GetErrorCode, GetErrorCode)
FUNCTION_WRAPPER_JS_0(GetInfo, GetInfo)
FUNCTION_WRAPPER_JS_4(GetPixmap, GetPixmap)
-FUNCTION_WRAPPER_JS_1(GetGlyphs, GetGlyphs)
+FUNCTION_WRAPPER_JS_1(DestroyPixmap, DestroyPixmap)
FUNCTION_WRAPPER_JS_1(GetLinks, GetLinks)
FUNCTION_WRAPPER_JS_0(GetStructure, GetStructure)
FUNCTION_WRAPPER_JS_0(GetInteractiveFormsInfo, GetInteractiveFormsInfo)
@@ -51,10 +54,13 @@ FUNCTION_WRAPPER_JS_7(GetInteractiveFormsAP, GetInteractiveFormsAP)
FUNCTION_WRAPPER_JS_5(GetButtonIcons, GetButtonIcons)
FUNCTION_WRAPPER_JS_1(GetAnnotationsInfo, GetAnnotationsInfo)
FUNCTION_WRAPPER_JS_6(GetAnnotationsAP, GetAnnotationsAP)
+FUNCTION_WRAPPER_JS_1(GetFontBinary, GetFontBinary)
+FUNCTION_WRAPPER_JS_1(GetGlyphs, GetGlyphs)
FUNCTION_WRAPPER_JS_0(DestroyTextInfo, DestroyTextInfo)
FUNCTION_WRAPPER_JS_0(IsNeedCMap, IsNeedCMap)
FUNCTION_WRAPPER_JS_2(ScanPage, ScanPage)
FUNCTION_WRAPPER_JS_1(GetImageBase64, GetImageBase64)
+FUNCTION_WRAPPER_JS_1(FreeWasmData, FreeWasmData)
@end
class CDrawingFileEmbedAdapter : public CJSEmbedObjectAdapterJSC
diff --git a/DesktopEditor/doctrenderer/embed/v8/v8_DrawingFileEmbed.cpp b/DesktopEditor/doctrenderer/embed/v8/v8_DrawingFileEmbed.cpp
index 7b22c21607..454b4790b2 100644
--- a/DesktopEditor/doctrenderer/embed/v8/v8_DrawingFileEmbed.cpp
+++ b/DesktopEditor/doctrenderer/embed/v8/v8_DrawingFileEmbed.cpp
@@ -14,7 +14,7 @@ namespace NSDrawingFileEmbed
FUNCTION_WRAPPER_V8_0(_GetErrorCode, GetErrorCode)
FUNCTION_WRAPPER_V8_0(_GetInfo, GetInfo)
FUNCTION_WRAPPER_V8_4(_GetPixmap, GetPixmap)
- FUNCTION_WRAPPER_V8_1(_GetGlyphs, GetGlyphs)
+ FUNCTION_WRAPPER_V8_1(_DestroyPixmap, DestroyPixmap)
FUNCTION_WRAPPER_V8_1(_GetLinks, GetLinks)
FUNCTION_WRAPPER_V8_0(_GetStructure, GetStructure)
FUNCTION_WRAPPER_V8_0(_GetInteractiveFormsInfo, GetInteractiveFormsInfo)
@@ -23,10 +23,13 @@ namespace NSDrawingFileEmbed
FUNCTION_WRAPPER_V8_5(_GetButtonIcons, GetButtonIcons)
FUNCTION_WRAPPER_V8_1(_GetAnnotationsInfo, GetAnnotationsInfo)
FUNCTION_WRAPPER_V8_6(_GetAnnotationsAP, GetAnnotationsAP)
+ FUNCTION_WRAPPER_V8_1(_GetFontBinary, GetFontBinary)
+ FUNCTION_WRAPPER_V8_1(_GetGlyphs, GetGlyphs)
FUNCTION_WRAPPER_V8_0(_DestroyTextInfo, DestroyTextInfo)
FUNCTION_WRAPPER_V8_0(_IsNeedCMap, IsNeedCMap)
FUNCTION_WRAPPER_V8_2(_ScanPage, ScanPage)
FUNCTION_WRAPPER_V8_1(_GetImageBase64, GetImageBase64)
+ FUNCTION_WRAPPER_V8_1(_FreeWasmData, FreeWasmData)
v8::Handle CreateTemplate(v8::Isolate* isolate)
{
@@ -40,7 +43,7 @@ namespace NSDrawingFileEmbed
NSV8Objects::Template_Set(result, "GetErrorCode", _GetErrorCode);
NSV8Objects::Template_Set(result, "GetInfo", _GetInfo);
NSV8Objects::Template_Set(result, "GetPixmap", _GetPixmap);
- NSV8Objects::Template_Set(result, "GetGlyphs", _GetGlyphs);
+ NSV8Objects::Template_Set(result, "DestroyPixmap", _DestroyPixmap);
NSV8Objects::Template_Set(result, "GetLinks", _GetLinks);
NSV8Objects::Template_Set(result, "GetStructure", _GetStructure);
NSV8Objects::Template_Set(result, "GetInteractiveFormsInfo", _GetInteractiveFormsInfo);
@@ -49,10 +52,13 @@ namespace NSDrawingFileEmbed
NSV8Objects::Template_Set(result, "GetButtonIcons", _GetButtonIcons);
NSV8Objects::Template_Set(result, "GetAnnotationsInfo", _GetAnnotationsInfo);
NSV8Objects::Template_Set(result, "GetAnnotationsAP", _GetAnnotationsAP);
+ NSV8Objects::Template_Set(result, "GetFontBinary", _GetFontBinary);
+ NSV8Objects::Template_Set(result, "GetGlyphs", _GetGlyphs);
NSV8Objects::Template_Set(result, "DestroyTextInfo", _DestroyTextInfo);
NSV8Objects::Template_Set(result, "IsNeedCMap", _IsNeedCMap);
NSV8Objects::Template_Set(result, "ScanPage", _ScanPage);
NSV8Objects::Template_Set(result, "GetImageBase64", _GetImageBase64);
+ NSV8Objects::Template_Set(result, "FreeWasmData", _FreeWasmData);
return handle_scope.Escape(result);
}
diff --git a/DesktopEditor/doctrenderer/js_internal/js_base.h b/DesktopEditor/doctrenderer/js_internal/js_base.h
index 186b5966ac..ffa1c7a7f0 100644
--- a/DesktopEditor/doctrenderer/js_internal/js_base.h
+++ b/DesktopEditor/doctrenderer/js_internal/js_base.h
@@ -386,6 +386,14 @@ namespace NSJSBase
* Converts the typed array to a value.
*/
virtual JSSmart toValue() = 0;
+
+ /**
+ * Detaches this ArrayBuffer and all its views (typed arrays).
+ * Detaching sets the byte length of the buffer and all typed arrays to zero,
+ * preventing JavaScript from ever accessing underlying backing store.
+ * ArrayBuffer should have been externalized.
+ */
+ virtual void Detach() = 0;
};
/**
@@ -490,7 +498,6 @@ namespace NSJSBase
/**
* Generate snapshot by script.
* @param script The script to be executed.
- * @param exception The object for handling exceptions.
* @param snapshotPath The path to the snapshot
* @return Returns true whether a snapshot has been created.
*/
diff --git a/DesktopEditor/doctrenderer/js_internal/jsc/jsc_base.h b/DesktopEditor/doctrenderer/js_internal/jsc/jsc_base.h
index e71d0a10d6..0093c00295 100644
--- a/DesktopEditor/doctrenderer/js_internal/jsc/jsc_base.h
+++ b/DesktopEditor/doctrenderer/js_internal/jsc/jsc_base.h
@@ -385,6 +385,11 @@ namespace NSJSBase
_value->value = value;
return _value;
}
+
+ virtual void Detach()
+ {
+ // None
+ }
};
class CJSFunctionJSC : public CJSValueJSCTemplate
diff --git a/DesktopEditor/doctrenderer/js_internal/v8/v8_base.cpp b/DesktopEditor/doctrenderer/js_internal/v8/v8_base.cpp
index 0097378b67..c8884fecf0 100644
--- a/DesktopEditor/doctrenderer/js_internal/v8/v8_base.cpp
+++ b/DesktopEditor/doctrenderer/js_internal/v8/v8_base.cpp
@@ -192,7 +192,7 @@ namespace NSJSBase
{
if (m_internal->m_isolate == NULL)
{
-#ifdef V8_VERSION_89_PLUS
+#ifdef V8_SUPPORT_SNAPSHOTS
if (!snapshotPath.empty())
{
BYTE* data = NULL;
@@ -411,9 +411,9 @@ namespace NSJSBase
bool CJSContext::generateSnapshot(const std::string& script, const std::wstring& snapshotPath)
{
-#ifdef V8_VERSION_89_PLUS
+#ifdef V8_SUPPORT_SNAPSHOTS
bool result = false;
- // snapshot creator should be in its own scope, because it handles entering, exiting and disposing the isolate
+ // Snapshot creator should be in its own scope, because it handles entering, exiting and disposing the isolate
v8::SnapshotCreator snapshotCreator;
v8::Isolate* isolate = snapshotCreator.GetIsolate();
{
@@ -422,8 +422,7 @@ namespace NSJSBase
v8::Local context = v8::Context::New(isolate);
v8::Context::Scope context_scope(context);
- // Trying to handle compile & run errors:
- // window
+ // Handle compile & run errors
v8::Local global = context->Global();
global->Set(context, v8::String::NewFromUtf8Literal(isolate, "window"), global).Check();
global->Set(context, v8::String::NewFromUtf8Literal(isolate, "self"), global).Check();
@@ -433,11 +432,11 @@ namespace NSJSBase
v8::Local source = v8::String::NewFromUtf8(isolate, script.c_str()).ToLocalChecked();
v8::Local script = v8::Script::Compile(context, source).ToLocalChecked();
- bool isEmpty = script->Run(context).IsEmpty();
+ script->Run(context).IsEmpty();
snapshotCreator.SetDefaultContext(context);
}
v8::StartupData data = snapshotCreator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kKeep);
-
+ // Save snapshot to file
NSFile::CFileBinary snapshotFile;
if (data.data && snapshotFile.CreateFile(snapshotPath))
{
diff --git a/DesktopEditor/doctrenderer/js_internal/v8/v8_base.h b/DesktopEditor/doctrenderer/js_internal/v8/v8_base.h
index 436304740c..8710b41cc8 100644
--- a/DesktopEditor/doctrenderer/js_internal/v8/v8_base.h
+++ b/DesktopEditor/doctrenderer/js_internal/v8/v8_base.h
@@ -200,7 +200,7 @@ public:
nMaxVirtualMemory);
#endif
-#ifdef V8_VERSION_89_PLUS
+#ifdef V8_SUPPORT_SNAPSHOTS
create_params.snapshot_blob = startupData;
#endif
@@ -705,6 +705,15 @@ namespace NSJSBase
_value->value = value;
return _value;
}
+
+ virtual void Detach()
+ {
+#ifdef V8_ARRAY_BUFFER_USE_BACKING_STORE
+ value->Buffer()->Detach();
+#else
+ value->Buffer()->Neuter();
+#endif
+ }
};
class CJSFunctionV8 : public CJSValueV8Template
diff --git a/DesktopEditor/doctrenderer/json/json.cpp b/DesktopEditor/doctrenderer/json/json.cpp
index 88b4825f60..9126c91e9e 100644
--- a/DesktopEditor/doctrenderer/json/json.cpp
+++ b/DesktopEditor/doctrenderer/json/json.cpp
@@ -5,6 +5,15 @@
// for working with typed arrays: Alloc() and Free()
#include "js_base.h"
+// for converting primitive types to JSON-string
+#include
+#include
+#include
+// for strtod()
+#include
+// for modf()
+#include
+
namespace NSJSON
{
CTypedValue::CTypedValue() : m_type(vtUndefined)
@@ -175,6 +184,177 @@ namespace NSJSON
return ToStringW();
}
+ namespace
+ {
+ std::string doubleToJsonString(double value)
+ {
+ // handle special cases
+ if (std::isnan(value) || std::isinf(value))
+ return "null";
+
+ // convert to string with full precision
+ std::ostringstream oss;
+ oss.precision(std::numeric_limits::digits10);
+ oss << std::noshowpoint << value;
+
+ return oss.str();
+ }
+
+ std::string stringToJsonString(const std::string& value)
+ {
+ std::string result;
+ for (char ch : value)
+ {
+ if (ch <= 0x1F)
+ {
+ result += '\\';
+ if (ch == '\b')
+ {
+ result += 'b';
+ }
+ else if (ch == '\t')
+ {
+ result += 't';
+ }
+ else if (ch == '\n')
+ {
+ result += 'n';
+ }
+ else if (ch == '\f')
+ {
+ result += 'f';
+ }
+ else if (ch == '\r')
+ {
+ result += 'r';
+ }
+ else
+ {
+ result += "u00";
+ std::ostringstream oss;
+ oss << std::setfill('0') << std::setw(2) << std::hex << (int)ch;
+ result += oss.str();
+ }
+ }
+ else if (ch == '\\')
+ {
+ result += "\\\\";
+ }
+ else if (ch == '\"')
+ {
+ result += "\\\"";
+ }
+ else
+ {
+ result += ch;
+ }
+ }
+
+ return result;
+ }
+ }
+
+ std::string IValue::ToJSON()
+ {
+ std::string strRes;
+ CTypedValue::ValueType type = m_internal->m_type;
+ switch (type)
+ {
+ case CTypedValue::vtUndefined:
+ {
+ break;
+ }
+ case CTypedValue::vtNull:
+ {
+ strRes = "null";
+ break;
+ }
+ case CTypedValue::vtPrimitive:
+ {
+ CPrimitive* pPrimitiveValue = static_cast(m_internal->m_value.get());
+ if (pPrimitiveValue->isBool())
+ {
+ strRes = pPrimitiveValue->toBool() ? "true" : "false";
+ }
+ else if (pPrimitiveValue->isInt())
+ {
+ strRes = std::to_string(pPrimitiveValue->toInt());
+ }
+ else if (pPrimitiveValue->isDouble())
+ {
+ strRes = doubleToJsonString(pPrimitiveValue->toDouble());
+ }
+ else
+ {
+ strRes = "\"" + stringToJsonString(pPrimitiveValue->toStringA()) + "\"";
+ }
+ break;
+ }
+ case CTypedValue::vtArray:
+ {
+ CArray* pArrayValue = static_cast(m_internal->m_value.get());
+ strRes = "[";
+ const int len = pArrayValue->getCount();
+ for (int i = 0; i < len; i++)
+ {
+ CValue& value = pArrayValue->get(i);
+ if (value.IsUndefined())
+ strRes += "null";
+ else
+ strRes += value.ToJSON();
+ strRes += ',';
+ }
+ // remove last ','
+ if (strRes.back() == ',')
+ strRes.pop_back();
+ strRes += "]";
+ break;
+ }
+ case CTypedValue::vtTypedArray:
+ {
+ CTypedArray* pTypedArrayValue = static_cast(m_internal->m_value.get());
+ strRes += "{";
+ const int size = pTypedArrayValue->getCount();
+ BYTE* data = pTypedArrayValue->getData();
+ for (int i = 0; i < size; i++)
+ {
+ strRes += "\"" + std::to_string(i) + "\":";
+ strRes += std::to_string((int)data[i]);
+ strRes += ',';
+ }
+ // remove last ','
+ if (strRes.back() == ',')
+ strRes.pop_back();
+ strRes += "}";
+ break;
+ }
+ case CTypedValue::vtObject:
+ {
+ CObject* pObjectValue = static_cast(m_internal->m_value.get());
+ strRes += "{";
+ std::vector propertyNames = pObjectValue->getPropertyNames();
+ const int count = propertyNames.size();
+ for (int i = 0; i < count; i++)
+ {
+ CValue& value = pObjectValue->get(propertyNames[i]);
+ if (value.IsUndefined())
+ continue;
+
+ strRes += "\"" + propertyNames[i] + "\":";
+ strRes += value.ToJSON();
+ strRes += ',';
+ }
+ // remove last ','
+ if (strRes.back() == ',')
+ strRes.pop_back();
+ strRes += "}";
+ break;
+ }
+ }
+
+ return strRes;
+ }
+
IValue::IValue(bool value) : m_internal(new CTypedValue(new CPrimitive(value), CTypedValue::vtPrimitive))
{
}
@@ -430,6 +610,324 @@ namespace NSJSON
return ret;
}
+ namespace
+ {
+ // moves pos to first non-space symbol and returns false if end of the string was reached
+ bool skipWhitespaces(const std::string& str, int& pos)
+ {
+ for (; pos < str.size(); pos++)
+ {
+ char ch = str[pos];
+ if (ch != '\t' && ch != '\n' && ch != '\r' && ch != ' ')
+ break;
+ }
+ return pos < str.size();
+ }
+
+ CValue parseNumberFromJSON(const std::string& str, int& pos)
+ {
+ const char* startPos = str.c_str() + pos;
+ char* newPos;
+ double number = std::strtod(startPos, &newPos);
+ if (newPos == startPos)
+ return CValue();
+
+ CValue value;
+ if (std::isfinite(number))
+ {
+ // check if number can be represented as an integer type without loss of precision
+ double integral; // integral part
+ double fractional = std::modf(number, &integral); // fractional part
+ if (fractional == 0.0 && integral >= std::numeric_limits::min() && integral <= std::numeric_limits::max())
+ value = (int)integral;
+ else
+ value = number;
+ }
+ else
+ {
+ value = number;
+ }
+
+ pos += newPos - startPos;
+ return value;
+ }
+
+ CValue parseStringFromJSON(const std::string& str, int& pos)
+ {
+ // skip '\"' cause it has already been checked
+ pos++;
+ std::string result;
+ while (pos < str.size() && str[pos] != '\"')
+ {
+ // any non-escaped control characters are not allowed
+ if (str[pos] < 0x20)
+ return CValue();
+
+ if (str[pos] != '\\')
+ {
+ result += str[pos++];
+ }
+ else
+ {
+ pos++;
+ if (pos >= str.size())
+ return CValue();
+
+ char ch = str[pos++];
+ if (ch == '\\' || ch == '\"' || ch == '/')
+ {
+ result += ch;
+ }
+ else if (ch == 'b')
+ {
+ result += '\b';
+ }
+ else if (ch == 't')
+ {
+ result += '\t';
+ }
+ else if (ch == 'n')
+ {
+ result += '\n';
+ }
+ else if (ch == 'f')
+ {
+ result += '\f';
+ }
+ else if (ch == 'r')
+ {
+ result += '\r';
+ }
+ else if (ch == 'u')
+ {
+ if (str.size() - pos < 4)
+ return CValue();
+ // TODO: support unicode symbols with codes > U+0020
+ if (str[pos] != '0' || str[pos + 1] != '0')
+ return CValue();
+ pos += 2;
+ std::string strHex = str.substr(pos, 2);
+ pos += 2;
+ // std::stoi throws std::invalid_argument if string is invalid
+ try
+ {
+ std::size_t count;
+ char symbol = (char)std::stoi(strHex, &count, 16);
+ if (count < 2)
+ return CValue();
+
+ result += symbol;
+ }
+ catch (std::invalid_argument& e)
+ {
+ return CValue();
+ }
+ }
+ else
+ {
+ return CValue();
+ }
+ }
+ }
+ // if did not encounter closing qoutes, return undefined
+ if (pos == str.size())
+ return CValue();
+ pos++;
+
+ return result;
+ }
+
+ // parse one value of JSON-string `str` starting from `pos`
+ CValue valueFromJSON(const std::string& str, int& pos);
+
+ CValue parseArrayFromJSON(const std::string& str, int& pos)
+ {
+ // skip opening bracket '[' cause it has already been checked
+ pos++;
+ // handle first element separately to get pattern: [(firstValue)(,value)(,value)...]
+ CValue firstValue = valueFromJSON(str, pos);
+ if (firstValue.IsUndefined())
+ {
+ if (pos < str.size() && str[pos] == ']')
+ {
+ pos++;
+ return CValue::CreateArray(0);
+ }
+ else
+ {
+ return CValue();
+ }
+ }
+
+ std::vector values;
+ values.emplace_back(firstValue);
+ while (skipWhitespaces(str, pos) && str[pos] != ']')
+ {
+ // expect ','
+ if (str[pos] != ',')
+ return CValue();
+ pos++;
+ // expect value
+ CValue value = valueFromJSON(str, pos);
+ if (value.IsUndefined())
+ return CValue();
+ values.emplace_back(value);
+ }
+ // if did not encounter closing bracket ']', return undefined
+ if (pos == str.size())
+ return CValue();
+ pos++;
+
+ // copy values from vector to CValue array
+ CValue result = CValue::CreateArray(values.size());
+ for (int i = 0; i < values.size(); i++)
+ {
+ result[i] = values[i];
+ }
+
+ return result;
+ }
+
+ std::pair parseKeyValuePair(const std::string& str, int& pos)
+ {
+ std::pair result;
+
+ if (!skipWhitespaces(str, pos) || str[pos] != '\"')
+ return result;
+ // parse key
+ CValue key = parseStringFromJSON(str, pos);
+ if (key.IsUndefined())
+ return result;
+ result.first = key.ToStringA();
+ // expect ':'
+ if (!skipWhitespaces(str, pos) || str[pos] != ':')
+ return result;
+ pos++;
+ // parse value
+ CValue value = valueFromJSON(str, pos);
+ if (value.IsUndefined())
+ return result;
+ result.second = value;
+
+ return result;
+ }
+
+ CValue parseObjectFromJSON(const std::string& str, int& pos)
+ {
+ CValue result = CValue::CreateObject();
+ // skip opening curly brace '{' cause it has already been checked
+ pos++;
+ // handle first key-value pair separately to get pattern: [(firstKey:firstValue)(,key:value)(,key:value)...]
+ std::pair keyValue = parseKeyValuePair(str, pos);
+ // if value is undefined, then something went wrong or object is empty
+ if (keyValue.second.IsUndefined())
+ {
+ if (pos < str.size() && str[pos] == '}' && keyValue.first.empty())
+ {
+ pos++;
+ return result;
+ }
+ else
+ {
+ return CValue();
+ }
+ }
+
+ result[keyValue.first.c_str()] = keyValue.second;
+ while (skipWhitespaces(str, pos) && str[pos] != '}')
+ {
+ // expect ','
+ if (str[pos] != ',')
+ return CValue();
+ pos++;
+ // expect key-value pair
+ std::pair keyValue = parseKeyValuePair(str, pos);
+ if (keyValue.second.IsUndefined())
+ return CValue();
+ result[keyValue.first.c_str()] = keyValue.second;
+ }
+ // if did not encounter closing curly brace '}', return undefined
+ if (pos == str.size())
+ return CValue();
+ pos++;
+
+ return result;
+ }
+
+ CValue valueFromJSON(const std::string& str, int& pos)
+ {
+ if (!skipWhitespaces(str, pos))
+ return CValue();
+
+ CValue value;
+ char ch = str[pos];
+ if (ch == '\"')
+ {
+ // string
+ value = parseStringFromJSON(str, pos);
+ }
+ else if (ch == '[')
+ {
+ // array
+ value = parseArrayFromJSON(str, pos);
+ }
+ else if (ch == '{')
+ {
+ // object
+ value = parseObjectFromJSON(str, pos);
+ }
+ else if (ch == 'n')
+ {
+ // null
+ if (str.substr(pos, 4) == "null")
+ value = CValue::CreateNull();
+ else
+ return CValue();
+ pos += 4;
+ }
+ else if (ch == 't')
+ {
+ // true (bool)
+ if (str.substr(pos, 4) == "true")
+ value = true;
+ else
+ return CValue();
+ pos += 4;
+ }
+ else if (ch == 'f')
+ {
+ // false (bool)
+ if (str.substr(pos, 5) == "false")
+ value = false;
+ else
+ return CValue();
+ pos += 5;
+ }
+ else if (ch == '-' || (ch >= '0' && ch <= '9'))
+ {
+ value = parseNumberFromJSON(str, pos);
+ }
+ else
+ {
+ return CValue();
+ }
+
+ return value;
+ }
+ }
+
+ CValue CValue::FromJSON(const std::string& jsonString)
+ {
+ int pos = 0;
+ CValue value = valueFromJSON(jsonString, pos);
+ // if there are still some non-space characters after the value has been parsed,
+ // the JSON-string is considered invalid
+ if (skipWhitespaces(jsonString, pos))
+ return CValue();
+
+ return value;
+ }
+
CValueRef::CValueRef(const CValueRef& other) : IValue(other.m_internal)
{
}
diff --git a/DesktopEditor/doctrenderer/json/json.h b/DesktopEditor/doctrenderer/json/json.h
index efd9ac6ae6..ada6baaf03 100644
--- a/DesktopEditor/doctrenderer/json/json.h
+++ b/DesktopEditor/doctrenderer/json/json.h
@@ -123,6 +123,14 @@ namespace NSJSON
operator std::string() const;
operator std::wstring() const;
+ public:
+ // JSON CONVERSION
+ /**
+ * Converts this value to a JSON-string.
+ * @return The JSON-string or empty string in case of errors.
+ */
+ std::string ToJSON();
+
protected:
// Creates a value from primitive types
IValue(bool value);
@@ -259,6 +267,14 @@ namespace NSJSON
*/
static CValue CreateNull();
+ // JSON CONVERSION
+ /**
+ * Creates and returns new value from JSON-string.
+ * @param jsonString The JSON-string from which new value will be created.
+ * @returns created value. If JSON-string is invalid, value will be undefined.
+ */
+ static CValue FromJSON(const std::string& jsonString);
+
friend class CValueRef;
};
diff --git a/DesktopEditor/doctrenderer/test/json/main.cpp b/DesktopEditor/doctrenderer/test/json/main.cpp
index be3ada4908..61e945e8ef 100644
--- a/DesktopEditor/doctrenderer/test/json/main.cpp
+++ b/DesktopEditor/doctrenderer/test/json/main.cpp
@@ -3,6 +3,7 @@
#ifdef JSON_GOOGLE_TEST
#include "gtest/gtest.h"
#include
+#include
#else
#include
#endif
@@ -899,6 +900,1083 @@ TEST_F(CJSONTest, serialization_with_script)
EXPECT_TRUE(compare(obj, args[0]));
}
+// ----------- CValue::ToJSON() tests -----------
+namespace
+{
+ // helper function
+ std::string normalizeJSONObject(const std::string& str, int& pos)
+ {
+ // '{' was checked
+ pos++;
+
+ std::vector keyValuePairs;
+ std::string keyValue;
+ int nSquareBrackets = 0;
+
+ for (; str[pos] != '}'; pos++)
+ {
+ if (str[pos] == '{')
+ {
+ keyValue += normalizeJSONObject(str, pos);
+ }
+ else if (str[pos] == ',' && nSquareBrackets == 0)
+ {
+ keyValuePairs.emplace_back(std::move(keyValue));
+ keyValue = "";
+ }
+ else
+ {
+ if (str[pos] == '[')
+ {
+ nSquareBrackets++;
+ }
+ else if (str[pos] == ']')
+ {
+ nSquareBrackets--;
+ }
+ keyValue += str[pos];
+ }
+ }
+
+ if (!keyValue.empty())
+ keyValuePairs.emplace_back(std::move(keyValue));
+
+ std::sort(keyValuePairs.begin(), keyValuePairs.end());
+ std::string result = "{";
+ for (const std::string& keyValue : keyValuePairs)
+ {
+ result += keyValue;
+ result += ',';
+ }
+ // pop last ','
+ if (result.back() == ',')
+ result.pop_back();
+ result += '}';
+
+ return result;
+ }
+
+ // test function that sorts key-value pairs for objects in JSON-strings
+ // works only with valid JSONs
+ std::string normalizeJSON(const std::string& str)
+ {
+ const int n = (int)str.size();
+
+ if (str[0] != '{' && str[0] != '[')
+ return str;
+
+ std::string result;
+ for (int pos = 0; pos < n; pos++)
+ {
+ if (str[pos] == '{')
+ {
+ result += normalizeJSONObject(str, pos);
+ // decrement because it will be incremented again
+ }
+ else
+ {
+ result += str[pos];
+ }
+ }
+
+ return result;
+ }
+}
+
+TEST_F(CJSONTest, ToJSON_undefined)
+{
+ CValue val = CValue::CreateUndefined();
+ EXPECT_EQ(val.ToJSON(), "");
+}
+
+TEST_F(CJSONTest, ToJSON_null)
+{
+ CValue val = CValue::CreateNull();
+ EXPECT_EQ(val.ToJSON(), "null");
+}
+
+TEST_F(CJSONTest, ToJSON_bool)
+{
+ CValue val(false);
+ EXPECT_EQ(val.ToJSON(), "false");
+ val = true;
+ EXPECT_EQ(val.ToJSON(), "true");
+}
+
+TEST_F(CJSONTest, ToJSON_int)
+{
+ CValue val = 42;
+ EXPECT_EQ(val.ToJSON(), "42");
+ val = 0;
+ EXPECT_EQ(val.ToJSON(), "0");
+ val = -73;
+ EXPECT_EQ(val.ToJSON(), "-73");
+ val = INT_MIN;
+ EXPECT_EQ(val.ToJSON(), "-2147483648");
+ val = INT_MAX;
+ EXPECT_EQ(val.ToJSON(), "2147483647");
+}
+
+TEST_F(CJSONTest, ToJSON_double)
+{
+ CValue val = 4.2;
+ EXPECT_EQ(val.ToJSON(), "4.2");
+ val = 42.0;
+ EXPECT_EQ(val.ToJSON(), "42");
+ val = 0.0;
+ EXPECT_EQ(val.ToJSON(), "0");
+ val = 3.1415926535;
+ EXPECT_EQ(val.ToJSON(), "3.1415926535");
+ val = (double)INT_MIN;
+ EXPECT_EQ(val.ToJSON(), "-2147483648");
+ val = (double)INT_MAX;
+ EXPECT_EQ(val.ToJSON(), "2147483647");
+}
+
+TEST_F(CJSONTest, ToJSON_double_critical_values)
+{
+ CValue val = 8e30;
+ EXPECT_EQ(val.ToJSON(), "8e+30");
+ val = 8e-30;
+ EXPECT_EQ(val.ToJSON(), "8e-30");
+
+ val = INFINITY;
+ EXPECT_EQ(val.ToJSON(), "null");
+ val = NAN;
+ EXPECT_EQ(val.ToJSON(), "null");
+ val = -INFINITY;
+ EXPECT_EQ(val.ToJSON(), "null");
+
+ val = std::numeric_limits::max();
+ std::string strResult = val.ToJSON();
+ // we cannot expect predefined specified result from this test case so just check if it is not empty
+ EXPECT_TRUE(!strResult.empty());
+ EXPECT_TRUE(strResult != "null");
+
+ val = std::numeric_limits::min();
+ strResult = val.ToJSON();
+ // we cannot expect predefined specified result from this test case so just check if it is not empty
+ EXPECT_TRUE(!strResult.empty());
+ EXPECT_TRUE(strResult != "null");
+}
+
+TEST_F(CJSONTest, ToJSON_string)
+{
+ CValue val = " test ";
+ EXPECT_EQ(val.ToJSON(), "\" test \"");
+ val = "";
+ EXPECT_EQ(val.ToJSON(), "\"\"");
+ val = L" test ";
+ EXPECT_EQ(val.ToJSON(), "\" test \"");
+ // test parsing of special symbols inside strings
+ val = "foo: {bar: 42}[} ,))";
+ EXPECT_EQ(val.ToJSON(), "\"foo: {bar: 42}[} ,))\"");
+}
+
+TEST_F(CJSONTest, ToJSON_string_escaped_characters)
+{
+ CValue val = "HEL\"LO";
+ std::string strRes = val.ToJSON();
+ EXPECT_EQ(strRes, "\"HEL\\\"LO\"");
+
+ val = "HEL\\/LO";
+ strRes = val.ToJSON();
+ EXPECT_EQ(strRes, "\"HEL\\\\/LO\"");
+
+ val = "\tH\bE\fL\nL\nO\r";
+ strRes = val.ToJSON();
+ EXPECT_EQ(strRes, "\"\\tH\\bE\\fL\\nL\\nO\\r\"");
+
+ // other symbols
+ std::string spec = "/";
+ for (char ch = 0; ch <= 0x21; ch++)
+ {
+ spec += ch;
+ }
+ spec += '/';
+
+ val = spec;
+ strRes = val.ToJSON();
+ EXPECT_EQ(strRes, "\"/\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b"
+ "\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017"
+ "\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !/\"");
+}
+
+TEST_F(CJSONTest, ToJSON_typed_arrays)
+{
+ BYTE* data = CValue::AllocTypedArray(4);
+ data[0] = 0x1A;
+ data[1] = 0x54;
+ data[2] = 0xFE;
+ data[3] = 0xFF;
+ CValue typedArr = CValue::CreateTypedArray(data, 4, false);
+ EXPECT_EQ(typedArr.ToJSON(), "{\"0\":26,\"1\":84,\"2\":254,\"3\":255}");
+}
+
+TEST_F(CJSONTest, ToJSON_arrays)
+{
+ CValue arr = CValue::CreateArray(0);
+ EXPECT_EQ(arr.ToJSON(), "[]");
+
+ arr = CValue::CreateArray(4);
+ arr[0] = 42;
+ arr[1] = "foo";
+ arr[2] = 2.71828;
+ EXPECT_EQ(arr.ToJSON(), "[42,\"foo\",2.71828,null]");
+
+ CValue arrInner = {CValue::CreateNull(), 73.0};
+ arr[3] = arrInner;
+ EXPECT_EQ(arr.ToJSON(), "[42,\"foo\",2.71828,[null,73]]");
+}
+
+TEST_F(CJSONTest, ToJSON_arrays_complex)
+{
+ BYTE* data = CValue::AllocTypedArray(5);
+ data[0] = 0x1A;
+ data[1] = 0x54;
+ data[2] = 0xFE;
+ data[3] = 0xFF;
+ data[4] = 0x00;
+ CValue typedArr = CValue::CreateTypedArray(data, 5, false);
+
+ CValue arrInner = {true, 42, L"test function ToJSON()", 2.71828, CValue(), "abc de f", L"test"};
+ CValue arr = {0, arrInner, arrInner, CValue::CreateNull(), arrInner, CValue::CreateArray(4), typedArr};
+
+ std::string strRes = arr.ToJSON();
+ std::string strExpected = "[0,"
+ "[true,42,\"test function ToJSON()\",2.71828,null,\"abc de f\",\"test\"],"
+ "[true,42,\"test function ToJSON()\",2.71828,null,\"abc de f\",\"test\"],"
+ "null,"
+ "[true,42,\"test function ToJSON()\",2.71828,null,\"abc de f\",\"test\"],"
+ "[null,null,null,null],"
+ "{\"0\":26,\"1\":84,\"2\":254,\"3\":255,\"4\":0}]";
+
+ EXPECT_EQ(strRes, strExpected);
+}
+
+TEST_F(CJSONTest, ToJSON_arrays_circular)
+{
+ // NOTE: BE CAREFULL WHEN CREATING CIRCULAR REFERENCE DEPENDENCY IN YOUR ARRAY OR OBJECT!
+ CValue arr = CValue::CreateArray(2);
+ CValue ref = arr;
+ arr[0] = 3;
+ arr[1] = ref;
+
+ // here you will get stack overflow, because each inner array reference will be recursively converted to JSON-string
+ // arr.ToJSON();
+
+ // remove recursions
+ CValue arrRec = arr[1][1];
+ arrRec[1] = 42;
+
+ EXPECT_EQ(arr.ToJSON(), "[3,42]");
+}
+
+TEST_F(CJSONTest, ToJSON_objects)
+{
+ CValue obj = CValue::CreateObject();
+ EXPECT_EQ(obj.ToJSON(), "{}");
+
+ obj["name"] = "Foo";
+ obj["number"] = 42;
+ std::string strRes = normalizeJSON(obj.ToJSON());
+ std::string strExpected = normalizeJSON("{\"name\":\"Foo\",\"number\":42}");
+ EXPECT_EQ(strRes, strExpected);
+
+ obj["undef"] = CValue::CreateUndefined();
+ obj["null"] = CValue::CreateNull();
+ strRes = normalizeJSON(obj.ToJSON());
+ strExpected = normalizeJSON("{\"name\":\"Foo\",\"number\":42,\"null\":null}");
+ EXPECT_EQ(strRes, strExpected);
+}
+
+TEST_F(CJSONTest, ToJSON_objects_complex)
+{
+ CValue obj = CValue::CreateObject();
+
+ obj["name"] = L"Foo";
+ obj["parameters"] = CValue::CreateObject();
+ CValueRef parameters = obj["parameters"];
+ parameters["0"] = 0;
+ parameters["size"] = 42;
+ parameters["arr"] = {CValue::CreateNull(), CValue::CreateArray(1), {42, L"test function ToJSON()", 2.71828}, CValue::CreateObject(), CValue(), "abc de f", L"test"};
+
+ BYTE* data = CValue::AllocTypedArray(4);
+ data[0] = 0x1A;
+ data[1] = 0x54;
+ data[2] = 0xFE;
+ data[3] = 0xFF;
+ CValue typedArr = CValue::CreateTypedArray(data, 4, false);
+ obj["typed"] = typedArr;
+ // property without a name
+ obj[""] = "Bar";
+
+ std::string strRes = normalizeJSON(obj.ToJSON());
+ std::string strExpected = normalizeJSON( \
+ "{"
+ "\"name\":\"Foo\","
+ "\"parameters\":{\"arr\":[null,[null],[42,\"test function ToJSON()\",2.71828],{},null,\"abc de f\",\"test\"],\"size\":42,\"0\":0},"
+ "\"typed\":{\"0\":26,\"1\":84,\"2\":254,\"3\":255},"
+ "\"\":\"Bar\""
+ "}");
+
+ EXPECT_EQ(strRes, strExpected);
+}
+
+// ----------- CValue::FromJSON() tests -----------
+TEST_F(CJSONTest, FromJSON_null)
+{
+ std::string strJson = "null";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsNull());
+}
+
+TEST_F(CJSONTest, FromJSON_null_invalid)
+{
+ // empty json string is invalid
+ std::string strJson = "";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // there is no undefined in JSON standard
+ strJson = "undefined";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "nil";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "n";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "NULL";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "nullptr";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+}
+
+TEST_F(CJSONTest, FromJSON_bool)
+{
+ std::string strJson = "false";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsBool());
+ EXPECT_EQ((bool)val, false);
+
+ strJson = "true ";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsBool());
+ EXPECT_EQ((bool)val, true);
+}
+
+TEST_F(CJSONTest, FromJSON_bool_invalid)
+{
+ std::string strJson = "fals";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "truE";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "f";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "t";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "True";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+}
+
+TEST_F(CJSONTest, FromJSON_int)
+{
+ std::string strJson = "42";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, 42);
+
+ strJson = "0";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, 0);
+
+ strJson = "-73";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, -73);
+
+ strJson = "-2147483648";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, std::numeric_limits::min());
+
+ strJson = "2147483647";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, std::numeric_limits::max());
+
+ strJson = "2147483648";
+ val = CValue::FromJSON(strJson);
+ // this value does not fit into 32-bit integer limits
+ EXPECT_FALSE(val.IsInt());
+ EXPECT_TRUE(val.IsDouble());
+}
+
+TEST_F(CJSONTest, FromJSON_double)
+{
+ std::string strJson = "4.2";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_DOUBLE_EQ((double)val, 4.2);
+
+ strJson = "42.0";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, 42);
+
+ strJson = "0.0";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, 0);
+
+ strJson = "3.1415926535";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_DOUBLE_EQ((double)val, 3.1415926535);
+
+ strJson = "2147483648";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_DOUBLE_EQ((double)val, 2147483648.0);
+}
+
+TEST_F(CJSONTest, FromJSON_double_critical_values)
+{
+ std::string strJson = "-8e30";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_DOUBLE_EQ((double)val, -8e30);
+
+ strJson = "8e+30";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_DOUBLE_EQ((double)val, 8e30);
+
+ strJson = "8e-30";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_DOUBLE_EQ((double)val, 8e-30);
+
+ // divide by 10 to prevent getting 'inf' when converting to string
+ CValue maxDouble = std::numeric_limits::max() / 10;
+ strJson = maxDouble.ToJSON();
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_NEAR((double)val, (double)maxDouble, 1e-15 * std::numeric_limits::max());
+
+ // multiply by 10 to prevent getting '0' when converting to string
+ CValue minDouble = std::numeric_limits::min() * 10;
+ strJson = minDouble.ToJSON();
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_NEAR((double)val, (double)minDouble, 1e-15);
+
+ // if value is outside of double range, it is expected to be inf
+ strJson = "10e+1000";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_EQ((double)val, INFINITY);
+
+ strJson = "-10e1000";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_EQ((double)val, -INFINITY);
+
+ // expected zero for too small values
+ strJson = "10e-1000";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_EQ((double)val, 0.0);
+}
+
+TEST_F(CJSONTest, FromJSON_numbers_invalid)
+{
+ // leading zeroes are invalid in JSON standard, but here it is considered valid
+ std::string strJson = "0123";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, 123);
+ // multiple decimal points
+ strJson = "12.34.56";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // trailing decimal point also considered invalid in JSON, but allowed here
+ strJson = "42.";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsDouble());
+ EXPECT_EQ((int)val, 42);
+ // invalid exponent format
+ strJson = "1e";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "1e+";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "1e+a";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "1e+-";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // invalid characters
+ strJson = "123abc";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "123\"abc\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "123-42";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // sign without digits
+ strJson = "-";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // sign without digits
+ strJson = "-";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // whitespace in numbers
+ strJson = "1 234";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "1 a";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+}
+
+TEST_F(CJSONTest, FromJSON_string)
+{
+ std::string strJson = "\" test \"";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), " test ");
+
+ strJson = "\"\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), "");
+
+ // test for parsing of special symbols inside strings
+ strJson = "\"foo: {bar: 42}[} ,))\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), "foo: {bar: 42}[} ,))");
+
+ // test for using unicode codes instead of ASCII characters
+ strJson = "\"\\u0061\\u006E\\u0073\\u0077\\u0065\\u0072\\u0020\\u0069\\u0073\\u0020\\u0034\\u0032\\u0021\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), "answer is 42!");
+}
+
+TEST_F(CJSONTest, FromJSON_string_escaped_characters)
+{
+ std::string strJson = "\"\\\\\"";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), "\\");
+
+ strJson = "\"HEL\\\"LO\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), "HEL\"LO");
+
+ strJson = "\"HEL\\\\/LO\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), "HEL\\/LO");
+
+ strJson = "\"\\tH\\bE\\fL\\nL\\nO\\r\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), "\tH\bE\fL\nL\nO\r");
+
+ // characters from 0x00 to 0x21 (inclusive)
+ strJson = "\"/\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b"
+ "\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017"
+ "\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\/\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+
+ std::string spec = "/";
+ for (char ch = 0; ch <= 0x21; ch++)
+ {
+ spec += ch;
+ }
+ spec += '/';
+
+ EXPECT_EQ(val.ToStringA(), spec);
+}
+
+TEST_F(CJSONTest, FromJSON_string_invalid)
+{
+ // using unescaped control characters
+ std::string strJson = "\"this\nis a test";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = "\"\t\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // no closing quote
+ strJson = "\" test ";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // no symbol after backslash
+ strJson = "\"\\\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // wrong symbol after backslash
+ strJson = "\"\\x\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // invalid unicode sequence
+ strJson = "\"\\u\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "\"\\u00\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "\"\\u0100\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "\"\\u001\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "\"\\u00GH\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "\"\\u00fH\"";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+}
+
+TEST_F(CJSONTest, FromJSON_whitespace_symbols)
+{
+ // allowed space symbols are: 0x09 (\t), 0x0A (\n), 0x0D (\r) and 0x20 (space)
+ std::string strJson = " null ";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsNull());
+
+ strJson = "\t \n\n42\r";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsInt());
+ EXPECT_EQ((int)val, 42);
+
+ strJson = "\n\t \" foo\\n \"\n \t\n";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsString());
+ EXPECT_EQ(val.ToStringA(), " foo\n ");
+
+ strJson = " \t\v 42 \t";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+
+ strJson = " a 42 \t";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+}
+
+TEST_F(CJSONTest, FromJSON_arrays)
+{
+ std::string strJson = "[]";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 0);
+ EXPECT_TRUE(val[0].IsUndefined());
+
+ strJson = "[1, 2, 3]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 3);
+ EXPECT_EQ((int)val[0], 1);
+ EXPECT_EQ((int)val[1], 2);
+ EXPECT_EQ((int)val[2], 3);
+
+ strJson = " [ \"][\" ] ";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 1);
+ EXPECT_EQ(val[0].ToStringA(), "][");
+
+ strJson = " [ 73 , null\n\t,4.2]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 3);
+ EXPECT_EQ((int)val[0], 73);
+ EXPECT_TRUE(val[1].IsNull());
+ EXPECT_DOUBLE_EQ((double)val[2], 4.2);
+
+ strJson = "[1, \"two\", 3.14, true, null]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 5);
+ EXPECT_EQ(val[0].ToInt(), 1);
+ EXPECT_EQ(val[1].ToStringA(), "two");
+ EXPECT_DOUBLE_EQ(val[2].ToDouble(), 3.14);
+ EXPECT_TRUE(val[3].ToBool());
+ EXPECT_TRUE(val[4].IsNull());
+}
+
+TEST_F(CJSONTest, FromJSON_arrays_inner)
+{
+ std::string strJson = "[[1, 2, 3]]";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 1);
+ EXPECT_TRUE(val[0].IsArray());
+ EXPECT_EQ(val[0].GetCount(), 3);
+ EXPECT_EQ((int)val[0][0], 1);
+ EXPECT_EQ((int)val[0][1], 2);
+ EXPECT_EQ((int)val[0][2], 3);
+
+ strJson = "[1, [2, 3], [4, [5, 6]], 7]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 4);
+ EXPECT_EQ((int)val[0], 1);
+ EXPECT_TRUE(val[1].IsArray());
+ EXPECT_EQ(val[1].GetCount(), 2);
+ EXPECT_EQ((int)val[1][0], 2);
+ EXPECT_EQ((int)val[1][1], 3);
+ EXPECT_TRUE(val[2].IsArray());
+ EXPECT_EQ(val[2].GetCount(), 2);
+ EXPECT_EQ((int)val[2][0], 4);
+ EXPECT_TRUE(val[2][1].IsArray());
+ EXPECT_EQ(val[2][1].GetCount(), 2);
+ EXPECT_EQ((int)val[2][1][0], 5);
+ EXPECT_EQ((int)val[2][1][1], 6);
+ EXPECT_EQ((int)val[3], 7);
+
+ strJson = "[[],[[]],[[],[]]]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsArray());
+ EXPECT_EQ(val.GetCount(), 3);
+ EXPECT_TRUE(val[0].IsArray());
+ EXPECT_EQ(val[0].GetCount(), 0);
+ EXPECT_TRUE(val[1].IsArray());
+ EXPECT_EQ(val[1].GetCount(), 1);
+ EXPECT_TRUE(val[1][0].IsArray());
+ EXPECT_EQ(val[1][0].GetCount(), 0);
+ EXPECT_TRUE(val[2].IsArray());
+ EXPECT_EQ(val[2].GetCount(), 2);
+ EXPECT_TRUE(val[2][0].IsArray());
+ EXPECT_EQ(val[2][0].GetCount(), 0);
+ EXPECT_TRUE(val[2][1].IsArray());
+ EXPECT_EQ(val[2][1].GetCount(), 0);
+}
+
+TEST_F(CJSONTest, FromJSON_arrays_invalid)
+{
+ // no closing bracket
+ std::string strJson = "[";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "[1,2,3";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // trailing comma
+ strJson = "[1,2,]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // leading comma
+ strJson = "[,1]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // missing comma
+ strJson = "[1 2, 3]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // extra commas
+ strJson = "[1,,2,3]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "[,]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // invalid elements
+ strJson = "[1, 2, undefined, 4]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // non-JSON values as elements
+ strJson = "[1, 2, f(), 4]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // invalid syntax within elements
+ strJson = "[\"foo\", 123, [1, 2, }, 4]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // whitespace issues
+ strJson = "[1, 2 3, 4]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // empty array without brackets
+ strJson = "]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // extra brackets
+ strJson = "[[1, 2, 3]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "[1, 2, 3]]";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // elements outside of the array
+ strJson = "[1, 2, 3], 5";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "[1, 2, 3] 4";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+}
+
+TEST_F(CJSONTest, FromJSON_objects)
+{
+ std::string strJson = "{}";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ(val.GetPropertyNames().size(), 0);
+
+ strJson = "{\"name\" : \"Foo\"}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ(val.GetPropertyNames().size(), 1);
+ EXPECT_EQ(val["name"].ToStringA(), "Foo");
+
+ strJson = "{\"name\":\"Bar\",\"value\":42}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ(val.GetPropertyNames().size(), 2);
+ EXPECT_EQ(val["name"].ToStringA(), "Bar");
+ EXPECT_EQ((int)val["value"], 42);
+
+ strJson = "{\"\\u0070\\u0069\":\n3.1415\t, \"\":null ,\"flag\":true,\"arr \":[4,2],\"str\":\"test\"}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ(val.GetPropertyNames().size(), 5);
+ EXPECT_DOUBLE_EQ((double)val["pi"], 3.1415);
+ EXPECT_TRUE(val[""].IsNull());
+ EXPECT_EQ((bool)val["flag"], true);
+ EXPECT_TRUE(val["arr "].IsArray());
+ EXPECT_EQ(val["arr "].GetCount(), 2);
+ EXPECT_EQ((int)val["arr "][0], 4);
+ EXPECT_EQ((int)val["arr "][1], 2);
+ EXPECT_EQ(val["str"].ToStringA(), "test");
+}
+
+TEST_F(CJSONTest, FromJSON_objects_as_typed_arrays)
+{
+ // typed arrays in JSON are represented as objects with properties "0", "1", ... and corresponding integer values
+ // if you still want to make typed array from such object, you need to do it manually
+ std::string strJson = "{\"0\":26,\"1\":179,\"2\":254,\"3\":255,\"4\":0}";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ((int)val["0"], 26);
+ EXPECT_EQ((int)val["1"], 179);
+ EXPECT_EQ((int)val["2"], 254);
+ EXPECT_EQ((int)val["3"], 255);
+ EXPECT_EQ((int)val["4"], 0);
+}
+
+TEST_F(CJSONTest, FromJSON_objects_inner)
+{
+ std::string strJson = "{\"inner\":{}}";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ(val.GetPropertyNames().size(), 1);
+ EXPECT_TRUE(val["inner"].IsObject());
+ EXPECT_TRUE(val["inner"].GetPropertyNames().empty());
+}
+
+TEST_F(CJSONTest, FromJSON_objects_and_arrays)
+{
+ // more complex example
+ std::string strJson = \
+ "{\n"
+ " \"name\": \"Foo\",\n"
+ " \"parameters\": {\n"
+ " \"size\": 42,\n"
+ " \"arr\": [\n"
+ " null,\n"
+ " [],\n"
+ " [42, \"test\", 2.71828],\n"
+ " {\n"
+ " \"name\": \"Bar\",\n"
+ " \"good\": false\n"
+ " },\n"
+ " null,\n"
+ " \"abc de f\",\n"
+ " \"\"\n"
+ " ],\n"
+ " \"0\": 0,\n"
+ " \"data\": {\n"
+ " \"data\": null,\n"
+ " \"count\": 0\n"
+ " }\n"
+ " },\n"
+ " \"\": \"empty\"\n"
+ "}\n";
+
+ CValue val = CValue::FromJSON(strJson);
+
+ // Check root-level object
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ(val.GetPropertyNames().size(), 3);
+ // Check "name" property
+ EXPECT_EQ(val["name"].ToStringA(), "Foo");
+ // Check "parameters" object
+ EXPECT_TRUE(val["parameters"].IsObject());
+ EXPECT_EQ(val["parameters"].GetPropertyNames().size(), 4);
+ // Check "size" property
+ EXPECT_EQ((int)val["parameters"]["size"], 42);
+ // Check "arr" property (array)
+ EXPECT_TRUE(val["parameters"]["arr"].IsArray());
+ EXPECT_EQ(val["parameters"]["arr"].GetCount(), 7);
+ // First element of "arr" (null)
+ EXPECT_TRUE(val["parameters"]["arr"][0].IsNull());
+ // Second element of "arr" (empty array)
+ EXPECT_TRUE(val["parameters"]["arr"][1].IsArray());
+ EXPECT_EQ(val["parameters"]["arr"][1].GetCount(), 0);
+ // Third element of "arr" (array with mixed types)
+ EXPECT_TRUE(val["parameters"]["arr"][2].IsArray());
+ EXPECT_EQ(val["parameters"]["arr"][2].GetCount(), 3);
+ EXPECT_EQ((int)val["parameters"]["arr"][2][0], 42);
+ EXPECT_EQ(val["parameters"]["arr"][2][1].ToStringA(), "test");
+ EXPECT_DOUBLE_EQ((double)val["parameters"]["arr"][2][2], 2.71828);
+ // Fourth element of "arr" (object)
+ EXPECT_TRUE(val["parameters"]["arr"][3].IsObject());
+ EXPECT_EQ(val["parameters"]["arr"][3].GetPropertyNames().size(), 2);
+ EXPECT_EQ(val["parameters"]["arr"][3]["name"].ToStringA(), "Bar");
+ EXPECT_TRUE(val["parameters"]["arr"][3]["good"].IsBool());
+ EXPECT_FALSE(val["parameters"]["arr"][3]["good"]);
+ // Fifth element of "arr" (null)
+ EXPECT_TRUE(val["parameters"]["arr"][4].IsNull());
+ // Sixth element of "arr" (string)
+ EXPECT_EQ(val["parameters"]["arr"][5].ToStringA(), "abc de f");
+ // Seventh element of "arr" (empty string)
+ EXPECT_EQ(val["parameters"]["arr"][6].ToStringA(), "");
+ // Check "0" property (numeric value)
+ EXPECT_EQ((int)val["parameters"]["0"], 0);
+ // Check "data" object inside "parameters"
+ EXPECT_TRUE(val["parameters"]["data"].IsObject());
+ EXPECT_EQ(val["parameters"]["data"].GetPropertyNames().size(), 2);
+ // Check "data" property inside "data" (null)
+ EXPECT_TRUE(val["parameters"]["data"]["data"].IsNull());
+ // Check "count" property inside "data"
+ EXPECT_EQ((int)val["parameters"]["data"]["count"], 0);
+}
+
+TEST_F(CJSONTest, FromJSON_objects_invalid)
+{
+ // no closing bracket
+ std::string strJson = "{";
+ CValue val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{ \"key1\": \"value1\", \"key2\": 42";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // trailing comma
+ strJson = "{ \"key1\": \"value1\", \"key2\": 42, }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // duplicating properties are technically allowed. Only the last value will apply.
+ strJson = "{ \"key\": \"value1\", \"key\": \"value2\" }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsObject());
+ EXPECT_EQ(val.GetPropertyNames().size(), 1);
+ EXPECT_EQ(val["key"].ToStringA(), "value2");
+ // keys are not enslosed in double quotes
+ strJson = "{ key1: \"value1\", \"key2\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // missing colon between the key and the value
+ strJson = "{ \"key1\" \"value1\", \"key2\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{\"key\"}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{key}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // wrong value formats
+ strJson = "{ \"key1\": undefined, \"key2\": 42 }"; ;
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{ \"key1\": 12.34.56, \"key2\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{ \"key1\": \"value1, \"key2\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // non-string key
+ strJson = "{ 123: \"value\", \"key2\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // missing coma
+ strJson = "{ \"key1\": \"value1\" \"key2\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // some invalid inner object
+ strJson = "{ \"outerKey\": { \"innerKey\": \"value\", \"anotherInnerKey\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{ \"outerKey\": { innerKey: \"value\" } }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{ \"outerKey\": { \"innerKey\" \"value\" } }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{ \"outerKey\": { \"innerKey\": \"value\", }, \"key2\": 42 }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{ \"outerKey\": { \"innerKey\": \"value\", \"anotherInnerKey\": 42, \"thirdKey\": { \"deepKey\": \"value\" } }";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // no opening bracket
+ strJson = "}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "\"key1\": \"value1\", \"key2\": 42}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // extra brackets
+ strJson = "{{\"key1\": \"value1\", \"key2\": 42}}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{{\"key1\": \"value1\", \"key2\": 42}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{\"key1\": \"value1\", \"key2\": 42}}";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ // elements outside of the object
+ strJson = "{\"key1\": \"value1\", \"key2\": 42}, \"key3\": 3.14";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+ strJson = "{\"key1\": \"value1\", \"key2\": 42} \"key3\": 3.14";
+ val = CValue::FromJSON(strJson);
+ EXPECT_TRUE(val.IsUndefined());
+}
+
#else
int main()
{
diff --git a/DesktopEditor/graphics/Graphics.cpp b/DesktopEditor/graphics/Graphics.cpp
index e83ae9cda8..dba220d2de 100644
--- a/DesktopEditor/graphics/Graphics.cpp
+++ b/DesktopEditor/graphics/Graphics.cpp
@@ -655,7 +655,7 @@ namespace Aggplus
if (fabs(dDet) < 0.0001)
{
path_copy.transform_all_paths(m_oFullTransform.m_internal->m_agg_mtx);
- dWidth *= sqrt(dDet);
+ dWidth *= sqrt(fabs(dDet));
bIsUseIdentity = true;
}
diff --git a/DesktopEditor/graphics/GraphicsRenderer.cpp b/DesktopEditor/graphics/GraphicsRenderer.cpp
index 5e20c46f18..2f14a36b59 100644
--- a/DesktopEditor/graphics/GraphicsRenderer.cpp
+++ b/DesktopEditor/graphics/GraphicsRenderer.cpp
@@ -1537,7 +1537,7 @@ void CGraphicsRenderer::Restore()
RELEASEOBJECT(pState);
}
-void CGraphicsRenderer::put_BlendMode(const unsigned int nBlendMode)
+void CGraphicsRenderer::put_BlendMode(const unsigned int& nBlendMode)
{
if (NULL != m_pRenderer)
{
diff --git a/DesktopEditor/graphics/GraphicsRenderer.h b/DesktopEditor/graphics/GraphicsRenderer.h
index b8bcc7cf1b..d5cd633616 100644
--- a/DesktopEditor/graphics/GraphicsRenderer.h
+++ b/DesktopEditor/graphics/GraphicsRenderer.h
@@ -163,9 +163,9 @@ public:
virtual HRESULT PenDashPattern(double* pPattern, LONG lCount);
// brush ------------------------------------------------------------------------------------
- virtual void put_BrushGradInfo(const NSStructures::GradientInfo &_ginfo) override {
- m_oBrush.m_oGradientInfo = _ginfo;
- }
+ virtual void put_BrushGradInfo(void* pGradInfo) override {
+ m_oBrush.m_oGradientInfo = *((NSStructures::GradientInfo*)pGradInfo);
+ }
virtual HRESULT get_BrushType(LONG* lType);
virtual HRESULT put_BrushType(const LONG& lType);
@@ -278,7 +278,7 @@ public:
{
_SetFont();
}
- virtual void put_BlendMode(const unsigned int nBlendMode) override;
+ virtual void put_BlendMode(const unsigned int& nBlendMode) override;
public:
virtual void CloseFont()
diff --git a/DesktopEditor/graphics/IRenderer.h b/DesktopEditor/graphics/IRenderer.h
index d8273d734e..e387ed6e3b 100644
--- a/DesktopEditor/graphics/IRenderer.h
+++ b/DesktopEditor/graphics/IRenderer.h
@@ -403,6 +403,15 @@ public:
UNUSED_VARIABLE(dValue);
return S_FALSE;
}
+
+ virtual void put_BrushGradInfo(void* pGradInfo)
+ {
+ UNUSED_VARIABLE(pGradInfo);
+ }
+ virtual void put_BlendMode(const unsigned int& nBlendMode)
+ {
+ UNUSED_VARIABLE(nBlendMode);
+ }
};
#define PROPERTY_RENDERER(NameBase, Name, Type) \
diff --git a/DesktopEditor/graphics/pro/Graphics.h b/DesktopEditor/graphics/pro/Graphics.h
index d76fd9a81e..efc49eddd3 100644
--- a/DesktopEditor/graphics/pro/Graphics.h
+++ b/DesktopEditor/graphics/pro/Graphics.h
@@ -131,11 +131,6 @@ namespace NSGraphics
virtual void drawVerLine(BYTE align, double x, double y, double b, double penW) = 0;
virtual void drawHorLineExt(BYTE align, double y, double x, double r, double penW, double leftMW, double rightMW) = 0;
-
- // test
-
- virtual void put_BrushGradInfo(const NSStructures::GradientInfo &_ginfo) = 0;
- virtual void put_BlendMode(const unsigned int nBlendMode) = 0;
};
GRAPHICS_DECL IGraphicsRenderer* Create();
diff --git a/DesktopEditor/graphics/pro/js/after.py b/DesktopEditor/graphics/pro/js/after.py
index 138e3d2ddd..b11b83257d 100644
--- a/DesktopEditor/graphics/pro/js/after.py
+++ b/DesktopEditor/graphics/pro/js/after.py
@@ -7,6 +7,8 @@ base.configure_common_apps()
base.replaceInFile("../../../../Common/3dParty/icu/icu/source/common/udata.cpp", "\n{\n#ifdef BUILDING_WASM_MODULE\nreturn NULL;\n#endif\n UDataMemory tData;", "\n{\n UDataMemory tData;")
base.replaceInFile("../../../../DesktopEditor/cximage/png/pnglibconf.h", "//#define PNG_CONSOLE_IO_SUPPORTED", "#define PNG_CONSOLE_IO_SUPPORTED")
+base.replaceInFile("../../../../Common/3dParty/openssl/openssl/crypto/sha/sha512.c", "const SHA_LONG64 *W = (const SHA_LONG64*)in;", "const SHA_LONG64 *W = in;")
+
# finalize
base.replaceInFile("./deploy/drawingfile.js", "function getBinaryPromise(", "function getBinaryPromise2(")
base.replaceInFile("./deploy/drawingfile.js", "__ATPOSTRUN__=[];", "__ATPOSTRUN__=[function(){window[\"AscViewer\"] && window[\"AscViewer\"][\"onLoadModule\"] && window[\"AscViewer\"][\"onLoadModule\"]();}];")
@@ -31,6 +33,7 @@ for item in content_native_files:
content_native += base.readFile(item)
content_native += "\n})(window, undefined);"
content_native = content_native.replace("//file_internal", base.readFile("./wasm/js/drawingfile_native.js"))
+content_native = content_native.replace("//string_utf8", base.readFile("./../../../../Common/js/string_utf8.js"))
base.writeFile("./deploy/drawingfile_native.js", content_native)
base.cmd_in_dir("../../../../Common/js", "python", ["./min.py", "./../../DesktopEditor/graphics/pro/js/deploy/drawingfile_native.js", "WHITESPACE_ONLY"])
diff --git a/DesktopEditor/graphics/pro/js/before.py b/DesktopEditor/graphics/pro/js/before.py
index 55f11d7fbc..8f75cc7f3b 100644
--- a/DesktopEditor/graphics/pro/js/before.py
+++ b/DesktopEditor/graphics/pro/js/before.py
@@ -36,4 +36,6 @@ if not base.is_dir("freetype-2.10.4"):
common.apply_patch("./freetype-2.10.4/builds/unix/ftsystem.c", "./wasm/patches/ftsystem.patch")
base.replaceInFile("../../../../Common/3dParty/icu/icu/source/common/udata.cpp", "\n{\n UDataMemory tData;", "\n{\n#ifdef BUILDING_WASM_MODULE\nreturn NULL;\n#endif\n UDataMemory tData;")
-base.replaceInFile("../../../../DesktopEditor/cximage/png/pnglibconf.h", "#define PNG_CONSOLE_IO_SUPPORTED", "//#define PNG_CONSOLE_IO_SUPPORTED")
\ No newline at end of file
+base.replaceInFile("../../../../DesktopEditor/cximage/png/pnglibconf.h", "#define PNG_CONSOLE_IO_SUPPORTED", "//#define PNG_CONSOLE_IO_SUPPORTED")
+
+base.replaceInFile("../../../../Common/3dParty/openssl/openssl/crypto/sha/sha512.c", "const SHA_LONG64 *W = in;", "const SHA_LONG64 *W = (const SHA_LONG64*)in;")
diff --git a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile.js b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile.js
index bf47932f88..a766f62f47 100644
--- a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile.js
+++ b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile.js
@@ -115,7 +115,7 @@ CFile.prototype["loadFromDataWithPassword"] = function(password)
if (0 != this.nativeFile)
this._closeFile();
- let isSuccess = this._openFile(arrayBuffer, password);
+ let isSuccess = this._openFile(undefined, password);
let error = this._getError(); // 0 - ok, 4 - password, else: error
this.type = this._getType();
@@ -841,6 +841,8 @@ CFile.prototype["getButtonIcons"] = function(pageIndex, width, height, backgroun
let reader = ptr.getReader();
if (!reader) return {};
+
+ let res = {};
res["MK"] = [];
res["View"] = [];
diff --git a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_native.js b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_native.js
index 45071224a1..fc4f69cf23 100644
--- a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_native.js
+++ b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_native.js
@@ -30,12 +30,16 @@
*
*/
+//string_utf8
+
function CNativePointer()
{
this.ptr = null;
}
CNativePointer.prototype.free = function()
{
+ if (this.ptr)
+ g_native_drawing_file["FreeWasmData"](this.ptr);
this.ptr = null;
};
CNativePointer.prototype.getReader = function()
@@ -65,120 +69,159 @@ CFile.prototype._getUint8ClampedArray = function(ptr, len)
// FILE
CFile.prototype._openFile = function(buffer, password)
{
- // TODO:
+ let res = false;
+ if (!buffer)
+ res = -1 !== g_native_drawing_file["GetType"]();
+
+ if (res)
+ this.nativeFile = 1;
+ return res;
};
CFile.prototype._closeFile = function()
{
- // TODO:
+ g_native_drawing_file["CloseFile"]();
+ this.nativeFile = 0;
};
CFile.prototype._getType = function()
{
- // TODO:
+ return g_native_drawing_file["GetType"]();
};
CFile.prototype._getError = function()
{
- // TODO:
+ return g_native_drawing_file["GetErrorCode"]();
};
// FONTS
CFile.prototype._isNeedCMap = function()
{
- // TODO:
+ return g_native_drawing_file["IsNeedCMap"]();
};
CFile.prototype._setCMap = function(memoryBuffer)
{
- // TODO:
+ // none
};
CFile.prototype._getFontByID = function(ID)
{
- // TODO:
+ return g_native_drawing_file["GetFontBinary"](ID);
};
CFile.prototype._getInteractiveFormsFonts = function(type)
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetInteractiveFormsFonts"](type);
+ return g_module_pointer;
};
// INFO DOCUMENT
CFile.prototype._getInfo = function()
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetInfo"]();
+ return g_module_pointer;
};
CFile.prototype._getStructure = function()
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetStructure"]();
+ return g_module_pointer;
};
CFile.prototype._getLinks = function(pageIndex)
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetLinks"](pageIndex);
+ return g_module_pointer;
};
// WIDGETS & ANNOTATIONS
CFile.prototype._getInteractiveFormsInfo = function()
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetInteractiveFormsInfo"]();
+ return g_module_pointer;
};
CFile.prototype._getAnnotationsInfo = function(pageIndex)
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetAnnotationsInfo"](pageIndex);
+ return g_module_pointer;
};
CFile.prototype._getButtonIcons = function(backgroundColor, pageIndex, isBase64, nWidget, nView)
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetButtonIcons"](
+ backgroundColor === undefined ? 0xFFFFFF : backgroundColor,
+ pageIndex,
+ isBase64 ? 1 : 0,
+ nWidget === undefined ? -1 : nWidget,
+ nView);
+ return g_module_pointer;
};
CFile.prototype._getAnnotationsAP = function(width, height, backgroundColor, pageIndex, nAnnot, nView)
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetAnnotationsAP"](
+ width,
+ height,
+ backgroundColor === undefined ? 0xFFFFFF : backgroundColor,
+ pageIndex,
+ nAnnot === undefined ? -1 : nAnnot,
+ nView);
+ return g_module_pointer;
};
CFile.prototype._getInteractiveFormsAP = function(width, height, backgroundColor, pageIndex, nWidget, nView, nButtonView)
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["GetInteractiveFormsAP"](
+ width,
+ height,
+ backgroundColor === undefined ? 0xFFFFFF : backgroundColor,
+ pageIndex,
+ nWidget === undefined ? -1 : nWidget,
+ nView, nButtonView);
+ return g_module_pointer;
};
// SCAN PAGES
CFile.prototype._scanPage = function(page, mode)
{
- // TODO:
+ g_module_pointer.ptr = g_native_drawing_file["ScanPage"](page, (mode === undefined) ? 0 : mode);
+ return g_module_pointer;
};
CFile.prototype._getImageBase64 = function(rId)
{
- // TODO:
+ return g_native_drawing_file["GetImageBase64"](rId);
};
// TEXT
CFile.prototype._getGlyphs = function(pageIndex)
{
- // TODO:
+ let res = {};
+ res.info = [0, 0, 0, 0];
+ res.result = [];
+ return res;
};
CFile.prototype._destroyTextInfo = function()
{
- // TODO:
+ g_native_drawing_file["DestroyTextInfo"](rId);
};
// RASTER
CFile.prototype._getPixmap = function(pageIndex, width, height, backgroundColor)
{
- // TODO:
+ return null;
};
// STATIC FUNCTIONS
CFile.prototype._InitializeFonts = function(basePath)
{
+ // none
};
CFile.prototype._CheckStreamId = function(data, status)
{
+ // none
};
diff --git a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_wasm.js b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_wasm.js
index 81ff56a1fe..f2e81f7cb0 100644
--- a/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_wasm.js
+++ b/DesktopEditor/graphics/pro/js/wasm/js/drawingfile_wasm.js
@@ -82,7 +82,7 @@ CFile.prototype._getUint8ClampedArray = function(ptr, len)
// FILE
CFile.prototype._openFile = function(buffer, password)
{
- if (this.stream && buffer)
+ if (buffer)
{
let data = new Uint8Array(buffer);
this.stream_size = data.length;
@@ -94,7 +94,7 @@ CFile.prototype._openFile = function(buffer, password)
if (password)
{
let passwordBuf = password.toUtf8();
- let passwordPtr = Module["_malloc"](passwordBuf.length);
+ passwordPtr = Module["_malloc"](passwordBuf.length);
Module["HEAP8"].set(passwordBuf, passwordPtr);
}
@@ -273,6 +273,8 @@ CFile.prototype._getGlyphs = function(pageIndex)
res.result = new Uint8Array(len);
res.result.set(textCommandsSrc);
}
+ else
+ res.result = [];
return res;
};
diff --git a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp
index a6926cef5d..6da3eb1c2b 100644
--- a/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp
+++ b/DesktopEditor/graphics/pro/js/wasm/src/drawingfile_test.cpp
@@ -821,7 +821,7 @@ void ReadFileAttachment(BYTE* pAnnots, int& i, int n)
RELEASEARRAYOBJECTS(res);
}
-void ReadInteractiveFormsFonts(CGraphicsFileDrawing* pGrFile, int nType)
+void ReadInteractiveFormsFonts(CDrawingFile* pGrFile, int nType)
{
BYTE* pFonts = GetInteractiveFormsFonts(pGrFile, nType);
int nLength = READ_INT(pFonts);
@@ -923,7 +923,7 @@ int main(int argc, char* argv[])
if (!NSFile::CFileBinary::ReadAllBytes(sFilePath, &pFileData, nFileDataLen))
return 1;
- CGraphicsFileDrawing* pGrFile = Open(pFileData, (LONG)nFileDataLen, "");
+ CDrawingFile* pGrFile = Open(pFileData, (LONG)nFileDataLen, "");
int nError = GetErrorCode(pGrFile);
if (nError != 0)
@@ -1084,7 +1084,7 @@ int main(int argc, char* argv[])
}
// INTERACTIVE FORMS
- if (false)
+ if (true)
{
ReadInteractiveFormsFonts(pGrFile, 1);
ReadInteractiveFormsFonts(pGrFile, 2);
@@ -1199,7 +1199,7 @@ int main(int argc, char* argv[])
}
// ANNOTS
- if (false)
+ if (true)
{
BYTE* pAnnots = GetAnnotationsInfo(pGrFile, -1);
nLength = READ_INT(pAnnots);
diff --git a/DesktopEditor/raster/Metafile/Common/CClip.cpp b/DesktopEditor/raster/Metafile/Common/CClip.cpp
index 20bba19298..5797ca807b 100644
--- a/DesktopEditor/raster/Metafile/Common/CClip.cpp
+++ b/DesktopEditor/raster/Metafile/Common/CClip.cpp
@@ -107,8 +107,8 @@ namespace MetaFile
void CClip::Copy(const CClip &oClip)
{
Clear();
-
- for (const CClipCommandBase* pCommand : m_arCommands)
+
+ for (const CClipCommandBase* pCommand : oClip.m_arCommands)
{
switch(pCommand->GetType())
{
diff --git a/DesktopEditor/raster/Metafile/Common/MetaFile.h b/DesktopEditor/raster/Metafile/Common/MetaFile.h
index f87a965371..0bd2dbc146 100644
--- a/DesktopEditor/raster/Metafile/Common/MetaFile.h
+++ b/DesktopEditor/raster/Metafile/Common/MetaFile.h
@@ -45,11 +45,8 @@ namespace MetaFile
{
public:
IMetaFileBase()
+ : m_pOutput(NULL), m_pBufferData(NULL), m_bIsExternalBuffer(false), m_bError(false), m_pParent(NULL)
{
- m_pBufferData = NULL;
- m_bIsExternalBuffer = false;
- m_bError = false;
- m_pOutput = NULL;
m_oStream.SetStream(NULL, 0);
}
virtual ~IMetaFileBase()
@@ -57,33 +54,46 @@ namespace MetaFile
this->Close();
}
- virtual void PlayMetaFile() = 0;
- virtual void ClearFile() {/*Нельзя делать чисто виртуальной, потому что вызывается в деструкторе*/}
- virtual TRectL* GetDCBounds() = 0;
- virtual CClip* GetClip() = 0;
- virtual double GetPixelHeight() = 0;
- virtual double GetPixelWidth() = 0;
- virtual int GetTextColor() = 0;
- virtual IFont* GetFont() = 0;
- virtual IBrush* GetBrush() = 0;
- virtual IPen* GetPen() = 0;
- virtual unsigned int GetTextAlign() = 0;
- virtual unsigned int GetTextBgMode() = 0;
- virtual int GetTextBgColor() = 0;
- virtual unsigned int GetFillMode() = 0;
- virtual TPointD GetCurPos() = 0;
- virtual TXForm* GetInverseTransform() = 0;
- virtual TXForm* GetTransform(int iGraphicsMode = GM_ADVANCED) = 0;
- virtual unsigned int GetMiterLimit() = 0;
- virtual unsigned int GetRop2Mode() = 0;
- virtual int GetCharSpace() = 0;
- virtual bool IsWindowFlippedY() = 0;
- virtual bool IsWindowFlippedX() = 0;
- virtual unsigned int GetMapMode() = 0;
- virtual USHORT GetDpi() = 0;
- virtual IRegion* GetRegion() = 0;
- virtual unsigned int GetArcDirection() = 0;
- virtual CPath* GetPath() = 0;
+ virtual void PlayMetaFile() = 0;
+ virtual void ClearFile() {/*Нельзя делать чисто виртуальной, потому что вызывается в деструкторе*/}
+ virtual const TRectL& GetDCBounds() const = 0;
+ virtual const CClip* GetClip() const = 0;
+ virtual double GetPixelHeight() const = 0;
+ virtual double GetPixelWidth() const = 0;
+ virtual int GetTextColor() const = 0;
+ virtual const IFont* GetFont() const = 0;
+ virtual const IBrush* GetBrush() const = 0;
+ virtual const IPen* GetPen() const = 0;
+ virtual unsigned int GetTextAlign() const = 0;
+ virtual unsigned int GetTextBgMode() const = 0;
+ virtual int GetTextBgColor() const = 0;
+ virtual unsigned int GetFillMode() const = 0;
+ virtual TPointD GetCurPos() const = 0;
+ virtual const TXForm& GetInverseTransform() const = 0;
+ virtual const TXForm& GetTransform(int iGraphicsMode = GM_ADVANCED) = 0;
+ virtual unsigned int GetMiterLimit() const = 0;
+ virtual unsigned int GetRop2Mode() const = 0;
+ virtual int GetCharSpace() const = 0;
+ virtual bool IsWindowFlippedY() const = 0;
+ virtual bool IsWindowFlippedX() const = 0;
+ virtual unsigned int GetMapMode() const = 0;
+ virtual USHORT GetDpi() const = 0;
+ virtual const IRegion* GetRegion() const = 0;
+ virtual unsigned int GetArcDirection() const = 0;
+ virtual const CPath* GetPath() const = 0;
+
+ virtual TXForm CalculateCurrentTransform() const
+ {
+ return TXForm{};
+ }
+
+ virtual const TRectL& GetOriginalDCBounds() const
+ {
+ if (NULL != m_pParent)
+ return m_pParent->GetOriginalDCBounds();
+
+ return GetDCBounds();
+ }
bool ReadFromBuffer(BYTE* pBuffer, unsigned int unSize, const bool& bIsExternal = true)
{
@@ -141,7 +151,7 @@ namespace MetaFile
this->ClearFile();
}
- NSFonts::IFontManager* GetFontManager()
+ NSFonts::IFontManager* GetFontManager() const
{
return m_pFontManager;
}
@@ -157,16 +167,21 @@ namespace MetaFile
{
m_bError = true;
}
- bool CheckError()
+ bool CheckError() const
{
return m_bError;
}
+ void SetParent(const IMetaFileBase* pParent)
+ {
+ m_pParent = pParent;
+ }
protected:
CDataStream m_oStream;
IOutputDevice* m_pOutput;
+ const IMetaFileBase* m_pParent;
private:
NSFonts::IFontManager* m_pFontManager;
diff --git a/DesktopEditor/raster/Metafile/Common/MetaFileObjects.h b/DesktopEditor/raster/Metafile/Common/MetaFileObjects.h
index 76d61ad9b7..d5fb459c13 100644
--- a/DesktopEditor/raster/Metafile/Common/MetaFileObjects.h
+++ b/DesktopEditor/raster/Metafile/Common/MetaFileObjects.h
@@ -34,8 +34,6 @@
#include
-#include "IOutputDevice.h"
-
namespace MetaFile
{
class IFont
@@ -44,15 +42,15 @@ namespace MetaFile
IFont(){}
virtual ~IFont(){}
- virtual double GetHeight() = 0;
- virtual std::wstring GetFaceName() = 0;
- virtual int GetWeight() = 0;
- virtual bool IsItalic() = 0;
- virtual bool IsStrikeOut() = 0;
- virtual bool IsUnderline() = 0;
- virtual int GetEscapement() = 0;
- virtual int GetCharSet() = 0;
- virtual int GetOrientation() = 0;
+ virtual double GetHeight() const = 0;
+ virtual std::wstring GetFaceName() const = 0;
+ virtual int GetWeight() const = 0;
+ virtual bool IsItalic() const = 0;
+ virtual bool IsStrikeOut() const = 0;
+ virtual bool IsUnderline() const = 0;
+ virtual int GetEscapement() const = 0;
+ virtual int GetCharSet() const = 0;
+ virtual int GetOrientation() const = 0;
};
class IBrush
@@ -61,32 +59,33 @@ namespace MetaFile
IBrush(){}
virtual ~IBrush(){}
- virtual int GetColor() = 0;
- virtual int GetColor2() = 0;
- virtual unsigned int GetStyle() = 0;
- virtual unsigned int GetStyleEx() = 0;
- virtual unsigned int GetHatch() = 0;
- virtual unsigned int GetAlpha() = 0;
- virtual unsigned int GetAlpha2() = 0;
- virtual std::wstring GetDibPatterPath() = 0;
- virtual void GetBounds(double& left, double& top, double& width, double& height) = 0;
- virtual void GetCenterPoint(double& dX, double& dY) = 0;
+ virtual int GetColor() const = 0;
+ virtual int GetColor2() const = 0;
+ virtual unsigned int GetStyle() const = 0;
+ virtual unsigned int GetStyleEx() const = 0;
+ virtual unsigned int GetHatch() const = 0;
+ virtual unsigned int GetAlpha() const = 0;
+ virtual unsigned int GetAlpha2() const = 0;
+ virtual std::wstring GetDibPatterPath() const = 0;
+ virtual void GetBounds(double& left, double& top, double& width, double& height) const = 0;
+ virtual void GetCenterPoint(double& dX, double& dY) const = 0;
- virtual void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight) = 0;
+ virtual void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight) const = 0;
};
+
class IPen
{
public:
IPen(){}
virtual ~IPen(){}
- virtual int GetColor() = 0;
- virtual unsigned int GetStyle() = 0;
- virtual double GetWidth() = 0;
- virtual unsigned int GetAlpha() = 0;
- virtual double GetMiterLimit() = 0;
- virtual double GetDashOffset() = 0;
- virtual void GetDashData(double*&, unsigned int&) = 0;
+ virtual int GetColor() const = 0;
+ virtual unsigned int GetStyle() const = 0;
+ virtual double GetWidth() const = 0;
+ virtual unsigned int GetAlpha() const = 0;
+ virtual double GetMiterLimit() const = 0;
+ virtual double GetDashOffset() const = 0;
+ virtual void GetDashData(double*&, unsigned int&) const = 0;
};
class IRegion
diff --git a/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h b/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h
index 6f9dddf77c..791446ee58 100644
--- a/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h
+++ b/DesktopEditor/raster/Metafile/Common/MetaFileRenderer.h
@@ -197,14 +197,9 @@ namespace MetaFile
if (NULL == m_pFile)
return;
- TRectL* pBounds = m_pFile->GetDCBounds();
- int nL = pBounds->Left;
- int nR = pBounds->Right;
- int nT = pBounds->Top;
- int nB = pBounds->Bottom;
-
- m_dScaleX = m_dW / std::fabs((double)(nR - nL));
- m_dScaleY = m_dH / std::fabs((double)(nB - nT));
+ const TRectL& oBounds{m_pFile->GetDCBounds()};
+ m_dScaleX = m_dW / std::fabs((double)(oBounds.Right - oBounds.Left));
+ m_dScaleY = m_dH / std::fabs((double)(oBounds.Bottom - oBounds.Top));
}
double GetHeight() const
@@ -293,7 +288,7 @@ namespace MetaFile
}
void DrawDriverString(const std::wstring& wsString, const std::vector& arPoints)
{
- IFont *pFont = m_pFile->GetFont();
+ const IFont *pFont = m_pFile->GetFont();
if (NULL == pFont)
return;
@@ -356,7 +351,7 @@ namespace MetaFile
void DrawString(std::wstring& wsText, unsigned int unCharsCount, double _dX, double _dY, double* pDx, int iGraphicsMode, double dXScale, double dYScale)
{
CheckEndPath();
- IFont* pFont = m_pFile->GetFont();
+ const IFont* pFont = m_pFile->GetFont();
if (!pFont)
return;
@@ -991,7 +986,7 @@ namespace MetaFile
}
bool UpdateBrush()
{
- IBrush* pBrush = m_pFile->GetBrush();
+ const IBrush* pBrush = m_pFile->GetBrush();
if (!pBrush)
return false;
@@ -1152,7 +1147,7 @@ namespace MetaFile
if (m_bUpdatedClip)
return;
- CClip *pClip = m_pFile->GetClip();
+ const CClip *pClip = m_pFile->GetClip();
if (NULL == pClip)
return;
@@ -1180,7 +1175,7 @@ namespace MetaFile
}
bool UpdatePen()
{
- IPen* pPen = m_pFile->GetPen();
+ const IPen* pPen = m_pFile->GetPen();
if (!pPen)
return false;
diff --git a/DesktopEditor/raster/Metafile/Common/MetaFileTypes.cpp b/DesktopEditor/raster/Metafile/Common/MetaFileTypes.cpp
index 3b1ee749f5..b6293a91ce 100644
--- a/DesktopEditor/raster/Metafile/Common/MetaFileTypes.cpp
+++ b/DesktopEditor/raster/Metafile/Common/MetaFileTypes.cpp
@@ -62,7 +62,7 @@ namespace MetaFile
a = oRGBA.a;
}
- int TRGBA::ToInt()
+ int TRGBA::ToInt() const
{
return METAFILE_RGBA(r, g, b, a);
}
@@ -74,6 +74,26 @@ namespace MetaFile
b = t;
}
+ unsigned char TRGBA::GetRed() const
+ {
+ return r;
+ }
+
+ unsigned char TRGBA::GetGreen() const
+ {
+ return g;
+ }
+
+ unsigned char TRGBA::GetBlue() const
+ {
+ return b;
+ }
+
+ unsigned char TRGBA::GetAlpha() const
+ {
+ return a;
+ }
+
TXForm::TXForm() : M11(1), M12(0), M21(0), M22(1), Dx(0), Dy(0)
{}
@@ -101,14 +121,24 @@ namespace MetaFile
return;
M11 = pOther->M11;
- M12 = pOther->M12;
- M21 = pOther->M21;
- M22 = pOther->M22;
- Dx = pOther->Dx;
- Dy = pOther->Dy;
+ M12 = pOther->M12;
+ M21 = pOther->M21;
+ M22 = pOther->M22;
+ Dx = pOther->Dx;
+ Dy = pOther->Dy;
}
- void TXForm::Multiply(TXForm &oOther, unsigned int ulMode)
+ void TXForm::Copy(const TXForm& oOther)
+ {
+ M11 = oOther.M11;
+ M12 = oOther.M12;
+ M21 = oOther.M21;
+ M22 = oOther.M22;
+ Dx = oOther.Dx;
+ Dy = oOther.Dy;
+ }
+
+ void TXForm::Multiply(const TXForm &oOther, unsigned int ulMode)
{
if (MWT_IDENTITY == ulMode)
Init();
@@ -154,7 +184,7 @@ namespace MetaFile
}
}
- void TXForm::Apply(double &dX, double &dY)
+ void TXForm::Apply(double &dX, double &dY) const
{
double _dX = dX;
double _dY = dY;
diff --git a/DesktopEditor/raster/Metafile/Common/MetaFileTypes.h b/DesktopEditor/raster/Metafile/Common/MetaFileTypes.h
index 427b2178ae..44fbc99b29 100644
--- a/DesktopEditor/raster/Metafile/Common/MetaFileTypes.h
+++ b/DesktopEditor/raster/Metafile/Common/MetaFileTypes.h
@@ -549,8 +549,13 @@ namespace MetaFile
void Set(unsigned char _r, unsigned char _g, unsigned char _b, unsigned char _a = 0);
void Copy(const TRGBA &oRGBA);
- int ToInt();
+ int ToInt() const;
void SwapToBGR();
+
+ unsigned char GetRed() const;
+ unsigned char GetGreen() const;
+ unsigned char GetBlue() const;
+ unsigned char GetAlpha() const;
};
struct TXForm
@@ -568,8 +573,9 @@ namespace MetaFile
void Init();
void Copy(const TXForm* pOther);
- void Multiply(TXForm &oOther, unsigned int ulMode);
- void Apply(double& dX, double& dY);
+ void Copy(const TXForm& oOther);
+ void Multiply(const TXForm& oOther, unsigned int ulMode);
+ void Apply(double& dX, double& dY) const;
};
}
diff --git a/DesktopEditor/raster/Metafile/Common/MetaFileUtils.h b/DesktopEditor/raster/Metafile/Common/MetaFileUtils.h
index 7767bd9c97..0001315f0b 100644
--- a/DesktopEditor/raster/Metafile/Common/MetaFileUtils.h
+++ b/DesktopEditor/raster/Metafile/Common/MetaFileUtils.h
@@ -1068,7 +1068,7 @@ namespace MetaFile
return false;
}
- unsigned int Tell()
+ unsigned int Tell() const
{
return (unsigned int)(pCur - pBuffer);
}
@@ -1092,7 +1092,7 @@ namespace MetaFile
ClearCurrentBlockSize();
}
- unsigned int CanRead()
+ unsigned int CanRead() const
{
return (unsigned int)(pEnd - pCur);
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfFile.h b/DesktopEditor/raster/Metafile/Emf/EmfFile.h
index d296724fd1..8d40755bd0 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfFile.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfFile.h
@@ -117,7 +117,7 @@ namespace MetaFile
m_pParser->SetFontManager(pFontManager);
}
- bool CheckError()
+ bool CheckError() const
{
return m_pParser->CheckError();
}
@@ -142,7 +142,7 @@ namespace MetaFile
m_pParser->SetInterpretator(oInterpretatorType, unWidth, unHeight);
}
- TRectL* GetBounds()
+ const TRectL& GetBounds() const
{
return m_pParser->GetBounds();
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfInterpretator/CEmfInterpretatorSvg.cpp b/DesktopEditor/raster/Metafile/Emf/EmfInterpretator/CEmfInterpretatorSvg.cpp
index e3d1d13433..c2a4f1252e 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfInterpretator/CEmfInterpretatorSvg.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfInterpretator/CEmfInterpretatorSvg.cpp
@@ -200,7 +200,7 @@ namespace MetaFile
double dStartAngle = GetEllipseAngle(oBox.Left, oBox.Top, oBox.Right, oBox.Bottom, oStart.X, oStart.Y);
double dSweepAngle = GetEllipseAngle(oBox.Left, oBox.Top, oBox.Right, oBox.Bottom, oEnd.X, oEnd.Y);
- if (NULL != m_pParser && m_pParser->GetTransform()->M22 < 0)
+ if (NULL != m_pParser && m_pParser->GetTransform().M22 < 0)
{
dStartAngle *= -1;
dSweepAngle *= -1;
@@ -263,7 +263,7 @@ namespace MetaFile
double dStartAngle = GetEllipseAngle(oBox.Left, oBox.Top, oBox.Right, oBox.Bottom, oStart.X, oStart.Y);
double dSweepAngle = GetEllipseAngle(oBox.Left, oBox.Top, oBox.Right, oBox.Bottom, oEnd.X, oEnd.Y);
- if (NULL != m_pParser && m_pParser->GetTransform()->M22 < 0)
+ if (NULL != m_pParser && m_pParser->GetTransform().M22 < 0)
{
dStartAngle *= -1;
dSweepAngle *= -1;
@@ -1062,7 +1062,7 @@ namespace MetaFile
{
TRectD oNewRect = oRect.ToRectD();
- if (NULL != m_pParser && m_pParser->GetTransform()->M22 < 0)
+ if (NULL != m_pParser && m_pParser->GetTransform().M22 < 0)
{
dStartAngle *= -1;
dSweepAngle *= -1;
@@ -1140,7 +1140,7 @@ namespace MetaFile
if (NULL == m_pParser || wsString.size() != arGlyphPos.size())
return;
- IFont *pFont = m_pParser->GetFont();
+ const IFont *pFont = m_pParser->GetFont();
if (NULL == pFont)
return;
@@ -1308,7 +1308,7 @@ namespace MetaFile
void CEmfInterpretatorSvg::HANDLE_EMFPLUS_DRAWSTRING(short shOgjectIndex, unsigned int unBrushId, unsigned int unFormatID, const std::wstring &wsString, const TEmfPlusRectF &oRect)
{
- WriteText(wsString, TPointD(oRect.dX, oRect.dY), oRect.ToRectL(), TPointD(m_pParser->GetTransform()->M11, m_pParser->GetTransform()->M22));
+ WriteText(wsString, TPointD(oRect.dX, oRect.dY), oRect.ToRectL(), TPointD(m_pParser->GetTransform().M11, m_pParser->GetTransform().M22));
}
void CEmfInterpretatorSvg::HANDLE_EMFPLUS_FILLCLOSEDCURVE(unsigned int unBrushId, double dTension, const std::vector &arPoints)
@@ -1389,8 +1389,8 @@ namespace MetaFile
{
oTempRect = oRect.ToRectD();
- m_pParser->GetTransform()->Apply(oTempRect.Left, oTempRect.Top);
- m_pParser->GetTransform()->Apply(oTempRect.Right, oTempRect.Bottom);
+ m_pParser->GetTransform().Apply(oTempRect.Left, oTempRect.Top);
+ m_pParser->GetTransform().Apply(oTempRect.Right, oTempRect.Bottom);
wsValue += L"M " + ConvertToWString(oTempRect.Left) + L',' + ConvertToWString(oTempRect.Top) +
L" L " + ConvertToWString(oTempRect.Right) + L',' + ConvertToWString(oTempRect.Top) + L' ' +
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfObjects.cpp b/DesktopEditor/raster/Metafile/Emf/EmfObjects.cpp
index 034cedecf0..8cec00d90b 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfObjects.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfObjects.cpp
@@ -46,7 +46,7 @@ namespace MetaFile
CEmfObjectBase::~CEmfObjectBase()
{}
- EEmfObjectType CEmfObjectBase::GetType()
+ EEmfObjectType CEmfObjectBase::GetType() const
{
return EMF_OBJECT_UNKNOWN;
}
@@ -63,7 +63,7 @@ namespace MetaFile
RELEASEOBJECT(pDibBuffer);
}
- EEmfObjectType CEmfLogBrushEx::GetType()
+ EEmfObjectType CEmfLogBrushEx::GetType() const
{
return EMF_OBJECT_BRUSH;
}
@@ -102,57 +102,57 @@ namespace MetaFile
#endif
}
- int CEmfLogBrushEx::GetColor()
+ int CEmfLogBrushEx::GetColor() const
{
return METAFILE_RGBA(oColor.r, oColor.g, oColor.b, 0);
}
- int CEmfLogBrushEx::GetColor2()
+ int CEmfLogBrushEx::GetColor2() const
{
return 0;
}
- unsigned int CEmfLogBrushEx::GetStyle()
+ unsigned int CEmfLogBrushEx::GetStyle() const
{
return unBrushStyle;
}
- unsigned int CEmfLogBrushEx::GetStyleEx()
+ unsigned int CEmfLogBrushEx::GetStyleEx() const
{
return 0;
}
- unsigned int CEmfLogBrushEx::GetHatch()
+ unsigned int CEmfLogBrushEx::GetHatch() const
{
return unBrushHatch;
}
- unsigned int CEmfLogBrushEx::GetAlpha()
+ unsigned int CEmfLogBrushEx::GetAlpha() const
{
return 0xff;
}
- unsigned int CEmfLogBrushEx::GetAlpha2()
+ unsigned int CEmfLogBrushEx::GetAlpha2() const
{
return 0xff;
}
- std::wstring CEmfLogBrushEx::GetDibPatterPath()
+ std::wstring CEmfLogBrushEx::GetDibPatterPath() const
{
return wsDibPatternPath;
}
- void CEmfLogBrushEx::GetBounds(double &left, double &top, double &width, double &height)
+ void CEmfLogBrushEx::GetBounds(double &left, double &top, double &width, double &height) const
{}
- void CEmfLogBrushEx::GetCenterPoint(double &dX, double &dY)
+ void CEmfLogBrushEx::GetCenterPoint(double &dX, double &dY) const
{}
- void CEmfLogBrushEx::GetDibPattern(unsigned char **pBuffer, unsigned int &unWidth, unsigned int &unHeight)
+ void CEmfLogBrushEx::GetDibPattern(unsigned char **pBuffer, unsigned int &unWidth, unsigned int &unHeight) const
{
- *pBuffer = pDibBuffer;
- unWidth = unDibWidth;
- unHeight = unDibHeigth;
+ *pBuffer = pDibBuffer;
+ unWidth = unDibWidth;
+ unHeight = unDibHeigth;
}
CEmfLogFont::CEmfLogFont(bool bFixedLength) : m_bFixedLength(bFixedLength)
@@ -165,63 +165,63 @@ namespace MetaFile
RELEASEOBJECT(oDesignVector.pValues);
}
- EEmfObjectType CEmfLogFont::GetType()
+ EEmfObjectType CEmfLogFont::GetType() const
{
return EMF_OBJECT_FONT;
}
- double CEmfLogFont::GetHeight()
+ double CEmfLogFont::GetHeight() const
{
return (double)oLogFontEx.oLogFont.nHeight;
}
- std::wstring CEmfLogFont::GetFaceName()
+ std::wstring CEmfLogFont::GetFaceName() const
{
- return std::wstring(NSFile::CUtf8Converter::GetWStringFromUTF16(oLogFontEx.oLogFont.ushFaceName, 32).c_str());
+ return NSFile::CUtf8Converter::GetWStringFromUTF16(oLogFontEx.oLogFont.ushFaceName, 32);
}
- int CEmfLogFont::GetWeight()
+ int CEmfLogFont::GetWeight() const
{
return oLogFontEx.oLogFont.nWeight;
}
- bool CEmfLogFont::IsItalic()
+ bool CEmfLogFont::IsItalic() const
{
- return (0x01 == oLogFontEx.oLogFont.uchItalic ? true : false);
+ return 0x01 == oLogFontEx.oLogFont.uchItalic;
}
- bool CEmfLogFont::IsStrikeOut()
+ bool CEmfLogFont::IsStrikeOut() const
{
- return (0x01 == oLogFontEx.oLogFont.uchStrikeOut ? true : false);
+ return 0x01 == oLogFontEx.oLogFont.uchStrikeOut;
}
- bool CEmfLogFont::IsUnderline()
+ bool CEmfLogFont::IsUnderline() const
{
- return (0x01 == oLogFontEx.oLogFont.uchUnderline ? true : false);
+ return 0x01 == oLogFontEx.oLogFont.uchUnderline ;
}
- int CEmfLogFont::GetEscapement()
+ int CEmfLogFont::GetEscapement() const
{
return oLogFontEx.oLogFont.nEscapement;
}
- int CEmfLogFont::GetCharSet()
+ int CEmfLogFont::GetCharSet() const
{
return oLogFontEx.oLogFont.uchCharSet;
}
- bool CEmfLogFont::IsFixedLength()
+ bool CEmfLogFont::IsFixedLength() const
{
return m_bFixedLength;
}
- int CEmfLogFont::GetOrientation()
+ int CEmfLogFont::GetOrientation() const
{
return oLogFontEx.oLogFont.nOrientation;
}
CEmfLogPen::CEmfLogPen()
- : unPenStyle(PS_SOLID), unWidth(1), oColor(0, 0, 0), pStyleEntry(NULL)
+ : unPenStyle(PS_SOLID), unWidth(1), oColor(0, 0, 0), unNumStyleEntries(0), pStyleEntry(NULL)
{}
CEmfLogPen::~CEmfLogPen()
@@ -229,42 +229,42 @@ namespace MetaFile
RELEASEOBJECT(pStyleEntry);
}
- EEmfObjectType CEmfLogPen::GetType()
+ EEmfObjectType CEmfLogPen::GetType() const
{
return EMF_OBJECT_PEN;
}
- int CEmfLogPen::GetColor()
+ int CEmfLogPen::GetColor() const
{
return METAFILE_RGBA(oColor.r, oColor.g, oColor.b, oColor.a);
}
- unsigned int CEmfLogPen::GetStyle()
+ unsigned int CEmfLogPen::GetStyle() const
{
return unPenStyle;
}
- double CEmfLogPen::GetWidth()
+ double CEmfLogPen::GetWidth() const
{
return (double)unWidth;
}
- unsigned int CEmfLogPen::GetAlpha()
+ unsigned int CEmfLogPen::GetAlpha() const
{
return 0xff;
}
- double CEmfLogPen::GetMiterLimit()
+ double CEmfLogPen::GetMiterLimit() const
{
return 0;
}
- double CEmfLogPen::GetDashOffset()
+ double CEmfLogPen::GetDashOffset() const
{
return 0;
}
- void CEmfLogPen::GetDashData(double *&arDatas, unsigned int &unSize)
+ void CEmfLogPen::GetDashData(double *&arDatas, unsigned int &unSize) const
{
arDatas = NULL;
unSize = 0;
@@ -278,7 +278,7 @@ namespace MetaFile
RELEASEOBJECT(pPaletteEntries);
}
- EEmfObjectType CEmfLogPalette::GetType()
+ EEmfObjectType CEmfLogPalette::GetType() const
{
return EMF_OBJECT_PALETTE;
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfObjects.h b/DesktopEditor/raster/Metafile/Emf/EmfObjects.h
index d75fa92f16..a466dc0a8d 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfObjects.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfObjects.h
@@ -53,7 +53,7 @@ namespace MetaFile
public:
CEmfObjectBase();
virtual ~CEmfObjectBase();
- virtual EEmfObjectType GetType();
+ virtual EEmfObjectType GetType() const;
};
class CEmfLogBrushEx : public CEmfObjectBase, public IBrush
@@ -61,22 +61,22 @@ namespace MetaFile
public:
CEmfLogBrushEx();
virtual ~CEmfLogBrushEx();
- virtual EEmfObjectType GetType();
+ virtual EEmfObjectType GetType() const override;
void SetDibPattern(unsigned char* pBuffer, unsigned int ulWidth, unsigned int ulHeight);
// IBrush
- int GetColor();
- int GetColor2();
- unsigned int GetStyle();
- unsigned int GetStyleEx();
- unsigned int GetHatch();
- unsigned int GetAlpha();
- unsigned int GetAlpha2();
- std::wstring GetDibPatterPath();
- void GetBounds(double& left, double& top, double& width, double& height);
- void GetCenterPoint(double& dX, double& dY);
- void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight);
+ int GetColor() const override;
+ int GetColor2() const override;
+ unsigned int GetStyle() const override;
+ unsigned int GetStyleEx() const override;
+ unsigned int GetHatch() const override;
+ unsigned int GetAlpha() const override;
+ unsigned int GetAlpha2() const override;
+ std::wstring GetDibPatterPath() const override;
+ void GetBounds(double& left, double& top, double& width, double& height) const override;
+ void GetCenterPoint(double& dX, double& dY) const override;
+ void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight) const override;
public:
unsigned int unBrushStyle;
TRGBA oColor;
@@ -92,19 +92,20 @@ namespace MetaFile
public:
CEmfLogFont(bool bFixedLength = false);
virtual ~CEmfLogFont();
- virtual EEmfObjectType GetType();
+ virtual EEmfObjectType GetType() const override;
+
+ bool IsFixedLength() const;
// IFont
- double GetHeight();
- std::wstring GetFaceName();
- int GetWeight();
- bool IsItalic();
- bool IsStrikeOut();
- bool IsUnderline();
- int GetEscapement();
- int GetCharSet();
- bool IsFixedLength();
- int GetOrientation();
+ double GetHeight() const override;
+ int GetWeight() const override;
+ bool IsItalic() const override;
+ bool IsStrikeOut() const override;
+ bool IsUnderline() const override;
+ int GetEscapement() const override;
+ int GetCharSet() const override;
+ int GetOrientation() const override;
+ std::wstring GetFaceName() const override;
public:
TEmfLogFontEx oLogFontEx;
TEmfDesignVector oDesignVector;
@@ -118,16 +119,16 @@ namespace MetaFile
public:
CEmfLogPen();
virtual ~CEmfLogPen();
- virtual EEmfObjectType GetType();
+ virtual EEmfObjectType GetType() const override;
// IPen
- int GetColor();
- unsigned int GetStyle();
- double GetWidth();
- unsigned int GetAlpha();
- double GetMiterLimit();
- double GetDashOffset();
- void GetDashData(double*& arDatas, unsigned int& unSize);
+ int GetColor() const override;
+ unsigned int GetStyle() const override;
+ double GetWidth() const override;
+ unsigned int GetAlpha() const override;
+ double GetMiterLimit() const override;
+ double GetDashOffset() const override;
+ void GetDashData(double*& arDatas, unsigned int& unSize) const override;
public:
unsigned int unPenStyle;
unsigned int unWidth;
@@ -141,7 +142,7 @@ namespace MetaFile
public:
CEmfLogPalette();
virtual ~CEmfLogPalette();
- virtual EEmfObjectType GetType();
+ virtual EEmfObjectType GetType() const override;
public:
unsigned short ushNumberOfEntries;
TEmfLogPaletteEntry* pPaletteEntries;
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.cpp b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.cpp
index 84c6e33652..f170434373 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.cpp
@@ -14,10 +14,157 @@
#include "../../Wmf/WmfParser/CWmfParser.h"
+#define PRINT_EMF_RECORD(type) do {} while(false)
+
+#ifdef _DEBUG
+ #ifdef LOG_EMF_RECORDS
+ #if 1 == LOG_EMF_RECORDS
+ #ifdef PRINTING_EMF_RECORDS
+ #if 1 == PRINTING_EMF_RECORDS
+ static const struct ActionNamesEmf
+ {
+ int actionNumber;
+ std::wstring actionName;
+ } actionNamesEmf[] =
+ {
+ { 0, L"Unknown"},
+ { EMR_HEADER, L"EMR_HEADER"},
+ { EMR_POLYBEZIER, L"EMR_POLYBEZIER"},
+ { EMR_POLYGON, L"EMR_POLYGON"},
+ { EMR_POLYLINE, L"EMR_POLYLINE"},
+ { EMR_POLYBEZIERTO, L"EMR_POLYBEZIERTO"},
+ { EMR_POLYLINETO, L"EMR_POLYLINETO"},
+ { EMR_POLYPOLYLINE, L"EMR_POLYPOLYLINE"},
+ { EMR_POLYPOLYGON, L"EMR_POLYPOLYGON"},
+ { EMR_SETWINDOWEXTEX, L"EMR_SETWINDOWEXTEX"},
+ { EMR_SETWINDOWORGEX, L"EMR_SETWINDOWORGEX"},
+ { EMR_SETVIEWPORTEXTEX, L"EMR_SETVIEWPORTEXTEX"},
+ { EMR_SETVIEWPORTORGEX, L"EMR_SETVIEWPORTORGEX"},
+ { EMR_SETBRUSHORGEX, L"EMR_SETBRUSHORGEX"},
+ { EMR_EOF, L"EMR_EOF"},
+ { EMR_SETPIXELV, L"EMR_SETPIXELV"},
+ { EMR_SETMAPPERFLAGS, L"EMR_SETMAPPERFLAGS"},
+ { EMR_SETMAPMODE, L"EMR_SETMAPMODE"},
+ { EMR_SETBKMODE, L"EMR_SETBKMODE"},
+ { EMR_SETPOLYFILLMODE, L"EMR_SETPOLYFILLMODE"},
+ { EMR_SETROP2, L"EMR_SETROP2"},
+ { EMR_SETSTRETCHBLTMODE, L"EMR_SETSTRETCHBLTMODE"},
+ { EMR_SETTEXTALIGN, L"EMR_SETTEXTALIGN"},
+ { EMR_SETCOLORADJUSTMENT, L"EMR_SETCOLORADJUSTMENT"},
+ { EMR_SETTEXTCOLOR, L"EMR_SETTEXTCOLOR"},
+ { EMR_SETBKCOLOR, L"EMR_SETBKCOLOR"},
+ { EMR_OFFSETCLIPRGN, L"EMR_OFFSETCLIPRGN"},
+ { EMR_MOVETOEX, L"EMR_MOVETOEX"},
+ { EMR_SETMETARGN, L"EMR_SETMETARGN"},
+ { EMR_EXCLUDECLIPRECT, L"EMR_EXCLUDECLIPRECT"},
+ { EMR_INTERSECTCLIPRECT, L"EMR_INTERSECTCLIPRECT"},
+ { EMR_SCALEVIEWPORTEXTEX, L"EMR_SCALEVIEWPORTEXTEX"},
+ { EMR_SCALEWINDOWEXTEX, L"EMR_SCALEWINDOWEXTEX"},
+ { EMR_SAVEDC, L"EMR_SAVEDC"},
+ { EMR_RESTOREDC, L"EMR_RESTOREDC"},
+ { EMR_SETWORLDTRANSFORM, L"EMR_SETWORLDTRANSFORM"},
+ { EMR_MODIFYWORLDTRANSFORM, L"EMR_MODIFYWORLDTRANSFORM"},
+ { EMR_SELECTOBJECT, L"EMR_SELECTOBJECT"},
+ { EMR_CREATEPEN, L"EMR_CREATEPEN"},
+ { EMR_CREATEBRUSHINDIRECT, L"EMR_CREATEBRUSHINDIRECT"},
+ { EMR_DELETEOBJECT, L"EMR_DELETEOBJECT"},
+ { EMR_ANGLEARC, L"EMR_ANGLEARC"},
+ { EMR_ELLIPSE, L"EMR_ELLIPSE"},
+ { EMR_RECTANGLE, L"EMR_RECTANGLE"},
+ { EMR_ROUNDRECT, L"EMR_ROUNDRECT"},
+ { EMR_ARC, L"EMR_ARC"},
+ { EMR_CHORD, L"EMR_CHORD"},
+ { EMR_PIE, L"EMR_PIE"},
+ { EMR_SELECTPALETTE, L"EMR_SELECTPALETTE"},
+ { EMR_CREATEPALETTE, L"EMR_CREATEPALETTE"},
+ { EMR_SETPALETTEENTRIES, L"EMR_SETPALETTEENTRIES"},
+ { EMR_RESIZEPALETTE, L"EMR_RESIZEPALETTE"},
+ { EMR_REALIZEPALETTE, L"EMR_REALIZEPALETTE"},
+ { EMR_EXTFLOODFILL, L"EMR_EXTFLOODFILL"},
+ { EMR_LINETO, L"EMR_LINETO"},
+ { EMR_ARCTO, L"EMR_ARCTO"},
+ { EMR_POLYDRAW, L"EMR_POLYDRAW"},
+ { EMR_SETARCDIRECTION, L"EMR_SETARCDIRECTION"},
+ { EMR_SETMITERLIMIT, L"EMR_SETMITERLIMIT"},
+ { EMR_BEGINPATH, L"EMR_BEGINPATH"},
+ { EMR_ENDPATH, L"EMR_ENDPATH"},
+ { EMR_CLOSEFIGURE, L"EMR_CLOSEFIGURE"},
+ { EMR_FILLPATH, L"EMR_FILLPATH"},
+ { EMR_STROKEANDFILLPATH, L"EMR_STROKEANDFILLPATH"},
+ { EMR_STROKEPATH, L"EMR_STROKEPATH"},
+ { EMR_FLATTENPATH, L"EMR_FLATTENPATH"},
+ { EMR_WIDENPATH, L"EMR_WIDENPATH"},
+ { EMR_SELECTCLIPPATH, L"EMR_SELECTCLIPPATH"},
+ { EMR_ABORTPATH, L"EMR_ABORTPATH"},
+ { 69, L"Unknown"},
+ { EMR_GDICOMMENT, L"EMR_GDICOMMENT"},
+ { EMR_FILLRGN, L"EMR_FILLRGN"},
+ { EMR_FRAMERGN, L"EMR_FRAMERGN"},
+ { EMR_INVERTRGN, L"EMR_INVERTRGN"},
+ { EMR_PAINTRGN, L"EMR_PAINTRGN"},
+ { EMR_EXTSELECTCLIPRGN, L"EMR_EXTSELECTCLIPRGN"},
+ { EMR_BITBLT, L"EMR_BITBLT"},
+ { EMR_STRETCHBLT, L"EMR_STRETCHBLT"},
+ { EMR_MASKBLT, L"EMR_MASKBLT"},
+ { EMR_PLGBLT, L"EMR_PLGBLT"},
+ { EMR_SETDIBITSTODEVICE, L"EMR_SETDIBITSTODEVICE"},
+ { EMR_STRETCHDIBITS, L"EMR_STRETCHDIBITS"},
+ { EMR_EXTCREATEFONTINDIRECTW, L"EMR_EXTCREATEFONTINDIRECTW"},
+ { EMR_EXTTEXTOUTA, L"EMR_EXTTEXTOUTA"},
+ { EMR_EXTTEXTOUTW, L"EMR_EXTTEXTOUTW"},
+ { EMR_POLYBEZIER16, L"EMR_POLYBEZIER16"},
+ { EMR_POLYGON16, L"EMR_POLYGON16"},
+ { EMR_POLYLINE16, L"EMR_POLYLINE16"},
+ { EMR_POLYBEZIERTO16, L"EMR_POLYBEZIERTO16"},
+ { EMR_POLYLINETO16, L"EMR_POLYLINETO16"},
+ { EMR_POLYPOLYLINE16, L"EMR_POLYPOLYLINE16"},
+ { EMR_POLYPOLYGON16, L"EMR_POLYPOLYGON16"},
+ { EMR_POLYDRAW16, L"EMR_POLYDRAW16"},
+ { EMR_CREATEMONOBRUSH, L"EMR_CREATEMONOBRUSH"},
+ { EMR_CREATEDIBPATTERNBRUSHPT, L"EMR_CREATEDIBPATTERNBRUSHPT"},
+ { EMR_EXTCREATEPEN, L"EMR_EXTCREATEPEN"},
+ { EMR_POLYTEXTOUTA, L"EMR_POLYTEXTOUTA"},
+ { EMR_POLYTEXTOUTW, L"EMR_POLYTEXTOUTW"},
+ { EMR_SETICMMODE, L"EMR_SETICMMODE"},
+ { EMR_CREATECOLORSPACE, L"EMR_CREATECOLORSPACE"},
+ { EMR_SETCOLORSPACE, L"EMR_SETCOLORSPACE"},
+ { EMR_DELETECOLORSPACE, L"EMR_DELETECOLORSPACE"},
+ { EMR_GLSRECORD, L"EMR_GLSRECORD"},
+ { EMR_GLSBOUNDEDRECORD, L"EMR_GLSBOUNDEDRECORD"},
+ { EMR_PIXELFORMAT, L"EMR_PIXELFORMAT"},
+ { EMR_RESERVED_105, L"EMR_RESERVED_105"},
+ { EMR_RESERVED_106, L"EMR_RESERVED_106"},
+ { EMR_RESERVED_107, L"EMR_RESERVED_107"},
+ { EMR_RESERVED_108, L"EMR_RESERVED_108"},
+ { EMR_RESERVED_109, L"EMR_RESERVED_109"},
+ { EMR_RESERVED_110, L"EMR_RESERVED_110"},
+ { EMR_COLORCORRECTPALETTE, L"EMR_COLORCORRECTPALETTE"},
+ { EMR_SETICMPROFILEA, L"EMR_SETICMPROFILEA"},
+ { EMR_SETICMPROFILEW, L"EMR_SETICMPROFILEW"},
+ { EMR_ALPHABLEND, L"EMR_ALPHABLEND"},
+ { EMR_SETLAYOUT, L"EMR_SETLAYOUT"},
+ { EMR_TRANSPARENTBLT, L"EMR_TRANSPARENTBLT"},
+ { EMR_RESERVED_117, L"EMR_RESERVED_117"},
+ { EMR_GRADIENTFILL, L"EMR_GRADIENTFILL"},
+ { EMR_RESERVED_119, L"EMR_RESERVED_119"},
+ { EMR_RESERVED_120, L"EMR_RESERVED_120"},
+ { EMR_COLORMATCHTOTARGETW, L"EMR_COLORMATCHTOTARGETW"},
+ { EMR_CREATECOLORSPACEW, L"EMR_CREATECOLORSPACEW"}
+ };
+
+ #define PRINT_EMF_RECORD(type) \
+ if (0 <= type && type <= EMR_CREATECOLORSPACEW) \
+ std::wcout << L"LEVEL [" << unFileLevel << L"] EMF Record: " << actionNamesEmf[type].actionName << std::endl
+ #endif
+ #endif
+ #endif
+ #endif
+#endif
+
namespace MetaFile
{
CEmfParser::CEmfParser()
- : m_pEmfPlusParser(NULL), m_bOnlyEmfPlus(false) {}
+ : m_pEmfPlusParser(NULL) {}
CEmfParser::~CEmfParser()
{
@@ -39,6 +186,9 @@ namespace MetaFile
if (!m_oStream.IsValid())
SetError();
+ if (NULL != m_pInterpretator)
+ GO_UP_LEVEL;
+
unsigned int ulSize, ulType;
unsigned int ulRecordIndex = 0;
@@ -77,11 +227,8 @@ namespace MetaFile
if (0 == ulRecordIndex && EMR_HEADER != ulType)
return SetError();
- if (m_bOnlyEmfPlus && ulType != EMR_HEADER && ulType != EMR_EOF && ulType != EMR_GDICOMMENT)
- {
- m_oStream.Skip(m_ulRecordSize);
- continue;
- }
+ if (NULL != m_pInterpretator && (!BanEMFProcesses()|| ulType == EMR_HEADER || ulType == EMR_EOF || ulType == EMR_GDICOMMENT))
+ PRINT_EMF_RECORD(ulType);
switch (ulType)
{
@@ -220,10 +367,13 @@ namespace MetaFile
int need_skip = m_ulRecordSize - (m_oStream.Tell() - m_ulRecordPos);
m_oStream.Skip(need_skip);
+
+ if (0 != need_skip && NULL != m_pInterpretator)
+ PRINT_LOG(L"SKIP BYTES: " << need_skip);
+
ulRecordIndex++;
m_oStream.ClearCurrentBlockSize();
-
} while (!CheckError());
if (!CheckError())
@@ -232,6 +382,9 @@ namespace MetaFile
if (!m_bEof)
HANDLE_EMR_EOF();
+ if (NULL != m_pInterpretator)
+ GO_DOWN_LEVEL_BELOW;
+
ClearFile();
}
@@ -250,7 +403,7 @@ namespace MetaFile
CEmfParserBase::ClearFile();
}
- EmfParserType CEmfParser::GetType()
+ EmfParserType CEmfParser::GetType() const
{
return EmfParserType::EmfParser;
}
@@ -260,9 +413,9 @@ namespace MetaFile
m_oStream.SetStream(pBuf, unSize);
}
- void CEmfParser::SetOnlyEmfPlus(bool bValue)
+ bool CEmfParser::BanEMFProcesses() const
{
- m_bOnlyEmfPlus = bValue;
+ return NULL != m_pEmfPlusParser && m_pEmfPlusParser->GetBanEMFProcesses();
}
bool CEmfParser::ReadImage(unsigned int offBmi, unsigned int cbBmi, unsigned int offBits, unsigned int cbBits, unsigned int ulSkip, BYTE **ppBgraBuffer, unsigned int *pulWidth, unsigned int *pulHeight)
@@ -327,7 +480,7 @@ namespace MetaFile
m_oStream >> oBitmap;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ALPHABLEND(oBitmap);
}
@@ -337,7 +490,7 @@ namespace MetaFile
m_oStream >> oBitmap;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_STRETCHDIBITS(oBitmap);
}
@@ -347,7 +500,7 @@ namespace MetaFile
m_oStream >> oBitmap;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_BITBLT(oBitmap);
}
@@ -357,7 +510,7 @@ namespace MetaFile
m_oStream >> oBitmap;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETDIBITSTODEVICE(oBitmap);
}
@@ -367,7 +520,7 @@ namespace MetaFile
m_oStream >> oBitmap;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_STRETCHBLT(oBitmap);
}
@@ -392,7 +545,7 @@ namespace MetaFile
void CEmfParser::Read_EMR_SAVEDC()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SAVEDC();
}
@@ -402,7 +555,7 @@ namespace MetaFile
m_oStream >> lSavedDC;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_RESTOREDC(lSavedDC);
}
@@ -414,7 +567,7 @@ namespace MetaFile
m_oStream >> oXForm;
m_oStream >> ulMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_MODIFYWORLDTRANSFORM(oXForm, ulMode);
}
@@ -424,7 +577,7 @@ namespace MetaFile
m_oStream >> oXForm;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETWORLDTRANSFORM(oXForm);
}
@@ -438,7 +591,7 @@ namespace MetaFile
m_oStream >> ulBrushIndex;
m_oStream >> *pBrush;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_CREATEBRUSHINDIRECT(ulBrushIndex, pBrush);
}
@@ -448,7 +601,7 @@ namespace MetaFile
m_oStream >> oColor;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETTEXTCOLOR(oColor);
}
@@ -458,7 +611,7 @@ namespace MetaFile
m_oStream >> ulObjectIndex;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SELECTOBJECT(ulObjectIndex);
}
@@ -475,7 +628,7 @@ namespace MetaFile
m_oStream >> ulIndex;
m_oStream >> *pFont;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_EXTCREATEFONTINDIRECTW(ulIndex, pFont);
}
@@ -485,7 +638,7 @@ namespace MetaFile
m_oStream >> ulAlign;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETTEXTALIGN(ulAlign);
}
@@ -495,7 +648,7 @@ namespace MetaFile
m_oStream >> ulBgMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETBKMODE(ulBgMode);
}
@@ -505,7 +658,7 @@ namespace MetaFile
m_oStream >> ulIndex;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_DELETEOBJECT(ulIndex);
}
@@ -515,7 +668,7 @@ namespace MetaFile
m_oStream >> ulMiterLimit;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETMITERLIMIT(ulMiterLimit);
}
@@ -567,7 +720,7 @@ namespace MetaFile
// Пропускаем часть с картинкой, если она была
m_oStream.Skip(current_size);
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_EXTCREATEPEN(ulPenIndex, pPen, arUnused);
}
@@ -589,7 +742,7 @@ namespace MetaFile
m_oStream >> widthY;
m_oStream >> pPen->oColor;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_CREATEPEN(ulPenIndex, widthX, pPen);
}
@@ -599,43 +752,43 @@ namespace MetaFile
m_oStream >> ulFillMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETPOLYFILLMODE(ulFillMode);
}
void CEmfParser::Read_EMR_BEGINPATH()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_BEGINPATH();
}
void CEmfParser::Read_EMR_ENDPATH()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ENDPATH();
}
void CEmfParser::Read_EMR_CLOSEFIGURE()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_CLOSEFIGURE();
}
void CEmfParser::Read_EMR_FLATTENPATH()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_FLATTENPATH();
}
void CEmfParser::Read_EMR_WIDENPATH()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_WIDENPATH();
}
void CEmfParser::Read_EMR_ABORTPATH()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ABORTPATH();
}
@@ -645,7 +798,7 @@ namespace MetaFile
m_oStream >> oPoint;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_MOVETOEX(oPoint);
}
@@ -655,7 +808,7 @@ namespace MetaFile
m_oStream >> unDirection;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETARCDIRECTION(unDirection);
}
@@ -665,7 +818,7 @@ namespace MetaFile
m_oStream >> oBounds;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_FILLPATH(oBounds);
}
@@ -675,7 +828,7 @@ namespace MetaFile
m_oStream >> ulMapMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETMAPMODE(ulMapMode);
}
@@ -685,7 +838,7 @@ namespace MetaFile
m_oStream >> oOrigin;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETWINDOWORGEX(oOrigin);
}
@@ -695,7 +848,7 @@ namespace MetaFile
m_oStream >> oExtent;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETWINDOWEXTEX(oExtent);
}
@@ -708,7 +861,7 @@ namespace MetaFile
m_oStream >> nYNum;
m_oStream >> nYDenom;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SCALEWINDOWEXTEX(nXNum, nXDenom, nYNum, nYDenom);
}
@@ -718,7 +871,7 @@ namespace MetaFile
m_oStream >> oOrigin;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETVIEWPORTORGEX(oOrigin);
}
@@ -728,7 +881,7 @@ namespace MetaFile
m_oStream >> oExtent;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETVIEWPORTEXTEX(oExtent);
}
@@ -741,7 +894,7 @@ namespace MetaFile
m_oStream >> nYNum;
m_oStream >> nYDenom;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SCALEVIEWPORTEXTEX(nXNum, nXDenom, nYNum, nYDenom);
}
@@ -751,7 +904,7 @@ namespace MetaFile
m_oStream >> ulStretchMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETSTRETCHBLTMODE(ulStretchMode);
}
@@ -761,7 +914,7 @@ namespace MetaFile
m_oStream >> ulICMMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETICMMODE(ulICMMode);
}
@@ -773,7 +926,7 @@ namespace MetaFile
m_oStream >> ulBrushIndex;
m_oStream >> oDibBrush;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_CREATEDIBPATTERNBRUSHPT(ulBrushIndex, oDibBrush);
}
@@ -785,7 +938,7 @@ namespace MetaFile
m_oStream >> ulBrushIndex;
m_oStream >> oDibBrush;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_CREATEMONOBRUSH(ulBrushIndex, oDibBrush);
}
@@ -795,7 +948,7 @@ namespace MetaFile
m_oStream >> unRegionMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SELECTCLIPPATH(unRegionMode);
}
@@ -805,7 +958,7 @@ namespace MetaFile
m_oStream >> oColor;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETBKCOLOR(oColor);
}
@@ -816,7 +969,7 @@ namespace MetaFile
m_oStream >> oClip;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_EXCLUDECLIPRECT(oClip);
}
@@ -827,7 +980,7 @@ namespace MetaFile
m_oStream >> ulRgnDataSize;
m_oStream >> ulRegionMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_EXTSELECTCLIPRGN(ulRgnDataSize, ulRegionMode);
}
@@ -842,7 +995,7 @@ namespace MetaFile
m_oStream >> ulRop2Mode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETROP2(ulRop2Mode);
}
@@ -856,7 +1009,7 @@ namespace MetaFile
m_oStream >> ulPaletteIndex;
m_oStream >> *pPalette;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_CREATEPALETTE(ulPaletteIndex, pPalette);
}
@@ -866,13 +1019,13 @@ namespace MetaFile
m_oStream >> ulIndex;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SELECTPALETTE(ulIndex);
}
void CEmfParser::Read_EMR_REALIZEPALETTE()
{
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_REALIZEPALETTE();
}
@@ -882,7 +1035,7 @@ namespace MetaFile
m_oStream >> oClip;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_INTERSECTCLIPRECT(oClip);
}
@@ -892,7 +1045,7 @@ namespace MetaFile
m_oStream >> ulLayoutMode;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETLAYOUT(ulLayoutMode);
}
@@ -902,7 +1055,7 @@ namespace MetaFile
m_oStream >> oOrigin;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETBRUSHORGEX(oOrigin);
}
@@ -919,7 +1072,7 @@ namespace MetaFile
m_oStream >> dStartAngle;
m_oStream >> dSweepAngle;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ANGLEARC(oCenter, unRadius, dStartAngle, dSweepAngle);
}
@@ -951,7 +1104,7 @@ namespace MetaFile
Read_EMR_ARC_BASE(oBox, oStart, oEnd, dStartAngle, dSweep);
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ARC(oBox, oStart, oEnd);
}
@@ -964,7 +1117,7 @@ namespace MetaFile
Read_EMR_ARC_BASE(oBox, oStart, oEnd, dStartAngle, dSweep);
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ARCTO(oBox, oStart, oEnd);
}
@@ -977,7 +1130,7 @@ namespace MetaFile
Read_EMR_ARC_BASE(oBox, oStart, oEnd, dStartAngle, dSweep);
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_CHORD(oBox, oStart, oEnd);
}
@@ -987,7 +1140,7 @@ namespace MetaFile
m_oStream >> oBox;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ELLIPSE(oBox);
}
@@ -998,7 +1151,7 @@ namespace MetaFile
m_oStream >> oText;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_EXTTEXTOUTA(oText);
}
@@ -1008,7 +1161,7 @@ namespace MetaFile
m_oStream >> oText;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_EXTTEXTOUTW(oText);
}
@@ -1018,7 +1171,7 @@ namespace MetaFile
m_oStream >> oPoint;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_LINETO(oPoint);
}
@@ -1031,7 +1184,7 @@ namespace MetaFile
Read_EMR_ARC_BASE(oBox, oStart, oEnd, dStartAngle, dSweep);
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_PIE(oBox, oStart, oEnd);
}
@@ -1067,7 +1220,7 @@ namespace MetaFile
m_oStream >> arPoints[ulIndex + 2];
}
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYBEZIER(oBounds, arPoints);
}
@@ -1101,7 +1254,7 @@ namespace MetaFile
m_oStream >> arPoints[ulIndex + 2];
}
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYBEZIERTO_BASE(oBounds, arPoints);
}
@@ -1146,7 +1299,7 @@ namespace MetaFile
for (unsigned int unIndex = 0; unIndex < unCount; unIndex++)
m_oStream >> pAbTypes[unIndex];
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYDRAW_BASE(oBounds, pPoints, unCount, pAbTypes);
delete[] pPoints;
@@ -1179,7 +1332,7 @@ namespace MetaFile
for (unsigned int ulIndex = 0; ulIndex < ulCount; ulIndex++)
m_oStream >> arPoints[ulIndex];
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYGON_BASE(oBounds, arPoints);
}
@@ -1209,7 +1362,7 @@ namespace MetaFile
for (unsigned int ulIndex = 0; ulIndex < ulCount; ulIndex++)
m_oStream >> arPoints[ulIndex];
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYLINE_BASE(oBounds, arPoints);
}
@@ -1236,7 +1389,7 @@ namespace MetaFile
for (unsigned int ulIndex = 0; ulIndex < ulCount; ulIndex++)
m_oStream >> arPoints[ulIndex];
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYLINETO_BASE(oBounds, arPoints);
}
@@ -1278,7 +1431,7 @@ namespace MetaFile
for (unsigned int unPointIndex = 0; unPointIndex < arPoints[unPolygonIndex].size(); ++unPointIndex)
m_oStream >> arPoints[unPolygonIndex][unPointIndex];
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYPOLYGON(oBounds, arPoints);
delete[] pPolygonPointCount;
@@ -1326,7 +1479,7 @@ namespace MetaFile
for (unsigned int unPointIndex = 0; unPointIndex < arPoints[unPolylineIndex].size(); ++unPointIndex)
m_oStream >> arPoints[unPolylineIndex][unPointIndex];
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_POLYPOLYLINE(oBounds, arPoints);
delete[] pPolylinePointCount;
@@ -1347,7 +1500,7 @@ namespace MetaFile
if (!oText.arEmrText)
return SetError();
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
{
for (unsigned int unIndex = 0; unIndex < oText.unCStrings; unIndex++)
{
@@ -1370,7 +1523,7 @@ namespace MetaFile
if (!oText.arEmrText)
return SetError();
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
{
for (unsigned int unIndex = 0; unIndex < oText.unCStrings; unIndex++)
{
@@ -1385,7 +1538,7 @@ namespace MetaFile
m_oStream >> oBox;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_RECTANGLE(oBox);
}
@@ -1397,7 +1550,7 @@ namespace MetaFile
m_oStream >> oBox;
m_oStream >> oCorner;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_ROUNDRECT(oBox, oCorner);
}
@@ -1409,7 +1562,7 @@ namespace MetaFile
m_oStream >> oPoint;
m_oStream >> oColor;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SETPIXELV(oPoint, oColor);
}
@@ -1419,7 +1572,7 @@ namespace MetaFile
m_oStream >> oText;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_SMALLTEXTOUT(oText);
}
@@ -1429,7 +1582,7 @@ namespace MetaFile
m_oStream >> oBounds;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_STROKEANDFILLPATH(oBounds);
}
@@ -1439,7 +1592,7 @@ namespace MetaFile
m_oStream >> oBounds;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_STROKEPATH(oBounds);
}
@@ -1472,7 +1625,7 @@ namespace MetaFile
if (4 == unVer)
m_oStream.Skip(unTri * 4);
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_GRADIENTFILL(arVertex, arVertexIndexes, unMode);
}
@@ -1485,10 +1638,13 @@ namespace MetaFile
if (sType == "EMF+" && NULL != m_pInterpretator)
{
+ SaveDC();
+
if (NULL == m_pEmfPlusParser)
{
m_pEmfPlusParser = new CEmfPlusParser(m_pInterpretator, m_oHeader);
m_pEmfPlusParser->SetFontManager(GetFontManager());
+ m_pEmfPlusParser->SetParent(this);
}
m_pEmfPlusParser->SetStream(m_oStream.GetCurPtr(), m_ulRecordSize - 8);
@@ -1500,6 +1656,8 @@ namespace MetaFile
m_pInterpretator->ChangeConditional();
m_oStream.Skip(m_ulRecordSize - 8);
+
+ RestoreDC(-1);
}
else if (sType == "GDIC")
{
@@ -1522,6 +1680,7 @@ namespace MetaFile
oWmfParser.SetFontManager(GetFontManager());
oWmfParser.SetStream(m_oStream.GetCurPtr(), unWinMetafileSize);
+ oWmfParser.SetParent(this);
oWmfParser.Scan();
if (oWmfParser.CheckError())
@@ -1544,11 +1703,11 @@ namespace MetaFile
XmlUtils::CXmlWriter *pXmlWriter = ((CEmfInterpretatorSvg*)m_pInterpretator)->GetXmlWriter();
- TRectL* pWmfRect = oWmfParser.GetDCBounds();
- TRectL *pCurentRect = GetDCBounds();
+ const TRectL& oWmfRect{oWmfParser.GetDCBounds()};
+ const TRectL& oCurentRect{GetDCBounds()};
- const double dScaleX = std::abs((double)(pCurentRect->Right - pCurentRect->Left) / (double)(pWmfRect->Right - pWmfRect->Left));
- const double dScaleY = std::abs((double)(pCurentRect->Bottom - pCurentRect->Top) / (double)(pWmfRect->Bottom - pWmfRect->Top));
+ const double dScaleX = std::abs((double)(oCurentRect.Right - oCurentRect.Left) / (double)(oWmfRect.Right - oWmfRect.Left));
+ const double dScaleY = std::abs((double)(oCurentRect.Bottom - oCurentRect.Top) / (double)(oWmfRect.Bottom - oWmfRect.Top));
const bool bAddGElement = !Equals(1., dScaleX) || !Equals(1., dScaleY);
@@ -1598,7 +1757,7 @@ namespace MetaFile
for (TRectL &oRect : arRects)
m_oStream >> oRect;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_FILLRGN(oBounds, unIhBrush, oRegionDataHeader, arRects);
}
@@ -1625,7 +1784,7 @@ namespace MetaFile
for (TRectL &oRect : arRects)
m_oStream >> oRect;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_PAINTRGN(oBounds, oRegionDataHeader, arRects);
}
@@ -1657,7 +1816,7 @@ namespace MetaFile
for (TRectL &oRect : arRects)
m_oStream >> oRect;
- if (NULL == m_pEmfPlusParser || !m_pEmfPlusParser->GetBanEMFProcesses())
+ if (!BanEMFProcesses())
HANDLE_EMR_FRAMERGN(oBounds, unIhBrush, nWidth, nHeight, oRegionDataHeader, arRects);
}
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.h b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.h
index 967e822be0..f2870789b7 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParser.h
@@ -20,13 +20,12 @@ namespace MetaFile
void ClearFile() override;
- EmfParserType GetType() override;
+ EmfParserType GetType() const override;
void SetStream(BYTE* pBuf, unsigned int unSize);
-
- void SetOnlyEmfPlus(bool bValue);
private:
CEmfPlusParser *m_pEmfPlusParser;
- bool m_bOnlyEmfPlus;
+
+ bool BanEMFProcesses() const;
bool ReadImage(unsigned int offBmi, unsigned int cbBmi, unsigned int offBits, unsigned int cbBits, unsigned int ulSkip, BYTE **ppBgraBuffer, unsigned int *pulWidth, unsigned int *pulHeight) override;
void Read_EMR_HEADER();
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.cpp b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.cpp
index 16b9dc35b7..18423b0fc0 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.cpp
@@ -16,6 +16,14 @@
#define GRADIENT_FILL_OP_FLAG 0x000000ff
#endif
+#ifdef _DEBUG
+#ifdef LOG_EMF_RECORDS
+ #if 1 == LOG_EMF_RECORDS
+ unsigned int unFileLevel = 0;
+#endif
+#endif
+#endif
+
namespace MetaFile
{
void CEmfParserBase::ImageProcessing(const TEmfAlphaBlend &oTEmfAlphaBlend)
@@ -228,12 +236,12 @@ namespace MetaFile
}
}
- void CEmfParserBase::TranslatePoint(TPointL &oPoint, double &dX, double &dY)
+ void CEmfParserBase::TranslatePoint(TPointL &oPoint, double &dX, double &dY) const
{
TranslatePoint(oPoint.X, oPoint.Y, dX, dY);
}
- void CEmfParserBase::TranslatePoint(int nX, int nY, double &dX, double &dY)
+ void CEmfParserBase::TranslatePoint(int nX, int nY, double &dX, double &dY) const
{
dX = (double)nX;
dY = (double)nY;
@@ -445,7 +453,7 @@ namespace MetaFile
if (!oText.pOutputString)
return SetError();
- IFont* pFont = GetFont();
+ const IFont* pFont = GetFont();
NSStringExt::CConverter::ESingleByteEncoding eCharSet = NSStringExt::CConverter::ESingleByteEncoding::SINGLE_BYTE_ENCODING_DEFAULT;
if (pFont)
{
@@ -597,12 +605,9 @@ namespace MetaFile
}
CEmfParserBase::CEmfParserBase()
- : m_oPlayer(this)
+ : m_oPlayer(this), m_pPath(NULL), m_pInterpretator(NULL), m_bEof(false)
{
- m_pPath = NULL;
- m_pDC = m_oPlayer.GetDC();
- m_pInterpretator = NULL;
- m_bEof = false;
+ m_pDC = m_oPlayer.GetDC();
}
CEmfParserBase::~CEmfParserBase(){}
@@ -617,35 +622,34 @@ namespace MetaFile
m_bEof = false;
}
- TRectL *CEmfParserBase::GetDCBounds()
+ const TRectL& CEmfParserBase::GetDCBounds() const
{
- return &m_oHeader.oFrameToBounds;
+ return m_oHeader.oFrameToBounds;
}
-
- CClip *CEmfParserBase::GetClip()
+
+ const CClip *CEmfParserBase::GetClip() const
{
return m_pDC->GetClip();
}
- double CEmfParserBase::GetPixelHeight()
+ double CEmfParserBase::GetPixelHeight() const
{
return m_pDC->GetPixelHeight();
}
- double CEmfParserBase::GetPixelWidth()
+ double CEmfParserBase::GetPixelWidth() const
{
return m_pDC->GetPixelWidth();
}
- int CEmfParserBase::GetTextColor()
+ int CEmfParserBase::GetTextColor() const
{
- TRGBA& oColor = m_pDC->GetTextColor();
- return METAFILE_RGBA(oColor.r, oColor.g, oColor.b, 0);
+ return m_pDC->GetTextColor().ToInt();
}
- IFont *CEmfParserBase::GetFont()
+ const IFont *CEmfParserBase::GetFont() const
{
- IFont* pFont = m_pDC->GetFont();
+ const IFont* pFont = m_pDC->GetFont();
if (!pFont)
return NULL;
@@ -653,46 +657,37 @@ namespace MetaFile
return pFont;
}
- IBrush *CEmfParserBase::GetBrush()
+ const IBrush *CEmfParserBase::GetBrush() const
{
- IBrush* pBrush = m_pDC->GetBrush();
- if (!pBrush)
- return NULL;
-
- return pBrush;
+ return m_pDC->GetBrush();
}
- IPen *CEmfParserBase::GetPen()
+ const IPen *CEmfParserBase::GetPen() const
{
- IPen* pPen = m_pDC->GetPen();
- if (!pPen)
- return NULL;
-
- return pPen;
+ return m_pDC->GetPen();
}
- unsigned int CEmfParserBase::GetTextAlign()
+ unsigned int CEmfParserBase::GetTextAlign() const
{
return m_pDC->GetTextAlign();
}
- unsigned int CEmfParserBase::GetTextBgMode()
+ unsigned int CEmfParserBase::GetTextBgMode() const
{
return m_pDC->GetBgMode();
}
- int CEmfParserBase::GetTextBgColor()
+ int CEmfParserBase::GetTextBgColor() const
{
- TRGBA& oColor = m_pDC->GetBgColor();
- return METAFILE_RGBA(oColor.r, oColor.g, oColor.b, 0);
+ return m_pDC->GetBgColor()->ToInt();
}
- unsigned int CEmfParserBase::GetFillMode()
+ unsigned int CEmfParserBase::GetFillMode() const
{
return m_pDC->GetFillMode();
}
- TPointD CEmfParserBase::GetCurPos()
+ TPointD CEmfParserBase::GetCurPos() const
{
TPointL oPoint = m_pDC->GetCurPos();
TPointD oRes;
@@ -700,85 +695,80 @@ namespace MetaFile
return oRes;
}
- TXForm *CEmfParserBase::GetInverseTransform()
+ const TXForm& CEmfParserBase::GetInverseTransform() const
{
return m_pDC->GetInverseTransform();
}
- TXForm *CEmfParserBase::GetTransform(int iGraphicsMode)
+ const TXForm& CEmfParserBase::GetTransform(int iGraphicsMode)
{
- TRectL* pBounds = GetDCBounds();
- double dT = pBounds->Top;
- double dL = pBounds->Left;
+ double dT = GetDCBounds().Top;
+ double dL = GetDCBounds().Left;
TXForm oShiftXForm(1, 0, 0, 1, -dL, -dT);
- m_oTransform.Copy(m_pDC->GetFinalTransform(iGraphicsMode));
+ m_oTransform.Copy(&m_pDC->GetFinalTransform(iGraphicsMode));
m_oTransform.Multiply(oShiftXForm, MWT_RIGHTMULTIPLY);
- return &m_oTransform;
+ return m_oTransform;
}
- unsigned int CEmfParserBase::GetMiterLimit()
+ unsigned int CEmfParserBase::GetMiterLimit() const
{
return m_pDC->GetMiterLimit();
}
- unsigned int CEmfParserBase::GetRop2Mode()
+ unsigned int CEmfParserBase::GetRop2Mode() const
{
return m_pDC->GetRop2Mode();
}
- int CEmfParserBase::GetCharSpace()
+ int CEmfParserBase::GetCharSpace() const
{
return 0;
}
- bool CEmfParserBase::IsWindowFlippedY()
+ bool CEmfParserBase::IsWindowFlippedY() const
{
- TEmfWindow* pWindow = m_pDC->GetWindow();
- return (pWindow->ulH < 0);
+ return m_pDC->GetWindow().ulH < 0;
}
- bool CEmfParserBase::IsWindowFlippedX()
+ bool CEmfParserBase::IsWindowFlippedX() const
{
- TEmfWindow* pWindow = m_pDC->GetWindow();
- return (pWindow->ulW < 0);
+ return m_pDC->GetWindow().ulW < 0;
}
- unsigned int CEmfParserBase::GetMapMode()
+ unsigned int CEmfParserBase::GetMapMode() const
{
return m_pDC->GetMapMode();
}
- USHORT CEmfParserBase::GetDpi()
+ USHORT CEmfParserBase::GetDpi() const
{
return 96;
}
- IRegion *CEmfParserBase::GetRegion()
+ const IRegion *CEmfParserBase::GetRegion() const
{
return NULL;
}
- unsigned int CEmfParserBase::GetArcDirection()
+ unsigned int CEmfParserBase::GetArcDirection() const
{
return m_pDC->GetArcDirection();
}
- CPath *CEmfParserBase::GetPath()
+ const CPath *CEmfParserBase::GetPath() const
{
return m_pPath;
}
- bool CEmfParserBase::IsViewportFlippedY()
+ bool CEmfParserBase::IsViewportFlippedY() const
{
- TEmfWindow* pViewport = m_pDC->GetViewport();
- return (pViewport->ulH < 0);
+ return m_pDC->GetViewport().ulH < 0;
}
- bool CEmfParserBase::IsViewportFlippedX()
+ bool CEmfParserBase::IsViewportFlippedX() const
{
- TEmfWindow* pViewport = m_pDC->GetViewport();
- return (pViewport->ulW < 0);
+ return m_pDC->GetViewport().ulW < 0;
}
void CEmfParserBase::SetInterpretator(IOutputDevice *pOutput)
@@ -829,17 +819,28 @@ namespace MetaFile
return m_pInterpretator;
}
- TRectL* CEmfParserBase::GetBounds()
+ TXForm CEmfParserBase::CalculateCurrentTransform() const
{
- return &m_oHeader.oFramePx;
+ if (NULL == m_pParent)
+ return m_pDC->GetTransform();
+
+ TXForm oTransform{m_pParent->CalculateCurrentTransform()};
+ oTransform.Multiply(m_pDC->GetTransform(), MWT_RIGHTMULTIPLY);
+
+ return oTransform;
}
- CPath *CEmfParserBase::GetPath() const
+ const TRectL& CEmfParserBase::GetBounds() const
+ {
+ return m_oHeader.oFramePx;
+ }
+
+ CPath *CEmfParserBase::GetPath()
{
return m_pPath;
}
- TPointL CEmfParserBase::GetStartPointForArc(const TRectL &oBox, double dStartAngle)
+ TPointL CEmfParserBase::GetStartPointForArc(const TRectL &oBox, double dStartAngle) const
{
TPointL oStartPoint;
@@ -856,6 +857,25 @@ namespace MetaFile
return oStartPoint;
}
+ void CEmfParserBase::SaveDC()
+ {
+ m_oPlayer.SaveDC();
+ UpdateOutputDC();
+ }
+
+ void CEmfParserBase::RestoreDC(int nIndex)
+ {
+ if (nIndex >= 0)
+ {
+ SetError();
+ return;
+ }
+
+ m_oPlayer.RestoreDC(nIndex);
+ m_pDC = m_oPlayer.GetDC();
+ UpdateOutputDC();
+ }
+
void CEmfParserBase::HANDLE_EMR_HEADER(TEmfHeader &oTEmfHeader)
{
if (ENHMETA_SIGNATURE != m_oHeader.ulSignature || 0x00010000 != m_oHeader.ulVersion)
@@ -952,8 +972,7 @@ namespace MetaFile
if (NULL != m_pInterpretator)
m_pInterpretator->HANDLE_EMR_SAVEDC();
- m_oPlayer.SaveDC();
- UpdateOutputDC();
+ SaveDC();
}
void CEmfParserBase::HANDLE_EMR_RESTOREDC(int &nIndexDC)
@@ -961,15 +980,7 @@ namespace MetaFile
if (NULL != m_pInterpretator)
m_pInterpretator->HANDLE_EMR_RESTOREDC(nIndexDC);
- if (nIndexDC >= 0)
- {
- SetError();
- return;
- }
-
- m_oPlayer.RestoreDC(nIndexDC);
- m_pDC = m_oPlayer.GetDC();
- UpdateOutputDC();
+ RestoreDC(nIndexDC);
}
void CEmfParserBase::HANDLE_EMR_MODIFYWORLDTRANSFORM(TXForm &oXForm, unsigned int &unMode)
@@ -1292,7 +1303,7 @@ namespace MetaFile
if (NULL != m_pPath)
{
- m_pDC->GetClip()->SetPath(*m_pPath, unRegionMode, *GetDC()->GetFinalTransform(GM_ADVANCED));
+ m_pDC->GetClip()->SetPath(*m_pPath, unRegionMode, m_pDC->GetFinalTransform(GM_ADVANCED));
RELEASEOBJECT(m_pPath);
UpdateOutputDC();
}
@@ -1338,9 +1349,9 @@ namespace MetaFile
TranslatePoint(oClip.Left, oClip.Top, oClipRect.Left, oClipRect.Top);
TranslatePoint(oClip.Right, oClip.Bottom, oClipRect.Right, oClipRect.Bottom);
- TRectL* pRect = GetDCBounds();
- TranslatePoint(pRect->Left, pRect->Top, oBB.Left, oBB.Top);
- TranslatePoint(pRect->Right, pRect->Bottom, oBB.Right, oBB.Bottom);
+ const TRectL& oRect{GetDCBounds()};
+ TranslatePoint(oRect.Left, oRect.Top, oBB.Left, oBB.Top);
+ TranslatePoint(oRect.Right, oRect.Bottom, oBB.Right, oBB.Bottom);
m_pDC->GetClip()->Exclude(oClipRect, oBB);
UpdateOutputDC();
@@ -1408,9 +1419,9 @@ namespace MetaFile
TRectD oClipRect;
TranslatePoint(oClip.Left, oClip.Top, oClipRect.Left, oClipRect.Top);
TranslatePoint(oClip.Right, oClip.Bottom, oClipRect.Right, oClipRect.Bottom);
-
+
m_pDC->GetClip()->Intersect(oClipRect);
-
+
if (NULL != m_pInterpretator)
m_pInterpretator->HANDLE_EMR_INTERSECTCLIPRECT(oClip);
}
@@ -1695,12 +1706,12 @@ namespace MetaFile
return;
CEmfPlusBrush oBrush;
- oBrush.unStyle = BS_LINEARGRADIENT;
+ oBrush.unStyle = BS_LINEARGRADIENT;
- oBrush.oColor.chRed = arVertex[0].ushRed / 255.;
- oBrush.oColor.chGreen = arVertex[0].ushGreen / 255.;
- oBrush.oColor.chBlue = arVertex[0].ushBlue / 255.;
- oBrush.oColor.chAlpha = 255;
+ oBrush.oColor.chRed = arVertex[0].ushRed / 255.;
+ oBrush.oColor.chGreen = arVertex[0].ushGreen / 255.;
+ oBrush.oColor.chBlue = arVertex[0].ushBlue / 255.;
+ oBrush.oColor.chAlpha = 255;
if (GRADIENT_FILL_RECT_H == unFillMode || GRADIENT_FILL_TRIANGLE == unFillMode)
{
@@ -1726,7 +1737,7 @@ namespace MetaFile
}
oBrush.oColorBack.chAlpha = 255;
- IBrush* pBrush = m_pDC->GetBrush();
+ const IBrush* pBrush = m_pDC->GetBrush();
m_pDC->SetBrush(&oBrush);
MoveTo(arVertex[0].nX, arVertex[0].nY);
@@ -1742,7 +1753,7 @@ namespace MetaFile
m_pInterpretator->HANDLE_EMR_GRADIENTFILL(arVertex, arIndexes, unFillMode);
m_pDC->RemoveBrush(&oBrush);
- m_pDC->SetBrush(pBrush);
+ m_pDC->SetBrush((IBrush*)pBrush);
}
void CEmfParserBase::HANDLE_EMR_UNKNOWN(const unsigned int& unRecordSize)
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.h b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.h
index b0780663e2..8b7b0f6bc9 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfParserBase.h
@@ -11,14 +11,39 @@
#include "../EmfInterpretator/CEmfInterpretatorBase.h"
+
+#if defined(DrawText)
+#undef DrawText
+#endif
+
+#define PRINT_LOG(text) do {} while(false)
+#define GO_DOWN_LEVEL_BELOW do {} while (false)
+#define GO_UP_LEVEL do {} while (false)
+
#ifdef _DEBUG
#include
#include
#include
-#endif
-#if defined(DrawText)
-#undef DrawText
+#define LOG_EMF_RECORDS 0
+
+#ifdef LOG_EMF_RECORDS
+ #if 1 == LOG_EMF_RECORDS
+ #define PRINTING_EMF_RECORDS 1
+ #define PRINTING_EMF_PLUS_RECORDS 1
+
+ extern unsigned int unFileLevel;
+
+ #define GO_DOWN_LEVEL_BELOW \
+ std::wcout << L"LEVEL [" << unFileLevel << L"] -> [" << --::unFileLevel << L"]" << std::endl
+
+ #define GO_UP_LEVEL \
+ std::wcout << L"LEVEL [" << unFileLevel << L"] -> [" << ++::unFileLevel << L"]" << std::endl
+
+ #define PRINT_LOG(text) \
+ std::wcout << L"LEVEL [" << unFileLevel << L"] [LOG] " << text << std::endl
+ #endif
+#endif
#endif
namespace MetaFile
@@ -54,37 +79,38 @@ namespace MetaFile
virtual void PlayFile() = 0;
virtual void Scan() = 0;
- virtual EmfParserType GetType() = 0;
+ virtual EmfParserType GetType() const = 0;
- void PlayMetaFile() override;
- void ClearFile() override;
- TRectL* GetDCBounds() override;
- CClip* GetClip() override;
- double GetPixelHeight() override;
- double GetPixelWidth() override;
- int GetTextColor() override;
- IFont* GetFont() override;
- IBrush* GetBrush() override;
- IPen* GetPen() override;
- unsigned int GetTextAlign() override;
- unsigned int GetTextBgMode() override;
- int GetTextBgColor() override;
- unsigned int GetFillMode() override;
- TPointD GetCurPos() override;
- TXForm* GetInverseTransform() override;
- TXForm* GetTransform(int = GM_ADVANCED) override;
- unsigned int GetMiterLimit() override;
- unsigned int GetRop2Mode() override;
- int GetCharSpace() override;
- bool IsWindowFlippedY() override;
- bool IsWindowFlippedX() override;
- unsigned int GetMapMode() override;
- USHORT GetDpi() override;
- IRegion* GetRegion() override;
- unsigned int GetArcDirection() override;
- CPath* GetPath() override;
- bool IsViewportFlippedY();
- bool IsViewportFlippedX();
+ void PlayMetaFile() override;
+ void ClearFile() override;
+ const TRectL& GetDCBounds() const override;
+ const CClip* GetClip() const override;
+ double GetPixelHeight() const override;
+ double GetPixelWidth() const override;
+ int GetTextColor() const override;
+ const IFont* GetFont() const override;
+ const IBrush* GetBrush() const override;
+ const IPen* GetPen() const override;
+ unsigned int GetTextAlign() const override;
+ unsigned int GetTextBgMode() const override;
+ int GetTextBgColor() const override;
+ unsigned int GetFillMode() const override;
+ TPointD GetCurPos() const override;
+ const TXForm& GetInverseTransform() const override;
+ const TXForm& GetTransform(int = GM_ADVANCED) override;
+ unsigned int GetMiterLimit() const override;
+ unsigned int GetRop2Mode() const override;
+ int GetCharSpace() const override;
+ bool IsWindowFlippedY() const override;
+ bool IsWindowFlippedX() const override;
+ unsigned int GetMapMode() const override;
+ USHORT GetDpi() const override;
+ const IRegion* GetRegion() const override;
+ unsigned int GetArcDirection() const override;
+ const CPath* GetPath() const override;
+
+ bool IsViewportFlippedY() const;
+ bool IsViewportFlippedX() const;
void SetInterpretator(IOutputDevice* pOutput);
void SetInterpretator(const wchar_t *wsFilePath, InterpretatorType oInterpretatorType, unsigned int unWidth = 0, unsigned int unHeight = 0);
@@ -93,9 +119,11 @@ namespace MetaFile
CEmfInterpretatorBase* GetInterpretator();
- CEmfDC* GetDC();
- TRectL* GetBounds();
- CPath* GetPath() const;
+ TXForm CalculateCurrentTransform() const override;
+
+ CEmfDC* GetDC();
+ const TRectL& GetBounds() const;
+ CPath* GetPath();
private:
//Работа с изображениями
void ImageProcessing(const TEmfAlphaBlend &oTEmfAlphaBlend);
@@ -107,8 +135,8 @@ namespace MetaFile
void DrawImage(int nX, int nY, int nW, int nH, BYTE *pImageBuffer, unsigned int unImageW, unsigned int unImageH);
//----------------------
- void TranslatePoint(TPointL &oPoint, double &dX, double &dY);
- void TranslatePoint(int nX, int nY, double &dX, double &dY);
+ void TranslatePoint(TPointL &oPoint, double &dX, double &dY) const;
+ void TranslatePoint(int nX, int nY, double &dX, double &dY) const;
void UpdateOutputDC();
void ClosePath();
@@ -151,13 +179,16 @@ namespace MetaFile
CPath* m_pPath;
TEmfXForm m_oTransform;
- CEmfInterpretatorBase *m_pInterpretator;
+ CEmfInterpretatorBase* m_pInterpretator;
bool m_bEof;
private:
virtual bool ReadImage(unsigned int offBmi, unsigned int cbBmi, unsigned int offBits, unsigned int cbBits, unsigned int ulSkip, BYTE **ppBgraBuffer, unsigned int *pulWidth, unsigned int *pulHeight) = 0;
- TPointL GetStartPointForArc(const TRectL &oBox, double dStartAngle);
+ TPointL GetStartPointForArc(const TRectL &oBox, double dStartAngle) const;
+
+ void SaveDC();
+ void RestoreDC(int nIndex);
void HANDLE_EMR_HEADER(TEmfHeader& oTEmfHeader);
void HANDLE_EMR_ALPHABLEND(TEmfAlphaBlend& oTEmfAlphaBlend);
@@ -397,6 +428,5 @@ namespace MetaFile
void HANDLE_EMR_FRAMERGN(const TRectL& oBounds, unsigned int unIhBrush, int nWidth, int nHeight, const TRegionDataHeader& oRegionDataHeader, const std::vector& arRects);
};
-
}
#endif // CEMFPARSERBASE_H
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.cpp b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.cpp
index 9145e5dd45..eff536c1d3 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.cpp
@@ -88,75 +88,93 @@
#define MAX_PICTURE_SIZE 2000.
+#define PRINT_EMF_PLUS_RECORD(type, size) do {} while(false)
+
+#ifdef _DEBUG
+ #ifdef LOG_EMF_RECORDS
+ #if 1 == LOG_EMF_RECORDS
+ #ifdef PRINTING_EMF_PLUS_RECORDS
+ #if 1 == PRINTING_EMF_PLUS_RECORDS
+ #include
+
+ static std::map mActionNamesEmfPlus =
+ {
+ {0x4035, L"EMRPLUS_OFFSETCLIP"},
+ {0x4031, L"EMRPLUS_RESETCLIP"},
+ {0x4033, L"EMFPLUS_SETCLIPPATH"},
+ {0x4032, L"EMFPLUS_SETCLIPRECT"},
+ {0x4034, L"EMFPLUS_SETCLIPREGION"},
+
+ {0x4003, L"EMFPLUS_COMMENT"},
+
+ {0x4002, L"EMFPLUS_ENDOFFILE"},
+ {0x4004, L"EMFPLUS_GETDC"},
+ {0x4001, L"EMFPLUS_HEADER"},
+
+ {0x4009, L"EMFPLUS_CLEAR"},
+ {0x4012, L"EMFPLUS_DRAWARC"},
+ {0x4019, L"EMFPLUS_DRAWBEZIERS"},
+ {0x4017, L"EMFPLUS_DRAWCLOSEDCURVE"},
+ {0x4018, L"EMFPLUS_DRAWCURVE"},
+ {0x4036, L"EMFPLUS_DRAWDRIVERSTRING"},
+ {0x400F, L"EMFPLUS_DRAWELLIPSE"},
+ {0x401A, L"EMFPLUS_DRAWIMAGE"},
+ {0x401B, L"EMFPLUS_DRAWIMAGEPOINTS"},
+ {0x400D, L"EMFPLUS_DRAWLINES"},
+ {0x4015, L"EMFPLUS_DRAWPATH"},
+ {0x4011, L"EMFPLUS_DRAWPIE"},
+ {0x400B, L"EMFPLUS_DRAWRECTS"},
+ {0x401C, L"EMFPLUS_DRAWSTRING"},
+ {0x4016, L"EMFPLUS_FILLCLOSEDCURVE"},
+ {0x400E, L"EMFPLUS_FILLELLIPSE"},
+ {0x4014, L"EMFPLUS_FILLPATH"},
+ {0x4010, L"EMFPLUS_FILLPIE"},
+ {0x400C, L"EMFPLUS_FILLPOLYGON"},
+ {0x400A, L"EMFPLUS_FILLRECTS"},
+ {0x4013, L"EMFPLUS_FILLREGION"},
+
+ {0x4008, L"EMFPLUS_OBJECT"},
+ {0x4038, L"EMFPLUS_SERIALIZABLEOBJECT"},
+
+ {0x401E, L"EMFPLUS_SETANTIALIASMODE"},
+ {0x4023, L"EMFPLUS_SETCOMPOSITINGMODE"},
+ {0x4024, L"EMFPLUS_SETCOMPOSITINGQUALITY"},
+ {0x4021, L"EMFPLUS_SETINTERPOLATIONMODE"},
+ {0x4022, L"EMFPLUS_SETPIXELOFFSETMODE"},
+ {0x401D, L"EMFPLUS_SETRENDERINGORIGIN"},
+ {0x4020, L"EMFPLUS_SETTEXTCONTRAST"},
+ {0x401F, L"EMFPLUS_SETTEXTRENDERINGHINT"},
+
+ {0x4027, L"EMFPLUS_BEGINCONTAINER"},
+ {0x4028, L"EMFPLUS_BEGINCONTAINERNOPARAMS"},
+ {0x4029, L"EMFPLUS_ENDCONTAINER"},
+ {0x4026, L"EMFPLUS_RESTORE"},
+ {0x4025, L"EMFPLUS_SAVE"},
+
+ {0x403A, L"EMFPLUS_SETTSCLIP"},
+ {0x4039, L"EMFPLUS_SETTSGRAPHICS"},
+
+ {0x402C, L"EMFPLUS_MULTIPLYWORLDTRANSFORM"},
+ {0x402B, L"EMFPLUS_RESETWORLDTRANSFORM"},
+ {0x402F, L"EMFPLUS_ROTATEWORLDTRANSFORM"},
+ {0x402E, L"EMFPLUS_SCALEWORLDTRANSFORM"},
+ {0x4030, L"EMFPLUS_SETPAGETRANSFORM"},
+ {0x402A, L"EMFPLUS_SETWORLDTRANSFORM"},
+ {0x402D, L"EMFPLUS_TRANSLATEWORLDTRANSFORM"}
+ };
+
+ #define PRINT_EMF_PLUS_RECORD(type, size) \
+ std::wcout << L"LEVEL [" << unFileLevel << L"] EMF_PLUS_RECORD: " << mActionNamesEmfPlus[unShType] << L" {DataSize = " << size << L"}" << std::endl
+ #endif
+ #endif
+ #endif
+ #endif
+#endif
+
namespace MetaFile
-{ static std::map ActionNamesEmfPlus =
- {
- {0x4035, L"EMRPLUS_OFFSETCLIP"},
- {0x4031, L"EMRPLUS_RESETCLIP"},
- {0x4033, L"EMFPLUS_SETCLIPPATH"},
- {0x4032, L"EMFPLUS_SETCLIPRECT"},
- {0x4034, L"EMFPLUS_SETCLIPREGION"},
-
- {0x4003, L"EMFPLUS_COMMENT"},
-
- {0x4002, L"EMFPLUS_ENDOFFILE"},
- {0x4004, L"EMFPLUS_GETDC"},
- {0x4001, L"EMFPLUS_HEADER"},
-
- {0x4009, L"EMFPLUS_CLEAR"},
- {0x4012, L"EMFPLUS_DRAWARC"},
- {0x4019, L"EMFPLUS_DRAWBEZIERS"},
- {0x4017, L"EMFPLUS_DRAWCLOSEDCURVE"},
- {0x4018, L"EMFPLUS_DRAWCURVE"},
- {0x4036, L"EMFPLUS_DRAWDRIVERSTRING"},
- {0x400F, L"EMFPLUS_DRAWELLIPSE"},
- {0x401A, L"EMFPLUS_DRAWIMAGE"},
- {0x401B, L"EMFPLUS_DRAWIMAGEPOINTS"},
- {0x400D, L"EMFPLUS_DRAWLINES"},
- {0x4015, L"EMFPLUS_DRAWPATH"},
- {0x4011, L"EMFPLUS_DRAWPIE"},
- {0x400B, L"EMFPLUS_DRAWRECTS"},
- {0x401C, L"EMFPLUS_DRAWSTRING"},
- {0x4016, L"EMFPLUS_FILLCLOSEDCURVE"},
- {0x400E, L"EMFPLUS_FILLELLIPSE"},
- {0x4014, L"EMFPLUS_FILLPATH"},
- {0x4010, L"EMFPLUS_FILLPIE"},
- {0x400C, L"EMFPLUS_FILLPOLYGON"},
- {0x400A, L"EMFPLUS_FILLRECTS"},
- {0x4013, L"EMFPLUS_FILLREGION"},
-
- {0x4008, L"EMFPLUS_OBJECT"},
- {0x4038, L"EMFPLUS_SERIALIZABLEOBJECT"},
-
- {0x401E, L"EMFPLUS_SETANTIALIASMODE"},
- {0x4023, L"EMFPLUS_SETCOMPOSITINGMODE"},
- {0x4024, L"EMFPLUS_SETCOMPOSITINGQUALITY"},
- {0x4021, L"EMFPLUS_SETINTERPOLATIONMODE"},
- {0x4022, L"EMFPLUS_SETPIXELOFFSETMODE"},
- {0x401D, L"EMFPLUS_SETRENDERINGORIGIN"},
- {0x4020, L"EMFPLUS_SETTEXTCONTRAST"},
- {0x401F, L"EMFPLUS_SETTEXTRENDERINGHINT"},
-
- {0x4027, L"EMFPLUS_BEGINCONTAINER"},
- {0x4028, L"EMFPLUS_BEGINCONTAINERNOPARAMS"},
- {0x4029, L"EMFPLUS_ENDCONTAINER"},
- {0x4026, L"EMFPLUS_RESTORE"},
- {0x4025, L"EMFPLUS_SAVE"},
-
- {0x403A, L"EMFPLUS_SETTSCLIP"},
- {0x4039, L"EMFPLUS_SETTSGRAPHICS"},
-
- {0x402C, L"EMFPLUS_MULTIPLYWORLDTRANSFORM"},
- {0x402B, L"EMFPLUS_RESETWORLDTRANSFORM"},
- {0x402F, L"EMFPLUS_ROTATEWORLDTRANSFORM"},
- {0x402E, L"EMFPLUS_SCALEWORLDTRANSFORM"},
- {0x4030, L"EMFPLUS_SETPAGETRANSFORM"},
- {0x402A, L"EMFPLUS_SETWORLDTRANSFORM"},
- {0x402D, L"EMFPLUS_TRANSLATEWORLDTRANSFORM"}
- };
-
+{
CEmfPlusParser::CEmfPlusParser(CEmfInterpretatorBase *pEmfInterpretator, const TEmfHeader& oHeader)
- : m_bBanEmfProcessing(false),
+ : m_bBanEmfProcessing(true),
m_unLogicalDpiX(96),
m_unLogicalDpiY(96),
m_dUnitKoef(1)
@@ -220,6 +238,9 @@ namespace MetaFile
unsigned short unShType, unShFlags;
unsigned int unSize;
+ if (NULL != m_pInterpretator)
+ GO_UP_LEVEL;
+
do
{
if (m_bEof)
@@ -234,11 +255,17 @@ namespace MetaFile
m_oStream >> unSize;
m_oStream >> m_ulRecordSize;
+ if (unSize < 12 || m_ulRecordSize > m_oStream.CanRead() || m_ulRecordSize > (unSize - 12))
+ break;
+
m_oStream.SetCurrentBlockSize(m_ulRecordSize);
unsigned int unRecordPos = m_oStream.Tell();
- LOGGING(ActionNamesEmfPlus[unShType] << L" DataSize = " << m_ulRecordSize)
+ if (NULL != m_pInterpretator)
+ PRINT_EMF_PLUS_RECORD(unShType, m_ulRecordSize);
+
+ m_bBanEmfProcessing = true;
switch (unShType)
{
@@ -318,7 +345,8 @@ namespace MetaFile
int nNeedSkip = (unRecordPos + m_ulRecordSize) - m_oStream.Tell();
m_oStream.Skip(nNeedSkip);
- LOGGING(L"Skip: " << nNeedSkip)
+ if (0 != nNeedSkip && NULL != m_pInterpretator)
+ PRINT_LOG(L"SKIP BYTES: " << nNeedSkip);
m_oStream.ClearCurrentBlockSize();
m_ulRecordSize = 0;
@@ -327,7 +355,8 @@ namespace MetaFile
if (!CheckError())
m_oStream.SeekToStart();
- LOGGING(L"_____________________________________________________")
+ if (NULL != m_pInterpretator)
+ GO_DOWN_LEVEL_BELOW;
}
void CEmfPlusParser::Scan()
@@ -339,12 +368,12 @@ namespace MetaFile
this->ClearFile();
}
- USHORT CEmfPlusParser::GetDpi()
+ USHORT CEmfPlusParser::GetDpi() const
{
return m_unLogicalDpiX;
}
- EmfParserType CEmfPlusParser::GetType()
+ EmfParserType CEmfPlusParser::GetType() const
{
return EmfParserType::EmfPlusParser;
}
@@ -707,7 +736,7 @@ namespace MetaFile
switch (nStartCap)
{
- case 0: pEmfPlusPen->unStyle |= PS_STARTCAP_MASK & PS_STARTCAP_FLAT; break;
+ case 0: pEmfPlusPen->unStyle |= PS_STARTCAP_MASK & PS_STARTCAP_FLAT; break;
case 1: pEmfPlusPen->unStyle |= PS_STARTCAP_MASK & PS_STARTCAP_SQUARE; break;
case 2: pEmfPlusPen->unStyle |= PS_STARTCAP_MASK & PS_STARTCAP_ROUND; break;
}
@@ -1005,7 +1034,7 @@ namespace MetaFile
else
{
std::vector arPoints = ReadPoints(unPathPointCount);
- std::vector arPointTypes = ReadPointTypes(unPathPointCount);
+ std::vector arPointTypes = ReadPointTypes(unPathPointCount);
pPath->MoveTo(arPoints[0].X, arPoints[0].Y);
@@ -1336,19 +1365,21 @@ namespace MetaFile
oPath.LineTo(oClip.Left, oClip.Bottom);
oPath.Close();
- m_pDC->GetClip()->SetPath(oPath, nMode, *GetTransform());
+ m_pDC->GetClip()->SetPath(oPath, nMode, GetTransform());
UpdateOutputDC();
}
void CEmfPlusParser::UpdateMatrix(TEmfPlusXForm &oMatrix)
{
- oMatrix.M11 *= m_dUnitKoef;
- oMatrix.M12 *= m_dUnitKoef;
- oMatrix.M21 *= m_dUnitKoef;
- oMatrix.M22 *= m_dUnitKoef;
- oMatrix.Dx *= m_dUnitKoef;
- oMatrix.Dy *= m_dUnitKoef;
+ const double dKoef{m_dUnitKoef * (m_unLogicalDpiX / 96)};
+
+ oMatrix.M11 *= dKoef;
+ oMatrix.M12 *= dKoef;
+ oMatrix.M21 *= dKoef;
+ oMatrix.M22 *= dKoef;
+ oMatrix.Dx *= dKoef;
+ oMatrix.Dy *= dKoef;
}
bool CEmfPlusParser::SaveImage(const CEmfPlusImage &oEmfPlusImage, std::wstring &wsPathToImage)
@@ -1477,7 +1508,7 @@ namespace MetaFile
if (NULL == pBuffer || unSizeBuffer == 0 || arPoints.size() != 3)
return;
- if (ImageDataTypeBitmap == pImage->GetImageDataType())
+ if (ImageDataTypeBitmap == pImage->GetImageDataType())
{
unsigned int unWidth, unHeigth;
@@ -1493,40 +1524,60 @@ namespace MetaFile
case MetafileDataTypeEmfPlusOnly:
case MetafileDataTypeEmfPlusDual:
{
- CEmfParser oParser;
- oParser.SetOnlyEmfPlus(MetafileDataTypeEmfPlusOnly == pImage->GetMetafileType());
- return DrawMetafile(oParser, pBuffer, unSizeBuffer, oSrcRect, arPoints);
+ return DrawMetafile(pBuffer, unSizeBuffer, oSrcRect, arPoints);
}
case MetafileDataTypeWmf:
case MetafileDataTypeWmfPlaceable:
{
- CWmfParser oParser;
- return DrawMetafile(oParser, pBuffer, unSizeBuffer, oSrcRect, arPoints);
+ return DrawMetafile(pBuffer, unSizeBuffer, oSrcRect, arPoints);
}
}
}
}
template
- void CEmfPlusParser::DrawMetafile(MetafileType& oParser, BYTE *pBuffer, unsigned int unSize, const TEmfPlusRectF &oSrcRect, const std::vector &arPoints)
+ void CEmfPlusParser::DrawMetafile(BYTE *pBuffer, unsigned int unSize, const TEmfPlusRectF &oSrcRect, const std::vector &arPoints)
{
if (NULL == pBuffer || 0 == unSize || 3 != arPoints.size())
return;
+ const TRectL& oOriginalBounds{GetOriginalDCBounds()};
+ const TXForm oCurrentTransform{CalculateCurrentTransform()};
+
+ bool bIsWokspace{false};
+
+ for (TEmfPlusPointF oPoint : arPoints)
+ {
+ oCurrentTransform.Apply(oPoint.X, oPoint.Y);
+
+ if (oPoint.X > oOriginalBounds.Left && oPoint.X < oOriginalBounds.Right &&
+ oPoint.Y > oOriginalBounds.Top && oPoint.Y < oOriginalBounds.Bottom)
+ {
+ bIsWokspace = true;
+ break;
+ }
+ }
+
+ if (!bIsWokspace)
+ return;
+
+ MetafileType oParser;
+
oParser.SetStream(pBuffer, unSize);
oParser.SetFontManager(GetFontManager());
+ oParser.SetParent(this);
oParser.Scan();
if (oParser.CheckError())
return;
- const TRectL* pFileBounds = oParser.GetDCBounds();
- const double dFileWidth = std::abs(pFileBounds->Right - pFileBounds->Left);
- const double dFileHeight = std::abs(pFileBounds->Bottom - pFileBounds->Top);
+ const TRectL& oFileBounds{oParser.GetDCBounds()};
+ const double dFileWidth = std::abs(oFileBounds.Right - oFileBounds.Left);
+ const double dFileHeight = std::abs(oFileBounds.Bottom - oFileBounds.Top);
- const TRectL* pParentBounds = GetDCBounds();
- const double dParentWidth = std::abs(pParentBounds->Right - pParentBounds->Left);
- const double dParentHeight = std::abs(pParentBounds->Bottom - pParentBounds->Top);
+ const TRectL& oParentBounds{GetDCBounds()};
+ const double dParentWidth = std::abs(oParentBounds.Right - oParentBounds.Left);
+ const double dParentHeight = std::abs(oParentBounds.Bottom - oParentBounds.Top);
if (InterpretatorType::Render == m_pInterpretator->GetType())
{
@@ -1539,8 +1590,7 @@ namespace MetaFile
const double dMaxWidth = std::max(MAX_PICTURE_SIZE, dParentWidth);
const double dMaxHeight = std::max(MAX_PICTURE_SIZE, dParentHeight);
- if (dFileWidth > dMaxWidth || dFileHeight > dMaxHeight)
- dScale *= std::min(dMaxWidth / dFileWidth, dMaxHeight / dFileHeight);
+ dScale *= std::min(dMaxWidth / dFileWidth, dMaxHeight / dFileHeight);
const int nWidth = dFileWidth * dScale;
const int nHeight = dFileHeight * dScale;
@@ -1605,7 +1655,7 @@ namespace MetaFile
oParser.PlayFile();
- TXForm *pXForm = m_pDC->GetTransform();
+ const TXForm& oXForm{m_pDC->GetTransform()};
TRectD oRect;
@@ -1616,14 +1666,14 @@ namespace MetaFile
TRectD oTempSrcRect;
- oTempSrcRect.Left = oSrcRect.dX - pFileBounds->Left;
- oTempSrcRect.Top = oSrcRect.dY - pFileBounds->Top;
+ oTempSrcRect.Left = oSrcRect.dX - oFileBounds.Left;
+ oTempSrcRect.Top = oSrcRect.dY - oFileBounds.Top;
oTempSrcRect.Right = oTempSrcRect.Left + ((dFileWidth > oSrcRect.dWidth) ? oSrcRect.dWidth - GetPixelWidth() : dFileWidth);
oTempSrcRect.Bottom = oTempSrcRect.Top + ((dFileHeight > oSrcRect.dHeight) ? oSrcRect.dHeight - GetPixelHeight() : dFileHeight);
TXForm oTransform;
- oTransform.Copy(pXForm);
+ oTransform.Copy(oXForm);
oTransform.Dx -= m_oHeader.oFramePx.Left;
oTransform.Dy -= m_oHeader.oFramePx.Top;
@@ -1685,7 +1735,7 @@ namespace MetaFile
void CEmfPlusParser::Read_EMFPLUS_HEADER(unsigned short unShFlags)
{
- m_oStream.Skip(4); //Version
+ m_oStream.Skip(4); //Data size
unsigned int unEmfPlusFlags;
@@ -1693,8 +1743,6 @@ namespace MetaFile
m_oStream >> m_unLogicalDpiX;
m_oStream >> m_unLogicalDpiY;
- m_bBanEmfProcessing = true;
-
if (NULL != m_pInterpretator)
{
m_pInterpretator->Begin();
@@ -1711,8 +1759,6 @@ namespace MetaFile
if (NULL != m_pInterpretator)
m_pInterpretator->HANDLE_EMFPLUS_CLEAR(oARGB);
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_DRAWARC(unsigned short unShFlags)
@@ -1721,8 +1767,6 @@ namespace MetaFile
Read_EMFPLUS_DRAWARC_BASE(unShFlags);
else
Read_EMFPLUS_DRAWARC_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -1781,8 +1825,6 @@ namespace MetaFile
//Оба флага не определены
Read_EMFPLUS_DRAWBEZIERS_BASE(unShFlags); // абсолютное расположение
}
-
- m_bBanEmfProcessing = true;
}
template
@@ -1842,8 +1884,6 @@ namespace MetaFile
//Оба флага не определены
Read_EMFPLUS_DRAWCLOSEDCURVE_BASE(unShFlags); // абсолютное расположение с 32-разрядными координатами.
}
-
- m_bBanEmfProcessing = true;
}
template
@@ -1896,8 +1936,6 @@ namespace MetaFile
Read_EMFPLUS_DRAWCURVE_BASE(unShFlags);
else
Read_EMFPLUS_DRAWCURVE_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -1974,8 +2012,6 @@ namespace MetaFile
TEmfPlusXForm oMatrix;
m_oStream >> oMatrix;
-
- m_bBanEmfProcessing = true;
}
//----------
if (NULL == m_pInterpretator || wsString.length() != arGlyphPos.size())
@@ -2004,7 +2040,7 @@ namespace MetaFile
oColor.r = (unBrushId >> 16) & 0xFF;
oColor.a = (unBrushId >> 24) & 0xFF;
- TRGBA oTextColor = m_pDC->GetTextColor();
+ const TRGBA oTextColor{m_pDC->GetTextColor()};
m_pDC->SetTextColor(oColor);
@@ -2026,7 +2062,7 @@ namespace MetaFile
oColor.r = pBrush->oColor.chRed;
oColor.a = pBrush->oColor.chAlpha;
- TRGBA oTextColor = m_pDC->GetTextColor();
+ const TRGBA oTextColor{m_pDC->GetTextColor()};
m_pDC->SetTextColor(oColor);
@@ -2039,8 +2075,6 @@ namespace MetaFile
}
m_pDC->RemoveFont(pFont);
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_DRAWELLIPSE(unsigned short unShFlags)
@@ -2049,8 +2083,6 @@ namespace MetaFile
Read_EMFPLUS_DRAWELLIPSE_BASE(unShFlags);
else
Read_EMFPLUS_DRAWELLIPSE_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -2094,8 +2126,6 @@ namespace MetaFile
Read_EMFPLUS_DRAWIMAGE_BASE(unShFlags);
else
Read_EMFPLUS_DRAWIMAGE_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -2142,8 +2172,6 @@ namespace MetaFile
//Оба флага не определены
Read_EMFPLUS_DRAWIMAGEPOINTS_BASE(unShFlags); // абсолютное расположение с 32-разрядными координатами с плавующей запятой
}
-
- m_bBanEmfProcessing = true;
}
template
@@ -2159,7 +2187,7 @@ namespace MetaFile
m_oStream >> oSrcRect;
m_oStream >> unCount;
- if (nSrcUnit != UnitTypePixel && unCount != 3)
+ if (nSrcUnit != UnitTypePixel || unCount != 3)
return;
std::vector arPoints(unCount);
@@ -2187,8 +2215,6 @@ namespace MetaFile
//Оба флага не определены
Read_EMFPLUS_DRAWLINES_BASE(unShFlags); // абсолютное расположение с 32-разрядными координатами с плавующей запятой
}
-
- m_bBanEmfProcessing = true;
}
template
@@ -2225,8 +2251,6 @@ namespace MetaFile
m_pDC->RemoveBrush(pEmfPlusPen->pBrush);
m_pDC->RemovePen(pEmfPlusPen);
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_DRAWPATH(unsigned short unShFlags)
@@ -2265,8 +2289,6 @@ namespace MetaFile
m_pDC->RemovePen(pEmfPlusPen);
}
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_DRAWPIE(unsigned short unShFlags)
@@ -2275,8 +2297,6 @@ namespace MetaFile
Read_EMFPLUS_DRAWPIE_BASE(unShFlags);
else
Read_EMFPLUS_DRAWPIE_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -2302,8 +2322,6 @@ namespace MetaFile
Read_EMFPLUS_DRAWRECTS_BASE(unShFlags);
else
Read_EMFPLUS_DRAWRECTS_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -2467,8 +2485,6 @@ namespace MetaFile
m_pDC->SetTextAlign(unOldTextAlign);
m_pDC->RemoveFont(pFont);
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_FILLCLOSEDCURVE(unsigned short unShFlags)
@@ -2488,8 +2504,6 @@ namespace MetaFile
//Оба флага не определены
Read_EMFPLUS_FILLCLOSEDCURVE_BASE(unShFlags); // абсолютное расположение с 32-разрядными координатами с плавующей запятой
}
-
- m_bBanEmfProcessing = true;
}
template
@@ -2518,8 +2532,6 @@ namespace MetaFile
Read_EMFPLUS_FILLELLIPSE_BASE(unShFlags);
else
Read_EMFPLUS_FILLELLIPSE_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -2622,8 +2634,6 @@ namespace MetaFile
m_pDC->RemoveBrush(pBrush);
}
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_FILLPIE(unsigned short unShFlags)
@@ -2632,8 +2642,6 @@ namespace MetaFile
Read_EMFPLUS_FILLPIE_BASE(unShFlags);
else
Read_EMFPLUS_FILLPIE_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -2671,8 +2679,6 @@ namespace MetaFile
//Оба флага не определены
Read_EMFPLUS_FILLPOLYGON_BASE(unShFlags); // абсолютное расположение с 32-разрядными координатами с плавующей запятой
}
-
- m_bBanEmfProcessing = true;
}
template
@@ -2746,8 +2752,6 @@ namespace MetaFile
Read_EMFPLUS_FILLRECTS_BASE(unShFlags);
else
Read_EMFPLUS_FILLRECTS_BASE(unShFlags);
-
- m_bBanEmfProcessing = true;
}
template
@@ -2815,7 +2819,6 @@ namespace MetaFile
m_oStream >> unBrushId;
//TODO: реализовать
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_OBJECT(unsigned short unShFlags)
@@ -2828,7 +2831,7 @@ namespace MetaFile
case ObjectTypeInvalid: return;
case ObjectTypeBrush:
{
- LOGGING(L"Object Brush with index: " << shObjectIndex)
+ PRINT_LOG(L"Object Brush with index: " << shObjectIndex);
CEmfPlusBrush *pEmfPlusBrush = ReadBrush();
@@ -2838,7 +2841,7 @@ namespace MetaFile
}
case ObjectTypePen:
{
- LOGGING(L"Object Pen with index: " << shObjectIndex)
+ PRINT_LOG(L"Object Pen with index: " << shObjectIndex);
CEmfPlusPen *pEmfPlusPen = ReadPen();
@@ -2848,7 +2851,7 @@ namespace MetaFile
}
case ObjectTypePath:
{
- LOGGING(L"Object Path with index: " << shObjectIndex)
+ PRINT_LOG(L"Object Path with index: " << shObjectIndex);
if ((unShFlags >>(15)) & 1)
{
@@ -2891,7 +2894,7 @@ namespace MetaFile
}
case ObjectTypeRegion:
{
- LOGGING(L"Object Region")
+ PRINT_LOG(L"Object Region");
CEmfPlusRegion *pEmfPlusRegion = ReadRegion();
@@ -2901,13 +2904,14 @@ namespace MetaFile
}
case ObjectTypeImage:
{
- LOGGING(L"Object Image")
+ PRINT_LOG(L"Object Image");
+
ReadImage(shObjectIndex, ((unShFlags >>(15)) & 1));
break;
}
case ObjectTypeFont:
{
- LOGGING(L"Object Font with index: " << shObjectIndex)
+ PRINT_LOG(L"Object Font with index: " << shObjectIndex);
CEmfPlusFont *pFont = ReadFont();
@@ -2917,7 +2921,7 @@ namespace MetaFile
}
case ObjectTypeStringFormat:
{
- LOGGING(L"Object String Format")
+ PRINT_LOG(L"Object String Format");
CEmfPlusStringFormat *pStringFormat = new CEmfPlusStringFormat;
@@ -2929,7 +2933,7 @@ namespace MetaFile
}
case ObjectTypeImageAttributes:
{
- LOGGING(L"Object Image Attributes")
+ PRINT_LOG(L"Object Image Attributes");
CEmfPlusImageAttributes *pImageAttributes = new CEmfPlusImageAttributes();
@@ -2943,10 +2947,14 @@ namespace MetaFile
}
case ObjectTypeCustomLineCap:
{
- LOGGING(L"Object Custom Line Cap")
+ PRINT_LOG(L"Object Custom Line Cap");
break;
}
- default: return;
+ default:
+ {
+ PRINT_LOG(L"Unknown object type");
+ return;
+ }
}
//TODO: реализовать
}
@@ -3118,26 +3126,28 @@ namespace MetaFile
void CEmfPlusParser::Read_EMFPLUS_MULTIPLYWORLDTRANSFORM(unsigned short unShFlags)
{
+ m_bBanEmfProcessing = true;
+
TEmfPlusXForm oMatrix;
m_oStream >> oMatrix;
m_pDC->MultiplyTransform(oMatrix, (unShFlags & 0x2000) ? MWT_RIGHTMULTIPLY : MWT_LEFTMULTIPLY);
UpdateOutputDC();
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_RESETWORLDTRANSFORM()
{
+ m_bBanEmfProcessing = true;
+
m_pDC->ResetTransform();
UpdateOutputDC();
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_ROTATEWORLDTRANSFORM(unsigned short unShFlags)
{
+ m_bBanEmfProcessing = true;
+
double dAngle;
m_oStream >> dAngle;
@@ -3151,12 +3161,12 @@ namespace MetaFile
m_pDC->MultiplyTransform(oMatrix, (unShFlags & 0x2000) ? MWT_RIGHTMULTIPLY : MWT_LEFTMULTIPLY);
UpdateOutputDC();
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_SCALEWORLDTRANSFORM(unsigned short unShFlags)
{
+ m_bBanEmfProcessing = true;
+
double dSx, dSy;
m_oStream >> dSx;
@@ -3166,12 +3176,12 @@ namespace MetaFile
m_pDC->MultiplyTransform(oMatrix, (unShFlags & 0x2000) ? MWT_RIGHTMULTIPLY : MWT_LEFTMULTIPLY);
UpdateOutputDC();
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_SETPAGETRANSFORM(unsigned short unShFlags)
{
+ m_bBanEmfProcessing = true;
+
short shPageUnit = ExpressValue(unShFlags, 0, 7);
m_oStream >> m_dUnitKoef;
@@ -3192,8 +3202,6 @@ namespace MetaFile
m_pDC->MultiplyTransform(oMatrix, MWT_LEFTMULTIPLY);
UpdateOutputDC();
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_SETWORLDTRANSFORM()
@@ -3206,8 +3214,6 @@ namespace MetaFile
m_pDC->MultiplyTransform(oMatrix, MWT_SET);
UpdateOutputDC();
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_TRANSLATEWORLDTRANSFORM(unsigned short unShFlags)
@@ -3221,8 +3227,6 @@ namespace MetaFile
m_pDC->MultiplyTransform(oMatrix, (unShFlags & 0x2000) ? MWT_RIGHTMULTIPLY : MWT_LEFTMULTIPLY);
UpdateOutputDC();
-
- m_bBanEmfProcessing = true;
}
void CEmfPlusParser::Read_EMFPLUS_ENDOFFILE()
@@ -3231,7 +3235,6 @@ namespace MetaFile
m_pInterpretator->End();
m_bEof = true;
- m_bBanEmfProcessing = false;
if (NULL != m_pInterpretator)
m_pInterpretator->HANDLE_EMFPLUS_ENDOFFILE();
@@ -3247,8 +3250,6 @@ namespace MetaFile
void CEmfPlusParser::Read_EMRPLUS_OFFSETCLIP()
{
- m_bBanEmfProcessing = true;
-
double dX, dY;
m_oStream >> dX;
@@ -3262,8 +3263,6 @@ namespace MetaFile
void CEmfPlusParser::Read_EMRPLUS_RESETCLIP()
{
- m_bBanEmfProcessing = true;
-
m_pDC->GetClip()->Reset();
UpdateOutputDC();
@@ -3273,8 +3272,6 @@ namespace MetaFile
void CEmfPlusParser::Read_EMFPLUS_SETCLIPPATH(unsigned short unShFlags)
{
- m_bBanEmfProcessing = true;
-
BYTE uchObjectId = ExpressValue(unShFlags, 0, 7);
CEmfPlusPath* pPath = GetPath(uchObjectId);
@@ -3284,7 +3281,7 @@ namespace MetaFile
BYTE uchCM = ExpressValue(unShFlags, 8, 11);
m_pDC->GetClip()->Reset();
- m_pDC->GetClip()->SetPath(*pPath, uchCM, *GetTransform());
+ m_pDC->GetClip()->SetPath(*pPath, uchCM, GetTransform());
UpdateOutputDC();
if (NULL != m_pInterpretator)
@@ -3293,8 +3290,6 @@ namespace MetaFile
void CEmfPlusParser::Read_EMFPLUS_SETCLIPRECT(unsigned short unShFlags)
{
- m_bBanEmfProcessing = true;
-
short shCM = ExpressValue(unShFlags, 8, 11);
TEmfPlusRectF oRect;
@@ -3310,8 +3305,6 @@ namespace MetaFile
void CEmfPlusParser::Read_EMFPLUS_SETCLIPREGION(unsigned short unShFlags)
{
- m_bBanEmfProcessing = true;
-
short shObjectIndex = ExpressValue(unShFlags, 0, 7);
short shCM = ExpressValue(unShFlags, 8, 11);
@@ -3334,7 +3327,7 @@ namespace MetaFile
CEmfPlusRegionNodePath* pNodeRegionPath = (CEmfPlusRegionNodePath*)pNode;
if (!pNodeRegionPath->Empty())
- m_pDC->GetClip()->SetPath(*pNodeRegionPath->GetPath(), shCM, *GetTransform());
+ m_pDC->GetClip()->SetPath(*pNodeRegionPath->GetPath(), shCM, GetTransform());
break;
}
@@ -3351,7 +3344,7 @@ namespace MetaFile
{
CEmfPlusRegionNodeChild* pNodeRegionChild = (CEmfPlusRegionNodeChild*)pNode;
- pNodeRegionChild->DrawOnClip(*m_pDC->GetClip(), *GetTransform(), GetDCBounds());
+ pNodeRegionChild->DrawOnClip(*m_pDC->GetClip(), GetTransform(), &GetDCBounds());
break;
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.h b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.h
index 1709db3e04..857f58c101 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfPlusParser.h
@@ -21,9 +21,9 @@ namespace MetaFile
void PlayFile() override;
void Scan() override;
- USHORT GetDpi() override;
+ USHORT GetDpi() const override;
- EmfParserType GetType() override;
+ EmfParserType GetType() const override;
void SetStream(BYTE *pBytes, unsigned int unSize);
bool GetBanEMFProcesses();
@@ -78,7 +78,7 @@ namespace MetaFile
void DrawImagePoints(unsigned int unImageIndex, unsigned int unImageAttributeIndex, const TEmfPlusRectF& oSrcRect, const std::vector& arPoints);
template
- void DrawMetafile(MetafileType& oParser, BYTE* pBuffer, unsigned int unSize, const TEmfPlusRectF& oSrcRect, const std::vector& arPoints);
+ void DrawMetafile(BYTE* pBuffer, unsigned int unSize, const TEmfPlusRectF& oSrcRect, const std::vector& arPoints);
void DrawBitmap(BYTE* pBuffer, unsigned int unSize, unsigned int unWidth, unsigned int unHeight, const TEmfPlusRectF& oSrcRect, const std::vector& arPoints);
TEmfPlusARGB ApplyImageAttributes(TEmfPlusRectF& oRectangle, const CEmfPlusImageAttributes& oImageAttributes);
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.cpp b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.cpp
index c15cd61900..cb392e3c68 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.cpp
@@ -301,7 +301,7 @@ namespace MetaFile
m_pOutput->MoveToStart();
}
- EmfParserType CEmfxParser::GetType()
+ EmfParserType CEmfxParser::GetType() const
{
return EmfParserType::EmfxParser;
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.h b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.h
index 36cda4ebde..d67b7219c3 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfParser/CEmfxParser.h
@@ -18,7 +18,7 @@ namespace MetaFile
void PlayFile() override;
void Scan() override;
- EmfParserType GetType() override;
+ EmfParserType GetType() const override;
private:
bool ReadImage(unsigned int offBmi, unsigned int cbBmi, unsigned int offBits, unsigned int cbBits, unsigned int ulSkip, BYTE **ppBgraBuffer, unsigned int *pulWidth, unsigned int *pulHeight) override;
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfPlayer.cpp b/DesktopEditor/raster/Metafile/Emf/EmfPlayer.cpp
index 291acd40b4..cbca118655 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfPlayer.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfPlayer.cpp
@@ -191,6 +191,7 @@ namespace MetaFile
case EMF_OBJECT_BRUSH: m_pDC->SetBrush((CEmfLogBrushEx*)pObject); break;
case EMF_OBJECT_FONT: m_pDC->SetFont((CEmfLogFont*)pObject); break;
case EMF_OBJECT_PEN: m_pDC->SetPen((CEmfLogPen*)pObject); break;
+ default: break;
}
}
}
@@ -222,6 +223,7 @@ namespace MetaFile
case EMF_OBJECT_BRUSH: m_pDC->RemoveBrush((CEmfLogBrushEx*)pObject); break;
case EMF_OBJECT_FONT: m_pDC->RemoveFont((CEmfLogFont*)pObject); break;
case EMF_OBJECT_PEN: m_pDC->RemovePen((CEmfLogPen*)pObject); break;
+ default: break;
}
for (std::pair oElement : m_mDCs)
@@ -233,6 +235,7 @@ namespace MetaFile
case EMF_OBJECT_BRUSH: pDC->RemoveBrush((CEmfLogBrushEx*)pObject); break;
case EMF_OBJECT_FONT: pDC->RemoveFont((CEmfLogFont*)pObject); break;
case EMF_OBJECT_PEN: pDC->RemovePen((CEmfLogPen*)pObject); break;
+ default: break;
}
}
@@ -435,7 +438,7 @@ namespace MetaFile
UpdateFinalTransform();
}
- unsigned int CEmfDC::GetMapMode()
+ unsigned int CEmfDC::GetMapMode() const
{
return m_ulMapMode;
}
@@ -445,20 +448,20 @@ namespace MetaFile
m_oTransform.Init();
UpdateFinalTransform();
}
- TEmfXForm* CEmfDC::GetTransform()
+ const TEmfXForm& CEmfDC::GetTransform() const
{
- return &m_oTransform;
+ return m_oTransform;
}
- TEmfXForm* CEmfDC::GetInverseTransform()
+ const TEmfXForm& CEmfDC::GetInverseTransform() const
{
- return &m_oInverseTransform;
+ return m_oInverseTransform;
}
- TEmfXForm* CEmfDC::GetFinalTransform(int iGraphicsMode)
+ const TEmfXForm& CEmfDC::GetFinalTransform(int iGraphicsMode) const
{
if (GM_COMPATIBLE == iGraphicsMode)
- return &m_oFinalTransform2;
+ return m_oFinalTransform2;
- return &m_oFinalTransform;
+ return m_oFinalTransform;
}
void CEmfDC::MultiplyTransform(TEmfXForm& oForm, unsigned int ulMode)
{
@@ -486,11 +489,11 @@ namespace MetaFile
UpdateFinalTransform();
}
- void CEmfDC::SetTextColor(TRGBA& oColor)
+ void CEmfDC::SetTextColor(const TRGBA& oColor)
{
m_oTextColor.Copy(oColor);
}
- TRGBA& CEmfDC::GetTextColor()
+ const TRGBA& CEmfDC::GetTextColor() const
{
return m_oTextColor;
}
@@ -503,7 +506,7 @@ namespace MetaFile
if (pBrush == m_pBrush)
m_pBrush = NULL;
}
- IBrush* CEmfDC::GetBrush()
+ const IBrush* CEmfDC::GetBrush() const
{
return m_pBrush;
}
@@ -516,7 +519,7 @@ namespace MetaFile
if (pFont == m_pFont)
m_pFont = NULL;
}
- IFont* CEmfDC::GetFont()
+ const IFont* CEmfDC::GetFont() const
{
return (NULL != m_pFont) ? m_pFont : &m_oDefaultFont;
}
@@ -524,7 +527,7 @@ namespace MetaFile
{
m_ulTextAlign = ulAlign;
}
- unsigned int CEmfDC::GetTextAlign()
+ unsigned int CEmfDC::GetTextAlign() const
{
return m_ulTextAlign;
}
@@ -532,7 +535,7 @@ namespace MetaFile
{
m_ulBgMode = ulBgMode;
}
- unsigned int CEmfDC::GetBgMode()
+ unsigned int CEmfDC::GetBgMode() const
{
return m_ulBgMode;
}
@@ -540,15 +543,15 @@ namespace MetaFile
{
m_oBgColor.Copy(oColor);
}
- TRGBA& CEmfDC::GetBgColor()
+ const TRGBA* CEmfDC::GetBgColor() const
{
- return m_oBgColor;
+ return &m_oBgColor;
}
void CEmfDC::SetMiterLimit(unsigned int ulMiter)
{
m_ulMiterLimit = ulMiter;
}
- unsigned int CEmfDC::GetMiterLimit()
+ unsigned int CEmfDC::GetMiterLimit() const
{
return m_ulMiterLimit;
}
@@ -556,7 +559,7 @@ namespace MetaFile
{
m_ulFillMode = ulFillMode;
}
- unsigned int CEmfDC::GetFillMode()
+ unsigned int CEmfDC::GetFillMode() const
{
return m_ulFillMode;
}
@@ -569,7 +572,7 @@ namespace MetaFile
if (pPen == m_pPen)
m_pPen = NULL;
}
- IPen* CEmfDC::GetPen()
+ const IPen* CEmfDC::GetPen() const
{
return m_pPen;
}
@@ -577,15 +580,15 @@ namespace MetaFile
{
m_ulStretchMode = oMode;
}
- unsigned int CEmfDC::GetStretchMode()
+ unsigned int CEmfDC::GetStretchMode() const
{
return m_ulStretchMode;
}
- double CEmfDC::GetPixelWidth()
+ double CEmfDC::GetPixelWidth() const
{
return m_dPixelWidth;
}
- double CEmfDC::GetPixelHeight()
+ double CEmfDC::GetPixelHeight() const
{
return m_dPixelHeight;
}
@@ -597,14 +600,14 @@ namespace MetaFile
{
m_dPixelHeight = dPixelH;
}
- void CEmfDC::SetWindowOrigin(TPointL& oPoint)
+ void CEmfDC::SetWindowOrigin(const TPointL& oPoint)
{
m_oWindow.lX = oPoint.X;
m_oWindow.lY = oPoint.Y;
UpdatePixelMetrics();
UpdateFinalTransform();
}
- void CEmfDC::SetWindowExtents(TSizeL& oPoint)
+ void CEmfDC::SetWindowExtents(const TSizeL& oPoint)
{
m_oWindow.ulW = oPoint.X;
m_oWindow.ulH = oPoint.Y;
@@ -622,7 +625,7 @@ namespace MetaFile
UpdateFinalTransform();
}
- void CEmfDC::ScaleWindow(double dXScale, double dYScale)
+ void CEmfDC::ScaleWindow(const double& dXScale, const double& dYScale)
{
m_oWindow.ulW = (int)(m_oWindow.ulW * dXScale);
m_oWindow.ulH = (int)(m_oWindow.ulH * dYScale);
@@ -634,18 +637,18 @@ namespace MetaFile
UpdateFinalTransform();
}
- TEmfWindow* CEmfDC::GetWindow()
+ const TEmfWindow& CEmfDC::GetWindow() const
{
- return &m_oWindow;
+ return m_oWindow;
}
- void CEmfDC::SetViewportOrigin(TPointL& oPoint)
+ void CEmfDC::SetViewportOrigin(const TPointL& oPoint)
{
m_oViewport.lX = oPoint.X;
m_oViewport.lY = oPoint.Y;
UpdatePixelMetrics();
UpdateFinalTransform();
}
- void CEmfDC::SetViewportExtents(TSizeL& oPoint)
+ void CEmfDC::SetViewportExtents(const TSizeL& oPoint)
{
m_oViewport.ulW = oPoint.X;
m_oViewport.ulH = oPoint.Y;
@@ -663,7 +666,7 @@ namespace MetaFile
UpdateFinalTransform();
}
- void CEmfDC::ScaleViewport(double dXScale, double dYScale)
+ void CEmfDC::ScaleViewport(const double& dXScale, const double& dYScale)
{
m_oViewport.ulW = (int)(m_oViewport.ulW * dXScale);
m_oViewport.ulH = (int)(m_oViewport.ulH * dYScale);
@@ -675,9 +678,9 @@ namespace MetaFile
UpdateFinalTransform();
}
- TEmfWindow* CEmfDC::GetViewport()
+ const TEmfWindow& CEmfDC::GetViewport() const
{
- return &m_oViewport;
+ return m_oViewport;
}
bool CEmfDC::UpdatePixelMetrics()
{
@@ -708,14 +711,14 @@ namespace MetaFile
}
void CEmfDC::UpdateFinalTransform()
{
- TEmfWindow* pWindow = GetWindow();
- TEmfWindow* pViewPort = GetViewport();
+ const TEmfWindow& oWindow{GetWindow()};
+ const TEmfWindow& oViewPort{GetViewport()};
- double dM11 = (pViewPort->ulW >= 0) ? 1 : -1;
- double dM22 = (pViewPort->ulH >= 0) ? 1 : -1;
+ double dM11 = (oViewPort.ulW >= 0) ? 1 : -1;
+ double dM22 = (oViewPort.ulH >= 0) ? 1 : -1;
- TEmfXForm oWindowXForm(1, 0, 0, 1, -(pWindow->lX * GetPixelWidth() * dM11), -(pWindow->lY * GetPixelHeight() * dM22));
- TEmfXForm oViewportXForm(GetPixelWidth() * dM11, 0, 0, GetPixelHeight() * dM22, pViewPort->lX, pViewPort->lY);
+ TEmfXForm oWindowXForm(1, 0, 0, 1, -(oWindow.lX * GetPixelWidth() * dM11), -(oWindow.lY * GetPixelHeight() * dM22));
+ TEmfXForm oViewportXForm(GetPixelWidth() * dM11, 0, 0, GetPixelHeight() * dM22, oViewPort.lX, oViewPort.lY);
m_oFinalTransform.Init();
m_oFinalTransform.Multiply(oViewportXForm, MWT_RIGHTMULTIPLY);
@@ -746,11 +749,11 @@ namespace MetaFile
if (!m_oViewport.ulH) m_oViewport.ulH = nMinCy;
}
}
- void CEmfDC::SetRop2Mode(unsigned int& nMode)
+ void CEmfDC::SetRop2Mode(unsigned int nMode)
{
m_ulRop2Mode = nMode;
}
- unsigned int CEmfDC::GetRop2Mode()
+ unsigned int CEmfDC::GetRop2Mode() const
{
return m_ulRop2Mode;
}
@@ -763,11 +766,11 @@ namespace MetaFile
if (m_pPalette == pPalette)
m_pPalette = NULL;
}
- CEmfLogPalette* CEmfDC::GetPalette()
+ const CEmfLogPalette* CEmfDC::GetPalette() const
{
return m_pPalette;
}
- void CEmfDC::SetCurPos(TPointL& oPoint)
+ void CEmfDC::SetCurPos(const TPointL& oPoint)
{
SetCurPos(oPoint.X, oPoint.Y);
}
@@ -776,7 +779,7 @@ namespace MetaFile
m_oCurPos.X = lX;
m_oCurPos.Y = lY;
}
- TPointL& CEmfDC::GetCurPos()
+ const TPointL& CEmfDC::GetCurPos() const
{
return m_oCurPos;
}
@@ -784,7 +787,7 @@ namespace MetaFile
{
m_unArcDirection = unDirection;
}
- unsigned int CEmfDC::GetArcDirection()
+ unsigned int CEmfDC::GetArcDirection() const
{
return m_unArcDirection;
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfPlayer.h b/DesktopEditor/raster/Metafile/Emf/EmfPlayer.h
index 1159d4deaa..081ee385ee 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfPlayer.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfPlayer.h
@@ -89,56 +89,56 @@ namespace MetaFile
CClip* GetClip();
- void SetMapMode(unsigned int ulMapMode);
- unsigned int GetMapMode();
- void ResetTransform();
- TEmfXForm* GetTransform();
- TEmfXForm* GetInverseTransform();
- TEmfXForm* GetFinalTransform(int iGraphicsMode);
- void MultiplyTransform(TEmfXForm& oForm, unsigned int ulMode);
- void SetTextColor(TRGBA& oColor);
- TRGBA& GetTextColor();
- void SetBrush(IBrush* pBrush);
- void RemoveBrush(IBrush* pBrush);
- IBrush* GetBrush();
- void SetFont(IFont* pFont);
- void RemoveFont(IFont* pFont);
- IFont* GetFont();
- void SetTextAlign(unsigned int ulAlign);
- unsigned int GetTextAlign();
- void SetBgMode(unsigned int ulBgMode);
- unsigned int GetBgMode();
- void SetBgColor(TRGBA& oColor);
- TRGBA& GetBgColor();
- void SetMiterLimit(unsigned int ulMiter);
- unsigned int GetMiterLimit();
- void SetFillMode(unsigned int ulFillMode);
- unsigned int GetFillMode();
- void SetPen(IPen* pPen);
- void RemovePen(IPen* pPen);
- IPen* GetPen();
- void SetStretchMode(unsigned int& oMode);
- unsigned int GetStretchMode();
- double GetPixelWidth();
- double GetPixelHeight();
- void SetWindowOrigin(TPointL& oPoint);
- void SetWindowExtents(TSizeL& oPoint);
- void ScaleWindow(double dXScale, double dYScale);
- TEmfWindow* GetWindow();
- void SetViewportOrigin(TPointL& oPoint);
- void SetViewportExtents(TSizeL& oPoint);
- void ScaleViewport(double dXScale, double dYScale);
- TEmfWindow* GetViewport();
- void SetRop2Mode(unsigned int& nMode);
- unsigned int GetRop2Mode();
- void SetPalette(CEmfLogPalette* pPalette);
- void RemovePalette(CEmfLogPalette* pPalette);
- CEmfLogPalette* GetPalette();
- void SetCurPos(TPointL& oPoint);
- void SetCurPos(int lX, int lY);
- TPointL& GetCurPos();
- void SetArcDirection(unsigned int unDirection);
- unsigned int GetArcDirection();
+ void SetMapMode(unsigned int ulMapMode);
+ unsigned int GetMapMode() const;
+ void ResetTransform();
+ const TEmfXForm& GetTransform() const;
+ const TEmfXForm& GetInverseTransform() const ;
+ const TEmfXForm& GetFinalTransform(int iGraphicsMode) const;
+ void MultiplyTransform(TEmfXForm& oForm, unsigned int ulMode);
+ void SetTextColor(const TRGBA& oColor);
+ const TRGBA& GetTextColor() const;
+ void SetBrush(IBrush* pBrush);
+ void RemoveBrush(IBrush* pBrush);
+ const IBrush* GetBrush() const;
+ void SetFont(IFont* pFont);
+ void RemoveFont(IFont* pFont);
+ const IFont* GetFont() const;
+ void SetTextAlign(unsigned int ulAlign);
+ unsigned int GetTextAlign() const;
+ void SetBgMode(unsigned int ulBgMode);
+ unsigned int GetBgMode() const;
+ void SetBgColor(TRGBA& oColor);
+ const TRGBA* GetBgColor() const;
+ void SetMiterLimit(unsigned int ulMiter);
+ unsigned int GetMiterLimit() const;
+ void SetFillMode(unsigned int ulFillMode);
+ unsigned int GetFillMode() const;
+ void SetPen(IPen* pPen);
+ void RemovePen(IPen* pPen);
+ const IPen* GetPen() const;
+ void SetStretchMode(unsigned int& oMode);
+ unsigned int GetStretchMode() const;
+ double GetPixelWidth() const;
+ double GetPixelHeight() const;
+ void SetWindowOrigin(const TPointL& oPoint);
+ void SetWindowExtents(const TSizeL& oPoint);
+ void ScaleWindow(const double& dXScale, const double& dYScale);
+ const TEmfWindow& GetWindow() const;
+ void SetViewportOrigin(const TPointL& oPoint);
+ void SetViewportExtents(const TSizeL& oPoint);
+ void ScaleViewport(const double& dXScale, const double& dYScale);
+ const TEmfWindow& GetViewport() const;
+ void SetRop2Mode(unsigned int nMode);
+ unsigned int GetRop2Mode() const;
+ void SetPalette(CEmfLogPalette* pPalette);
+ void RemovePalette(CEmfLogPalette* pPalette);
+ const CEmfLogPalette* GetPalette() const;
+ void SetCurPos(const TPointL& oPoint);
+ void SetCurPos(int lX, int lY);
+ const TPointL& GetCurPos() const;
+ void SetArcDirection(unsigned int unDirection);
+ unsigned int GetArcDirection() const;
private:
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.cpp b/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.cpp
index c431ce2f3d..db99eecde6 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.cpp
+++ b/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.cpp
@@ -12,66 +12,66 @@ namespace MetaFile
NSFile::CFileBinary::Remove(wsDibPatternPath);
}
- EEmfObjectType CEmfPlusBrush::GetType()
+ EEmfObjectType CEmfPlusBrush::GetType() const
{
return EMF_OBJECT_BRUSH;
}
- EEmfPlusObjectType CEmfPlusBrush::GetObjectType()
+ EEmfPlusObjectType CEmfPlusBrush::GetObjectType() const
{
return ObjectTypeBrush;
}
- int CEmfPlusBrush::GetColor()
+ int CEmfPlusBrush::GetColor() const
{
return METAFILE_RGBA(oColor.chRed, oColor.chGreen, oColor.chBlue, 0);
}
- int CEmfPlusBrush::GetColor2()
+ int CEmfPlusBrush::GetColor2() const
{
return METAFILE_RGBA(oColorBack.chRed, oColorBack.chGreen, oColorBack.chBlue, 0);
}
- unsigned int CEmfPlusBrush::GetStyle()
+ unsigned int CEmfPlusBrush::GetStyle() const
{
return unStyle;
}
- unsigned int CEmfPlusBrush::GetStyleEx()
+ unsigned int CEmfPlusBrush::GetStyleEx() const
{
return unAngle;
}
- unsigned int CEmfPlusBrush::GetHatch()
+ unsigned int CEmfPlusBrush::GetHatch() const
{
return unHatch;
}
- unsigned int CEmfPlusBrush::GetAlpha()
+ unsigned int CEmfPlusBrush::GetAlpha() const
{
return oColor.chAlpha;
}
- unsigned int CEmfPlusBrush::GetAlpha2()
+ unsigned int CEmfPlusBrush::GetAlpha2() const
{
return oColorBack.chAlpha;
}
- std::wstring CEmfPlusBrush::GetDibPatterPath()
+ std::wstring CEmfPlusBrush::GetDibPatterPath() const
{
return wsDibPatternPath;
}
- void CEmfPlusBrush::GetDibPattern(unsigned char **pBuffer, unsigned int &unWidth, unsigned int &unHeight)
+ void CEmfPlusBrush::GetDibPattern(unsigned char **pBuffer, unsigned int &unWidth, unsigned int &unHeight) const
{}
- void CEmfPlusBrush::GetCenterPoint(double &dX, double &dY)
+ void CEmfPlusBrush::GetCenterPoint(double &dX, double &dY) const
{
dX = oCenterPoint.X;
dY = oCenterPoint.Y;
}
- void CEmfPlusBrush::GetBounds(double &left, double &top, double &width, double &height)
+ void CEmfPlusBrush::GetBounds(double &left, double &top, double &width, double &height) const
{
left = oRectF.dX;
top = oRectF.dY;
@@ -93,17 +93,17 @@ namespace MetaFile
RELEASEOBJECT(pLineEndCapData)
}
- EEmfObjectType CEmfPlusPen::GetType()
+ EEmfObjectType CEmfPlusPen::GetType() const
{
return EMF_OBJECT_PEN;
}
- EEmfPlusObjectType CEmfPlusPen::GetObjectType()
+ EEmfPlusObjectType CEmfPlusPen::GetObjectType() const
{
return ObjectTypePen;
}
- int CEmfPlusPen::GetColor()
+ int CEmfPlusPen::GetColor() const
{
if (NULL != pBrush)
return pBrush->GetColor();
@@ -111,12 +111,12 @@ namespace MetaFile
return METAFILE_RGBA(oColor.chRed, oColor.chGreen, oColor.chBlue, 0);
}
- unsigned int CEmfPlusPen::GetStyle()
+ unsigned int CEmfPlusPen::GetStyle() const
{
return unStyle;
}
- double CEmfPlusPen::GetWidth()
+ double CEmfPlusPen::GetWidth() const
{
// if (dWidth < 0)
// return 1;
@@ -124,7 +124,7 @@ namespace MetaFile
return dWidth;
}
- unsigned int CEmfPlusPen::GetAlpha()
+ unsigned int CEmfPlusPen::GetAlpha() const
{
if (NULL != pBrush)
return pBrush->oColor.chAlpha;
@@ -132,17 +132,17 @@ namespace MetaFile
return 0xff;
}
- double CEmfPlusPen::GetMiterLimit()
+ double CEmfPlusPen::GetMiterLimit() const
{
return dMiterLimit;
}
- double CEmfPlusPen::GetDashOffset()
+ double CEmfPlusPen::GetDashOffset() const
{
return dDashOffset;
}
- void CEmfPlusPen::GetDashData(double *&arDatas, unsigned int &unSize)
+ void CEmfPlusPen::GetDashData(double *&arDatas, unsigned int &unSize) const
{
arDatas = pDataDash;
unSize = unSizeDash;
@@ -157,57 +157,57 @@ namespace MetaFile
CEmfPlusFont::~CEmfPlusFont()
{}
- EEmfObjectType CEmfPlusFont::GetType()
+ EEmfObjectType CEmfPlusFont::GetType() const
{
return EMF_OBJECT_FONT;
}
- EEmfPlusObjectType CEmfPlusFont::GetObjectType()
+ EEmfPlusObjectType CEmfPlusFont::GetObjectType() const
{
return ObjectTypeFont;
}
- double CEmfPlusFont::GetHeight()
+ double CEmfPlusFont::GetHeight() const
{
return m_dEmSize;
}
- std::wstring CEmfPlusFont::GetFaceName()
+ std::wstring CEmfPlusFont::GetFaceName() const
{
return m_wsFamilyName;
}
- int CEmfPlusFont::GetWeight()
+ int CEmfPlusFont::GetWeight() const
{
return (m_bBold) ? 700 : 400;
}
- bool CEmfPlusFont::IsItalic()
+ bool CEmfPlusFont::IsItalic() const
{
return m_bItalic;
}
- bool CEmfPlusFont::IsStrikeOut()
+ bool CEmfPlusFont::IsStrikeOut() const
{
return m_bStrikeout;
}
- bool CEmfPlusFont::IsUnderline()
+ bool CEmfPlusFont::IsUnderline() const
{
return m_bUnderline;
}
- int CEmfPlusFont::GetEscapement()
+ int CEmfPlusFont::GetEscapement() const
{
return 0;
}
- int CEmfPlusFont::GetCharSet()
+ int CEmfPlusFont::GetCharSet() const
{
return 0;
}
- int CEmfPlusFont::GetOrientation()
+ int CEmfPlusFont::GetOrientation() const
{
return 0;
}
@@ -221,7 +221,7 @@ namespace MetaFile
RELEASEOBJECT(m_pBuffer)
}
- EEmfPlusObjectType CEmfPlusBuffer::GetObjectType()
+ EEmfPlusObjectType CEmfPlusBuffer::GetObjectType() const
{
return ObjectTypeBuffer;
}
@@ -276,7 +276,7 @@ namespace MetaFile
Clear();
}
- EEmfPlusObjectType CEmfPlusPath::GetObjectType()
+ EEmfPlusObjectType CEmfPlusPath::GetObjectType() const
{
return ObjectTypePath;
}
@@ -328,7 +328,7 @@ namespace MetaFile
CEmfPlusImageAttributes::CEmfPlusImageAttributes() : CEmfPlusObject()
{}
- EEmfPlusObjectType CEmfPlusImageAttributes::GetObjectType()
+ EEmfPlusObjectType CEmfPlusImageAttributes::GetObjectType() const
{
return ObjectTypeImageAttributes;
}
@@ -339,7 +339,7 @@ namespace MetaFile
m_unWidth(0), m_unHeight(0)
{}
- EEmfPlusObjectType CEmfPlusImage::GetObjectType()
+ EEmfPlusObjectType CEmfPlusImage::GetObjectType() const
{
return ObjectTypeImage;
}
@@ -411,7 +411,7 @@ namespace MetaFile
RELEASEOBJECT(pPath);
}
- EEmfPLusRegionNodeType CEmfPlusRegionNodePath::GetNodeType()
+ EEmfPLusRegionNodeType CEmfPlusRegionNodePath::GetNodeType() const
{
return EmfPLusRegionNodeTypePath;
}
@@ -434,7 +434,7 @@ namespace MetaFile
RELEASEOBJECT(pRect);
}
- EEmfPLusRegionNodeType CEmfPlusRegionNodeRectF::GetNodeType()
+ EEmfPLusRegionNodeType CEmfPlusRegionNodeRectF::GetNodeType() const
{
return EmfPLusRegionNodeTypeRectF;
}
@@ -458,12 +458,12 @@ namespace MetaFile
RELEASEOBJECT(pRigth);
}
- EEmfPLusRegionNodeType CEmfPlusRegionNodeChild::GetNodeType()
+ EEmfPLusRegionNodeType CEmfPlusRegionNodeChild::GetNodeType() const
{
return EmfPLusRegionNodeTypeChild;
}
- void CEmfPlusRegionNodeChild::DrawOnClip(CClip &oClip, const TXForm &oTransform, TRectL *pOutRect)
+ void CEmfPlusRegionNodeChild::DrawOnClip(CClip &oClip, const TXForm &oTransform, const TRectL *pOutRect)
{
unsigned int unType;
@@ -550,7 +550,7 @@ namespace MetaFile
arNodes.clear();
}
- EEmfPlusObjectType CEmfPlusRegion::GetObjectType()
+ EEmfPlusObjectType CEmfPlusRegion::GetObjectType() const
{
return ObjectTypeRegion;
}
@@ -558,7 +558,7 @@ namespace MetaFile
CEmfPlusStringFormat::CEmfPlusStringFormat() : CEmfPlusObject()
{}
- EEmfPlusObjectType CEmfPlusStringFormat::GetObjectType()
+ EEmfPlusObjectType CEmfPlusStringFormat::GetObjectType() const
{
return ObjectTypeStringFormat;
}
diff --git a/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.h b/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.h
index 188aa3f0a6..49d8e7a787 100644
--- a/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.h
+++ b/DesktopEditor/raster/Metafile/Emf/EmfPlusObjects.h
@@ -93,7 +93,7 @@ namespace MetaFile
CEmfPlusObject(){};
virtual ~CEmfPlusObject(){};
- virtual EEmfPlusObjectType GetObjectType()
+ virtual EEmfPlusObjectType GetObjectType() const
{
return ObjectTypeInvalid;
}
@@ -173,21 +173,21 @@ namespace MetaFile
public:
CEmfPlusBrush();
virtual ~CEmfPlusBrush();
- virtual EEmfObjectType GetType();
- virtual EEmfPlusObjectType GetObjectType();
+ virtual EEmfObjectType GetType() const override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
// IBrush
- int GetColor();
- int GetColor2();
- unsigned int GetStyle();
- unsigned int GetStyleEx();
- unsigned int GetHatch();
- unsigned int GetAlpha();
- unsigned int GetAlpha2();
- std::wstring GetDibPatterPath();
- void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight);
- void GetCenterPoint(double& dX, double& dY);
- void GetBounds(double& left, double& top, double& width, double& height);
+ int GetColor() const override;
+ int GetColor2() const override;
+ unsigned int GetStyle() const override;
+ unsigned int GetStyleEx() const override;
+ unsigned int GetHatch() const override;
+ unsigned int GetAlpha() const override;
+ unsigned int GetAlpha2() const override;
+ std::wstring GetDibPatterPath() const override;
+ void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight) const override;
+ void GetCenterPoint(double& dX, double& dY) const override;
+ void GetBounds(double& left, double& top, double& width, double& height) const override;
public:
TEmfPlusARGB oColor;
@@ -205,17 +205,17 @@ namespace MetaFile
public:
CEmfPlusPen();
virtual ~CEmfPlusPen();
- virtual EEmfObjectType GetType();
- virtual EEmfPlusObjectType GetObjectType();
+ virtual EEmfObjectType GetType() const override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
// IPen
- int GetColor();
- unsigned int GetStyle();
- double GetWidth();
- unsigned int GetAlpha();
- double GetMiterLimit();
- double GetDashOffset();
- void GetDashData(double*& arDatas, unsigned int& unSize);
+ int GetColor() const override;
+ unsigned int GetStyle() const override;
+ double GetWidth() const override;
+ unsigned int GetAlpha() const override;
+ double GetMiterLimit() const override;
+ double GetDashOffset() const override;
+ void GetDashData(double*& arDatas, unsigned int& unSize) const override;
public:
unsigned int unStyle;
@@ -236,19 +236,19 @@ namespace MetaFile
public:
CEmfPlusFont();
virtual ~CEmfPlusFont();
- virtual EEmfObjectType GetType();
- virtual EEmfPlusObjectType GetObjectType();
+ virtual EEmfObjectType GetType() const override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
// IFont
- double GetHeight();
- std::wstring GetFaceName();
- int GetWeight();
- bool IsItalic();
- bool IsStrikeOut();
- bool IsUnderline();
- int GetEscapement();
- int GetCharSet();
- int GetOrientation();
+ double GetHeight() const override;
+ std::wstring GetFaceName() const override;
+ int GetWeight() const override;
+ bool IsItalic() const override;
+ bool IsStrikeOut() const override;
+ bool IsUnderline() const override;
+ int GetEscapement() const override;
+ int GetCharSet() const override;
+ int GetOrientation() const override;
public:
double m_dEmSize;
@@ -272,7 +272,7 @@ namespace MetaFile
public:
CEmfPlusBuffer();
virtual ~CEmfPlusBuffer();
- virtual EEmfPlusObjectType GetObjectType();
+ virtual EEmfPlusObjectType GetObjectType() const override;
void SetSize(unsigned int unSize);
unsigned int GetSize() const;
@@ -293,7 +293,7 @@ namespace MetaFile
CEmfPlusPath();
CEmfPlusPath(CEmfPlusPath* pPath);
virtual ~CEmfPlusPath();
- virtual EEmfPlusObjectType GetObjectType() override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
TRectD GetBounds() const;
};
@@ -311,7 +311,7 @@ namespace MetaFile
{
public:
CEmfPlusImageAttributes();
- virtual EEmfPlusObjectType GetObjectType() override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
public:
EEmfPlusWrapMode eWrapMode;
@@ -329,7 +329,7 @@ namespace MetaFile
{
public:
CEmfPlusImage();
- virtual EEmfPlusObjectType GetObjectType() override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
void SetImageDataType(unsigned int unImageDataType);
EEmfPlusImageDataType GetImageDataType() const;
@@ -374,8 +374,8 @@ namespace MetaFile
CEmfPlusRegionNode();
virtual ~CEmfPlusRegionNode();
- EEmfPlusRegionNodeDataType GetType() const;
- EEmfPLusRegionNodeType GetNodeType() const;
+ virtual EEmfPlusRegionNodeDataType GetType() const;
+ virtual EEmfPLusRegionNodeType GetNodeType() const;
public:
EEmfPlusRegionNodeDataType eType;
@@ -387,7 +387,7 @@ namespace MetaFile
CEmfPlusRegionNodePath();
virtual ~CEmfPlusRegionNodePath();
- EEmfPLusRegionNodeType GetNodeType();
+ EEmfPLusRegionNodeType GetNodeType() const override;
bool Empty() const;
CEmfPlusPath* GetPath() const;
@@ -402,9 +402,9 @@ namespace MetaFile
CEmfPlusRegionNodeRectF();
virtual ~CEmfPlusRegionNodeRectF();
- EEmfPLusRegionNodeType GetNodeType();
+ EEmfPLusRegionNodeType GetNodeType() const override;
- bool Empty() const;
+ bool Empty() const;
TEmfPlusRectF* GetRect() const;
public:
@@ -417,9 +417,9 @@ namespace MetaFile
CEmfPlusRegionNodeChild();
virtual ~CEmfPlusRegionNodeChild();
- EEmfPLusRegionNodeType GetNodeType();
+ EEmfPLusRegionNodeType GetNodeType() const override;
- void DrawOnClip(CClip& oClip, const TXForm& oTransform, TRectL *pOutRect = NULL);
+ void DrawOnClip(CClip& oClip, const TXForm& oTransform, const TRectL* pOutRect = NULL);
public:
CEmfPlusRegionNode *pLeft, *pRigth;
};
@@ -430,7 +430,7 @@ namespace MetaFile
CEmfPlusRegion();
virtual ~CEmfPlusRegion();
- virtual EEmfPlusObjectType GetObjectType() override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
public:
std::vector arNodes;
@@ -465,7 +465,7 @@ namespace MetaFile
{
public:
CEmfPlusStringFormat();
- virtual EEmfPlusObjectType GetObjectType() override;
+ virtual EEmfPlusObjectType GetObjectType() const override;
unsigned int unStringFormatFlags;
unsigned int unStringAlignment;
diff --git a/DesktopEditor/raster/Metafile/MetaFile.cpp b/DesktopEditor/raster/Metafile/MetaFile.cpp
index c482571d39..2ab5f6e9df 100644
--- a/DesktopEditor/raster/Metafile/MetaFile.cpp
+++ b/DesktopEditor/raster/Metafile/MetaFile.cpp
@@ -523,31 +523,31 @@ namespace MetaFile
#ifdef METAFILE_SUPPORT_WMF_EMF
case c_lMetaWmf:
{
- TRectL* pRect = m_oWmfFile.GetBounds();
- *pdX = pRect->Left;
- *pdY = pRect->Top;
- *pdW = pRect->Right - pRect->Left;
- *pdH = pRect->Bottom - pRect->Top;
+ const TRectL& oRect{m_oWmfFile.GetBounds()};
+ *pdX = oRect.Left;
+ *pdY = oRect.Top;
+ *pdW = oRect.Right - oRect.Left;
+ *pdH = oRect.Bottom - oRect.Top;
break;
}
case c_lMetaEmf:
{
- TRectL* pRect = m_oEmfFile.GetBounds();
- *pdX = pRect->Left;
- *pdY = pRect->Top;
- *pdW = pRect->Right - pRect->Left;
- *pdH = pRect->Bottom - pRect->Top;
+ const TRectL& oRect{m_oEmfFile.GetBounds()};
+ *pdX = oRect.Left;
+ *pdY = oRect.Top;
+ *pdW = oRect.Right - oRect.Left;
+ *pdH = oRect.Bottom - oRect.Top;
break;
}
#endif
#ifdef METAFILE_SUPPORT_SVM
case c_lMetaSvm:
{
- TRectL* pRect = m_oSvmFile.GetBounds();
- *pdX = pRect->Left;
- *pdY = pRect->Top;
- *pdW = pRect->Right - pRect->Left;
- *pdH = pRect->Bottom - pRect->Top;
+ const TRectL& oRect{m_oSvmFile.GetBounds()};
+ *pdX = oRect.Left;
+ *pdY = oRect.Top;
+ *pdW = oRect.Right - oRect.Left;
+ *pdH = oRect.Bottom - oRect.Top;
if (*pdW > 10000 || *pdH > 10000)
{
diff --git a/DesktopEditor/raster/Metafile/StarView/SvmFile.h b/DesktopEditor/raster/Metafile/StarView/SvmFile.h
index c4c25b3943..5a7bedfeca 100644
--- a/DesktopEditor/raster/Metafile/StarView/SvmFile.h
+++ b/DesktopEditor/raster/Metafile/StarView/SvmFile.h
@@ -82,142 +82,122 @@ class CSvmFile : virtual public IMetaFileBase
m_currentCharset = 0;
m_currentLanguage = 0;
}
- TRectL* GetBounds()
+ const TRectL& GetBounds()
{
- return &m_oBoundingBox;
+ return m_oBoundingBox;
}
- TRectL* GetDCBounds()
+ const TRectL& GetDCBounds() const override
{
- //if (m_oHeader.mapMode.isSimple)
if (m_pDC->m_oMapMode.isSimple)
{
- m_oDCRect = m_oBoundingBox;
- return &m_oDCRect;
+ return m_oBoundingBox;
}
else
{
- return &m_oHeader.boundRect;
+ return m_oHeader.boundRect;
}
}
- double GetPixelHeight()
+ double GetPixelHeight() const override
{
return m_pDC->m_dPixelHeight;
}
- double GetPixelWidth()
+ double GetPixelWidth() const override
{
return m_pDC->m_dPixelWidth;
}
- int GetTextColor()
+ int GetTextColor() const override
{
- TSvmColor& oColor = m_pDC->GetTextColor();
- return METAFILE_RGBA(oColor.r, oColor.g, oColor.b, 0);
+ return m_pDC->GetTextColor().ToInt();
}
- IFont* GetFont()
+ const IFont* GetFont() const override
{
- CSvmFont* pFont = m_pDC->GetFont();
- if (!pFont)
- return NULL;
-
- return (IFont*)pFont;
+ return m_pDC->GetFont();
}
- IBrush* GetBrush()
+ const IBrush* GetBrush() const override
{
- CSvmBrush* pBrush = m_pDC->GetBrush();
- if (!pBrush)
- return NULL;
-
- return (IBrush*)pBrush;
+ return m_pDC->GetBrush();
}
- IPen* GetPen()
+ const IPen* GetPen() const override
{
- CSvmPen* pPen = m_pDC->GetPen();
- if (!pPen)
- return NULL;
-
- return (IPen*)pPen;
+ return m_pDC->GetPen();
}
- unsigned int GetTextAlign()
+ unsigned int GetTextAlign() const override
{
return m_pDC->GetTextAlign();
}
- unsigned int GetTextBgMode()
+ unsigned int GetTextBgMode() const override
{
return m_pDC->GetBgMode();
}
- int GetTextBgColor()
+ int GetTextBgColor() const override
{
- TSvmColor& oColor = m_pDC->GetTextBgColor();
- return METAFILE_RGBA(oColor.r, oColor.g, oColor.b, 0);
+ return m_pDC->GetTextBgColor().ToInt();
}
- unsigned int GetFillMode()
+ unsigned int GetFillMode() const override
{
return m_pDC->GetFillMode();
}
- TPointD GetCurPos()
+ TPointD GetCurPos() const override
{
TSvmPoint oPoint = m_pDC->GetCurPos();
TPointD oRes( oPoint.x, oPoint.y);
TranslatePoint(oPoint.x, oPoint.y, oRes.X, oRes.Y);
return oRes;
}
- TXForm* GetInverseTransform()
+ const TXForm& GetInverseTransform() const override
{
return m_pDC->GetInverseTransform();
}
- TXForm* GetTransform(int iGraphicsMode = GM_ADVANCED)
+ const TXForm& GetTransform(int iGraphicsMode = GM_ADVANCED) override
{
return m_pDC->GetTransform();
}
- unsigned int GetMiterLimit()
+ unsigned int GetMiterLimit() const override
{
return m_pDC->GetMiterLimit();
}
- unsigned int GetRop2Mode()
+ unsigned int GetRop2Mode() const override
{
return m_pDC->GetRop2Mode();
}
- CClip* GetClip()
+ const CClip* GetClip() const override
{
- CClip* pClip = m_pDC->GetClip();
- if (!pClip)
- return NULL;
-
- return pClip;
+ return m_pDC->GetClip();
}
- int GetCharSpace()
+ int GetCharSpace() const override
{
return 0;
}
- bool IsWindowFlippedY()
+ bool IsWindowFlippedY() const override
{
return false;
}
- bool IsWindowFlippedX()
+ bool IsWindowFlippedX() const override
{
return false;
}
- unsigned int GetMapMode()
+ unsigned int GetMapMode() const override
{
return MM_ANISOTROPIC;
}
- USHORT GetDpi()
+ USHORT GetDpi() const override
{
return 96;
}
- IRegion* GetRegion()
+ const IRegion* GetRegion() const override
{
return NULL;
}
- unsigned int GetArcDirection()
+ unsigned int GetArcDirection() const override
{
return AD_CLOCKWISE;
}
- CPath* GetPath()
+ const CPath* GetPath() const override
{
return NULL;
}
@@ -240,8 +220,6 @@ class CSvmFile : virtual public IMetaFileBase
bool m_bFirstPoint;
TRectL m_oBoundingBox;
- //TRect m_oRect;
- TRectL m_oDCRect;
friend class CSvmPlayer;
@@ -286,11 +264,11 @@ class CSvmFile : virtual public IMetaFileBase
//-------------------------------------------------------------------------------------------------------
- void TranslatePoint(TSvmPoint& oPoint, double& dX, double& dY)
+ void TranslatePoint(TSvmPoint& oPoint, double& dX, double& dY) const
{
TranslatePoint(oPoint.x, oPoint.y, dX, dY);
}
- void TranslatePoint(int nX, int nY, double& dX, double &dY)
+ void TranslatePoint(int nX, int nY, double& dX, double &dY) const
{
dX = (double)nX;
dY = (double)nY;
diff --git a/DesktopEditor/raster/Metafile/StarView/SvmObjects.cpp b/DesktopEditor/raster/Metafile/StarView/SvmObjects.cpp
index bbe4c96e32..4654c35218 100644
--- a/DesktopEditor/raster/Metafile/StarView/SvmObjects.cpp
+++ b/DesktopEditor/raster/Metafile/StarView/SvmObjects.cpp
@@ -319,35 +319,35 @@ CSvmBrush::CSvmBrush(CSvmBrush& oBrush)
BrushBounds = oBrush.BrushBounds;
}
-int CSvmBrush::GetColor()
+int CSvmBrush::GetColor() const
{
- return METAFILE_RGBA(Color.r, Color.g, Color.b, 0);
+ return Color.ToInt();
}
-int CSvmBrush::GetColor2()
+int CSvmBrush::GetColor2() const
{
- return METAFILE_RGBA(Color2.r, Color2.g, Color2.b, 0);
+ return Color2.ToInt();
}
-unsigned int CSvmBrush::GetStyleEx()
+unsigned int CSvmBrush::GetStyleEx() const
{
return BrushStyleEx;
}
-unsigned int CSvmBrush::GetStyle()
+unsigned int CSvmBrush::GetStyle() const
{
return BrushStyle;
}
-unsigned int CSvmBrush::GetHatch()
+unsigned int CSvmBrush::GetHatch() const
{
return BrushHatch;
}
-unsigned int CSvmBrush::GetAlpha()
+unsigned int CSvmBrush::GetAlpha() const
{
return 0xff-Color.a;
}
-unsigned int CSvmBrush::GetAlpha2()
+unsigned int CSvmBrush::GetAlpha2() const
{
return 0xff-Color2.a;
}
-void CSvmBrush::GetBounds(double& left, double& top, double& width, double& height)
+void CSvmBrush::GetBounds(double& left, double& top, double& width, double& height) const
{
left = BrushBounds.l;
top = BrushBounds.t;
@@ -355,10 +355,10 @@ void CSvmBrush::GetBounds(double& left, double& top, double& width, double& heig
height = BrushBounds.b - BrushBounds.t;
}
-void CSvmBrush::GetDibPattern(unsigned char **pBuffer, unsigned int &unWidth, unsigned int &unHeight)
+void CSvmBrush::GetDibPattern(unsigned char **pBuffer, unsigned int &unWidth, unsigned int &unHeight) const
{}
-int CSvmPen::GetColor()
+int CSvmPen::GetColor() const
{
return METAFILE_RGBA(Color.r, Color.g, Color.b, 0);
}
diff --git a/DesktopEditor/raster/Metafile/StarView/SvmObjects.h b/DesktopEditor/raster/Metafile/StarView/SvmObjects.h
index 8a512f78ba..3acbd8c00f 100644
--- a/DesktopEditor/raster/Metafile/StarView/SvmObjects.h
+++ b/DesktopEditor/raster/Metafile/StarView/SvmObjects.h
@@ -53,7 +53,7 @@ namespace MetaFile
public:
CSvmObjectBase(){}
virtual ~CSvmObjectBase(){}
- virtual ESvmObjectType GetType()
+ virtual ESvmObjectType GetType() const
{
return SVM_OBJECT_UNKNOWN;
}
@@ -241,6 +241,10 @@ struct TSvmColor
r = oColor.r; g = oColor.g; b = oColor.b; a = oColor.a; color = oColor.color;
return *this;
}
+ int ToInt() const
+ {
+ return METAFILE_RGBA(r, g, b, 0);
+ }
};
struct TSvmLineInfo
@@ -279,22 +283,22 @@ public:
CSvmBrush();
CSvmBrush(CSvmBrush& oBrush);
virtual ~CSvmBrush(){}
- virtual ESvmObjectType GetType()
+ virtual ESvmObjectType GetType() const override
{
return SVM_OBJECT_BRUSH;
}
// IBrush
- int GetColor();
- int GetColor2();
- unsigned int GetStyleEx();
- unsigned int GetStyle();
- unsigned int GetHatch();
- unsigned int GetAlpha();
- unsigned int GetAlpha2();
- std::wstring GetDibPatterPath(){ return L""; }
- void GetCenterPoint(double& dX, double& dY){}
- void GetBounds(double& left, double& top, double& width, double& height);
- void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight);
+ int GetColor() const override;
+ int GetColor2() const override;
+ unsigned int GetStyleEx() const override;
+ unsigned int GetStyle() const override;
+ unsigned int GetHatch() const override;
+ unsigned int GetAlpha() const override;
+ unsigned int GetAlpha2() const override;
+ std::wstring GetDibPatterPath() const override { return L""; }
+ void GetCenterPoint(double& dX, double& dY) const override {}
+ void GetBounds(double& left, double& top, double& width, double& height) const override;
+ void GetDibPattern(unsigned char** pBuffer, unsigned int &unWidth, unsigned int &unHeight) const override;
public:
unsigned short BrushStyleEx; //angle, or ....
@@ -331,45 +335,45 @@ public:
{
}
- virtual ESvmObjectType GetType()
+ virtual ESvmObjectType GetType() const override
{
return SVM_OBJECT_FONT;
}
// IFont
- double GetHeight()
+ double GetHeight() const override
{
return (double)SizeHeight;
}
- std::wstring GetFaceName()
+ std::wstring GetFaceName() const override
{
return sFamilyName;
}
- int GetWeight()
+ int GetWeight() const override
{
return (int)Weight;
}
- bool IsItalic()
+ bool IsItalic() const override
{
return (0x01 == Italic ? true : false);
}
- bool IsStrikeOut()
+ bool IsStrikeOut() const override
{
return (0x01 == StrikeOut ? true : false);
}
- bool IsUnderline()
+ bool IsUnderline() const override
{
return (0x01 == Underline ? true : false);
}
- int GetEscapement()
+ int GetEscapement() const override
{
return 0;//(int)Escapement;
}
- int GetCharSet()
+ int GetCharSet() const override
{
return (int)CharSet;
}
- int GetOrientation()
+ int GetOrientation() const override
{
return (int)Orientation;
}
@@ -412,34 +416,34 @@ public:
{
}
- virtual ESvmObjectType GetType()
+ virtual ESvmObjectType GetType() const override
{
return SVM_OBJECT_PEN;
}
// IPen
- int GetColor();
- unsigned int GetStyle()
+ int GetColor() const override;
+ unsigned int GetStyle() const override
{
return (unsigned int)PenStyle;
}
- double GetWidth()
+ double GetWidth() const override
{
return (double)Width;
}
- unsigned int GetAlpha()
+ unsigned int GetAlpha() const override
{
return 255;
}
- double GetMiterLimit()
+ double GetMiterLimit() const override
{
return 0;
}
- double GetDashOffset()
+ double GetDashOffset() const override
{
return 0;
}
- void GetDashData(double*& arDatas, unsigned int& unSize)
+ void GetDashData(double*& arDatas, unsigned int& unSize) const override
{
arDatas = NULL;
unSize = 0;
diff --git a/DesktopEditor/raster/Metafile/StarView/SvmPlayer.cpp b/DesktopEditor/raster/Metafile/StarView/SvmPlayer.cpp
index d4e20ad417..6a9c1f3481 100644
--- a/DesktopEditor/raster/Metafile/StarView/SvmPlayer.cpp
+++ b/DesktopEditor/raster/Metafile/StarView/SvmPlayer.cpp
@@ -447,7 +447,7 @@ CSvmDC::CSvmDC()
CSvmDC::~CSvmDC()
{
}
-CSvmDC* CSvmDC::Copy()
+CSvmDC* CSvmDC::Copy() const
{
CSvmDC* pNewDC = new CSvmDC();
if (!pNewDC)
@@ -482,7 +482,7 @@ CSvmDC* CSvmDC::Copy()
return pNewDC;
}
-ESvmMapUnit CSvmDC::GetMapModeUnit()
+ESvmMapUnit CSvmDC::GetMapModeUnit() const
{
return (ESvmMapUnit)m_oMapMode.unit;
}
@@ -576,14 +576,14 @@ void CSvmDC::SetMapMode(TSvmMapMode & mapMode, bool prefered )
}
}
-TXForm* CSvmDC::GetTransform()
+const TXForm& CSvmDC::GetTransform() const
{
- return &m_oTransform;
+ return m_oTransform;
}
-TXForm* CSvmDC::GetInverseTransform()
+const TXForm& CSvmDC::GetInverseTransform() const
{
- return &m_oTransform;
+ return m_oTransform;
}
void CSvmDC::SetTextColor(TSvmColor& oColor)
@@ -591,7 +591,7 @@ void CSvmDC::SetTextColor(TSvmColor& oColor)
m_oTextColor.Copy(oColor);
}
-TSvmColor& CSvmDC::GetTextColor()
+const TSvmColor& CSvmDC::GetTextColor() const
{
return m_oTextColor;
}
@@ -604,7 +604,7 @@ void CSvmDC::RemoveBrush(CSvmBrush* pBrush)
if (pBrush == m_pBrush)
m_pBrush = NULL;
}
-CSvmBrush* CSvmDC::GetBrush()
+const CSvmBrush* CSvmDC::GetBrush() const
{
return m_pBrush;
}
@@ -617,7 +617,7 @@ void CSvmDC::RemoveFont(CSvmFont* pFont)
if (pFont == m_pFont)
m_pFont = NULL;
}
-CSvmFont* CSvmDC::GetFont()
+const CSvmFont* CSvmDC::GetFont() const
{
return m_pFont;
}
@@ -625,7 +625,7 @@ void CSvmDC::SetTextAlign(unsigned int ulAlign)
{
m_ulTextAlign = ulAlign;
}
-unsigned int CSvmDC::GetTextAlign()
+unsigned int CSvmDC::GetTextAlign() const
{
return m_ulTextAlign;
}
@@ -633,7 +633,7 @@ void CSvmDC::SetBgMode(unsigned int ulBgMode)
{
m_ulBgMode = ulBgMode;
}
-unsigned int CSvmDC::GetBgMode()
+unsigned int CSvmDC::GetBgMode() const
{
return m_ulBgMode;
}
@@ -645,7 +645,7 @@ void CSvmDC::SetTextBgColor(TSvmColor* oColor)
{
m_oTextBgColor.Copy(*oColor);
}
-TSvmColor& CSvmDC::GetTextBgColor()
+const TSvmColor& CSvmDC::GetTextBgColor() const
{
return m_oTextBgColor;
}
@@ -653,7 +653,7 @@ void CSvmDC::SetMiterLimit(unsigned int ulMiter)
{
m_ulMiterLimit = ulMiter;
}
-unsigned int CSvmDC::GetMiterLimit()
+unsigned int CSvmDC::GetMiterLimit() const
{
return m_ulMiterLimit;
}
@@ -661,7 +661,7 @@ void CSvmDC::SetFillMode(unsigned int ulFillMode)
{
m_ulFillMode = ulFillMode;
}
-unsigned int CSvmDC::GetFillMode()
+unsigned int CSvmDC::GetFillMode() const
{
return m_ulFillMode;
}
@@ -674,11 +674,11 @@ void CSvmDC::RemovePen(CSvmPen* pPen)
if (pPen == m_pPen)
m_pPen = NULL;
}
-CSvmPen* CSvmDC::GetPen()
+const CSvmPen* CSvmDC::GetPen() const
{
return m_pPen;
}
-CClip* CSvmDC::GetClip()
+const CClip* CSvmDC::GetClip() const
{
return NULL;;
//return &m_oClip;
@@ -687,7 +687,7 @@ void CSvmDC::SetStretchMode(unsigned int& oMode)
{
m_ulStretchMode = oMode;
}
-unsigned int CSvmDC::GetStretchMode()
+unsigned int CSvmDC::GetStretchMode() const
{
return m_ulStretchMode;
}
@@ -705,7 +705,7 @@ void CSvmDC::SetRop2Mode(unsigned int& nMode)
{
m_ulRop2Mode = nMode;
}
-unsigned int CSvmDC::GetRop2Mode()
+unsigned int CSvmDC::GetRop2Mode() const
{
return m_ulRop2Mode;
}
@@ -731,7 +731,7 @@ void CSvmDC::SetCurPos(int lX, int lY)
m_oCurPos.x = lX;
m_oCurPos.y = lY;
}
-TSvmPoint & CSvmDC::GetCurPos()
+const TSvmPoint & CSvmDC::GetCurPos() const
{
return m_oCurPos;
}
@@ -743,7 +743,7 @@ void CSvmDC::SetArcDirection(unsigned int unDirection)
{
m_unArcDirection = unDirection;
}
-unsigned int CSvmDC::GetArcDirection()
+unsigned int CSvmDC::GetArcDirection() const
{
return m_unArcDirection;
}
diff --git a/DesktopEditor/raster/Metafile/StarView/SvmPlayer.h b/DesktopEditor/raster/Metafile/StarView/SvmPlayer.h
index f8ecddd679..be9b9568fa 100644
--- a/DesktopEditor/raster/Metafile/StarView/SvmPlayer.h
+++ b/DesktopEditor/raster/Metafile/StarView/SvmPlayer.h
@@ -89,51 +89,51 @@ public:
CSvmDC();
~CSvmDC();
- CSvmDC* Copy();
+ CSvmDC* Copy() const;
- ESvmMapUnit GetMapModeUnit();
- void SetMapMode(TSvmMapMode &mapMode, bool prefered = false);
- TXForm* GetTransform();
- TXForm* GetInverseTransform();
- void MultiplyTransform(TXForm& oForm, unsigned int ulMode);
- void SetTextColor(TSvmColor& oColor);
- TSvmColor& GetTextColor();
- void SetBrush(CSvmBrush* pBrush);
- void RemoveBrush(CSvmBrush *pBrush);
- CSvmBrush* GetBrush();
- void SetFont(CSvmFont* pFont);
- void RemoveFont(CSvmFont* pFont);
- CSvmFont* GetFont();
- void SetTextAlign(unsigned int ulAlign);
- unsigned int GetTextAlign();
- void SetBgMode(unsigned int ulBgMode);
- unsigned int GetBgMode();
+ ESvmMapUnit GetMapModeUnit() const;
+ void SetMapMode(TSvmMapMode &mapMode, bool prefered = false);
+ const TXForm& GetTransform() const;
+ const TXForm& GetInverseTransform() const;
+ void MultiplyTransform(TXForm& oForm, unsigned int ulMode);
+ void SetTextColor(TSvmColor& oColor);
+ const TSvmColor& GetTextColor() const;
+ void SetBrush(CSvmBrush* pBrush);
+ void RemoveBrush(CSvmBrush *pBrush);
+ const CSvmBrush* GetBrush() const;
+ void SetFont(CSvmFont* pFont);
+ void RemoveFont(CSvmFont* pFont);
+ const CSvmFont* GetFont() const;
+ void SetTextAlign(unsigned int ulAlign);
+ unsigned int GetTextAlign() const;
+ void SetBgMode(unsigned int ulBgMode);
+ unsigned int GetBgMode() const;
- void SetTextBgColor(TSvmColor& oColor);
- void SetTextBgColor(TSvmColor* oColor);
- TSvmColor& GetTextBgColor();
+ void SetTextBgColor(TSvmColor& oColor);
+ void SetTextBgColor(TSvmColor* oColor);
+ const TSvmColor& GetTextBgColor() const;
- void SetMiterLimit(unsigned int ulMiter);
- unsigned int GetMiterLimit();
- void SetFillMode(unsigned int ulFillMode);
- unsigned int GetFillMode();
- void SetPen(CSvmPen* pPen);
- void RemovePen(CSvmPen* pPen);
- CSvmPen* GetPen();
- void SetStretchMode(unsigned int& oMode);
- unsigned int GetStretchMode();
- void SetRop2Mode(unsigned int& nMode);
- unsigned int GetRop2Mode();
+ void SetMiterLimit(unsigned int ulMiter);
+ unsigned int GetMiterLimit() const;
+ void SetFillMode(unsigned int ulFillMode);
+ unsigned int GetFillMode() const;
+ void SetPen(CSvmPen* pPen);
+ void RemovePen(CSvmPen* pPen);
+ const CSvmPen* GetPen() const;
+ void SetStretchMode(unsigned int& oMode);
+ unsigned int GetStretchMode() const;
+ void SetRop2Mode(unsigned int& nMode);
+ unsigned int GetRop2Mode() const;
//void SetPalette(CSvmLogPalette* pPalette);
//void RemovePalette(CSvmLogPalette* pPalette);
//CSvmLogPalette* GetPalette();
- void SetCurPos(TSvmPoint& oPoint);
- void SetCurPos(int lX, int lY);
- TSvmPoint& GetCurPos();
- CClip* GetClip();
+ void SetCurPos(TSvmPoint& oPoint);
+ void SetCurPos(int lX, int lY);
+ const TSvmPoint& GetCurPos() const;
+ const CClip* GetClip() const;
//void ClipToPath(CSvmPath* pPath, unsigned int unMode);
- void SetArcDirection(unsigned int unDirection);
- unsigned int GetArcDirection();
+ void SetArcDirection(unsigned int unDirection);
+ unsigned int GetArcDirection() const;
double m_dPixelWidth;
double m_dPixelHeight;
diff --git a/DesktopEditor/raster/Metafile/Wmf/WmfFile.h b/DesktopEditor/raster/Metafile/Wmf/WmfFile.h
index 3d17de2f15..5c0734575b 100644
--- a/DesktopEditor/raster/Metafile/Wmf/WmfFile.h
+++ b/DesktopEditor/raster/Metafile/Wmf/WmfFile.h
@@ -51,7 +51,7 @@ namespace MetaFile
{
public:
CWmfFile() : m_pParser(new CWmfParser)
- {}
+ {}
~CWmfFile()
{
@@ -102,7 +102,7 @@ namespace MetaFile
m_pParser->Close();
}
- void SetFontManager(NSFonts::IFontManager* pFontManager)
+ void SetFontManager(NSFonts::IFontManager* pFontManager)
{
m_pParser->SetFontManager(pFontManager);
}
@@ -131,7 +131,7 @@ namespace MetaFile
m_pParser->SetInterpretator(pOutput, wsFilePath);
}
- TRectL* GetBounds()
+ const TRectL& GetBounds() const
{
return m_pParser->GetDCBounds();
}
diff --git a/DesktopEditor/raster/Metafile/Wmf/WmfInterpretator/CInterpretatorSvgBase.cpp b/DesktopEditor/raster/Metafile/Wmf/WmfInterpretator/CInterpretatorSvgBase.cpp
index 1c860b7517..48cc8a57ba 100644
--- a/DesktopEditor/raster/Metafile/Wmf/WmfInterpretator/CInterpretatorSvgBase.cpp
+++ b/DesktopEditor/raster/Metafile/Wmf/WmfInterpretator/CInterpretatorSvgBase.cpp
@@ -269,7 +269,7 @@ namespace MetaFile
if (0 != nColor)
arNodeAttributes.push_back({L"fill", CalculateColor(nColor, 255)});
- IFont *pFont = m_pParser->GetFont();
+ const IFont *pFont = m_pParser->GetFont();
if (NULL == pFont)
return;
@@ -281,23 +281,29 @@ namespace MetaFile
arNodeAttributes.push_back({L"font-size", ConvertToWString(dFontHeight)});
- std::wstring wsFontName = pFont->GetFaceName();
+ NSStringUtils::CStringBuilder oFontName;
+ oFontName.WriteEncodeXmlString(pFont->GetFaceName());
-#ifndef BUILDING_WASM_MODULE
- if (!wsFontName.empty())
+ if (0 != oFontName.GetSize())
{
+ #ifndef BUILDING_WASM_MODULE
NSFonts::CFontSelectFormat oFormat;
oFormat.wsName = new std::wstring(pFont->GetFaceName());
NSFonts::CFontInfo *pFontInfo = m_pParser->GetFontManager()->GetFontInfoByParams(oFormat);
- if (NULL != pFontInfo && !StringEquals(wsFontName, pFontInfo->m_wsFontName))
- wsFontName = L"'" + wsFontName + L"', '" + pFontInfo->m_wsFontName + L"'";
+ if (NULL != pFontInfo && !StringEquals(*oFormat.wsName, pFontInfo->m_wsFontName))
+ {
+ oFontName.Clear();
+ oFontName.WriteEncodeXmlString(L"\'");
+ oFontName.WriteEncodeXmlString(*oFormat.wsName);
+ oFontName.WriteEncodeXmlString(L"\',\'");
+ oFontName.WriteEncodeXmlString(pFontInfo->m_wsFontName);
+ oFontName.WriteEncodeXmlString(L"\'");
+ }
+ #endif
+ arNodeAttributes.push_back({L"font-family", oFontName.GetData()});
}
-#endif
-
- if (!wsFontName.empty())
- arNodeAttributes.push_back({L"font-family", wsFontName});
if (pFont->GetWeight() > 550)
arNodeAttributes.push_back({L"font-weight", L"bold"});
@@ -378,7 +384,7 @@ namespace MetaFile
{
double dEscapement = pFont->GetEscapement() / -10;
- if (m_pParser->GetTransform()->M22 < 0)
+ if (m_pParser->GetTransform().M22 < 0)
dEscapement = -dEscapement;
double dSin = std::sin(dEscapement * M_PI / 180.);
@@ -494,6 +500,7 @@ namespace MetaFile
{L"fill", CalculateColor(pBuffer[2], pBuffer[1], pBuffer[0], 255)}};
AddTransform(arAttributes, &oTransform);
+ AddClip();
WriteNode(L"rect", arAttributes);
@@ -548,21 +555,21 @@ namespace MetaFile
void CInterpretatorSvgBase::ResetClip()
{
+ CloseClip();
m_oClip.Reset();
+ m_bUpdatedClip = false;
}
void CInterpretatorSvgBase::IntersectClip(const TRectD &oClip)
{
- TXForm *pTransform = m_pParser->GetTransform();
-
double dLeft = oClip.Left;
double dTop = oClip.Top;
double dRight = oClip.Right;
double dBottom = oClip.Bottom;
- pTransform->Apply(dLeft, dTop);
- pTransform->Apply(dRight, dBottom);
-
+ m_pParser->GetTransform().Apply(dLeft, dTop);
+ m_pParser->GetTransform().Apply(dRight, dBottom);
+
const std::wstring wsId = L"INTERSECTCLIP_" + ConvertToWString(++m_unNumberDefs, 0);
const std::wstring wsValue = L"";
@@ -571,23 +578,23 @@ namespace MetaFile
void CInterpretatorSvgBase::ExcludeClip(const TRectD &oClip, const TRectD &oBB)
{
- TXForm *pTransform = m_pParser->GetTransform();
+ const TXForm &oTransform{m_pParser->GetTransform()};
double dClipLeft = oClip.Left;
double dClipTop = oClip.Top;
double dClipRight = oClip.Right;
double dClipBottom = oClip.Bottom;
- pTransform->Apply(dClipLeft, dClipTop);
- pTransform->Apply(dClipRight, dClipBottom);
-
+ oTransform.Apply(dClipLeft, dClipTop);
+ oTransform.Apply(dClipRight, dClipBottom);
+
double dBBLeft = oBB.Left;
double dBBTop = oBB.Top;
double dBBRight = oBB.Right;
double dBBBottom = oBB.Bottom;
- pTransform->Apply(dBBLeft, dBBTop);
- pTransform->Apply(dBBRight, dBBBottom);
+ oTransform.Apply(dBBLeft, dBBTop);
+ oTransform.Apply(dBBRight, dBBBottom);
const std::wstring wsId = L"EXCLUDECLIP_" + ConvertToWString(++m_unNumberDefs, 0);
const std::wstring wsValue = L"GetPen();
+ const IPen *pPen = m_pParser->GetPen();
if (NULL == pPen || PS_NULL == pPen->GetStyle())
return;
@@ -713,11 +720,11 @@ namespace MetaFile
return;
}
- IBrush *pBrush = NULL;
+ const IBrush *pBrush = NULL;
if (NULL != m_pParser->GetPen())
{
- CEmfPlusPen *pPen = dynamic_cast(m_pParser->GetPen());
+ const CEmfPlusPen *pPen = dynamic_cast