XmlTextsFile.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*
  2. * Copyright (C) 2022 The V-Gears Team
  3. *
  4. * This file is part of V-Gears
  5. *
  6. * V-Gears is free software: you can redistribute it and/or modify it under
  7. * terms of the GNU General Public License as published by the Free Software
  8. * Foundation, version 3.0 (GPLv3) of the License.
  9. *
  10. * V-Gears is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. */
  15. #include "core/Logger.h"
  16. #include "core/XmlTextFile.h"
  17. #include "core/XmlTextsFile.h"
  18. #include "TextHandler.h"
  19. XmlTextsFile::XmlTextsFile(const Ogre::String& file): XmlFile(file){}
  20. XmlTextsFile::~XmlTextsFile(){}
  21. void XmlTextsFile::GetAvailableLanguages(Ogre::StringVector& languages){
  22. TiXmlNode* node = file_.RootElement();
  23. if (node == NULL || node->ValueStr() != "texts"){
  24. LOG_ERROR(
  25. "Texts File: " + file_.ValueStr() + " is not a valid texts file! No <texts> in root."
  26. );
  27. return;
  28. }
  29. node = node->FirstChild();
  30. while (node != NULL){
  31. if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "language")
  32. languages.push_back(GetString(node, "name"));
  33. node = node->NextSibling();
  34. }
  35. }
  36. void XmlTextsFile::LoadTexts(){
  37. TiXmlNode* node = file_.RootElement();
  38. if (node == NULL || node->ValueStr() != "texts"){
  39. LOG_ERROR(
  40. "Texts File: " + file_.ValueStr() + " is not a valid texts file! No <texts> in root."
  41. );
  42. return;
  43. }
  44. Ogre::String language = TextHandler::getSingleton().GetLanguage();
  45. node = node->FirstChild();
  46. while (node != nullptr){
  47. if (node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "language"){
  48. if (GetString(node, "name") == language){
  49. TiXmlNode* node2 = node->FirstChild();
  50. while (node2 != nullptr){
  51. if (node2->Type() == TiXmlNode::TINYXML_ELEMENT && node2->ValueStr() == "text"){
  52. Ogre::String file = GetString(node2, "file");
  53. if (file != ""){
  54. XmlTextFile text("./data/" + file);
  55. text.LoadTexts();
  56. }
  57. else LOG_ERROR("Empty filename in language " + language + ".");
  58. }
  59. node2 = node2->NextSibling();
  60. }
  61. }
  62. }
  63. node = node->NextSibling();
  64. }
  65. }