Skip to content

Commit 025c03b

Browse files
Added support for smaller then sign in text, without this being considered a tag starting bracket.
1 parent 3394b08 commit 025c03b

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
Consume();
@@ -146,6 +155,14 @@ private char PeekNextOriginChar()
146155
return originalText[consumedLength];
147156
}
148157

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

Assets/test/RichTextHelperTest.cs

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

0 commit comments

Comments
 (0)