use crate::Testament;
use crate::book::{Book, Ordering};

pub static GENESIS: Book = Book {
    title: "Genesis",
    testament: Testament::Old,
    aliases: &["The First Book of Moses", "First Book of Moses", "1 Moses"],
    abbreviations: &[
        "Gen", "Ge", "Gn", // USFM/Paratext
        "GEN",
    ],
    sort_order: Ordering {
        english: 1,
        septuagint: 1,
        vulgate: 1,
        lenningrad: 1,
        bhs: 1,
        snaith: -1,
        talmud: 1,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 31, 25, 24, 26, 32, 22, 24, 22, 29, 32, 32, 20, 18, 24, 21, 16, 27, 33, 38, 18, 34, 24,
        20, 67, 34, 35, 46, 22, 35, 43, 55, 32, 20, 31, 29, 43, 36, 30, 23, 23, 57, 38, 34, 34, 28,
        34, 31, 22, 33, 26,
    ],
};

pub static EXODUS: Book = Book {
    title: "Exodus",
    testament: Testament::Old,
    aliases: &[
        "The Second Book of Moses",
        "Second Book of Moses",
        "2 Moses",
    ],
    abbreviations: &[
        "Exod", "Exo", "Ex", // USFM/Paratext
        "EXO",
    ],
    sort_order: Ordering {
        english: 2,
        septuagint: 2,
        vulgate: 2,
        lenningrad: 2,
        bhs: 2,
        snaith: -1,
        talmud: 2,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 22, 25, 22, 31, 23, 30, 25, 32, 35, 29, 10, 51, 22, 31, 27, 36, 16, 27, 25, 26, 36, 31,
        33, 18, 40, 37, 21, 43, 46, 38, 18, 35, 23, 35, 35, 38, 29, 31, 43, 38,
    ],
};

pub static LEVITICUS: Book = Book {
    title: "Leviticus",
    testament: Testament::Old,
    aliases: &["The Third Book of Moses", "Third Book of Moses", "3 Moses"],
    abbreviations: &[
        "Lev", "Le", "Lv", // USFM/Paratext
        "LEV",
    ],
    sort_order: Ordering {
        english: 3,
        septuagint: 3,
        vulgate: 3,
        lenningrad: 3,
        bhs: 3,
        snaith: -1,
        talmud: 3,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 17, 16, 17, 35, 19, 30, 38, 36, 24, 20, 47, 8, 59, 57, 33, 34, 16, 30, 37, 27, 24, 33,
        44, 23, 55, 46, 34,
    ],
};

pub static NUMBERS: Book = Book {
    title: "Numbers",
    testament: Testament::Old,
    aliases: &[
        "The Fourth Book of Moses",
        "Fourth Book of Moses",
        "4 Moses",
    ],
    abbreviations: &[
        "Num", "Nu", "Nm", "Nb", // USFM/Paratext
        "NUM",
    ],
    sort_order: Ordering {
        english: 4,
        septuagint: 4,
        vulgate: 4,
        lenningrad: 4,
        bhs: 4,
        snaith: -1,
        talmud: 4,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 54, 34, 51, 49, 31, 27, 89, 26, 23, 36, 35, 16, 33, 45, 41, 50, 13, 32, 22, 29, 35, 41,
        30, 25, 18, 65, 23, 31, 40, 16, 54, 42, 56, 29, 34, 13,
    ],
};

pub static DEUTERONOMY: Book = Book {
    title: "Deuteronomy",
    testament: Testament::Old,
    aliases: &["The Fifth Book of Moses", "Fifth Book of Moses", "5 Moses"],
    abbreviations: &[
        "Deut", "De", "Dt", // USFM/Paratext
        "DEU",
    ],
    sort_order: Ordering {
        english: 5,
        septuagint: 5,
        vulgate: 5,
        lenningrad: 5,
        bhs: 5,
        snaith: -1,
        talmud: 5,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 46, 37, 29, 49, 33, 25, 26, 20, 29, 22, 32, 32, 18, 29, 23, 22, 20, 22, 21, 20, 23, 30,
        25, 22, 19, 19, 26, 68, 29, 20, 30, 52, 29, 12,
    ],
};

