Пример #1
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Executes in two distinct scenarios.
        /// 1. If disposing is true, the method has been called directly
        /// or indirectly by a user's code via the Dispose method.
        /// Both managed and unmanaged resources can be disposed.
        /// 2. If disposing is false, the method has been called by the
        /// runtime from inside the finalizer and you should not reference (access)
        /// other managed objects, as they already have been garbage collected.
        /// Only unmanaged resources can be disposed.
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        /// <remarks>
        /// If any exceptions are thrown, that is fine.
        /// If the method is being done in a finalizer, it will be ignored.
        /// If it is thrown by client code calling Dispose,
        /// it needs to be handled by fixing the bug.
        /// If subclasses override this method, they should call the base implementation.
        /// </remarks>
        /// ------------------------------------------------------------------------------------
        protected override void Dispose(bool disposing)
        {
            //Debug.WriteLineIf(!disposing, "****************** " + GetType().Name + " 'disposing' is false. ******************");
            // Must not be run more than once.
            if (IsDisposed)
            {
                return;
            }

            if (disposing)
            {
                // Dispose managed resources here.
                if (m_fileMaker != null)
                {
                    m_fileMaker.Dispose();
                }
                if (m_myCtrl != null)
                {
                    m_myCtrl.Dispose();
                }
                if (m_myDlg != null)
                {
                    m_myDlg.Dispose();
                }
            }

            // Dispose unmanaged resources here, whether disposing is true or false.
            m_fileMaker   = null;
            m_myCtrl      = null;
            m_myDlg       = null;
            m_ccFileName  = null;
            m_mapFileName = null;

            base.Dispose(disposing);
        }
Пример #2
0
        public void LoadParatext5Project()
        {
            using (ScrObjWrapper wrapper = new ScrObjWrapper())
            {
                IScrImportSet settings = m_scr.FindOrCreateDefaultImportSettings(TypeOfImport.Paratext5);
                settings.StartRef = new BCVRef(1, 1, 1);
                settings.EndRef   = new BCVRef(66, 22, 21);
                TempSFFileMaker fileMaker = new TempSFFileMaker();

                string fileName = fileMaker.CreateFile("EXO",
                                                       new string[] { @"\mt Exodus", @"\c 1", @"\v 1 This is fun!" });
                settings.AddFile(fileName, ImportDomain.Main, null, null);

                wrapper.LoadScriptureProject(settings);
                Assert.IsFalse(wrapper.BooksPresent.Contains(1));
                Assert.IsTrue(wrapper.BooksPresent.Contains(2));
                string       sText, sMarker;
                ImportDomain domain;
                Assert.IsTrue(wrapper.GetNextSegment(out sText, out sMarker, out domain));
                Assert.AreEqual(fileName, wrapper.CurrentFileName);
                Assert.AreEqual(1, wrapper.CurrentLineNumber);
                Assert.AreEqual(new BCVRef(2, 1, 0), wrapper.SegmentFirstRef);
                Assert.AreEqual(new BCVRef(2, 1, 0), wrapper.SegmentLastRef);
                Assert.AreEqual(2, wrapper.ExternalPictureFolders.Count);
                Assert.AreEqual(Cache.LangProject.LinkedFilesRootDir, wrapper.ExternalPictureFolders[0]);
                Assert.AreEqual(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
                                wrapper.ExternalPictureFolders[1]);
            }
        }
