Exemplo n.º 1
0
        /// <summary>
        /// Collect up a set of unique WfiWordforms.
        /// </summary>
        private void GetUniqueWords(Dictionary <string, IWfiWordform> wordforms, string buffer)
        {
            int start      = -1;        // -1 means we're still looking for a word to start.
            int length     = 0;
            int totalLengh = buffer.Length;

            for (int i = 0; i < totalLengh; i++)
            {
                bool isWordforming = m_ws.get_IsWordForming(buffer[i]);
                if (isWordforming)
                {
                    length++;
                    if (start < 0)                     //first character in this word?
                    {
                        start = i;
                    }
                }

                if ((start > -1) &&              // had a word and found yet?
                    (!isWordforming || i == totalLengh - 1 /*last char of the input*/))
                {
                    string word = buffer.Substring(start, length);
                    if (!wordforms.ContainsKey(word))
                    {
                        ITsString tss = TsStringUtils.MakeString(word, m_ws.Handle);
                        wordforms.Add(word, WfiWordformServices.FindOrCreateWordform(m_cache, tss));
                    }
                    length = 0;
                    start  = -1;
                }
            }
        }
        public void ReferencesToDeletedWordformsShouldSwitch()
        {
            var wf1  = MakeWordform("wordXX");
            var wf2  = MakeWordform("wordXX");
            var wf3  = MakeWordform("wordXX");
            var text = Cache.ServiceLocator.GetInstance <ITextFactory>().Create();
            //Cache.LangProject.TextsOC.Add(text);
            var stText = Cache.ServiceLocator.GetInstance <IStTextFactory>().Create();

            text.ContentsOA = stText;
            var para = Cache.ServiceLocator.GetInstance <IStTxtParaFactory>().Create();

            stText.ParagraphsOS.Add(para);
            var seg = Cache.ServiceLocator.GetInstance <ISegmentFactory>().Create();

            para.SegmentsOS.Add(seg);
            seg.AnalysesRS.Add(wf1);
            seg.AnalysesRS.Add(wf2);
            seg.AnalysesRS.Add(wf3);
            seg.AnalysesRS.Add(wf2);
            seg.AnalysesRS.Add(wf3);

            var wordset = Cache.ServiceLocator.GetInstance <IWfiWordSetFactory>().Create();

            Cache.LangProject.MorphologicalDataOA.TestSetsOC.Add(wordset);
            wordset.CasesRC.Add(wf2);

            ICmPossibilityList list = Cache.LangProject.KeyTermsList;
            var term = Cache.ServiceLocator.GetInstance <IChkTermFactory>().Create();

            list.PossibilitiesOS.Add(term);
            var rendering = Cache.ServiceLocator.GetInstance <IChkRenderingFactory>().Create();

            term.RenderingsOC.Add(rendering);
            rendering.SurfaceFormRA = wf2;
            var chkRef = Cache.ServiceLocator.GetInstance <IChkRefFactory>().Create();

            term.OccurrencesOS.Add(chkRef);
            chkRef.RenderingRA = wf2;

            WfiWordformServices.FixDuplicates(Cache, m_progress);
            // One but only one should survive.
            var wf = Survivor(wf1, wf2, wf3);

            Assert.That(seg.AnalysesRS.Count, Is.EqualTo(5));
            Assert.That(seg.AnalysesRS[0], Is.EqualTo(wf));
            Assert.That(seg.AnalysesRS[1], Is.EqualTo(wf));
            Assert.That(seg.AnalysesRS[2], Is.EqualTo(wf));
            Assert.That(seg.AnalysesRS[3], Is.EqualTo(wf));
            Assert.That(seg.AnalysesRS[4], Is.EqualTo(wf));

            // for several tests to prove anything, the wordform that survives must NOT be the
            // one that was there already.
            Assert.That(wf, Is.Not.EqualTo(wf2));

            Assert.That(wordset.CasesRC, Has.Member(wf));
            Assert.That(rendering.SurfaceFormRA, Is.EqualTo(wf));
            Assert.That(chkRef.RenderingRA, Is.EqualTo(wf));
        }
