Ejemplo n.º 1
0
            public int Compare(ILexEntry x, ILexEntry y)
            {
                HomographNumber hnx = m_lexicon.m_homographNumbers.GetOrCreateValue(x);
                HomographNumber hny = m_lexicon.m_homographNumbers.GetOrCreateValue(y);

                return(hnx.Number.CompareTo(hny.Number));
            }
Ejemplo n.º 2
0
        internal FdoLexEntryLexeme GetEntryLexeme(ILexEntry entry)
        {
            CreateEntryIndexIfNeeded();
            LexemeType      type = GetLexemeTypeForMorphType(entry.PrimaryMorphType);
            HomographNumber hn   = m_homographNumbers.GetOrCreateValue(entry);
            string          form = entry.LexemeFormOA == null ? string.Empty : entry.LexemeFormOA.Form.VernacularDefaultWritingSystem.Text ?? string.Empty;

            return(new FdoLexEntryLexeme(this, new LexemeKey(type, form.Normalize(), hn.Number)));
        }
Ejemplo n.º 3
0
        private void CreateEntryIndexIfNeeded()
        {
            if (m_entryIndex != null)
            {
                return;
            }

            m_entryIndex = new Dictionary <LexemeKey, SortedSet <ILexEntry> >();
            foreach (ILexEntry entry in m_cache.ServiceLocator.GetInstance <ILexEntryRepository>().AllInstances())
            {
                LexemeType type = GetLexemeTypeForMorphType(entry.PrimaryMorphType);
                string     form = entry.LexemeFormOA == null ? string.Empty : entry.LexemeFormOA.Form.VernacularDefaultWritingSystem.Text ?? string.Empty;
                var        key  = new LexemeKey(type, form.Normalize());

                SortedSet <ILexEntry> entries;
                if (!m_entryIndex.TryGetValue(key, out entries))
                {
                    entries           = new SortedSet <ILexEntry>(m_entryComparer);
                    m_entryIndex[key] = entries;
                }

                HomographNumber hn = m_homographNumbers.GetOrCreateValue(entry);
                if (hn.Number == 0)
                {
                    int num = 1;
                    foreach (ILexEntry e in entries)
                    {
                        if (m_homographNumbers.GetOrCreateValue(e).Number != num)
                        {
                            break;
                        }
                        num++;
                    }
                    hn.Number = num;
                }

                entries.Add(entry);
            }
        }