本文整理汇总了C#中StripableText类的典型用法代码示例。如果您正苦于以下问题:C# StripableText类的具体用法?C# StripableText怎么用?C# StripableText使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
StripableText类属于命名空间,在下文中一共展示了StripableText类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: StripableTextFontDontTouch
public void StripableTextFontDontTouch()
{
var st = new StripableText("{MAN} Hi, how are you today!");
Assert.AreEqual(st.Pre, "");
Assert.AreEqual(st.Post, "!");
Assert.AreEqual(st.StrippedText, "{MAN} Hi, how are you today");
}
示例2: StripableOnlyPre3
public void StripableOnlyPre3()
{
var st = new StripableText("<i>");
Assert.AreEqual(st.Pre, "<i>");
Assert.AreEqual(st.Post, "");
Assert.AreEqual(st.StrippedText, "");
}
示例3: StripableTextFont
public void StripableTextFont()
{
var st = new StripableText("<font color=\"red\">Hi!</font>");
Assert.AreEqual(st.Pre, "<font color=\"red\">");
Assert.AreEqual(st.Post, "!</font>");
Assert.AreEqual(st.StrippedText, "Hi");
}
示例4: StripableTextItalic2
public void StripableTextItalic2()
{
var st = new StripableText("<i>O</i>");
Assert.AreEqual(st.Pre, "<i>");
Assert.AreEqual(st.Post, "</i>");
Assert.AreEqual(st.StrippedText, "O");
}
示例5: StripableTextItalic3
public void StripableTextItalic3()
{
var st = new StripableText("<i>Hi!");
Assert.AreEqual(st.Pre, "<i>");
Assert.AreEqual(st.Post, "!");
Assert.AreEqual(st.StrippedText, "Hi");
}
示例6: StripableTextAss
public void StripableTextAss()
{
var st = new StripableText("{\\an9}Hi!");
Assert.AreEqual(st.Pre, "{\\an9}");
Assert.AreEqual(st.Post, "!");
Assert.AreEqual(st.StrippedText, "Hi");
}
示例7: Fix
public void Fix(Subtitle subtitle, IFixCallbacks callbacks)
{
var language = Configuration.Settings.Language.FixCommonErrors;
string fixAction = language.StartWithUppercaseLetterAfterPeriodInsideParagraph;
int noOfFixes = 0;
for (int i = 0; i < subtitle.Paragraphs.Count; i++)
{
Paragraph p = subtitle.Paragraphs[i];
string oldText = p.Text;
if (p.Text.Length > 3 && callbacks.AllowFix(p, fixAction))
{
var st = new StripableText(p.Text);
string text = st.StrippedText;
int start = text.IndexOfAny(ExpectedChars);
while (start > 0 && start < text.Length)
{
char charAtPosition = text[start];
// Allow fixing lowercase letter after recursive ??? or !!!.
if (charAtPosition != '.') // Dot is not include 'cause I don't capitalize word after the ellipses (...), right?
{
while (start + 1 < text.Length && text[start + 1] == charAtPosition)
{
start++;
}
}
if ((start + 3 < text.Length) && (text[start + 1] == ' ') && !IsAbbreviation(text, start, callbacks))
{
var subText = new StripableText(text.Substring(start + 2));
text = text.Substring(0, start + 2) + subText.CombineWithPrePost(ToUpperFirstLetter(subText.StrippedText, callbacks));
}
// Try to reach the last dot if char at *start is '.'.
if (charAtPosition == '.')
{
while (start + 1 < text.Length && text[start + 1] == '.')
{
start++;
}
}
start += 3;
if (start < text.Length)
start = text.IndexOfAny(ExpectedChars, start);
}
text = st.CombineWithPrePost(text);
if (oldText != text)
{
p.Text = text;
noOfFixes++;
callbacks.AddFixToListView(p, fixAction, oldText, p.Text);
}
}
}
callbacks.UpdateFixStatus(noOfFixes, language.StartWithUppercaseLetterAfterPeriodInsideParagraph, noOfFixes.ToString(CultureInfo.InvariantCulture));
}
开发者ID:mgziminsky,项目名称:subtitleedit,代码行数:53,代码来源:FixStartWithUppercaseLetterAfterPeriodInsideParagraph.cs
示例8: RemoveColon
public string RemoveColon(string text)
{
if (!Settings.RemoveTextBeforeColon)
return text;
if (text.IndexOf(":", StringComparison.Ordinal) < 0)
return text;
// House 7x01 line 52: and she would like you to do three things:
// Okay or remove???
if (text.IndexOf(':') > 0 && text.IndexOf(':') == text.Length - 1 && text != text.ToUpper())
return text;
string newText = string.Empty;
string[] parts = text.Trim().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
int noOfNames = 0;
int count = 0;
bool removedInFirstLine = false;
bool removedInSecondLine = false;
foreach (string s in parts)
{
int indexOfColon = s.IndexOf(":", StringComparison.Ordinal);
if (indexOfColon > 0)
{
string pre = s.Substring(0, indexOfColon);
if (Settings.RemoveTextBeforeColonOnlyUppercase && pre.Replace("<i>", string.Empty) != pre.Replace("<i>", string.Empty).ToUpper())
{
newText = newText + Environment.NewLine + s;
newText = newText.Trim();
}
else
{
StripableText st = new StripableText(pre);
if (count == 1 && Utilities.CountTagInText(text, Environment.NewLine) == 1 && removedInFirstLine && Utilities.CountTagInText(s, ":") == 1 &&
!newText.EndsWith('.') && !newText.EndsWith('!') && !newText.EndsWith('?') && !newText.EndsWith(".</i>") && !newText.EndsWith("!</i>") && !newText.EndsWith("?</i>") &&
s != s.ToUpper())
{
if (pre.Contains("<i>") && s.Contains("</i>"))
newText = newText + Environment.NewLine + "<i>" + s;
else if (pre.Contains("<b>") && s.Contains("</b>"))
newText = newText + Environment.NewLine + "<b>" + s;
else if (pre.Contains('[') && s.Contains(']'))
newText = newText + Environment.NewLine + "[" + s;
else if (pre.Contains('(') && s.EndsWith(')'))
newText = newText + Environment.NewLine + "(" + s;
else
newText = newText + Environment.NewLine + s;
}
else if (count == 1 && Utilities.CountTagInText(text, Environment.NewLine) == 1 && indexOfColon > 15 && s.Substring(0, indexOfColon).Contains(' ') && Utilities.CountTagInText(s, ":") == 1 &&
!newText.EndsWith('.') && !newText.EndsWith('!') && !newText.EndsWith('?') && !newText.EndsWith(".</i>") && !newText.EndsWith("!</i>") && !newText.EndsWith("?</i>") &&
s != s.ToUpper())
{
if (pre.Contains("<i>") && s.Contains("</i>"))
newText = newText + Environment.NewLine + "<i>" + s;
else if (pre.Contains("<b>") && s.Contains("</b>"))
newText = newText + Environment.NewLine + "<b>" + s;
else if (pre.Contains('[') && s.Contains(']'))
newText = newText + Environment.NewLine + "[" + s;
else if (pre.Contains('(') && s.EndsWith(')'))
newText = newText + Environment.NewLine + "(" + s;
else
newText = newText + Environment.NewLine + s;
}
else if (Utilities.CountTagInText(s, ":") == 1)
{
bool remove = true;
if (indexOfColon > 0 && indexOfColon < s.Length - 1)
{
if ("1234567890".Contains(s.Substring(indexOfColon - 1, 1)) && "1234567890".Contains(s.Substring(indexOfColon + 1, 1)))
remove = false;
}
if (s.StartsWith("Previously on") || s.StartsWith("<i>Previously on"))
remove = false;
if (remove && Settings.ColonSeparateLine)
{
if (indexOfColon == s.Length - 1 || s.Substring(indexOfColon + 1).StartsWith(Environment.NewLine))
remove = true;
else
remove = false;
}
if (remove)
{
string content = s.Substring(indexOfColon + 1).Trim();
if (content.Length > 0)
{
if (pre.Contains("<i>") && content.Contains("</i>"))
newText = newText + Environment.NewLine + "<i>" + content;
else if (pre.Contains("<b>") && content.Contains("</b>"))
newText = newText + Environment.NewLine + "<b>" + content;
else if (pre.Contains('[') && content.Contains(']'))
newText = newText + Environment.NewLine + "[" + content;
else if (pre.Contains('(') && content.EndsWith(')'))
newText = newText + Environment.NewLine + "(" + content;
else
newText = newText + Environment.NewLine + content;
if (count == 0)
removedInFirstLine = true;
//.........这里部分代码省略.........
示例9: RemoveInterjections
//.........这里部分代码省略.........
temp = temp.Remove(index - s.Length, 2);
removeAfter = false;
}
else if (temp.Substring(index - s.Length, 3) == ", .")
{
temp = temp.Remove(index - s.Length, 2);
removeAfter = false;
}
}
if (removeAfter && temp.Length > index - s.Length + 2 && index > s.Length)
{
if (temp.Substring(index - s.Length + 1, 2) == "-!")
{
temp = temp.Remove(index - s.Length + 1, 1);
removeAfter = false;
}
else if (temp.Substring(index - s.Length + 1, 2) == "-?")
{
temp = temp.Remove(index - s.Length + 1, 1);
removeAfter = false;
}
else if (temp.Substring(index - s.Length + 1, 2) == "-.")
{
temp = temp.Remove(index - s.Length + 1, 1);
removeAfter = false;
}
}
if (removeAfter)
{
if (index == 0)
{
if (!string.IsNullOrEmpty(temp) && temp.StartsWith('-'))
temp = temp.Remove(0, 1).Trim();
}
else if (index == 3 && !string.IsNullOrEmpty(temp) && temp.StartsWith("<i>-"))
{
temp = temp.Remove(3, 1);
}
else if (index > 0)
{
pre = text.Substring(0, index);
temp = temp.Remove(0, index);
if (pre.EndsWith('-') && temp.StartsWith('-'))
temp = temp.Remove(0, 1);
if (pre.EndsWith("- ") && temp.StartsWith('-'))
temp = temp.Remove(0, 1);
}
while (temp.Length > 0 && (temp.StartsWith(' ') || temp.StartsWith(',') || temp.StartsWith('.') || temp.StartsWith('!') || temp.StartsWith('?')))
{
temp = temp.Remove(0, 1);
doRepeat = true;
}
if (temp.Length > 0 && s[0].ToString(CultureInfo.InvariantCulture) != s[0].ToString(CultureInfo.InvariantCulture).ToLower())
{
temp = temp.Remove(0, 1).Insert(0, temp[0].ToString(CultureInfo.InvariantCulture).ToUpper());
doRepeat = true;
}
if (pre.EndsWith(' ') && temp.StartsWith('-'))
temp = temp.Remove(0, 1);
temp = pre + temp;
}
if (temp.EndsWith(Environment.NewLine + "- "))
temp = temp.Remove(temp.Length - 4, 4);
var st = new StripableText(temp);
if (st.StrippedText.Length == 0)
return string.Empty;
if (!temp.Contains(Environment.NewLine) && text.Contains(Environment.NewLine) && temp.StartsWith('-'))
temp = temp.Remove(0, 1).Trim();
text = temp;
}
}
}
}
string[] lines = text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (text != oldText && lines.Length == 2)
{
if (lines[0] == "-" && lines[1] == "-")
return string.Empty;
if (lines[0].StartsWith('-') && lines[0].Length > 1 && lines[1].Trim() == "-")
return lines[0].Remove(0, 1).Trim();
if (lines[1].StartsWith('-') && lines[1].Length > 1 && lines[0].Trim() == "-")
return lines[1].Remove(0, 1).Trim();
if (lines[0].Length > 1 && (lines[1] == "-") || lines[1] == "." || lines[1] == "!" || lines[1] == "?")
{
if (oldText.Contains(Environment.NewLine + "-") && lines[0].StartsWith('-'))
lines[0] = lines[0].Remove(0, 1);
return lines[0].Trim();
}
}
return text;
}
示例10: FixLowercaseIToUppercaseI
private string FixLowercaseIToUppercaseI(string input, string lastLine)
{
var sb = new StringBuilder();
var lines = input.SplitToLines();
for (int i = 0; i < lines.Length; i++)
{
string l = lines[i];
if (i > 0)
{
lastLine = lines[i - 1];
}
lastLine = HtmlUtil.RemoveHtmlTags(lastLine);
if (string.IsNullOrEmpty(lastLine) ||
lastLine.EndsWith('.') ||
lastLine.EndsWith('!') ||
lastLine.EndsWith('?'))
{
var st = new StripableText(l);
if (st.StrippedText.StartsWith('i') && !st.Pre.EndsWith('[') && !st.Pre.EndsWith('(') && !st.Pre.EndsWith("...", StringComparison.Ordinal))
{
if (string.IsNullOrEmpty(lastLine) || (!lastLine.EndsWith("...", StringComparison.Ordinal) && !EndsWithAbbreviation(lastLine, abbreviationList)))
{
l = st.Pre + "I" + st.StrippedText.Remove(0, 1) + st.Post;
}
}
}
sb.AppendLine(l);
}
return sb.ToString().TrimEnd('\r', '\n');
}
示例11: GeneratePreview
private void GeneratePreview()
{
Cursor = Cursors.WaitCursor;
listViewFixes.BeginUpdate();
listViewFixes.Items.Clear();
foreach (Paragraph p in _subtitle.Paragraphs)
{
string text = p.Text;
foreach (ListViewItem item in listViewNames.Items)
{
string name = item.SubItems[1].Text;
string textNoTags = HtmlUtil.RemoveHtmlTags(text);
if (textNoTags != textNoTags.ToUpper())
{
if (item.Checked && text != null && text.Contains(name, StringComparison.OrdinalIgnoreCase) && name.Length > 1 && name != name.ToLower())
{
var st = new StripableText(text);
st.FixCasing(new List<string> { name }, true, false, false, string.Empty);
text = st.MergedString;
}
}
}
if (text != p.Text)
AddToPreviewListView(p, text);
}
listViewFixes.EndUpdate();
groupBoxLinesFound.Text = string.Format(Configuration.Settings.Language.ChangeCasingNames.LinesFoundX, listViewFixes.Items.Count);
Cursor = Cursors.Default;
}
示例12: FixLowercaseIToUppercaseI
private string FixLowercaseIToUppercaseI(string input, string lastLine)
{
var sb = new StringBuilder();
string[] lines = input.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < lines.Length; i++)
{
string l = lines[i];
if (i > 0)
lastLine = lines[i - 1];
lastLine = Utilities.RemoveHtmlTags(lastLine);
if (string.IsNullOrEmpty(lastLine) ||
lastLine.EndsWith(".", StringComparison.Ordinal) ||
lastLine.EndsWith("!", StringComparison.Ordinal) ||
lastLine.EndsWith("?", StringComparison.Ordinal))
{
var st = new StripableText(l);
if (st.StrippedText.StartsWith("i", StringComparison.Ordinal) && !st.Pre.EndsWith("[", StringComparison.Ordinal) && !st.Pre.EndsWith("(", StringComparison.Ordinal) && !st.Pre.EndsWith("...", StringComparison.Ordinal))
{
if (string.IsNullOrEmpty(lastLine) || (!lastLine.EndsWith("...", StringComparison.Ordinal) && !EndsWithAbbreviation(lastLine, _abbreviationList)))
l = st.Pre + "I" + st.StrippedText.Remove(0, 1) + st.Post;
}
}
sb.AppendLine(l);
}
return sb.ToString().TrimEnd('\r').TrimEnd('\n').TrimEnd('\r').TrimEnd('\n');
}
示例13: FixSpanishInvertedLetter
private void FixSpanishInvertedLetter(char mark, string inverseMark, Paragraph p, Paragraph last, ref bool wasLastLineClosed, string fixAction, ref int fixCount)
{
if (p.Text.Contains(mark))
{
bool skip = false;
if (last != null && p.Text.Contains(mark) && !p.Text.Contains(inverseMark) && last.Text.Contains(inverseMark) && !last.Text.Contains(mark))
skip = true;
if (!skip && Utilities.CountTagInText(p.Text, mark) == Utilities.CountTagInText(p.Text, inverseMark) &&
HtmlUtil.RemoveHtmlTags(p.Text).TrimStart(inverseMark[0]).Contains(inverseMark) == false &&
HtmlUtil.RemoveHtmlTags(p.Text).TrimEnd(mark).Contains(mark) == false)
{
skip = true;
}
if (!skip)
{
int startIndex = 0;
int markIndex = p.Text.IndexOf(mark);
if (!wasLastLineClosed && ((p.Text.IndexOf('!') > 0 && p.Text.IndexOf('!') < markIndex) ||
(p.Text.IndexOf('?') > 0 && p.Text.IndexOf('?') < markIndex) ||
(p.Text.IndexOf('.') > 0 && p.Text.IndexOf('.') < markIndex)))
wasLastLineClosed = true;
while (markIndex > 0 && startIndex < p.Text.Length)
{
int inverseMarkIndex = p.Text.IndexOf(inverseMark, startIndex, StringComparison.Ordinal);
if (wasLastLineClosed && (inverseMarkIndex < 0 || inverseMarkIndex > markIndex))
{
if (AllowFix(p, fixAction))
{
int j = markIndex - 1;
while (j > startIndex && (p.Text[j] == '.' || p.Text[j] == '!' || p.Text[j] == '?'))
j--;
while (j > startIndex &&
(p.Text[j] != '.' || IsSpanishAbbreviation(p.Text, j)) &&
p.Text[j] != '!' &&
p.Text[j] != '?' &&
!(j > 3 && p.Text.Substring(j - 3, 3) == Environment.NewLine + "-") &&
!(j > 4 && p.Text.Substring(j - 4, 4) == Environment.NewLine + " -") &&
!(j > 6 && p.Text.Substring(j - 6, 6) == Environment.NewLine + "<i>-"))
j--;
if (@".!?".Contains(p.Text[j]))
{
j++;
}
if (j + 3 < p.Text.Length && p.Text.Substring(j + 1, 2) == Environment.NewLine)
{
j += 3;
}
else if (j + 2 < p.Text.Length && p.Text.Substring(j, 2) == Environment.NewLine)
{
j += 2;
}
if (j >= startIndex)
{
string part = p.Text.Substring(j, markIndex - j + 1);
string speaker = string.Empty;
int speakerEnd = part.IndexOf(')');
if (part.StartsWith('(') && speakerEnd > 0 && speakerEnd < part.IndexOf(mark))
{
while (Environment.NewLine.Contains(part[speakerEnd + 1]))
speakerEnd++;
speaker = part.Substring(0, speakerEnd + 1);
part = part.Substring(speakerEnd + 1);
}
speakerEnd = part.IndexOf(']');
if (part.StartsWith('[') && speakerEnd > 0 && speakerEnd < part.IndexOf(mark))
{
while (Environment.NewLine.Contains(part[speakerEnd + 1]))
speakerEnd++;
speaker = part.Substring(0, speakerEnd + 1);
part = part.Substring(speakerEnd + 1);
}
var st = new StripableText(part);
if (j == 0 && mark == '!' && st.Pre == "¿" && Utilities.CountTagInText(p.Text, mark) == 1 && HtmlUtil.RemoveHtmlTags(p.Text).EndsWith(mark))
{
p.Text = inverseMark + p.Text;
}
else if (j == 0 && mark == '?' && st.Pre == "¡" && Utilities.CountTagInText(p.Text, mark) == 1 && HtmlUtil.RemoveHtmlTags(p.Text).EndsWith(mark))
{
p.Text = inverseMark + p.Text;
}
else
{
string temp = inverseMark;
int addToIndex = 0;
while (p.Text.Length > markIndex + 1 && p.Text[markIndex + 1] == mark &&
Utilities.CountTagInText(p.Text, mark) > Utilities.CountTagInText(p.Text + temp, inverseMark))
{
temp += inverseMark;
st.Post += mark;
markIndex++;
addToIndex++;
}
//.........这里部分代码省略.........
示例14: FixUppercaseIInsideWords
public void FixUppercaseIInsideWords()
{
string fixAction = _language.FixUppercaseIInsideLowercaseWord;
int uppercaseIsInsideLowercaseWords = 0;
// bool isLineContinuation = false;
for (int i = 0; i < Subtitle.Paragraphs.Count; i++)
{
Paragraph p = Subtitle.Paragraphs[i];
string oldText = p.Text;
Match match = ReAfterLowercaseLetter.Match(p.Text);
while (match.Success)
{
if (!(match.Index > 1 && p.Text.Substring(match.Index - 1, 2) == "Mc") // irish names, McDonalds etc.
&& p.Text[match.Index + 1] == 'I'
&& AllowFix(p, fixAction))
{
p.Text = p.Text.Substring(0, match.Index + 1) + "l";
if (match.Index + 2 < oldText.Length)
p.Text += oldText.Substring(match.Index + 2);
uppercaseIsInsideLowercaseWords++;
AddFixToListView(p, fixAction, oldText, p.Text);
}
match = match.NextMatch();
}
var st = new StripableText(p.Text);
match = ReBeforeLowercaseLetter.Match(st.StrippedText);
while (match.Success)
{
string word = GetWholeWord(st.StrippedText, match.Index);
if (!IsName(word))
{
if (AllowFix(p, fixAction))
{
if (word.Equals("internal", StringComparison.OrdinalIgnoreCase) ||
word.Equals("island", StringComparison.OrdinalIgnoreCase) ||
word.Equals("islands", StringComparison.OrdinalIgnoreCase))
{
}
else if (match.Index == 0)
{ // first letter in paragraph
//too risky! - perhaps if periods is fixed at the same time... or too complicated!?
//if (isLineContinuation)
//{
// st.StrippedText = st.StrippedText.Remove(match.Index, 1).Insert(match.Index, "l");
// p.Text = st.MergedString;
// uppercaseIsInsideLowercaseWords++;
// AddFixToListView(p, fixAction, oldText, p.Text);
//}
}
else
{
if (match.Index > 2 && st.StrippedText[match.Index - 1] == ' ')
{
if ((Utilities.AllLettersAndNumbers + @",").Contains(st.StrippedText[match.Index - 2])
&& match.Length >= 2 && Utilities.LowercaseVowels.Contains(char.ToLower(match.Value[1])))
{
st.StrippedText = st.StrippedText.Remove(match.Index, 1).Insert(match.Index, "l");
p.Text = st.MergedString;
uppercaseIsInsideLowercaseWords++;
AddFixToListView(p, fixAction, oldText, p.Text);
}
}
else if (match.Index > Environment.NewLine.Length + 1 && Environment.NewLine.Contains(st.StrippedText[match.Index - 1]))
{
if ((Utilities.AllLettersAndNumbers + @",").Contains(st.StrippedText[match.Index - Environment.NewLine.Length + 1])
&& match.Length >= 2 && Utilities.LowercaseVowels.Contains(match.Value[1]))
{
st.StrippedText = st.StrippedText.Remove(match.Index, 1).Insert(match.Index, "l");
p.Text = st.MergedString;
uppercaseIsInsideLowercaseWords++;
AddFixToListView(p, fixAction, oldText, p.Text);
}
}
else if (match.Index > 1 && ((st.StrippedText[match.Index - 1] == '\"') || (st.StrippedText[match.Index - 1] == '\'') ||
(st.StrippedText[match.Index - 1] == '>') || (st.StrippedText[match.Index - 1] == '-')))
{
}
else
{
var before = '\0';
var after = '\0';
if (match.Index > 0)
before = st.StrippedText[match.Index - 1];
if (match.Index < st.StrippedText.Length - 2)
after = st.StrippedText[match.Index + 1];
if (before != '\0' && char.IsUpper(before) && after != '\0' && char.IsLower(after) &&
!Utilities.LowercaseVowels.Contains(char.ToLower(before)) && !Utilities.LowercaseVowels.Contains(after))
{
st.StrippedText = st.StrippedText.Remove(match.Index, 1).Insert(match.Index, "i");
p.Text = st.MergedString;
uppercaseIsInsideLowercaseWords++;
AddFixToListView(p, fixAction, oldText, p.Text);
}
else if (@"‘’¡¿„“()[]♪'. @".Contains(before) && !Utilities.LowercaseVowels.Contains(char.ToLower(after)))
{
}
//.........这里部分代码省略.........
示例15: StripableTextItalicAndMore
public void StripableTextItalicAndMore()
{
var st = new StripableText("<i>...<b>Hi!</b></i>");
Assert.AreEqual(st.Pre, "<i>...<b>");
Assert.AreEqual(st.Post, "!</b></i>");
Assert.AreEqual(st.StrippedText, "Hi");
}