mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-10-27 14:32:35 +01:00
Now allows for phrases in user dictionary + Encoding methods in Utilities
git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@264 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
parent
ee33a68d7b
commit
17a0e86e0c
1
src/Forms/Main.Designer.cs
generated
1
src/Forms/Main.Designer.cs
generated
@ -1272,6 +1272,7 @@
|
||||
this.toolStripMenuItemSpellCheckMain.Name = "toolStripMenuItemSpellCheckMain";
|
||||
this.toolStripMenuItemSpellCheckMain.Size = new System.Drawing.Size(80, 20);
|
||||
this.toolStripMenuItemSpellCheckMain.Text = "Spell check";
|
||||
this.toolStripMenuItemSpellCheckMain.DropDownOpening += new System.EventHandler(this.toolStripMenuItemSpellCheckMain_DropDownOpening);
|
||||
//
|
||||
// spellCheckToolStripMenuItem
|
||||
//
|
||||
|
@ -1741,6 +1741,9 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
ReloadFromSourceView();
|
||||
SaveSubtitle(GetCurrentSubtitleFormat());
|
||||
|
||||
if (Configuration.Settings.General.AllowEditOfOriginalSubtitle && _subtitleAlternate != null && _subtitleAlternate.Paragraphs.Count > 0)
|
||||
saveOriginalToolStripMenuItem_Click(null, null);
|
||||
}
|
||||
|
||||
private void ToolStripButtonSaveAsClick(object sender, EventArgs e)
|
||||
@ -2774,8 +2777,9 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
private static string GetTranslateStringFromNikseDk(string input)
|
||||
{
|
||||
// string url = String.Format("http://localhost:2782/mt/Translate.aspx?text={0}&langpair={1}", HttpUtility.UrlEncode(input), "svda");
|
||||
string url = String.Format("http://www.nikse.dk/mt/Translate.aspx?text={0}&langpair={1}", HttpUtility.UrlEncode(input), "svda");
|
||||
var webClient = new WebClient {Proxy = Utilities.GetProxy(), Encoding = System.Text.Encoding.UTF8};
|
||||
// string url = String.Format("http://www.nikse.dk/mt/Translate.aspx?text={0}&langpair={1}", HttpUtility.UrlEncode(input), "svda");
|
||||
string url = String.Format("http://www.nikse.dk/mt/Translate.aspx?text={0}&langpair={1}", Utilities.UrlEncode(input), "svda");
|
||||
var webClient = new WebClient { Proxy = Utilities.GetProxy(), Encoding = System.Text.Encoding.UTF8 };
|
||||
return webClient.DownloadString(url);
|
||||
}
|
||||
|
||||
@ -7086,13 +7090,13 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
private void buttonGoogleIt_Click(object sender, EventArgs e)
|
||||
{
|
||||
System.Diagnostics.Process.Start("http://www.google.com/#q=" + HttpUtility.UrlEncode(textBoxSearchWord.Text));
|
||||
System.Diagnostics.Process.Start("http://www.google.com/#q=" + Utilities.UrlEncode(textBoxSearchWord.Text));
|
||||
}
|
||||
|
||||
private void buttonGoogleTranslateIt_Click(object sender, EventArgs e)
|
||||
{
|
||||
string languageId = Utilities.AutoDetectGoogleLanguage(_subtitle);
|
||||
System.Diagnostics.Process.Start("http://translate.google.com/#auto|" + languageId + "|" + HttpUtility.UrlEncode(textBoxSearchWord.Text));
|
||||
System.Diagnostics.Process.Start("http://translate.google.com/#auto|" + languageId + "|" + Utilities.UrlEncode(textBoxSearchWord.Text));
|
||||
}
|
||||
|
||||
private void ButtonPlayCurrentClick(object sender, EventArgs e)
|
||||
@ -7640,7 +7644,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
if (url.Contains("{0}"))
|
||||
{
|
||||
url = string.Format(url, HttpUtility.UrlEncode(textBoxSearchWord.Text));
|
||||
url = string.Format(url, Utilities.UrlEncode(textBoxSearchWord.Text));
|
||||
}
|
||||
System.Diagnostics.Process.Start(url);
|
||||
}
|
||||
@ -8065,7 +8069,8 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
if (!update.Text.Contains(Environment.NewLine))
|
||||
update.Text = update.Text.Replace("\n", Environment.NewLine);
|
||||
update.Text = HttpUtility.HtmlDecode(update.Text).Replace("<br />", Environment.NewLine);
|
||||
// update.Text = HttpUtility.HtmlDecode(update.Text).Replace("<br />", Environment.NewLine);
|
||||
update.Text = Utilities.HtmlDecode(update.Text).Replace("<br />", Environment.NewLine);
|
||||
}
|
||||
if (update.User.Ip != _networkSession.CurrentUser.Ip || update.User.UserName != _networkSession.CurrentUser.UserName)
|
||||
{
|
||||
@ -8751,6 +8756,22 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
|
||||
labelCharactersPerSecond.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelCharactersPerSecond.Width);
|
||||
labelTextLineTotal.Left = textBoxListViewText.Left + (textBoxListViewText.Width - labelTextLineTotal.Width);
|
||||
}
|
||||
|
||||
private void toolStripMenuItemSpellCheckMain_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
if (Configuration.Settings.General.SpellChecker.ToLower().Contains("word"))
|
||||
{
|
||||
toolStripSeparator9.Visible = false;
|
||||
GetDictionariesToolStripMenuItem.Visible = false;
|
||||
addWordToNamesetcListToolStripMenuItem.Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
toolStripSeparator9.Visible = true;
|
||||
GetDictionariesToolStripMenuItem.Visible = true;
|
||||
addWordToNamesetcListToolStripMenuItem.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
List<string> _skipAllList = new List<string>();
|
||||
Dictionary<string, string> _changeAllDictionary = new Dictionary<string, string>();
|
||||
List<string> _userWordList = new List<string>();
|
||||
List<string> _userPhraseList = new List<string>();
|
||||
XmlDocument _userWordDictionary = new XmlDocument();
|
||||
string _prefix = string.Empty;
|
||||
string _postfix = string.Empty;
|
||||
@ -216,12 +217,19 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
_languageName = LanguageString;
|
||||
string dictionary = Utilities.DictionaryFolder + _languageName;
|
||||
_userWordList = new List<string>();
|
||||
_userPhraseList = new List<string>();
|
||||
_userWordDictionary = new XmlDocument();
|
||||
if (File.Exists(Utilities.DictionaryFolder + _languageName + "_user.xml"))
|
||||
{
|
||||
_userWordDictionary.Load(Utilities.DictionaryFolder + _languageName + "_user.xml");
|
||||
foreach (XmlNode node in _userWordDictionary.DocumentElement.SelectNodes("word"))
|
||||
_userWordList.Add(node.InnerText.ToLower());
|
||||
{
|
||||
string word = node.InnerText.Trim().ToLower();
|
||||
if (word.Contains(" "))
|
||||
_userPhraseList.Add(word);
|
||||
else
|
||||
_userWordList.Add(word);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -359,9 +367,13 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
if (_userWordList.IndexOf(ChangeWord) < 0)
|
||||
{
|
||||
_noOfAddedWords++;
|
||||
_userWordList.Add(ChangeWord.ToLower());
|
||||
string s = ChangeWord.Trim().ToLower();
|
||||
if (s.Contains(" "))
|
||||
_userPhraseList.Add(s);
|
||||
else
|
||||
_userWordList.Add(s);
|
||||
XmlNode node = _userWordDictionary.CreateElement("word");
|
||||
node.InnerText = ChangeWord.Trim().ToLower();
|
||||
node.InnerText = s;
|
||||
_userWordDictionary.DocumentElement.AppendChild(node);
|
||||
_userWordDictionary.Save(_dictionaryFolder + _languageName + "_user.xml");
|
||||
}
|
||||
@ -523,6 +535,10 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
{
|
||||
_noOfNamesEtc++;
|
||||
}
|
||||
else if (Utilities.IsWordInUserPhrases(_userPhraseList, _wordsIndex, _words))
|
||||
{
|
||||
_noOfCorrectWords++;
|
||||
}
|
||||
else
|
||||
{
|
||||
bool correct = _hunspell.Spell(_currentWord);
|
||||
@ -660,12 +676,19 @@ namespace Nikse.SubtitleEdit.Forms
|
||||
}
|
||||
|
||||
_userWordList = new List<string>();
|
||||
_userPhraseList = new List<string>();
|
||||
_userWordDictionary = new XmlDocument();
|
||||
if (File.Exists(dictionaryFolder + _languageName + "_user.xml"))
|
||||
{
|
||||
_userWordDictionary.Load(dictionaryFolder + _languageName + "_user.xml");
|
||||
foreach (XmlNode node in _userWordDictionary.DocumentElement.SelectNodes("word"))
|
||||
_userWordList.Add(node.InnerText.ToLower());
|
||||
{
|
||||
string word = node.InnerText.Trim().ToLower();
|
||||
if (word.Contains(" "))
|
||||
_userPhraseList.Add(word);
|
||||
else
|
||||
_userWordList.Add(word);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
{
|
||||
@ -104,7 +103,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
DateTime updateTime;
|
||||
Subtitle = new Subtitle();
|
||||
foreach (var sequence in _seWs.GetSubtitle(sessionKey, out tempFileName, out updateTime))
|
||||
Subtitle.Paragraphs.Add(new Paragraph(HttpUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
Subtitle.Paragraphs.Add(new Paragraph(Utilities.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
FileName = tempFileName;
|
||||
|
||||
OriginalSubtitle = new Subtitle();
|
||||
@ -112,7 +111,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
if (sequences != null)
|
||||
{
|
||||
foreach (var sequence in sequences)
|
||||
OriginalSubtitle.Paragraphs.Add(new Paragraph(HttpUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
OriginalSubtitle.Paragraphs.Add(new Paragraph(Utilities.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
}
|
||||
|
||||
SessionId = sessionKey;
|
||||
@ -162,7 +161,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
if (sequences != null)
|
||||
{
|
||||
foreach (var sequence in sequences)
|
||||
Subtitle.Paragraphs.Add(new Paragraph(HttpUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
Subtitle.Paragraphs.Add(new Paragraph(Utilities.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds));
|
||||
}
|
||||
return Subtitle;
|
||||
}
|
||||
@ -175,7 +174,7 @@ namespace Nikse.SubtitleEdit.Logic.Networking
|
||||
var sequences = _seWs.GetSubtitle(SessionId, out FileName, out _seWsLastUpdate);
|
||||
foreach (var sequence in sequences)
|
||||
{
|
||||
Paragraph p = new Paragraph(HttpUtility.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds);
|
||||
Paragraph p = new Paragraph(Utilities.HtmlDecode(sequence.Text).Replace("<br />", Environment.NewLine), sequence.StartMilliseconds, sequence.EndMilliseconds);
|
||||
Subtitle.Paragraphs.Add(p);
|
||||
}
|
||||
Subtitle.Renumber(1);
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
@ -12,7 +13,6 @@ using Nikse.SubtitleEdit.Controls;
|
||||
using Nikse.SubtitleEdit.Forms;
|
||||
using Nikse.SubtitleEdit.Logic.SubtitleFormats;
|
||||
using Nikse.SubtitleEdit.Logic.VideoPlayers;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
@ -225,7 +225,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
|
||||
public static string ReadTextFileViaUrlAndProxyIfAvailable(string url)
|
||||
{
|
||||
var wc = new WebClient {Proxy = GetProxy()};
|
||||
var wc = new WebClient { Proxy = GetProxy() };
|
||||
var ms = new MemoryStream(wc.DownloadData(url));
|
||||
var reader = new StreamReader(ms);
|
||||
return reader.ReadToEnd().Trim();
|
||||
@ -246,19 +246,19 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
}
|
||||
else
|
||||
proxy.UseDefaultCredentials = true;
|
||||
|
||||
|
||||
return proxy;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static bool IsPartOfNumber(string s, int position)
|
||||
{
|
||||
{
|
||||
if (",.".Contains(s[position].ToString()))
|
||||
{
|
||||
if (position > 0 && position < s.Length-1)
|
||||
if (position > 0 && position < s.Length - 1)
|
||||
{
|
||||
return "1234567890".Contains(s[position-1].ToString()) && "1234567890".Contains(s[position+1].ToString());
|
||||
return "1234567890".Contains(s[position - 1].ToString()) && "1234567890".Contains(s[position + 1].ToString());
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@ -297,13 +297,13 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
if (mid + j + 4 < s.Length)
|
||||
{
|
||||
if (s[mid + j] == '-' && s[mid + j + 1] == ' ' && s[mid + j- 1] == ' ')
|
||||
if (s[mid + j] == '-' && s[mid + j + 1] == ' ' && s[mid + j - 1] == ' ')
|
||||
{
|
||||
string rest = s.Substring(mid + j + 1).TrimStart();
|
||||
if (rest.Length > 0 && (rest.Substring(0, 1) == rest.Substring(0, 1).ToUpper()))
|
||||
{
|
||||
splitPos = mid + j;
|
||||
break;
|
||||
{
|
||||
splitPos = mid + j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -386,7 +386,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
splitPos = mid;
|
||||
s = s.Insert(mid - 1, "-");
|
||||
}
|
||||
if (splitPos < s.Length-2)
|
||||
if (splitPos < s.Length - 2)
|
||||
s = s.Substring(0, splitPos).TrimEnd() + Environment.NewLine + s.Substring(splitPos).Trim();
|
||||
return s.TrimEnd();
|
||||
}
|
||||
@ -447,7 +447,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
while (s.ToLower().Contains("<font"))
|
||||
{
|
||||
int startIndex = s.ToLower().IndexOf("<font");
|
||||
int endIndex = Math.Max(s.IndexOf(">"), startIndex + 4);
|
||||
int endIndex = Math.Max(s.IndexOf(">"), startIndex + 4);
|
||||
s = s.Remove(startIndex, (endIndex - startIndex) + 1);
|
||||
}
|
||||
return s;
|
||||
@ -455,7 +455,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
|
||||
public static Encoding GetEncodingFromFile(string fileName)
|
||||
{
|
||||
Encoding encoding = Encoding.Default;
|
||||
Encoding encoding = Encoding.Default;
|
||||
try
|
||||
{
|
||||
var file = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
@ -464,13 +464,13 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
file.Position = 0;
|
||||
file.Read(bom, 0, 12);
|
||||
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf)
|
||||
encoding = Encoding.UTF8;
|
||||
encoding = Encoding.UTF8;
|
||||
else if (bom[0] == 0xff && bom[1] == 0xfe)
|
||||
encoding = Encoding.Unicode;
|
||||
encoding = Encoding.Unicode;
|
||||
else if (bom[0] == 0xfe && bom[1] == 0xff) // utf-16 and ucs-2
|
||||
encoding = Encoding.BigEndianUnicode;
|
||||
encoding = Encoding.BigEndianUnicode;
|
||||
else if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) // ucs-4
|
||||
encoding = Encoding.UTF32;
|
||||
encoding = Encoding.UTF32;
|
||||
else if (encoding == Encoding.Default && file.Length > 12)
|
||||
{
|
||||
int length = (int)file.Length;
|
||||
@ -535,7 +535,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
byte b = buffer[i];
|
||||
if (b > 127)
|
||||
{
|
||||
if (b >= 194 && b <=223 && buffer[i+1] >= 128 && buffer[i+1] <= 191)
|
||||
if (b >= 194 && b <= 223 && buffer[i + 1] >= 128 && buffer[i + 1] <= 191)
|
||||
{ // 2-byte sequence
|
||||
utf8Count++;
|
||||
i++;
|
||||
@ -1300,7 +1300,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
word = word.Trim();
|
||||
if (word.Length > 1)
|
||||
{
|
||||
var localNamesEtc = new List<string>();
|
||||
var localNamesEtc = new List<string>();
|
||||
string userNamesEtcXmlFileName = LoadLocalNamesEtc(localNamesEtc, localNamesEtc, languageName);
|
||||
|
||||
if (localNamesEtc.Contains(word))
|
||||
@ -1322,14 +1322,14 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
{
|
||||
XmlNode node = namesEtcDoc.CreateElement("name");
|
||||
node.InnerText = name;
|
||||
de.AppendChild(node);
|
||||
de.AppendChild(node);
|
||||
}
|
||||
namesEtcDoc.Save(userNamesEtcXmlFileName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static string LoadNamesEtcWordLists(List<string> namesEtcList, List<string> namesEtcMultiWordList, string languageName)
|
||||
{
|
||||
@ -1452,7 +1452,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
string s = string.Empty;
|
||||
|
||||
if (uppercase)
|
||||
s += Configuration.Settings.General.UppercaseLetters;
|
||||
s += Configuration.Settings.General.UppercaseLetters;
|
||||
|
||||
if (lowercase)
|
||||
s += Configuration.Settings.General.UppercaseLetters.ToLower();
|
||||
@ -1498,7 +1498,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
case 20: return Color.Maroon;
|
||||
default:
|
||||
return Color.Black;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static int GetNumber0To7FromUserName(string userName)
|
||||
@ -1514,7 +1514,7 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
return (int)(number % 8);
|
||||
}
|
||||
|
||||
internal static string GetRegExGroup( string regEx)
|
||||
internal static string GetRegExGroup(string regEx)
|
||||
{
|
||||
int start = regEx.IndexOf("(?<");
|
||||
if (start >= 0 && regEx.IndexOf(")", start) > start)
|
||||
@ -1530,27 +1530,12 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
return null;
|
||||
}
|
||||
|
||||
internal static string HtmlEncode(string value)
|
||||
{
|
||||
// call the normal HtmlEncode first
|
||||
char[] chars = System.Web.HttpUtility.HtmlEncode(value).ToCharArray();
|
||||
StringBuilder encodedValue = new StringBuilder();
|
||||
foreach (char c in chars)
|
||||
{
|
||||
if (c > 127) // above normal ASCII
|
||||
encodedValue.Append("&#" + (int)c + ";");
|
||||
else
|
||||
encodedValue.Append(c);
|
||||
}
|
||||
return encodedValue.ToString();
|
||||
}
|
||||
|
||||
internal static string LowerCaseVowels
|
||||
{
|
||||
get
|
||||
{
|
||||
get
|
||||
{
|
||||
return "aeiouyæøåéóáôèòæøåäöïɤəɛʊʉɨ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static void SetButtonHeight(Control control, int newHeight, int level)
|
||||
@ -1696,6 +1681,394 @@ namespace Nikse.SubtitleEdit.Logic
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// HTML-encodes a string
|
||||
/// </summary>
|
||||
/// <param name="text">Text string to encode</param>
|
||||
/// <returns>HTML-encoded text</returns>
|
||||
internal static string HtmlEncode(string text)
|
||||
{
|
||||
if (text == null)
|
||||
return string.Empty;
|
||||
StringBuilder sb = new StringBuilder(text.Length);
|
||||
int len = text.Length;
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
switch (text[i])
|
||||
{
|
||||
case '<':
|
||||
sb.Append("<");
|
||||
break;
|
||||
case '>':
|
||||
sb.Append(">");
|
||||
break;
|
||||
case '"':
|
||||
sb.Append(""");
|
||||
break;
|
||||
case '&':
|
||||
sb.Append("&");
|
||||
break;
|
||||
default:
|
||||
if (text[i] > 127)
|
||||
sb.Append("&#" + (int)text[i] + ";");
|
||||
else
|
||||
sb.Append(text[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// HTML-decodes a string
|
||||
/// </summary>
|
||||
/// <param name="text">Text string to encode</param>
|
||||
/// <returns>HTML-decoded text</returns>
|
||||
internal static string HtmlDecode(string text)
|
||||
{
|
||||
if (text == null)
|
||||
return string.Empty;
|
||||
|
||||
StringBuilder sb = new StringBuilder(text.Length);
|
||||
|
||||
int len = text.Length;
|
||||
int i = 0;
|
||||
while (i < len)
|
||||
{
|
||||
char c = text[i];
|
||||
int nextSemiColon = text.IndexOf(';', i+1);
|
||||
if (c == '&' && nextSemiColon > 0 && nextSemiColon <= i + 8)
|
||||
{
|
||||
string code = text.Substring(i + 1, nextSemiColon - (i+1));
|
||||
i += code.Length + 2;
|
||||
switch (code) // http://www.html-entities.com/ + http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
|
||||
{
|
||||
case "lt":
|
||||
sb.Append('<');
|
||||
break;
|
||||
case "gt":
|
||||
sb.Append('>');
|
||||
break;
|
||||
case "quot":
|
||||
sb.Append('"');
|
||||
break;
|
||||
case "amp":
|
||||
sb.Append('&');
|
||||
break;
|
||||
case "apos":
|
||||
sb.Append("'");
|
||||
break;
|
||||
case "nbsp":
|
||||
sb.Append(" ");
|
||||
break;
|
||||
case "ndash":
|
||||
sb.Append("–");
|
||||
break;
|
||||
case "mdash":
|
||||
sb.Append("—");
|
||||
break;
|
||||
case "iexcl":
|
||||
sb.Append("¡");
|
||||
break;
|
||||
case "iquest":
|
||||
sb.Append("¿");
|
||||
break;
|
||||
case "ldquo":
|
||||
sb.Append("“");
|
||||
break;
|
||||
case "rdquo":
|
||||
sb.Append("”");
|
||||
break;
|
||||
case "‘":
|
||||
sb.Append("‘");
|
||||
break;
|
||||
case "rsquo":
|
||||
sb.Append("’");
|
||||
break;
|
||||
case "laquo":
|
||||
sb.Append("«");
|
||||
break;
|
||||
case "raquo":
|
||||
sb.Append("»");
|
||||
break;
|
||||
case "cent":
|
||||
sb.Append("¢");
|
||||
break;
|
||||
case "copy":
|
||||
sb.Append("©");
|
||||
break;
|
||||
case "divide":
|
||||
sb.Append("÷");
|
||||
break;
|
||||
case "micro":
|
||||
sb.Append("µ");
|
||||
break;
|
||||
case "middot":
|
||||
sb.Append("·");
|
||||
break;
|
||||
case "para":
|
||||
sb.Append("¶");
|
||||
break;
|
||||
case "plusmn":
|
||||
sb.Append("±");
|
||||
break;
|
||||
case "euro":
|
||||
sb.Append("€");
|
||||
break;
|
||||
case "pound":
|
||||
sb.Append("£");
|
||||
break;
|
||||
case "reg":
|
||||
sb.Append("®");
|
||||
break;
|
||||
case "sect":
|
||||
sb.Append("§");
|
||||
break;
|
||||
case "trade":
|
||||
sb.Append("™");
|
||||
break;
|
||||
case "yen":
|
||||
sb.Append("¥");
|
||||
break;
|
||||
case "aacute":
|
||||
sb.Append("á ");
|
||||
break;
|
||||
case "Aacute":
|
||||
sb.Append("Á");
|
||||
break;
|
||||
case "agrave":
|
||||
sb.Append("à");
|
||||
break;
|
||||
case "Agrave":
|
||||
sb.Append("À");
|
||||
break;
|
||||
case "acirc":
|
||||
sb.Append("â");
|
||||
break;
|
||||
case "Acirc":
|
||||
sb.Append("Â");
|
||||
break;
|
||||
case "aring":
|
||||
sb.Append("å ");
|
||||
break;
|
||||
case "Aring":
|
||||
sb.Append("Å");
|
||||
break;
|
||||
case "atilde":
|
||||
sb.Append("ã");
|
||||
break;
|
||||
case "Atilde":
|
||||
sb.Append("Ã");
|
||||
break;
|
||||
case "auml":
|
||||
sb.Append("ä");
|
||||
break;
|
||||
case "Auml":
|
||||
sb.Append("Ä");
|
||||
break;
|
||||
case "aelig":
|
||||
sb.Append("æ");
|
||||
break;
|
||||
case "AElig":
|
||||
sb.Append("Æ");
|
||||
break;
|
||||
case "ccedil":
|
||||
sb.Append("ç");
|
||||
break;
|
||||
case "Ccedil":
|
||||
sb.Append("Ç");
|
||||
break;
|
||||
case "eacute":
|
||||
sb.Append("é");
|
||||
break;
|
||||
case "Eacute":
|
||||
sb.Append("É");
|
||||
break;
|
||||
case "egrave":
|
||||
sb.Append("è");
|
||||
break;
|
||||
case "Egrave":
|
||||
sb.Append("È");
|
||||
break;
|
||||
case "ecirc":
|
||||
sb.Append("ê");
|
||||
break;
|
||||
case "Ecirc":
|
||||
sb.Append("Ê");
|
||||
break;
|
||||
case "euml":
|
||||
sb.Append("ë");
|
||||
break;
|
||||
case "Euml":
|
||||
sb.Append("Ë");
|
||||
break;
|
||||
case "iacute":
|
||||
sb.Append("í");
|
||||
break;
|
||||
case "Iacute":
|
||||
sb.Append("Í");
|
||||
break;
|
||||
case "igrave":
|
||||
sb.Append("ì");
|
||||
break;
|
||||
case "Igrave":
|
||||
sb.Append("Ì");
|
||||
break;
|
||||
case "icirc":
|
||||
sb.Append("î");
|
||||
break;
|
||||
case "Icirc":
|
||||
sb.Append("Î");
|
||||
break;
|
||||
case "iuml":
|
||||
sb.Append("iuml");
|
||||
break;
|
||||
case "Iuml":
|
||||
sb.Append("Ï");
|
||||
break;
|
||||
case "ntilde":
|
||||
sb.Append("ñ");
|
||||
break;
|
||||
case "Ntilde":
|
||||
sb.Append("Ñ");
|
||||
break;
|
||||
case "oacute":
|
||||
sb.Append("ó");
|
||||
break;
|
||||
case "Oacute":
|
||||
sb.Append("Ó");
|
||||
break;
|
||||
case "ograve":
|
||||
sb.Append("ò");
|
||||
break;
|
||||
case "Ograve":
|
||||
sb.Append("Ò");
|
||||
break;
|
||||
case "ocirc":
|
||||
sb.Append("ô");
|
||||
break;
|
||||
case "Ocirc":
|
||||
sb.Append("Ô");
|
||||
break;
|
||||
case "oslash":
|
||||
sb.Append("ø");
|
||||
break;
|
||||
case "Oslash":
|
||||
sb.Append("Ø");
|
||||
break;
|
||||
case "otilde":
|
||||
sb.Append("õ");
|
||||
break;
|
||||
case "Otilde":
|
||||
sb.Append("Õ");
|
||||
break;
|
||||
case "ouml":
|
||||
sb.Append("ö");
|
||||
break;
|
||||
case "Ouml":
|
||||
sb.Append("Ö");
|
||||
break;
|
||||
case "szlig":
|
||||
sb.Append("ß");
|
||||
break;
|
||||
case "uacute":
|
||||
sb.Append("ú");
|
||||
break;
|
||||
case "Uacute":
|
||||
sb.Append("Ú");
|
||||
break;
|
||||
case "ugrave":
|
||||
sb.Append("ù");
|
||||
break;
|
||||
case "Ugrave":
|
||||
sb.Append("Ù");
|
||||
break;
|
||||
case "ucirc":
|
||||
sb.Append("û");
|
||||
break;
|
||||
case "Ucirc":
|
||||
sb.Append("Û");
|
||||
break;
|
||||
case "uuml":
|
||||
sb.Append("ü");
|
||||
break;
|
||||
case "Uuml":
|
||||
sb.Append("Ü");
|
||||
break;
|
||||
case "yuml":
|
||||
sb.Append("ÿ");
|
||||
break;
|
||||
case "":
|
||||
sb.Append("");
|
||||
break;
|
||||
default:
|
||||
code = code.TrimStart('#');
|
||||
if (code.StartsWith("x") || code.StartsWith("X"))
|
||||
{
|
||||
code = code.TrimStart('x');
|
||||
code = code.TrimStart('X');
|
||||
try
|
||||
{
|
||||
int value = Convert.ToInt32(code, 16);
|
||||
sb.Append(Convert.ToChar(value));
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
else if (IsInteger(code))
|
||||
{
|
||||
sb.Append(Convert.ToChar(int.Parse(code)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(c);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UrlEncodes a string without the requirement for System.Web
|
||||
/// </summary>
|
||||
public static string UrlEncode(string text)
|
||||
{
|
||||
return System.Uri.EscapeDataString(text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// UrlDecodes a string without requiring System.Web
|
||||
/// </summary>
|
||||
public static string UrlDecode(string text)
|
||||
{
|
||||
// pre-process for + sign space formatting since System.Uri doesn't handle it
|
||||
// plus literals are encoded as %2b normally so this should be safe
|
||||
text = text.Replace("+", " ");
|
||||
return System.Uri.UnescapeDataString(text);
|
||||
}
|
||||
|
||||
internal static bool IsWordInUserPhrases(List<string> userPhraseList, int index, string[] words)
|
||||
{
|
||||
string current = words[index];
|
||||
string prev = "-";
|
||||
if (index > 0)
|
||||
prev = words[index-1];
|
||||
string next = "-";
|
||||
if (index < words.Length-1)
|
||||
next = words[index+1];
|
||||
foreach (string userPhrase in userPhraseList)
|
||||
{
|
||||
if (userPhrase == current + " " + next)
|
||||
return true;
|
||||
if (userPhrase == prev + " " + current)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user