pub static JOSHUA: Book = Book {
    title: "Joshua",
    testament: Testament::Old,
    aliases: &["The Book of Joshua", "Book of Joshua"],
    abbreviations: &[
        "Josh", "Jos", "Jsh", // USFM/Paratext
        "JOS",
    ],
    sort_order: Ordering {
        english: 6,
        septuagint: 6,
        vulgate: 6,
        lenningrad: 6,
        bhs: 6,
        snaith: -1,
        talmud: 6,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 18, 24, 17, 24, 15, 27, 26, 35, 27, 43, 23, 24, 33, 15, 63, 10, 18, 28, 51, 9, 45, 34,
        16, 33,
    ],
};

pub static JUDGES: Book = Book {
    title: "Judges",
    testament: Testament::Old,
    aliases: &["The Book of Judges", "Book of Judges"],
    abbreviations: &[
        "Judg", "Jdg", "Jg", "Jdgs", // USFM/Paratext
        "JDG",
    ],
    sort_order: Ordering {
        english: 7,
        septuagint: 7,
        vulgate: 7,
        lenningrad: 7,
        bhs: 7,
        snaith: -1,
        talmud: 7,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 36, 23, 31, 24, 31, 40, 25, 35, 57, 18, 40, 15, 25, 20, 20, 31, 13, 31, 30, 48, 25,
    ],
};

pub static RUTH: Book = Book {
    title: "Ruth",
    testament: Testament::Old,
    aliases: &["The Book of Ruth", "Book of Ruth"],
    abbreviations: &[
        "Rth", "Ru", // USFM/Paratext
        "RUT",
    ],
    sort_order: Ordering {
        english: 8,
        septuagint: 8,
        vulgate: 8,
        lenningrad: 32,
        bhs: 32,
        snaith: -1,
        talmud: 27,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 22, 23, 18, 22],
};

pub static FIRST_SAMUEL: Book = Book {
    title: "1 Samuel",
    testament: Testament::Old,
    aliases: &[
        "The First Book of Samuel",
        "First Book of Samuel",
        "First Samuel",
        "I Samuel",
        "1st Samuel",
        // Orthodox Bibles
        "1 Kingdoms",
        "1 Kingdoms of Israel",
    ],
    abbreviations: &[
        "1 Sam",
        "1Sam",
        "1Sm",
        "1 Sm",
        "I Sam",
        "1Sa",
        // Additional common forms
        "1 Sa",
        "1S",
        "I Sa",
        "1st Sam",
        "First Sam",
        // USFM/Paratext
        "1SA",
    ],
    sort_order: Ordering {
        english: 9,
        septuagint: 9,
        vulgate: 9,
        lenningrad: 8,
        bhs: 8,
        snaith: -1,
        talmud: 8,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 28, 36, 21, 22, 12, 21, 17, 22, 27, 27, 15, 25, 23, 52, 35, 23, 58, 30, 24, 42, 15, 23,
        29, 22, 44, 25, 12, 25, 11, 31, 13,
    ],
};

pub static SECOND_SAMUEL: Book = Book {
    title: "2 Samuel",
    testament: Testament::Old,
    aliases: &[
        "The Second Book of Samuel",
        "Second Book of Samuel",
        "Second Samuel",
        "II Samuel",
        "2nd Samuel",
        // Orthodox Bibles
        "2 Kingdoms",
        "2 Kingdoms of Israel",
    ],
    abbreviations: &[
        "2 Sam",
        "2Sam",
        "2Sm",
        "2 Sm",
        "II Sam",
        "2Sa",
        // Additional common forms
        "2 Sa",
        "2S",
        "II Sa",
        "2nd Sam",
        "Second Sam",
        // USFM/Paratext
        "2SA",
    ],
    sort_order: Ordering {
        english: 10,
        septuagint: 10,
        vulgate: 10,
        lenningrad: 9,
        bhs: 9,
        snaith: -1,
        talmud: 9,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 27, 32, 39, 12, 25, 23, 29, 18, 13, 19, 27, 31, 39, 33, 37, 23, 29, 33, 43, 26, 22, 51,
        39, 25,
    ],
};

