Пример #1
0
 public static string ResolveEscapeCharacters(string orig, StringConstantType quoteType)
 {
     // look at this: http://technet.microsoft.com/en-us/library/hh847755.aspx
     // it's the about_Escape_Characters page which shows that escape characters are different in PS
     var value = orig;
     if (quoteType.Equals(StringConstantType.DoubleQuoted))
     {
         var sb = new StringBuilder(value.Length);
         for (int i = 0; i < value.Length; i++)
         {
             // TODO: It *should* be safe here to use the index i + 1 because we cannot have a string
             // literal ending in ` or " when it's not part of an escape sequence.
             // Should we check anyway? If so, how?
             if (value[i] == '"' && value[i + 1] == '"')
             {
                 sb.Append('"');
                 // Skip the next character
                 i++;
             }
             else if (value[i] == '`')
             {
                 switch (value[i + 1])
                 {
                     case '0': sb.Append('\0'); break;
                     case 't': sb.Append('\t'); break;
                     case 'b': sb.Append('\b'); break;
                     case 'f': sb.Append('\f'); break;
                     case 'v': sb.Append('\v'); break;
                     case 'n': sb.Append('\n'); break;
                     case 'r': sb.Append('\r'); break;
                     case 'a': sb.Append('\a'); break;
                     case '\'':
                     case '$':
                     case '"':
                     case '`':
                     default:
                         sb.Append(value[i + 1]);
                         break;
                 }
                 // Skip the next character
                 i++;
             }
             else
             {
                 sb.Append(value[i]);
             }
         }
         value = sb.ToString();
     }
     else if (quoteType.Equals(StringConstantType.SingleQuoted))
     {
         value = value.Replace("''", "'");
     }
     return value;
 }
Пример #2
0
        public static string ResolveEscapeCharacters(string orig, StringConstantType quoteType)
        {
            // look at this: http://technet.microsoft.com/en-us/library/hh847755.aspx
            // it's the about_Escape_Characters page which shows that escape characters are different in PS
            var value = orig;

            if (quoteType.Equals(StringConstantType.DoubleQuoted))
            {
                foreach (var tuple in _escapeCharacterReplacements)
                {
                    value = tuple.Item1.Replace(value, tuple.Item2);
                }
            }
            else if (quoteType.Equals(StringConstantType.SingleQuoted))
            {
                value = value.Replace("''", "'");
            }
            return(value);
        }
Пример #3
0
        public static string ResolveEscapeCharacters(string orig, StringConstantType quoteType)
        {
            // look at this: http://technet.microsoft.com/en-us/library/hh847755.aspx
            // it's the about_Escape_Characters page which shows that escape characters are different in PS
            var value = orig;

            if (quoteType.Equals(StringConstantType.DoubleQuoted))
            {
                var sb = new StringBuilder(value.Length);
                for (int i = 0; i < value.Length; i++)
                {
                    // TODO: It *should* be safe here to use the index i + 1 because we cannot have a string
                    // literal ending in ` or " when it's not part of an escape sequence.
                    // Should we check anyway? If so, how?
                    if (value[i] == '"' && value[i + 1] == '"')
                    {
                        sb.Append('"');
                        // Skip the next character
                        i++;
                    }
                    else if (value[i] == '`')
                    {
                        switch (value[i + 1])
                        {
                        case '0': sb.Append('\0'); break;

                        case 't': sb.Append('\t'); break;

                        case 'b': sb.Append('\b'); break;

                        case 'f': sb.Append('\f'); break;

                        case 'v': sb.Append('\v'); break;

                        case 'n': sb.Append('\n'); break;

                        case 'r': sb.Append('\r'); break;

                        case 'a': sb.Append('\a'); break;

                        case '\'':
                        case '$':
                        case '"':
                        case '`':
                        default:
                            sb.Append(value[i + 1]);
                            break;
                        }
                        // Skip the next character
                        i++;
                    }
                    else
                    {
                        sb.Append(value[i]);
                    }
                }
                value = sb.ToString();
            }
            else if (quoteType.Equals(StringConstantType.SingleQuoted))
            {
                value = value.Replace("''", "'");
            }
            return(value);
        }