Пример #1
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 { }
			}
		}