pub static FIRST_KINGS: Book = Book {
    title: "1 Kings",
    testament: Testament::Old,
    aliases: &[
        "The First Book of Kings",
        "First Book of Kings",
        "First Kings",
        "I Kings",
        "1st Kings",
        // Orthodox Bibles
        "3 Kingdoms",
        "3 Kingdoms of Israel",
    ],
    abbreviations: &[
        "1 Kgs",
        "1Kgs",
        "1 Ki",
        "1Ki",
        "I Kgs",
        "1Kg",
        // Additional common forms
        "1K",
        "1Kin",
        "I Ki",
        "1st Kgs",
        "First Kgs",
        // USFM/Paratext
        "1KI",
    ],
    sort_order: Ordering {
        english: 11,
        septuagint: 11,
        vulgate: 11,
        lenningrad: 10,
        bhs: 10,
        snaith: -1,
        talmud: 10,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 53, 46, 28, 34, 18, 38, 51, 66, 28, 29, 43, 33, 34, 31, 34, 34, 24, 46, 21, 43, 29, 53,
    ],
};

pub static SECOND_KINGS: Book = Book {
    title: "2 Kings",
    testament: Testament::Old,
    aliases: &[
        "The Second Book of Kings",
        "Second Book of Kings",
        "Second Kings",
        "II Kings",
        "2nd Kings",
        // Orthodox Bibles
        "4 Kingdoms",
        "4 Kingdoms of Israel",
    ],
    abbreviations: &[
        "2 Kgs",
        "2Kgs",
        "2 Ki",
        "2Ki",
        "II Kgs",
        "2Kg",
        // Additional common forms
        "2K",
        "2Kin",
        "II Ki",
        "2nd Kgs",
        "Second Kgs",
        // USFM/Paratext
        "2KI",
    ],
    sort_order: Ordering {
        english: 12,
        septuagint: 12,
        vulgate: 12,
        lenningrad: 11,
        bhs: 11,
        snaith: -1,
        talmud: 11,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 18, 25, 27, 44, 27, 33, 20, 29, 37, 36, 21, 21, 25, 29, 38, 20, 41, 37, 37, 21, 26, 20,
        37, 20, 30,
    ],
};

pub static FIRST_CHRONICLES: Book = Book {
    title: "1 Chronicles",
    testament: Testament::Old,
    aliases: &[
        "The First Book of Chronicles",
        "First Book of Chronicles",
        "First Chronicles",
        "I Chronicles",
        "1st Chronicles",
        // Latin/Vulgate tradition
        "1 Paralipomenon",
        "I Paralipomenon",
    ],
    abbreviations: &[
        "1 Chr",
        "1Chr",
        "1 Ch",
        "1Ch",
        "I Chr",
        "1Chron",
        // Additional common forms
        "1 Chron",
        "I Chron",
        "I Ch",
        "1st Chron",
        "First Chron",
        // USFM/Paratext
        "1CH",
    ],
    sort_order: Ordering {
        english: 13,
        septuagint: 13,
        vulgate: 13,
        lenningrad: 27,
        bhs: 27,
        snaith: -1,
        talmud: 38,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 54, 55, 24, 43, 26, 81, 40, 40, 44, 14, 47, 40, 14, 17, 29, 43, 27, 17, 19, 8, 30, 19,
        32, 31, 31, 32, 34, 21, 30,
    ],
};

