Skip to content
Snippets Groups Projects
Commit d1d66e28 authored by George Nachman's avatar George Nachman
Browse files

Use NFC form when possible. Fixes issue 2813

parent c5e85470
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -220,8 +220,10 @@ UTF32Char CharToLongChar(unichar code, BOOL isComplex);
// returned.
int AppendToComplexChar(int key, unichar codePoint);
 
// Create a new complex char from two code points. A key is returned.
int BeginComplexChar(unichar initialCodePoint, unichar combiningChar);
// Takes a non-complex character and adds a combining mark to it. It may or may not
// become complex as a result, depending on whether there is an NFC form for the
// new composite.
void BeginComplexChar(screen_char_t *screenChar, unichar combiningChar);
 
// Create or lookup & return the code for a complex char.
int GetOrSetComplexChar(NSString* str);
Loading
Loading
Loading
Loading
@@ -149,16 +149,25 @@ int AppendToComplexChar(int key, unichar codePoint)
return GetOrSetComplexChar(temp);
}
 
int BeginComplexChar(unichar initialCodePoint, unichar combiningChar)
void BeginComplexChar(screen_char_t *screenChar, unichar combiningChar)
{
unichar initialCodePoint = screenChar->code;
if (initialCodePoint == UNICODE_REPLACEMENT_CHAR) {
return UNICODE_REPLACEMENT_CHAR;
return;
}
 
unichar temp[2];
temp[0] = initialCodePoint;
temp[1] = combiningChar;
return GetOrSetComplexChar([NSString stringWithCharacters:temp length:2]);
// See if it makes a single code in NFC.
NSString *nfc = [[NSString stringWithCharacters:temp length:2] precomposedStringWithCanonicalMapping];
if (nfc.length == 1) {
screenChar->code = [nfc characterAtIndex:0];
} else {
screenChar->code = GetOrSetComplexChar([NSString stringWithCharacters:temp length:2]);
screenChar->complexChar = YES;
}
}
 
BOOL StringContainsCombiningMark(NSString *s)
Loading
Loading
Loading
Loading
@@ -205,8 +205,7 @@ void StringToScreenChars(NSString *s,
// built by surrogates.
buf[j].code = AppendToComplexChar(buf[j].code, sc[i]);
} else {
buf[j].code = BeginComplexChar(buf[j].code, sc[i]);
buf[j].complexChar = YES;
BeginComplexChar(buf + j, sc[i]);
}
if (IsLowSurrogate(sc[i])) {
NSString* str = ComplexCharToStr(buf[j].code);
Loading
Loading
@@ -2702,9 +2701,7 @@ void DumpBuf(screen_char_t* p, int n) {
theLine[cx].code = AppendToComplexChar(theLine[cx].code,
combiningChar);
} else {
theLine[cx].code = BeginComplexChar(theLine[cx].code,
combiningChar);
theLine[cx].complexChar = YES;
BeginComplexChar(theLine + cx, combiningChar);
}
return YES;
}
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment