\value NotAtBoundary The boundary finder is not at a boundary position.
\value StartWord The boundary finder is at the start of a word.
\value EndWord The boundary finder is at the end of a word.
+ \value SoftHyphen The boundary finder is at the soft hyphen
+ (can occur for a Line boundary type only).
*/
/*!
break;
case Line:
Q_ASSERT(pos);
- while (pos < length && d->attributes[pos-1].lineBreakType < HB_Break)
+ while (pos < length && d->attributes[pos-1].lineBreakType == HB_NoBreak)
++pos;
break;
}
--pos;
break;
case Line:
- while (pos > 0 && d->attributes[pos-1].lineBreakType < HB_Break)
+ while (pos > 0 && d->attributes[pos-1].lineBreakType == HB_NoBreak)
--pos;
break;
}
case Word:
return d->attributes[pos].wordBoundary;
case Line:
- return (pos > 0) ? d->attributes[pos-1].lineBreakType >= HB_Break : true;
+ return (pos > 0) ? d->attributes[pos-1].lineBreakType != HB_NoBreak : true;
case Sentence:
return d->attributes[pos].sentenceBoundary;
}
return NotAtBoundary;
if (! isAtBoundary())
return NotAtBoundary;
+ if (t == Line && pos < length && d->attributes[pos-1].lineBreakType == HB_SoftHyphen)
+ return SoftHyphen;
if (pos == 0) {
if (d->attributes[pos].whiteSpace)
return NotAtBoundary;
void lineBoundaries_manual();
void fastConstructor();
+ void isAtSoftHyphen_data();
+ void isAtSoftHyphen();
void thaiLineBreak();
};
QChar s[] = { 0x0061, 0x00AD, 0x0062, 0x0009, 0x0063, 0x0064 };
QString testString(s, sizeof(s)/sizeof(s[0]));
QList<int> expectedBreakPositions;
- expectedBreakPositions << 0 << 4 << 6;
+ expectedBreakPositions << 0 << 2 << 4 << 6;
QTest::newRow("x(AL)x(BA)+(AL)x(BA)+(AL)x(AL)+") << testString << expectedBreakPositions;
}
QCOMPARE(finder.boundaryReasons(), QTextBoundaryFinder::NotAtBoundary);
}
+void tst_QTextBoundaryFinder::isAtSoftHyphen_data()
+{
+ QTest::addColumn<QString>("testString");
+ QTest::addColumn<QList<int> >("expectedBreakPositions");
+
+ QString testString = QString::fromUtf8("I a-m break-able");
+ testString.replace(QLatin1Char('-'), QChar(0x00AD));
+ QList<int> expectedBreakPositions;
+ expectedBreakPositions << 0 << 2 << 4 << 6 << 12 << 16;
+ QTest::newRow("Soft Hyphen") << testString << expectedBreakPositions;
+}
+
+void tst_QTextBoundaryFinder::isAtSoftHyphen()
+{
+ QFETCH(QString, testString);
+ QFETCH(QList<int>, expectedBreakPositions);
+
+ doTestData(testString, expectedBreakPositions, QTextBoundaryFinder::Line);
+
+ QTextBoundaryFinder boundaryFinder(QTextBoundaryFinder::Line, testString);
+ for (int i = 0; (i = testString.indexOf(QChar(0x00AD), i)) != -1; ++i) {
+ QVERIFY(expectedBreakPositions.contains(i + 1));
+ boundaryFinder.setPosition(i + 1);
+ QVERIFY(boundaryFinder.isAtBoundary());
+ QVERIFY(boundaryFinder.boundaryReasons() == QTextBoundaryFinder::SoftHyphen);
+ }
+}
+
#include <qlibrary.h>
#define LIBTHAI_MAJOR 0