Skip to content

Commit 0364097

Browse files
authored
Merge pull request #1 from Bollebips/feature/support_smaller_then_sign
Support for smaller then sign
2 parents fc71bb0 + 025c03b commit 0364097

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

Assets/RichTextHelper/RichTextHelper.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1818
// DEALINGS IN THE SOFTWARE.
1919

20+
using System;
2021
using System.Collections.Generic;
2122
using UnityEngine;
2223

@@ -68,6 +69,8 @@ public class RichTextSubStringMaker
6869
private Stack<RichTextTag> tagStack;
6970
private int consumedLength;
7071

72+
private static readonly char[] tagBrackets = new char[2] { '<', '>' };
73+
7174
public RichTextSubStringMaker(string original)
7275
{
7376
this.originalText = original;
@@ -111,10 +114,16 @@ public bool Consume()
111114
{
112115
ConsumeEndTag();
113116
}
114-
else
117+
else if (IsNextTagBracketClosing(consumedLength + 1)) //Only consume the start tag if a tag closing bracket (>) was found.
115118
{
116119
ConsumeStartTag();
117120
}
121+
else
122+
{
123+
ConsumeRawChar();
124+
return true;
125+
}
126+
118127
if (IsConsumable())
119128
{
120129
return Consume();
@@ -145,6 +154,14 @@ private char PeekNextOriginChar()
145154
return originalText[consumedLength];
146155
}
147156

157+
//Returns if the first tag bracket found in the string is '>', as opposed to '<'
158+
private bool IsNextTagBracketClosing(int charIndexToStartSearch = 0)
159+
{
160+
int bracketIndex = originalText.IndexOfAny(tagBrackets, charIndexToStartSearch);
161+
162+
return bracketIndex != -1 && originalText[bracketIndex] == '>';
163+
}
164+
148165
private void ConsumeStartTag()
149166
{
150167
Debug.Assert(PeekNextOriginChar() == '<');

Assets/test/RichTextHelperTest.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,32 @@ public void CloseTagIsLast()
6767
Assert.AreEqual(sampleTagText.RichTextSubString(4), "<color=#000>a<i>b<b>c</b>d</i></color>");
6868
Assert.AreEqual(sampleTagText.RichTextLength(), 4);
6969
}
70+
71+
[Test]
72+
public void SmallerThenSignWithoutTag()
73+
{
74+
var sampleTagText = "<--<color=#000>l</color><i>r</i>-->";
75+
Assert.AreEqual(sampleTagText.RichTextSubString(8), sampleTagText);
76+
Assert.AreEqual(sampleTagText.RichTextSubString(1), "<");
77+
Assert.AreEqual(sampleTagText.RichTextSubString(2), "<-");
78+
Assert.AreEqual(sampleTagText.RichTextSubString(3), "<--");
79+
Assert.AreEqual(sampleTagText.RichTextSubString(4), "<--<color=#000>l</color>");
80+
Assert.AreEqual(sampleTagText.RichTextSubString(5), "<--<color=#000>l</color><i>r</i>");
81+
Assert.AreEqual(sampleTagText.RichTextSubString(6), "<--<color=#000>l</color><i>r</i>-");
82+
Assert.AreEqual(sampleTagText.RichTextSubString(7), "<--<color=#000>l</color><i>r</i>--");
83+
84+
var sampleTagText2 = "<a<b<c<color=#000><</color><i>><</i>><<";
85+
Assert.AreEqual(sampleTagText2.RichTextSubString(12), sampleTagText2);
86+
Assert.AreEqual(sampleTagText2.RichTextSubString(1), "<");
87+
Assert.AreEqual(sampleTagText2.RichTextSubString(2), "<a");
88+
Assert.AreEqual(sampleTagText2.RichTextSubString(3), "<a<");
89+
Assert.AreEqual(sampleTagText2.RichTextSubString(4), "<a<b");
90+
Assert.AreEqual(sampleTagText2.RichTextSubString(5), "<a<b<");
91+
Assert.AreEqual(sampleTagText2.RichTextSubString(6), "<a<b<c");
92+
Assert.AreEqual(sampleTagText2.RichTextSubString(7), "<a<b<c<color=#000><</color>");
93+
Assert.AreEqual(sampleTagText2.RichTextSubString(8), "<a<b<c<color=#000><</color><i>></i>");
94+
Assert.AreEqual(sampleTagText2.RichTextSubString(9), "<a<b<c<color=#000><</color><i>><</i>");
95+
Assert.AreEqual(sampleTagText2.RichTextSubString(10), "<a<b<c<color=#000><</color><i>><</i>>");
96+
Assert.AreEqual(sampleTagText2.RichTextSubString(11), "<a<b<c<color=#000><</color><i>><</i>><");
97+
}
7098
}

0 commit comments

Comments
 (0)