 +            int upSkipCount = 0;
 +            if (endp > 1 && isCJKLeftPunctuation(*(m_text + endp))) {
 +				CRLog::trace("skip skip punctuation %s, at index %d", LCSTR(lString16(m_text+endp, 1)), endp);
-+            } else if (endp > 1 && isCJKLeftPunctuation(*(m_text + endp -1))) {
++            } else if (endp > 1 && isCJKLeftPunctuation(*(m_text + endp - 1))) {
 +               endp--; wrapPos--;
 +               CRLog::trace("up skip left punctuation %s, at index %d", LCSTR(lString16(m_text+endp, 1)), endp);
-+            } else if (endp > 1 && (isCJKPunctuation(*(m_text + endp)))) {
++            } else if (endp > 1 && isCJKPunctuation(*(m_text + endp))) {
 +                for (int epos = endp; epos>=start; epos++, downSkipCount++) {
 +                   if ( !isCJKPunctuation(*(m_text + epos)) ) break;
 +                   CRLog::trace("down skip punctuation %s, at index %d", LCSTR(lString16(m_text + epos, 1)), epos);

                     lastNormalWrap = i;
                 else if ( flags & LCHAR_DEPRECATED_WRAP_AFTER )
                     lastDeprecatedWrap = i;
@@ -1029,6 +1054,32 @@ public:
             }
             bool needReduceSpace = true; // todo: calculate whether space reducing required
             int endp = wrapPos+(lastMandatoryWrap<0 ? 1 : 0);

                 // create and add new word
                 formatted_word_t * word = lvtextAddFormattedWord(frmline);
                 int b;
@@ -811,7 +811,9 @@ public:
                         }
                         if ( word->flags & LTEXT_WORD_CAN_HYPH_BREAK_LINE_AFTER ) {
                             word->width -= font->getHyphenWidth(); // TODO: strange fix - need some other solution
-                        } else if ( lastc=='.' || lastc==',' || lastc=='!' || lastc==':'   || lastc==';' ) {
+                        } else if ( lastc=='.' || lastc==',' || lastc=='!' || lastc==':'   || lastc==';' ||
+                            lastc==L'。' || lastc==L'，' || lastc==L'！' || lastc==L'：' || lastc==L'；' ||
+                            lastc==L'”' || lastc==L'’' || lastc==L'」' || lastc==L'』' ) {
                             int w = font->getCharWidth(lastc);
                             TR("floating: %c w=%d", lastc, w);
                             word->width -= w;
@@ -869,6 +871,29 @@ public:
         return 0;
     }
 
