/// <summary>
 /// Replaces all the content within the document.
 /// </summary>
 /// <param name="content">Content to replace the existing content in the document.</param>
 /// <param name="startLocation">The starting position within the document to replace content.</param>
 /// <param name="endLocation">The ending location within the document to replace content.</param>
 public abstract Task ReplaceContentAsync(string content, IDocumentLocation startLocation, IDocumentLocation endLocation);
 /// <summary>
 /// Adds content to a target starting at an assigned
 /// </summary>
 /// <param name="location">Location within the document to add content to.</param>
 /// <param name="content">The content to be added to the document.</param>
 public abstract Task AddContentAsync(IDocumentLocation location, string content);
 /// <summary>
 /// Removes a target set of content from the document.
 /// </summary>
 /// <param name="startLocation">The starting position within the document to remove content from.</param>
 /// <param name="endLocation">The ending position within the document to remove content form.</param>
 /// <returns></returns>
 public abstract Task RemoveContentAsync(IDocumentLocation startLocation, IDocumentLocation endLocation);
 /// <summary>
 /// Gets the content of the document.
 /// </summary>
 /// <param name="startLocation">The starting position within the document to get content from.</param>
 /// <param name="endLocation">The ending position within the document to get content form.</param>
 /// <returns>The content of the document or null if there is no content in the document.</returns>
 public abstract Task <string> GetDocumentContentAsStringAsync(IDocumentLocation startLocation, IDocumentLocation endLocation);