/*! * relationship.js v1.2.3 * Chinese kinship library * https://passer-by.com/relationship/ * * Copyright (c) 2016-present, HaoLe Zheng * * Released under the MIT License * https://github.com/mumuy/relationship * * Created on: 2023-10-16 */ !function(s,f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define(f):(s="undefined"!=typeof globalThis?globalThis:s||self).relationship=f()}(this,(function(){"use strict";function s(s,f){(null==f||f>s.length)&&(f=s.length);for(var x=0,d=new Array(f);x-1?"default":"chain"}}},{exp:/^(\S+?)(應該|得)?管(\S+?)叫(什麼|啥)??$/,opt:function(s){return{text:s[3],target:s[1]}}},{exp:/^(\S+?)(和|與)(\S+?)(之間)?是(什麼|啥)關系??$/,opt:function(s){return{text:s[1],target:s[3],type:"pair"}}},{exp:/^(\S+?)對於(\S+?)是(什麼|啥)關系??$/,opt:function(s){return{text:s[1],target:s[2],type:"chain"}}},{exp:/^(\S+?)(指的)?是(什麼|啥)(意思|關系|親戚關系|輩分|人)??$/,opt:function(s){return{text:s[1],type:"chain"}}},{exp:/^(\S+?)(應該|得)?(稱呼|叫|喊)(什麼|啥)??$/,opt:function(s){return{text:s[1]}}},{exp:/^(\S+?)(應該|得)?(如何|怎麼)(稱呼|叫|喊)??$/,opt:function(s){return{text:s[1]}}},{exp:/^(\S+?)是(誰|什麼|什麼親戚|啥親戚|什麼人|什麼輩分|啥輩分)??$/,opt:function(s){return{text:s[1],type:s[1].indexOf("的")>-1?"default":"chain"}}}];function m(s,f){var x="undefined"!=typeof Symbol&&s[Symbol.iterator]||s["@@iterator"];if(!x){if(Array.isArray(s)||(x=function(s,f){if(!s)return;if("string"==typeof s)return b(s,f);var x=Object.prototype.toString.call(s).slice(8,-1);"Object"===x&&s.constructor&&(x=s.constructor.name);if("Map"===x||"Set"===x)return Array.from(s);if("Arguments"===x||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x))return b(s,f)}(s))||f&&s&&"number"==typeof s.length){x&&(s=x);var d=0,m=function(){};return{s:m,n:function(){return d>=s.length?{done:!0}:{done:!1,value:s[d++]}},e:function(s){throw s},f:m}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,r=!0,e=!1;return{s:function(){x=x.call(s)},n:function(){var s=x.next();return r=s.done,s},e:function(s){e=!0,o=s},f:function(){try{r||null==x.return||x.return()}finally{if(e)throw o}}}}function b(s,f){(null==f||f>s.length)&&(f=s.length);for(var x=0,d=new Array(f);x-1&&P(f).forEach((function(x){p[s][x]=w[s][f]}))};for(var x in w[s])f(x)};for(var W in w)$(W);for(var v in a=Object.assign({},a,c(i,M),c(p,M)),n)a[v]=[].concat(n[v],a[v]||[]);a.o=["passer-by.com","作者"];var g={w:["妻","內","嶽","嶽家","丈人"],h:["夫","外","公","婆家","婆婆"]},y=new Set(Object.values(a).flat());for(var S in a)if(S.match(/^[fm]/)||S.match(/^[olx][bs]$|^[olx][bs],[^mf]/)){var j=function(){var s=E+","+S;if(S.match(/[fm]/)){var f=s.replace(/,[ol]([sb])(,[wh])?$/,",x$1$2").replace(/(,[sd])&[ol](,[wh])?$/,"$1$2");if(f!=s&&a[f])return"continue"}a[s]||(a[s]=[]);var x=g[E],d=a[S];x.forEach((function(f){d.forEach((function(x){var d=f+x;y.has(d)||a[s].push(d)}))}))};for(var E in g)j()}var O=a,A={},N=Object.assign({},O);function I(s,f){var x={f:["d","s"],m:["d","s"],h:["w",""],w:["","h"],s:["m","f"],d:["m","f"],lb:["os","ob"],ob:["ls","lb"],xb:["xs","xb"],ls:["os","ob"],os:["ls","lb"],xs:["xs","xb"]},d="";if(s.match(/&o$/)?d="&l":s.match(/&l$/)&&(d="&o"),s){s=s.replace(/&[ol\d+]/g,""),f<0&&(s.match(/^w/)?f=1:s.match(/^h/)&&(f=0));var m=[],b=function(f){var m=(","+f+","+s).replace(/,[fhs]|,[olx]b/g,",1").replace(/,[mwd]|,[olx]s/g,",0");m=m.substring(0,m.length-2);var b=s.split(",").reverse(),o=m.split(",").reverse(),r=b.map((function(s,f){return x[s][o[f]]})),e=r.join(",");return e+(C(e)?"":d)};return f<0?(m.push(b(1)),m.push(b(0))):m.push(b(f)),m}return[""]}function T(s){var f=s.filter((function(s){return s==s.replace(/[ol](?=[s|b])/g,"x").replace(/&[ol]/,"")}));return s.filter((function(s){var x=s.replace(/[ol](?=[s|b])/g,"x").replace(/&[ol]/,"");return f.includes(s)||s!=x&&!f.includes(x)})).filter((function(s,f,x){return x.indexOf(s)===f}))}function C(s){var f={f:1,m:1,s:-1,d:-1},x=0;return s.split(",").forEach((function(s){var d=s.replace(/&[ol\d]+/,"");x+=f[d]||0})),x}function k(s){var f=[],x=function(s){var f=[],x=s.replace(/(,[sd])(,[wh])?$/,"$1&o$2"),d=s.replace(/(,[sd])(,[wh])?$/,"$1&l$2");return N[x]&&N[d]?f=[x,d]:N[s]&&(f=[s]),T(f).map((function(s){return N[s][0]}))};if(s.match(/&([\d]+)(,[hw])?$/)){var d=function(s){var f="",x={1:"大",99:"小"};if(x[s])f=x[s];else{var d=~~(s/10),m=s%10;f=(d?(t[d]+"十").replace("一十","十"):"")+t[m]}return f}(s.match(/&([\d]+)(,[hw])?$/)[1]);if(s=s.replace(/&\d+/g,""),N[s]){var m="";C(s)<3&&!s.match(/[hw],/)?(N[s].forEach((function(s){!m&&s.includes("幾")&&(m=s.replace("幾",d))})),m||(m=N[s][0].match(/^[大小]/)?N[s][0].replace(/^[大小]/,d):d+N[s][0])):m=N[s][0],f.push(m)}}else s=s.replace(/&\d+/g,"");if(f.length||(f=x(s)),f.length||(f=x(s=s.replace(/&[ol]/g,""))),f.length||(f=x(s=s.replace(/[ol](b|s)/g,"x$1"))),!f.length){var b=s.replace(/x/g,"l"),o=s.replace(/x/g,"o");f=f.concat(x(o),x(b))}return f}var U=Object.assign({},N,{xb:["兄弟"],xs:["姐妹"]});function q(s,f){var x=s.split(",").map((function(s){var f=s.replace(/&[ol\d]+/,"");return U[f][0]})).join("的");return f&&f>-1&&U[f+","+s]&&(0==f?x="(女性)"+x:1==f&&(x="(男性)"+x)),x}var z=Object.assign({},N,{"f,xb":["伯叔父","幾爸爸","幾爸","幾爹"],"f,xb,w":["伯叔母","幾媽媽","幾媽","幾娘"],"h,xb":["伯叔"],"h,xb,w":["妯娌","娣姒","娣姒姊妹","嬸子"]}),B={},D=function(s){z[s].forEach((function(f){void 0===B[f]&&(B[f]=[]),B[f].push(s)}))};for(var F in z)D(F);function H(s,f){var x="undefined"!=typeof Symbol&&s[Symbol.iterator]||s["@@iterator"];if(!x){if(Array.isArray(s)||(x=function(s,f){if(!s)return;if("string"==typeof s)return J(s,f);var x=Object.prototype.toString.call(s).slice(8,-1);"Object"===x&&s.constructor&&(x=s.constructor.name);if("Map"===x||"Set"===x)return Array.from(s);if("Arguments"===x||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x))return J(s,f)}(s))||f&&s&&"number"==typeof s.length){x&&(s=x);var d=0,m=function(){};return{s:m,n:function(){return d>=s.length?{done:!0}:{done:!1,value:s[d++]}},e:function(s){throw s},f:m}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var b,o=!0,r=!1;return{s:function(){x=x.call(s)},n:function(){var s=x.next();return o=s.done,s},e:function(s){r=!0,b=s},f:function(){try{o||null==x.return||x.return()}finally{if(r)throw b}}}}function J(s,f){(null==f||f>s.length)&&(f=s.length);for(var x=0,d=new Array(f);x-1)d=m;else if(b>-1&&-1==m)d=b;else{if(b!=m)return[];d=b}}var o=Q(s.from,d),r=Q(s.to,d);if(!o.length||!r.length)return[];var e=[];return o.forEach((function(f){r.forEach((function(x){var m=d,b=","+x;if(b.match(/,([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?$/)&&(m=1),b.match(/,([mwd0](&[ol\d]+)?|[olx]s)(&[ol\d]+)?$/)&&(m=0),f&&x){var o=s.optimal;if((f.match(/&\d+/)||x.match(/&\d+/))&&(o=!0),o){var r=function(s){for(var f=s.from,x=s.to,d=s.sex,m=s.from.split(","),b=s.to.split(","),o=0;o+t?m[o]=m[o].replace(/^[xol]b|^s/,"lb").replace(/^[xol]s|^d/,"ls"):+h<+t&&(m[o]=m[o].replace(/^[xol]b|^s/,"ob").replace(/^[xol]s|^d/,"os")),f=m.slice(o).join(","),x=b.slice(o+1).join(","),d=b[o].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/)?1:0;else if(s.optimal&&(r=m[o].match(/([xol])[bs]/),e=b[o].match(/([xol])[bs]/),h=r?r[1]:"",t=e?e[1]:"","x"==h||"x"==t)){f=m.slice(o+1).join(","),x=b.slice(o+1).join(","),d=m[o].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/)?1:0;continue}}break}f=m.slice(o+1).join(","),x=b.slice(o+1).join(","),d=m[o].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/)?1:0}return{from:f,to:x,sex:d}}({from:f,to:x,sex:d,optimal:s.optimal});f=r.from,x=r.to,d=r.sex}}(x?I(x,d):[""]).forEach((function(s){var x=(s?","+s:"")+(f?","+f:"");e.push({selector:x,sex:m})}))}))})),e}function P(s){var f=[],x={};return function s(d){var m="";if(!x[d]){x[d]=!0;do{m=d;var b,r=H(o);try{for(r.s();!(b=r.n()).done;){var e=b.value;if((d=d.replace(e.exp,e.str)).includes("#"))return d.split("#").forEach(s),!1}}catch(s){r.e(s)}finally{r.f()}}while(m!=d);if(d.match(/,[mwd0](&[ol\d+])?,w|,[hfs1](&[ol\d]+)?,h/))return!1;f.push(d)}}(s),f}function Q(s,f){if(s.match(/^,/)||(s=","+s),f<0)s.match(/^,[w1]/)?f=1:s.match(/^,[h0]/)&&(f=0);else{if(1==f&&s.match(/^,[h0]/))return[];if(0==f&&s.match(/^,[w1]/))return[]}if(f>-1&&!s.includes(",1")&&!s.includes(",0")&&(s=","+f+s),s.match(/,[mwd0](&[ol\d]+)?,w|,[hfs1](&[ol\d]+)?,h/))return[];var x=P(s).map((function(s){return s.replace(/,[01]/,"").substr(1)}));return T(x)}var R=function(s){"string"==typeof s&&(s=function(s){var f,x=m(d);try{for(x.s();!(f=x.n()).done;){var b=f.value,o=s.match(b.exp);if(o)return b.opt(o)}}catch(s){x.e(s)}finally{x.f()}return{}}(s));var f=Object.assign({text:"",target:"",sex:-1,type:"default",reverse:!1,mode:"default",optimal:!1},s);!function(s){if(N=Object.assign({},O),s&&A[s])for(var f in A[s])N[f]=[].concat(A[s][f],O[f]||[])}(f.mode);var b=K(f.text),o=K(f.target);o.length||(o=[""]);var r=[];return b.forEach((function(s){o.forEach((function(x){L({from:s,to:x,sex:f.sex,optimal:f.optimal}).forEach((function(s){(s?Q(s.selector,s.sex):[]).forEach((function(x){var d=[x],m=s.sex;f.reverse&&(d=I(x,m),m=x.match(/([fhs1](&[ol\d]+)?|[olx]b)$/)?1:0),"chain"==f.type?d.forEach((function(f){var x=q(f,s.sex);x&&r.push(x)})):"pair"==f.type?(d=I(x,s.sex)).forEach((function(s){var f=function(s,f){var x=[],d=[],m=[];s=s.replace(/&\d+/,""),f=f.replace(/&\d+/,"");var b=s.replace(/([ol])([bs])/,"x$2"),o=f.replace(/([ol])([bs])/,"x$2"),r=s.replace(/&[ol]/,""),e=f.replace(/&[ol]/,"");for(var h in l){var t=h.split("#");if(t.length>1){var w=Q(t[0]),M=Q(t[1]),n=w.map((function(s){return s.replace(/&[ol\d]+/,"").replace(/([ol])([bs])/,"x$2")})),a=M.map((function(s){return s.replace(/&[ol\d]+/,"").replace(/([ol])([bs])/,"x$2")}));(w.includes(s)&&M.includes(f)||w.includes(f)&&M.includes(s))&&x.push(l[h][0]),(n.includes(b)&&a.includes(o)||n.includes(o)&&a.includes(b))&&d.push(l[h][0]),(n.includes(r)&&a.includes(e)||n.includes(e)&&a.includes(r))&&m.push(l[h][0])}}return x.length||(x=d),x.length||(x=m),x}(x,s);r=r.concat(f)})):d.forEach((function(s){var f=k(s);f.length||(f=k(m+","+s)),r=r.concat(f)}))}))}))}))})),x(new Set(r))};return R.data=N,R.dataCount=Object.keys(N).length,R.setMode=function(s,f){A[s]=Object.assign(A[s]||{},f)},R}));