/// ------------------------------------------------------------------------------------ /// <summary> /// Adds the specified character to the grid's list of displayed characters. This is /// called by the two public methods AddCharacter and AddCharacters. /// </summary> /// ------------------------------------------------------------------------------------ private void InternalAddCharacter(string chr, IWritingSystem ws) { // Keep track of those characters that are not control characters and for // which there are no representative glyphs in the font. if (Win32.AreCharGlyphsInFont(chr, Font)) { if (m_charsWithMissingGlyphs.Contains(chr)) { m_charsWithMissingGlyphs.Remove(chr); } } else if (!Icu.IsControl(chr[0])) { if (!m_charsWithMissingGlyphs.Contains(chr)) { m_charsWithMissingGlyphs.Add(chr); } } // If we're dealing with a type of space or control character, then figure out // display text that is slightly more readable than whatever glyph the font // contains for the character, which may not be a glyph at all. if ((Icu.IsSpace(chr[0]) || Icu.IsControl(chr[0])) && !m_specialCharStrings.ContainsKey(chr)) { m_specialCharStrings[chr] = GetSpecialCharDisplayText(chr); } Chars.Add(chr); }
private static void VerifyNewlyCreatedChars() { Icu.InitIcuDataDir(); // The commented out methods below use u_getIntPropertyValue(), which doesn't // work reliably with the limited number of data files that we modify. //Assert.IsTrue(Icu.IsAlphabetic(kChar1)); // now true //Assert.IsTrue(Icu.IsAlphabetic(kChar2)); // now true //Assert.IsFalse(Icu.IsAlphabetic(kChar3)); //Assert.IsFalse(Icu.IsAlphabetic(kChar4)); Assert.IsFalse(Icu.IsControl(kChar1)); Assert.IsFalse(Icu.IsControl(kChar2)); Assert.IsFalse(Icu.IsControl(kChar3)); Assert.IsFalse(Icu.IsControl(kChar4)); //Assert.IsFalse(Icu.IsDiacritic(kChar1)); //Assert.IsFalse(Icu.IsDiacritic(kChar2)); //Assert.IsFalse(Icu.IsDiacritic(kChar3)); //Assert.IsFalse(Icu.IsDiacritic(kChar4)); //Assert.IsFalse(Icu.IsIdeographic(kChar1)); //Assert.IsFalse(Icu.IsIdeographic(kChar2)); //Assert.IsFalse(Icu.IsIdeographic(kChar3)); //Assert.IsFalse(Icu.IsIdeographic(kChar4)); //Assert.IsFalse(Icu.IsNumeric(kChar1)); //Assert.IsFalse(Icu.IsNumeric(kChar2)); //Assert.IsFalse(Icu.IsNumeric(kChar3)); //Assert.IsTrue(Icu.IsNumeric(kChar4)); // now true Assert.IsFalse(Icu.IsPunct(kChar1)); Assert.IsFalse(Icu.IsPunct(kChar2)); Assert.IsTrue(Icu.IsPunct(kChar3)); // now true Assert.IsFalse(Icu.IsPunct(kChar4)); Assert.IsFalse(Icu.IsSpace(kChar1)); Assert.IsFalse(Icu.IsSpace(kChar2)); Assert.IsFalse(Icu.IsSpace(kChar3)); Assert.IsFalse(Icu.IsSpace(kChar4)); Assert.IsFalse(Icu.IsSymbol(kChar1)); Assert.IsFalse(Icu.IsSymbol(kChar2)); Assert.IsFalse(Icu.IsSymbol(kChar3)); Assert.IsFalse(Icu.IsSymbol(kChar4)); var cat = Icu.GetCharType(kChar1); Assert.AreEqual(Icu.UCharCategory.U_LOWERCASE_LETTER, cat); cat = Icu.GetCharType(kChar2); Assert.AreEqual(Icu.UCharCategory.U_UPPERCASE_LETTER, cat); cat = Icu.GetCharType(kChar3); Assert.AreEqual(Icu.UCharCategory.U_OTHER_PUNCTUATION, cat); cat = Icu.GetCharType(kChar4); Assert.AreEqual(Icu.UCharCategory.U_DECIMAL_DIGIT_NUMBER, cat); var decompositionType = Icu.GetDecompositionType(kChar1); Assert.AreEqual("[none]", decompositionType.Description); decompositionType = Icu.GetDecompositionType(kChar2); Assert.AreEqual("[none]", decompositionType.Description); decompositionType = Icu.GetDecompositionType(kChar3); Assert.AreEqual("[none]", decompositionType.Description); decompositionType = Icu.GetDecompositionType(kChar4); Assert.AreEqual("[none]", decompositionType.Description); var numericType = Icu.GetNumericType(kChar1); Assert.AreEqual("[none]", numericType.Description); numericType = Icu.GetNumericType(kChar2); Assert.AreEqual("[none]", numericType.Description); numericType = Icu.GetNumericType(kChar3); Assert.AreEqual("[none]", numericType.Description); // Current implementation (as of ICU50) is not overriding numeric type since we don't use it anywhere. // Enhance silmods.c in icu patch if needed. //numericType = Icu.GetNumericType(kChar4); //Assert.AreEqual("Decimal Digit", numericType.Description); // Current implementation (as of ICU50) is not overriding character names since we don't use them anywhere. // Enhance silmods.c in icu patch if needed. //var prettyName = Icu.GetPrettyICUCharName("\xE000"); //Assert.AreEqual("My Special Character", prettyName); //prettyName = Icu.GetPrettyICUCharName("\xE001"); //Assert.AreEqual("My Uppercase Character", prettyName); //prettyName = Icu.GetPrettyICUCharName(kChar3S); //Assert.AreEqual("New Punctuation Mark", prettyName); //var rawName = Icu.GetCharName(kChar4); // can't pass large character code as 16-bit char. //Assert.AreEqual("NEW DIGIT NINE", rawName); }
private static void VerifyNonexistentChars() { Icu.InitIcuDataDir(); Assert.IsFalse(Icu.IsAlphabetic(kChar1)); Assert.IsFalse(Icu.IsAlphabetic(kChar2)); Assert.IsFalse(Icu.IsAlphabetic(kChar3)); Assert.IsFalse(Icu.IsAlphabetic(kChar4)); Assert.IsFalse(Icu.IsControl(kChar1)); Assert.IsFalse(Icu.IsControl(kChar2)); Assert.IsFalse(Icu.IsControl(kChar3)); Assert.IsFalse(Icu.IsControl(kChar4)); Assert.IsFalse(Icu.IsDiacritic(kChar1)); Assert.IsFalse(Icu.IsDiacritic(kChar2)); Assert.IsFalse(Icu.IsDiacritic(kChar3)); Assert.IsFalse(Icu.IsDiacritic(kChar4)); Assert.IsFalse(Icu.IsIdeographic(kChar1)); Assert.IsFalse(Icu.IsIdeographic(kChar2)); Assert.IsFalse(Icu.IsIdeographic(kChar3)); Assert.IsFalse(Icu.IsIdeographic(kChar4)); Assert.IsFalse(Icu.IsNumeric(kChar1)); Assert.IsFalse(Icu.IsNumeric(kChar2)); Assert.IsFalse(Icu.IsNumeric(kChar3)); Assert.IsFalse(Icu.IsNumeric(kChar4)); Assert.IsFalse(Icu.IsPunct(kChar1)); Assert.IsFalse(Icu.IsPunct(kChar2)); Assert.IsFalse(Icu.IsPunct(kChar3)); Assert.IsFalse(Icu.IsPunct(kChar4)); Assert.IsFalse(Icu.IsSpace(kChar1)); Assert.IsFalse(Icu.IsSpace(kChar2)); Assert.IsFalse(Icu.IsSpace(kChar3)); Assert.IsFalse(Icu.IsSpace(kChar4)); Assert.IsFalse(Icu.IsSymbol(kChar1)); Assert.IsFalse(Icu.IsSymbol(kChar2)); Assert.IsFalse(Icu.IsSymbol(kChar3)); Assert.IsFalse(Icu.IsSymbol(kChar4)); Assert.AreEqual(Icu.UCharCategory.U_PRIVATE_USE_CHAR, Icu.GetCharType(kChar1)); Assert.AreEqual(Icu.UCharCategory.U_PRIVATE_USE_CHAR, Icu.GetCharType(kChar2)); Assert.AreEqual(Icu.UCharCategory.U_UNASSIGNED, Icu.GetCharType(kChar3)); Assert.AreEqual(Icu.UCharCategory.U_UNASSIGNED, Icu.GetCharType(kChar4)); var decompositionType = Icu.GetDecompositionType(kChar1); Assert.AreEqual("[none]", decompositionType.Description); decompositionType = Icu.GetDecompositionType(kChar2); Assert.AreEqual("[none]", decompositionType.Description); decompositionType = Icu.GetDecompositionType(kChar3); Assert.AreEqual("[none]", decompositionType.Description); decompositionType = Icu.GetDecompositionType(kChar4); Assert.AreEqual("[none]", decompositionType.Description); var numericType = Icu.GetNumericType(kChar1); Assert.AreEqual("[none]", numericType.Description); numericType = Icu.GetNumericType(kChar2); Assert.AreEqual("[none]", numericType.Description); numericType = Icu.GetNumericType(kChar3); Assert.AreEqual("[none]", numericType.Description); numericType = Icu.GetNumericType(kChar4); Assert.AreEqual("[none]", numericType.Description); var prettyName = Icu.GetPrettyICUCharName("\xE000"); Assert.IsNull(prettyName); prettyName = Icu.GetPrettyICUCharName("\xE001"); Assert.IsNull(prettyName); prettyName = Icu.GetPrettyICUCharName(kChar3S); Assert.IsNull(prettyName); prettyName = Icu.GetPrettyICUCharName("\xDDDDD"); Assert.IsNull(prettyName); }