105 lines
3.3 KiB
JavaScript
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;
|