public override void CaseAStringConstExp(AStringConstExp node) { List<string> strings = new List<string>(); StringBuilder name = new StringBuilder(""); bool previousWasUnicode = false; foreach (char c in node.GetStringLiteral().Text) { if (c > 0xFF) { byte[] utf8Bytes = Encoding.UTF8.GetBytes(c.ToString()); foreach (byte b in utf8Bytes) { name.Append("\\x"); name.AppendFormat("{0:x2}", b); } previousWasUnicode = true; } else { if (previousWasUnicode && ((c >= '0' && c <= '9') || (char.ToLower(c) >= 'a' && char.ToLower(c) <= 'f'))) { strings.Add(name.ToString()); name.Clear(); } name.Append(c); previousWasUnicode = false; } } strings.Add(name.ToString()); if (strings.Count == 1) node.GetStringLiteral().Text = name.ToString(); else { strings[0] = strings[0].Remove(0, 1); strings[strings.Count - 1] = strings[strings.Count - 1].Substring(0, strings[strings.Count - 1].Length - 1); AStringConstExp left = new AStringConstExp(new TStringLiteral("\"" + strings[0] + "\"")); strings.RemoveAt(0); data.StringsDontJoinRight.Add(left); data.ExpTypes[left] = new ANamedType(new TIdentifier("string"), null); node.ReplaceBy(Combine(left, strings)); } }
public override void CaseAStringConstExp(AStringConstExp node) { Write(node.GetStringLiteral().Text); }
public override void CaseAStringConstExp(AStringConstExp node) { InAStringConstExp(node); if (node.GetStringLiteral() != null) { node.GetStringLiteral().Apply(this); } OutAStringConstExp(node); }
public override void CaseAStringConstExp(AStringConstExp node) { Value += node.GetStringLiteral().Text; }