// Path: asciidoctorj-api/src/main/java/org/asciidoctor/ast/Document.java
// public interface Document extends StructuralNode {
// 
//     /**
//      * @return The Title structure for this document.
//      * @see Title
//      */
//     Title getStructuredDoctitle();
// 
//     /**
//      * @return The title as a String.
//      * @see Title
//      */
//     String getDoctitle();
// 
//     /**
//      * @deprecated Please use {@link #getDoctitle()}
//      * @return The title as a String.
//      * @see Title
//      */
//     @Deprecated
//     String doctitle();
// 
//     /**
//      * Gets the author(s) information as defined in the author line
//      * in the document header, or in author & email attributes.
//      *
//      * @return authors information
//      */
//     List<Author> getAuthors();
// 
//     /**
//      * @return basebackend attribute value
//      */
//     boolean isBasebackend(String backend);
// 
//     /**
//      * @deprecated Please use {@link #isBasebackend(String)}
//      * @return basebackend attribute value
//      */
//     @Deprecated
//     boolean basebackend(String backend);
// 
//     /**
//      *
//      * @return options defined in document.
//      */
//     Map<Object, Object> getOptions();
// 
//     /**
//      * Gets the current counter with the given name and increases its value.
//      * At the first invocation the counter will return 1.
//      * After the call the value of the counter is set to the returned value plus 1.
//      * @param name
//      * @return
//      */
//     int getAndIncrementCounter(String name);
// 
//     /**
//      * Gets the current counter with the given name and increases its value.
//      * At the first invocation the counter will return the given initial value.
//      * After the call the value of the counter is set to the returned value plus 1.
//      * @param name
//      * @param initialValue
//      * @return
//      */
//     int getAndIncrementCounter(String name, int initialValue);
// 
//     /**
//      * @return Whether the sourcemap is enabled.
//      */
//     boolean isSourcemap();
// 
//     /**
//      * Toggles the sourcemap option.
//      *
//      * This method must be called before the document is parsed, such as
//      * from a Preprocessor extension. Otherwise, it has no effect.
//      *
//      * @param state The state in which to put the sourcemap (true = on, false = off).
//      */
//     void setSourcemap(boolean state);
// 
// 
//     /**
//      * The catalog contains data collected by asciidoctor that is useful to a converter.
//      *
//      * Note that the catalog is not part of the asciidoctor public API and is subject to change.
//      *
//      * @return catalog
//      */
//     Catalog getCatalog();
// 
// 
//     /**
//      * The revision information with: date, number and remark.
//      *
//      * @return revisionInfo
//      */
//     RevisionInfo getRevisionInfo();
// }
// 
// Path: asciidoctorj-api/src/main/java/org/asciidoctor/ast/DocumentHeader.java
// @Deprecated
// public interface DocumentHeader {
// 
//     /**
//      * @deprecated Use {@link Document#getAuthors()} instead.
//      */
//     @Deprecated
//     List<Author> getAuthors();
// 
//     /**
//      * @deprecated Use {@link Document#getStructuredDoctitle()} instead.
//      */
//     @Deprecated
//     Title getDocumentTitle();
// 
//     /**
//      * @deprecated Use {@link Document#getDoctitle()} instead.
//      */
//     @Deprecated
//     String getPageTitle();
// 
//     /**
//      * @deprecated Use {@link Document#getAuthors()} instead.
//      */
//     @Deprecated
//     Author getAuthor();
// 
//     /**
//      * @deprecated Use {@link Document#getRevisionInfo()} instead.
//      */
//     @Deprecated
//     RevisionInfo getRevisionInfo();
// 
//     /**
//      * @deprecated Use {@link Document#getAttributes()} instead.
//      */
//     @Deprecated
//     Map<String, Object> getAttributes();
// }
// 
// Path: asciidoctorj-api/src/main/java/org/asciidoctor/log/LogHandler.java
// public interface LogHandler {
// 
//     /**
//      * Process a log record.
//      * This method is called during conversion and will abort completely
//      * if an exception is thrown from within.
//      *
//      * @param logRecord
//      */
//     void log(LogRecord logRecord);
// 
// }
// 
// Path: asciidoctorj-api/src/main/java/org/asciidoctor/syntaxhighlighter/SyntaxHighlighterRegistry.java
// public interface SyntaxHighlighterRegistry {
// 
//     void register(Class<? extends SyntaxHighlighterAdapter> sourceHighlighter , String... names);
// 
// }


