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); } } }
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); } }