Пример #3
0
        public void TestCheckForOverlaps_MultipleOverlaps_KeepOneFile_RemoveTwo()
        {
            // Add temp file to the project
            using (TempSFFileMaker filemaker = new TempSFFileMaker())
            {
                ScrImportFileInfo f1 = new ScrImportFileInfo(
                    filemaker.CreateFile("MAT", new string[] { @"\c 1", @"\c 2", @"\c 3" }),
                    m_mappingList, ImportDomain.Main, null, 0, false);

                ScrImportFileInfo f2 = new ScrImportFileInfo(
                    filemaker.CreateFile("MAT", new string[] { @"\c 4", @"\c 5", @"\c 6" }),
                    m_mappingList, ImportDomain.Main, null, 0, false);

                m_expectedRemovedFiles.Add(f1);
                m_expectedRemovedFiles.Add(f2);

                ScrImportFileInfo f3 = new ScrImportFileInfo(
                    filemaker.CreateFile("MAT", new string[] { @"\c 1", @"\c 2", @"\c 3", @"\c 4", @"\c 5", @"\c 6" }),
                    m_mappingList, ImportDomain.Main, null, 0, false);

                m_resolver.ExpectAndReturn("ChooseFileToRemove", f1, f3, f1);
                m_resolver.ExpectAndReturn("ChooseFileToRemove", f2, f3, f2);

                m_fileList.Add(f1);
                m_fileList.Add(f2);
                m_fileList.Add(f3);

                Assert.AreEqual(1, m_fileList.Count);
                Assert.AreEqual(f3, m_fileList[0]);
            }
            m_resolver.Verify();
            Assert.AreEqual(m_expectedRemovedFiles.Count, m_callCountForVerifyFileRemoved);
        }
        public void AddFilesToNotesList_User()
        {
            m_builder.SelectTab(2);
            TempSFFileMaker fileMaker = new TempSFFileMaker();
            string          file1     = fileMaker.CreateFile("GEN", new string[] { @"\c 1", @"\v 1" });
            string          file2     = fileMaker.CreateFile("GEN", new string[] { @"\c 1", @"\v 1" });
            string          file3     = fileMaker.CreateFile("EXO", new string[] { @"\c 1", @"\v 1" });

            m_builder.m_filenamesToAdd = new string[] { file1 };
            m_builder.SelectNotesWritingSystem("German");
            m_builder.SelectNoteType("Translator");
            m_builder.ClickAddButton();
            m_builder.m_filenamesToAdd = new string[] { file2, file3 };
            m_builder.SelectNotesWritingSystem("German");
            m_builder.SelectNoteType("Consultant");
            m_builder.ClickAddButton();

            // Make sure two files were added to the German Consultant Notes list
            Assert.AreEqual(2, m_builder.NotesFiles.Count);
            Assert.AreEqual(2, m_builder.NotesListView.Items.Count);

            m_builder.SelectNoteType("Translator");
            // Make sure one file was added to the German Translator Notes list
            Assert.AreEqual(1, m_builder.NotesFiles.Count);
            Assert.AreEqual(1, m_builder.NotesListView.Items.Count);

            // Make sure all three annotation files were added properly to the import project
            ImportFileSource files = m_settings.GetImportFiles(ImportDomain.Annotations);

            Assert.AreEqual(3, files.Count);
            ICmAnnotationDefn translatorNoteDef =
                Cache.ServiceLocator.GetInstance <ICmAnnotationDefnRepository>().TranslatorAnnotationDefn;
            ICmAnnotationDefn consultantNoteDef =
                Cache.ServiceLocator.GetInstance <ICmAnnotationDefnRepository>().ConsultantAnnotationDefn;

            foreach (ScrImportFileInfo info in m_settings.GetImportFiles(ImportDomain.Annotations))
            {
                Assert.AreEqual("de", info.WsId);
                if (info.FileName == file1)
                {
                    Assert.AreEqual(new ScrReference(1, 1, 1, m_scr.Versification), info.StartRef);
                    Assert.AreEqual(translatorNoteDef, info.NoteType);
                }
                else if (info.FileName == file2)
                {
                    Assert.AreEqual(new ScrReference(1, 1, 1, m_scr.Versification), info.StartRef);
                    Assert.AreEqual(consultantNoteDef, info.NoteType);
                }
                else if (info.FileName == file3)
                {
                    Assert.AreEqual(new ScrReference(2, 1, 1, m_scr.Versification), info.StartRef);
                    Assert.AreEqual(consultantNoteDef, info.NoteType);
                }
                else
                {
                    Assert.Fail("Unexpected file in annotations import project: " + info.FileName);
                }
            }
        }
        public void AddFilesWithoutBooks_User()
        {
            TempSFFileMaker fileMaker = new TempSFFileMaker();
            string          file1     = fileMaker.CreateFile("EPH", new string[] { @"\c 1", @"\v 1" });
            string          file2     = fileMaker.CreateFile("1CO", new string[] { @"\c 1", @"\v 1" });
            string          file3     = fileMaker.CreateFileNoID(new string[] { @"\_sh" });

            // Make sure only two files were added
            m_builder.m_filenamesToAdd = new string[] { file1, file2, file3 };
            m_builder.ClickAddButton();
            Assert.AreEqual(2, m_builder.ScriptureFiles.Count);
            Assert.AreEqual(2, m_builder.ScrListView.Items.Count);
        }
