Exemple #1
0
 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));
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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));
            }
        }
Exemple #6
0
 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;
 }
Exemple #7
0
 public static byte[] ConstructYamlBinary(IConstructor ctor, Node node) {
     string val = ctor.ConstructScalar(node).ToString().Replace("\r", "").Replace("\n", "");
     return Convert.FromBase64String(val);
 }
Exemple #8
0
 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);
     }
 }
Exemple #9
0
        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);
            }
        }
Exemple #10
0
 public static string ConstructYamlStr(IConstructor ctor, Node node) {
     string value = ctor.ConstructScalar(node).ToString();
     return value.Length != 0 ? value : null;
 }
Exemple #11
0
        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);            
        }
Exemple #12
0
 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;
 }
Exemple #13
0
        public static byte[] ConstructYamlBinary(IConstructor ctor, Node node)
        {
            string val = ctor.ConstructScalar(node).ToString().Replace("\r", "").Replace("\n", "");

            return(Convert.FromBase64String(val));
        }
Exemple #14
0
        public static string ConstructYamlStr(IConstructor ctor, Node node)
        {
            string value = ctor.ConstructScalar(node).ToString();

            return(value.Length != 0 ? value : null);
        }