2023-03-16 22:44:07 +08:00

105 lines
3.3 KiB
JavaScript

/*
* 完整关系链数据 - 合并各类关系链数据
*/
import _prefix from './data/prefix';
import _branch from './data/branch';
import _main from './data/main';
import _multipie from './data/multiple';
import {expandSelector} from './selector';
let _map = Object.assign({},_multipie);
let getMap = function(prefixMap,branch){
let map = {};
for(let key in branch){
let tag = key.match(/\{.+?\}/)[0];
let nameList = branch[key];
for(let k in prefixMap[tag]){
let prefixList = prefixMap[tag][k];
let newKey = key.replace(tag,k);
let isFilter = ['h,h','w,w','w,h','h,w'].some(pair=>(newKey.includes(pair)));
if(!isFilter){
let newList = [];
prefixList.forEach(function(prefix){
nameList.forEach(function(name){
if(name.includes('?')){
newList.push(name.replace('?',prefix));
}else{
newList.push(prefix+name);
}
});
});
if(!map[newKey]){
map[newKey] = _map[newKey]||[];
}
map[newKey] = newList.concat(map[newKey]);
}
}
}
return map;
};
// 分支前缀处理
let prefixMap1 = {};
for(let key in _prefix){
prefixMap1[key] = {};
for(let selector in _prefix[key]){
if(selector.indexOf(']')==-1){
prefixMap1[key][selector] = _prefix[key][selector];
}
}
}
let prefixMap2 = {};
for(let key in _prefix){
prefixMap2[key] = {};
for(let selector in _prefix[key]){
if(selector.indexOf(']')>-1){
expandSelector(selector).forEach(function(s){
prefixMap2[key][s] = _prefix[key][selector];
});
}
}
}
_map = Object.assign({},_map,getMap(prefixMap1,_branch),getMap(prefixMap2,_branch));
// 主要关系
for(let key in _main){
_map[key] = [].concat(_main[key],_map[key]||[]);
}
// 版权彩蛋
_map['o']=['passer-by.com','\u4f5c\u8005'];
// 配偶关系
const branch = {
'w':['妻','内','岳','岳家','丈人'],
'h':['夫','外','公','婆家','婆婆'],
};
let nameSet = new Set(Object.values(_map).flat());
for(let key in _map){
if(key.match(/^[fm]/)||key.match(/^[olx][bs]$|^[olx][bs],[^mf]/)){ // 只对长辈或者兄弟辈匹配
for(let k in branch){
let newKey = k+','+key;
if(key.match(/[fm]/)){
let newKey_x = newKey.replace(/,[ol]([sb])(,[wh])?$/,',x$1$2').replace(/(,[sd])&[ol](,[wh])?$/,'$1$2');
if(newKey_x!=newKey&&_map[newKey_x]){ // 不扩大解释年龄
continue;
}
}
if(!_map[newKey]){
_map[newKey] = [];
}
let prefixList = branch[k];
let nameList = _map[key];
prefixList.forEach(function(prefix){
nameList.forEach(function(name){
let newName = prefix+name;
if(!nameSet.has(newName)){ // 配偶组合的称呼不得已原有称呼冲突(如:妻舅!=妻子的舅舅;外舅公!=老公的舅公)
_map[newKey].push(newName);
}
});
});
}
}
}
export default _map;