/// <summary>
        /// Returns a proper IniWriter depending upon the type parameter.
        /// </summary>
        private IniWriter GetIniWriter(TextWriter reader, IniFileType type)
        {
            IniWriter result = new IniWriter(reader);

            switch (type)
            {
            case IniFileType.Standard:
            case IniFileType.WindowsStyle:
                // do nothing
                break;

            case IniFileType.PythonStyle:
                result.AssignDelimiter  = ':';
                result.CommentDelimiter = '#';
                break;

            case IniFileType.SambaStyle:
            case IniFileType.MysqlStyle:
                result.AssignDelimiter  = '=';
                result.CommentDelimiter = '#';
                break;
            }

            return(result);
        }
        /// <include file='IniDocument.xml' path='//Method[@name="SaveTextWriter"]/docs/*' />
        public void Save(TextWriter textWriter)
        {
            IniWriter  writer  = GetIniWriter(textWriter, fileType);
            IniItem    item    = null;
            IniSection section = null;

            foreach (string comment in initialComment)
            {
                writer.WriteEmpty(comment);
            }

            for (int j = 0; j < sections.Count; j++)
            {
                section = sections[j];
                writer.WriteSection(section.Name, section.Comment);
                for (int i = 0; i < section.ItemCount; i++)
                {
                    item = section.GetItem(i);
                    switch (item.Type)
                    {
                    case IniType.Key:
                        writer.WriteKey(item.Name, item.Value, item.Comment);
                        break;

                    case IniType.Empty:
                        writer.WriteEmpty(item.Comment);
                        break;
                    }
                }
            }

            writer.Close();
        }