while (nStartPos > 0 && nStartPos < Text.getLength())
{ // Apply hanging punctuation if (bOptions.allowPunctuationOutsideMargin
&& hangingCharacters.indexOf(Text[nStartPos]) != -1)
{ // The current character is allowed to overhang the margin.
sal_Int32 nNextPos = nStartPos;
Text.iterateCodePoints(&nNextPos);
// tdf#130592: The original code always allowed a line break after hanging // punctuation, even if it's not a valid ICU break. This refactor preserves the // original behavior in order to avoid regressing tdf#58604. if (nNextPos >= Text.getLength() || !fnIsForbiddenBreak(nNextPos))
{
LineBreakResults stBreak;
stBreak.breakIndex = nNextPos;
stBreak.breakType = BreakType::HANGINGPUNCTUATION; return stBreak;
}
}
const sal_Int32 nOldStartPos = nStartPos;
// Apply forbidden rules if (bOptions.applyForbiddenRules)
{ while (fnIsForbiddenBreak(nStartPos))
{
Text.iterateCodePoints(&nStartPos, -1);
}
}
// Prevent cutting Korean words in the middle if (nOldStartPos == nStartPos && isHangul(Text[nStartPos]))
{ while (nStartPos >= 0 && isHangul(Text[nStartPos]))
--nStartPos;
// beginning of the last Korean word. if (nStartPos < nOldStartPos)
++nStartPos;
if (nStartPos == 0)
nStartPos = nOldStartPos;
}
// tdf#130592: Fall back to the ICU breakiterator after applying CJK-specific rules auto stBreak = BreakIterator_Unicode::getLineBreak(Text, nStartPos, rLocale, nMinBreakPos,
hOptions, bOptions); if (stBreak.breakIndex == nStartPos)
{ // Located break is valid under both iterators return stBreak;
}
// CJK break is not valid; restart search from the next candidate
sal_Int32 nNextCandidate = stBreak.breakIndex; while (bOptions.allowPunctuationOutsideMargin && nStartPos > stBreak.breakIndex)
{ if (hangingCharacters.indexOf(Text[nStartPos]) != -1)
{
nNextCandidate = nStartPos; break;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.