pub static SECOND_CHRONICLES: Book = Book {
    title: "2 Chronicles",
    testament: Testament::Old,
    aliases: &[
        "The Second Book of Chronicles",
        "Second Book of Chronicles",
        "Second Chronicles",
        "II Chronicles",
        "2nd Chronicles",
        // Latin/Vulgate tradition
        "2 Paralipomenon",
        "II Paralipomenon",
    ],
    abbreviations: &[
        "2 Chr",
        "2Chr",
        "2 Ch",
        "2Ch",
        "II Chr",
        "2Chron",
        // Additional common forms
        "2 Chron",
        "II Chron",
        "II Ch",
        "2nd Chron",
        "Second Chron",
        // USFM/Paratext
        "2CH",
    ],
    sort_order: Ordering {
        english: 14,
        septuagint: 14,
        vulgate: 14,
        lenningrad: 28,
        bhs: 28,
        snaith: -1,
        talmud: 39,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 17, 18, 17, 22, 14, 42, 22, 18, 31, 19, 23, 16, 22, 15, 19, 14, 19, 34, 11, 37, 20, 12,
        21, 27, 28, 23, 9, 27, 36, 27, 21, 33, 25, 33, 27, 23,
    ],
};

pub static EZRA: Book = Book {
    title: "Ezra",
    testament: Testament::Old,
    aliases: &[
        "The Book of Ezra",
        "Book of Ezra",
        // Sometimes combined with Nehemiah
        "Ezra-Nehemiah",
    ],
    abbreviations: &[
        "Ezra", "Ezr", "Ez", // USFM/Paratext
        "EZR",
    ],
    sort_order: Ordering {
        english: 15,
        septuagint: 15,
        vulgate: 15,
        lenningrad: 38,
        bhs: 38,
        snaith: -1,
        talmud: 36,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 11, 70, 13, 24, 17, 22, 28, 36, 15, 44],
};

pub static NEHEMIAH: Book = Book {
    title: "Nehemiah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Nehemiah",
        "Book of Nehemiah",
        // Vulgate calls it 2 Esdras
        "2 Esdras",
        "II Esdras",
    ],
    abbreviations: &[
        "Neh", "Ne", // USFM/Paratext
        "NEH",
    ],
    sort_order: Ordering {
        english: 16,
        septuagint: 16,
        vulgate: 16,
        lenningrad: 39,
        bhs: 39,
        snaith: -1,
        talmud: 37,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 11, 20, 32, 23, 19, 19, 73, 18, 38, 39, 36, 47, 31],
};

pub static ESTHER: Book = Book {
    title: "Esther",
    testament: Testament::Old,
    aliases: &["The Book of Esther", "Book of Esther"],
    abbreviations: &[
        "Esth", "Est", "Es", // USFM/Paratext
        "EST",
    ],
    sort_order: Ordering {
        english: 17,
        septuagint: 17,
        vulgate: 17,
        lenningrad: 36,
        bhs: 36,
        snaith: -1,
        talmud: 35,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 22, 23, 15, 17, 14, 14, 10, 17, 32, 3],
};

pub static JOB: Book = Book {
    title: "Job",
    testament: Testament::Old,
    aliases: &["The Book of Job", "Book of Job"],
    abbreviations: &[
        "Job", "Jb", // USFM/Paratext
        "JOB",
    ],
    sort_order: Ordering {
        english: 18,
        septuagint: 22,
        vulgate: 18,
        lenningrad: 30,
        bhs: 30,
        snaith: -1,
        talmud: 29,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 22, 13, 26, 21, 27, 30, 21, 22, 35, 22, 20, 25, 28, 22, 35, 22, 16, 21, 29, 29, 34, 30,
        17, 25, 6, 14, 23, 28, 25, 31, 40, 22, 33, 37, 16, 33, 24, 41, 30, 24, 34, 17,
    ],
};

