/**
 *  Splash
 *  Copyright (c) John Sundell 2018
 *  MIT license - see LICENSE.md
 */

import Foundation

/// Protocol used to define an output format for a `SyntaxHighlighter`.
/// Default implementations of this protocol are provided for HTML and
/// NSAttributedString outputs, and custom ones can be defined by
/// conforming to this protocol and passing the implementation to a
/// syntax highlighter when it's created.
public protocol OutputFormat {
    /// The type of builder that this output format uses. The builder's
    /// `Output` type determines the output type of the format.
    associatedtype Builder: OutputBuilder

    /// Make a new instance of the output format's builder. This will be
    /// called once per syntax highlighting session. The builder is expected
    /// to be a newly created, blank instance.
    func makeBuilder() -> Builder
}