Ejemplo n.º 1
0
        private static LineTermination DetectLineTermination(Stream stream, LineTermination defaultLineTermination)
        {
            int c;

            while ((c = stream.ReadByte()) != -1)
            {
                if (c == '\r')
                {
                    c = stream.ReadByte();

                    if (c != '\n')
                    {
                        return(LineTermination.Mac);
                    }
                    return(LineTermination.Pc);
                }
                else if (c == '\n')
                {
                    return(LineTermination.Unix);
                }
            }

            // The default when we don't have any line ending.

            return(defaultLineTermination);
        }
Ejemplo n.º 2
0
        public static void NormalizeLineTermination(StringBuilder target, string value, LineTermination mode)
        {
            if (target == null)
                throw new ArgumentNullException("target");
            if (value == null)
                return;

            string lineTermination = GetNewline(mode);

            for (int i = 0; i < value.Length; i++)
            {
                char c = value[i];
                switch (c)
                {
                    case '\r':
                        if (i < value.Length - 1 && value[i + 1] == '\n')
                            i++;
                        target.Append(lineTermination);
                        break;

                    case '\n':
                        target.Append(lineTermination);
                        break;

                    default:
                        target.Append(c);
                        break;
                }
            }
        }
Ejemplo n.º 3
0
        public TextFileType(Encoding encoding, LineTermination lineTermination)
            : base(FileTypeType.Text)
        {
            if (encoding == null)
                throw new ArgumentNullException("encoding");

            Encoding = encoding;
            LineTermination = lineTermination;
        }
Ejemplo n.º 4
0
        public TextFileType(Encoding encoding, LineTermination lineTermination)
            : base(FileTypeType.Text)
        {
            if (encoding == null)
            {
                throw new ArgumentNullException("encoding");
            }

            Encoding        = encoding;
            LineTermination = lineTermination;
        }
Ejemplo n.º 5
0
        public static string NormalizeLineTermination(string value, LineTermination mode)
        {
            if (value == null)
                return null;

            var sb = new StringBuilder();

            NormalizeLineTermination(sb, value, mode);

            return sb.ToString();
        }
Ejemplo n.º 6
0
        public static string NormalizeLineTermination(string value, LineTermination mode)
        {
            if (value == null)
            {
                return(null);
            }

            var sb = new StringBuilder();

            NormalizeLineTermination(sb, value, mode);

            return(sb.ToString());
        }
Ejemplo n.º 7
0
 public static string GetLineTermination(LineTermination mode)
 {
     switch (mode)
     {
         case LineTermination.Pc:
             return "\r\n";
         case LineTermination.Unix:
             return "\n";
         case LineTermination.Mac:
             return "\r";
         default:
             throw new ArgumentOutOfRangeException("mode");
     }
 }
Ejemplo n.º 8
0
        public static string GetNewline(LineTermination mode)
        {
            switch (mode)
            {
            case LineTermination.Pc:
                return("\r\n");

            case LineTermination.Unix:
                return("\n");

            case LineTermination.Mac:
                return("\r");

            default:
                throw new ArgumentOutOfRangeException("mode");
            }
        }
Ejemplo n.º 9
0
        public static TextFileType FromStream(Stream stream, string extension, Encoding defaultEncoding, LineTermination defaultLineTermination)
        {
            if (stream == null)
                throw new ArgumentNullException("stream");
            if (extension == null)
                throw new ArgumentNullException("extension");

            if (defaultEncoding == null)
                defaultEncoding = Encoding.ASCII;

            if (stream.Length == 0)
                return new TextFileType(defaultEncoding, defaultLineTermination);

            stream.Position = 0;

            var encoding = DetectEncoding(stream);

            if (encoding != null)
            {
                int bomSize = (int)stream.Position;
                byte[] bom = null;

                if (bomSize > 0)
                {
                    stream.Position = 0;
                    bom = new byte[bomSize];
                    stream.Read(bom, 0, bom.Length);
                }

                Debug.Assert(ArrayUtil.Equals(
                    bom ?? new byte[0],
                    encoding.GetPreamble()
                ));

                return new TextFileType(encoding, DetectLineTermination(stream, defaultLineTermination));
            }

            encoding = GuessEncoding(stream, defaultEncoding);

            if (encoding != null)
                return new TextFileType(encoding, DetectLineTermination(stream, defaultLineTermination));

            return null;
        }
Ejemplo n.º 10
0
        public static TextFileType FromStream(Stream stream, string extension, Encoding defaultEncoding, LineTermination defaultLineTermination)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (extension == null)
            {
                throw new ArgumentNullException("extension");
            }

            if (defaultEncoding == null)
            {
                defaultEncoding = Encoding.ASCII;
            }

            if (stream.Length == 0)
            {
                return(new TextFileType(defaultEncoding, defaultLineTermination));
            }

            stream.Position = 0;

            var encoding = DetectEncoding(stream);

            if (encoding != null)
            {
                int    bomSize = (int)stream.Position;
                byte[] bom     = null;

                if (bomSize > 0)
                {
                    stream.Position = 0;
                    bom             = new byte[bomSize];
                    stream.Read(bom, 0, bom.Length);
                }

                Debug.Assert(ArrayUtil.Equals(
                                 bom ?? new byte[0],
                                 encoding.GetPreamble()
                                 ));

                return(new TextFileType(encoding, DetectLineTermination(stream, defaultLineTermination)));
            }

            encoding = GuessEncoding(stream, defaultEncoding);

            if (encoding != null)
            {
                return(new TextFileType(encoding, DetectLineTermination(stream, defaultLineTermination)));
            }

            return(null);
        }
Ejemplo n.º 11
0
        private static LineTermination DetectLineTermination(Stream stream, LineTermination defaultLineTermination)
        {
            int c;

            while ((c = stream.ReadByte()) != -1)
            {
                if (c == '\r')
                {
                    c = stream.ReadByte();

                    if (c != '\n')
                        return LineTermination.Mac;
                    return LineTermination.Pc;
                }
                else if (c == '\n')
                {
                    return LineTermination.Unix;
                }
            }

            // The default when we don't have any line ending.

            return defaultLineTermination;
        }
Ejemplo n.º 12
0
        public static void NormalizeLineTermination(StringBuilder target, string value, LineTermination mode)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (value == null)
            {
                return;
            }

            string lineTermination = GetNewline(mode);

            for (int i = 0; i < value.Length; i++)
            {
                char c = value[i];
                switch (c)
                {
                case '\r':
                    if (i < value.Length - 1 && value[i + 1] == '\n')
                    {
                        i++;
                    }
                    target.Append(lineTermination);
                    break;

                case '\n':
                    target.Append(lineTermination);
                    break;

                default:
                    target.Append(c);
                    break;
                }
            }
        }