diff --git a/util/skyculture-converter/ConstellationOldLoader.cpp b/util/skyculture-converter/ConstellationOldLoader.cpp index 3eb4dd7efbb1d..10e8a3f125343 100644 --- a/util/skyculture-converter/ConstellationOldLoader.cpp +++ b/util/skyculture-converter/ConstellationOldLoader.cpp @@ -378,6 +378,14 @@ void ConstellationOldLoader::load(const QString& skyCultureDir, const QString& o loadBoundaries(skyCultureDir); } +auto ConstellationOldLoader::find(QString const& englishName) const -> const Constellation* +{ + for(const auto& cons : constellations) + if(cons.englishName == englishName) + return &cons; + return nullptr; +} + bool ConstellationOldLoader::dumpConstellationsJSON(std::ostream& s) const { if(constellations.empty()) return false; diff --git a/util/skyculture-converter/ConstellationOldLoader.hpp b/util/skyculture-converter/ConstellationOldLoader.hpp index 57a2f11a9f861..beb397a1ce568 100644 --- a/util/skyculture-converter/ConstellationOldLoader.hpp +++ b/util/skyculture-converter/ConstellationOldLoader.hpp @@ -7,7 +7,7 @@ class ConstellationOldLoader { - QString skyCultureName; +public: struct Constellation { QString abbreviation; @@ -24,6 +24,8 @@ class ConstellationOldLoader bool read(QString const& record); }; +private: + QString skyCultureName; std::vector constellations; struct RaDec { @@ -45,6 +47,7 @@ class ConstellationOldLoader bool dumpConstellationsJSON(std::ostream& s) const; public: void load(const QString &skyCultureDir, const QString& outDir); + const Constellation* find(QString const& englishName) const; bool dumpJSON(std::ostream& s) const; bool hasBoundaries() const { return !boundaries.empty(); } void setBoundariesType(std::string const& type) { boundariesType = type; } diff --git a/util/skyculture-converter/DescriptionOldLoader.cpp b/util/skyculture-converter/DescriptionOldLoader.cpp index 220930f209cad..5af7968b7c2b7 100644 --- a/util/skyculture-converter/DescriptionOldLoader.cpp +++ b/util/skyculture-converter/DescriptionOldLoader.cpp @@ -8,6 +8,8 @@ #include #include #include +#include "NamesOldLoader.hpp" +#include "ConstellationOldLoader.hpp" namespace { @@ -615,7 +617,8 @@ QString DescriptionOldLoader::translateDescription(const QString& markdownInput, return text; } -void DescriptionOldLoader::loadTranslationsOfNames(const QString& poBaseDir, const QString& cultureIdQS, const QString& englishName) +void DescriptionOldLoader::loadTranslationsOfNames(const QString& poBaseDir, const QString& cultureIdQS, const QString& englishName, + const ConstellationOldLoader& consLoader, const NamesOldLoader& namesLoader) { po_xerror_handler handler = {gettextpo_xerror, gettextpo_xerror2}; const auto cultureId = cultureIdQS.toStdString(); @@ -663,6 +666,14 @@ void DescriptionOldLoader::loadTranslationsOfNames(const QString& poBaseDir, con if(!scNameTranslated) qWarning() << "Couldn't find a translation for the name of the sky culture"; + const std::vector> sourceFiles{ + {"skycultures/"+cultureId+"/star_names.fab", "star"}, + {"skycultures/"+cultureId+"/dso_names.fab", "dso"}, + {"skycultures/"+cultureId+"/planet_names.fab", "planet"}, + {"skycultures/"+cultureId+"/asterism_names.fab", "asterism"}, + {"skycultures/"+cultureId+"/constellation_names.eng.fab", "constellation"}, + }; + QString comments; const auto domains = po_file_domains(file); for(auto domainp = domains; *domainp; domainp++) { @@ -673,23 +684,59 @@ void DescriptionOldLoader::loadTranslationsOfNames(const QString& poBaseDir, con { const auto msgid = po_message_msgid(message); const auto msgstr = po_message_msgstr(message); - const auto comments = po_message_comments(message); - const auto xcomments = po_message_extracted_comments(message); + comments = po_message_comments(message); + auto xcomments = po_message_extracted_comments(message); for(int n = 0; ; ++n) { const auto filepos = po_message_filepos(message, n); if(!filepos) break; const auto refFileName = po_filepos_file(filepos); - for(const auto ref : { - "skycultures/"+cultureId+"/star_names.fab", - "skycultures/"+cultureId+"/dso_names.fab", - "skycultures/"+cultureId+"/planet_names.fab", - "skycultures/"+cultureId+"/asterism_names.fab", - "skycultures/"+cultureId+"/constellation_names.eng.fab", - }) + for(const auto ref : sourceFiles) { - if(refFileName == ref) - dict.push_back({comments, xcomments, msgid, msgstr}); + if(refFileName == ref.first) + { + if(ref.second == "constellation") + { + const auto cons = consLoader.find(msgid); + if(cons && !cons->nativeName.isEmpty()) + { + comments = englishName+" constellation, native: "+cons->nativeName; + } + else + { + comments = englishName+" constellation"; + } + xcomments = ""; + } + else if(ref.second == "star") + { + const int hip = namesLoader.findStar(msgid); + if(hip > 0) + { + comments = QString("Name for HIP %1").arg(hip); + xcomments = ""; + } + } + else if(ref.second == "planet") + { + const auto planet = namesLoader.findPlanet(msgid); + if(!planet.isEmpty()) + { + comments = "Name for NAME " + planet; + xcomments = ""; + } + } + else if(ref.second == "dso") + { + const auto dso = namesLoader.findDSO(msgid); + if(!dso.isEmpty()) + { + comments = "Name for " + dso; + xcomments = ""; + } + } + dict.push_back({comments.toUtf8().constData(), xcomments, msgid, msgstr}); + } } } } @@ -720,6 +767,7 @@ void DescriptionOldLoader::locateAndRelocateAllInlineImages(QString& html, const void DescriptionOldLoader::load(const QString& inDir, const QString& poBaseDir, const QString& cultureId, const QString& englishName, const QString& author, const QString& credit, const QString& license, + const ConstellationOldLoader& consLoader, const NamesOldLoader& namesLoader, const bool fullerConversionToMarkdown, const bool footnotesToRefs, const bool convertOrderedLists, const bool genTranslatedMD) { @@ -982,7 +1030,7 @@ void DescriptionOldLoader::load(const QString& inDir, const QString& poBaseDir, translatedMDs[locale] = translateDescription(markdown, locale); } - loadTranslationsOfNames(poBaseDir, cultureId, englishName); + loadTranslationsOfNames(poBaseDir, cultureId, englishName, consLoader, namesLoader); } bool DescriptionOldLoader::dumpMarkdown(const QString& outDir) const diff --git a/util/skyculture-converter/DescriptionOldLoader.hpp b/util/skyculture-converter/DescriptionOldLoader.hpp index 4d024f1207bbd..8ed3a566f352f 100644 --- a/util/skyculture-converter/DescriptionOldLoader.hpp +++ b/util/skyculture-converter/DescriptionOldLoader.hpp @@ -5,6 +5,8 @@ #include #include +class ConstellationOldLoader; +class NamesOldLoader; class DescriptionOldLoader { QString markdown; @@ -35,12 +37,14 @@ class DescriptionOldLoader QHash poHeaders; bool dumpMarkdown(const QString& outDir) const; void locateAndRelocateAllInlineImages(QString& html, bool saveToRefs); - void loadTranslationsOfNames(const QString& poBaseDir, const QString& cultureId, const QString& englishName); + void loadTranslationsOfNames(const QString& poBaseDir, const QString& cultureId, const QString& englishName, + const ConstellationOldLoader& consLoader, const NamesOldLoader& namesLoader); QString translateSection(const QString& markdown, const qsizetype bodyStartPos, const qsizetype bodyEndPos, const QString& locale, const QString& sectionName) const; QString translateDescription(const QString& markdown, const QString& locale) const; public: void load(const QString& inDir, const QString& poBaseDir, const QString& cultureId, const QString& englishName, const QString& author, const QString& credit, const QString& license, + const ConstellationOldLoader& consLoader, const NamesOldLoader& namesLoader, bool fullerConversionToMarkdown, bool footnotesToRefs, bool convertOrderedLists, bool genTranslatedMD); bool dump(const QString& outDir) const; }; diff --git a/util/skyculture-converter/NamesOldLoader.cpp b/util/skyculture-converter/NamesOldLoader.cpp index c7f8247e05cef..7723539ec963a 100644 --- a/util/skyculture-converter/NamesOldLoader.cpp +++ b/util/skyculture-converter/NamesOldLoader.cpp @@ -76,6 +76,15 @@ void NamesOldLoader::loadStarNames(const QString& skyCultureDir) qDebug().noquote() << "Loaded" << readOk << "/" << totalRecords << "common star names"; } +int NamesOldLoader::findStar(QString const& englishName) const +{ + for(auto it = starNames.cbegin(); it != starNames.end(); ++it) + for(const auto& name : it.value()) + if(name == englishName) + return it.key(); + return -1; +} + void NamesOldLoader::loadDSONames(const QString& skyCultureDir) { const auto namesFile = skyCultureDir + "/dso_names.fab"; @@ -135,6 +144,15 @@ void NamesOldLoader::loadDSONames(const QString& skyCultureDir) qDebug().noquote() << "Loaded" << readOk << "/" << totalRecords << "common names of deep-sky objects"; } +QString NamesOldLoader::findDSO(QString const& englishName) const +{ + for(auto it = dsoNames.cbegin(); it != dsoNames.end(); ++it) + for(const auto& name : it.value()) + if(name == englishName) + return it.key(); + return {}; +} + void NamesOldLoader::loadPlanetNames(const QString& skyCultureDir) { const auto namesFile = skyCultureDir + "/planet_names.fab"; @@ -185,6 +203,15 @@ void NamesOldLoader::loadPlanetNames(const QString& skyCultureDir) } } +QString NamesOldLoader::findPlanet(QString const& englishName) const +{ + for(auto it = planetNames.cbegin(); it != planetNames.end(); ++it) + for(const auto& name : it.value()) + if(name.english == englishName) + return it.key(); + return {}; +} + void NamesOldLoader::load(const QString& skyCultureDir) { loadStarNames(skyCultureDir); diff --git a/util/skyculture-converter/NamesOldLoader.hpp b/util/skyculture-converter/NamesOldLoader.hpp index 75ad266b18444..bd1a0dc7be028 100644 --- a/util/skyculture-converter/NamesOldLoader.hpp +++ b/util/skyculture-converter/NamesOldLoader.hpp @@ -21,5 +21,8 @@ class NamesOldLoader void loadPlanetNames(const QString& skyCultureDir); public: void load(const QString& skyCultureDir); + int/*HIP*/ findStar(QString const& englishName) const; + QString/*id*/ findPlanet(QString const& englishName) const; + QString/*id*/ findDSO(QString const& englishName) const; bool dumpJSON(std::ostream& s) const; }; diff --git a/util/skyculture-converter/main.cpp b/util/skyculture-converter/main.cpp index 1c5ca4b7d9a27..f6420c2a3dfca 100644 --- a/util/skyculture-converter/main.cpp +++ b/util/skyculture-converter/main.cpp @@ -176,7 +176,7 @@ int main(int argc, char** argv) DescriptionOldLoader dLoader; license = convertLicense(license); - dLoader.load(inDir, poDir, cultureId, englishName, author, credit, license, + dLoader.load(inDir, poDir, cultureId, englishName, author, credit, license, cLoader, nLoader, fullerConversion, footnotesToRefs, convertOrderedLists, genTranslatedMD); dLoader.dump(outDir);