示例#1
0
        public MutableString ReadLineOrParagraph(MutableString separator, RubyEncoding /*!*/ encoding, bool preserveEndOfLines, int limit)
        {
            ContractUtils.Requires(limit >= 0);

            if (limit == 0)
            {
                return(MutableString.CreateEmpty());
            }
            else if (separator == null)
            {
                var result = MutableString.CreateBinary();
                return(AppendBytes(result, limit, preserveEndOfLines) == 0 ? null : result);
            }
            else if (separator.StartsWith('\n') && separator.GetLength() == 1)
            {
                return(ReadLine(encoding, preserveEndOfLines, limit));
            }
            else if (separator.IsEmpty)
            {
                return(ReadParagraph(encoding, preserveEndOfLines, limit));
            }
            else
            {
                return(ReadLine(separator, encoding, preserveEndOfLines, limit));
            }
        }
示例#2
0
 public RubyRegex()
 {
     _pattern = MutableString.CreateEmpty();
     _options = RubyRegexOptions.NONE;
 }
示例#3
0
 public static MutableString /*!*/ ToString(object self)
 {
     Debug.Assert(self == null);
     return(MutableString.CreateEmpty());
 }
示例#4
0
        public static MutableString /*!*/ FormatTime(RubyContext /*!*/ context, RubyTime /*!*/ self,
                                                     [DefaultProtocol, NotNull] MutableString /*!*/ format)
        {
            MutableString result   = MutableString.CreateMutable(format.Encoding);
            bool          inFormat = false;

            var charEnum = format.GetCharacters();

            while (charEnum.MoveNext())
            {
                var character = charEnum.Current;
                int c         = character.IsValid ? character.Value : -1;

                if (!inFormat)
                {
                    if (c == '%')
                    {
                        inFormat = true;
                    }
                    else
                    {
                        result.Append(character);
                    }
                    continue;
                }
                inFormat = false;
                string dateTimeFormat = null;
                switch (c)
                {
                case '%':
                    result.Append('%');
                    break;

                case 'a':
                    dateTimeFormat = "ddd";
                    break;

                case 'A':
                    dateTimeFormat = "dddd";
                    break;

                case 'b':
                    dateTimeFormat = "MMM";
                    break;

                case 'B':
                    dateTimeFormat = "MMMM";
                    break;

                case 'c':
                    dateTimeFormat = "g";
                    break;

                case 'd':
                    dateTimeFormat = "dd";
                    break;

                case 'D':
                    dateTimeFormat = "MM/dd/yy";
                    break;

                case 'e': {     // Day of the month, blank-padded ( 1..31)
                    int day = self.DateTime.Day;
                    if (day < 10)
                    {
                        result.Append(' ');
                    }
                    result.Append(day.ToString(CultureInfo.InvariantCulture));
                    break;
                }

                case 'H':
                    dateTimeFormat = "HH";
                    break;

                case 'I':
                    dateTimeFormat = "hh";
                    break;

                case 'j':
                    result.AppendFormat("{0:000}", self.DateTime.DayOfYear);
                    break;

                case 'l': {
                    int hour = self.DateTime.Hour;
                    if (hour == 0)
                    {
                        hour = 12;
                    }
                    else if (hour > 12)
                    {
                        hour -= 12;
                    }
                    if (hour < 10)
                    {
                        result.Append(' ');
                    }
                    result.Append(hour.ToString(CultureInfo.InvariantCulture));
                    break;
                }

                case 'm':
                    dateTimeFormat = "MM";
                    break;

                case 'M':
                    dateTimeFormat = "mm";
                    break;

                case 'p':
                    dateTimeFormat = "tt";
                    break;

                case 'S':
                    dateTimeFormat = "ss";
                    break;

                case 'T':
                    dateTimeFormat = "HH:mm:ss";
                    break;

                case 'U':
                    FormatDayOfWeek(result, self.DateTime, 7);
                    break;

                case 'W':
                    FormatDayOfWeek(result, self.DateTime, 8);
                    break;

                case 'w':
                    result.Append(((int)self.DateTime.DayOfWeek).ToString(CultureInfo.InvariantCulture));
                    break;

                case 'x':
                    dateTimeFormat = "d";
                    break;

                case 'X':
                    dateTimeFormat = "t";
                    break;

                case 'y':
                    dateTimeFormat = "yy";
                    break;

                case 'Y':
                    dateTimeFormat = "yyyy";
                    break;

                case 'Z':
                    dateTimeFormat = "%K";
                    break;

                case 'z':
                    if (context.RubyOptions.Compatibility > RubyCompatibility.Ruby186)
                    {
                        result.Append(self.FormatUtcOffset());
                    }
                    else
                    {
                        result.Append(RubyTime.GetCurrentZoneName());
                    }
                    break;

                default:
                    if (context.RubyOptions.Compatibility > RubyCompatibility.Ruby186)
                    {
                        result.Append(character);
                        break;
                    }
                    return(MutableString.CreateEmpty());
                }

                if (dateTimeFormat != null)
                {
                    result.Append(self.ToString(dateTimeFormat, CultureInfo.InvariantCulture));
                }
            }

            if (inFormat)
            {
                if (context.RubyOptions.Compatibility > RubyCompatibility.Ruby186)
                {
                    return(result.Append('%'));
                }
                return(MutableString.CreateEmpty());
            }

            return(result);
        }