/// <summary> /// Writes the specified Markdown object. /// </summary> /// <param name="obj">The Markdown object to write to this renderer.</param> public void Write(MarkdownObject obj) { if (obj == null) { return; } // Calls before writing an object ObjectWriteBefore?.Invoke(this, obj); var objectType = obj.GetType(); IMarkdownObjectRenderer renderer; // Handle regular renderers if (objectType == previousObjectType) { renderer = previousRenderer; } else if (!renderersPerType.TryGetValue(objectType, out renderer)) { for (int i = 0; i < ObjectRenderers.Count; i++) { var testRenderer = ObjectRenderers[i]; if (testRenderer.Accept(this, obj)) { renderersPerType[objectType] = renderer = testRenderer; break; } } } if (renderer != null) { renderer.Write(this, obj); previousObjectType = objectType; previousRenderer = renderer; } else if (obj is ContainerBlock containerBlock) { WriteChildren(containerBlock); } else if (obj is ContainerInline containerInline) { WriteChildren(containerInline); } // Calls after writing an object ObjectWriteAfter?.Invoke(this, obj); }
/// <summary> /// Called to announce the completion of an element by firing the <see cref="ObjectWriteAfter"/> event. /// </summary> /// <param name="elementCompleted">The completed element.</param> public void OnCompletionOfElement(Atom elementCompleted) { ObjectWriteAfter?.Invoke(this, elementCompleted); }