Ejemplo n.º 1
0
        /// <summary>
        ///     Fixes the provided string
        /// </summary>
        /// <param name="input">Text to fix</param>
        /// <param name="output">Fixed text</param>
        /// <param name="fixTextTags"></param>
        /// <param name="preserveNumbers"></param>
        /// <param name="farsi"></param>
        /// <returns>Fixed text</returns>
        public static void FixRTL(
            string input,
            FastStringBuilder output,
            bool farsi           = true,
            bool fixTextTags     = true,
            bool preserveNumbers = false)
        {
            inputBuilder.SetValue(input);

            TashkeelFixer.RemoveTashkeel(inputBuilder);

            // The shape of the letters in shapeFixedLetters is fixed according to their position in word. But the flow of the text is not fixed.
            GlyphFixer.Fix(inputBuilder, glyphFixerOutput, preserveNumbers, farsi, fixTextTags);

            //Restore tashkeel to their places.
            TashkeelFixer.RestoreTashkeel(glyphFixerOutput);

            // Fix flow of the text and put the result in FinalLetters field
            LigatureFixer.Fix(glyphFixerOutput, output, farsi, fixTextTags, preserveNumbers);
            if (fixTextTags)
            {
                RichTextFixer.Fix(output);
            }
            inputBuilder.Clear();
        }
Ejemplo n.º 2
0
        public void Fix_Reverses_OpenTag_ThatDoesntHaveClosingTag()
        {
            // Arrange
            var text = new FastStringBuilder("text <open> text");

            // Act
            RichTextFixer.Fix(text);

            // Assert
            Assert.AreEqual("text >nepo< text", text.ToString());
        }
Ejemplo n.º 3
0
        public void Fix_Reverses_SimpleOpenAndClosingTagWithValue()
        {
            // Arrange
            var text = new FastStringBuilder("text </open> text <open=134>");

            // Act
            RichTextFixer.Fix(text);

            // Assert
            Assert.AreEqual("text >nepo/< text >431=nepo<", text.ToString());
        }
Ejemplo n.º 4
0
        public void Fix_Reverses_SelfContainedTags()
        {
            // Arrange
            var text = new FastStringBuilder("text <self-contained/> text");

            // Act
            RichTextFixer.Fix(text);

            // Assert
            Assert.AreEqual("text >/deniatnoc-fles< text", text.ToString());
        }
