コード例 #1
0
ファイル: StringScanner.cs プロジェクト: ltwlf/IronSP
        // TODO: encodings
        public override string ToString()
        {
            // #<StringScanner 0/11 @ "test ...">
            byte[]        scanstr = ScanString.ToByteArray();
            StringBuilder sb      = new StringBuilder("#<StringScanner ");

            if (CurrentPosition >= Length || CurrentPosition < 0)
            {
                sb.Append("fin >");
                return(sb.ToString());
            }

            sb.AppendFormat("{0}/{1}", CurrentPosition, scanstr.Length);
            if (CurrentPosition > 0)
            {
                sb.Append(" \"");
                int len = CurrentPosition;
                if (len > 5)
                {
                    len = 5;
                    sb.Append("...");
                }
                for (int i = CurrentPosition - len; i < CurrentPosition; i++)
                {
                    MutableString.AppendCharRepresentation(sb, scanstr[i], -1,
                                                           MutableString.Escape.Octal | MutableString.Escape.NonAscii | MutableString.Escape.Special, '"', -1
                                                           );
                }
                sb.Append('"');
            }
            sb.Append(" @ ");
            if (CurrentPosition < scanstr.Length)
            {
                int  len      = scanstr.Length - CurrentPosition;
                bool ellipsis = false;
                if (len > 5)
                {
                    len      = 5;
                    ellipsis = true;
                }
                sb.Append('"');
                for (int i = CurrentPosition; i < CurrentPosition + len; i++)
                {
                    MutableString.AppendCharRepresentation(sb, scanstr[i], -1,
                                                           MutableString.Escape.Octal | MutableString.Escape.NonAscii | MutableString.Escape.Special, '"', -1
                                                           );
                }
                if (ellipsis)
                {
                    sb.Append("...");
                }
                sb.Append('"');
            }
            sb.Append('>');
            return(sb.ToString());
        }