Пример #1
0
 public MaxStringWidthForChartColumn(ConstChartVc vc, IVwStylesheet stylesheet, ISilDataAccess sda, int hvoRoot,
                                     System.Drawing.Graphics graphics, int icolumn)
     : base(stylesheet, sda, hvoRoot, graphics, icolumn)
 {
     m_vc         = vc;
     m_cLines     = m_vc.LineChoices.Count;
     m_paraWidths = new int[m_cLines];
 }
Пример #2
0
        /// <summary>
        /// Called whenever we start the display of an object, we currently use it to catch the start of
        /// a row, basedon the frag. Overriding OpenTableRow() might be more natural, but I was trying to
        /// minimize changes to other DLLs, and those routines are not currently virtual in the base class.
        /// </summary>
        /// <param name="hvo"></param>
        /// <param name="ihvo"></param>
        protected override void OpenTheObject(int hvo, int ihvo)
        {
            int frag = m_frags[m_frags.Count - 1];

            switch (frag)
            {
            case ConstChartVc.kfragChartRow:
                if (m_titleStage == TitleStage.ktsStartedSecondHeaderRow)
                {
                    // This is the best way I've found to detect the end of the second header row
                    // and terminate it.
                    m_titleStage = TitleStage.ktsFinishedHeaders;
                    m_writer.WriteEndElement();
                }
                m_writer.WriteStartElement("row");
                var row = m_rowRepo.GetObject(hvo);
                if (row.EndParagraph)
                {
                    m_writer.WriteAttributeString("endPara", "true");
                }
                else if (row.EndSentence)
                {
                    m_writer.WriteAttributeString("endSent", "true");
                }
                //ConstChartVc vc = m_vc as ConstChartVc;
                var clauseType = ConstChartVc.GetRowStyleName(row);
                m_writer.WriteAttributeString("type", clauseType);
                var label = row.Label.Text;
                if (!String.IsNullOrEmpty(label))
                {
                    m_writer.WriteAttributeString("id", label);
                }
                break;

            default:
                break;
            }
            base.OpenTheObject(hvo, ihvo);
        }
Пример #3
0
        /// <summary>
        /// Called whenever we start the display of an object, we currently use it to catch the start of
        /// a row, basedon the frag. Overriding OpenTableRow() might be more natural, but I was trying to
        /// minimize changes to other DLLs, and those routines are not currently virtual in the base class.
        /// </summary>
        /// <param name="hvo"></param>
        /// <param name="ihvo"></param>
        protected override void OpenTheObject(int hvo, int ihvo)
        {
            int frag = m_frags[m_frags.Count - 1];

            switch (frag)
            {
            case ConstChartVc.kfragChartRow:
                if (m_titleStage == TitleStage.ktsStartedSecondHeaderRow)
                {
                    // This is the best way I've found to detect the end of the second header row
                    // and terminate it.
                    m_titleStage = TitleStage.ktsFinishedHeaders;
                    m_writer.WriteEndElement();
                }
                m_writer.WriteStartElement("row");
                if (ConstituentChartLogic.GetFeature(m_cache.MainCacheAccessor, hvo, ConstituentChartLogic.EndParaFeatureName))
                {
                    m_writer.WriteAttributeString("endPara", "true");
                }
                else if (ConstituentChartLogic.GetFeature(m_cache.MainCacheAccessor, hvo, ConstituentChartLogic.EndSentFeatureName))
                {
                    m_writer.WriteAttributeString("endSent", "true");
                }
                ConstChartVc vc         = m_vc as ConstChartVc;
                string       clauseType = vc.GetRowStyleName(this, hvo);
                m_writer.WriteAttributeString("type", clauseType);
                string label = m_cache.GetMultiStringAlt(hvo, (int)CmAnnotation.CmAnnotationTags.kflidComment,
                                                         m_wsLineNumber).Text;
                if (!String.IsNullOrEmpty(label))
                {
                    m_writer.WriteAttributeString("id", label);
                }
                break;

            default:
                break;
            }
            base.OpenTheObject(hvo, ihvo);
        }
