Beispiel #1
0
        public void RunRangeChecks(TestRange[] testRanges, CheckValue[] checkValues)
        {
            uint       initialValue = testRanges[0].Value;
            const uint errorValue   = 0x0bad;

            var builder = new UnicodeTrieBuilder(initialValue, errorValue);

            for (int i = 1; i < testRanges.Length; i++)
            {
                TestRange r = testRanges[i];
                builder.SetRange(r.Start, r.End - 1, r.Value, r.Overwrite);
            }

            UnicodeTrie frozen = builder.Freeze();

            int cp = 0;

            for (int i = 0; i < checkValues.Length; i++)
            {
                CheckValue v = checkValues[i];

                while (cp < v.CodePoint)
                {
                    Assert.Equal(v.Value, builder.Get(cp));
                    Assert.Equal(v.Value, frozen.Get(cp));
                    cp++;
                }
            }
        }
Beispiel #2
0
        public void SetRangeCompacted()
        {
            var builder = new UnicodeTrieBuilder(10, 666);

            builder.SetRange(13, 6666, 7788, false);
            builder.SetRange(6000, 7000, 9900, true);

            UnicodeTrie trie = builder.Freeze();

            Assert.Equal(10u, trie.Get(12));
            Assert.Equal(7788u, trie.Get(13));
            Assert.Equal(7788u, trie.Get(5999));
            Assert.Equal(9900u, trie.Get(6000));
            Assert.Equal(9900u, trie.Get(7000));
            Assert.Equal(10u, trie.Get(7001));
            Assert.Equal(666u, trie.Get(0x110000));
        }
Beispiel #3
0
        public void SetRangeSerialized()
        {
            var builder = new UnicodeTrieBuilder(10, 666);

            builder.SetRange(13, 6666, 7788, false);
            builder.SetRange(6000, 7000, 9900, true);

            var data = builder.ToBuffer();
            var trie = new UnicodeTrie(data);

            Assert.Equal(10u, trie.Get(12));
            Assert.Equal(7788u, trie.Get(13));
            Assert.Equal(7788u, trie.Get(5999));
            Assert.Equal(9900u, trie.Get(6000));
            Assert.Equal(9900u, trie.Get(7000));
            Assert.Equal(10u, trie.Get(7001));
            Assert.Equal(666u, trie.Get(0x110000));
        }
Beispiel #4
0
        public void SetRangeSerialized()
        {
            var builder = new UnicodeTrieBuilder(10, 666);

            builder.SetRange(13, 6666, 7788, false);
            builder.SetRange(6000, 7000, 9900, true);

            using var ms = new MemoryStream();
            builder.Freeze().Save(ms);
            ms.Position = 0;

            var trie = new UnicodeTrie(ms);

            Assert.Equal(10u, trie.Get(12));
            Assert.Equal(7788u, trie.Get(13));
            Assert.Equal(7788u, trie.Get(5999));
            Assert.Equal(9900u, trie.Get(6000));
            Assert.Equal(9900u, trie.Get(7000));
            Assert.Equal(10u, trie.Get(7001));
            Assert.Equal(666u, trie.Get(0x110000));
        }
Beispiel #5
0
 /// <summary>
 /// Gets the grapheme break type for the Unicode codepoint.
 /// </summary>
 /// <param name="codepoint">The codepoint in question.</param>
 /// <returns>The code point's grapheme break type.</returns>
 public static GraphemeBreakClass GetGraphemeClusterBreak(int codepoint)
 {
     return((GraphemeBreakClass)s_graphemeBreakTrie.Get(codepoint));
 }
Beispiel #6
0
        /// <summary>
        /// Gets the <see cref="GeneralCategory"/> for a Unicode codepoint.
        /// </summary>
        /// <param name="codepoint">The codepoint in question.</param>
        /// <returns>The code point's general category.</returns>
        public static GeneralCategory GetGeneralCategory(int codepoint)
        {
            var value = s_unicodeDataTrie.Get(codepoint);

            return((GeneralCategory)(value & CATEGORY_MASK));
        }
 /// <summary>
 /// Get the line break class for a Unicode Code Point
 /// </summary>
 /// <param name="codePoint">The code point in question</param>
 /// <returns>The code point's line break class</returns>
 public static LineBreakClass LineBreakClass(int codePoint)
 {
     return((LineBreakClass)_classesTrie.Get(codePoint));
 }
 /// <summary>
 /// Get the directionality of a Unicode Code Point
 /// </summary>
 /// <param name="codePoint">The code point in question</param>
 /// <returns>The code point's directionality</returns>
 public static Directionality Directionality(int codePoint)
 {
     return((Directionality)(_bidiTrie.Get(codePoint) >> 24));
 }
Beispiel #9
0
 /// <summary>
 /// Get the line break class for a Unicode Code Point
 /// </summary>
 /// <param name="codePoint">The code point in question</param>
 /// <returns>The code point's line break class</returns>
 public static WordBoundaryClass BoundaryGroup(int codePoint)
 {
     return((WordBoundaryClass)_boundaryTrie.Get(codePoint));
 }
Beispiel #10
0
 /// <summary>
 /// Get the grapheme cluster class for a Unicode Code Point
 /// </summary>
 /// <param name="codePoint">The code point in question</param>
 /// <returns>The code point's grapheme cluster class</returns>
 public static GraphemeClusterClass GraphemeClusterClass(int codePoint)
 {
     return((GraphemeClusterClass)_graphemeTrie.Get(codePoint));
 }