mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 11:12:36 +01:00
"Merge selected lines" can now merge more than two lines (will not merge text where result is longer than 200 chars though)
git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@230 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
parent
e7d0ab769f
commit
3f18536052
@ -575,18 +575,6 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
LogStatus(fixAction, string.Format(_language.XDisplayTimesProlonged, noOfShortDisplayTimes));
|
LogStatus(fixAction, string.Format(_language.XDisplayTimesProlonged, noOfShortDisplayTimes));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int CountTagInText(string text, string tag)
|
|
||||||
{
|
|
||||||
int count = 0;
|
|
||||||
int index = text.IndexOf(tag);
|
|
||||||
while (index >= 0)
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
index = text.IndexOf(tag, index + 1);
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void FixInvalidItalicTags()
|
public void FixInvalidItalicTags()
|
||||||
{
|
{
|
||||||
const string beginTag = "<i>";
|
const string beginTag = "<i>";
|
||||||
@ -598,89 +586,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
string text = _subtitle.Paragraphs[i].Text.Replace(beginTag.ToUpper(), beginTag).Replace(endTag.ToUpper(), endTag);
|
string text = _subtitle.Paragraphs[i].Text.Replace(beginTag.ToUpper(), beginTag).Replace(endTag.ToUpper(), endTag);
|
||||||
string oldText = text;
|
string oldText = text;
|
||||||
|
|
||||||
text = text.Replace("< i>", beginTag);
|
text = Utilities.FixInvalidItalicTags(text);
|
||||||
text = text.Replace("<i >", beginTag);
|
|
||||||
text = text.Replace("< I>", beginTag);
|
|
||||||
text = text.Replace("<I >", beginTag);
|
|
||||||
|
|
||||||
text = text.Replace("< /i>", endTag);
|
|
||||||
text = text.Replace("</ i>", endTag);
|
|
||||||
text = text.Replace("< /i>", endTag);
|
|
||||||
text = text.Replace("< /I>", endTag);
|
|
||||||
text = text.Replace("</ I>", endTag);
|
|
||||||
text = text.Replace("< /I>", endTag);
|
|
||||||
|
|
||||||
if (text.Contains(beginTag))
|
|
||||||
text = text.Replace("<i/>", endTag);
|
|
||||||
else
|
|
||||||
text = text.Replace("<i/>", string.Empty);
|
|
||||||
|
|
||||||
text = text.Replace(beginTag + beginTag, beginTag);
|
|
||||||
text = text.Replace(endTag + endTag, endTag);
|
|
||||||
|
|
||||||
int italicBeginTagCount = CountTagInText(text, beginTag);
|
|
||||||
int italicEndTagCount = CountTagInText(text, endTag);
|
|
||||||
int noOfLines = CountTagInText(text, Environment.NewLine) + 1;
|
|
||||||
if (italicBeginTagCount + italicEndTagCount > 0)
|
|
||||||
{
|
|
||||||
if (italicBeginTagCount == 1 && italicEndTagCount == 1)
|
|
||||||
{
|
|
||||||
if (text.IndexOf(beginTag) > text.IndexOf(endTag))
|
|
||||||
{
|
|
||||||
text = text.Replace(beginTag, "___________@");
|
|
||||||
text = text.Replace(endTag, beginTag);
|
|
||||||
text = text.Replace("___________@", endTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (italicBeginTagCount == 2 && italicEndTagCount == 0)
|
|
||||||
{
|
|
||||||
int firstIndex = text.IndexOf(beginTag);
|
|
||||||
int lastIndex = text.LastIndexOf(beginTag);
|
|
||||||
int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine+ beginTag) + Environment.NewLine.Length;
|
|
||||||
if (noOfLines == 2 && lastIndex == lastIndexWithNewLine && firstIndex < 2)
|
|
||||||
text = text.Replace(Environment.NewLine, "</i>" + Environment.NewLine) + "</i>";
|
|
||||||
else if (text.Length > lastIndex + endTag.Length)
|
|
||||||
text = text.Substring(0, lastIndex) + endTag + text.Substring(lastIndex -1 + endTag.Length);
|
|
||||||
else
|
|
||||||
text = text.Substring(0, lastIndex) + endTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (italicBeginTagCount == 1 && italicEndTagCount == 2)
|
|
||||||
{
|
|
||||||
int firstIndex = text.IndexOf(endTag);
|
|
||||||
text = text.Substring(0, firstIndex - 1) + text.Substring(firstIndex + endTag.Length);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (italicBeginTagCount == 2 && italicEndTagCount == 1)
|
|
||||||
{
|
|
||||||
int lastIndex = text.LastIndexOf(beginTag);
|
|
||||||
if (text.Length > lastIndex + endTag.Length)
|
|
||||||
text = text.Substring(0, lastIndex) + text.Substring(lastIndex - 1 + endTag.Length);
|
|
||||||
else
|
|
||||||
text = text.Substring(0, lastIndex - 1) + endTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (italicBeginTagCount == 1 && italicEndTagCount == 0)
|
|
||||||
{
|
|
||||||
int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine + beginTag) + Environment.NewLine.Length;
|
|
||||||
int lastIndex = text.LastIndexOf(beginTag);
|
|
||||||
|
|
||||||
if (text.StartsWith(beginTag))
|
|
||||||
text += endTag;
|
|
||||||
else if (noOfLines == 2 && lastIndex == lastIndexWithNewLine)
|
|
||||||
text += endTag;
|
|
||||||
else
|
|
||||||
text = text.Replace(beginTag, string.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (italicBeginTagCount == 0 && italicEndTagCount == 1)
|
|
||||||
{
|
|
||||||
text = text.Replace(endTag, string.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
text = text.Replace("<i></i>", string.Empty);
|
|
||||||
|
|
||||||
if (text != oldText)
|
if (text != oldText)
|
||||||
{
|
{
|
||||||
if (AllowFix(i + 1, fixAction))
|
if (AllowFix(i + 1, fixAction))
|
||||||
@ -691,7 +597,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
AddFixToListView(_subtitle.Paragraphs[i], i + 1, fixAction, oldText, text);
|
AddFixToListView(_subtitle.Paragraphs[i], i + 1, fixAction, oldText, text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (noOfInvalidHtmlTags > 0)
|
if (noOfInvalidHtmlTags > 0)
|
||||||
LogStatus(_language.FixInvalidItalicTags, string.Format(_language.XInvalidHtmlTagsFixed, noOfInvalidHtmlTags));
|
LogStatus(_language.FixInvalidItalicTags, string.Format(_language.XInvalidHtmlTagsFixed, noOfInvalidHtmlTags));
|
||||||
@ -1211,7 +1117,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
|
for (int i = 0; i < _subtitle.Paragraphs.Count; i++)
|
||||||
{
|
{
|
||||||
Paragraph p = _subtitle.Paragraphs[i];
|
Paragraph p = _subtitle.Paragraphs[i];
|
||||||
if (CountTagInText(p.Text, "\"") == 1)
|
if (Utilities.CountTagInText(p.Text, "\"") == 1)
|
||||||
{
|
{
|
||||||
string oldText = p.Text;
|
string oldText = p.Text;
|
||||||
if (p.Text.StartsWith("\""))
|
if (p.Text.StartsWith("\""))
|
||||||
@ -1956,7 +1862,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
|
|
||||||
if (prev == null || !Utilities.RemoveHtmlTags(prev.Text).Trim().EndsWith("-"))
|
if (prev == null || !Utilities.RemoveHtmlTags(prev.Text).Trim().EndsWith("-"))
|
||||||
{
|
{
|
||||||
if (CountTagInText(text, "-") == 1)
|
if (Utilities.CountTagInText(text, "-") == 1)
|
||||||
{
|
{
|
||||||
string oldText = p.Text;
|
string oldText = p.Text;
|
||||||
|
|
||||||
@ -1992,7 +1898,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
Paragraph p = _subtitle.Paragraphs[i];
|
Paragraph p = _subtitle.Paragraphs[i];
|
||||||
string text = p.Text;
|
string text = p.Text;
|
||||||
|
|
||||||
if (CountTagInText(text, Environment.NewLine) > 1)
|
if (Utilities.CountTagInText(text, Environment.NewLine) > 1)
|
||||||
{
|
{
|
||||||
string oldText = p.Text;
|
string oldText = p.Text;
|
||||||
text = Utilities.AutoBreakLine(text);
|
text = Utilities.AutoBreakLine(text);
|
||||||
|
2
src/Forms/Main.Designer.cs
generated
2
src/Forms/Main.Designer.cs
generated
@ -1558,7 +1558,7 @@
|
|||||||
this.fixCommonErrorsInSelectedLinesToolStripMenuItem,
|
this.fixCommonErrorsInSelectedLinesToolStripMenuItem,
|
||||||
this.changeCasingForSelectedLinesToolStripMenuItem});
|
this.changeCasingForSelectedLinesToolStripMenuItem});
|
||||||
this.contextMenuStripListview.Name = "contextMenuStripListview";
|
this.contextMenuStripListview.Name = "contextMenuStripListview";
|
||||||
this.contextMenuStripListview.Size = new System.Drawing.Size(276, 562);
|
this.contextMenuStripListview.Size = new System.Drawing.Size(276, 584);
|
||||||
this.contextMenuStripListview.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripListviewOpening);
|
this.contextMenuStripListview.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripListviewOpening);
|
||||||
//
|
//
|
||||||
// toolStripMenuItemDelete
|
// toolStripMenuItemDelete
|
||||||
|
@ -2952,10 +2952,8 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
toolStripMenuItemInsertAfter.Visible = false;
|
toolStripMenuItemInsertAfter.Visible = false;
|
||||||
toolStripMenuItemInsertSubtitle.Visible = false;
|
toolStripMenuItemInsertSubtitle.Visible = false;
|
||||||
splitLineToolStripMenuItem.Visible = false;
|
splitLineToolStripMenuItem.Visible = false;
|
||||||
toolStripMenuItemMergeLines.Visible = false;
|
|
||||||
mergeAfterToolStripMenuItem.Visible = false;
|
mergeAfterToolStripMenuItem.Visible = false;
|
||||||
mergeBeforeToolStripMenuItem.Visible = false;
|
mergeBeforeToolStripMenuItem.Visible = false;
|
||||||
toolStripMenuItemMergeLines.Visible = false;
|
|
||||||
typeEffectToolStripMenuItem.Visible = false;
|
typeEffectToolStripMenuItem.Visible = false;
|
||||||
toolStripSeparator7.Visible = false;
|
toolStripSeparator7.Visible = false;
|
||||||
}
|
}
|
||||||
@ -3575,10 +3573,95 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void MergeSelectedLines()
|
||||||
|
{
|
||||||
|
if (_subtitle.Paragraphs.Count > 0 && SubtitleListview1.SelectedItems.Count > 1)
|
||||||
|
{
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
List<Paragraph> mergeParagraphs = new List<Paragraph>();
|
||||||
|
List<int> deleteIndices = new List<int>();
|
||||||
|
bool first = true;
|
||||||
|
int firstIndex = 0;
|
||||||
|
foreach (int index in SubtitleListview1.SelectedIndices)
|
||||||
|
{
|
||||||
|
if (first)
|
||||||
|
firstIndex = index;
|
||||||
|
else
|
||||||
|
deleteIndices.Add(index);
|
||||||
|
sb.AppendLine(_subtitle.Paragraphs[index].Text);
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sb.Length > 200)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SubtitleListview1.SelectedIndexChanged -= SubtitleListview1_SelectedIndexChanged;
|
||||||
|
MakeHistoryForUndo(_language.BeforeMergeLines);
|
||||||
|
|
||||||
|
Paragraph currentParagraph = _subtitle.Paragraphs[firstIndex];
|
||||||
|
string text = sb.ToString();
|
||||||
|
text = Utilities.FixInvalidItalicTags(text);
|
||||||
|
text = ChangeAllLinesItalictoSingleItalic(text);
|
||||||
|
text = Utilities.AutoBreakLine(text);
|
||||||
|
currentParagraph.Text = text;
|
||||||
|
|
||||||
|
//display time
|
||||||
|
currentParagraph.EndTime.TotalMilliseconds = currentParagraph.StartTime.TotalMilliseconds + Utilities.GetDisplayMillisecondsFromText(text);
|
||||||
|
Paragraph nextParagraph = _subtitle.GetParagraphOrDefault(_subtitle.GetIndex(currentParagraph) + 1);
|
||||||
|
if (nextParagraph != null && currentParagraph.EndTime.TotalMilliseconds > nextParagraph.StartTime.TotalMilliseconds && currentParagraph.StartTime.TotalMilliseconds < nextParagraph.StartTime.TotalMilliseconds)
|
||||||
|
{
|
||||||
|
currentParagraph.EndTime.TotalMilliseconds = nextParagraph.StartTime.TotalMilliseconds - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_networkSession != null)
|
||||||
|
{
|
||||||
|
_networkSession.TimerStop();
|
||||||
|
_networkSession.UpdateLine(firstIndex, currentParagraph);
|
||||||
|
NetworkGetSendUpdates(deleteIndices, 0, null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = deleteIndices.Count - 1; i >= 0; i--)
|
||||||
|
_subtitle.Paragraphs.RemoveAt(deleteIndices[i]);
|
||||||
|
_subtitle.Renumber(1);
|
||||||
|
SubtitleListview1.Fill(_subtitle, _subtitleAlternate);
|
||||||
|
}
|
||||||
|
ShowSource();
|
||||||
|
ShowStatus(_language.LinesMerged);
|
||||||
|
SubtitleListview1.SelectIndexAndEnsureVisible(firstIndex);
|
||||||
|
SubtitleListview1.SelectedIndexChanged += SubtitleListview1_SelectedIndexChanged;
|
||||||
|
RefreshSelectedParagraph();
|
||||||
|
_change = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string ChangeAllLinesItalictoSingleItalic(string text)
|
||||||
|
{
|
||||||
|
bool allLinesStartAndEndsWithItalic = true;
|
||||||
|
foreach (string line in text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
|
||||||
|
{
|
||||||
|
if (!line.Trim().StartsWith("<i>") || !line.Trim().EndsWith("</i>"))
|
||||||
|
allLinesStartAndEndsWithItalic = false;
|
||||||
|
}
|
||||||
|
if (allLinesStartAndEndsWithItalic)
|
||||||
|
{
|
||||||
|
text = text.Replace("<i>", string.Empty).Replace("</i>", string.Empty).Trim();
|
||||||
|
text = "<i>" + text + "</i>";
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
private void MergeAfterToolStripMenuItemClick(object sender, EventArgs e)
|
private void MergeAfterToolStripMenuItemClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_subtitle.Paragraphs.Count > 0 && SubtitleListview1.SelectedItems.Count > 0)
|
if (_subtitle.Paragraphs.Count > 0 && SubtitleListview1.SelectedItems.Count > 0)
|
||||||
{
|
{
|
||||||
|
if (SubtitleListview1.SelectedItems.Count > 2)
|
||||||
|
{
|
||||||
|
MergeSelectedLines();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int startNumber = _subtitle.Paragraphs[0].Number;
|
int startNumber = _subtitle.Paragraphs[0].Number;
|
||||||
int firstSelectedIndex = SubtitleListview1.SelectedItems[0].Index;
|
int firstSelectedIndex = SubtitleListview1.SelectedItems[0].Index;
|
||||||
|
|
||||||
@ -3592,6 +3675,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
|
|
||||||
currentParagraph.Text = currentParagraph.Text.Replace(Environment.NewLine, " ");
|
currentParagraph.Text = currentParagraph.Text.Replace(Environment.NewLine, " ");
|
||||||
currentParagraph.Text += Environment.NewLine + nextParagraph.Text.Replace(Environment.NewLine, " ");
|
currentParagraph.Text += Environment.NewLine + nextParagraph.Text.Replace(Environment.NewLine, " ");
|
||||||
|
currentParagraph.Text = ChangeAllLinesItalictoSingleItalic(currentParagraph.Text);
|
||||||
currentParagraph.Text = Utilities.AutoBreakLine(currentParagraph.Text);
|
currentParagraph.Text = Utilities.AutoBreakLine(currentParagraph.Text);
|
||||||
|
|
||||||
//currentParagraph.EndTime.TotalMilliseconds = currentParagraph.EndTime.TotalMilliseconds + nextParagraph.Duration.TotalMilliseconds; //nextParagraph.EndTime;
|
//currentParagraph.EndTime.TotalMilliseconds = currentParagraph.EndTime.TotalMilliseconds + nextParagraph.Duration.TotalMilliseconds; //nextParagraph.EndTime;
|
||||||
@ -4605,7 +4689,7 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
|
|
||||||
private void ToolStripMenuItemMergeLinesClick(object sender, EventArgs e)
|
private void ToolStripMenuItemMergeLinesClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_subtitle.Paragraphs.Count > 0 && SubtitleListview1.SelectedItems.Count >= 1 && SubtitleListview1.SelectedItems.Count <= 2)
|
if (_subtitle.Paragraphs.Count > 0 && SubtitleListview1.SelectedItems.Count >= 1)
|
||||||
MergeAfterToolStripMenuItemClick(null, null);
|
MergeAfterToolStripMenuItemClick(null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4750,10 +4834,13 @@ namespace Nikse.SubtitleEdit.Forms
|
|||||||
}
|
}
|
||||||
else if (e.Modifiers == (Keys.Control | Keys.Shift) && e.KeyCode == Keys.M)
|
else if (e.Modifiers == (Keys.Control | Keys.Shift) && e.KeyCode == Keys.M)
|
||||||
{
|
{
|
||||||
if (_subtitle.Paragraphs.Count > 0 && SubtitleListview1.SelectedItems.Count >= 1 && SubtitleListview1.SelectedItems.Count <= 2)
|
if (_subtitle.Paragraphs.Count > 0 && SubtitleListview1.SelectedItems.Count >= 1)
|
||||||
{
|
{
|
||||||
e.SuppressKeyPress = true;
|
e.SuppressKeyPress = true;
|
||||||
|
if (SubtitleListview1.SelectedItems.Count == 2)
|
||||||
MergeAfterToolStripMenuItemClick(null, null);
|
MergeAfterToolStripMenuItemClick(null, null);
|
||||||
|
else
|
||||||
|
MergeSelectedLines();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.U)
|
else if (e.Modifiers == Keys.Control && e.KeyCode == Keys.U)
|
||||||
|
@ -127,17 +127,17 @@ Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
|
|||||||
|
|
||||||
text = text.Replace(@"{\i1}", "<i>");
|
text = text.Replace(@"{\i1}", "<i>");
|
||||||
text = text.Replace(@"{\i0}", "</i>");
|
text = text.Replace(@"{\i0}", "</i>");
|
||||||
if (FixCommonErrors.CountTagInText(text, "<i>") > FixCommonErrors.CountTagInText(text, "</i>"))
|
if (Utilities.CountTagInText(text, "<i>") > Utilities.CountTagInText(text, "</i>"))
|
||||||
text += "</i>";
|
text += "</i>";
|
||||||
|
|
||||||
text = text.Replace(@"{\u1}", "<u>");
|
text = text.Replace(@"{\u1}", "<u>");
|
||||||
text = text.Replace(@"{\u0}", "</u>");
|
text = text.Replace(@"{\u0}", "</u>");
|
||||||
if (FixCommonErrors.CountTagInText(text, "<u>") > FixCommonErrors.CountTagInText(text, "</u>"))
|
if (Utilities.CountTagInText(text, "<u>") > Utilities.CountTagInText(text, "</u>"))
|
||||||
text += "</u>";
|
text += "</u>";
|
||||||
|
|
||||||
text = text.Replace(@"{\b1}", "<b>");
|
text = text.Replace(@"{\b1}", "<b>");
|
||||||
text = text.Replace(@"{\b0}", "</b>");
|
text = text.Replace(@"{\b0}", "</b>");
|
||||||
if (FixCommonErrors.CountTagInText(text, "<b>") > FixCommonErrors.CountTagInText(text, "</b>"))
|
if (Utilities.CountTagInText(text, "<b>") > Utilities.CountTagInText(text, "</b>"))
|
||||||
text += "</b>";
|
text += "</b>";
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++) // just look five times...
|
for (int i = 0; i < 5; i++) // just look five times...
|
||||||
|
@ -1539,5 +1539,110 @@ namespace Nikse.SubtitleEdit.Logic
|
|||||||
control.Height = newHeight;
|
control.Height = newHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static int CountTagInText(string text, string tag)
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
int index = text.IndexOf(tag);
|
||||||
|
while (index >= 0)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
index = text.IndexOf(tag, index + 1);
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static string FixInvalidItalicTags(string text)
|
||||||
|
{
|
||||||
|
const string beginTag = "<i>";
|
||||||
|
const string endTag = "</i>";
|
||||||
|
|
||||||
|
text = text.Replace("< i>", beginTag);
|
||||||
|
text = text.Replace("<i >", beginTag);
|
||||||
|
text = text.Replace("< I>", beginTag);
|
||||||
|
text = text.Replace("<I >", beginTag);
|
||||||
|
|
||||||
|
text = text.Replace("< /i>", endTag);
|
||||||
|
text = text.Replace("</ i>", endTag);
|
||||||
|
text = text.Replace("< /i>", endTag);
|
||||||
|
text = text.Replace("< /I>", endTag);
|
||||||
|
text = text.Replace("</ I>", endTag);
|
||||||
|
text = text.Replace("< /I>", endTag);
|
||||||
|
|
||||||
|
if (text.Contains(beginTag))
|
||||||
|
text = text.Replace("<i/>", endTag);
|
||||||
|
else
|
||||||
|
text = text.Replace("<i/>", string.Empty);
|
||||||
|
|
||||||
|
text = text.Replace(beginTag + beginTag, beginTag);
|
||||||
|
text = text.Replace(endTag + endTag, endTag);
|
||||||
|
|
||||||
|
int italicBeginTagCount = CountTagInText(text, beginTag);
|
||||||
|
int italicEndTagCount = CountTagInText(text, endTag);
|
||||||
|
int noOfLines = CountTagInText(text, Environment.NewLine) + 1;
|
||||||
|
if (italicBeginTagCount + italicEndTagCount > 0)
|
||||||
|
{
|
||||||
|
if (italicBeginTagCount == 1 && italicEndTagCount == 1)
|
||||||
|
{
|
||||||
|
if (text.IndexOf(beginTag) > text.IndexOf(endTag))
|
||||||
|
{
|
||||||
|
text = text.Replace(beginTag, "___________@");
|
||||||
|
text = text.Replace(endTag, beginTag);
|
||||||
|
text = text.Replace("___________@", endTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (italicBeginTagCount == 2 && italicEndTagCount == 0)
|
||||||
|
{
|
||||||
|
int firstIndex = text.IndexOf(beginTag);
|
||||||
|
int lastIndex = text.LastIndexOf(beginTag);
|
||||||
|
int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine + beginTag) + Environment.NewLine.Length;
|
||||||
|
if (noOfLines == 2 && lastIndex == lastIndexWithNewLine && firstIndex < 2)
|
||||||
|
text = text.Replace(Environment.NewLine, "</i>" + Environment.NewLine) + "</i>";
|
||||||
|
else if (text.Length > lastIndex + endTag.Length)
|
||||||
|
text = text.Substring(0, lastIndex) + endTag + text.Substring(lastIndex - 1 + endTag.Length);
|
||||||
|
else
|
||||||
|
text = text.Substring(0, lastIndex) + endTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (italicBeginTagCount == 1 && italicEndTagCount == 2)
|
||||||
|
{
|
||||||
|
int firstIndex = text.IndexOf(endTag);
|
||||||
|
text = text.Substring(0, firstIndex - 1) + text.Substring(firstIndex + endTag.Length);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (italicBeginTagCount == 2 && italicEndTagCount == 1)
|
||||||
|
{
|
||||||
|
int lastIndex = text.LastIndexOf(beginTag);
|
||||||
|
if (text.Length > lastIndex + endTag.Length)
|
||||||
|
text = text.Substring(0, lastIndex) + text.Substring(lastIndex - 1 + endTag.Length);
|
||||||
|
else
|
||||||
|
text = text.Substring(0, lastIndex - 1) + endTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (italicBeginTagCount == 1 && italicEndTagCount == 0)
|
||||||
|
{
|
||||||
|
int lastIndexWithNewLine = text.LastIndexOf(Environment.NewLine + beginTag) + Environment.NewLine.Length;
|
||||||
|
int lastIndex = text.LastIndexOf(beginTag);
|
||||||
|
|
||||||
|
if (text.StartsWith(beginTag))
|
||||||
|
text += endTag;
|
||||||
|
else if (noOfLines == 2 && lastIndex == lastIndexWithNewLine)
|
||||||
|
text += endTag;
|
||||||
|
else
|
||||||
|
text = text.Replace(beginTag, string.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (italicBeginTagCount == 0 && italicEndTagCount == 1)
|
||||||
|
{
|
||||||
|
text = text.Replace(endTag, string.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
text = text.Replace("<i></i>", string.Empty);
|
||||||
|
text = text.Replace("<i> </i>", string.Empty);
|
||||||
|
text = text.Replace("<i> </i>", string.Empty);
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user