Example #1
0
        public void LogicalRuns()
        {
            using (var bidi = new BiDi())
            {
                bidi.SetPara(ENGLISH_HEBREW_MIXED, BiDi.DEFAULT_LTR, null);

                Assert.AreEqual(3, bidi.CountRuns());

                var logicalMap = bidi.GetLogicalMap();
                Assert.AreEqual(ENGLISH_HEBREW_MIXED.Length, logicalMap.Length);
                Assert.AreEqual(HEBREW_SHORT.Length, logicalMap.Select((m, i) => (m, i)).Count(mi => mi.Item1 != mi.Item2));

                Assert.That(Enumerable.Range(0, ENGLISH_PART_1.Length).All(i => bidi.GetLogicalIndex(i) == i));
                Assert.That(Enumerable.Range(ENGLISH_PART_1.Length, HEBREW_SHORT.Length).All(i => bidi.GetLogicalIndex(i) == ENGLISH_PART_1.Length + HEBREW_SHORT.Length - i + ENGLISH_PART_1.Length - 1));
                Assert.That(Enumerable.Range(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, ENGLISH_PART_2.Length).All(i => bidi.GetLogicalIndex(i) == i));

                var limit = bidi.GetLogicalRun(3, out byte runlevel);
                Assert.AreEqual(ENGLISH_PART_1.Length, limit);
                Assert.AreEqual(0, runlevel);

                limit = bidi.GetLogicalRun(ENGLISH_PART_1.Length + 3, out runlevel);
                Assert.AreEqual(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, limit);
                Assert.AreEqual(1, runlevel);

                limit = bidi.GetLogicalRun(ENGLISH_PART_1.Length + HEBREW_SHORT.Length + 3, out runlevel);
                Assert.AreEqual(ENGLISH_HEBREW_MIXED.Length, limit);
                Assert.AreEqual(0, runlevel);

                bidi.SetPara(ENGLISH_LONG, BiDi.DEFAULT_LTR, null);
                Assert.AreEqual(1, bidi.CountRuns());

                bidi.SetPara(HEBREW_LONG, BiDi.DEFAULT_LTR, null);
                Assert.AreEqual(1, bidi.CountRuns());
            }
        }
Example #2
0
        public void VisualRuns()
        {
            using (var bidi = new BiDi())
            {
                bidi.SetPara(ENGLISH_HEBREW_MIXED, BiDi.DEFAULT_LTR, null);

                Assert.AreEqual(3, bidi.CountRuns());

                var visualMap = bidi.GetVisualMap();
                Assert.AreEqual(ENGLISH_HEBREW_MIXED.Length, visualMap.Length);
                Assert.AreEqual(HEBREW_SHORT.Length, visualMap.Select((m, i) => (m, i)).Count(mi => mi.Item1 != mi.Item2));

                Assert.That(Enumerable.Range(0, ENGLISH_PART_1.Length).All(i => bidi.GetVisualIndex(i) == i));
                Assert.That(Enumerable.Range(ENGLISH_PART_1.Length, HEBREW_SHORT.Length).All(i => bidi.GetVisualIndex(i) == ENGLISH_PART_1.Length + HEBREW_SHORT.Length - i + ENGLISH_PART_1.Length - 1));
                Assert.That(Enumerable.Range(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, ENGLISH_PART_2.Length).All(i => bidi.GetVisualIndex(i) == i));

                var direction = bidi.GetVisualRun(0, out int start, out int len);
                Assert.AreEqual(0, start);
                Assert.AreEqual(ENGLISH_PART_1.Length, len);
                Assert.AreEqual(direction, BiDi.BiDiDirection.LTR);

                direction = bidi.GetVisualRun(1, out start, out len);
                Assert.AreEqual(ENGLISH_PART_1.Length, start);
                Assert.AreEqual(HEBREW_SHORT.Length, len);
                Assert.AreEqual(direction, BiDi.BiDiDirection.RTL);

                direction = bidi.GetVisualRun(2, out start, out len);
                Assert.AreEqual(ENGLISH_PART_1.Length + HEBREW_SHORT.Length, start);
                Assert.AreEqual(ENGLISH_PART_2.Length, len);
                Assert.AreEqual(direction, BiDi.BiDiDirection.LTR);
            }
        }