Пример #6
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Creates and loads a set of dummy converters to test the
        /// <see cref="CnvtrPropertiesCtrl"/> class.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        public override void FixtureSetup()
        {
            base.FixtureSetup();

            m_fileMaker = new TempSFFileMaker();
            m_myDlg     = new DummyAddCnvtrDlg();
            m_myCtrl    = new DummyCnvtrPropertiesCtrl();

            SilEncConverters31.EncConverters encConverters = new SilEncConverters31.EncConverters();

            string[] ccFileContents = { "'c' > 'C'" };
            m_ccFileName = m_fileMaker.CreateFileNoID(ccFileContents, "cct");
            encConverters.AddConversionMap("ZZZTestCC", m_ccFileName,
                                           ConvType.Legacy_to_Unicode, "SIL.cc", "", "",
                                           ProcessTypeFlags.UnicodeEncodingConversion);

            string[] mapFileContents =
            {
                "EncodingName	'ZZZText'",
                "DescriptiveName	'Silly test file'",
                "ByteDefault		'?'",
                "UniDefault		replacement_character",
                "0x80	<>	euro_sign"
            };
            m_mapFileName = m_fileMaker.CreateFileNoID(mapFileContents, "map");
            encConverters.AddConversionMap("ZZZTestMap", m_mapFileName,
                                           ConvType.Legacy_to_from_Unicode, "SIL.map", "", "",
                                           ProcessTypeFlags.UnicodeEncodingConversion);

            // TODO: Should test a legitimate compiled TecKit file by embedding a zipped
            // up one in the resources for testing purposes.

            // This is a randomly chosen ICU converter. The test may break when we reduce the set of
            // ICU converters we ship.
            encConverters.AddConversionMap("ZZZTestICU", "ISO-8859-1",
                                           ConvType.Legacy_to_from_Unicode, "ICU.conv", "", "",
                                           ProcessTypeFlags.UnicodeEncodingConversion);

            // Add a 1-step compound converter, which won't be any of the types our dialog
            // recognizes for now.
            encConverters.AddCompoundConverterStep("ZZZTestCompound", "ZZZTestCC", true,
                                                   NormalizeFlags.None);

            // Load all the mappings after the dummy mappings are added, so the Converter
            // Mapping File combo box won't contain obsolete versions of the mappings referring
            // to old temp files from a previous run of the tests.
            m_myCtrl.CnvtrPropertiesCtrl_Load(null, null);
            encConverters.Remove("Bogus");
        }
Пример #7
0
        public void RemoveFilesThroughButton()
        {
            CheckDisposed();
            TempSFFileMaker filemaker = new TempSFFileMaker();

            string[] files = new String[3];
            files[0] = filemaker.CreateFile("GEN", new String[] { @"\c 1" }, Encoding.Unicode, true);
            files[1] = filemaker.CreateFile("EXO", new String[] { @"\c 1" }, Encoding.UTF8, true);
            files[2] = filemaker.CreateFile("LEV", new String[] { @"\c 1" }, Encoding.BigEndianUnicode, true);
            m_settings.AddFile(files[0], ImportDomain.Main, null, 0);
            m_settings.AddFile(files[1], ImportDomain.Main, null, 0);
            m_settings.AddFile(files[2], ImportDomain.Main, null, 0);
            m_builder.ImportSettings = m_settings;

            // Can't figure out how to make this work without showing the stupid list.
            Form m_ctrlOwner;

            m_ctrlOwner = new Form();
            m_ctrlOwner.Controls.Add(m_builder);
            m_ctrlOwner.Show();

            try
            {
                //remove the last item
                m_builder.m_iSelectedItem = 2;
                m_builder.CallbtnRemove_Click();
                Assert.AreEqual(2, m_builder.FwListView.Items.Count);
                Assert.AreEqual(files[0], m_builder.FwListView.Items[0].Text);
                Assert.AreEqual(files[1], m_builder.FwListView.Items[1].Text);
                Assert.AreEqual(1, m_builder.FwListView.SelectedItems[0].Index);

                //remove the first item
                m_builder.m_iSelectedItem = 0;
                m_builder.CallbtnRemove_Click();
                Assert.AreEqual(1, m_builder.FwListView.Items.Count);
                Assert.AreEqual(files[1], m_builder.FwListView.Items[0].Text);
                Assert.AreEqual(0, m_builder.FwListView.SelectedItems[0].Index);

                //remove the only item left
                m_builder.CallbtnRemove_Click();
                Assert.AreEqual(0, m_builder.FwListView.Items.Count);
                Assert.AreEqual(0, m_builder.FwListView.SelectedItems.Count);
            }
            finally
            {
                m_ctrlOwner.Close();
            }
        }