Exemplo n.º 3
0
        /// <summary>
        /// This actually makes the fix.
        /// </summary>
        public void Process()
        {
            Debug.Assert(m_dlg != null);
            var cache = (FdoCache)m_dlg.Mediator.PropertyTable.GetValue("cache");

            UndoableUnitOfWorkHelper.Do(ITextStrings.ksUndoMergeAnalyses, ITextStrings.ksRedoMergeAnalyses,
                                        cache.ActionHandlerAccessor,
                                        () => WfiWordformServices.MergeDuplicateAnalyses(cache, new ProgressBarWrapper(m_dlg.ProgressBar)));
        }
Exemplo n.º 4
0
        private void CreateTryAWordSandbox()
        {
            // skip if it's before we've set the word
            if (m_sWordForm == null)
            {
                return;
            }
            // skip if it's before we've set up the rootsite control
            if (m_rootb == null)
            {
                return;
            }
            // skip if we're not visible
            if (!Visible)
            {
                return;
            }
            //Debug.WriteLine("TryAWordRootSite:WordForm - creating sandbox for " + m_sWordForm.Text);
            NonUndoableUnitOfWorkHelper.Do(m_cache.ActionHandlerAccessor, () =>
            {
                m_wordform = WfiWordformServices.FindOrCreateWordform(m_cache, m_sWordForm);
            });
            //if (m_cache.IsDummyObject(hvo))
            //	m_wordform = new WfiWordform();

            IAnalysis analysis = m_vc.GetGuessForWordform(m_wordform, m_cache.DefaultVernWs);

            if (analysis is NullWAG)
            {
                analysis = m_wordform;
            }

            m_rootb.SetRootObject(analysis.Hvo, m_vc, m_kfragSingleInterlinearAnalysisWithLabels, m_styleSheet);

            //Debug.Assert(m_tryAWordSandbox == null);
            m_tryAWordSandbox = new TryAWordSandbox(m_cache,
                                                    Mediator,
                                                    m_propertyTable,
                                                    StyleSheet,
                                                    m_vc.LineChoices,
                                                    analysis);
            m_tryAWordSandbox.Visible = false;
            Controls.Add(m_tryAWordSandbox);
            SetSandboxSize();
            SetSandboxLocation();
            m_tryAWordSandbox.Visible = true;
            SetBackgroundColor();
            int height = Math.Max(ScrollRange.Height, m_tryAWordSandbox.Height) + SystemInformation.HorizontalScrollBarHeight;

            if (Height != height)
            {
                Height = height;
            }
            m_tryAWordSandbox.SizeChanged += m_tryAWordSandbox_SizeChanged;
            //m_tryAWordSandbox.Focus();
        }