pub static PSALMS: Book = Book {
    title: "Psalms",
    testament: Testament::Old,
    aliases: &[
        "The Book of Psalms",
        "Book of Psalms",
        "Psalm",
        "Psalter",
        "The Psalter",
    ],
    abbreviations: &[
        "Ps", "Pss", "Psa", "Psm", "Pslm", // USFM/Paratext
        "PSA",
    ],
    sort_order: Ordering {
        english: 19,
        septuagint: 18,
        vulgate: 19,
        lenningrad: 29,
        bhs: 29,
        snaith: -1,
        talmud: 28,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 6, 12, 8, 8, 12, 10, 17, 9, 20, 18, 7, 8, 6, 7, 5, 11, 15, 50, 14, 9, 13, 31, 6, 10, 22,
        12, 14, 9, 11, 12, 24, 11, 22, 22, 28, 12, 40, 22, 13, 17, 13, 11, 5, 26, 17, 11, 9, 14,
        20, 23, 19, 9, 6, 7, 23, 13, 11, 11, 17, 12, 8, 12, 11, 10, 13, 20, 7, 35, 36, 5, 24, 20,
        28, 23, 10, 12, 20, 72, 13, 19, 16, 8, 18, 12, 13, 17, 7, 18, 52, 17, 16, 15, 5, 23, 11,
        13, 12, 9, 9, 5, 8, 28, 22, 35, 45, 48, 43, 13, 31, 7, 10, 10, 9, 8, 18, 19, 2, 29, 176, 7,
        8, 9, 4, 8, 5, 6, 5, 6, 8, 8, 3, 18, 3, 3, 21, 26, 9, 8, 24, 13, 10, 7, 12, 15, 21, 10, 20,
        14, 9, 6,
    ],
};

pub static PROVERBS: Book = Book {
    title: "Proverbs",
    testament: Testament::Old,
    aliases: &[
        "The Book of Proverbs",
        "Book of Proverbs",
        "The Proverbs",
        "Proverbs of Solomon",
    ],
    abbreviations: &[
        "Prov", "Pro", "Prv", "Pr", // USFM/Paratext
        "PRO",
    ],
    sort_order: Ordering {
        english: 20,
        septuagint: 19,
        vulgate: 20,
        lenningrad: 31,
        bhs: 31,
        snaith: -1,
        talmud: 30,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 33, 22, 35, 27, 23, 35, 27, 36, 18, 32, 31, 28, 25, 35, 33, 33, 28, 24, 29, 30, 31, 29,
        35, 34, 28, 28, 27, 28, 27, 33, 31,
    ],
};

pub static ECCLESIASTES: Book = Book {
    title: "Ecclesiastes",
    testament: Testament::Old,
    aliases: &[
        "The Preacher",
        "Qohelet",
        "Qoheleth",
        "The Book of Ecclesiastes",
        "Book of Ecclesiastes",
        "Koheleth",
    ],
    abbreviations: &[
        "Eccl", "Ecc", "Eccles", "Qoh", "Ec",    // Additional forms
        "Eccle", // USFM/Paratext
        "ECC",
    ],
    sort_order: Ordering {
        english: 21,
        septuagint: 20,
        vulgate: 21,
        lenningrad: 34,
        bhs: 34,
        snaith: -1,
        talmud: 31,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 18, 26, 22, 16, 20, 12, 29, 17, 18, 20, 10, 14],
};

pub static SONG_OF_SONGS: Book = Book {
    title: "Song of Songs",
    testament: Testament::Old,
    aliases: &[
        "Song of Solomon",
        "The Song of Solomon",
        "Canticles",
        "Canticle of Canticles",
        "The Song of Songs",
        "Song of Songs of Solomon",
    ],
    abbreviations: &[
        "Song",
        "Song of Sol",
        "Sg",
        "SoS",
        "Cant",
        // Additional forms
        "So",
        "SS",
        // USFM/Paratext
        "SNG",
    ],
    sort_order: Ordering {
        english: 22,
        septuagint: 21,
        vulgate: 22,
        lenningrad: 33,
        bhs: 33,
        snaith: -1,
        talmud: 32,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 17, 17, 11, 16, 16, 13, 13, 14],
};