Пример #8
0
        public void AddNonexistentFilesToSettings()
        {
            CheckDisposed();
            TempSFFileMaker filemaker = new TempSFFileMaker();

            string[] files = new String[2];
            files[0] = filemaker.CreateFile("GEN", new String[] { @"\c 1" }, Encoding.UTF8, true);
            files[1] = filemaker.CreateFile("EXO", new String[] { @"\c 1" }, Encoding.UTF8, true);
            m_settings.AddFile(files[0], ImportDomain.Main, null, 0);
            m_settings.AddFile(files[1], ImportDomain.Main, null, 0);

            File.Delete(files[1]);

            m_builder.ImportSettings = m_settings;
            Assert.AreEqual(2, m_builder.FwListView.Items.Count);
        }
        public void AddFilesToBtList_User()
        {
            m_builder.SelectTab(1);
            TempSFFileMaker fileMaker = new TempSFFileMaker();
            string          file1     = fileMaker.CreateFile("EPH", new string[] { @"\c 1", @"\v 1" });
            string          file2     = fileMaker.CreateFile("1CO", new string[] { @"\c 1", @"\v 1" });

            m_builder.m_filenamesToAdd = new string[] { file1, file2 };
            m_builder.SelectBtWritingSystem("Spanish");
            m_builder.ClickAddButton();
            // Make sure two files were added to BT list
            Assert.AreEqual(2, m_builder.BackTransFiles.Count);
            Assert.AreEqual(2, m_builder.BtListView.Items.Count);
            foreach (ScrImportFileInfo info in m_settings.GetImportFiles(ImportDomain.BackTrans))
            {
                Assert.AreEqual("es", info.WsId);
            }
        }
Пример #10
0
        public void CheckFileTextEncodings()
        {
            CheckDisposed();
            TempSFFileMaker filemaker = new TempSFFileMaker();

            string[] files = new String[3];
            files[0] = filemaker.CreateFile("GEN", new String[] { @"\c 1" }, Encoding.Unicode, true);
            files[1] = filemaker.CreateFile("EXO", new String[] { @"\c 1" }, Encoding.UTF8, true);
            files[2] = filemaker.CreateFile("LEV", new String[] { @"\c 1" }, Encoding.BigEndianUnicode, true);
            m_settings.AddFile(files[0], ImportDomain.Main, null, 0);
            m_settings.AddFile(files[1], ImportDomain.Main, null, 0);
            m_settings.AddFile(files[2], ImportDomain.Main, null, 0);
            m_builder.ImportSettings = m_settings;

            int c = 0;

            foreach (ListViewItem lvi in m_builder.FwListView.Items)
            {
                ListViewItem.ListViewSubItem subitem = lvi.SubItems[2];
                if (lvi.Text == files[0])
                {
                    Assert.AreEqual("Unicode", subitem.Text);
                }
                else if (lvi.Text == files[1])
                {
                    Assert.AreEqual("Unicode (UTF-8)", subitem.Text);
                }
                else if (lvi.Text == files[2])
                {
                    Assert.AreEqual("Unicode (Big-Endian)", subitem.Text);
                }
                else
                {
                    Assert.Fail("Unexpected file found in list");
                }
                c++;
            }
            Assert.AreEqual(3, c);
        }