Пример #4
0
        public void Export()
        {
            using (var stream = new MemoryStream())
            {
                //Set up some cells.
                var allParaOccurrences = m_helper.MakeAnalysesUsedN(6);

                // Make last analysis point to WfiWordform instead of WfiGloss
                var lastOccurrence = allParaOccurrences[5];
                var wordform       = (lastOccurrence.Analysis as IWfiGloss).Wordform;
                lastOccurrence.Segment.AnalysesRS.Replace(1, 0, new List <ICmObject> {
                    wordform
                });
                // This block makes the first row, puts WordGroups in cells 1 and 2, and list refs in cells 1 and 2
                var row0         = m_helper.MakeFirstRow();
                var movedItem    = allParaOccurrences[1];
                var cellPart0_1  = m_helper.MakeWordGroup(row0, 1, allParaOccurrences[0], allParaOccurrences[0]);
                var marker       = m_helper.GetAMarker();
                var cellPart0_1b = m_helper.MakeChartMarker(row0, 1, marker);
                var cellPart0_2  = m_helper.MakeWordGroup(row0, 2, movedItem, movedItem);
                var marker2      = m_helper.GetAnotherMarker();
                var cellPart0_2b = m_helper.MakeChartMarker(row0, 2, marker2);
                var cellPart0_2c = m_helper.MakeChartMarker(row0, 2, marker);
                var cellPart0_3  = m_helper.MakeWordGroup(row0, 3, lastOccurrence, lastOccurrence);

                // Now another row, and cell 4 on the first has a ref to it. The new row has a WordGroup with two
                // wordforms in cell 1. The cell is two columns wide, being merged with the previous cell.
                var row1 = m_helper.MakeSecondRow();
                m_helper.MakeDependentClauseMarker(row0, 4, new[] { row1 }, ClauseTypes.Song);
                var cellPart1_1 = m_helper.MakeWordGroup(row1, 1, allParaOccurrences[2], allParaOccurrences[3]);
                cellPart1_1.MergesBefore = true;

                // Let's have some notes on row 0.
                //var notesText = Cache.ServiceLocator.GetInstance<IStTextFactory>().Create();
                row0.Notes = TsStringUtils.MakeString("This is a test note", Cache.DefaultAnalWs);
                //var notesPara = Cache.ServiceLocator.GetInstance<IStTxtParaFactory>().Create();
                //notesText.ParagraphsOS.Add(notesPara);
                //notesPara.Contents = ;

                // And some moved text in row 1
                var cellPart1_2 = m_helper.MakeWordGroup(row1, 2, allParaOccurrences[4], allParaOccurrences[4]);
                m_helper.MakeMovedTextMarker(row1, 3, cellPart1_2, true);

                // We need four rows to properly test the variations on endPara/endSent
                var row2 = m_helper.MakeRow(m_chart, "2");
                row2.EndSentence = true;
                var row3 = m_helper.MakeRow(m_chart, "3");
                row3.EndSentence  = true;
                row3.EndParagraph = true;
                m_helper.MakeRow(m_chart, "4");

                using (var writer = new XmlTextWriter(stream, Encoding.UTF8))
                {
                    using (var vc = new ConstChartVc(m_chartBody))
                    {
                        vc.LineChoices = m_chartBody.LineChoices;
                        using (var exporter = new DiscourseExporter(Cache, writer, m_chart.Hvo, vc, Cache.DefaultAnalWs))
                        {
                            writer.WriteStartDocument();
                            writer.WriteStartElement("document");
                            exporter.ExportDisplay();
                            writer.WriteEndElement();
                            writer.WriteEndDocument();
                            writer.Flush();
                            // Close makes it unuseable
                            stream.Position = 0;
                            using (var reader = new StreamReader(stream, Encoding.UTF8))
                            {
                                var result = reader.ReadToEnd();
                                var doc    = new XmlDocument();
                                doc.LoadXml(result);
                                var docNode = doc.DocumentElement;
                                Assert.AreEqual("document", docNode.Name);
                                var chartNode = VerifyNode("chart", docNode, 0, "chart", 7, 0);
                                VerifyTitleRow(chartNode);
                                VerifyTitle2Row(chartNode);
                                VerifyFirstDataRow(chartNode);
                                VerifySecondDataRow(chartNode);
                                var thirdRow = VerifyNode("row", chartNode, 4, "row", 8, 3);
                                AssertAttr(thirdRow, "endSent", "true");
                                var fourthRow = VerifyNode("row", chartNode, 5, "row", 8, 3);
                                AssertAttr(fourthRow, "endPara", "true");

                                var langNode = VerifyNode("languages", docNode, 1, "languages", 2, 0);
                                var enNode   = VerifyNode("english lang node", langNode, 0, "language", 0, 2);
                                AssertAttr(enNode, "lang", "en");
                                AssertAttr(enNode, "font", null);
                                // don't verify exact font, may depend on installation.
                            }
                        }
                    }
                }
            }
        }