pub static ISAIAH: Book = Book {
    title: "Isaiah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Isaiah",
        "Book of Isaiah",
        "The Book of the Prophet Isaiah",
    ],
    abbreviations: &[
        "Isa", "Is", // USFM/Paratext
        "ISA",
    ],
    sort_order: Ordering {
        english: 23,
        septuagint: 35,
        vulgate: 23,
        lenningrad: 12,
        bhs: 12,
        snaith: -1,
        talmud: 14,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 31, 22, 26, 6, 30, 13, 25, 22, 21, 34, 16, 6, 22, 32, 9, 14, 14, 7, 25, 6, 17, 25, 18,
        23, 12, 21, 13, 29, 24, 33, 9, 20, 24, 17, 10, 22, 38, 22, 8, 31, 29, 25, 28, 28, 25, 13,
        15, 22, 26, 11, 23, 15, 12, 17, 13, 12, 21, 14, 21, 22, 11, 12, 19, 12, 25, 24,
    ],
};

pub static JEREMIAH: Book = Book {
    title: "Jeremiah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Jeremiah",
        "Book of Jeremiah",
        "The Book of the Prophet Jeremiah",
    ],
    abbreviations: &[
        "Jer", "Je", "Jr", // USFM/Paratext
        "JER",
    ],
    sort_order: Ordering {
        english: 24,
        septuagint: 36,
        vulgate: 24,
        lenningrad: 13,
        bhs: 13,
        snaith: -1,
        talmud: 12,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 19, 37, 25, 31, 31, 30, 34, 22, 26, 25, 23, 17, 27, 22, 21, 21, 27, 23, 15, 18, 14, 30,
        40, 10, 38, 24, 22, 17, 32, 24, 40, 44, 26, 22, 19, 32, 21, 28, 18, 16, 18, 22, 13, 30, 5,
        28, 7, 47, 39, 46, 64, 34,
    ],
};

pub static LAMENTATIONS: Book = Book {
    title: "Lamentations",
    testament: Testament::Old,
    aliases: &[
        "The Lamentations of Jeremiah",
        "Lamentations of Jeremiah",
        "The Book of Lamentations",
        "Book of Lamentations",
        "Dirges",
    ],
    abbreviations: &[
        "Lam", "La", // USFM/Paratext
        "LAM",
    ],
    sort_order: Ordering {
        english: 25,
        septuagint: 37,
        vulgate: 25,
        lenningrad: 35,
        bhs: 35,
        snaith: -1,
        talmud: 33,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 22, 22, 66, 22, 22],
};

