public static string ToPascalCase(string str) { ArgumentGuard.NotEmpty(str, nameof(str)); return(str.Substring(0, 1).ToUpper() + str.Substring(1).ToLower()); }
public static void TrimNotEmpty(ref string param, string paramName) { ArgumentGuard.NotNull(param, paramName); param = param.Trim(); ArgumentGuard.NotEmpty(param, paramName); }
/// <summary> /// Parses the input user-agent string. /// </summary> /// <param name="userAgent">User agent string to parse</param> /// <param name="unknowns">Whether to treat unknown products as <c>Unknown</c> or /// throw exceptions</param> public static UserAgent ParseUserAgentString(string userAgent, bool unknowns = true) { ArgumentGuard.NotNull(userAgent, nameof(userAgent)); userAgent = userAgent.Trim(); var result = new UserAgent(); result.OriginalUserAgentString = userAgent; // OS var oss = new Dictionary <string, Match>(); var matches = OSRegex_.Matches(userAgent); foreach (Match m in matches) { oss[m.Groups["os"].Value.ToLowerInvariant()] = m; } Match osmatch = null; if (matches.Count == 0) { if (unknowns) { result.OS = OSNames.Unknown; } else { throw new NotSupportedException("Unknown OS: {0}".Fmt(userAgent)); } } else { if (oss.Count > 1 && oss.ContainsKey("android")) { osmatch = oss["android"]; } else { osmatch = oss.First().Value; } result.OS = osmatch.Groups["os"].Value; result.OSMajorVersion = osmatch.Groups["major"].Value; result.OSMinorVersion = osmatch.Groups["minor"].Value; if (!string.IsNullOrWhiteSpace(result.OSMajorVersion) && string.IsNullOrWhiteSpace(result.OSMinorVersion)) { result.OSMinorVersion = "0"; } } // OS Normalization if (result.OS.StartsWithOrdinal("CPU")) { result.OS = OSNames.IOS; } else if (result.OS == "Windows XP") { result.OS = OSNames.Windows; result.OSMajorVersion = "5"; result.OSMinorVersion = "1"; } else if (result.OS == "Windows 2000") { result.OS = OSNames.Windows; result.OSMajorVersion = "5"; result.OSMinorVersion = "0"; } else if (result.OS == "Windows NT") { result.OS = OSNames.Windows; if (result.OSMajorVersion == "6" && result.OSMinorVersion == "1") { result.OSMajorVersion = "7"; result.OSMinorVersion = "0"; } else if (string.IsNullOrWhiteSpace(result.OSMajorVersion)) { result.OSMajorVersion = "4"; result.OSMinorVersion = "0"; } } else if (result.OS == "Mac_PowerPC") { result.OS = OSNames.Macintosh; } else if (result.OS == "CrOS") { result.OS = OSNames.ChromeOS; } // Browser var browserMatch = BrowserRegex_.Match(userAgent); result.Browser = browserMatch.Groups["product"].Value; result.BrowserMajorVersion = browserMatch.Groups["major"].Value; result.BrowserMinorVersion = browserMatch.Groups["minor"].Value; var browserOK = browserMatch.Success; if (result.OS == OSNames.Windows) { var edgeMatch = Edge_.Match(userAgent); if (edgeMatch.Success) { result.Browser = BrowserNames.Edge; result.BrowserMajorVersion = edgeMatch.Groups["major"].Value; result.BrowserMinorVersion = edgeMatch.Groups["minor"].Value; } // IE11 and later is "hidden" on purpose. // http://blogs.msdn.com/b/ieinternals/archive/2013/09/21/ // internet-explorer-11-user-agent-string-ua-string-sniffing- // compatibility-with-gecko-webkit.aspx var iematch = HiddenIE_.Match(userAgent); if (iematch.Success) { result.Browser = BrowserNames.IE; result.BrowserMajorVersion = iematch.Groups["major"].Value; result.BrowserMinorVersion = iematch.Groups["minor"].Value; browserOK = true; } } if (!browserOK) { if (unknowns) { result.Browser = "Unknown"; } else { throw new NotSupportedException("Unknown browser: {0}".Fmt(userAgent)); } } // Explicit browser version (if available) var versionMatch = VerRegex_.Match(userAgent); if (versionMatch.Success) { result.BrowserMajorVersion = versionMatch.Groups["major"].Value; result.BrowserMinorVersion = versionMatch.Groups["minor"].Value; } return(result); }
/// <summary> /// Returns the full path to the folder containing the input assembly. /// </summary> public static string GetAssemblyFolder(Assembly assembly) { ArgumentGuard.NotNull(assembly, nameof(assembly)); return(Path.GetFullPath(Path.GetDirectoryName(assembly.Location))); }
public Url(Uri baseUri) : base(ArgumentGuard.NotNull(baseUri, nameof(baseUri)).ToString()) { }