using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace SubSonic.Sugar
{
public static class Strings
{
private static readonly Dictionary<int, string> _entityTable = new Dictionary<int, string>();
static Strings()
{
FillEntities();
}
/// <summary>
/// Strips the last specified chars from a a string.
/// </summary>
/// <param name="s">The s.</param>
/// <returns></returns>
public static string Chop(string s, int removeFromEnd) {
string result = s;
if (s.Length > removeFromEnd - 1)
result.Remove(s.Length - removeFromEnd, removeFromEnd);
return result;
}
/// <summary>
/// Strips the last char from a a string.
/// </summary>
/// <param name="s">The s.</param>
/// <returns></returns>
public static string Chop(string s) {
return Chop(s, 1);
}
/// <summary>
/// Returns text that is located between the startText and endText tags.
/// </summary>
/// <param name="startText">The text from which to start the crop</param>
/// <param name="endText">The endpoint of the crop</param>
/// <returns></returns>
public static string Crop(string input, string startText, string endText) {
string sIn = input;
string sOut = "";
int cropStart = sIn.ToLower().IndexOf(startText.ToLower());
try {
sIn = sIn.Remove(0, cropStart);
sIn = sIn.Replace(startText, "");
int cropEnd = sIn.ToLower().IndexOf(endText.ToLower());
sOut = sIn.Substring(0, cropEnd);
} catch {
sOut = "";
}
return sOut;
}
public static string Squeeze(string input) {
char[] delim ={ ' ' };
string[] lines = input.Split(delim, StringSplitOptions.RemoveEmptyEntries);
StringBuilder sb = new StringBuilder();
foreach (string s in lines) {
if (!String.IsNullOrEmpty(s.Trim())) {
sb.Append(s + " ");
}
}
//remove the last pipe
string result = Chop(sb.ToString());
return result.Trim();
}
/// <summary>
/// Creates a string array based on the words in a sentence
/// </summary>
/// <param name="s">The string to parse</param>
/// <returns></returns>
public static string[] ToWords(string s) {
string result = s.Trim();
return result.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
}
/// <summary>
/// Strips all HTML tags from a string
/// </summary>
/// <param name="htmlString"></param>
/// <returns></returns>
public static string StripHTML(string htmlString) {
return StripHTML(htmlString, string.Empty);
}
/// <summary>
/// Strips all HTML tags from a string and replaces the tags with the specified replacement
/// </summary>
/// <param name="htmlString"></param>
/// <param name="htmlPlaceHolder"></param>
/// <returns></returns>
public static string StripHTML(string htmlString, string htmlPlaceHolder) {
string pattern = @"<(.|\n)*?>";
string sOut = Regex.Replace(htmlString, pattern, htmlPlaceHolder);
sOut = sOut.Replace(" ", "");
sOut = sOut.Replace("&", "&");
sOut = sOut.Replace(">", ">");
sOut = sOut.Replace("<", "<");
return sOut;
}
[Obsolete("Will be removed in future versions. Use Validation.IsEmail instead")]
public static bool IsValidEmail(string emailAddressString)
{
return Validation.IsEmail(emailAddressString);
}
/// <summary>
/// Convert string to proper case
/// </summary>
/// <param name="sIn">The string to be converted</param>
/// <returns></returns>
public static string ToProper(string sIn)
{
string propertyName = Inflector.ToPascalCase(sIn);
if (propertyName.EndsWith("TypeCode"))
{
propertyName = propertyName.Substring(0, propertyName.Length - 4);
}
return propertyName;
}
/// <summary>
/// Camels to proper.
/// </summary>
/// <param name="sIn">The s in.</param>
/// <returns></returns>
public static string CamelToProper(string sIn)
{
return Utilities.Utility.ParseCamelToProper(sIn);
}
/// <summary>
/// Plurals to singular.
/// </summary>
/// <param name="sIn">The s in.</param>
/// <returns></returns>
public static string PluralToSingular(string sIn)
{
return Inflector.MakeSingular(sIn);
}
/// <summary>
/// Singulars to plural.
/// </summary>
/// <param name="sIn">The s in.</param>
/// <returns></returns>
public static string SingularToPlural(string sIn)
{
return Inflector.MakePlural(sIn);
}
/// <summary>
/// Strips the specified input.
/// </summary>
/// <param name="input">The input text</param>
/// <param name="stripValue">The strip value.</param>
/// <returns></returns>
public static string Strip(string input, string stripValue)
{
if (!String.IsNullOrEmpty(stripValue))
{
string[] replace = stripValue.Split(new char[] { ',' });
for (int i = 0; i < replace.Length; i++)
{
if (!String.IsNullOrEmpty(input))
{
input = Regex.Replace(input, replace[i], String.Empty);
}
}
}
return input;
}
/// <summary>
/// Replaces most non-alpha-numeric chars
/// </summary>
/// <param name="sIn"></param>
/// <returns></returns>
public static string StripNonAlphaNumeric(string sIn)
{
return Utilities.Utility.StripNonAlphaNumeric(sIn);
}
public static string AsciiToUnicode(int asciiCode)
{
Encoding ascii = Encoding.UTF32;
char c = (char)asciiCode;
Byte[] b = ascii.GetBytes(c.ToString());
return ascii.GetString((b));
}
public static string TextToEntity(string textString)
{
foreach(KeyValuePair<int, string> key in _entityTable)
{
textString = textString.Replace(AsciiToUnicode(key.Key), key.Value);
}
return textString.Replace(AsciiToUnicode(38), "&");
}
public static string EntityToText(string entityText)
{
entityText = entityText.Replace("&", "&");
foreach (KeyValuePair<int, string> key in _entityTable)
{
entityText = entityText.Replace(key.Value, AsciiToUnicode(key.Key));
}
return entityText;
}
private static void FillEntities()
{
_entityTable.Add(160, " ");
_entityTable.Add(161, "¡");
_entityTable.Add(162, "¢");
_entityTable.Add(163, "£");
_entityTable.Add(164, "¤");
_entityTable.Add(165, "¥");
_entityTable.Add(166, "¦");
_entityTable.Add(167, "§");
_entityTable.Add(168, "¨");
_entityTable.Add(169, "©");
_entityTable.Add(170, "ª");
_entityTable.Add(171, "«");
_entityTable.Add(172, "¬");
_entityTable.Add(173, "­");
_entityTable.Add(174, "®");
_entityTable.Add(175, "¯");
_entityTable.Add(176, "°");
_entityTable.Add(177, "±");
_entityTable.Add(178, "²");
_entityTable.Add(179, "³");
_entityTable.Add(180, "´");
_entityTable.Add(181, "µ");
_entityTable.Add(182, "¶");
_entityTable.Add(183, "·");
_entityTable.Add(184, "¸");
_entityTable.Add(185, "¹");
_entityTable.Add(186, "º");
_entityTable.Add(187, "»");
_entityTable.Add(188, "¼");
_entityTable.Add(189, "½");
_entityTable.Add(190, "¾");
_entityTable.Add(191, "¿");
_entityTable.Add(192, "À");
_entityTable.Add(193, "Á");
_entityTable.Add(194, "Â");
_entityTable.Add(195, "Ã");
_entityTable.Add(196, "Ä");
_entityTable.Add(197, "Å");
_entityTable.Add(198, "Æ");
_entityTable.Add(199, "Ç");
_entityTable.Add(200, "È");
_entityTable.Add(201, "É");
_entityTable.Add(202, "Ê");
_entityTable.Add(203, "Ë");
_entityTable.Add(204, "Ì");
_entityTable.Add(205, "Í");
_entityTable.Add(206, "Î");
_entityTable.Add(207, "Ï");
_entityTable.Add(208, "Ð");
_entityTable.Add(209, "Ñ");
_entityTable.Add(210, "Ò");
_entityTable.Add(211, "Ó");
_entityTable.Add(212, "Ô");
_entityTable.Add(213, "Õ");
_entityTable.Add(214, "Ö");
_entityTable.Add(215, "×");
_entityTable.Add(216, "Ø");
_entityTable.Add(217, "Ù");
_entityTable.Add(218, "Ú");
_entityTable.Add(219, "Û");
_entityTable.Add(220, "Ü");
_entityTable.Add(221, "Ý");
_entityTable.Add(222, "Þ");
_entityTable.Add(223, "ß");
_entityTable.Add(224, "à");
_entityTable.Add(225, "á");
_entityTable.Add(226, "â");
_entityTable.Add(227, "ã");
_entityTable.Add(228, "ä");
_entityTable.Add(229, "å");
_entityTable.Add(230, "æ");
_entityTable.Add(231, "ç");
_entityTable.Add(232, "è");
_entityTable.Add(233, "é");
_entityTable.Add(234, "ê");
_entityTable.Add(235, "ë");
_entityTable.Add(236, "ì");
_entityTable.Add(237, "í");
_entityTable.Add(238, "î");
_entityTable.Add(239, "ï");
_entityTable.Add(240, "ð");
_entityTable.Add(241, "ñ");
_entityTable.Add(242, "ò");
_entityTable.Add(243, "ó");
_entityTable.Add(244, "ô");
_entityTable.Add(245, "õ");
_entityTable.Add(246, "ö");
_entityTable.Add(247, "÷");
_entityTable.Add(248, "ø");
_entityTable.Add(249, "ù");
_entityTable.Add(250, "ú");
_entityTable.Add(251, "û");
_entityTable.Add(252, "ü");
_entityTable.Add(253, "ý");
_entityTable.Add(254, "þ");
_entityTable.Add(255, "ÿ");
_entityTable.Add(402, "ƒ");
_entityTable.Add(913, "Α");
_entityTable.Add(914, "Β");
_entityTable.Add(915, "Γ");
_entityTable.Add(916, "Δ");
_entityTable.Add(917, "Ε");
_entityTable.Add(918, "Ζ");
_entityTable.Add(919, "Η");
_entityTable.Add(920, "Θ");
_entityTable.Add(921, "Ι");
_entityTable.Add(922, "Κ");
_entityTable.Add(923, "Λ");
_entityTable.Add(924, "Μ");
_entityTable.Add(925, "Ν");
_entityTable.Add(926, "Ξ");
_entityTable.Add(927, "Ο");
_entityTable.Add(928, "Π");
_entityTable.Add(929, "Ρ");
_entityTable.Add(931, "Σ");
_entityTable.Add(932, "Τ");
_entityTable.Add(933, "Υ");
_entityTable.Add(934, "Φ");
_entityTable.Add(935, "Χ");
_entityTable.Add(936, "Ψ");
_entityTable.Add(937, "Ω");
_entityTable.Add(945, "α");
_entityTable.Add(946, "β");
_entityTable.Add(947, "γ");
_entityTable.Add(948, "δ");
_entityTable.Add(949, "ε");
_entityTable.Add(950, "ζ");
_entityTable.Add(951, "η");
_entityTable.Add(952, "θ");
_entityTable.Add(953, "ι");
_entityTable.Add(954, "κ");
_entityTable.Add(955, "λ");
_entityTable.Add(956, "μ");
_entityTable.Add(957, "ν");
_entityTable.Add(958, "ξ");
_entityTable.Add(959, "ο");
_entityTable.Add(960, "π");
_entityTable.Add(961, "ρ");
_entityTable.Add(962, "ς");
_entityTable.Add(963, "σ");
_entityTable.Add(964, "τ");
_entityTable.Add(965, "υ");
_entityTable.Add(966, "φ");
_entityTable.Add(967, "χ");
_entityTable.Add(968, "ψ");
_entityTable.Add(969, "ω");
_entityTable.Add(977, "ϑ");
_entityTable.Add(978, "ϒ");
_entityTable.Add(982, "ϖ");
_entityTable.Add(8226, "•");
_entityTable.Add(8230, "…");
_entityTable.Add(8242, "′");
_entityTable.Add(8243, "″");
_entityTable.Add(8254, "‾");
_entityTable.Add(8260, "⁄");
_entityTable.Add(8472, "℘");
_entityTable.Add(8465, "ℑ");
_entityTable.Add(8476, "ℜ");
_entityTable.Add(8482, "™");
_entityTable.Add(8501, "ℵ");
_entityTable.Add(8592, "←");
_entityTable.Add(8593, "↑");
_entityTable.Add(8594, "→");
_entityTable.Add(8595, "↓");
_entityTable.Add(8596, "↔");
_entityTable.Add(8629, "↵");
_entityTable.Add(8656, "⇐");
_entityTable.Add(8657, "⇑");
_entityTable.Add(8658, "⇒");
_entityTable.Add(8659, "⇓");
_entityTable.Add(8660, "⇔");
_entityTable.Add(8704, "∀");
_entityTable.Add(8706, "∂");
_entityTable.Add(8707, "∃");
_entityTable.Add(8709, "∅");
_entityTable.Add(8711, "∇");
_entityTable.Add(8712, "∈");
_entityTable.Add(8713, "∉");
_entityTable.Add(8715, "∋");
_entityTable.Add(8719, "∏");
_entityTable.Add(8721, "∑");
_entityTable.Add(8722, "−");
_entityTable.Add(8727, "∗");
_entityTable.Add(8730, "√");
_entityTable.Add(8733, "∝");
_entityTable.Add(8734, "∞");
_entityTable.Add(8736, "∠");
_entityTable.Add(8743, "∧");
_entityTable.Add(8744, "∨");
_entityTable.Add(8745, "∩");
_entityTable.Add(8746, "∪");
_entityTable.Add(8747, "∫");
_entityTable.Add(8756, "∴");
_entityTable.Add(8764, "∼");
_entityTable.Add(8773, "≅");
_entityTable.Add(8776, "≈");
_entityTable.Add(8800, "≠");
_entityTable.Add(8801, "≡");
_entityTable.Add(8804, "≤");
_entityTable.Add(8805, "≥");
_entityTable.Add(8834, "⊂");
_entityTable.Add(8835, "⊃");
_entityTable.Add(8836, "⊄");
_entityTable.Add(8838, "⊆");
_entityTable.Add(8839, "⊇");
_entityTable.Add(8853, "⊕");
_entityTable.Add(8855, "⊗");
_entityTable.Add(8869, "⊥");
_entityTable.Add(8901, "⋅");
_entityTable.Add(8968, "⌈");
_entityTable.Add(8969, "⌉");
_entityTable.Add(8970, "⌊");
_entityTable.Add(8971, "⌋");
_entityTable.Add(9001, "⟨");
_entityTable.Add(9002, "⟩");
_entityTable.Add(9674, "◊");
_entityTable.Add(9824, "♠");
_entityTable.Add(9827, "♣");
_entityTable.Add(9829, "♥");
_entityTable.Add(9830, "♦");
_entityTable.Add(34, """);
//_entityTable.Add(38, "&");
_entityTable.Add(60, "<");
_entityTable.Add(62, ">");
_entityTable.Add(338, "Œ");
_entityTable.Add(339, "œ");
_entityTable.Add(352, "Š");
_entityTable.Add(353, "š");
_entityTable.Add(376, "Ÿ");
_entityTable.Add(710, "ˆ");
_entityTable.Add(732, "˜");
_entityTable.Add(8194, " ");
_entityTable.Add(8195, " ");
_entityTable.Add(8201, " ");
_entityTable.Add(8204, "‌");
_entityTable.Add(8205, "‍");
_entityTable.Add(8206, "‎");
_entityTable.Add(8207, "‏");
_entityTable.Add(8211, "–");
_entityTable.Add(8212, "—");
_entityTable.Add(8216, "‘");
_entityTable.Add(8217, "’");
_entityTable.Add(8218, "‚");
_entityTable.Add(8220, "“");
_entityTable.Add(8221, "”");
_entityTable.Add(8222, "„");
_entityTable.Add(8224, "†");
_entityTable.Add(8225, "‡");
_entityTable.Add(8240, "‰");
_entityTable.Add(8249, "‹");
_entityTable.Add(8250, "›");
_entityTable.Add(8364, "€");
}
[Obsolete("Will be removed in future versions. Use Validation.IsAlpha instead")]
public static bool IsAlpha(string s)
{
return Validation.IsAlpha(s);
}
[Obsolete("Will be removed in future versions. Use Validation.IsAlphaNumeric instead")]
public static bool IsAlphaNumeric(string s)
{
return Validation.IsAlphaNumeric(s);
}
}
}