Пример #5
0
        public void Export()
        {
            using (MemoryStream stream = new MemoryStream())
            {
                //Set up some cells.
                int[] allParaWfics = m_helper.MakeAnnotationsUsedN(5);

                // This block makes the first row, puts CCAs in cells 1 and 2, and list refs in cells 1 and 2
                CmIndirectAnnotation row0    = m_helper.MakeFirstRow();
                int[] movedItems             = new int[] { allParaWfics[1] };
                CmIndirectAnnotation cca0_1  = m_helper.MakeColumnAnnotation(1, new int[] { allParaWfics[0] }, row0);
                ICmPossibility       marker  = m_helper.GetAMarker();
                ICmBaseAnnotation    cca0_1b = m_helper.MakeMarkerAnnotation(1, row0, marker);
                CmIndirectAnnotation cca0_2  = m_helper.MakeColumnAnnotation(2, movedItems, row0);
                ICmPossibility       marker2 = m_helper.GetAnotherMarker();
                ICmBaseAnnotation    cca0_2b = m_helper.MakeMarkerAnnotation(2, row0, marker2);
                ICmBaseAnnotation    cca0_2c = m_helper.MakeMarkerAnnotation(2, row0, marker);

                // Now another row, and cell 4 on the first has a ref to it. The new row has a CCA with two wfics in cell 1. The cell is
                // two columns wide, being merged with the previous cell.
                CmIndirectAnnotation  row1   = m_helper.MakeSecondRow();
                ICmIndirectAnnotation cca0_4 = m_helper.MakeDependentClauseMarker(row0, 4, new int[] { row1.Hvo }, "song", "2");
                CmIndirectAnnotation  cca1_1 = m_helper.MakeColumnAnnotation(1, new int[] { allParaWfics[2], allParaWfics[3] }, row1);
                ConstituentChartLogic.SetFeature(Cache.MainCacheAccessor, cca1_1.Hvo, ConstituentChartLogic.mergeBeforeTag, true);

                // Let's have some notes on row 0.
                StText notesText = new StText();
                row0.TextOA = notesText;
                StTxtPara notesPara = new StTxtPara();
                notesText.ParagraphsOS.Append(notesPara);
                notesPara.Contents.UnderlyingTsString = Cache.MakeAnalysisTss("This is a test note");

                // And some moved text in row 1
                CmIndirectAnnotation cca1_2 = m_helper.MakeColumnAnnotation(2, new int[] { allParaWfics[4] }, row1);
                ConstituentChartLogic.SetFeature(Cache.MainCacheAccessor, cca1_2.Hvo,
                                                 ConstituentChartLogic.MovedTextFeatureName, true);
                CmIndirectAnnotation cca2_3 = m_helper.MakeMovedTextAnnotation(3, cca1_2, row1, "Preposed");

                // We need four rows to properly test the variations on endPara/endSent
                CmIndirectAnnotation row2 = m_helper.MakeRow(m_chart, "2");
                ConstituentChartLogic.SetFeature(Cache.MainCacheAccessor, row2.Hvo, ConstituentChartLogic.EndSentFeatureName, true);
                CmIndirectAnnotation row3 = m_helper.MakeRow(m_chart, "3");
                ConstituentChartLogic.SetFeature(Cache.MainCacheAccessor, row3.Hvo, ConstituentChartLogic.EndParaFeatureName, true);
                ConstituentChartLogic.SetFeature(Cache.MainCacheAccessor, row3.Hvo, ConstituentChartLogic.EndSentFeatureName, true);
                CmIndirectAnnotation row4 = m_helper.MakeRow(m_chart, "4");


                XmlWriter    writer = new XmlTextWriter(stream, Encoding.UTF8);
                ConstChartVc vc     = new ConstChartVc(m_chartBody);
                vc.LineChoices = m_chartBody.LineChoices;
                DiscourseExporter exporter = new DiscourseExporter(m_inMemoryCache.Cache, writer, m_chart.Hvo,
                                                                   vc, m_inMemoryCache.Cache.DefaultAnalWs);
                writer.WriteStartDocument();
                writer.WriteStartElement("document");
                exporter.ExportDisplay();
                writer.WriteEndElement();
                writer.WriteEndDocument();
                writer.Flush();                 // Close makes it unuseable
                stream.Position = 0;
                StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                string       result = reader.ReadToEnd();
                XmlDocument  doc    = new XmlDocument();
                doc.LoadXml(result);
                XmlNode docNode = doc.DocumentElement;
                Assert.AreEqual("document", docNode.Name);
                XmlNode chartNode = VerifyNode("chart", docNode, 0, "chart", 7, 0);
                VerifyTitleRow(chartNode);
                VerifyTitle2Row(chartNode);
                VerifyFirstDataRow(chartNode);
                VerifySecondDataRow(chartNode);
                XmlNode thirdRow = VerifyNode("row", chartNode, 4, "row", 8, 3);
                AssertAttr(thirdRow, "endSent", "true");
                XmlNode fourthRow = VerifyNode("row", chartNode, 5, "row", 8, 3);
                AssertAttr(fourthRow, "endPara", "true");


                XmlNode langNode = VerifyNode("languages", docNode, 1, "languages", 2, 0);
                XmlNode enNode   = VerifyNode("english lang node", langNode, 0, "language", 0, 2);
                AssertAttr(enNode, "lang", "en");
                AssertAttr(enNode, "font", null);                 // don't verify exact font, may depend on installation.
            }
        }