import org.asciidoctor.ast.Document;
import org.asciidoctor.ast.DocumentHeader;
import org.asciidoctor.converter.JavaConverterRegistry;
import org.asciidoctor.extension.ExtensionGroup;
import org.asciidoctor.extension.JavaExtensionRegistry;
import org.asciidoctor.extension.RubyExtensionRegistry;
import org.asciidoctor.log.LogHandler;
import org.asciidoctor.syntaxhighlighter.SyntaxHighlighterRegistry;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.*;
import java.util.stream.Collectors;
    DocumentHeader readDocumentHeader(Reader contentReader);

    /**
     * Creates an extension registry ready to be used for registering Java extensions.
     *
     * @return Extension Registry object.
     */
    JavaExtensionRegistry javaExtensionRegistry();

    /**
     * Creates an Ruby extension registry ready to be used for registering Ruby extension.
     *
     * @return Extension Registry object.
     */
    RubyExtensionRegistry rubyExtensionRegistry();

    /**
     * Creates a registry for registering Java converters.
     *
     * @return Converter Registry object.
     */
    JavaConverterRegistry javaConverterRegistry();

    /**
     * Creates a registry for registering Java syntax highlighter.
     *
     * <p>This API is experimental and might change in an incompatible way in a minor version update!</p>
     *
     * @return Converter Registry object.
     */
