bible-ref-parse
Version:
Identifies and parses Bible references (like John 3:16) in over 40 languages.
1 lines • 114 kB
JavaScript
const root=this;class bcv_parser{static initClass(){this.prototype.s="",this.prototype.entities=[],this.prototype.passage=null,this.prototype.regexps={},this.prototype.options={consecutive_combination_strategy:"combine",osis_compaction_strategy:"b",book_sequence_strategy:"ignore",invalid_sequence_strategy:"ignore",sequence_combination_strategy:"combine",punctuation_strategy:"us",invalid_passage_strategy:"ignore",non_latin_digits_strategy:"ignore",passage_existence_strategy:"bcv",zero_chapter_strategy:"error",zero_verse_strategy:"error",single_chapter_1_strategy:"chapter",book_alone_strategy:"ignore",book_range_strategy:"ignore",captive_end_digits_strategy:"delete",end_range_digits_strategy:"verse",include_apocrypha:!1,ps151_strategy:"c",versification_system:"default",case_sensitive:"none"}}constructor(){for(var e of(this.options={},Object.keys(bcv_parser.prototype.options||{}))){var s=bcv_parser.prototype.options[e];this.options[e]=s}this.versification_system(this.options.versification_system)}parse(e){return this.reset(),this.s=e,e=this.replace_control_characters(e),[e,this.passage.books]=Array.from(this.match_books(e)),[this.entities]=Array.from(this.match_passages(e)),this}parse_with_context(e,s){let t;return this.reset(),[s,this.passage.books]=Array.from(this.match_books(this.replace_control_characters(s))),[t,s]=Array.from(this.match_passages(s)),this.reset(),this.s=e,e=this.replace_control_characters(e),[e,this.passage.books]=Array.from(this.match_books(e)),this.passage.books.push({value:"",parsed:[],start_index:0,type:"context",context:s}),e=""+(this.passage.books.length-1)+"/9"+e,[this.entities]=Array.from(this.match_passages(e)),this}reset(){return this.s="",this.entities=[],this.passage?(this.passage.books=[],this.passage.indices={}):(this.passage=new bcv_passage,this.passage.options=this.options,this.passage.translations=this.translations)}set_options(e){for(var s of Object.keys(e||{})){var t=e[s];"include_apocrypha"===s||"versification_system"===s||"case_sensitive"===s?this[s](t):this.options[s]=t}return this}include_apocrypha(e){if(null==e||!0!==e&&!1!==e)return this;for(var s of(this.options.include_apocrypha=e,this.regexps.books=this.regexps.get_books(e,this.options.case_sensitive),Object.keys(this.translations||{}))){var t;if("aliases"!==s&&"alternates"!==s)if(null==this.translations[s].chapters&&(this.translations[s].chapters={}),null==this.translations[s].chapters.Ps&&(this.translations[s].chapters.Ps=bcv_utils.shallow_clone_book_data(this.translations.default.chapters.Ps)),!0===e)t=null!=this.translations[s].chapters.Ps151?bcv_utils.get_book_verse_count(this.translations[s].chapters.Ps151,1):bcv_utils.get_book_verse_count(this.translations.default.chapters.Ps151,1),bcv_utils.set_book_verse_count(this.translations[s].chapters.Ps,151,t);else 151===bcv_utils.get_book_chapter_count(this.translations[s].chapters.Ps)&&bcv_utils.delete_book_verse_count(this.translations[s].chapters.Ps,151)}return this}versification_system(e){let s,t;if(null==e||null==this.translations[e])return this;if(null!=this.translations.alternates.default)if("default"===e)for(s of(null!=this.translations.alternates.default.order&&(this.translations.default.order=bcv_utils.shallow_clone(this.translations.alternates.default.order)),Object.keys(this.translations.alternates.default.chapters||{})))t=this.translations.alternates.default.chapters[s],this.translations.default.chapters[s]=bcv_utils.shallow_clone_book_data(t);else this.versification_system("default");if(null==this.translations.alternates.default&&(this.translations.alternates.default={order:null,chapters:{}}),"default"!==e&&null!=this.translations[e].order&&(null==this.translations.alternates.default.order&&(this.translations.alternates.default.order=bcv_utils.shallow_clone(this.translations.default.order)),this.translations.default.order=bcv_utils.shallow_clone(this.translations[e].order)),"default"!==e&&null!=this.translations[e].chapters)for(s of Object.keys(this.translations[e].chapters||{}))t=this.translations[e].chapters[s],null==this.translations.alternates.default.chapters[s]&&(this.translations.alternates.default.chapters[s]=bcv_utils.shallow_clone_book_data(this.translations.default.chapters[s])),this.translations.default.chapters[s]=bcv_utils.shallow_clone_book_data(t);return this.options.versification_system=e,this.include_apocrypha(this.options.include_apocrypha),this}case_sensitive(e){return null==e||"none"!==e&&"books"!==e||e===this.options.case_sensitive||(this.options.case_sensitive=e,this.regexps.books=this.regexps.get_books(this.options.include_apocrypha,e)),this}translation_info(e){let s;null==e&&(e="default"),null!=e&&null!=(null!=this.translations.aliases[e]?this.translations.aliases[e].alias:void 0)&&(e=this.translations.aliases[e].alias),null!=e&&null!=this.translations[e]||(e="default");const t=this.options.versification_system;e!==t&&this.versification_system(e);const a={alias:e,books:[],chapters:{},order:bcv_utils.shallow_clone(this.translations.default.order)};for(s of Object.keys(this.translations.default.chapters||{})){var r=this.translations.default.chapters[s];a.chapters[s]=bcv_utils.shallow_clone_book_data(r)}for(s of Object.keys(a.order||{})){var n=a.order[s];a.books[n-1]=s}return e!==t&&this.versification_system(t),a}replace_control_characters(e){return e=(e=(e=e.replace(this.regexps.control," ")).replace(/\uFF1A/g,":")).replace(/\uFF1B/g,";"),"replace"===this.options.non_latin_digits_strategy&&(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/[٠۰߀०০੦૦୦0౦೦൦๐໐༠၀႐០᠐᥆᧐᪀᪐᭐᮰᱀᱐꘠꣐꤀꧐꩐꯰0]/g,"0")).replace(/[١۱߁१১੧૧୧௧౧೧൧๑໑༡၁႑១᠑᥇᧑᪁᪑᭑᮱᱁᱑꘡꣑꤁꧑꩑꯱1]/g,"1")).replace(/[٢۲߂२২੨૨୨௨౨೨൨๒໒༢၂႒២᠒᥈᧒᪂᪒᭒᮲᱂᱒꘢꣒꤂꧒꩒꯲2]/g,"2")).replace(/[٣۳߃३৩੩૩୩௩౩೩൩๓໓༣၃႓៣᠓᥉᧓᪃᪓᭓᮳᱃᱓꘣꣓꤃꧓꩓꯳3]/g,"3")).replace(/[٤۴߄४৪੪૪୪௪౪೪൪๔໔༤၄႔៤᠔᥊᧔᪄᪔᭔᮴᱄᱔꘤꣔꤄꧔꩔꯴4]/g,"4")).replace(/[٥۵߅५৫੫૫୫௫౫೫൫๕໕༥၅႕៥᠕᥋᧕᪅᪕᭕᮵᱅᱕꘥꣕꤅꧕꩕꯵5]/g,"5")).replace(/[٦۶߆६৬੬૬୬௬౬೬൬๖໖༦၆႖៦᠖᥌᧖᪆᪖᭖᮶᱆᱖꘦꣖꤆꧖꩖꯶6]/g,"6")).replace(/[٧۷߇७৭੭૭୭௭౭೭൭๗໗༧၇႗៧᠗᥍᧗᪇᪗᭗᮷᱇᱗꘧꣗꤇꧗꩗꯷7]/g,"7")).replace(/[٨۸߈८৮੮૮୮௮౮೮൮๘໘༨၈႘៨᠘᥎᧘᪈᪘᭘᮸᱈᱘꘨꣘꤈꧘꩘꯸8]/g,"8")).replace(/[٩۹߉९৯੯૯୯௯౯೯൯๙໙༩၉႙៩᠙᥏᧙᪉᪙᭙᮹᱉᱙꘩꣙꤉꧙꩙꯹9]/g,"9")),e}match_books(e){const s=[];for(var t of Array.from(this.regexps.books)){var a=!1;if(e=e.replace(t.regexp,(function(e,r,n){a=!0,s.push({value:n,parsed:t.osis,type:"book"});const o=null!=t.extra?`/${t.extra}`:"";return`${r}${s.length-1}${o}`})),!0===a&&/^[\s\x1f\d:.,;\-\u2013\u2014]+$/.test(e))break}return[e=e.replace(this.regexps.translations,(function(e){return s.push({value:e,parsed:e.toLowerCase(),type:"translation"}),`${s.length-1}`})),this.get_book_indices(s,e)]}get_book_indices(e,s){let t,a=0;const r=new RegExp("([\\x1f\\x1e])(\\d+)(?:/\\d+)?\\1","g");for(;t=r.exec(s);)e[t[2]].start_index=t.index+a,a+=e[t[2]].value.length-t[0].length;return e}match_passages(e){let s,t=[],a={};for(;s=this.regexps.escaped_passage.exec(e);){let _;var[r,n,o]=Array.from(s),i=n.length;if(s.index+=r.length-i,/\s[2-9]\d\d\s*$|\s\d{4,}\s*$/.test(n)&&(n=n.replace(/\s+\d+\s*$/,"")),/[\d\x1f\x1e)]$/.test(n)||(n=this.replace_match_end(n)),"delete"===this.options.captive_end_digits_strategy){var u=s.index+n.length;e.length>u&&/^\w/.test(e.substr(u,1))&&(n=n.replace(/[\s*]+\d+$/,"")),n=n.replace(/(\x1e[)\]]?)[\s*]*\d+$/,"$1")}var l=""===(n=n.replace(/[A-Z]+/g,(e=>e.toLowerCase()))).substr(0,1)?0:n.split("")[0].length,c={value:grammar.parse(n,{punctuation_strategy:this.options.punctuation_strategy}),type:"base",start_index:this.passage.books[o].start_index-l,match:n};"full"===this.options.book_alone_strategy&&"include"===this.options.book_range_strategy&&"b"===c.value[0].type&&(1===c.value.length||c.value.length>1&&"translation_sequence"===c.value[1].type)&&0===l&&(1===this.passage.books[o].parsed.length||this.passage.books[o].parsed.length>1&&"translation"===this.passage.books[o].parsed[1].type)&&/^[234]/.test(this.passage.books[o].parsed[0])&&this.create_book_range(e,c,o),[_,a]=Array.from(this.passage.handle_obj(c)),t=t.concat(_);var p=this.adjust_regexp_end(_,i,n.length);p>0&&(this.regexps.escaped_passage.lastIndex-=p)}return[t,a]}adjust_regexp_end(e,s,t){let a=0;return e.length>0?a=s-e[e.length-1].indices[1]-1:s!==t&&(a=s-t),a}replace_match_end(e){let s,t=e.length;for(;s=this.regexps.match_end_split.exec(e);)t=s.index+s[0].length;return t<e.length&&(e=e.substr(0,t)),e}create_book_range(e,s,t){const a=[bcv_parser.prototype.regexps.first,bcv_parser.prototype.regexps.second,bcv_parser.prototype.regexps.third],r=parseInt(this.passage.books[t].parsed[0].substr(0,1),10);for(let i=1,u=r,l=1<=u;l?i<u:i>u;l?i++:i--){var n=i===r-1?bcv_parser.prototype.regexps.range_and:bcv_parser.prototype.regexps.range_only,o=e.match(new RegExp(`(?:^|\\W)(${a[i-1]}\\s*${n}\\s*)\\x1f${t}\\x1f`,"i"));if(null!=o)return this.add_book_range_object(s,o,i)}return!1}add_book_range_object(e,s,t){const{length:a}=s[1];if(e.value[0]={type:"b_range_pre",value:[{type:"b_pre",value:t.toString(),indices:[s.index,s.index+a]},e.value[0]],indices:[0,e.value[0].indices[1]+a]},e.value[0].value[1].indices[0]+=a,e.value[0].value[1].indices[1]+=a,e.start_index-=a,e.match=s[1]+e.match,1!==e.value.length)return(()=>{const s=[];for(let t=1,r=e.value.length,n=1<=r;n?t<r:t>r;n?t++:t--)null!=e.value[t].value&&(null!=(null!=e.value[t].value[0]?e.value[t].value[0].indices:void 0)&&(e.value[t].value[0].indices[0]+=a,e.value[t].value[0].indices[1]+=a),e.value[t].indices[0]+=a,s.push(e.value[t].indices[1]+=a));return s})()}osis(){const e=[];for(var s of Array.from(this.parsed_entities()))s.osis.length>0&&e.push(s.osis);return e.join(",")}osis_and_translations(){const e=[];for(var s of Array.from(this.parsed_entities()))s.osis.length>0&&e.push([s.osis,s.translations.join(",")]);return e}osis_and_indices(){const e=[];for(var s of Array.from(this.parsed_entities()))if(s.osis.length>0){const t={osis:s.osis,translations:s.translations,indices:s.indices};null!=s.osises&&(t.osises=s.osises),e.push(t)}return e}parsed_entities(){let e=[];for(let v=0,d=this.entities.length,b=0<=d;b?v<d:v>d;b?v++:v--){var s=this.entities[v];if(s.type&&"translation_sequence"===s.type&&e.length>0&&v===e[e.length-1].entity_id+1&&(e[e.length-1].indices[1]=s.absolute_indices[1]),null!=s.passages&&!("b"===s.type&&"ignore"===this.options.book_alone_strategy||"b_range"===s.type&&"ignore"===this.options.book_range_strategy||"context"===s.type)){var t=[],a=null;if(null!=s.passages[0].translations)for(var r of Array.from(s.passages[0].translations)){var n=(null!=r.osis?r.osis.length:void 0)>0?r.osis:"";null==a&&(a=r.alias),t.push(n)}else t=[""],a="default";for(var o=[],i=[],{length:u}=s.passages,l=0,c=l,p=u,_=0<=p;_?l<p:l>p;_?l++:l--,c=l){var h=s.passages[c];null==h.type&&(h.type=s.type),!1===h.valid.valid&&("ignore"===this.options.invalid_sequence_strategy&&"sequence"===s.type&&this.snap_sequence("ignore",s,o,c,u),"ignore"===this.options.invalid_passage_strategy)||("b"!==h.type&&"b_range"!==h.type||"ignore"!==this.options.book_sequence_strategy||"sequence"!==s.type?("b_range_start"!==h.type&&"range_end_b"!==h.type||"ignore"!==this.options.book_range_strategy||this.snap_range(s,c),null==h.absolute_indices&&(h.absolute_indices=s.absolute_indices),"separate-chapters"===this.options.consecutive_combination_strategy&&h.start.c!==h.end.c?o.push({osis:h.valid.valid?this.to_osis(h.start,h.end,a):"",osises:this.get_osises_by_chapter({osis:"",start:h.start,end:h.end},a),type:h.type,indices:h.absolute_indices,translations:t,start:h.start,end:h.end,enclosed_indices:h.enclosed_absolute_indices,entity_id:v,entities:[h]}):o.push({osis:h.valid.valid?this.to_osis(h.start,h.end,a):"",type:h.type,indices:h.absolute_indices,translations:t,start:h.start,end:h.end,enclosed_indices:h.enclosed_absolute_indices,entity_id:v,entities:[h]})):this.snap_sequence("book",s,o,c,u))}if(0!==o.length||0!==i.length){if("combine"!==this.options.consecutive_combination_strategy&&"separate-chapters"!==this.options.consecutive_combination_strategy||(o.length>1&&(o=this.combine_consecutive_passages(o,a)),o=o.concat(i).sort(((e,s)=>e.indices[0]-s.indices[0]))),"separate-chapters"===this.options.consecutive_combination_strategy)for(g of Array.from(o)){if(0===g.osis.length)continue;const e=this.get_osises_by_chapter(g,a);e.length>1&&(g.osises=e)}if("separate"===this.options.sequence_combination_strategy)e=e.concat(o);else{if("separate-chapters"===this.options.consecutive_combination_strategy&&"sequence"===s.type){const s=this.group_osises_by_semicolon(o);if(s.length>1){for(const a of Array.from(s)){if(0===a.length)continue;if(a.length>1){for(g of Array.from(a)){if(0===g.osis.length)continue;const s={osis:g.osis,indices:g.indices,translations:t,entity_id:v,entities:[g]};null!=g.osises&&(s.osises=g.osises),e.push(s)}continue}const s=a.length-1,r=[a[0].indices[0],a[s].indices[1]];null!=a[s].enclosed_indices&&a[s].enclosed_indices[1]>=0&&(r[1]=a[s].enclosed_indices[1]);const n=[];let o=[];for(g of Array.from(a))g.osis.length>0&&n.push(g.osis),null!=g.osises&&(o=o.concat(g.osises));const i={osis:n.join(","),indices:r,translations:t,entity_id:v,entities:a};o.length>0&&(i.osises=o),e.push(i)}continue}}var g,x=[],f=o.length-1;for(g of(null!=o[f].enclosed_indices&&o[f].enclosed_indices[1]>=0&&(s.absolute_indices[1]=o[f].enclosed_indices[1]),Array.from(o)))g.osis.length>0&&x.push(g.osis);let a=[];if("separate-chapters"===this.options.consecutive_combination_strategy)for(g of Array.from(o))null!=g.osises&&(a=a.concat(g.osises));const r={osis:x.join(","),indices:s.absolute_indices,translations:t,entity_id:v,entities:o};a.length>0&&(r.osises=a),e.push(r)}}}}return e}to_osis(e,s,t){let a;null==s.c&&null==s.v&&e.b===s.b&&null==e.c&&null==e.v&&"first_chapter"===this.options.book_alone_strategy&&(s.c=1);const r={start:"",end:""};if(null==e.c&&(e.c=1),null==e.v&&(e.v=1),null==s.c&&(this.options.passage_existence_strategy.indexOf("c")>=0||null!=this.passage.translations[t].chapters[s.b]&&1===bcv_utils.get_book_chapter_count(this.passage.translations[t].chapters[s.b])?s.c=bcv_utils.get_book_chapter_count(this.passage.translations[t].chapters[s.b]):s.c=999),null==s.v){const e=bcv_utils.get_book_verse_count(this.passage.translations[t].chapters[s.b],s.c);null!=e&&this.options.passage_existence_strategy.indexOf("v")>=0?s.v=e:s.v=999}return this.options.include_apocrypha&&"b"===this.options.ps151_strategy&&(151===e.c&&"Ps"===e.b||151===s.c&&"Ps"===s.b)&&this.fix_ps151(e,s,t),"b"===this.options.osis_compaction_strategy&&1===e.c&&1===e.v&&(999===s.c&&999===s.v||s.c===bcv_utils.get_book_chapter_count(this.passage.translations[t].chapters[s.b])&&this.options.passage_existence_strategy.indexOf("c")>=0&&(999===s.v||s.v===bcv_utils.get_book_verse_count(this.passage.translations[t].chapters[s.b],s.c)&&this.options.passage_existence_strategy.indexOf("v")>=0))?(r.start=e.b,r.end=s.b):this.options.osis_compaction_strategy.length<=2&&1===e.v&&(999===s.v||s.v===bcv_utils.get_book_verse_count(this.passage.translations[t].chapters[s.b],s.c)&&this.options.passage_existence_strategy.indexOf("v")>=0)?(r.start=e.b+"."+e.c.toString(),r.end=s.b+"."+s.c.toString()):(r.start=e.b+"."+e.c.toString()+"."+e.v.toString(),r.end=s.b+"."+s.c.toString()+"."+s.v.toString()),a=r.start===r.end?r.start:r.start+"-"+r.end,null!=e.extra&&(a=e.extra+","+a),null!=s.extra&&(a+=","+s.extra),a}get_osises_by_chapter(e,s){if(null==e||null==e.start||null==e.end)return[];if(null==e.start.b||null==e.end.b||null==e.start.c||null==e.end.c)return null!=e.osis&&e.osis.length>0?[e.osis]:[];if(e.start.b!==e.end.b||e.start.c===e.end.c)return null!=e.osis&&e.osis.length>0?[e.osis]:[];const t=[];for(let a=e.start.c,r=e.end.c,n=e.start.c<=r;n?a<=r:a>=r;n?a++:a--){const r=a===e.start.c?e.start.v:1,n=a===e.end.c?e.end.v:bcv_utils.get_book_verse_count(this.translations[s].chapters[e.start.b],a),o={b:e.start.b,c:a,v:"bcv"===e.start.type?r:null,type:e.start.type},i={b:e.end.b,c:a,v:"bcv"===e.start.type?n:null,type:e.start.type};t.push(this.to_osis(o,i,s))}return t}get_separator_between(e,s){if(null==this.s||null==e||null==s)return"";const t=e[1],a=s[0];return a<=t?"":this.s.slice(t,a)}has_semicolon_separator(e,s){const t=this.get_separator_between(e.indices,s.indices);return/[;;]/.test(t)}group_osises_by_semicolon(e){const s=[];let t=[];for(const a of Array.from(e))0!==t.length&&this.has_semicolon_separator(t[t.length-1],a)?(s.push(t),t=[a]):t.push(a);return t.length>0&&s.push(t),s}fix_ps151(e,s,t){return"default"!==t&&null==(null!=this.translations[t]?this.translations[t].chapters.Ps151:void 0)&&this.passage.promote_book_to_translation("Ps151",t),151===e.c&&"Ps"===e.b?151===s.c&&"Ps"===s.b?(e.b="Ps151",e.c=1,s.b="Ps151",s.c=1):(e.extra=this.to_osis({b:"Ps151",c:1,v:e.v},{b:"Ps151",c:1,v:bcv_utils.get_book_verse_count(this.passage.translations[t].chapters.Ps151,1)},t),e.b="Prov",e.c=1,e.v=1):(s.extra=this.to_osis({b:"Ps151",c:1,v:1},{b:"Ps151",c:1,v:s.v},t),s.c=150,s.v=bcv_utils.get_book_verse_count(this.passage.translations[t].chapters.Ps,150))}combine_consecutive_passages(e,s){const t=[];let a={};const r=e.length-1;let n=-1,o=!1;for(let c=0,p=r,_=0<=p;_?c<=p:c>=p;_?c++:c--){var i=e[c];if(i.osis.length>0){var u=t.length-1,l=!1;if(u>=0&&this.has_semicolon_separator(t[u],i)){t.push(i),a={b:i.end.b,c:i.end.c,v:i.end.v};continue}i.enclosed_indices[0]!==n&&(n=i.enclosed_indices[0]),n>=0&&(c===r||e[c+1].enclosed_indices[0]!==i.enclosed_indices[0])&&(l=!0,o=!0),this.is_verse_consecutive(a,i.start,s)?(t[u].end=i.end,t[u].is_enclosed_last=l,t[u].indices[1]=i.indices[1],t[u].enclosed_indices[1]=i.enclosed_indices[1],t[u].osis=this.to_osis(t[u].start,i.end,s)):t.push(i),a={b:i.end.b,c:i.end.c,v:i.end.v}}else t.push(i),a={}}return o&&this.snap_enclosed_indices(t),t}snap_enclosed_indices(e){for(var s of Array.from(e))null!=s.is_enclosed_last&&(s.enclosed_indices[0]<0&&s.is_enclosed_last&&(s.indices[1]=s.enclosed_indices[1]),delete s.is_enclosed_last);return e}is_verse_consecutive(e,s,t){if(null==e.b)return!1;const a=null!=this.passage.translations[t].order?this.passage.translations[t].order:this.passage.translations.default.order;if(e.b===s.b){if(e.c===s.c){if(e.v===s.v-1)return!0}else if(1===s.v&&e.c===s.c-1&&e.v===bcv_utils.get_book_verse_count(this.passage.translations[t].chapters[e.b],e.c))return!0}else if(1===s.c&&1===s.v&&a[e.b]===a[s.b]-1&&e.c===bcv_utils.get_book_chapter_count(this.passage.translations[t].chapters[e.b])&&e.v===bcv_utils.get_book_verse_count(this.passage.translations[t].chapters[e.b],e.c))return!0;return!1}snap_range(e,s){let t,a,r;"b_range_start"===e.type||"sequence"===e.type&&"b_range_start"===e.passages[s].type?(t=1,a="end",r="b_range_start"):(t=0,a="start",r="range_end_b");const n="end"===a?"start":"end";for(var o of Object.keys(e.passages[s][n]||{}))e.passages[s][n][o]=e.passages[s][a][o];if("sequence"===e.type){s>=e.value.length&&(s=e.value.length-1);const t=this.passage.pluck(r,e.value[s]);if(null!=t){const a=this.snap_range(t,0);0===s?e.absolute_indices[0]=a.absolute_indices[0]:e.absolute_indices[1]=a.absolute_indices[1]}}else e.original_type=e.type,e.type=e.value[t].type,e.absolute_indices=[e.value[t].absolute_indices[0],e.value[t].absolute_indices[1]];return e}snap_sequence(e,s,t,a,r){const n=s.passages[a];return n.absolute_indices[0]===s.absolute_indices[0]&&a<r-1&&this.get_snap_sequence_i(s.passages,a,r)!==a?(s.absolute_indices[0]=s.passages[a+1].absolute_indices[0],this.remove_absolute_indices(s.passages,a+1)):n.absolute_indices[1]===s.absolute_indices[1]&&a>0?s.absolute_indices[1]=t.length>0?t[t.length-1].indices[1]:s.passages[a-1].absolute_indices[1]:"book"===e&&a<r-1&&!this.starts_with_book(s.passages[a+1])&&(s.passages[a+1].absolute_indices[0]=n.absolute_indices[0]),s}get_snap_sequence_i(e,s,t){for(let a=s+1,r=a,n=t,o=a<=n;o?r<n:r>n;o?r++:r--){if(this.starts_with_book(e[r]))return r;if(e[r].valid.valid)return s}return s}starts_with_book(e){return"b"===e.type.substr(0,1)||("range"===e.type||"ff"===e.type)&&"b"===e.start.type.substr(0,1)}remove_absolute_indices(e,s){if(e[s].enclosed_absolute_indices[0]<0)return!1;const[t,a]=Array.from(e[s].enclosed_absolute_indices);for(var r of Array.from(e.slice(s))){if(r.enclosed_absolute_indices[0]!==t||r.enclosed_absolute_indices[1]!==a)break;r.enclosed_absolute_indices=[-1,-1]}return!0}}bcv_parser.initClass(),this.bcv_parser=bcv_parser;class bcv_passage{static initClass(){this.prototype.books=[],this.prototype.indices={},this.prototype.options={},this.prototype.translations={}}handle_array(e,s,t){for(var a of(null==s&&(s=[]),null==t&&(t={}),Array.from(e)))if(null!=a){if("stop"===a.type)break;[s,t]=Array.from(this.handle_obj(a,s,t))}return[s,t]}handle_obj(e,s,t){return null!=e.type&&null!=this[e.type]?this[e.type](e,s,t):[s,t]}b(e,s,t){let a;e.start_context=bcv_utils.shallow_clone(t),e.passages=[];const r=[];for(a of Array.from(this.books[e.value].parsed)){var n=this.validate_ref(e.start_context.translations,{b:a}),o={start:{b:a},end:{b:a},valid:n};0===e.passages.length&&n.valid?e.passages.push(o):r.push(o)}return 0===e.passages.length&&e.passages.push(r.shift()),r.length>0&&(e.passages[0].alternates=r),null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),s.push(e),t={b:e.passages[0].start.b},null!=e.start_context.translations&&(t.translations=e.start_context.translations),[s,t]}b_range(e,s,t){return this.range(e,s,t)}b_range_pre(e,s,t){let a,r;e.start_context=bcv_utils.shallow_clone(t),e.passages=[];const n=this.pluck("b",e.value);a=this.b(n,[],t),[r]=Array.from(a[0]),t=a[1],null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices));const o={b:e.value[0].value+r.passages[0].start.b.substr(1),type:"b"};return e.passages=[{start:o,end:r.passages[0].end,valid:r.passages[0].valid}],null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),s.push(e),[s,t]}b_range_start(e,s,t){return this.range(e,s,t)}base(e,s,t){return this.indices=this.calculate_indices(e.match,e.start_index),this.handle_array(e.value,s,t)}bc(e,s,t){e.start_context=bcv_utils.shallow_clone(t),e.passages=[],this.reset_context(t,["b","c","v"]);const a=this.pluck("c",e.value).value,r=[];for(var n of Array.from(this.books[this.pluck("b",e.value).value].parsed)){var o="c",i=this.validate_ref(e.start_context.translations,{b:n,c:a}),u={start:{b:n},end:{b:n},valid:i};(i.messages.start_chapter_not_exist_in_single_chapter_book||i.messages.start_chapter_1)&&(u.valid=this.validate_ref(e.start_context.translations,{b:n,v:a}),i.messages.start_chapter_not_exist_in_single_chapter_book&&(u.valid.messages.start_chapter_not_exist_in_single_chapter_book=1),u.start.c=1,u.end.c=1,o="v"),u.start[o]=a,[u.start.c,u.start.v]=Array.from(this.fix_start_zeroes(u.valid,u.start.c,u.start.v)),null==u.start.v&&delete u.start.v,u.end[o]=u.start[o],0===e.passages.length&&u.valid.valid?e.passages.push(u):r.push(u)}return 0===e.passages.length&&e.passages.push(r.shift()),r.length>0&&(e.passages[0].alternates=r),null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),this.set_context_from_object(t,["b","c","v"],e.passages[0].start),s.push(e),[s,t]}bc_title(e,s,t){let a,r;if(e.start_context=bcv_utils.shallow_clone(t),a=this.bc(this.pluck("bc",e.value),[],t),[r]=Array.from(a[0]),t=a[1],"Ps"!==r.passages[0].start.b.substr(0,2)&&null!=r.passages[0].alternates)for(let e=0,s=r.passages[0].alternates.length,t=0<=s;t?e<s:e>s;t?e++:e--)if("Ps"===r.passages[0].alternates[e].start.b.substr(0,2)){r.passages[0]=r.passages[0].alternates[e];break}if("Ps"!==r.passages[0].start.b.substr(0,2))return s.push(r),[s,t];this.books[this.pluck("b",r.value).value].parsed=["Ps"];let n=this.pluck("title",e.value);return null==n&&(n=this.pluck("v",e.value)),e.value[1]={type:"v",value:[{type:"integer",value:1,indices:n.indices}],indices:n.indices},e.type="bcv",this.bcv(e,s,e.start_context)}bcv(e,s,t){e.start_context=bcv_utils.shallow_clone(t),e.passages=[],this.reset_context(t,["b","c","v"]);const a=this.pluck("bc",e.value);let r=this.pluck("c",a.value).value,n=this.pluck("v",e.value).value;const o=[];for(var i of Array.from(this.books[this.pluck("b",a.value).value].parsed)){var u=this.validate_ref(e.start_context.translations,{b:i,c:r,v:n});[r,n]=Array.from(this.fix_start_zeroes(u,r,n));var l={start:{b:i,c:r,v:n},end:{b:i,c:r,v:n},valid:u};0===e.passages.length&&u.valid?e.passages.push(l):o.push(l)}return 0===e.passages.length&&e.passages.push(o.shift()),o.length>0&&(e.passages[0].alternates=o),null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),this.set_context_from_object(t,["b","c","v"],e.passages[0].start),s.push(e),[s,t]}bv(e,s,t){let a;e.start_context=bcv_utils.shallow_clone(t);const[r,n]=Array.from(e.value);let o={indices:e.indices,value:[{type:"bc",value:[r,{type:"c",value:[{type:"integer",value:1}]}]},n]};return a=this.bcv(o,[],t),[o]=Array.from(a[0]),t=a[1],e.passages=o.passages,null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),s.push(e),[s,t]}c(e,s,t){e.start_context=bcv_utils.shallow_clone(t);let a="integer"===e.type?e.value:this.pluck("integer",e.value).value;const r=this.validate_ref(e.start_context.translations,{b:t.b,c:a});return!r.valid&&r.messages.start_chapter_not_exist_in_single_chapter_book?this.v(e,s,t):([a]=Array.from(this.fix_start_zeroes(r,a)),e.passages=[{start:{b:t.b,c:a},end:{b:t.b,c:a},valid:r}],null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),s.push(e),t.c=a,this.reset_context(t,["v"]),null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),[s,t])}c_psalm(e,s,t){e.type="bc";const a=parseInt(this.books[e.value].value.match(/^\d+/)[0],10);return e.value=[{type:"b",value:e.value,indices:e.indices},{type:"c",value:[{type:"integer",value:a,indices:e.indices}],indices:e.indices}],this.bc(e,s,t)}c_title(e,s,t){if(e.start_context=bcv_utils.shallow_clone(t),"Ps"!==t.b)return this.c(e.value[0],s,t);const a=this.pluck("title",e.value);return e.value[1]={type:"v",value:[{type:"integer",value:1,indices:a.indices}],indices:a.indices},e.type="cv",this.cv(e,s,e.start_context)}cv(e,s,t){e.start_context=bcv_utils.shallow_clone(t);let a=this.pluck("c",e.value).value,r=this.pluck("v",e.value).value;const n=this.validate_ref(e.start_context.translations,{b:t.b,c:a,v:r});return[a,r]=Array.from(this.fix_start_zeroes(n,a,r)),e.passages=[{start:{b:t.b,c:a,v:r},end:{b:t.b,c:a,v:r},valid:n}],null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),s.push(e),t.c=a,t.v=r,null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),[s,t]}cb_range(e,s,t){e.type="range";const[a,r,n]=Array.from(e.value);return e.value=[{type:"bc",value:[a,r],indices:e.indices},n],n.indices[1]=e.indices[1],this.range(e,s,t)}context(e,s,t){for(var a of(e.start_context=bcv_utils.shallow_clone(t),e.passages=[],Object.keys(this.books[e.value].context||{})))t[a]=this.books[e.value].context[a];return s.push(e),[s,t]}cv_psalm(e,s,t){e.start_context=bcv_utils.shallow_clone(t),e.type="bcv";const[a,r]=Array.from(e.value),n=this.c_psalm(a,[],e.start_context),[o]=Array.from(n[0]);return e.value=[o,r],this.bcv(e,s,t)}ff(e,s,t){let a;return e.start_context=bcv_utils.shallow_clone(t),e.value.push({type:"integer",indices:e.indices,value:999}),a=this.range(e,[],e.start_context),[e]=Array.from(a[0]),t=a[1],e.value[0].indices=e.value[1].indices,e.value[0].absolute_indices=e.value[1].absolute_indices,e.value.pop(),null!=e.passages[0].valid.messages.end_verse_not_exist&&delete e.passages[0].valid.messages.end_verse_not_exist,null!=e.passages[0].valid.messages.end_chapter_not_exist&&delete e.passages[0].valid.messages.end_chapter_not_exist,null!=e.passages[0].end.original_c&&delete e.passages[0].end.original_c,s.push(e),[s,t]}integer_title(e,s,t){return e.start_context=bcv_utils.shallow_clone(t),"Ps"!==t.b?this.integer(e.value[0],s,t):(e.value[0]={type:"c",value:[e.value[0]],indices:[e.value[0].indices[0],e.value[0].indices[1]]},e.value[1].type="v",e.value[1].original_type="title",e.value[1].value=[{type:"integer",value:1,indices:e.value[1].value.indices}],e.type="cv",this.cv(e,s,e.start_context))}integer(e,s,t){return null!=t.v?this.v(e,s,t):this.c(e,s,t)}next_v(e,s,t){let a,r;e.start_context=bcv_utils.shallow_clone(t);let n=this.pluck_last_recursively("integer",e.value);if(null==n&&(n={value:1}),e.value.push({type:"integer",indices:e.indices,value:n.value+1}),a=this.range(e,[],e.start_context),[r]=Array.from(a[0]),t=a[1],null!=r.passages[0].valid.messages.end_verse_not_exist&&null==r.passages[0].valid.messages.start_verse_not_exist&&null==r.passages[0].valid.messages.start_chapter_not_exist&&null!=t.c){let s;e.value.pop(),e.value.push({type:"cv",indices:e.indices,value:[{type:"c",value:[{type:"integer",value:t.c+1,indices:e.indices}],indices:e.indices},{type:"v",value:[{type:"integer",value:1,indices:e.indices}],indices:e.indices}]}),s=this.range(e,[],e.start_context),[r]=Array.from(s[0]),t=s[1]}return r.value[0].indices=r.value[1].indices,r.value[0].absolute_indices=r.value[1].absolute_indices,r.value.pop(),null!=r.passages[0].valid.messages.end_verse_not_exist&&delete r.passages[0].valid.messages.end_verse_not_exist,null!=r.passages[0].valid.messages.end_chapter_not_exist&&delete r.passages[0].valid.messages.end_chapter_not_exist,null!=r.passages[0].end.original_c&&delete r.passages[0].end.original_c,s.push(r),[s,t]}sequence(e,s,t){for(var a of(e.start_context=bcv_utils.shallow_clone(t),e.passages=[],Array.from(e.value))){var r,n;for(var o of(r=this.handle_array(a,[],t),[n]=Array.from(r[0]),t=r[1],Array.from(n.passages)))null==o.type&&(o.type=n.type),null==o.absolute_indices&&(o.absolute_indices=n.absolute_indices),null!=n.start_context.translations&&(o.translations=n.start_context.translations),o.enclosed_absolute_indices="sequence_post_enclosed"===n.type?n.absolute_indices:[-1,-1],e.passages.push(o)}return null==e.absolute_indices&&(e.passages.length>0&&"sequence"===e.type?e.absolute_indices=[e.passages[0].absolute_indices[0],e.passages[e.passages.length-1].absolute_indices[1]]:e.absolute_indices=this.get_absolute_indices(e.indices)),s.push(e),[s,t]}sequence_post_enclosed(e,s,t){return this.sequence(e,s,t)}v(e,s,t){let a,r="integer"===e.type?e.value:this.pluck("integer",e.value).value;e.start_context=bcv_utils.shallow_clone(t);const n=null!=t.c?t.c:1,o=this.validate_ref(e.start_context.translations,{b:t.b,c:n,v:r});return[a,r]=Array.from(this.fix_start_zeroes(o,0,r)),e.passages=[{start:{b:t.b,c:n,v:r},end:{b:t.b,c:n,v:r},valid:o}],null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),s.push(e),t.v=r,[s,t]}range(e,s,t){let a,r;e.start_context=bcv_utils.shallow_clone(t);let[n,o]=Array.from(e.value);if(a=this.handle_obj(n,[],t),[n]=Array.from(a[0]),t=a[1],"v"===o.type&&("bc"===n.type&&!__guard__(__guard__(__guard__(null!=n.passages?n.passages[0]:void 0,(e=>e.valid)),(e=>e.messages)),(e=>e.start_chapter_not_exist_in_single_chapter_book))||"c"===n.type)&&"verse"===this.options.end_range_digits_strategy)return e.value[0]=n,this.range_change_integer_end(e,s);r=this.handle_obj(o,[],t),[o]=Array.from(r[0]),t=r[1],e.value=[n,o],e.indices=[n.indices[0],o.indices[1]],delete e.absolute_indices;const i={b:n.passages[0].start.b,c:n.passages[0].start.c,v:n.passages[0].start.v,type:n.type},u={b:o.passages[0].end.b,c:o.passages[0].end.c,v:o.passages[0].end.v,type:o.type};o.passages[0].valid.messages.start_chapter_is_zero&&(u.c=0),o.passages[0].valid.messages.start_verse_is_zero&&(u.v=0);const l=this.validate_ref(e.start_context.translations,i,u);if(!l.valid)return this.range_handle_invalid(l,e,n,i,o,u,s);{const[t,a]=Array.from(this.range_handle_valid(l,e,n,i,o,u,s));if(t)return a}return null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),e.passages=[{start:i,end:u,valid:l}],null!=e.start_context.translations&&(e.passages[0].translations=e.start_context.translations),"b"===i.type?"b"===u.type?e.type="b_range":e.type="b_range_start":"b"===u.type&&(e.type="range_end_b"),s.push(e),[s,t]}range_change_end(e,s,t){let a;const[r,n]=Array.from(e.value);return"integer"===n.type?(n.original_value=n.value,n.value=t):"v"===n.type?(a=this.pluck("integer",n.value),a.original_value=a.value,a.value=t):"cv"===n.type&&(a=this.pluck("c",n.value),a.original_value=a.value,a.value=t),this.handle_obj(e,s,e.start_context)}range_change_integer_end(e,s){const[t,a]=Array.from(e.value);return null==e.original_type&&(e.original_type=e.type),null==e.original_value&&(e.original_value=[t,a]),e.type="integer"===t.type?"cv":t.type+"v","integer"===t.type&&(e.value[0]={type:"c",value:[t],indices:t.indices}),"integer"===a.type&&(e.value[1]={type:"v",value:[a],indices:a.indices}),this.handle_obj(e,s,e.start_context)}range_check_new_end(e,s,t,a){let r=0,n=null;if(a.messages.end_chapter_before_start?n="c":a.messages.end_verse_before_start&&(n="v"),null!=n&&(r=this.range_get_new_end_value(s,t,a,n)),r>0){const s={b:t.b,c:t.c,v:t.v};s[n]=r;this.validate_ref(e,s).valid||(r=0)}return r}range_end_b(e,s,t){return this.range(e,s,t)}range_get_new_end_value(e,s,t,a){let r=0;return"c"===a&&t.messages.end_chapter_is_zero||"v"===a&&t.messages.end_verse_is_zero||(e[a]>=10&&s[a]<10&&e[a]-10*Math.floor(e[a]/10)<s[a]?r=s[a]+10*Math.floor(e[a]/10):e[a]>=100&&s[a]<100&&e[a]-100<s[a]&&(r=s[a]+100)),r}range_handle_invalid(e,s,t,a,r,n,o){if(!1===e.valid&&(e.messages.end_chapter_before_start||e.messages.end_verse_before_start)&&("integer"===r.type||"v"===r.type)||!1===e.valid&&e.messages.end_chapter_before_start&&"cv"===r.type){const t=this.range_check_new_end(s.start_context.translations,a,n,e);if(t>0)return this.range_change_end(s,o,t)}if("verse"===this.options.end_range_digits_strategy&&null==a.v&&("integer"===r.type||"v"===r.type)){const e="v"===r.type?this.pluck("integer",r.value):r.value;if(this.validate_ref(s.start_context.translations,{b:a.b,c:a.c,v:e}).valid)return this.range_change_integer_end(s,o)}return null==s.original_type&&(s.original_type=s.type),s.type="sequence",[s.original_value,s.value]=Array.from([[t,r],[[t],[r]]]),this.sequence(s,o,s.start_context)}range_handle_valid(e,s,t,a,r,n,o){if(e.messages.end_chapter_not_exist&&"verse"===this.options.end_range_digits_strategy&&null==a.v&&("integer"===r.type||"v"===r.type)&&this.options.passage_existence_strategy.indexOf("v")>=0){const e="v"===r.type?this.pluck("integer",r.value):r.value;if(this.validate_ref(s.start_context.translations,{b:a.b,c:a.c,v:e}).valid)return[!0,this.range_change_integer_end(s,o)]}return this.range_validate(e,a,n,s),[!1,null]}range_validate(e,s,t,a){return e.messages.end_chapter_not_exist||e.messages.end_chapter_not_exist_in_single_chapter_book?(t.original_c=t.c,t.c=e.messages.end_chapter_not_exist?e.messages.end_chapter_not_exist:e.messages.end_chapter_not_exist_in_single_chapter_book,null!=t.v&&(t.v=this.validate_ref(a.start_context.translations,{b:t.b,c:t.c,v:999}).messages.end_verse_not_exist,delete e.messages.end_verse_is_zero)):e.messages.end_verse_not_exist&&(t.original_v=t.v,t.v=e.messages.end_verse_not_exist),e.messages.end_verse_is_zero&&"allow"!==this.options.zero_verse_strategy&&(t.v=e.messages.end_verse_is_zero),e.messages.end_chapter_is_zero&&(t.c=e.messages.end_chapter_is_zero),[s.c,s.v]=Array.from(this.fix_start_zeroes(e,s.c,s.v)),!0}translation_sequence(e,s,t){e.start_context=bcv_utils.shallow_clone(t);const a=[];for(var r of(a.push({translation:this.books[e.value[0].value].parsed}),Array.from(e.value[1])))null!=(r=this.books[this.pluck("translation",r).value].parsed)&&a.push({translation:r});for(var n of Array.from(a))null!=this.translations.aliases[n.translation]?(n.alias=this.translations.aliases[n.translation].alias,n.osis=this.translations.aliases[n.translation].osis||n.translation.toUpperCase()):(n.alias="default",n.osis=n.translation.toUpperCase());return s.length>0&&(t=this.translation_sequence_apply(s,a)),null==e.absolute_indices&&(e.absolute_indices=this.get_absolute_indices(e.indices)),s.push(e),this.reset_context(t,["translations"]),[s,t]}translation_sequence_apply(e,s){let t,a=0;for(let s=e.length-1,t=s,r=s<=0;r?t<=0:t>=0;r?t++:t--)if(null!=e[t].original_type&&(e[t].type=e[t].original_type),null!=e[t].original_value&&(e[t].value=e[t].original_value),"translation_sequence"===e[t].type){a=t+1;break}if(a<e.length){let r;e[a].start_context.translations=s,[r,t]=Array.from(this.handle_array(e.slice(a),[],e[a].start_context))}else t=bcv_utils.shallow_clone(e[e.length-1].start_context);return t}pluck(e,s){for(var t of Array.from(s))if(null!=t&&null!=t.type&&t.type===e)return"c"===e||"v"===e?this.pluck("integer",t.value):t;return null}pluck_last_recursively(e,s){for(let r=s.length-1;r>=0;r--){var t=s[r];if(null!=t&&null!=t.type){if(t.type===e)return this.pluck(e,[t]);var a=this.pluck_last_recursively(e,t.value);if(null!=a)return a}}return null}set_context_from_object(e,s,t){return(()=>{const a=[];for(var r of Array.from(s))null!=t[r]&&a.push(e[r]=t[r]);return a})()}reset_context(e,s){return Array.from(s).map((s=>delete e[s]))}fix_start_zeroes(e,s,t){return e.messages.start_chapter_is_zero&&"upgrade"===this.options.zero_chapter_strategy&&(s=e.messages.start_chapter_is_zero),e.messages.start_verse_is_zero&&"upgrade"===this.options.zero_verse_strategy&&(t=e.messages.start_verse_is_zero),[s,t]}calculate_indices(e,s){let t,a="book";const r=[];let n=0;s=parseInt(s,10);let o=[e];for(var i of["",""]){var u=[];for(t of Array.from(o))u=u.concat(t.split(i));o=u}for(t of Array.from(o)){var l;a="book"===a?"rest":"book";var c=t.length;0!==c&&("book"===a?(t=t.replace(/\/\d+$/,""),l=n+c,r.length>0&&r[r.length-1].index===s?r[r.length-1].end=l:r.push({start:n,end:l,index:s}),n+=c+2,s=this.books[t].start_index+this.books[t].value.length-n,r.push({start:l+1,end:l+1,index:s})):(l=n+c-1,r.length>0&&r[r.length-1].index===s?r[r.length-1].end=l:r.push({start:n,end:l,index:s}),n+=c))}return r}get_absolute_indices(...e){const[s,t]=Array.from(e[0]);let a=null,r=null;for(var n of Array.from(this.indices))if(null===a&&n.start<=s&&s<=n.end&&(a=s+n.index),n.start<=t&&t<=n.end){r=t+n.index+1;break}return[a,r]}validate_ref(e,s,t){null!=e&&e.length>0||(e=[{translation:"default",osis:"",alias:"default"}]);let a=!1;const r={};for(var n of Array.from(e))if(null==n.alias&&(n.alias="default"),null!=n.alias){null==this.translations.aliases[n.alias]&&(n.alias="default",null==r.translation_unknown&&(r.translation_unknown=[]),r.translation_unknown.push(n));var[o]=Array.from(this.validate_start_ref(n.alias,s,r));t&&([o]=Array.from(this.validate_end_ref(n.alias,s,t,o,r))),!0===o&&(a=!0)}else null==r.translation_invalid&&(r.translation_invalid=[]),r.translation_invalid.push(n);return{valid:a,messages:r}}validate_start_ref(e,s,t){let a,r,n=!0;"default"!==e&&null==(null!=this.translations[e]?this.translations[e].chapters[s.b]:void 0)&&this.promote_book_to_translation(s.b,e);const o=null!=(null!=this.translations[e]?this.translations[e].order:void 0)?e:"default";if(null!=s.v&&(s.v=parseInt(s.v,10)),null!=this.translations[o].order[s.b]){if(null==s.c&&(s.c=1),s.c=parseInt(s.c,10),isNaN(s.c))return n=!1,t.start_chapter_not_numeric=!0,[n,t];0===s.c&&(t.start_chapter_is_zero=1,"error"===this.options.zero_chapter_strategy?n=!1:s.c=1),null!=s.v&&0===s.v&&(t.start_verse_is_zero=1,"error"===this.options.zero_verse_strategy?n=!1:"upgrade"===this.options.zero_verse_strategy&&(s.v=1)),a=bcv_utils.get_book_chapter_count(this.translations[e].chapters[s.b]),r=bcv_utils.get_book_verse_count(this.translations[e].chapters[s.b],s.c),s.c>0&&null!=r?null!=s.v?isNaN(s.v)?(n=!1,t.start_verse_not_numeric=!0):s.v>r&&this.options.passage_existence_strategy.indexOf("v")>=0&&(n=!1,t.start_verse_not_exist=r):1===s.c&&"verse"===this.options.single_chapter_1_strategy&&1===a&&(t.start_chapter_1=1):1!==s.c&&1===a?(n=!1,t.start_chapter_not_exist_in_single_chapter_book=1):s.c>0&&this.options.passage_existence_strategy.indexOf("c")>=0&&(n=!1,t.start_chapter_not_exist=a)}else null==s.b?(n=!1,t.start_book_not_defined=!0):(this.options.passage_existence_strategy.indexOf("b")>=0&&(n=!1),t.start_book_not_exist=!0);return[n,t]}validate_end_ref(e,s,t,a,r){const n=null!=(null!=this.translations[e]?this.translations[e].order:void 0)?e:"default";let o,i;return null!=t.c&&(t.c=parseInt(t.c,10),isNaN(t.c)?(a=!1,r.end_chapter_not_numeric=!0):0===t.c&&(r.end_chapter_is_zero=1,"error"===this.options.zero_chapter_strategy?a=!1:t.c=1)),null!=t.v&&(t.v=parseInt(t.v,10),isNaN(t.v)?(a=!1,r.end_verse_not_numeric=!0):0===t.v&&(r.end_verse_is_zero=1,"error"===this.options.zero_verse_strategy?a=!1:"upgrade"===this.options.zero_verse_strategy&&(t.v=1))),null!=this.translations[n].order[t.b]?(o=bcv_utils.get_book_chapter_count(this.translations[e].chapters[t.b]),null==t.c&&1===o&&(t.c=1),null!=this.translations[n].order[s.b]&&this.translations[n].order[s.b]>this.translations[n].order[t.b]&&(this.options.passage_existence_strategy.indexOf("b")>=0&&(a=!1),r.end_book_before_start=!0),s.b!==t.b||null==t.c||isNaN(t.c)||(null==s.c&&(s.c=1),!isNaN(parseInt(s.c,10))&&s.c>t.c?(a=!1,r.end_chapter_before_start=!0):s.c!==t.c||null==t.v||isNaN(t.v)||(null==s.v&&(s.v=1),!isNaN(parseInt(s.v,10))&&s.v>t.v&&(a=!1,r.end_verse_before_start=!0))),null==t.c||isNaN(t.c)||(i=bcv_utils.get_book_verse_count(this.translations[e].chapters[t.b],t.c),null==i&&(1===o?r.end_chapter_not_exist_in_single_chapter_book=1:t.c>0&&this.options.passage_existence_strategy.indexOf("c")>=0&&(r.end_chapter_not_exist=o))),null==t.v||isNaN(t.v)||(null==t.c&&(t.c=o),i=bcv_utils.get_book_verse_count(this.translations[e].chapters[t.b],t.c),null!=i&&t.v>i&&this.options.passage_existence_strategy.indexOf("v")>=0&&(r.end_verse_not_exist=i))):(a=!1,r.end_book_not_exist=!0),[a,r]}promote_book_to_translation(e,s){if(null==this.translations[s]&&(this.translations[s]={}),null==this.translations[s].chapters&&(this.translations[s].chapters={}),null==this.translations[s].chapters[e])return this.translations[s].chapters[e]=bcv_utils.shallow_clone_book_data(this.translations.default.chapters[e])}}function __guard__(e,s){return null!=e?s(e):void 0}bcv_passage.initClass();const bcv_utils={shallow_clone(e){if(null==e)return e;const s={};for(const t of Object.keys(e||{})){const a=e[t];s[t]=a}return s},shallow_clone_array(e){if(null==e)return e;const s=[];for(let t=0,a=e.length,r=0<=a;r?t<=a:t>=a;r?t++:t--)void 0!==e[t]&&(s[t]=e[t]);return s},shallow_clone_book_data(e){if(null==e)return e;if(Array.isArray(e))return this.shallow_clone_array(e);const s=this.shallow_clone(e);return null!=e.versesCount&&(s.versesCount=this.shallow_clone(e.versesCount)),s},get_book_chapter_count:e=>null==e?0:Array.isArray(e)?e.length:null!=e.chaptersCount?e.chaptersCount:Object.keys(e.versesCount||{}).length,get_book_verse_count:(e,s)=>null==e||null==s?null:Array.isArray(e)?e[s-1]:null==e.versesCount?null:null!=e.versesCount[s]?e.versesCount[s]:e.versesCount[String(s)],set_book_verse_count:(e,s,t)=>Array.isArray(e)?(e[s-1]=t,e):(null==e.versesCount&&(e.versesCount={}),e.versesCount[String(s)]=t,(null==e.chaptersCount||s>e.chaptersCount)&&(e.chaptersCount=s),e),delete_book_verse_count(e,s){if(null==e)return e;if(Array.isArray(e))return e.length===s?e.pop():delete e[s-1],e;if(null!=e.versesCount&&delete e.versesCount[String(s)],e.chaptersCount===s)for(;e.chaptersCount>0&&null==this.get_book_verse_count(e,e.chaptersCount);)e.chaptersCount-=1;return e}};bcv_parser.prototype.regexps.translations=RegExp("(?:(?:ERV))\\b","gi"),bcv_parser.prototype.translations={aliases:{default:{osis:"",alias:"default"}},alternates:{},default:{order:{Gen:1,Exod:2,Lev:3,Num:4,Deut:5,Josh:6,Judg:7,Ruth:8,"1Sam":9,"2Sam":10,"1Kgs":11,"2Kgs":12,"1Chr":13,"2Chr":14,Ezra:15,Neh:16,Esth:17,Job:18,Ps:19,Prov:20,Eccl:21,Song:22,Isa:23,Jer:24,Lam:25,Ezek:26,Dan:27,Hos:28,Joel:29,Amos:30,Obad:31,Jonah:32,Mic:33,Nah:34,Hab:35,Zeph:36,Hag:37,Zech:38,Mal:39,Matt:40,Mark:41,Luke:42,John:43,Acts:44,Rom:45,"1Cor":46,"2Cor":47,Gal:48,Eph:49,Phil:50,Col:51,"1Thess":52,"2Thess":53,"1Tim":54,"2Tim":55,Titus:56,Phlm:57,Heb:58,Jas:59,"1Pet":60,"2Pet":61,"1John":62,"2John":63,"3John":64,Jude:65,Rev:66,Tob:67,Jdt:68,GkEsth:69,Wis:70,Sir:71,Bar:72,PrAzar:73,Sus:74,Bel:75,SgThree:76,EpJer:77,"1Macc":78,"2Macc":79,"3Macc":80,"4Macc":81,"1Esd":82,"2Esd":83,PrMan:84},chapters:{Gen:{chaptersCount:50,versesCount:{1:31,2:25,3:24,4:26,5:32,6:22,7:24,8:22,9:29,10:32,11:32,12:20,13:18,14:24,15:21,16:16,17:27,18:33,19:38,20:18,21:34,22:24,23:20,24:67,25:34,26:35,27:46,28:22,29:35,30:43,31:55,32:32,33:20,34:31,35:29,36:43,37:36,38:30,39:23,40:23,41:57,42:38,43:34,44:34,45:28,46:34,47:31,48:22,49:33,50:26}},Exod:{chaptersCount:40,versesCount:{1:22,2:25,3:22,4:31,5:23,6:30,7:25,8:32,9:35,10:29,11:10,12:51,13:22,14:31,15:27,16:36,17:16,18:27,19:25,20:26,21:36,22:31,23:33,24:18,25:40,26:37,27:21,28:43,29:46,30:38,31:18,32:35,33:23,34:35,35:35,36:38,37:29,38:31,39:43,40:38}},Lev:{chaptersCount:27,versesCount:{1:17,2:16,3:17,4:35,5:19,6:30,7:38,8:36,9:24,10:20,11:47,12:8,13:59,14:57,15:33,16:34,17:16,18:30,19:37,20:27,21:24,22:33,23:44,24:23,25:55,26:46,27:34}},Num:{chaptersCount:36,versesCount:{1:54,2:34,3:51,4:49,5:31,6:27,7:89,8:26,9:23,10:36,11:35,12:16,13:33,14:45,15:41,16:50,17:13,18:32,19:22,20:29,21:35,22:41,23:30,24:25,25:18,26:65,27:23,28:31,29:40,30:16,31:54,32:42,33:56,34:29,35:34,36:13}},Deut:{chaptersCount:34,versesCount:{1:46,2:37,3:29,4:49,5:33,6:25,7:26,8:20,9:29,10:22,11:32,12:32,13:18,14:29,15:23,16:22,17:20,18:22,19:21,20:20,21:23,22:30,23:25,24:22,25:19,26:19,27:26,28:68,29:29,30:20,31:30,32:52,33:29,34:12}},Josh:{chaptersCount:24,versesCount:{1:18,2:24,3:17,4:24,5:15,6:27,7:26,8:35,9:27,10:43,11:23,12:24,13:33,14:15,15:63,16:10,17:18,18:28,19:51,20:9,21:45,22:34,23:16,24:33}},Judg:{chaptersCount:21,versesCount:{1:36,2:23,3:31,4:24,5:31,6:40,7:25,8:35,9:57,10:18,11:40,12:15,13:25,14:20,15:20,16:31,17:13,18:31,19:30,20:48,21:25}},Ruth:{chaptersCount:4,versesCount:{1:22,2:23,3:18,4:22}},"1Sam":{chaptersCount:31,versesCount:{1:28,2:36,3:21,4:22,5:12,6:21,7:17,8:22,9:27,10:27,11:15,12:25,13:23,14:52,15:35,16:23,17:58,18:30,19:24,20:42,21:15,22:23,23:29,24:22,25:44,26:25,27:12,28:25,29:11,30:31,31:13}},"2Sam":{chaptersCount:24,versesCount:{1:27,2:32,3:39,4:12,5:25,6:23,7:29,8:18,9:13,10:19,11:27,12:31,13:39,14:33,15:37,16:23,17:29,18:33,19:43,20:26,21:22,22:51,23:39,24:25}},"1Kgs":{chaptersCount:22,versesCount:{1:53,2:46,3:28,4:34,5:18,6:38,7:51,8:66,9:28,10:29,11:43,12:33,13:34,14:31,15:34,16:34,17:24,18:46,19:21,20:43,21:29,22:53}},"2Kgs":{chaptersCount:25,versesCount:{1:18,2:25,3:27,4:44,5:27,6:33,7:20,8:29,9:37,10:36,11:21,12:21,13:25,14:29,15:38,16:20,17:41,18:37,19:37,20:21,21:26,22:20,23:37,24:20,25:30}},"1Chr":{chaptersCount:29,versesCount:{1:54,2:55,3:24,4:43,5:26,6:81,7:40,8:40,9:44,10:14,11:47,12:40,13:14,14:17,15:29,16:43,17:27,18:17,19:19,20:8,21:30,22:19,23:32,24:31,25:31,26:32,27:34,28:21,29:30}},"2Chr":{chaptersCount:36,versesCount:{1:17,2:18,3:17,4:22,5:14,6:42,7:22,8:18,9:31,10:19,11:23,12:16,13:22,14:15,15:19,16:14,17:19,18:34,19:11,20:37,21:20,22:12,23:21,24:27,25:28,26:23,27:9,28:27,29:36,30:27,31:21,32:33,33:25,34:33,35:27,36:23}},Ezra:{chaptersCount:10,versesCount:{1:11,2:70,3:13,4:24,5:17,6:22,7:28,8:36,9:15,10:44}},Neh:{chaptersCount:13,versesCount:{1:11,2:20,3:32,4:23,5:19,6:19,7:73,8:18,9:38,10:39,11:36,12:47,13:31}},Esth:{chaptersCount:10,versesCount:{1:22,2:23,3:15,4:17,5:14,6:14,7:10,8:17,9:32,10:3}},Job:{chaptersCount:42,versesCount:{1:22,2:13,3:26,4:21,5:27,6:30,7:21,8:22,9:35,10:22,11:20,12:25,13:28,14:22,15:35,16:22,17:16,18:21,19:29,20:29,21:34,22:30,23:17,24:25,25:6,26:14,27:23,28:28,29:25,30:31,31:40,32:22,33:33,34:37,35:16,36:33,37:24,38:41,39:30,40:24,41:34,42:17}},Ps:{chaptersCount:150,versesCount:{1:6,2:12,3:8,4:8,5:12,6:10,7:17,8:9,9:20,10:18,11:7,12:8,13:6,14:7,15:5,16:11,17:15,18:50,19:14,20:9,21:13,22:31,23:6,24:10,25:22,26:12,27:14,28:9,29:11,30:12,31:24,32:11,33:22,34:22,35:28,36:12,37:40,38:22,39:13,40:17,41:13,42:11,43:5,44:26,45:17,46:11,47:9,48:14,49:20,50:23,51:19,52:9,53:6,54:7,55:23,56:13,57:11,58:11,59:17,60:12,61:8,62:12,63:11,64:10,65:13,66:20,67:7,68:35,69:36,70:5,71:24,72:20,73:28,74:23,75:10,76:12,77:20,78:72,79:13,80:19,81:16,82:8,83:18,84:12,85:13,86:17,87:7,88:18,89:52,90:17,91:16,92:15,93:5,94:23,95:11,96:13,97:12,98:9,99:9,100:5,101:8,102:28,103:22,104:35,105:45,106:48,107:43,108:13,109:31,110:7,111:10,112:10,113:9,114:8,115:18,116:19,117:2,118:29,119:176,120:7,121:8,122:9,123:4,124:8,125:5,126:6,127:5,128:6,129:8,130:8,131:3,132:18,133:3,134:3,135:21,136:26,137:9,138:8,139:24,140:13,141:10,142:7,143:12,144:15,145:21,146:10,147:20,148:14,149:9,150:6}},Prov:{chaptersCount:31,versesCount:{1:33,2:22,3:35,4:27,5:23,6:35,7:27,8:36,9:18,10:32,11:31,12:28,13:25,14:35,15:33,16:33,17:28,18:24,19:29,20:30,21:31,22:29,23:35,24:34,25:28,26:28,27:27,28:28,29:27,30:33,31:31}},Eccl:{chaptersCount:12,versesCount:{1:18,2:26,3:22,4:16,5:20,6:12,7:29,8:17,9:18,10:20,11:10,12:14}},Song:{chaptersCount:8,versesCount:{1:17,2:17,3:11,4:16,5:16,6:13,7:13,8:14}},Isa:{chaptersCount:66,versesCount:{1:31,2:22,3:26,4:6,5:30,6:13,7:25,8:22,9:21,10:34,11:16,12:6,13:22,14:32,15:9,16:14,17:14,18:7,19:25,20:6,21:17,22:25,23:18,24:23,25:12,26:21,27:13,28:29,29:24,30:33,31:9,32:20,33:24,34:17,35:10,36:22,37:38,38:22,39:8,40:31,41:29,42:25,43:28,44:28,45:25,46:13,47:15,48:22,49:26,50:11,51:23,52:15,53:12,54:17,55:13,56:12,57:21,58:14,59:21,60:22,61:11,62:12,63:19,64:12,65:25,66:24}},Jer:{chaptersCount:52,versesCount:{1:19,2:37,3:25,4:31,5:31,6:30,7:34,8:22,9:26,10:25,11:23,12:17,13:27,14:22,15:21,16:21,17:27,18:23,19:15,20:18,21:14,22:30,23:40,24:10,25:38,26:24,27:22,28:17,29:32,30:24,31:40,32:44,33:26,34:22,35:19,36:32,37:21,38:28,39:18,40:16,41:18,42:22,43:13,44:3