Пример #11
0
        public void AddFilesToList()
        {
            CheckDisposed();
            TempSFFileMaker filemaker = new TempSFFileMaker();

            string[] files = new String[3];
            files[0] = filemaker.CreateFile("GEN", new String[] { @"\c 1" }, Encoding.UTF8, true);
            files[1] = filemaker.CreateFile("EXO", new String[] { @"\c 1" }, Encoding.UTF8, true);
            files[2] = filemaker.CreateFile("LEV", new String[] { @"\c 1" }, Encoding.UTF8, true);
            m_settings.AddFile(files[0], ImportDomain.Main, null, 0);
            m_settings.AddFile(files[1], ImportDomain.Main, null, 0);
            m_settings.AddFile(files[2], ImportDomain.Main, null, 0);
            m_builder.ImportSettings = m_settings;

            Assert.IsTrue(m_builder.FwListView.Items[0].Selected);
            Assert.AreEqual(3, m_builder.FwListView.Items.Count);
            int c1 = 0;
            int c2 = 0;
            int c3 = 0;

            foreach (ListViewItem lvi in m_builder.FwListView.Items)
            {
                if (lvi.Text == files[0])
                {
                    c1++;
                }
                else if (lvi.Text == files[1])
                {
                    c2++;
                }
                else if (lvi.Text == files[2])
                {
                    c3++;
                }
            }
            Assert.AreEqual(1, c1);
            Assert.AreEqual(1, c2);
            Assert.AreEqual(1, c3);
        }
Пример #12
0
        public void AddFilesThroughButton()
        {
            CheckDisposed();
            m_builder.ImportSettings = m_settings;

            TempSFFileMaker filemaker = new TempSFFileMaker();

            string[] files = new String[3];
            files[0] = filemaker.CreateFile("GEN", new String[] { @"\c 1" }, Encoding.ASCII, true);
            files[1] = filemaker.CreateFile("EXO", new String[] { @"\c 1" }, Encoding.UTF8, true);
            files[2] = filemaker.CreateFile("LEV", new String[] { @"\c 1" }, Encoding.UTF8, true);
            m_builder.m_SimulatedAddFileNames = files;
            m_builder.CallbtnAdd_Click();
            int c = 0;

            foreach (string s in m_builder.ScriptureFiles)
            {
                if (s == files[0])
                {
                    c++;
                }
                else if (s == files[1])
                {
                    c++;
                }
                else if (s == files[2])
                {
                    c++;
                }
                else
                {
                    Assert.Fail("Something extra in the list :(");
                }
            }
            Assert.AreEqual(3, c);
        }