// Path: asciidoctorj-api/src/main/java/org/asciidoctor/ast/Document.java
// public interface Document extends StructuralNode {
// 
//     /**
//      * @return The Title structure for this document.
//      * @see Title
//      */
//     Title getStructuredDoctitle();
// 
//     /**
//      * @return The title as a String.
//      * @see Title
//      */
//     String getDoctitle();
// 
//     /**
//      * @deprecated Please use {@link #getDoctitle()}
//      * @return The title as a String.
//      * @see Title
//      */
//     @Deprecated
//     String doctitle();
// 
//     /**
//      * Gets the author(s) information as defined in the author line
//      * in the document header, or in author & email attributes.
//      *
//      * @return authors information
//      */
//     List<Author> getAuthors();
// 
//     /**
//      * @return basebackend attribute value
//      */
//     boolean isBasebackend(String backend);
// 
//     /**
//      * @deprecated Please use {@link #isBasebackend(String)}
//      * @return basebackend attribute value
//      */
//     @Deprecated
//     boolean basebackend(String backend);
// 
//     /**
//      *
//      * @return options defined in document.
//      */
//     Map<Object, Object> getOptions();
// 
//     /**
//      * Gets the current counter with the given name and increases its value.
//      * At the first invocation the counter will return 1.
//      * After the call the value of the counter is set to the returned value plus 1.
//      * @param name
//      * @return
//      */
//     int getAndIncrementCounter(String name);
// 
//     /**
//      * Gets the current counter with the given name and increases its value.
//      * At the first invocation the counter will return the given initial value.
//      * After the call the value of the counter is set to the returned value plus 1.
//      * @param name
//      * @param initialValue
//      * @return
//      */
//     int getAndIncrementCounter(String name, int initialValue);
// 
//     /**
//      * @return Whether the sourcemap is enabled.
//      */
//     boolean isSourcemap();
// 
//     /**
//      * Toggles the sourcemap option.
//      *
//      * This method must be called before the document is parsed, such as
//      * from a Preprocessor extension. Otherwise, it has no effect.
//      *
//      * @param state The state in which to put the sourcemap (true = on, false = off).
//      */
//     void setSourcemap(boolean state);
// 
// 
//     /**
//      * The catalog contains data collected by asciidoctor that is useful to a converter.
//      *
//      * Note that the catalog is not part of the asciidoctor public API and is subject to change.
//      *
//      * @return catalog
//      */
//     Catalog getCatalog();
// 
// 
//     /**
//      * The revision information with: date, number and remark.
//      *
//      * @return revisionInfo
//      */
//     RevisionInfo getRevisionInfo();
// }
// 
// Path: asciidoctorj-api/src/main/java/org/asciidoctor/ast/DocumentHeader.java
// @Deprecated
// public interface DocumentHeader {
// 
//     /**
//      * @deprecated Use {@link Document#getAuthors()} instead.
//      */
//     @Deprecated
//     List<Author> getAuthors();
// 
//     /**
//      * @deprecated Use {@link Document#getStructuredDoctitle()} instead.
//      */
//     @Deprecated
//     Title getDocumentTitle();
// 
//     /**
//      * @deprecated Use {@link Document#getDoctitle()} instead.
//      */
//     @Deprecated
//     String getPageTitle();
// 
//     /**
//      * @deprecated Use {@link Document#getAuthors()} instead.
//      */
//     @Deprecated
//     Author getAuthor();
// 
//     /**
//      * @deprecated Use {@link Document#getRevisionInfo()} instead.
//      */
//     @Deprecated
//     RevisionInfo getRevisionInfo();
// 
//     /**
//      * @deprecated Use {@link Document#getAttributes()} instead.
//      */
//     @Deprecated
//     Map<String, Object> getAttributes();
// }
// 
// Path: asciidoctorj-api/src/main/java/org/asciidoctor/log/LogHandler.java
// public interface LogHandler {
// 
//     /**
//      * Process a log record.
//      * This method is called during conversion and will abort completely
//      * if an exception is thrown from within.
//      *
//      * @param logRecord
//      */
//     void log(LogRecord logRecord);
// 
// }
// 
// Path: asciidoctorj-api/src/main/java/org/asciidoctor/syntaxhighlighter/SyntaxHighlighterRegistry.java
// public interface SyntaxHighlighterRegistry {
// 
//     void register(Class<? extends SyntaxHighlighterAdapter> sourceHighlighter , String... names);
// 
// }


// Path: asciidoctorj-api/src/main/java/org/asciidoctor/Asciidoctor.java
import org.asciidoctor.ast.Document;
import org.asciidoctor.ast.DocumentHeader;
import org.asciidoctor.converter.JavaConverterRegistry;
import org.asciidoctor.extension.ExtensionGroup;
import org.asciidoctor.extension.JavaExtensionRegistry;
import org.asciidoctor.extension.RubyExtensionRegistry;
import org.asciidoctor.log.LogHandler;
import org.asciidoctor.syntaxhighlighter.SyntaxHighlighterRegistry;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.*;
import java.util.stream.Collectors;

    DocumentHeader readDocumentHeader(Reader contentReader);

    /**
     * Creates an extension registry ready to be used for registering Java extensions.
     *
     * @return Extension Registry object.
     */
    JavaExtensionRegistry javaExtensionRegistry();

    /**
     * Creates an Ruby extension registry ready to be used for registering Ruby extension.
     *
     * @return Extension Registry object.
     */
    RubyExtensionRegistry rubyExtensionRegistry();

    /**
     * Creates a registry for registering Java converters.
     *
     * @return Converter Registry object.
     */
    JavaConverterRegistry javaConverterRegistry();

    /**
     * Creates a registry for registering Java syntax highlighter.
     *
     * <p>This API is experimental and might change in an incompatible way in a minor version update!</p>
     *
     * @return Converter Registry object.
     */
    SyntaxHighlighterRegistry syntaxHighlighterRegistry();