public literal create_format_string_const(string text, SourceContext sc)
        {
            literal lt;

            text = ReplaceSpecialSymbols(text.Substring(2, text.Length - 3));
            lt   = new string_const(text);
            lt.source_context = sc;
            return(lt);
        }
Example #2
0
        public expression NewFormatString(string_const str)
        {
            try
            {
                method_call mc = new method_call();
                mc.dereferencing_value = new dot_node(new ident("string", str.source_context), new ident("Format", str.source_context), str.source_context);
                mc.parameters          = new expression_list();
                //string[] arr = Regex.Split(str.Value, @"\{[\w\d._]+\}");
                //Match match = Regex.Match(str.Value, @"\{[\w\d._]+\}");
                string[]      arr   = Regex.Split(str.Value, @"\{[^\}]+\}");
                Match         match = Regex.Match(str.Value, @"\{[^\}]+\}");
                List <string> vars  = new List <string>();
                //Dictionary<string, int> var_offsets = new Dictionary<string, int>();
                List <int> var_offsets = new List <int>();
                while (match.Success)
                {
                    string s = match.Value.Replace("{", "").Replace("}", "");
                    vars.Add(s);
                    var_offsets.Add(match.Index);
                    match = match.NextMatch();
                }
                if (vars.Count == 0)
                {
                    parsertools.errors.Add(new bad_format_string(parsertools.CurrentFileName, str.source_context, str));
                    return(str);
                }

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < arr.Length; i++)
                {
                    sb.Append(arr[i]);
                    if (i < arr.Length - 1)
                    {
                        sb.Append("{" + i + "}");
                    }
                }
                mc.parameters.Add(new string_const(sb.ToString(), str.source_context), str.source_context);
                for (int i = 0; i < vars.Count; i++)
                {
                    string s    = vars[i];
                    var    expr = ParseExpression(new string('\n', str.source_context.begin_position.line_num - 1) + new string(' ', str.source_context.begin_position.column_num + var_offsets[i] + 2) + s, str.source_context.begin_position.line_num, str.source_context.begin_position.column_num + var_offsets[i] + 2);
                    expr.source_context.begin_position.line_num = str.source_context.begin_position.line_num;
                    expr.source_context.end_position.line_num   = str.source_context.end_position.line_num;
                    mc.parameters.Add(expr);
                }

                mc.source_context = str.source_context;
                return(mc);
            }
            catch (Exception ex)
            {
                parsertools.errors.Add(new bad_format_string(parsertools.CurrentFileName, str.source_context, str));
            }
            return(str);
        }
        public literal create_string_const(string text, SourceContext sc)
        {
            literal lt;

            if (text.Length == 3 && text[0] == '\'' && text[2] == '\'')
            {
                lt = new char_const(text[1]);
                lt.source_context = sc;
                return(lt);
            }
            text = ReplaceSpecialSymbols(text.Substring(1, text.Length - 2));
            lt   = new string_const(text);
            lt.source_context = sc;
            return(lt);
        }
