public static bool TryConstructYamlBool(IConstructor ctor, Node node, out bool result) { if (BOOL_VALUES.TryGetValue(ctor.ConstructScalar(node).ToString(), out result)) { return(true); } return(false); }
public static Range ConstructRubyRange(IConstructor /*!*/ ctor, Node node) { object begin = null; object end = null; bool excludeEnd = false; ScalarNode scalar = node as ScalarNode; if (scalar != null) { string value = scalar.Value; int dotsIdx; if ((dotsIdx = value.IndexOf("...")) != -1) { begin = ParseObject(ctor, value.Substring(0, dotsIdx)); end = ParseObject(ctor, value.Substring(dotsIdx + 3)); excludeEnd = true; } else if ((dotsIdx = value.IndexOf("..")) != -1) { begin = ParseObject(ctor, value.Substring(0, dotsIdx)); end = ParseObject(ctor, value.Substring(dotsIdx + 2)); } else { throw new ConstructorException("Invalid Range: " + value); } } else { MappingNode mapping = node as MappingNode; if (mapping == null) { throw new ConstructorException("Invalid Range: " + node); } foreach (KeyValuePair <Node, Node> n in mapping.Nodes) { string key = ctor.ConstructScalar(n.Key).ToString(); switch (key) { case "begin": begin = ctor.ConstructObject(n.Value); break; case "end": end = ctor.ConstructObject(n.Value); break; case "excl": TryConstructYamlBool(ctor, n.Value, out excludeEnd); break; default: throw new ConstructorException(string.Format("'{0}' is not allowed as an instance variable name for class Range", key)); } } } return(new Range(ctor.Scope.RubyContext, begin, end, excludeEnd)); }
public static object ConstructYamlInt(IConstructor ctor, Node node) { string value = ctor.ConstructScalar(node).ToString().Replace("_", "").Replace(",", ""); int sign = +1; char first = value[0]; if (first == '-') { sign = -1; value = value.Substring(1); } else if (first == '+') { value = value.Substring(1); } int @base = 10; if (value == "0") { return(0); } else if (value.StartsWith("0b")) { value = value.Substring(2); @base = 2; } else if (value.StartsWith("0x")) { value = value.Substring(2); @base = 16; } else if (value.StartsWith("0")) { value = value.Substring(1); @base = 8; } else if (value.IndexOf(':') != -1) { string[] digits = value.Split(':'); int bes = 1; int val = 0; for (int i = 0, j = digits.Length; i < j; i++) { val += (int.Parse(digits[(j - i) - 1]) * bes); bes *= 60; } return(sign * val); } try { // LiteralParser.ParseInteger delegate handles parsing & conversion to BigInteger (if needed) return(LiteralParser.ParseInteger(sign, value, @base)); } catch (Exception e) { throw new ConstructorException(string.Format("Could not parse integer value: '{0}' (sign {1}, base {2})", value, sign, @base), e); } }
public static object ConstructRubyScalar(IConstructor ctor, Node node) { object value = ctor.ConstructScalar(node); if (value == null) { return(value); } string str = value as string; if (str != null) { return(MutableString.Create(str)); } return(value); }
public static object ConstructYamlFloat(IConstructor ctor, Node node) { string value = ctor.ConstructScalar(node).ToString().Replace("_", "").Replace(",", ""); int sign = +1; char first = value[0]; if (first == '-') { sign = -1; value = value.Substring(1); } else if (first == '+') { value = value.Substring(1); } string valLower = value.ToLower(); if (valLower == ".inf") { return(sign == -1 ? double.NegativeInfinity : double.PositiveInfinity); } else if (valLower == ".nan") { return(double.NaN); } else if (value.IndexOf(':') != -1) { string[] digits = value.Split(':'); int bes = 1; double val = 0.0; for (int i = 0, j = digits.Length; i < j; i++) { val += (double.Parse(digits[(j - i) - 1]) * bes); bes *= 60; } return(sign * val); } else { return(sign * double.Parse(value)); } }
public static bool TryConstructYamlBool(IConstructor ctor, Node node, out bool result) { if (BOOL_VALUES.TryGetValue(ctor.ConstructScalar(node).ToString(), out result)) { return true; } return false; }
public static byte[] ConstructYamlBinary(IConstructor ctor, Node node) { string val = ctor.ConstructScalar(node).ToString().Replace("\r", "").Replace("\n", ""); return Convert.FromBase64String(val); }
public static object ConstructYamlFloat(IConstructor ctor, Node node) { string value = ctor.ConstructScalar(node).ToString().Replace("_", "").Replace(",", ""); int sign = +1; char first = value[0]; if (first == '-') { sign = -1; value = value.Substring(1); } else if (first == '+') { value = value.Substring(1); } string valLower = value.ToLower(); if (valLower == ".inf") { return sign == -1 ? double.NegativeInfinity : double.PositiveInfinity; } else if (valLower == ".nan") { return double.NaN; } else if (value.IndexOf(':') != -1) { string[] digits = value.Split(':'); int bes = 1; double val = 0.0; for (int i = 0, j = digits.Length; i < j; i++) { val += (double.Parse(digits[(j - i) - 1]) * bes); bes *= 60; } return sign * val; } else { return sign * double.Parse(value); } }
public static object ConstructYamlInt(IConstructor ctor, Node node) { string value = ctor.ConstructScalar(node).ToString().Replace("_","").Replace(",",""); int sign = +1; char first = value[0]; if(first == '-') { sign = -1; value = value.Substring(1); } else if(first == '+') { value = value.Substring(1); } int @base = 10; if (value == "0") { return 0; } else if (value.StartsWith("0b")) { value = value.Substring(2); @base = 2; } else if (value.StartsWith("0x")) { value = value.Substring(2); @base = 16; } else if (value.StartsWith("0")) { value = value.Substring(1); @base = 8; } else if (value.IndexOf(':') != -1) { string[] digits = value.Split(':'); int bes = 1; int val = 0; for (int i = 0, j = digits.Length; i < j; i++) { val += (int.Parse(digits[(j - i) - 1]) * bes); bes *= 60; } return sign*val; } try { // LiteralParser.ParseInteger delegate handles parsing & conversion to BigInteger (if needed) return LiteralParser.ParseInteger(sign, value, @base); } catch (Exception e) { throw new ConstructorException(string.Format("Could not parse integer value: '{0}' (sign {1}, base {2})", value, sign, @base), e); } }
public static string ConstructYamlStr(IConstructor ctor, Node node) { string value = ctor.ConstructScalar(node).ToString(); return value.Length != 0 ? value : null; }
public static Range ConstructRubyRange(IConstructor/*!*/ ctor, Node node) { object begin = null; object end = null; bool excludeEnd = false; ScalarNode scalar = node as ScalarNode; if (scalar != null) { string value = scalar.Value; int dotsIdx; if ((dotsIdx = value.IndexOf("...")) != -1) { begin = ParseObject(ctor, value.Substring(0, dotsIdx)); end = ParseObject(ctor, value.Substring(dotsIdx + 3)); excludeEnd = true; } else if ((dotsIdx = value.IndexOf("..")) != -1) { begin = ParseObject(ctor, value.Substring(0, dotsIdx)); end = ParseObject(ctor, value.Substring(dotsIdx + 2)); } else { throw new ConstructorException("Invalid Range: " + value); } } else { MappingNode mapping = node as MappingNode; if (mapping == null) { throw new ConstructorException("Invalid Range: " + node); } foreach (KeyValuePair<Node, Node> n in mapping.Nodes) { string key = ctor.ConstructScalar(n.Key).ToString(); switch (key) { case "begin": begin = ctor.ConstructObject(n.Value); break; case "end": end = ctor.ConstructObject(n.Value); break; case "excl": TryConstructYamlBool(ctor, n.Value, out excludeEnd); break; default: throw new ConstructorException(string.Format("'{0}' is not allowed as an instance variable name for class Range", key)); } } } var comparisonStorage = new BinaryOpStorage(); return new Range(comparisonStorage, ctor.GlobalScope.Context, begin, end, excludeEnd); }
public static object ConstructRubyScalar(IConstructor ctor, Node node) { object value = ctor.ConstructScalar(node); if (value == null) { return value; } string str = value as string; if (str != null) { return MutableString.Create(str); } return value; }
public static byte[] ConstructYamlBinary(IConstructor ctor, Node node) { string val = ctor.ConstructScalar(node).ToString().Replace("\r", "").Replace("\n", ""); return(Convert.FromBase64String(val)); }
public static string ConstructYamlStr(IConstructor ctor, Node node) { string value = ctor.ConstructScalar(node).ToString(); return(value.Length != 0 ? value : null); }