pub static EZEKIEL: Book = Book {
    title: "Ezekiel",
    testament: Testament::Old,
    aliases: &[
        "The Book of Ezekiel",
        "Book of Ezekiel",
        "The Book of the Prophet Ezekiel",
    ],
    abbreviations: &[
        "Ezek", "Eze", "Ezk", // USFM/Paratext
        "EZK",
    ],
    sort_order: Ordering {
        english: 26,
        septuagint: 38,
        vulgate: 26,
        lenningrad: 14,
        bhs: 14,
        snaith: -1,
        talmud: 13,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[
        0, 28, 10, 27, 17, 17, 14, 27, 18, 11, 22, 25, 28, 23, 23, 8, 63, 24, 32, 14, 49, 32, 31,
        49, 27, 17, 21, 36, 26, 21, 26, 18, 32, 33, 31, 15, 38, 28, 23, 29, 49, 26, 20, 27, 31, 25,
        24, 23, 35,
    ],
};

pub static DANIEL: Book = Book {
    title: "Daniel",
    testament: Testament::Old,
    aliases: &[
        "The Book of Daniel",
        "Book of Daniel",
        "The Book of the Prophet Daniel",
    ],
    abbreviations: &[
        "Dan", "Da", "Dn", // USFM/Paratext
        "DAN",
    ],
    sort_order: Ordering {
        english: 27,
        septuagint: 39,
        vulgate: 27,
        lenningrad: 37,
        bhs: 37,
        snaith: -1,
        talmud: 34,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 21, 49, 30, 37, 31, 28, 28, 27, 27, 21, 45, 13],
};

pub static HOSEA: Book = Book {
    title: "Hosea",
    testament: Testament::Old,
    aliases: &[
        "The Book of Hosea",
        "Book of Hosea",
        "The Book of the Prophet Hosea",
    ],
    abbreviations: &[
        "Hos", "Ho", // USFM/Paratext
        "HOS",
    ],
    sort_order: Ordering {
        english: 28,
        septuagint: 23,
        vulgate: 28,
        lenningrad: 15,
        bhs: 15,
        snaith: -1,
        talmud: 15,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 11, 23, 5, 19, 15, 11, 16, 14, 17, 15, 12, 14, 16, 9],
};

pub static JOEL: Book = Book {
    title: "Joel",
    testament: Testament::Old,
    aliases: &[
        "The Book of Joel",
        "Book of Joel",
        "The Book of the Prophet Joel",
    ],
    abbreviations: &[
        "Joel", "Jl",  // Additional forms
        "Joe", // USFM/Paratext
        "JOL",
    ],
    sort_order: Ordering {
        english: 29,
        septuagint: 26,
        vulgate: 29,
        lenningrad: 16,
        bhs: 16,
        snaith: -1,
        talmud: 16,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 20, 32, 21],
};

pub static AMOS: Book = Book {
    title: "Amos",
    testament: Testament::Old,
    aliases: &[
        "The Book of Amos",
        "Book of Amos",
        "The Book of the Prophet Amos",
    ],
    abbreviations: &[
        "Amos", "Am", // USFM/Paratext
        "AMO",
    ],
    sort_order: Ordering {
        english: 30,
        septuagint: 24,
        vulgate: 30,
        lenningrad: 17,
        bhs: 17,
        snaith: -1,
        talmud: 17,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 15, 16, 15, 13, 27, 14, 17, 14, 15],
};

pub static OBADIAH: Book = Book {
    title: "Obadiah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Obadiah",
        "Book of Obadiah",
        "The Book of the Prophet Obadiah",
    ],
    abbreviations: &[
        "Obad", "Ob", // USFM/Paratext
        "OBA",
    ],
    sort_order: Ordering {
        english: 31,
        septuagint: 27,
        vulgate: 31,
        lenningrad: 18,
        bhs: 18,
        snaith: -1,
        talmud: 18,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 21],
};

pub static JONAH: Book = Book {
    title: "Jonah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Jonah",
        "Book of Jonah",
        "The Book of the Prophet Jonah",
    ],
    abbreviations: &[
        "Jonah", "Jon", "Jnh", // USFM/Paratext
        "JON",
    ],
    sort_order: Ordering {
        english: 32,
        septuagint: 28,
        vulgate: 32,
        lenningrad: 19,
        bhs: 19,
        snaith: -1,
        talmud: 19,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 17, 10, 10, 11],
};

pub static MICAH: Book = Book {
    title: "Micah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Micah",
        "Book of Micah",
        "The Book of the Prophet Micah",
    ],
    abbreviations: &[
        "Mic", "Mc", // USFM/Paratext
        "MIC",
    ],
    sort_order: Ordering {
        english: 33,
        septuagint: 25,
        vulgate: 33,
        lenningrad: 20,
        bhs: 20,
        snaith: -1,
        talmud: 20,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 16, 13, 12, 13, 15, 16, 20],
};

