diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index 64b8f0037..bed0d41fc 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -6239,7 +6239,7 @@ void Renderer::renderDisplay() { coreData.getDisplayFont3D(), display->getColor(), metrics.getDisplayX() -1, - metrics.getDisplayY() + metrics.getDisplayH() - 60); + metrics.getDisplayY() + metrics.getDisplayH() - 56); //progress Bar if(display->getProgressBar() != -1) { diff --git a/source/glest_game/menu/menu_state_load_game.cpp b/source/glest_game/menu/menu_state_load_game.cpp index 9aea4152d..729c24748 100644 --- a/source/glest_game/menu/menu_state_load_game.cpp +++ b/source/glest_game/menu/menu_state_load_game.cpp @@ -293,8 +293,12 @@ void MenuStateLoadGame::mouseClick(int x, int y, MouseButton mouseButton){ if(fileExists(filename) == true) { // Xerces is infinitely slower than rapidxml + xml_engine_parser_type engine_type = XML_RAPIDXML_ENGINE; + if(Config::getInstance().getBool("ForceXMLLoadGameUsingXerces") == true) { + engine_type = XML_XERCES_ENGINE; + } // XmlTree xmlTree(XML_XERCES_ENGINE); - XmlTree xmlTree(XML_RAPIDXML_ENGINE); + XmlTree xmlTree(engine_type); if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Before load of XML\n"); std::map mapExtraTagReplacementValues; diff --git a/source/shared_lib/sources/graphics/font.cpp b/source/shared_lib/sources/graphics/font.cpp index 3128bac66..d7a77264e 100644 --- a/source/shared_lib/sources/graphics/font.cpp +++ b/source/shared_lib/sources/graphics/font.cpp @@ -530,6 +530,8 @@ void Font::bidi_cvt(string &str_) { /* #ifdef HAVE_FRIBIDI + printf("BEFORE: [%s]\n",str_.c_str()); + char *c_str = const_cast(str_.c_str()); // fribidi forgot const... FriBidiStrIndex len = (int)str_.length(); FriBidiChar *bidi_logical = new FriBidiChar[len * 4]; @@ -568,9 +570,13 @@ void Font::bidi_cvt(string &str_) { delete[] bidi_logical; delete[] bidi_visual; delete[] utf8str; + + printf("NEW: [%s]\n",str_.c_str()); + #endif */ + #ifdef HAVE_FRIBIDI //printf("BEFORE: [%s]\n",str_.c_str()); @@ -592,8 +598,10 @@ void Font::bidi_cvt(string &str_) { lines.push_back(str_); } + //printf("Lines: %d\n",(int)lines.size()); + for(int lineIndex = 0; lineIndex < lines.size(); ++lineIndex) { - if(new_value != "") { + if(lineIndex > 0) { if(hasSoftNewLines == true) { new_value += "\\n"; } @@ -659,7 +667,7 @@ void Font::bidi_cvt(string &str_) { //printf("STRIPPED: [%s]\n",str_.c_str()); //Convert logical text to visual - log2vis = fribidi_log2vis (logical, len, &base, /* output: */ visual, ltov, vtol, NULL); + log2vis = fribidi_log2vis (logical, len, &base, visual, ltov, vtol, NULL); //If convertion was successful if(log2vis) @@ -698,71 +706,6 @@ void Font::bidi_cvt(string &str_) { #endif -/* - string out = "" ; - - // FriBidi C string holding the originall text (that is probably with logicall hebrew) - FriBidiChar * logical = NULL; - // FriBidi C string for the output text (that should be visual hebrew) - FriBidiChar * visual = NULL; - - // C string holding the originall text (not nnecessarily as unicode) - char * ip = NULL; - // C string for the output text - char * op = NULL; - - // Size to allocate for the char arrays - int size = str_.size () + 2; - - // Allocate memory: - // It's probably way too much, but at least it's not too little - logical = new FriBidiChar [size * 3]; - visual = new FriBidiChar [size * 3]; - ip = new char [size * 3]; - op = new char [size * 3]; - - FriBidiCharType base; - size_t len, Orig_len; - - // A bool type to see if conversion succeded - fribidi_boolean log2vis; - - // Holds information telling fribidi to use UTF-8 - FriBidiCharSet char_set_num; - char_set_num = fribidi_parse_charset ( "UTF-8" ); - - // Copy the string into the given string ip - strcpy (ip, str_.c_str ()); - - // Find length of originall text - Orig_len = len = strlen (ip); - - // Insert IP to logical as unicode (and find it's size now) - len = fribidi_charset_to_unicode (char_set_num, ip, len, logical); - - base = FRIBIDI_TYPE_ON; - // Convert text to visual logical - log2vis = fribidi_log2vis (logical, len, & base, visual, NULL, NULL, NULL); - - // If convertion was successful - if (log2vis) - { - // Remove bidi marks (that we don't need) from the output text - len = fribidi_remove_bidi_marks (visual, len, NULL, NULL, NULL); - - // Convert unicode string back to the encoding the input string was in - fribidi_unicode_to_charset (char_set_num, visual, len, op); - - // Insert the output string into the output QString - str_ = op; - } - - // Free allocated memory - delete [] visual; - delete [] logical; - delete [] ip; - delete [] op; -*/ } // =============================================== diff --git a/source/tests/shared_lib/graphics/font_test.cpp b/source/tests/shared_lib/graphics/font_test.cpp index 4614632c8..af767fdca 100644 --- a/source/tests/shared_lib/graphics/font_test.cpp +++ b/source/tests/shared_lib/graphics/font_test.cpp @@ -31,12 +31,24 @@ class FontTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( FontTest ); CPPUNIT_TEST( test_LTR_RTL_Mixed ); + CPPUNIT_TEST( test_bidi_newline_handling ); CPPUNIT_TEST_SUITE_END(); // End of Fixture registration public: + void test_bidi_newline_handling() { + + string text = "\n\nHP: 9000/9000\nArmor: 0 (Stone)\nSight: 15\nProduce Slave"; + string expected = text; +#ifdef HAVE_FRIBIDI + Font::bidi_cvt(text); + printf("Expected: [%s] result[%s]\n",expected.c_str(),text.c_str()); + CPPUNIT_ASSERT_EQUAL( expected,text ); +#endif + + } void test_LTR_RTL_Mixed() { Font::fontSupportMixedRightToLeft = true;