int m_cchPrevMorphemes; // Total length of morphemes before m_imorph.

			public MorphemeBreaker(CachePair caches, string input, int hvoSbWord, int wsVern,
				SandboxBase sandbox)
			{
				m_caches = caches;
				m_sda = caches.DataAccess;
				m_cda = (IVwCacheDa)m_sda;
				m_input = input;
				m_hvoSbWord = hvoSbWord;
				m_cOldMorphs = m_sda.get_VecSize(m_hvoSbWord, ktagSbWordMorphs);
				ITsStrFactory m_tsf = TsStrFactoryClass.Create();
				m_wsVern = wsVern;
				m_types = m_caches.MainCache.ServiceLocator.GetInstance<IMoMorphTypeRepository>();
				m_sandbox = sandbox;
			}
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Gets the morph type for the specified lexeme type.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        private IMoMorphType GetMorphTypeForLexemeType(LexemeType type)
        {
            if (type == LexemeType.Word || type == LexemeType.Lemma)
            {
                throw new ArgumentException("Morph type can never be of the specified lexeme type");
            }

            IMoMorphTypeRepository repo = m_cache.ServiceLocator.GetInstance <IMoMorphTypeRepository>();

            switch (type)
            {
            case LexemeType.Prefix: return(repo.GetObject(MoMorphTypeTags.kguidMorphPrefix));

            case LexemeType.Suffix: return(repo.GetObject(MoMorphTypeTags.kguidMorphSuffix));

            case LexemeType.Phrase: return(repo.GetObject(MoMorphTypeTags.kguidMorphPhrase));

            case LexemeType.Stem: return(repo.GetObject(MoMorphTypeTags.kguidMorphStem));
            }
            return(null);
        }