Exemplo n.º 1
0
        private static void WriteFigureLinkLiteralInline(OpenXMLRenderer renderer, LiteralInline obj)
        {
            var text = obj.Content.ToString();

            var numberPosition   = renderer.FigureLinkList[renderer.CurrentFigureLinkListIndex.Value].Number.Position;
            var numberLength     = renderer.FigureLinkList[renderer.CurrentFigureLinkListIndex.Value].Number.Count;
            var textBeforeNumber = text.Substring(0, numberPosition - obj.Span.Start);
            var textAfterNumber  = text.Substring(numberPosition + numberLength - obj.Span.Start);

            var figureCaptionIndex = renderer.FigureLinkList[renderer.CurrentFigureLinkListIndex.Value].CaptionListIndex;
            var bookmarkId         = GetBookmarkId(renderer, figureCaptionIndex);

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

            {
                var bookmarkRef = "_REF" + bookmarkId.ToString(System.Globalization.CultureInfo.InvariantCulture);
                var field       = renderer.Push(new SimpleField {
                    Instruction = $" REF {bookmarkRef} \\h "
                });

                var captionNumber = renderer.FigureCaptionIndices[figureCaptionIndex];
                // include the number
                var run = renderer.PushNewRun();
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = captionNumber.ToString()
                });
                // renderer.ApplyStyleToRun(StyleDictionary.IdToName[FormatStyle.Link], run); // Note: This would not work - word is not formatting the text as hyperlink if the text is, like here, inside a field
                renderer.PopTo(field);
            }

            if (!string.IsNullOrEmpty(textAfterNumber))
            {
                var run = renderer.PushNewRun();
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = textAfterNumber
                });
                renderer.PopTo(run);
            }
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        protected override void Write(OpenXMLRenderer renderer, LiteralInline obj)
        {
            if (obj.Content.IsEmpty)
            {
                return;
            }

            if (renderer.CurrentFigureCaptionListIndex.HasValue &&
                Includes(obj.Span, renderer.FigureCaptionList[renderer.CurrentFigureCaptionListIndex.Value].Number.Position, renderer.FigureCaptionList[renderer.CurrentFigureCaptionListIndex.Value].Number.Count)
                )
            {
                // we are inside a figure caption, and the use of automatic figure numbering was chosen
                WriteFigureCaptionLiteralInline(renderer, obj);
            }

            else if (
                renderer.CurrentFigureLinkListIndex.HasValue &&
                Includes(obj.Span, renderer.FigureLinkList[renderer.CurrentFigureLinkListIndex.Value].Number.Position, renderer.FigureLinkList[renderer.CurrentFigureLinkListIndex.Value].Number.Count)
                )
            {
                // we are inside a link to a figure, and the use of automatic figure numbering was chosen
                WriteFigureLinkLiteralInline(renderer, obj);
            }
            else
            {
                // Write a normal inline
                var run = renderer.PushNewRun();
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = obj.Content.ToString()
                });
                renderer.PopTo(run);
            }
        }
Exemplo n.º 3
0
        protected override void Write(OpenXMLRenderer renderer, HtmlEntityInline obj)
        {
            var run = renderer.PushNewRun();

            run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
            {
                Space = SpaceProcessingModeValues.Preserve, Text = obj.Transcoded.Text
            });
            renderer.PopTo(run);
        }
Exemplo n.º 4
0
        protected override void Write(OpenXMLRenderer renderer, DelimiterInline obj)
        {
            var run = renderer.PushNewRun();

            run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
            {
                Space = SpaceProcessingModeValues.Preserve, Text = obj.ToLiteral()
            });
            renderer.WriteChildren(obj);
            renderer.PopTo(run);
        }
Exemplo n.º 5
0
        protected override void Write(OpenXMLRenderer renderer, CodeInline obj)
        {
            {
                var run = renderer.PushNewRun();
                renderer.ApplyStyleToRun(StyleDictionary.IdToName[FormatStyle.CodeInline], run);
                var runProp = run.ChildElements[0] as RunProperties;
                runProp.AppendChild(new CharacterScale {
                    Val = 25
                });
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = "\u202F"
                });
                renderer.PopTo(run);
            }

            {
                var run = renderer.PushNewRun();
                renderer.ApplyStyleToRun(StyleDictionary.IdToName[FormatStyle.CodeInline], run);
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = obj.Content.ToString().Replace(" ", "\u00A0")
                });                                                                                                                                                             // change spaces against fixed spaces
                renderer.PopTo(run);
            }

            {
                var run = renderer.PushNewRun();
                renderer.ApplyStyleToRun(StyleDictionary.IdToName[FormatStyle.CodeInline], run);
                var runProp = run.ChildElements[0] as RunProperties;
                runProp.AppendChild(new CharacterScale {
                    Val = 25
                });
                run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text()
                {
                    Space = SpaceProcessingModeValues.Preserve, Text = "\u202F"
                });
                renderer.PopTo(run);
            }
        }
Exemplo n.º 6
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);
         }
     }
 }
Exemplo n.º 7
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);
            }
        }