UNPKG

@gracious.tech/bible-references

Version:

Bible reference detection, parsing, and rendering that supports any language.

82 lines (81 loc) 2.83 kB
import { PassageReference } from "./passage.js"; import { books_ordered } from "./data.js"; function sort_references(refs, canonical = true) { const book_first_index = /* @__PURE__ */ new Map(); if (!canonical) { refs.forEach((ref, i) => { if (!book_first_index.has(ref.book)) { book_first_index.set(ref.book, i); } }); } return refs.slice().sort((a, b) => { const book_diff = canonical ? books_ordered.indexOf(a.book) - books_ordered.indexOf(b.book) : book_first_index.get(a.book) - book_first_index.get(b.book); if (book_diff !== 0) { return book_diff; } if (a.start_chapter !== b.start_chapter) { return a.start_chapter - b.start_chapter; } if (a.start_verse !== b.start_verse) { return a.start_verse - b.start_verse; } if (a.end_chapter !== b.end_chapter) { return a.end_chapter - b.end_chapter; } return a.end_verse - b.end_verse; }); } function simplify_references(refs) { const result = []; for (const ref of refs) { const merge_i = result.findIndex((prev2) => { var _a, _b; return prev2.overlaps(ref) || ((_a = ref.get_prev_verse()) == null ? void 0 : _a.overlaps(prev2)) || ((_b = prev2.get_prev_verse()) == null ? void 0 : _b.overlaps(ref)); }); if (merge_i === -1) { result.push(ref.simplify()); continue; } const prev = result[merge_i]; const start_ref = prev.get_start().is_after(ref.get_start()) ? ref : prev; const end_ref = ref.get_end().is_after(prev) ? ref : prev; result[merge_i] = PassageReference.from_refs(start_ref, end_ref).simplify(); } return result; } function references_to_string(refs, book_names = {}, verse_sep = ":", range_sep = "-", chapter_sep = "; ") { let result = ""; let current_book = null; let current_chapter = null; for (const ref of refs) { const same_book = ref.book === current_book; const verse_level = ref.type === "verse" || ref.type === "range_verses"; const same_chapter = same_book && ref.start_chapter === current_chapter && verse_level; let sep; let display; if (result === "") { sep = ""; display = ref.toString(book_names, verse_sep, range_sep); } else if (same_chapter) { sep = ", "; display = ref.type === "verse" ? `${ref.start_verse}` : `${ref.start_verse}${range_sep}${ref.end_verse}`; } else if (same_book) { sep = chapter_sep; display = ref.get_verses_string(verse_sep, range_sep); } else { sep = chapter_sep; display = ref.toString(book_names, verse_sep, range_sep); } result += sep + display; current_book = ref.book; current_chapter = ref.start_chapter; } return result; } export { references_to_string, simplify_references, sort_references }; //# sourceMappingURL=lists.js.map