Example #4
0
        public virtual literal create_string_const(string text, LexLocation loc)
        {
            literal lt;

            if (text.Length == 3 && text[0] == '\'' && text[2] == '\'')
            {
                lt = new char_const(text[1]);
                lt.source_context = GetTokenSourceContext(loc);
                return(lt);
            }
            string text1 = ReplaceSpecialSymbols(text.Substring(1, text.Length - 2));

            lt = new string_const(text1);
            lt.source_context = GetTokenSourceContext(loc);
            return(lt);
        }
        public expression NewFormatString(string_const str)
        {
            try
            {
                method_call mc = new method_call();
                mc.dereferencing_value = new dot_node(new ident("string", str.source_context), new ident("Format", str.source_context), str.source_context);
                mc.parameters          = new expression_list();
                if (!str.Value.Contains("{"))
                {
                    return(str);
                }
                string val = str.Value.Replace("{{", "![&").Replace("}}}", "}&]!").Replace("}}", "&]!");

                string[]      arr   = Regex.Split(val, @"\{[^\}]+\}");
                Match         match = Regex.Match(val, @"\{[^\}]+\}");
                List <string> vars  = new List <string>();
                //Dictionary<string, int> var_offsets = new Dictionary<string, int>();
                List <int> var_offsets = new List <int>();
                Dictionary <int, string> var_formats = new Dictionary <int, string>();
                int ind = 0;
                while (match.Success)
                {
                    string s             = match.Value.Replace("{", "").Replace("}", "");
                    int    colon_pos     = s.LastIndexOf(':');
                    int    comma_pos     = s.LastIndexOf(',');
                    int    bracket_pos   = s.LastIndexOf(')');
                    int    sqbracked_pos = s.LastIndexOf(']');
                    if (comma_pos != -1 && comma_pos > bracket_pos && comma_pos > sqbracked_pos)
                    {
                        colon_pos = comma_pos;
                    }
                    if (colon_pos != -1 && s.IndexOf('?') == -1 && s.Substring(colon_pos).IndexOf(']') == -1)
                    {
                        var_formats.Add(ind, s.Substring(colon_pos));
                        s = s.Substring(0, colon_pos);
                    }
                    if (s.IndexOf("&]!") != -1 || s.IndexOf("![&") != -1)
                    {
                        parsertools.errors.Add(new bad_format_string(parsertools.CurrentFileName, str.source_context, str));
                        return(str);
                    }
                    vars.Add(s);
                    var_offsets.Add(match.Index);
                    match = match.NextMatch();
                    ind++;
                }
                if (vars.Count == 0 && val.IndexOf("![&") == -1 && val.IndexOf("{") != -1)
                {
                    parsertools.errors.Add(new bad_format_string(parsertools.CurrentFileName, str.source_context, str));
                    return(str);
                }

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < arr.Length; i++)
                {
                    if (arr[i].IndexOf("{") != -1 || arr[i].IndexOf("}") != -1)
                    {
                        parsertools.errors.Add(new bad_format_string(parsertools.CurrentFileName, str.source_context, str));
                        return(str);
                    }
                    sb.Append(arr[i].Replace("![&", "{{").Replace("&]!", "}}"));
                    if (i < arr.Length - 1)
                    {
                        sb.Append("{" + i);
                        string fmt;
                        if (var_formats.TryGetValue(i, out fmt))
                        {
                            sb.Append(fmt);
                        }
                        sb.Append("}");
                    }
                }
                string str2 = sb.ToString();
                if (str2.Trim().EndsWith("{"))
                {
                    parsertools.errors.Add(new bad_format_string(parsertools.CurrentFileName, str.source_context, str));
                    return(str);
                }
                mc.parameters.Add(new string_const(str2, str.source_context), str.source_context);
                for (int i = 0; i < vars.Count; i++)
                {
                    string s    = vars[i];
                    var    expr = ParseExpression(new string('\n', str.source_context.begin_position.line_num - 1) + new string(' ', str.source_context.begin_position.column_num + var_offsets[i] + 2) + s, str.source_context.begin_position.line_num, str.source_context.begin_position.column_num + var_offsets[i] + 2);
                    if (expr == null)
                    {
                        var err = parsertools.errors[0] as LocatedError;
                        err.SourceContext.begin_position.line_num   = str.source_context.begin_position.line_num;
                        err.SourceContext.begin_position.column_num = str.source_context.begin_position.column_num + var_offsets[i] + vars[i].Length + 3;
                        return(str);
                    }
                    expr.source_context.begin_position.line_num = str.source_context.begin_position.line_num;
                    expr.source_context.end_position.line_num   = str.source_context.end_position.line_num;
                    mc.parameters.Add(expr);
                }

                mc.source_context = str.source_context;
                return(mc);
            }
            catch (Exception ex)
            {
                parsertools.errors.Add(new bad_format_string(parsertools.CurrentFileName, str.source_context, str));
            }
            return(str);
        }
Example #6
0
 public override void visit(string_const _string_const)
 {
     text = "Value: " + _string_const.Value;
 }
Example #7
0
 public virtual void visit(string_const _string_const)
 {
     DefaultVisit(_string_const);
 }
		public virtual void post_do_visit(string_const _string_const)
		{
		}
		public override void visit(string_const _string_const)
		{
			DefaultVisit(_string_const);
			pre_do_visit(_string_const);
			post_do_visit(_string_const);
		}
Example #10
0
 public virtual void visit(string_const _string_const)
 {
 }
Example #11
0
 public override void visit(string_const _string_const)
 {
     AddPossibleComments(_string_const, true, true);
 }
Example #12
0
		public virtual void visit(string_const _string_const)
		{
		}
		public virtual void visit(string_const _string_const)
		{
			DefaultVisit(_string_const);
		}
Example #14
0
 public override void visit(string_const _string_const)
 {
 }
Example #15
0
		public override void visit(string_const _string_const)
		{
			executer.visit(_string_const);
			if (_string_const.attributes != null)
				this.visit((dynamic)_string_const.attributes);
		}