1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include <CoreFoundation/CoreFoundation.h>
11 void NS_GetComplexLineBreaks(const char16_t
* aText
, uint32_t aLength
,
12 uint8_t* aBreakBefore
) {
13 NS_ASSERTION(aText
, "aText shouldn't be null");
15 memset(aBreakBefore
, 0, aLength
* sizeof(uint8_t));
17 CFStringRef str
= ::CFStringCreateWithCharactersNoCopy(
18 kCFAllocatorDefault
, reinterpret_cast<const UniChar
*>(aText
), aLength
,
24 CFStringTokenizerRef st
= ::CFStringTokenizerCreate(
25 kCFAllocatorDefault
, str
, ::CFRangeMake(0, aLength
),
26 kCFStringTokenizerUnitLineBreak
, nullptr);
32 CFStringTokenizerTokenType tt
= ::CFStringTokenizerAdvanceToNextToken(st
);
33 while (tt
!= kCFStringTokenizerTokenNone
) {
34 CFRange r
= ::CFStringTokenizerGetCurrentTokenRange(st
);
35 if (r
.location
!= 0) { // Ignore leading edge
36 aBreakBefore
[r
.location
] = true;
38 tt
= CFStringTokenizerAdvanceToNextToken(st
);