/// <summary> /// Ctor /// </summary> /// <param name="jsonName"></param> public JsonNameAttribute(string jsonName) { #if !NO_ECMASCRIPT this.jsonName = EcmaScriptIdentifier.EnsureValidIdentifier(jsonName, false); #else this.jsonName = jsonName; #endif }
public override bool Equals(object obj) { EcmaScriptIdentifier ecmaScriptIdentifier = obj as EcmaScriptIdentifier; if (ecmaScriptIdentifier == null) { return(base.Equals(obj)); } return((string.IsNullOrEmpty(this.identifier) && string.IsNullOrEmpty(ecmaScriptIdentifier.identifier)) || StringComparer.Ordinal.Equals(this.identifier, ecmaScriptIdentifier.identifier)); }
protected override void WriteObjectPropertyName(string name) { if (EcmaScriptIdentifier.IsValidIdentifier(name, false)) { base.TextWriter.Write(name); } else { base.WriteObjectPropertyName(name); } }
protected override void WriteObjectPropertyName(string name) { if (EcmaScriptIdentifier.IsValidIdentifier(name, false)) { // write out without quoting this.TextWriter.Write(name); } else { // write out as an escaped string base.WriteObjectPropertyName(name); } }
/// <summary> /// Verifies is a valid EcmaScript variable expression. /// </summary> /// <param name="varExpr">the variable expression</param> /// <returns>varExpr</returns> /// <remarks> /// http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf /// /// IdentifierName = /// IdentifierStart | IdentifierName IdentifierPart /// IdentifierStart = /// Letter | '$' | '_' /// IdentifierPart = /// IdentifierStart | Digit /// </remarks> public static bool IsValidIdentifier(string varExpr, bool nested) { if (String.IsNullOrEmpty(varExpr)) { return(false); } if (nested) { string[] parts = varExpr.Split('.'); foreach (string part in parts) { if (!EcmaScriptIdentifier.IsValidIdentifier(part, false)) { return(false); } } return(true); } if (EcmaScriptIdentifier.IsReservedWord(varExpr)) { return(false); } bool indentPart = false; foreach (char ch in varExpr) { if (indentPart && Char.IsDigit(ch)) { // digits are only allowed after first char continue; } // can be start or part if (Char.IsLetter(ch) || ch == '_' || ch == '$') { indentPart = true; continue; } return(false); } return(true); }
/// <summary> /// Compares the identifiers. /// </summary> /// <param name="obj"></param> /// <returns></returns> public override bool Equals(object obj) { EcmaScriptIdentifier that = obj as EcmaScriptIdentifier; if (that == null) { return(base.Equals(obj)); } if (String.IsNullOrEmpty(this.identifier) && String.IsNullOrEmpty(that.identifier)) { // null and String.Empty are equivalent return(true); } return(StringComparer.Ordinal.Equals(this.identifier, that.identifier)); }
public static bool IsValidIdentifier(string varExpr, bool nested) { if (string.IsNullOrEmpty(varExpr)) { return(false); } if (nested) { string[] array = varExpr.Split(new char[] { '.' }); string[] array2 = array; for (int i = 0; i < array2.Length; i++) { string varExpr2 = array2[i]; if (!EcmaScriptIdentifier.IsValidIdentifier(varExpr2, false)) { return(false); } } return(true); } if (EcmaScriptIdentifier.IsReservedWord(varExpr)) { return(false); } bool flag = false; for (int j = 0; j < varExpr.Length; j++) { char c = varExpr[j]; if (!flag || !char.IsDigit(c)) { if (!char.IsLetter(c) && c != '_' && c != '$') { return(false); } flag = true; } } return(true); }
/// <summary> /// Ensures is a valid EcmaScript variable expression. /// </summary> /// <param name="varExpr">the variable expression</param> /// <returns>varExpr</returns> public static string EnsureValidIdentifier(string varExpr, bool nested, bool throwOnEmpty) { if (String.IsNullOrEmpty(varExpr)) { if (throwOnEmpty) { throw new ArgumentException("Variable expression is empty."); } return(String.Empty); } varExpr = varExpr.Replace(" ", ""); if (!EcmaScriptIdentifier.IsValidIdentifier(varExpr, nested)) { throw new ArgumentException("Variable expression \"" + varExpr + "\" is not supported."); } return(varExpr); }
/// <summary> /// Ensures is a valid EcmaScript variable expression. /// </summary> /// <param name="varExpr">the variable expression</param> /// <returns>varExpr</returns> public static string EnsureValidIdentifier(string varExpr, bool nested) { return(EcmaScriptIdentifier.EnsureValidIdentifier(varExpr, nested, true)); }
/// <summary> /// Ctor /// </summary> public EcmaScriptIdentifier(string ident) { this.identifier = String.IsNullOrEmpty(ident) ? String.Empty : EcmaScriptIdentifier.EnsureValidIdentifier(ident, true); }
/// <summary> /// Ctor /// </summary> /// <param name="jsonName"></param> public JsonNameAttribute(string jsonName) { this.jsonName = EcmaScriptIdentifier.EnsureValidIdentifier(jsonName, false); }
public EcmaScriptIdentifier(string ident) { this.identifier = ((!string.IsNullOrEmpty(ident)) ? EcmaScriptIdentifier.EnsureValidIdentifier(ident, true) : string.Empty); }