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); }
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); }
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); }
public override void visit(string_const _string_const) { text = "Value: " + _string_const.Value; }
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); }
public virtual void visit(string_const _string_const) { }
public override void visit(string_const _string_const) { AddPossibleComments(_string_const, true, true); }
public override void visit(string_const _string_const) { }
public override void visit(string_const _string_const) { executer.visit(_string_const); if (_string_const.attributes != null) this.visit((dynamic)_string_const.attributes); }