SpellDictionary CreateDictionary(string locale)
        {
            SpellDictionary res = new SpellDictionary(engine, locale, tempDisplayName);

            dicts.Add(res);
            return(res);
        }
        void SetPropertyDictionary(SpellDictionary dict, string format, string location)
        {
            string[] files = location.Split(new char[] { ' ' });
            string   aff   = string.Empty;
            string   dic   = string.Empty;
            string   idx   = string.Empty;
            string   dat   = string.Empty;

            foreach (string file in files)
            {
                string f = file.Replace("%origin%", this.tempLocalDir).Replace('/', '\\');
                switch (Path.GetExtension(f).ToLowerInvariant())
                {
                case ".aff":
                    aff = f;
                    break;

                case ".dic":
                    dic = f;
                    break;

                case ".dat":
                    dat = f;
                    break;

                case ".idx":
                    idx = f;
                    break;
                }
            }

            switch (format)
            {
            case "DICT_SPELL":
                dict.SetSpellFiles(aff, dic);
                break;

            case "DICT_HYPH":
                dict.SetHyphFiles(dic);
                break;

            case "DICT_THES":
                if (string.IsNullOrEmpty(idx))
                {
                    string new_idx = dat.Replace(Path.GetExtension(dat), ".idx");
                    if (File.Exists(new_idx))
                    {
                        idx = new_idx;
                    }
                }

                dict.SetThesFiles(dat, idx);
                break;
            }
        }
        void LoadPropertyDictionary(XmlNodeList nodes)
        {
            string loc    = string.Empty;
            string format = string.Empty;
            string locale = string.Empty;

            foreach (XmlNode node in nodes)
            {
                foreach (XmlAttribute attr in node.Attributes)
                {
                    if (attr.Name == Strings.NodeAttributeName)
                    {
                        switch (attr.Value)
                        {
                        case "Locations":
                            loc = GetValueNode(node.ChildNodes);
                            break;

                        case "Format":
                            format = GetValueNode(node.ChildNodes);
                            break;

                        case "Locales":
                            locale = GetValueNode(node.ChildNodes);
                            break;
                        }
                    }
                }
            }

            // получим все локали для словаря
            string[] locales = locale.Split(new char[] { ' ' });
            foreach (string l in locales)
            {
                SpellDictionary dict = GetDictionary(l) ?? CreateDictionary(l);
                SetPropertyDictionary(dict, format, loc);
            }
        }