Esempio n. 1
0
        protected static bool WrapIfTooLong(ref StringSlice text, int lineLen)
        {
            if (text.Length < lineLen)
            {
                return(false);
            }
            var ret = new StringBuilder(text.Length + Environment.NewLine.Length * text.Length / lineLen);

            for (var idx = 0; idx < text.Length;)
            {
                var len = Math.Min(lineLen, text.Length - idx);
                text.SubString(idx, len).Append(ret);
                ret.AppendLine();
                idx += len;
            }
            text = new StringSlice(ret.ToString());
            return(true);
        }
Esempio n. 2
0
        public int TO_INT(StringSlice str, int idx, int len)
        {
            StringSlice tmp = str.SubString(idx, len);

            return(ParseInt(tmp.Buffer, tmp.StartIndex, tmp.Length));
        }
Esempio n. 3
0
            public static int EnumLines(StringSlice txt, Func <StringSlice, int, bool> callback)
            {
                int  currentIdx   = 0;
                bool lastWasR     = false;
                int  currentStart = 0;

                for (int i = 0; i < txt.Length; ++i)
                {
                    bool yieldLine       = false;
                    int  newCurrentStart = currentStart;
                    int  currentEnd      = 0;
                    switch (txt[i])
                    {
                    case '\r':
                        if (lastWasR)
                        {
                            yieldLine       = true;
                            newCurrentStart = i;
                            currentEnd      = i - 1;
                        }
                        lastWasR = true;
                        break;

                    case '\n':
                        yieldLine = true;
                        if (lastWasR)
                        {
                            currentEnd = i - 1;
                        }
                        else
                        {
                            currentEnd = i;
                        }
                        lastWasR        = false;
                        newCurrentStart = i + 1;
                        break;

                    default:
                        if (lastWasR)
                        {
                            yieldLine       = true;
                            newCurrentStart = i;
                            currentEnd      = i - 1;
                        }
                        lastWasR = false;
                        break;
                    }
                    if (yieldLine)
                    {
                        if (callback != null)
                        {
                            if (!callback(txt.SubString(currentStart, currentEnd - currentStart), currentIdx))
                            {
                                return(currentIdx + 1);
                            }
                        }
                        ++currentIdx;
                        currentStart = newCurrentStart;
                    }
                }
                if (lastWasR)
                {
                    if (callback != null)
                    {
                        if (!callback(txt.SubString(currentStart, txt.Length - currentStart - 1), currentIdx))
                        {
                            return(currentIdx + 1);
                        }
                    }
                    ++currentIdx;
                }
                else
                {
                    if (callback != null)
                    {
                        callback(txt.SubString(currentStart, txt.Length - currentStart), currentIdx);
                    }
                }
                return(currentIdx + 1);
            }