Я понимаю, что прошло несколько лет, но я только что обнаружил, что есть базовая функция Foundation, которая предлагает точки переноса: CFStringGetHyphenationLocationBeforeIndex .Это работает только для нескольких языков, но похоже, что это может быть действительно полезно для проблемы узкой метки.
Обновление:
Вот пример кода.Это программа CLI, которая показывает, где переносить слово:
#include <Cocoa/Cocoa.h>
int main(int ac, char *av[])
{
@autoreleasepool {
if(ac < 2) {
fprintf(stderr, "usage: hyph word\n");
exit(1);
}
NSString *word = [NSString stringWithUTF8String: av[1]];
unsigned char hyspots[word.length];
memset(hyspots, 0, word.length);
CFRange range = CFRangeMake(0, word.length);
CFLocaleRef locale = CFLocaleCreate(NULL, CFSTR("en_US"));
for(int i = 0; i < word.length; i++) {
int x = CFStringGetHyphenationLocationBeforeIndex(
(CFStringRef) word, i, range,
0, locale, NULL);
if(x >= 0 && x < word.length)
hyspots[x] = 1;
}
for(int i = 0; i < word.length; i++) {
if(hyspots[i]) putchar('-');
printf("%s", [[word substringWithRange: NSMakeRange(i, 1)] UTF8String]);
}
putchar('\n');
}
exit(0);
}
Вот как это выглядит при сборке и запуске:
$ cc -o hyph hyph.m -framework Cocoa
$ hyph accessibility
ac-ces-si-bil-i-ty
$ hyph hypothesis
hy-poth-e-sis
Эти переносы точно соответствуют словарю OS X,Я использую это для решения проблемы узкой метки в iOS, и она хорошо работает для меня.