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