import { HastElement, HastText } from "./hast";
export interface Annex extends UnstructuredBase {
    type: UnstructuredType.Annex;
}
export interface Article extends DivisionBase {
    type: DivisionType.Article;
}
export interface Bill extends DocumentBase {
    type: DocumentType.Bill;
}
export interface BillStatementOfReasons extends DocumentBase {
    type: DocumentType.BillStatementOfReasons;
}
export interface Book extends DivisionBase {
    type: DivisionType.Book;
}
export interface Chapter extends DivisionBase {
    type: DivisionType.Chapter;
}
export declare type Division = Article | Book | Chapter | Part | Section | Subsection | Subtitle | Title | Tome;
export interface DivisionBase extends DocumentNodeBase {
    children: Array<Division | Unstructured>;
    type: DivisionType;
}
export interface DivisionStatementOfReasons extends UnstructuredBase {
    type: UnstructuredType.DivisionStatementOfReasons;
}
export declare enum DivisionType {
    Article = "article",
    Book = "book",
    Chapter = "chapter",
    Part = "part",
    Section = "section",
    Subsection = "subsection",
    Subtitle = "subtitle",
    Title = "title",
    Tome = "tome"
}
export declare const divisionTypes: Set<DocumentNodeType>;
export declare type Document = Bill | BillStatementOfReasons;
export interface DocumentBase extends DocumentNodeBase {
    children: Array<Division | Unstructured>;
    type: DocumentType;
}
export declare type DocumentNode = Division | Document | Unstructured;
export interface DocumentNodeBase {
    children?: Array<Division | Unstructured>;
    headlines?: Array<HastElement | HastText>;
    lines?: Array<HastElement | HastText>;
    eId?: string;
    guid?: string;
    number?: number;
    type: DocumentNodeType;
}
export declare enum DocumentType {
    Bill = "bill",
    BillStatementOfReasons = "bill_statement_of_reasons"
}
export declare const documentTypes: Set<DocumentNodeType>;
export interface Part extends DivisionBase {
    type: DivisionType.Part;
}
export interface Section extends DivisionBase {
    type: DivisionType.Section;
}
export interface Subsection extends DivisionBase {
    type: DivisionType.Subsection;
}
export interface Subtitle extends DivisionBase {
    type: DivisionType.Subtitle;
}
export interface Title extends DivisionBase {
    type: DivisionType.Title;
}
export interface Tome extends DivisionBase {
    type: DivisionType.Tome;
}
export interface Unknown extends UnstructuredBase {
    type: UnstructuredType.Unknown;
}
export declare type Unstructured = Annex | DivisionStatementOfReasons | Unknown;
export interface UnstructuredBase extends DocumentNodeBase {
    type: UnstructuredType;
}
export declare enum UnstructuredType {
    Annex = "annex",
    DivisionStatementOfReasons = "division_statement_of_reasons",
    Unknown = "unknown"
}
export declare const unstructuredTypes: Set<DocumentNodeType>;
export declare const DocumentNodeType: {
    Annex: UnstructuredType.Annex;
    DivisionStatementOfReasons: UnstructuredType.DivisionStatementOfReasons;
    Unknown: UnstructuredType.Unknown;
    Bill: DocumentType.Bill;
    BillStatementOfReasons: DocumentType.BillStatementOfReasons;
    Article: DivisionType.Article;
    Book: DivisionType.Book;
    Chapter: DivisionType.Chapter;
    Part: DivisionType.Part;
    Section: DivisionType.Section;
    Subsection: DivisionType.Subsection;
    Subtitle: DivisionType.Subtitle;
    Title: DivisionType.Title;
    Tome: DivisionType.Tome;
};
export declare type DocumentNodeType = DivisionType | DocumentType | UnstructuredType;
export declare const documentNodeTypes: Set<DocumentNodeType>;
export declare const documentNodeWithHeadlinesTypes: Set<DocumentNodeType>;
export declare function assertNeverDocumentNode(node: never): never;