pub static NAHUM: Book = Book {
    title: "Nahum",
    testament: Testament::Old,
    aliases: &[
        "The Book of Nahum",
        "Book of Nahum",
        "The Book of the Prophet Nahum",
    ],
    abbreviations: &[
        "Nah", "Na", // USFM/Paratext
        "NAM",
    ],
    sort_order: Ordering {
        english: 34,
        septuagint: 29,
        vulgate: 34,
        lenningrad: 21,
        bhs: 21,
        snaith: -1,
        talmud: 21,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 15, 13, 19],
};

pub static HABAKKUK: Book = Book {
    title: "Habakkuk",
    testament: Testament::Old,
    aliases: &[
        "The Book of Habakkuk",
        "Book of Habakkuk",
        "The Book of the Prophet Habakkuk",
        // Alternate spelling
        "Habacuc",
    ],
    abbreviations: &[
        "Hab", "Hb", // USFM/Paratext
        "HAB",
    ],
    sort_order: Ordering {
        english: 35,
        septuagint: 30,
        vulgate: 35,
        lenningrad: 22,
        bhs: 22,
        snaith: -1,
        talmud: 22,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 17, 20, 19],
};

pub static ZEPHANIAH: Book = Book {
    title: "Zephaniah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Zephaniah",
        "Book of Zephaniah",
        "The Book of the Prophet Zephaniah",
        // Alternate spelling
        "Sophonias",
    ],
    abbreviations: &[
        "Zeph", "Zep", "Zp", // USFM/Paratext
        "ZEP",
    ],
    sort_order: Ordering {
        english: 36,
        septuagint: 31,
        vulgate: 36,
        lenningrad: 23,
        bhs: 23,
        snaith: -1,
        talmud: 23,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 18, 15, 20],
};

pub static HAGGAI: Book = Book {
    title: "Haggai",
    testament: Testament::Old,
    aliases: &[
        "The Book of Haggai",
        "Book of Haggai",
        "The Book of the Prophet Haggai",
        // Alternate spelling
        "Aggeus",
    ],
    abbreviations: &[
        "Hag", "Hg", // USFM/Paratext
        "HAG",
    ],
    sort_order: Ordering {
        english: 37,
        septuagint: 32,
        vulgate: 37,
        lenningrad: 24,
        bhs: 24,
        snaith: -1,
        talmud: 24,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 15, 23],
};

pub static ZECHARIAH: Book = Book {
    title: "Zechariah",
    testament: Testament::Old,
    aliases: &[
        "The Book of Zechariah",
        "Book of Zechariah",
        "The Book of the Prophet Zechariah",
        // Alternate spelling
        "Zacharias",
    ],
    abbreviations: &[
        "Zech", "Zec", "Zc", // USFM/Paratext
        "ZEC",
    ],
    sort_order: Ordering {
        english: 38,
        septuagint: 33,
        vulgate: 38,
        lenningrad: 25,
        bhs: 25,
        snaith: -1,
        talmud: 25,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 21, 13, 10, 14, 11, 15, 14, 23, 17, 12, 17, 14, 9, 21],
};

pub static MALACHI: Book = Book {
    title: "Malachi",
    testament: Testament::Old,
    aliases: &[
        "The Book of Malachi",
        "Book of Malachi",
        "The Book of the Prophet Malachi",
        // Alternate spelling
        "Malachias",
    ],
    abbreviations: &[
        "Mal", "Ml", // USFM/Paratext
        "MAL",
    ],
    sort_order: Ordering {
        english: 39,
        septuagint: 34,
        vulgate: 39,
        lenningrad: 26,
        bhs: 26,
        snaith: -1,
        talmud: 26,
        vaticanus: -1,
        sinaiticus: -1,
        alexandrinus: -1,
    },
    layout: &[0, 14, 17, 18, 6],
};
