Minor refact

This commit is contained in:
Nikolaj Olsson 2016-03-27 14:41:32 +02:00
parent 1dae1e6828
commit 694376f154
2 changed files with 71 additions and 71 deletions

View File

@ -1216,6 +1216,76 @@ namespace Nikse.SubtitleEdit.Core
return Uri.UnescapeDataString(text);
}
public static string ReverseStartAndEndingForRightToLeft(string s)
{
var lines = s.SplitToLines();
var newLines = new StringBuilder();
foreach (var line in lines)
{
string s2 = line;
bool startsWithItalic = false;
if (s2.StartsWith("<i>", StringComparison.Ordinal))
{
startsWithItalic = true;
s2 = s2.Remove(0, 3);
}
bool endsWithItalic = false;
if (s2.EndsWith("</i>", StringComparison.Ordinal))
{
endsWithItalic = true;
s2 = s2.Remove(s2.Length - 4, 4);
}
var pre = new StringBuilder();
var post = new StringBuilder();
int i = 0;
while (i < s2.Length && @"- !?.""،,():;[]".Contains(s2[i]))
{
pre.Append(s2[i]);
i++;
}
int j = s2.Length - 1;
while (j > i && @"- !?.""،,():;[]".Contains(s2[j]))
{
post.Append(s2[j]);
j--;
}
if (startsWithItalic)
newLines.Append("<i>");
newLines.Append(ReverseParenthesis(post.ToString()));
newLines.Append(s2.Substring(pre.Length, s2.Length - (pre.Length + post.Length)));
newLines.Append(ReverseParenthesis(ReverseString(pre.ToString())));
if (endsWithItalic)
newLines.Append("</i>");
newLines.AppendLine();
}
return newLines.ToString().Trim();
}
private static string ReverseString(string s)
{
var charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
private static string ReverseParenthesis(string s)
{
const string k = "@__<<>___@";
s = s.Replace("(", k);
s = s.Replace(')', '(');
s = s.Replace(k, ")");
s = s.Replace("[", k);
s = s.Replace(']', '[');
s = s.Replace(k, "]");
return s;
}
public static string FixEnglishTextInRightToLeftLanguage(string text, string reverseChars)
{
var sb = new StringBuilder();

View File

@ -11457,83 +11457,13 @@ namespace Nikse.SubtitleEdit.Forms
foreach (int index in SubtitleListview1.SelectedIndices)
{
var p = _subtitle.Paragraphs[index];
p.Text = ReverseStartAndEndingForRTL(p.Text);
p.Text = Utilities.ReverseStartAndEndingForRightToLeft(p.Text);
SubtitleListview1.SetText(index, p.Text);
if (index == selectedIndex)
textBoxListViewText.Text = p.Text;
}
}
private static string ReverseString(string s)
{
var charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
private static string ReverseParenthesis(string s)
{
const string k = "@__<<>___@";
s = s.Replace("(", k);
s = s.Replace(')', '(');
s = s.Replace(k, ")");
s = s.Replace("[", k);
s = s.Replace(']', '[');
s = s.Replace(k, "]");
return s;
}
private static string ReverseStartAndEndingForRTL(string s)
{
var lines = s.SplitToLines();
var newLines = new StringBuilder();
foreach (var line in lines)
{
string s2 = line;
bool startsWithItalic = false;
if (s2.StartsWith("<i>", StringComparison.Ordinal))
{
startsWithItalic = true;
s2 = s2.Remove(0, 3);
}
bool endsWithItalic = false;
if (s2.EndsWith("</i>", StringComparison.Ordinal))
{
endsWithItalic = true;
s2 = s2.Remove(s2.Length - 4, 4);
}
var pre = new StringBuilder();
var post = new StringBuilder();
int i = 0;
while (i < s2.Length && @"- !?.""،,():;[]".Contains(s2[i]))
{
pre.Append(s2[i]);
i++;
}
int j = s2.Length - 1;
while (j > i && @"- !?.""،,():;[]".Contains(s2[j]))
{
post.Append(s2[j]);
j--;
}
if (startsWithItalic)
newLines.Append("<i>");
newLines.Append(ReverseParenthesis(post.ToString()));
newLines.Append(s2.Substring(pre.Length, s2.Length - (pre.Length + post.Length)));
newLines.Append(ReverseParenthesis(ReverseString(pre.ToString())));
if (endsWithItalic)
newLines.Append("</i>");
newLines.AppendLine();
}
return newLines.ToString().Trim();
}
private void MergeDialogs()
{
if (SubtitleListview1.SelectedItems.Count == 2 && SubtitleListview1.SelectedIndices[0] + 1 == SubtitleListview1.SelectedIndices[1])