protected virtual void AddConverterMapping()
        {
            // remove any existing converter by the name we're about to give it (probably not necessary).
            System.Diagnostics.Debug.Assert(!String.IsNullOrEmpty(FriendlyName));
            if (ShouldRemoveBeforeAdd)
            {
                m_aECs.Remove(FriendlyName);
            }

            // if it was originally under a different name...
            if (!String.IsNullOrEmpty(m_strOriginalFriendlyName) && (m_strOriginalFriendlyName != FriendlyName))
            {
                // ... remove that too (this one probably *is* necessary to remove old stuff)
                m_aECs.Remove(m_strOriginalFriendlyName);
            }

            // have the sub-classes do their thing to add it
            AddConverterMappingSub();

            // if it worked, then ...
            // ... indicate that now this converter is in the repository
            IsInRepository = true;

            // and save the name so we can clear it out if need be later
            m_strOriginalFriendlyName = FriendlyName;
        }
Example #2
0
		public void ConvertAsciiToUnicode()
		{
			string encFileName = Path.Combine(Path.GetTempPath(), "test.map");
			try
			{
				using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(
					"SIL.FieldWorks.TE.EncTest.map"))
				{
					Assert.IsNotNull(stream);

					// Define an encoding converter
					using (StreamReader reader = new StreamReader(stream))
					{
						using (StreamWriter writer = new StreamWriter(encFileName))
						{
							writer.Write(reader.ReadToEnd());
						}
					}
				}

				m_converters = new EncConverters();
				m_converters.Add("MyConverter", encFileName, ConvType.Legacy_to_from_Unicode, string.Empty,
					string.Empty, ProcessTypeFlags.UnicodeEncodingConversion);
				Assert.NotNull(m_converters["MyConverter"], "MyConverter didn't get added");

				string filename = m_fileOs.MakeSfFile(Encoding.GetEncoding(EncodingConstants.kMagicCodePage),
					false, "ROM",
					@"\mt 0123456789",
					"\\s \u0081\u009a\u0096\u00b5",
					@"\c 1",
					@"\v 1");
				m_settings.AddFile(filename, ImportDomain.Main, null, null);

				// Set the vernacular WS to use the MyConverter encoder
				VernacularWs.LegacyMapping = "MyConverter";

				ISCTextEnum textEnum = GetTextEnum(ImportDomain.Main,
					new ScrReference(45, 0, 0, ScrVers.English),
					new ScrReference(45, 1, 1, ScrVers.English));

				ISCTextSegment textSeg = textEnum.Next();
				Assert.IsNotNull(textSeg, "Unable to read segment");
				Assert.AreEqual(@"\id", textSeg.Marker);
				Assert.AreEqual("ROM ", textSeg.Text);

				textSeg = textEnum.Next();
				Assert.IsNotNull(textSeg, "Unable to read segment");
				Assert.AreEqual(@"\mt", textSeg.Marker);
				Assert.AreEqual("\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f ", textSeg.Text);

				textSeg = textEnum.Next();
				Assert.IsNotNull(textSeg, "Unable to read segment");
				Assert.AreEqual(@"\s", textSeg.Marker);
				Assert.AreEqual("\u0492\u043a\u2013\u04e9 ", textSeg.Text);

				textSeg = textEnum.Next();
				Assert.IsNotNull(textSeg, "Unable to read segment");
				Assert.AreEqual(@"\c", textSeg.Marker);
				Assert.AreEqual(@" ", textSeg.Text);

				textSeg = textEnum.Next();
				Assert.IsNotNull(textSeg, "Unable to read segment");
				Assert.AreEqual(@"\v", textSeg.Marker);
				Assert.AreEqual(@" ", textSeg.Text);
			}
			finally
			{
				m_converters.Remove("MyConverter");
				try
				{
					FileUtils.Delete(encFileName);
				}
				catch { }
			}
		}