Exemplo n.º 5
0
        public void DifferentAnalyses_AreNotMerged()
        {
            var wf        = MakeWordform("bank");
            var wa1       = MakeAnalysis(wf);
            var entryBank = MakeEntry("bank", "side of river");

            MakeBundle(wa1, entryBank.SensesOS[0]);

            var wa2       = MakeAnalysis(wf);
            var entryKick = MakeEntry("bank", "place for money");

            MakeBundle(wa2, entryKick.SensesOS[0]);

            var wa3 = MakeAnalysis(wf);

            MakeBundle(wa3, entryBank.SensesOS[0]);
            var verb = MakePartOfSpeech("verb");

            wa3.CategoryRA = verb;

            var wa4 = MakeAnalysis(wf);

            MakeBundle(wa4, "bank");             // analysis only to morpheme level
            var wa5 = MakeAnalysis(wf);

            MakeBundle(wa5, "bank0");             // analysis only to morpheme level

            var wa6     = MakeAnalysis(wf);
            var bundle6 = MakeBundle(wa6, "bank");

            bundle6.MsaRA = MakeMsa(entryBank);

            var wa7     = MakeAnalysis(wf);
            var bundle7 = MakeBundle(wa7, "bank0");

            bundle7.MorphRA = MorphServices.MakeMorph(entryBank, TsStringUtils.MakeTss("bank", Cache.DefaultVernWs));

            var wa8 = MakeAnalysis(wf);

            MakeBundle(wa8, entryBank.SensesOS[0]);
            MakeBundle(wa8, entryBank.SensesOS[0]);             // makes sure it handles different number of bundles


            WfiWordformServices.MergeDuplicateAnalyses(Cache, m_progress);

            // We could try for something stronger; the basic idea is that it should change nothing.
            // But the kind of changes it makes is deleting objects, so this should cover it.
            Assert.That(wa1.IsValidObject);
            Assert.That(wa2.IsValidObject);
            Assert.That(wa3.IsValidObject);
            Assert.That(wa4.IsValidObject);
            Assert.That(wa5.IsValidObject);
            Assert.That(wa6.IsValidObject);
            Assert.That(wa7.IsValidObject);
            Assert.That(wa8.IsValidObject);
        }
        public void WordformsWithNothingSpecialMerged()
        {
            var wf1 = MakeWordform("wordXX");
            var wf2 = MakeWordform("wordXX");
            var wf3 = MakeWordform("wordXX");

            WfiWordformServices.FixDuplicates(Cache, m_progress);
            // One but only one should survive.
            Survivor(wf1, wf2, wf3);
        }
        public void CopesWithNullVernacular()
        {
            var wf1 = MakeWordform("");
            var wf2 = MakeWordform("wordXX");
            var wf3 = MakeWordform("wordXX");

            WfiWordformServices.FixDuplicates(Cache, m_progress);
            var wf = Survivor(wf2, wf3);

            Assert.That(wf1.IsValidObject, Is.True);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Implement the add words to spelling dictionary command. (May be called by reflection,
        /// though I don't think there is a current explicit menu item.)
        /// </summary>
        /// <param name="argument"></param>
        /// <returns></returns>
        public bool OnAddWordsToSpellDict(object argument)
        {
            CheckDisposed();

            if (Cache == null)
            {
                return(false);                // impossible?
            }
            WfiWordformServices.ConformSpellingDictToWordforms(Cache);
            return(true);            // handled
        }
Exemplo n.º 9
0
        public void IdenticalTrivialAnalyses_AreMerged()
        {
            var wf  = MakeWordform("bank");
            var wa1 = MakeAnalysis(wf);
            var wa2 = MakeAnalysis(wf);

            WfiWordformServices.MergeDuplicateAnalyses(Cache, m_progress);

            Assert.That(!wa1.IsValidObject || !wa2.IsValidObject);           // one should be deleted
            Assert.That(wa1.IsValidObject || wa2.IsValidObject);             // and one should survive!
        }
Exemplo n.º 10
0
        /// <summary>
        /// Implement the add words to spelling dictionary command. (May be called by reflection,
        /// though I don't think there is a current explicit menu item.)
        /// </summary>
        /// <param name="argument"></param>
        /// <returns></returns>
        public bool OnAddWordsToSpellDict(object argument)
        {
            CheckDisposed();

            FdoCache cache = (FdoCache)m_mediator.PropertyTable.GetValue("cache");

            if (cache == null)
            {
                return(false);                // impossible?
            }
            WfiWordformServices.ConformSpellingDictToWordforms(cache);
            return(true);            // handled
        }
        public void ExtraWritingSystemsAreCopied()
        {
            var wf1   = MakeWordform("wordXX");
            var wf2   = MakeWordform("wordXX");
            var wf3   = MakeWordform("wordXX");
            int wsSpn = Cache.WritingSystemFactory.GetWsFromStr("es");

            wf2.Form.set_String(wsSpn, Cache.TsStrFactory.MakeString("Spanish", wsSpn));
            WfiWordformServices.FixDuplicates(Cache, m_progress);
            var wf = Survivor(wf1, wf2, wf3);

            Assert.That(wf, Is.Not.EqualTo(wf2));             // otherwise it doesn't prove much
            Assert.That(wf.Form.get_String(wsSpn).Text, Is.EqualTo("Spanish"));
        }
        public void SpellingInCorrectBeatsUnknown()
        {
            var wf1 = MakeWordform("wordXX");
            var wf2 = MakeWordform("wordXX");
            var wf3 = MakeWordform("wordXX");

            wf2.SpellingStatus = (int)SpellingStatusStates.incorrect;
            WfiWordformServices.FixDuplicates(Cache, m_progress);
            // One but only one should survive.
            var wf = Survivor(wf1, wf2, wf3);

            Assert.That(wf, Is.Not.EqualTo(wf2));             // otherwise it doesn't prove much
            Assert.That(wf.SpellingStatus, Is.EqualTo((int)SpellingStatusStates.incorrect));
        }
        /// <summary>
        /// This actually makes the fix.
        /// </summary>
        public void Process()
        {
            Debug.Assert(m_dlg != null);
            var    cache    = (FdoCache)m_dlg.Mediator.PropertyTable.GetValue("cache");
            string failures = null;

            UndoableUnitOfWorkHelper.Do(ITextStrings.ksUndoMergeWordforms, ITextStrings.ksRedoMergeWordforms, cache.ActionHandlerAccessor,
                                        () => failures = WfiWordformServices.FixDuplicates(cache, m_dlg.ProgressBar));
            if (!string.IsNullOrEmpty(failures))
            {
                MessageBox.Show(m_dlg, string.Format(ITextStrings.ksWordformMergeFailures, failures), ITextStrings.ksWarning,
                                MessageBoxButtons.OK);
            }
        }
        public void ChecksumIsReset()
        {
            var wf1 = MakeWordform("wordXX");
            var wf2 = MakeWordform("wordXX");
            var wf3 = MakeWordform("wordXX");

            wf1.Checksum = 5;
            wf2.Checksum = 6;
            wf3.Checksum = 7;
            WfiWordformServices.FixDuplicates(Cache, m_progress);
            var wf = Survivor(wf1, wf2, wf3);

            Assert.That(wf, Is.Not.EqualTo(wf2));             // otherwise it doesn't prove much
            Assert.That(wf.Checksum, Is.EqualTo(0));
        }
Exemplo n.º 15
0
        public bool OnUseVernSpellingDictionary(object argument)
        {
            bool checking = !IsVernacularSpellingEnabled();

            if (checking)
            {
                OnEnableVernacularSpelling();
            }
            else
            {
                WfiWordformServices.DisableVernacularSpellingDictionary(Cache);
            }
            m_mediator.PropertyTable.SetProperty("UseVernSpellingDictionary", checking);
            RestartSpellChecking();
            return(true);
        }
Exemplo n.º 16
0
        private static FwXWindow RefreshCacheWindowAndAll(LexTextApp app, string fullProjectFileName)
        {
            var manager      = app.FwManager;
            var appArgs      = new FwAppArgs(fullProjectFileName);
            var newAppWindow =
                (FwXWindow)manager.ReopenProject(manager.Cache.ProjectId.Name, appArgs).ActiveMainWindow;

            if (IsVernacularSpellingEnabled(newAppWindow.Mediator))
            {
                WfiWordformServices.ConformSpellingDictToWordforms(newAppWindow.Cache);
            }
            //clear out any sort cache files (or whatever else might mess us up) and then refresh
            newAppWindow.ClearInvalidatedStoredData();
            newAppWindow.RefreshDisplay();
            return(newAppWindow);
        }
        public void AnalysesPreserved()
        {
            var wf1 = MakeWordform("wordXX");
            var wa1 = MakeAnalysis(wf1);
            var wf2 = MakeWordform("wordXX");
            var wa2 = MakeAnalysis(wf2);
            var wf3 = MakeWordform("wordXX");
            var wa3 = MakeAnalysis(wf3);

            WfiWordformServices.FixDuplicates(Cache, m_progress);
            var wf = Survivor(wf1, wf2, wf3);

            Assert.That(wa1.Owner, Is.EqualTo(wf));
            Assert.That(wa2.Owner, Is.EqualTo(wf));
            Assert.That(wa3.Owner, Is.EqualTo(wf));
        }
Exemplo n.º 18
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Writes this rendering to the specified cache.
        /// </summary>
        /// <param name="term">The term to which this rendering belongs.</param>
        /// <param name="ResolveConflict">The delegate to call to resolve a conflict when a
        /// different rendering already exists.</param>
        /// ------------------------------------------------------------------------------------
        internal void WriteToCache(IChkTerm term, Func <IChkRef, string, string, bool> ResolveConflict)
        {
            IChkRef occ = term.OccurrencesOS.FirstOrDefault(o => o.Ref == Reference && o.Location == Location);

            if (occ == null)
            {
                MessageBox.Show(string.Format("Couldn't find occurrence {0} in {1} for imported rendering of term: {2}.",
                                              Location, (new BCVRef(Reference)), term.Name.AnalysisDefaultWritingSystem), "Unable to Import");
                return;
            }

            if (string.IsNullOrEmpty(VernRendering))
            {
                if (occ.Status != KeyTermRenderingStatus.Ignored)
                {
                    occ.Status      = KeyTermRenderingStatus.Ignored;
                    occ.RenderingRA = null;
                }
                return;
            }

            string existingRendering = occ.RenderingRA == null ? null :
                                       occ.RenderingRA.Form.VernacularDefaultWritingSystem.Text;

            if (existingRendering == VernRendering)
            {
                return;                 // already set. Nothing to do.
            }
            if (!string.IsNullOrEmpty(existingRendering))
            {
                if (!ResolveConflict(occ, existingRendering, VernRendering))
                {
                    return;                     // Leave existing rendering
                }
            }

            // See if the word form already exists
            IWfiWordform wordForm = WfiWordformServices.FindOrCreateWordform(term.Cache,
                                                                             VernRendering, term.Services.WritingSystems.DefaultVernacularWritingSystem);

            KeyTermRef ktRef = new KeyTermRef(occ);

            // Change the reference's status and attach the word form to the ChkRef
            ktRef.AssignRendering(wordForm);
        }
Exemplo n.º 19
0
        public void SetAgentOpinion()
        {
            ICmAgent     agent = Cache.LangProject.DefaultComputerAgent;
            IWfiWordform wf    = WfiWordformServices.FindOrCreateWordform(Cache,
                                                                          TsStringUtils.MakeTss("xxxyyyzzz12234", Cache.DefaultVernWs));
            IWfiAnalysis wa = Cache.ServiceLocator.GetInstance <IWfiAnalysisFactory>().Create();

            wf.AnalysesOC.Add(wa);
            Assert.AreEqual(Opinions.noopinion, wa.GetAgentOpinion(agent));

            wa.SetAgentOpinion(agent, Opinions.approves);
            Assert.AreEqual(Opinions.approves, wa.GetAgentOpinion(agent));

            wa.SetAgentOpinion(agent, Opinions.disapproves);
            Assert.AreEqual(Opinions.disapproves, wa.GetAgentOpinion(agent));

            wa.SetAgentOpinion(agent, Opinions.noopinion);
            Assert.AreEqual(Opinions.noopinion, wa.GetAgentOpinion(agent));
        }
        public void InconsistentAlternativesPreventMergeAndAreReported()
        {
            var wf1   = MakeWordform("wordXX");
            var wf2   = MakeWordform("wordXX");
            var wf3   = MakeWordform("wordZZ");
            var wf4   = MakeWordform("wordZZ");
            var wf5   = MakeWordform("wordZZ");
            int wsSpn = Cache.WritingSystemFactory.GetWsFromStr("es");

            wf1.Form.set_String(wsSpn, Cache.TsStrFactory.MakeString("Spanish", wsSpn));
            wf2.Form.set_String(wsSpn, Cache.TsStrFactory.MakeString("SpanishOther", wsSpn));
            wf3.Form.set_String(wsSpn, Cache.TsStrFactory.MakeString("Spanish", wsSpn));
            wf4.Form.set_String(wsSpn, Cache.TsStrFactory.MakeString("SpanishOther", wsSpn));
            wf5.Form.set_String(wsSpn, Cache.TsStrFactory.MakeString("SpanishYetAnother", wsSpn));
            var failureList = WfiWordformServices.FixDuplicates(Cache, m_progress);

            // None should be deleted.
            Assert.That(wf1.IsValidObject && wf2.IsValidObject && wf3.IsValidObject && wf4.IsValidObject && wf5.IsValidObject);
            Assert.That(failureList, Is.EqualTo("wordXX wordZZ"));
        }
Exemplo n.º 21
0
        public void ComplexMerge_SucceedsAndFixesRefs()
        {
            var wf             = MakeWordform("bank");
            var wa1            = MakeAnalysis(wf);
            var entryBankRiver = MakeEntry("bank", "side of river");

            MakeBundle(wa1, entryBankRiver.SensesOS[0]);

            var wa2            = MakeAnalysis(wf);
            var entryBankMoney = MakeEntry("bank", "place for money");

            MakeBundle(wa2, entryBankMoney.SensesOS[0]);

            var wadup1 = MakeAnalysis(wf);

            MakeBundle(wadup1, entryBankMoney.SensesOS[0]);

            var wadup2 = MakeAnalysis(wf);

            MakeBundle(wadup2, entryBankMoney.SensesOS[0]);

            var wgMoney      = MakeGloss(wa2, "money");
            var wgPlaceMoney = MakeGloss(wadup1, "place for money");
            var wgdup1       = MakeGloss(wa2, "money");
            var wgdup2       = MakeGloss(wadup1, "money");
            var wgdup3       = MakeGloss(wadup2, "money");

            var text = MakeText("");
            var seg  = MakeSegment(text.ContentsOA, "bank bank bank bank bank bank bank bank");

            seg.AnalysesRS.Add(wa1);
            seg.AnalysesRS.Add(wa2);
            seg.AnalysesRS.Add(wadup1);
            seg.AnalysesRS.Add(wadup2);
            seg.AnalysesRS.Add(wgMoney);
            seg.AnalysesRS.Add(wgPlaceMoney);
            seg.AnalysesRS.Add(wgdup1);
            seg.AnalysesRS.Add(wgdup2);
            seg.AnalysesRS.Add(wgdup3);

            WfiWordformServices.MergeDuplicateAnalyses(Cache, m_progress);

            // Theoretically, wa3 or wa4 could legitimately be the survivor. But in fact it is now wa1.
            var survivor = wa2;

            Assert.That(survivor.IsValidObject);
            Assert.That(wa2.IsValidObject);
            Assert.That(wadup1.IsValidObject, Is.False);
            Assert.That(wadup2.IsValidObject, Is.False);

            var survivingGloss = wgMoney;             // Enhance: any other duplicate surviving is OK.

            Assert.That(survivingGloss.IsValidObject);
            Assert.That(wgPlaceMoney.IsValidObject);
            Assert.That(wgPlaceMoney.Owner, Is.EqualTo(survivor));
            Assert.That(wgdup1.IsValidObject, Is.False);
            Assert.That(wgdup2.IsValidObject, Is.False);
            Assert.That(wgdup3.IsValidObject, Is.False);

            Assert.That(seg.AnalysesRS[0], Is.EqualTo(wa1));
            Assert.That(seg.AnalysesRS[1], Is.EqualTo(survivor));
            Assert.That(seg.AnalysesRS[2], Is.EqualTo(survivor));
            Assert.That(seg.AnalysesRS[3], Is.EqualTo(survivor));
            Assert.That(seg.AnalysesRS[4], Is.EqualTo(survivingGloss));
            Assert.That(seg.AnalysesRS[5], Is.EqualTo(wgPlaceMoney));
            Assert.That(seg.AnalysesRS[6], Is.EqualTo(survivingGloss));
            Assert.That(seg.AnalysesRS[7], Is.EqualTo(survivingGloss));
            Assert.That(seg.AnalysesRS[8], Is.EqualTo(survivingGloss));
        }
Exemplo n.º 22
0
        private static IAnalysis CreateWordAnalysisStack(FdoCache cache, Word word, ITsStrFactory strFactory)
        {
            if (word.Items == null || word.Items.Length <= 0)
            {
                return(null);
            }
            IAnalysis        analysis     = null;
            var              wsFact       = cache.WritingSystemFactory;
            ILgWritingSystem wsMainVernWs = null;

            foreach (var wordItem in word.Items)
            {
                ITsString wordForm = null;
                switch (wordItem.type)
                {
                case "txt":
                    wsMainVernWs = GetWsEngine(wsFact, wordItem.lang);
                    wordForm     = strFactory.MakeString(wordItem.Value, wsMainVernWs.Handle);
                    analysis     = WfiWordformServices.FindOrCreateWordform(cache, wordForm);
                    break;

                case "punct":
                    wordForm = strFactory.MakeString(wordItem.Value,
                                                     GetWsEngine(wsFact, wordItem.lang).Handle);
                    analysis = WfiWordformServices.FindOrCreatePunctuationform(cache, wordForm);
                    break;
                }
                if (wordForm != null)
                {
                    break;
                }
            }

            // now add any alternative word forms. (overwrite any existing)
            if (analysis != null && analysis.HasWordform)
            {
                AddAlternativeWssToWordform(analysis, word, wsMainVernWs, strFactory);
            }

            if (analysis != null)
            {
                UpgradeToWordGloss(word, ref analysis);
            }
            else
            {
                Debug.Assert(analysis != null, "What else could this do?");
            }
            //Add any morphemes to the thing
            if (word.morphemes != null && word.morphemes.morphs.Length > 0)
            {
                //var bundle = newSegment.Cache.ServiceLocator.GetInstance<IWfiMorphBundleFactory>().Create();
                //analysis.Analysis.MorphBundlesOS.Add(bundle);
                //foreach (var morpheme in word.morphemes)
                //{
                //    //create a morpheme
                //    foreach(item item in morpheme.items)
                //    {
                //        //fill in morpheme's stuff
                //    }
                //}
            }
            return(analysis);
        }