Example #1
0
 protected override void Write(OpenXMLRenderer renderer, LineBreakInline obj)
 {
     if (obj.IsHard)
     {
         var element = renderer.Peek();
         if (element is W.Paragraph)
         {
             var run = renderer.Push(new W.Run());
             run.AppendChild(new W.Break());
             renderer.PopTo(run);
         }
         else
         {
             var paragraph = renderer.Push(new W.Paragraph());
             renderer.PopTo(paragraph);
         }
     }
     else // neither hard nor backslash -> but we have to add a space at least
     {
         var element = renderer.Peek();
         if (element is W.Paragraph)
         {
             var run = renderer.PushNewRun();
             run.AppendChild(new W.Text()
             {
                 Space = SpaceProcessingModeValues.Preserve, Text = " "
             });
             renderer.PopTo(run);
         }
         else // this should not happen, because we already are in a paragraph
         {
             var paragraph = renderer.Push(new W.Paragraph());
             renderer.PopTo(paragraph);
         }
     }
 }
Example #2
0
        private static void WriteFigureCaptionLiteralInline(OpenXMLRenderer renderer, LiteralInline obj)
        {
            // This is probably a figure caption, and maybe the category identifier and the number needs to be replaced by special elements

            // Split the text in text before the number, and after the number

            var text = obj.Content.ToString();

            var numberPosition = renderer.FigureCaptionList[renderer.CurrentFigureCaptionListIndex.Value].Number.Position;
            var numberLength   = renderer.FigureCaptionList[renderer.CurrentFigureCaptionListIndex.Value].Number.Count;
            var categoryName   = renderer.FigureCaptionList[renderer.CurrentFigureCaptionListIndex.Value].Category.Name;

            var textBeforeNumber = text.Substring(0, numberPosition - obj.Span.Start);
            var textAfterNumber  = text.Substring(numberPosition + numberLength - obj.Span.Start);

            if (!string.IsNullOrEmpty(textBeforeNumber))
            {
                var run = renderer.PushNewRun();
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = textBeforeNumber
                });
                renderer.PopTo(run);
            }

            var para       = renderer.Peek();
            var bookmarkId = GetBookmarkId(renderer, renderer.CurrentFigureCaptionListIndex.Value);

            {
                var bookmarkStart = new BookmarkStart
                {
                    Id   = bookmarkId.ToString(System.Globalization.CultureInfo.InvariantCulture),
                    Name = "_REF" + bookmarkId.ToString(System.Globalization.CultureInfo.InvariantCulture)
                };


                para.AppendChild(bookmarkStart);
            }
            {
                var field = renderer.Push(new SimpleField {
                    Instruction = $" SEQ {categoryName} \\* ARABIC "
                });

                // include the number
                var captionNumber = renderer.FigureCaptionIndices[renderer.CurrentFigureCaptionListIndex.Value];
                var run           = renderer.PushNewRun();
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = captionNumber.ToString()
                });
                renderer.PopTo(field);
            }

            {
                var bookmarkEnd = new BookmarkEnd()
                {
                    Id = bookmarkId.ToString(System.Globalization.CultureInfo.InvariantCulture)
                };
                para.AppendChild(bookmarkEnd);
            }
            if (!string.IsNullOrEmpty(textAfterNumber))
            {
                var run = renderer.PushNewRun();
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = textAfterNumber
                });
                renderer.PopTo(run);
            }
        }