void NS_GetComplexLineBreaks(const PRUnichar* aText, PRUint32 aLength, PRUint8* aBreakBefore) { NS_ASSERTION(aText, "aText shouldn't be null"); TextBreakLocatorRef breakLocator; memset(aBreakBefore, false, aLength * sizeof(PRUint8)); OSStatus status = UCCreateTextBreakLocator(NULL, 0, kUCTextBreakLineMask, &breakLocator); if (status != noErr) return; for (UniCharArrayOffset position = 0; position < aLength;) { UniCharArrayOffset offset; status = UCFindTextBreak(breakLocator, kUCTextBreakLineMask, position == 0 ? kUCTextBreakLeadingEdgeMask : (kUCTextBreakLeadingEdgeMask | kUCTextBreakIterateMask), aText, aLength, position, &offset); if (status != noErr) break; aBreakBefore[offset] = true; position = offset; } UCDisposeTextBreakLocator(&breakLocator); }
void createMACBrkIt() { OSStatus status = noErr; LocaleRef lref; status = LocaleRefFromLocaleString(opt_locale, &lref); status = UCCreateTextBreakLocator(lref, 0, kUCTextBreakAllMask, (TextBreakLocatorRef*)&breakRef); if(opt_char == TRUE) { macBreakType = kUCTextBreakClusterMask; } else if(opt_word == TRUE) { macBreakType = kUCTextBreakWordMask; } else if(opt_line == TRUE) { macBreakType = kUCTextBreakLineMask; } else if(opt_sentence == TRUE) { // error // brkit = BreakIterator::createSentenceInstance(opt_locale, status); } else { // default is character iterator macBreakType = kUCTextBreakClusterMask; } }
static inline TextBreakLocatorRef lineBreakLocator() { TextBreakLocatorRef locator = 0; UCCreateTextBreakLocator(0, 0, kUCTextBreakLineMask, &locator); return locator; }