예제 #1
0
        public virtual void Save(Lexicon lexicon)
        {
            Trace.WriteIf(Tracing.Is.TraceVerbose, string.Empty);
            if (null == lexicon)
            {
                throw new ArgumentNullException("lexicon");
            }

            using (var writers = new StreamWriterDictionary("CANONICAL,SYNONYMS")
            {
                Access = FileAccess.Write,
                Mode = FileMode.Create,
                Share = FileShare.None
            })
            {
#if NET20
                if (0 == IEnumerableExtensionMethods.Count(lexicon))
#else
                if (!lexicon.Any())
#endif
                {
                    writers.Item(Location.FullName).WriteLine(string.Empty);
                    return;
                }

#if NET20
                var items = new SortedList <string, LexicalItem>();
                foreach (var item in lexicon)
                {
                    items.Add(item.CanonicalForm, item);
                }

                foreach (var item in items)
                {
                    var synonyms = new SortedList <string, string>();
                    foreach (var synonym in item.Value.Synonyms)
                    {
                        synonyms.Add(synonym, synonym);
                    }

                    writers
                    .Item(Location.FullName)
                    .WriteLine(StringExtensionMethods.FormatWith(
                                   "{0},{1}",
                                   CsvStringExtensionMethods.FormatCommaSeparatedValue(item.Value.CanonicalForm),
                                   CsvStringExtensionMethods.FormatCommaSeparatedValue(IEnumerableExtensionMethods.Concat(synonyms.Values, ';'))));
                }
#else
                foreach (var item in lexicon.OrderBy(x => x.CanonicalForm))
                {
                    writers
                    .Item(Location.FullName)
                    .WriteLine("{0},{1}".FormatWith(
                                   item.CanonicalForm.FormatCommaSeparatedValue(),
                                   item.Synonyms.OrderBy(x => x).Concat(';').FormatCommaSeparatedValue()));
                }
#endif
            }
        }