Пример #13
0
        public void AddingFilesToDifferentLists()
        {
            CheckDisposed();

            using (TempSFFileMaker maker = new TempSFFileMaker())
            {
                string scrFileName = maker.CreateFile("GEN", new string[] { @"\c 1", @"\v 1" });
                m_settings.AddFile(scrFileName, ImportDomain.Main, null, 0);

                string enBtFileName = maker.CreateFile("GEN", new string[] { @"\c 1", @"\v 1" });
                string esBtFileName = maker.CreateFile("MAT",
                                                       new string[] { @"\c 1", @"\v 1", @"\id MRK", @"\c 1", @"\v 1" });
                m_settings.AddFile(enBtFileName, ImportDomain.BackTrans, "en", 0);
                m_settings.AddFile(esBtFileName, ImportDomain.BackTrans, "es", 0);

                string esTransNoteFileName = maker.CreateFile("GEN",
                                                              new string[] { @"\c 1", @"\v 1 No digan asi." });
                string enTransNoteFileName = maker.CreateFile("GEN",
                                                              new string[] { @"\c 1", @"\v 1 Try to find a better word." });
                string enConsNoteFileName1 = maker.CreateFile("GEN",
                                                              new string[] { @"\c 1", @"\v 1 Check the meaning of floobywump." });
                string enConsNoteFileName2 = maker.CreateFile("MAT",
                                                              new string[] { @"\c 1", @"\v 1", @"\id MRK", @"\c 1", @"\v 1" });
                m_settings.AddFile(esTransNoteFileName, ImportDomain.Annotations, "es",
                                   m_inMemoryCache.m_translatorNoteDefn.Hvo);
                m_settings.AddFile(enTransNoteFileName, ImportDomain.Annotations, "en",
                                   m_inMemoryCache.m_translatorNoteDefn.Hvo);
                m_settings.AddFile(enConsNoteFileName1, ImportDomain.Annotations, "en",
                                   m_inMemoryCache.m_consultantNoteDefn.Hvo);
                m_settings.AddFile(enConsNoteFileName2, ImportDomain.Annotations, "en",
                                   m_inMemoryCache.m_consultantNoteDefn.Hvo);

                m_builder.CallPopulateFileListsFromSettings();

                // Verify the Scripture file
                m_builder.SelectTab(0);
                Assert.AreEqual(1, m_builder.ScrListView.Items.Count);
                Assert.AreEqual(scrFileName, m_builder.ScrListView.Items[0].Text);

                // Verify the English BT file
                m_builder.SelectTab(1);
                m_builder.SelectBtWritingSystem("English");
                Assert.AreEqual(1, m_builder.BtListView.Items.Count);
                Assert.AreEqual(enBtFileName, m_builder.BtListView.Items[0].Text);
                Assert.AreEqual("GEN", m_builder.BtListView.Items[0].SubItems[1].Text);
//				Assert.AreEqual("English", m_builder.BtListView.Items[0].SubItems[2].Text);
                Assert.AreEqual("US-ASCII", m_builder.BtListView.Items[0].SubItems[2].Text);

                // Verify the Spanish BT file
                m_builder.SelectBtWritingSystem("Spanish");
                Assert.AreEqual(1, m_builder.BtListView.Items.Count);
                Assert.AreEqual(esBtFileName, m_builder.BtListView.Items[0].Text);
                Assert.AreEqual("MAT, MRK", m_builder.BtListView.Items[0].SubItems[1].Text);
//				Assert.AreEqual("Spanish", m_builder.BtListView.Items[0].SubItems[2].Text);
                Assert.AreEqual("US-ASCII", m_builder.BtListView.Items[0].SubItems[2].Text);

                // verify the Spanish Translator Notes file
                m_builder.SelectTab(2);
                m_builder.SelectNoteType("Translator");
                m_builder.SelectNotesWritingSystem("Spanish");
                Assert.AreEqual(1, m_builder.NotesListView.Items.Count);
                Assert.AreEqual(esTransNoteFileName, m_builder.NotesListView.Items[0].Text);
                Assert.AreEqual("GEN", m_builder.NotesListView.Items[0].SubItems[1].Text);
//				Assert.AreEqual("Spanish", m_builder.NotesListView.Items[0].SubItems[2].Text);
                Assert.AreEqual("US-ASCII", m_builder.NotesListView.Items[0].SubItems[2].Text);

                // verify the English Translator Notes file
                m_builder.SelectNotesWritingSystem("English");
                Assert.AreEqual(1, m_builder.NotesListView.Items.Count);
                Assert.AreEqual(enTransNoteFileName, m_builder.NotesListView.Items[0].Text);
                Assert.AreEqual("GEN", m_builder.NotesListView.Items[0].SubItems[1].Text);
//				Assert.AreEqual("Spanish", m_builder.NotesListView.Items[0].SubItems[2].Text);
                Assert.AreEqual("US-ASCII", m_builder.NotesListView.Items[0].SubItems[2].Text);

                // verify the English Consultant Notes files
                m_builder.SelectNoteType("Consultant");
                Assert.AreEqual(2, m_builder.NotesListView.Items.Count);
                Assert.AreEqual(enConsNoteFileName1, m_builder.NotesListView.Items[0].Text);
                Assert.AreEqual("GEN", m_builder.NotesListView.Items[0].SubItems[1].Text);
                //				Assert.AreEqual("Spanish", m_builder.NotesListView.Items[0].SubItems[2].Text);
                Assert.AreEqual("US-ASCII", m_builder.NotesListView.Items[0].SubItems[2].Text);

                Assert.AreEqual(enConsNoteFileName2, m_builder.NotesListView.Items[1].Text);
                Assert.AreEqual("MAT, MRK", m_builder.NotesListView.Items[1].SubItems[1].Text);
                //				Assert.AreEqual("Spanish", m_builder.NotesListView.Items[1].SubItems[2].Text);
                Assert.AreEqual("US-ASCII", m_builder.NotesListView.Items[1].SubItems[2].Text);
            }
        }