Ejemplo n.º 5
0
        public void FindTag_FindsSelfContainedTagWithValue()
        {
            // Arrange
            var text = new FastStringBuilder("text <opening=15m/> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var start, out var end, out int type, out _);

            // Assert
            Assert.AreEqual(3, type);
            Assert.AreEqual(5, start);
            Assert.AreEqual(18, end);
        }
Ejemplo n.º 6
0
        public void FindTag_FindsSelfContainedTagWithValue()
        {
            // Arrange
            var text = new FastStringBuilder("text <opening=15m/> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var tag);

            // Assert
            Assert.AreEqual(RichTextFixer.TagType.SelfContained, tag.Type);
            Assert.AreEqual(5, tag.Start);
            Assert.AreEqual(18, tag.End);
        }
Ejemplo n.º 7
0
        public void FindTag_FindsSimpleOpeningTag()
        {
            // Arrange
            var text = new FastStringBuilder("text <opening> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var tag);

            // Assert
            Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type);
            Assert.AreEqual(5, tag.Start);
            Assert.AreEqual(13, tag.End);
        }
Ejemplo n.º 8
0
        public void FindTag_SpriteWithIdTag()
        {
            // Arrange
            var text = new FastStringBuilder("test <sprite=6> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var tag);

            // Assert
            Assert.AreEqual(5, tag.Start);
            Assert.AreEqual(14, tag.End);
            Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type);
        }
Ejemplo n.º 9
0
        public void FindTag_IgnoreTagStartingWithSpace()
        {
            // Arrange
            var text = new FastStringBuilder("test < my invalid tag> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var tag);

            // Assert
            Assert.AreEqual(0, tag.Start);
            Assert.AreEqual(0, tag.End);
            Assert.AreEqual(RichTextFixer.TagType.None, tag.Type);
        }
Ejemplo n.º 10
0
        public void FindTag_IgnoreTagWithoutClosingChar()
        {
            // Arrange
            var text = new FastStringBuilder("test <my invalid tag<b> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var tag);

            // Assert
            Assert.AreEqual(20, tag.Start);
            Assert.AreEqual(22, tag.End);
            Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type);
        }
Ejemplo n.º 11
0
        public void FindTag_OpeningTagWithAttributes()
        {
            // Arrange
            var text = new FastStringBuilder("test <mytag=4 name=\"asdf\" id=5> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var tag);

            // Assert
            Assert.AreEqual(5, tag.Start);
            Assert.AreEqual(30, tag.End);
            Assert.AreEqual(RichTextFixer.TagType.Opening, tag.Type);
        }
Ejemplo n.º 12
0
        public void FindTag_ProducesTheSameHash_ForSameOpeningAndClosingTag()
        {
            // Arrange
            var text1 = new FastStringBuilder("text <tag=15m/> text");
            var text2 = new FastStringBuilder("text </tag> text");

            // Act
            RichTextFixer.FindTag(text1, 0, out _, out _, out _, out int hash1);
            RichTextFixer.FindTag(text2, 0, out _, out _, out _, out int hash2);

            // Assert
            Assert.AreEqual(hash1, hash2);
        }
Ejemplo n.º 13
0
        public void FindTag_FindsSimpleOpeningTag()
        {
            // Arrange
            var text = new FastStringBuilder("text <opening> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var start, out var end, out int type, out _);

            // Assert
            Assert.AreEqual(1, type);
            Assert.AreEqual(5, start);
            Assert.AreEqual(13, end);
        }
Ejemplo n.º 14
0
        public void FindTag_ProducesTheSameHash_ForSelfContainedTagsWithDifferentValues()
        {
            // Arrange
            var text1 = new FastStringBuilder("text <opening=15m/> text");
            var text2 = new FastStringBuilder("text <opening=20d/> text");

            // Act
            RichTextFixer.FindTag(text1, 0, out _, out _, out _, out int hash1);
            RichTextFixer.FindTag(text2, 0, out _, out _, out _, out int hash2);

            // Assert
            Assert.AreEqual(hash1, hash2);
        }
Ejemplo n.º 15
0
        public void FindTag_ProducesTheSameHash_ForOpeningTagsWithDifferentValues()
        {
            // Arrange
            var text1 = new FastStringBuilder("text <opening=12m> text");
            var text2 = new FastStringBuilder("text <opening=18s> text");

            // Act
            RichTextFixer.FindTag(text1, 0, out _, out _, out _, out var hashCode1);
            RichTextFixer.FindTag(text2, 0, out _, out _, out _, out var hashCode2);

            // Assert
            Assert.AreEqual(hashCode1, hashCode2);
        }
Ejemplo n.º 16
0
        public void FindTag_FindsOpeningTagWithValue()
        {
            // Arrange
            var text = new FastStringBuilder("text <opening=12m> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var start, out var end, out var type, out _);

            // Assert
            Assert.AreEqual(1, type);
            Assert.AreEqual(5, start);
            Assert.AreEqual(17, end);
        }
Ejemplo n.º 17
0
        public void FindTag_DoesntFindsTagWithSpaceInside()
        {
            // Arrange
            var text = new FastStringBuilder("text <ope ning> text");

            // Act
            RichTextFixer.FindTag(text, 0, out var start, out var end, out int type, out _);

            // Assert
            Assert.AreEqual(0, type);
            Assert.AreEqual(0, start);
            Assert.AreEqual(0, end);
        }
Ejemplo n.º 18
0
        public void FindTag_StartFromTheProvidedStartPosition()
        {
            // Arrange
            var text = new FastStringBuilder(" <tag> text");

            // Act
            RichTextFixer.FindTag(text, 6, out var tag);

            // Assert
            Assert.AreEqual(0, tag.Start);
            Assert.AreEqual(0, tag.End);
            Assert.AreEqual(RichTextFixer.TagType.None, tag.Type);
            Assert.AreEqual(0, tag.HashCode);
        }
Ejemplo n.º 19
0
        public void FindTag_StartFromTheProvidedStartPosition()
        {
            // Arrange
            var text = new FastStringBuilder(" <tag> text");

            // Act
            RichTextFixer.FindTag(text, 6, out var start, out var end, out int type, out int hashCode);

            // Assert
            Assert.AreEqual(0, start);
            Assert.AreEqual(0, end);
            Assert.AreEqual(0, type);
            Assert.AreEqual(0, hashCode);
        }
Ejemplo n.º 20
0
        public void FindTag_ReturnsZero_WhenNoTagIsFound()
        {
            // Arrange
            var text = new FastStringBuilder("text");

            // Act
            RichTextFixer.FindTag(text, 0, out var start, out var end, out int type, out int hashCode);

            // Assert
            Assert.AreEqual(0, start);
            Assert.AreEqual(0, end);
            Assert.AreEqual(0, type);
            Assert.AreEqual(0, hashCode);
        }
Ejemplo n.º 21
0
        public void FindTag_ReturnsZero_WhenNoTagIsFound()
        {
            // Arrange
            var text = new FastStringBuilder("text");

            // Act
            RichTextFixer.FindTag(text, 0, out var tag);

            // Assert
            Assert.AreEqual(0, tag.Start);
            Assert.AreEqual(0, tag.End);
            Assert.AreEqual(RichTextFixer.TagType.None, tag.Type);
            Assert.AreEqual(0, tag.HashCode);
        }