private void AddAbbrAndNameInfo(IMultiUnicode abbr, IMultiUnicode name, IMultiUnicode reverseAbbr, IMultiUnicode reverseName)
		{
			int wsActual;
			ITsString tssAnal;

			if (name != null)
			{
				string sname, snameWS, sabbr, sabbrWS;
				tssAnal = name.GetAlternativeOrBestTss(m_cache.DefaultAnalWs, out wsActual);
				sname = tssAnal.Text;
				snameWS = m_cache.LanguageWritingSystemFactoryAccessor.GetStrFromWs(wsActual);

				cbFunction.Items.Add(sname);

				if (!m_htNameToAbbr.ContainsKey(sname))
				{
					if (abbr == null)
					{
						sabbr = sname;	// use both for the map key
						sabbrWS = snameWS;
					}
					else
					{
						tssAnal = abbr.GetAlternativeOrBestTss(m_cache.DefaultAnalWs, out wsActual);
						sabbr = tssAnal.Text;
						sabbrWS = m_cache.LanguageWritingSystemFactoryAccessor.GetStrFromWs(wsActual);
					}
					NameWSandAbbr nwsa = new NameWSandAbbr();
					nwsa.name = sname;
					nwsa.nameWS = snameWS;
					nwsa.abbr = sabbr;
					nwsa.abbrWS = sabbrWS;
					m_htNameToAbbr.Add(sname, nwsa);
				}
			}
			if (reverseName != null)
			{
				string srname, srnameWS, srabbr, srabbrWS;
				tssAnal = reverseName.GetAlternativeOrBestTss(m_cache.DefaultAnalWs, out wsActual);
				srname = tssAnal.Text;
				srnameWS = m_cache.LanguageWritingSystemFactoryAccessor.GetStrFromWs(wsActual);

				cbFunction.Items.Add(srname);

				if (!m_htNameToAbbr.ContainsKey(srname))
				{
					if (reverseAbbr == null)
					{
						srabbr = srname;	// use both for the map key
						srabbrWS = srnameWS;
					}
					else
					{
						tssAnal = reverseAbbr.GetAlternativeOrBestTss(m_cache.DefaultAnalWs, out wsActual);
						srabbr = tssAnal.Text;
						srabbrWS = m_cache.LanguageWritingSystemFactoryAccessor.GetStrFromWs(wsActual);
					}
					NameWSandAbbr nwsa = new NameWSandAbbr();
					nwsa.name = srname;
					nwsa.nameWS = srnameWS;
					nwsa.abbr = srabbr;
					nwsa.abbrWS = srabbrWS;
					m_htNameToAbbr.Add(srname, nwsa);
				}
			}
		}
		private void AddAbbrAndNameInfo(string abbr, string name, string nameWS, string reverseAbbr, string reverseName, string reverseNameWS)
		{
			if (name != null)
			{
				cbFunction.Items.Add(name);
				if (abbr == null)
					abbr = name;	// use both for the map key
				if (!m_htNameToAbbr.ContainsKey(name))
				{
				//	m_htNameToAbbr.Add(name, abbr);
					NameWSandAbbr nwsa = new NameWSandAbbr();
					nwsa.abbr = abbr;
					nwsa.nameWS = nameWS;
					m_htNameToAbbr.Add(name, nwsa);
				}
			}
			if (reverseName != null)
			{
				cbFunction.Items.Add(reverseName);
				if (reverseAbbr == null)
					reverseAbbr = reverseName;	// use the same when abbr is empty
				if (!m_htNameToAbbr.ContainsKey(reverseName))
				{
				//	m_htNameToAbbr.Add(reverseName, reverseAbbr);
					NameWSandAbbr nwsa = new NameWSandAbbr();
					nwsa.abbr = reverseAbbr;
					nwsa.nameWS = reverseNameWS;
					m_htNameToAbbr.Add(reverseName, nwsa);
				}
			}
		}