public static string ToStringLiteral(string s, EcmaScriptStringLiteralCharacters characters)
        {
            if (characters == EcmaScriptStringLiteralCharacters.SingleString)
            {
                return('\'' + ToSingleStringCharacters(s) + '\'');
            }

            if (characters == EcmaScriptStringLiteralCharacters.DoubleString)
            {
                return('"' + ToDoubleStringCharacters(s) + '"');
            }

            throw new ArgumentException();
        }
        private static string ToStringCharacters(string s, EcmaScriptStringLiteralCharacters stringLiteralStringCharacters)
        {
            char[] forbiddenCharacters = (((char)stringLiteralStringCharacters) + "\\\r\u2028\u2029\n").ToCharArray();

            var sb = new StringBuilder();

            foreach (var c in s)
            {
                if (c == (char)stringLiteralStringCharacters)
                {
                    sb.Append("\\" + (char)stringLiteralStringCharacters);
                }
                else if (c == '\u000A')
                {
                    sb.Append(@"\n");
                }
                else if (c == '\u000D')
                {
                    sb.Append(@"\r");
                }
                else if (c == '\\')
                {
                    sb.Append(@"\\");
                }
                else if (forbiddenCharacters.Contains(c))
                {
                    sb.Append(@"\u" + ((short)c).ToString("X4"));
                }
                else
                {
                    sb.Append(c);
                }
            }

            return(sb.ToString());
        }