private string FormatString(PrimitiveType type, object value)
{
string format;
switch (type.Domain)
{
case Domain.SignedInt:
return "{0}";
case Domain.Character:
switch (type.Size)
{
case 1: format = "'{0}'"; break;
case 2: format = "L'{0}'"; break;
default: throw new ArgumentOutOfRangeException("Only character types of size 1 and 2 are supported.");
}
var ch = Convert.ToChar(value);
if (Char.IsControl(ch))
return string.Format(format, string.Format("\\x{0:X2}", (int) ch));
else if (ch == '\'' || ch == '\\')
return string.Format(format, string.Format("\\{0}", ch));
return format;
default:
return UnsignedFormatString(type, Convert.ToUInt64(value));
}
}