string ConstantString(int index) { LuaValue constant = Constants[index]; string s; if (constant == null) { return("nil"); } else if (constant.TryToString(out s)) { StringBuilder escapedString = new StringBuilder(); escapedString.Append("\""); int start = 0; for (int c = 0; c < s.Length; ++c) { if (s[c] == '"' || s[c] == '\\' || Char.IsControl(s[c])) { escapedString.Append(s, start, c - start); start = c + 1; switch (s[c]) { case '"': escapedString.Append("\\\""); break; case '\0': escapedString.Append("\\0"); break; case '\a': escapedString.Append("\\a"); break; case '\b': escapedString.Append("\\b"); break; case '\f': escapedString.Append("\\f"); break; case '\n': escapedString.Append("\\n"); break; case '\r': escapedString.Append("\\r"); break; case '\t': escapedString.Append("\\t"); break; case '\v': escapedString.Append("\\v"); break; default: byte[] utf8 = Encoding.UTF8.GetBytes(s[c].ToString()); foreach (byte b in utf8) { escapedString.AppendFormat("\\x{0:X2}", b); } break; } } } escapedString.Append(s, start, s.Length - start); escapedString.Append("\""); return(escapedString.ToString()); } else { return(String.Format("#{0}", constant)); } }
protected static bool CastToString(LuaValue v, out string value) { if (v == null) { value = String.Empty; return(false); } return(v.TryToString(out value)); }