Merge branch 'master' of github.com:mumuy/relationship
This commit is contained in:
commit
303128974a
1
dist/relationship-mode.min.js
vendored
Normal file
1
dist/relationship-mode.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(s,d){"object"==typeof exports&&"object"==typeof module?module.exports=d():"function"==typeof define&&define.amd?define([],d):"object"==typeof exports?exports.relationshipMode=d():s.relationshipMode=d()}(this,(()=>(()=>{"use strict";var s={d:(d,f)=>{for(var m in f)s.o(f,m)&&!s.o(d,m)&&Object.defineProperty(d,m,{enumerable:!0,get:f[m]})},o:(s,d)=>Object.prototype.hasOwnProperty.call(s,d)},d={};s.d(d,{default:()=>f});const f={guangdong:{name:"广东",data:{f:["老窦"],"f,f":["阿爷"],"f,f,f":["太公"],"f,f,m":["太婆"],"f,m":["阿嫲"],"f,m,f":["太外公"],"f,m,m":["太外婆"],"f,ob":["伯伯"],"f,ob,w":["伯娘"],"f,lb":["阿叔"],"f,lb,w":["阿婶"],"0,f,xb,d,s":["堂姨甥"],"1,f,xb,d,s":["堂外甥"],"0,f,xb,d,d":["堂姨甥女"],"1,f,xb,d,d":["堂外甥女"],"f,os":["姑妈"],"f,ls":["姑姐"],"f,xs,h":["姑丈"],"0,f,xs,d,s":["姑表姨甥"],"1,f,xs,d,s":["姑表外甥"],"0,f,xs,d,d":["姑表姨甥女"],"1,f,xs,d,d":["姑表外甥女"],m:["老母"],"m,f":["阿公"],"m,f,f":["外太公"],"m,f,m":["外太婆"],"m,m":["阿婆"],"m,m,f":["外太外公"],"m,m,m":["外太外婆"],"m,ob":["舅父"],"m,lb":["舅仔"],"m,xb,w":["舅母"],"0,m,xb,d,s":["舅表姨甥"],"1,m,xb,d,s":["舅表外甥"],"0,m,xb,d,d":["舅表姨甥女"],"1,m,xb,d,d":["舅表外甥女"],"m,os":["姨妈"],"m,ls":["姨仔"],"m,xs,h":["姨丈"],"0,m,xb,d,s":["姨姨甥"],"1,m,xb,d,s":["姨外甥"],"0,m,xb,d,d":["姨姨甥女"],"1,m,xb,d,d":["姨外甥女"],ob:["大佬"],"ob,w":["阿嫂"],lb:["细佬"],"lb,w":["弟妇"],"xb,s":["侄"],"xb,d":["侄女"],os:["家姐"],"os,h":["姐夫"],ls:["阿妹"],"ls,h":["妹夫"],"0,xs,s":["姨甥"],"1,xs,s":["外甥"],"0,xs,d":["姨甥女"],"1,xs,d":["外甥女"],s:["仔"],"s,w":["新妇"],"s,s":["孙"],"s,s,w":["孙新妇"],"s,s,s":["息仔"],"s,s,d":["息女"],"s,d":["孙女"],"s,d,h":["孙女婿"],"s,d,s":["外息仔"],"s,d,d":["外息女"],d:["女"],"d,s":["外孙"],"d,s,w":["外孙新妇"],"d,s,s":["外息仔"],"d,s,d":["外息女"],"d,d":["外孙女"],"d,d,h":["外孙女婿"],"d,d,s":["外息仔"],"d,d,d":["外息女"]}},north:{name:"北方",data:{"m,m":["姥姥"],"m,m,xs":["姨姥姥"],"m,m,xs,h":["姨姥爷"],"m,m,xb":["舅姥爷"],"m,m,xb,w":["舅姥姥"],"m,f":["姥爷"],"m,f,xs":["姑姥姥"],"m,f,xs,h":["姑姥爷"],"m,f,ob":["大姥爷"],"m,f,ob,w":["大姥姥"],"m,f,lb":["小姥爷"],"m,f,lb,w":["小姥姥"],"f,ob":["大爷"],"f,ob,w":["大娘"]}}};return d=d.default})()));
|
1
dist/relationship-mode.zh-HK.min.js
vendored
Normal file
1
dist/relationship-mode.zh-HK.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(s,d){"object"==typeof exports&&"object"==typeof module?module.exports=d():"function"==typeof define&&define.amd?define([],d):"object"==typeof exports?exports.relationshipMode=d():s.relationshipMode=d()}(this,(()=>(()=>{"use strict";var s={d:(d,f)=>{for(var m in f)s.o(f,m)&&!s.o(d,m)&&Object.defineProperty(d,m,{enumerable:!0,get:f[m]})},o:(s,d)=>Object.prototype.hasOwnProperty.call(s,d)},d={};s.d(d,{default:()=>f});const f={guangdong:{name:"廣東",data:{f:["老竇"],"f,f":["阿爺"],"f,f,f":["太公"],"f,f,m":["太婆"],"f,m":["阿嫲"],"f,m,f":["太外公"],"f,m,m":["太外婆"],"f,ob":["伯伯"],"f,ob,w":["伯娘"],"f,lb":["阿叔"],"f,lb,w":["阿嬸"],"0,f,xb,d,s":["堂姨甥"],"1,f,xb,d,s":["堂外甥"],"0,f,xb,d,d":["堂姨甥女"],"1,f,xb,d,d":["堂外甥女"],"f,os":["姑媽"],"f,ls":["姑姐"],"f,xs,h":["姑丈"],"0,f,xs,d,s":["姑表姨甥"],"1,f,xs,d,s":["姑表外甥"],"0,f,xs,d,d":["姑表姨甥女"],"1,f,xs,d,d":["姑表外甥女"],m:["老母"],"m,f":["阿公"],"m,f,f":["外太公"],"m,f,m":["外太婆"],"m,m":["阿婆"],"m,m,f":["外太外公"],"m,m,m":["外太外婆"],"m,ob":["舅父"],"m,lb":["舅仔"],"m,xb,w":["舅母"],"0,m,xb,d,s":["舅表姨甥"],"1,m,xb,d,s":["舅表外甥"],"0,m,xb,d,d":["舅表姨甥女"],"1,m,xb,d,d":["舅表外甥女"],"m,os":["姨媽"],"m,ls":["姨仔"],"m,xs,h":["姨丈"],"0,m,xb,d,s":["姨姨甥"],"1,m,xb,d,s":["姨外甥"],"0,m,xb,d,d":["姨姨甥女"],"1,m,xb,d,d":["姨外甥女"],ob:["大佬"],"ob,w":["阿嫂"],lb:["細佬"],"lb,w":["弟婦"],"xb,s":["侄"],"xb,d":["侄女"],os:["家姐"],"os,h":["姐夫"],ls:["阿妹"],"ls,h":["妹夫"],"0,xs,s":["姨甥"],"1,xs,s":["外甥"],"0,xs,d":["姨甥女"],"1,xs,d":["外甥女"],s:["仔"],"s,w":["新婦"],"s,s":["孫"],"s,s,w":["孫新婦"],"s,s,s":["息仔"],"s,s,d":["息女"],"s,d":["孫女"],"s,d,h":["孫女婿"],"s,d,s":["外息仔"],"s,d,d":["外息女"],d:["女"],"d,s":["外孫"],"d,s,w":["外孫新婦"],"d,s,s":["外息仔"],"d,s,d":["外息女"],"d,d":["外孫女"],"d,d,h":["外孫女婿"],"d,d,s":["外息仔"],"d,d,d":["外息女"]}},north:{name:"北方",data:{"m,m":["姥姥"],"m,m,xs":["姨姥姥"],"m,m,xs,h":["姨姥爺"],"m,m,xb":["舅姥爺"],"m,m,xb,w":["舅姥姥"],"m,f":["姥爺"],"m,f,xs":["姑姥姥"],"m,f,xs,h":["姑姥爺"],"m,f,ob":["大姥爺"],"m,f,ob,w":["大姥姥"],"m,f,lb":["小姥爺"],"m,f,lb,w":["小姥姥"],"f,ob":["大爺"],"f,ob,w":["大娘"]}}};return d=d.default})()));
|
6
dist/relationship.min.js
vendored
6
dist/relationship.min.js
vendored
File diff suppressed because one or more lines are too long
6
dist/relationship.zh-HK.min.js
vendored
6
dist/relationship.zh-HK.min.js
vendored
File diff suppressed because one or more lines are too long
@ -9,6 +9,11 @@ gulp.task('mini', () => {
|
||||
// .pipe(rename("zh-HK.html"))
|
||||
// .pipe(gulp.dest("./"));
|
||||
|
||||
gulp.src('dist/relationship-mode.min.js')
|
||||
.pipe(cht())
|
||||
.pipe(rename("relationship-mode.zh-HK.min.js"))
|
||||
.pipe(gulp.dest('dist/'))
|
||||
|
||||
return gulp.src('dist/relationship.min.js')
|
||||
.pipe(cht())
|
||||
.pipe(rename("relationship.zh-HK.min.js"))
|
||||
|
95
index.html
95
index.html
@ -75,7 +75,11 @@
|
||||
<span>默认</span>
|
||||
</label>
|
||||
<label for="field-0-2">
|
||||
<input id="field-0-2" type="radio" name="mode" value="cantonese">
|
||||
<input id="field-0-2" type="radio" name="mode" value="north">
|
||||
<span>北方地区</span>
|
||||
</label>
|
||||
<label for="field-0-3">
|
||||
<input id="field-0-3" type="radio" name="mode" value="guangdong">
|
||||
<span>粤语惯用</span>
|
||||
</label>
|
||||
</div>
|
||||
@ -409,89 +413,15 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="dist/relationship.min.js"></script>
|
||||
<script type="text/javascript" src="dist/relationship-mode.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
// 获取数量
|
||||
document.getElementById('count').innerText = relationship.dataCount;
|
||||
|
||||
// 自定义模式
|
||||
relationship.setMode('cantonese',{
|
||||
'f':['阿爸'],
|
||||
'f,f':['阿爷'],
|
||||
'f,f,f':['太公'],
|
||||
'f,f,m':['太婆'],
|
||||
'f,m':['阿嫲'],
|
||||
'f,m,f':['太外公'],
|
||||
'f,m,m':['太外婆'],
|
||||
'f,ob':['大伯'],
|
||||
'f,ob,w':['伯娘'],
|
||||
'f,lb':['阿叔'],
|
||||
'f,lb,w':['阿婶'],
|
||||
'0,f,xb,d,s':['堂姨甥'],
|
||||
'1,f,xb,d,s':['堂外甥'],
|
||||
'0,f,xb,d,d':['堂姨甥女'],
|
||||
'1,f,xb,d,d':['堂外甥女'],
|
||||
'f,os':['姑妈'],
|
||||
'f,ls':['姑姐'],
|
||||
'f,xs,h':['姑丈'],
|
||||
'0,f,xs,d,s':['姑表姨甥'],
|
||||
'1,f,xs,d,s':['姑表外甥'],
|
||||
'0,f,xs,d,d':['姑表姨甥女'],
|
||||
'1,f,xs,d,d':['姑表外甥女'],
|
||||
'm':['阿妈','老母'],
|
||||
'm,f':['阿公'],
|
||||
'm,f,f':['外太公'],
|
||||
'm,f,m':['外太婆'],
|
||||
'm,m':['阿婆'],
|
||||
'm,m,f':['外太外公'],
|
||||
'm,m,m':['外太外婆'],
|
||||
'm,ob':['舅父'],
|
||||
'm,lb':['舅仔'],
|
||||
'm,xb,w':['舅母'],
|
||||
'0,m,xb,d,s':['舅表姨甥'],
|
||||
'1,m,xb,d,s':['舅表外甥'],
|
||||
'0,m,xb,d,d':['舅表姨甥女'],
|
||||
'1,m,xb,d,d':['舅表外甥女'],
|
||||
'm,os':['姨妈'],
|
||||
'm,ls':['姨仔'],
|
||||
'm,xs,h':['姨丈'],
|
||||
'0,m,xb,d,s':['姨姨甥'],
|
||||
'1,m,xb,d,s':['姨外甥'],
|
||||
'0,m,xb,d,d':['姨姨甥女'],
|
||||
'1,m,xb,d,d':['姨外甥女'],
|
||||
'ob':['阿哥'],
|
||||
'ob,w':['阿嫂'],
|
||||
'lb':['阿弟','细佬'],
|
||||
'lb,w':['弟妇'],
|
||||
'xb,s':['侄'],
|
||||
'xb,d':['侄女'],
|
||||
'os':['阿姐'],
|
||||
'os,h':['姐夫'],
|
||||
'ls':['阿妹'],
|
||||
'ls,h':['妹夫'],
|
||||
'0,xs,s':['姨甥'],
|
||||
'1,xs,s':['外甥'],
|
||||
'0,xs,d':['姨甥女'],
|
||||
'1,xs,d':['外甥女'],
|
||||
's':['仔'],
|
||||
's,w':['新妇'],
|
||||
's,s':['孙'],
|
||||
's,s,w':['孙新妇'],
|
||||
's,s,s':['息仔'],
|
||||
's,s,d':['息女'],
|
||||
's,d':['孙女'],
|
||||
's,d,h':['孙女婿'],
|
||||
's,d,s':['外息仔'],
|
||||
's,d,d':['外息女'],
|
||||
'd':['女'],
|
||||
'd,s':['外孙'],
|
||||
'd,s,w':['外孙新妇'],
|
||||
'd,s,s':['外息仔'],
|
||||
'd,s,d':['外息女'],
|
||||
'd,d':['外孙女'],
|
||||
'd,d,h':['外孙女婿'],
|
||||
'd,d,s':['外息仔'],
|
||||
'd,d,d':['外息女'],
|
||||
});
|
||||
for(var key in relationshipMode){
|
||||
relationship.setMode(key,relationshipMode[key]['data']);
|
||||
}
|
||||
|
||||
// 标签页
|
||||
(function(){
|
||||
@ -534,7 +464,12 @@
|
||||
var value = $input.value.trim();
|
||||
if(value){
|
||||
var sex = $sex[0].checked?1:0;
|
||||
var mode = $mode[0].checked?$mode[0].value:$mode[1].value;
|
||||
var mode = 'default';
|
||||
if($mode[1].checked){
|
||||
mode = $mode[1].value;
|
||||
}else if($mode[2].checked){
|
||||
mode = $mode[2].value;
|
||||
}
|
||||
var reverse = !$reverse[0].checked;
|
||||
var result = relationship({text:value,sex:sex,reverse:reverse,mode:mode});
|
||||
$result.value = '';
|
||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "relationship.js",
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.2",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "relationship.js",
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.2",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"gulp": "^4.0.2",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "relationship.js",
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.2",
|
||||
"summary": "relationship.js is a javascript library for chinese family relationship. 中国家庭亲戚称谓计算器,家庭关系、亲戚关系算法。",
|
||||
"description": "Chinese kinship library",
|
||||
"author": "HaoLe Zheng",
|
||||
|
24
readme.md
24
readme.md
@ -26,7 +26,9 @@ var relationship = require("relationship.js");
|
||||
|
||||
|
||||
## 二、使用
|
||||
1. 通用方法: 唯一的计算方法 `relationship(options)`.
|
||||
1. 通用方法: 唯一的计算方法 `relationship`.
|
||||
|
||||
* 选项模式`relationship(options)`
|
||||
|
||||
参数`options`结构为:
|
||||
|
||||
@ -53,7 +55,7 @@ relationship({text:'妈妈的妈妈的哥哥'});
|
||||
relationship({text:'七舅姥爷',reverse:true,sex:1});
|
||||
// => ['甥外孙']
|
||||
|
||||
// 如:舅公和我具体是什么关系?
|
||||
// 如:舅公是什么亲戚
|
||||
relationship({text:'舅公',type:'chain'});
|
||||
// => ['爸爸的妈妈的兄弟', '妈妈的妈妈的兄弟', '老公的妈妈的兄弟']
|
||||
|
||||
@ -64,8 +66,24 @@ relationship({text:'外婆',target:'舅妈',sex:1});
|
||||
// 如:外婆和奶奶之间是什么关系?
|
||||
relationship({text:'外婆',target:'奶奶',type:'pair'});
|
||||
// => ['儿女亲家']
|
||||
|
||||
```
|
||||
|
||||
* 语句模式`relationship(exptession)`
|
||||
|
||||
参数`exptession`句式可以为:`xxx是xxx的什么人`、`xxx叫xxx什么`、`xxx如何称呼xxx`等.
|
||||
|
||||
代码示例:
|
||||
|
||||
```js
|
||||
// 如:舅妈如何称呼外婆?
|
||||
relationship('舅妈如何称呼外婆?');
|
||||
// => ['婆婆']
|
||||
|
||||
// 如:外婆和奶奶之间是什么关系?
|
||||
relationship('外婆和奶奶之间是什么关系?');
|
||||
// => ['儿女亲家']
|
||||
```
|
||||
|
||||
2. 内部属性:获取当前数据表 `relationship.data`.
|
||||
|
||||
3. 内部属性:获取当前数据量 `relationship.dataCount`.
|
||||
|
81
src/locale/guangdong.js
Normal file
81
src/locale/guangdong.js
Normal file
@ -0,0 +1,81 @@
|
||||
export default {
|
||||
'name':'广东',
|
||||
'data':{
|
||||
'f':['老窦'],
|
||||
'f,f':['阿爷'],
|
||||
'f,f,f':['太公'],
|
||||
'f,f,m':['太婆'],
|
||||
'f,m':['阿嫲'],
|
||||
'f,m,f':['太外公'],
|
||||
'f,m,m':['太外婆'],
|
||||
'f,ob':['伯伯'],
|
||||
'f,ob,w':['伯娘'],
|
||||
'f,lb':['阿叔'],
|
||||
'f,lb,w':['阿婶'],
|
||||
'0,f,xb,d,s':['堂姨甥'],
|
||||
'1,f,xb,d,s':['堂外甥'],
|
||||
'0,f,xb,d,d':['堂姨甥女'],
|
||||
'1,f,xb,d,d':['堂外甥女'],
|
||||
'f,os':['姑妈'],
|
||||
'f,ls':['姑姐'],
|
||||
'f,xs,h':['姑丈'],
|
||||
'0,f,xs,d,s':['姑表姨甥'],
|
||||
'1,f,xs,d,s':['姑表外甥'],
|
||||
'0,f,xs,d,d':['姑表姨甥女'],
|
||||
'1,f,xs,d,d':['姑表外甥女'],
|
||||
'm':['老母'],
|
||||
'm,f':['阿公'],
|
||||
'm,f,f':['外太公'],
|
||||
'm,f,m':['外太婆'],
|
||||
'm,m':['阿婆'],
|
||||
'm,m,f':['外太外公'],
|
||||
'm,m,m':['外太外婆'],
|
||||
'm,ob':['舅父'],
|
||||
'm,lb':['舅仔'],
|
||||
'm,xb,w':['舅母'],
|
||||
'0,m,xb,d,s':['舅表姨甥'],
|
||||
'1,m,xb,d,s':['舅表外甥'],
|
||||
'0,m,xb,d,d':['舅表姨甥女'],
|
||||
'1,m,xb,d,d':['舅表外甥女'],
|
||||
'm,os':['姨妈'],
|
||||
'm,ls':['姨仔'],
|
||||
'm,xs,h':['姨丈'],
|
||||
'0,m,xb,d,s':['姨姨甥'],
|
||||
'1,m,xb,d,s':['姨外甥'],
|
||||
'0,m,xb,d,d':['姨姨甥女'],
|
||||
'1,m,xb,d,d':['姨外甥女'],
|
||||
'ob':['大佬'],
|
||||
'ob,w':['阿嫂'],
|
||||
'lb':['细佬'],
|
||||
'lb,w':['弟妇'],
|
||||
'xb,s':['侄'],
|
||||
'xb,d':['侄女'],
|
||||
'os':['家姐'],
|
||||
'os,h':['姐夫'],
|
||||
'ls':['阿妹'],
|
||||
'ls,h':['妹夫'],
|
||||
'0,xs,s':['姨甥'],
|
||||
'1,xs,s':['外甥'],
|
||||
'0,xs,d':['姨甥女'],
|
||||
'1,xs,d':['外甥女'],
|
||||
's':['仔'],
|
||||
's,w':['新妇'],
|
||||
's,s':['孙'],
|
||||
's,s,w':['孙新妇'],
|
||||
's,s,s':['息仔'],
|
||||
's,s,d':['息女'],
|
||||
's,d':['孙女'],
|
||||
's,d,h':['孙女婿'],
|
||||
's,d,s':['外息仔'],
|
||||
's,d,d':['外息女'],
|
||||
'd':['女'],
|
||||
'd,s':['外孙'],
|
||||
'd,s,w':['外孙新妇'],
|
||||
'd,s,s':['外息仔'],
|
||||
'd,s,d':['外息女'],
|
||||
'd,d':['外孙女'],
|
||||
'd,d,h':['外孙女婿'],
|
||||
'd,d,s':['外息仔'],
|
||||
'd,d,d':['外息女'],
|
||||
}
|
||||
}
|
19
src/locale/north.js
Normal file
19
src/locale/north.js
Normal file
@ -0,0 +1,19 @@
|
||||
export default {
|
||||
'name':'北方',
|
||||
'data':{
|
||||
'm,m':['姥姥'],
|
||||
'm,m,xs':['姨姥姥'],
|
||||
'm,m,xs,h':['姨姥爷'],
|
||||
'm,m,xb':['舅姥爷'],
|
||||
'm,m,xb,w':['舅姥姥'],
|
||||
'm,f':['姥爷'],
|
||||
'm,f,xs':['姑姥姥'],
|
||||
'm,f,xs,h':['姑姥爷'],
|
||||
'm,f,ob':['大姥爷'],
|
||||
'm,f,ob,w':['大姥姥'],
|
||||
'm,f,lb':['小姥爷'],
|
||||
'm,f,lb,w':['小姥姥'],
|
||||
'f,ob':['大爷'],
|
||||
'f,ob,w':['大娘'],
|
||||
}
|
||||
}
|
82
src/module/expression.js
Normal file
82
src/module/expression.js
Normal file
@ -0,0 +1,82 @@
|
||||
// 自然语言表达
|
||||
export default [
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(称呼|叫|喊)(什么|啥)??$/,
|
||||
opt:match=>({
|
||||
text:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(如何|怎么)(称呼|叫|喊)??$/,
|
||||
opt:match=>({
|
||||
text:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)是(谁|什么亲戚|啥亲戚|什么辈分|啥辈分)??$/,
|
||||
opt:match=>{
|
||||
return {
|
||||
text:match[1],
|
||||
type:match[0].indexOf('的')>-1?'default':'chain'
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(称呼|叫|喊)(\S+?)(什么|啥)??$/,
|
||||
opt:match=>({
|
||||
text:match[4],
|
||||
target:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?(如何|怎么)(称呼|叫|喊)(\S+?)??$/,
|
||||
opt:match=>({
|
||||
text:match[5],
|
||||
target:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)是(\S+?)的(谁|什么|什么亲戚|啥亲戚|什么人)??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
target:match[2]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(应该|得)?管(\S+?)叫(什么|啥)??$/,
|
||||
opt:match=>({
|
||||
text:match[2],
|
||||
target:match[1]
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(和|与)(\S+?)(之间)?是(什么|啥)关系??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
target:match[3],
|
||||
type:'pair'
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(指的)?是(什么|啥)(意思|关系|辈分|人)??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
type:'chain'
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)(指的)?是(什么|啥)亲戚关系??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
type:'chain'
|
||||
})
|
||||
},
|
||||
{
|
||||
exp:/^(\S+?)对于(\S+?)是(什么|啥)关系??$/,
|
||||
opt:match=>({
|
||||
text:match[1],
|
||||
target:match[2],
|
||||
type:'chain'
|
||||
})
|
||||
},
|
||||
];
|
@ -2,6 +2,7 @@
|
||||
import _filter from './filter';
|
||||
import _map from './map';
|
||||
import _pair from './pair';
|
||||
import _expression from './expression';
|
||||
|
||||
var _mode = {}; // 模式数据
|
||||
var _data = Object.assign({},_map); // 最终数据
|
||||
@ -14,17 +15,8 @@ var zh2number = function(text){
|
||||
if(map[text]){
|
||||
num = map[text];
|
||||
}else{
|
||||
if(text.includes('十')){
|
||||
var numAttr = text.split('十');
|
||||
if(!numAttr[0]){
|
||||
num = 10;
|
||||
}else{
|
||||
num = textAttr.indexOf(numAttr[0])*10;
|
||||
}
|
||||
num += textAttr.indexOf(numAttr[1]);
|
||||
}else{
|
||||
num += textAttr.includes(text)?textAttr.indexOf(text):0;
|
||||
}
|
||||
var [unit,dec=0] = text.replace(/^十/,'一十').split('十').map(word=> textAttr.indexOf(word)).reverse();
|
||||
num = dec*10+unit;
|
||||
}
|
||||
return num;
|
||||
};
|
||||
@ -39,15 +31,7 @@ var number2zh = function(num){
|
||||
}else{
|
||||
var dec = ~~(num/10);
|
||||
var unit = num%10;
|
||||
if(dec){
|
||||
if(dec>1){
|
||||
text = dec<textAttr.length?textAttr[dec]:'';
|
||||
}
|
||||
text += '十';
|
||||
text += unit<textAttr.length?textAttr[unit]:'';
|
||||
}else{
|
||||
text += num<textAttr.length?textAttr[num]:'';
|
||||
}
|
||||
text = (dec?(textAttr[dec]+'十').replace('一十','十'):'')+textAttr[unit];
|
||||
}
|
||||
return text;
|
||||
};
|
||||
@ -66,9 +50,7 @@ var getGen = function(id){
|
||||
|
||||
// 获得最简
|
||||
var getOptimal = function(options){
|
||||
var from = options['from'];
|
||||
var to = options['to']
|
||||
var sex = options['sex'];
|
||||
var {from,to,sex} = options;
|
||||
var from_chain = options['from'].split(',');
|
||||
var to_chain = options['to'].split(',');
|
||||
for(var i=0;i<from_chain.length&&i<to_chain.length;i++){
|
||||
@ -217,10 +199,10 @@ export function getSelectors(str){
|
||||
getList(name);
|
||||
// 通过关键词找关系
|
||||
keywords.forEach(function(name){
|
||||
var x_name = name.replace(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/,'几');
|
||||
var r_name = name.replace(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/,'');
|
||||
var match = name.match(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/);
|
||||
if(match){
|
||||
var x_name = name.replace(match[0],'几');
|
||||
var r_name = name.replace(match[0],'');
|
||||
var num = zh2number(match[0]);
|
||||
for(var i in _data){
|
||||
var r_i = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
|
||||
@ -272,9 +254,7 @@ export function getSelectors(str){
|
||||
|
||||
// 合并选择器,查找两个对象之间的关系
|
||||
export function mergeSelector(param){
|
||||
var from_selector = param['from'];
|
||||
var to_selector = param['to'];
|
||||
var my_sex = param['sex'];
|
||||
var {from:from_selector,to:to_selector,sex:my_sex} = param;
|
||||
if(my_sex<0){
|
||||
var to_sex = -1;
|
||||
var from_sex = -1;
|
||||
@ -379,8 +359,7 @@ export function selector2id(selector,sex){
|
||||
hash[selector] = true;
|
||||
do{
|
||||
s = selector;
|
||||
for(var i in _filter){
|
||||
var item = _filter[i];
|
||||
for(var item of _filter){
|
||||
// console.log('[filter]',item['exp'],selector);
|
||||
selector = selector.replace(item['exp'],item['str']);
|
||||
if(selector.includes('#')){
|
||||
@ -457,19 +436,18 @@ export function reverseId(id,sex){
|
||||
// 通过ID获取关系称呼
|
||||
export function getItemsById(id){
|
||||
var items = [];
|
||||
var getData = function(d){
|
||||
var getData = function(key){
|
||||
var res = [];
|
||||
if(_data[d]){
|
||||
res.push(_data[d][0]);
|
||||
if(_data[key]){
|
||||
res.push(_data[key][0]);
|
||||
}else{
|
||||
for(var i in _data){
|
||||
if(i.replace(/&[ol]/g,'')==d){
|
||||
if(i.replace(/&[ol]/g,'')==key){
|
||||
res.push(_data[i][0]);
|
||||
}else{
|
||||
var expr = d;
|
||||
while (expr.match(/[ol](b|s)/)){
|
||||
expr = expr.replace(/[ol](b|s)/,'x$1');
|
||||
if(expr==i){
|
||||
while (key.match(/[ol](b|s)/)){
|
||||
key = key.replace(/[ol](b|s)/,'x$1');
|
||||
if(key==i){
|
||||
res.push(_data[i][0]);
|
||||
break;
|
||||
}
|
||||
@ -589,11 +567,22 @@ export function setMode(sign,data){
|
||||
|
||||
// 获取模式数据
|
||||
export function getDataByMode(sign){
|
||||
var data = Object.assign({},_map);
|
||||
_data = Object.assign({},_map);
|
||||
if(sign&&_mode[sign]){
|
||||
for(var key in _mode[sign]){
|
||||
data[key] = [].concat(_mode[sign][key],_map[key]||[]);
|
||||
_data[key] = [].concat(_mode[sign][key],_map[key]||[]);
|
||||
}
|
||||
}
|
||||
return data;
|
||||
return _data;
|
||||
};
|
||||
|
||||
// 获取配置
|
||||
export function getOptions(text){
|
||||
for(var item of _expression){
|
||||
var match = text.match(item['exp']);
|
||||
if(match){
|
||||
return item['opt'](match);
|
||||
}
|
||||
}
|
||||
return {};
|
||||
};
|
@ -209,9 +209,7 @@ var prefix = {
|
||||
for(var key in prefixMap){
|
||||
for(var selector in prefixMap[key]){
|
||||
var ids = selector2id(selector);
|
||||
if(typeof prefix[key]=='undefined'){
|
||||
prefix[key] = {};
|
||||
}
|
||||
prefix[key] = prefix[key]||{};
|
||||
ids.forEach(function(id){
|
||||
prefix[key][id] = prefixMap[key][selector];
|
||||
});
|
7
src/relationship-mode.js
Normal file
7
src/relationship-mode.js
Normal file
@ -0,0 +1,7 @@
|
||||
import guangdong from './locale/guangdong';
|
||||
import north from './locale/north';
|
||||
|
||||
export default {
|
||||
guangdong,
|
||||
north
|
||||
};
|
@ -1,5 +1,6 @@
|
||||
import {
|
||||
unique,
|
||||
getOptions,
|
||||
getSelectors,
|
||||
mergeSelector,
|
||||
selector2id,
|
||||
@ -9,11 +10,14 @@ import {
|
||||
getPairsByIds,
|
||||
setMode,
|
||||
getDataByMode
|
||||
} from './method';
|
||||
} from './module/method';
|
||||
var _data = getDataByMode(); // 最终数据
|
||||
|
||||
// 对外方法
|
||||
var relationship = function (parameter){
|
||||
if(typeof parameter =='string'){
|
||||
parameter = getOptions(parameter);
|
||||
}
|
||||
var options = Object.assign({
|
||||
text:'', // 目标对象:目标对象的称谓汉字表达,称谓间用‘的’字分隔
|
||||
target:'', // 相对对象:相对对象的称谓汉字表达,称谓间用‘的’字分隔,空表示自己
|
||||
@ -33,13 +37,12 @@ var relationship = function (parameter){
|
||||
// console.log('[selectors]',from_selectors,to_selectors);
|
||||
from_selectors.forEach(function(from_selector){
|
||||
to_selectors.forEach(function(to_selector){
|
||||
var list = mergeSelector({
|
||||
mergeSelector({
|
||||
from:from_selector,
|
||||
to:to_selector,
|
||||
sex:options.sex,
|
||||
optimal:options.optimal
|
||||
});
|
||||
list.forEach(function(data){
|
||||
}).forEach(function(data){
|
||||
// console.log('[data]',from_selector,to_selector,data);
|
||||
var ids = data?selector2id(data['selector'],data['sex']):null;
|
||||
// console.log('[ids]',data['selector'],data['sex'],ids);
|
||||
@ -73,9 +76,7 @@ var relationship = function (parameter){
|
||||
temps = reverseId(id,data['sex']);
|
||||
temps.forEach(function(r_id){
|
||||
var pairs = getPairsByIds(id,r_id);
|
||||
if(pairs.length){
|
||||
result = result.concat(pairs);
|
||||
}
|
||||
result = result.concat(pairs);
|
||||
});
|
||||
}else{
|
||||
temps.forEach(function(id){
|
||||
@ -83,9 +84,7 @@ var relationship = function (parameter){
|
||||
if(!items.length){
|
||||
items = getItemsById(sex+','+id);
|
||||
}
|
||||
if(items.length){
|
||||
result = result.concat(items);
|
||||
}
|
||||
result = result.concat(items);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -3,8 +3,8 @@ var test = require('tape');
|
||||
var relationship = require('..');
|
||||
|
||||
test('relationship.js show to be tested', function (t) {
|
||||
// console.log('[test]',relationship({text:'堂哥',target:'叔叔',type:'pair',optimal:true}));
|
||||
|
||||
// console.log('[test]',relationship('妈妈应该如何称呼姑姑'));
|
||||
|
||||
t.deepEqual(relationship({text:'儿子的爸爸的妈妈',sex:1}),['妈妈']);
|
||||
t.deepEqual(relationship({text:'爱人',sex:1}),['老婆']);
|
||||
t.deepEqual(relationship({text:'爱人的爱人',sex:1}),['自己']);
|
||||
@ -39,5 +39,13 @@ test('relationship.js show to be tested', function (t) {
|
||||
t.deepEqual(relationship({text:'大舅',target:'二舅的儿子'}),['伯父']);
|
||||
t.deepEqual(relationship({text:'堂哥',target:'叔叔',type:'pair'}),['叔侄','父子']);
|
||||
t.deepEqual(relationship({text:'堂哥',target:'叔叔',type:'pair',optimal:true}),['父子']);
|
||||
t.deepEqual(relationship('妈妈应该如何称呼姑姑'),['姑子']);
|
||||
t.deepEqual(relationship('姑奶奶是什么关系'),['爸爸的爸爸的姐妹']);
|
||||
t.deepEqual(relationship('姑奶奶和爸爸是什么关系'),['姑侄']);
|
||||
t.deepEqual(relationship('我应该叫外婆的哥哥什么?'),['舅外公']);
|
||||
t.deepEqual(relationship('七舅姥爷应该叫我什么?'),['甥外孙','甥外孙女']);
|
||||
t.deepEqual(relationship('舅公是什么关系?'),['爸爸的妈妈的兄弟', '妈妈的妈妈的兄弟', '老公的妈妈的兄弟']);
|
||||
t.deepEqual(relationship('舅妈如何称呼外婆?'),['婆婆']);
|
||||
t.deepEqual(relationship('外婆和奶奶之间是什么关系?'),['儿女亲家']);
|
||||
t.end();
|
||||
});
|
||||
|
@ -17,25 +17,46 @@ ${repository}
|
||||
|
||||
Create on: ${date}`;
|
||||
|
||||
module.exports = {
|
||||
mode: 'production',
|
||||
entry: './src/relationship.js',
|
||||
output: {
|
||||
path: path.resolve(__dirname,'dist'),
|
||||
filename: 'relationship.min.js',
|
||||
globalObject: 'this',
|
||||
library: 'relationship',
|
||||
libraryTarget: 'umd',
|
||||
libraryExport:'default'
|
||||
module.exports = [
|
||||
{
|
||||
mode: 'production',
|
||||
entry: './src/relationship.js',
|
||||
output: {
|
||||
path: path.resolve(__dirname,'dist'),
|
||||
filename: 'relationship.min.js',
|
||||
globalObject: 'this',
|
||||
library: 'relationship',
|
||||
libraryTarget: 'umd',
|
||||
libraryExport:'default'
|
||||
},
|
||||
plugins: [
|
||||
new webpack.BannerPlugin(copyright)
|
||||
],
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new TerserJSPlugin({
|
||||
extractComments: false
|
||||
}),
|
||||
]
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new webpack.BannerPlugin(copyright)
|
||||
],
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new TerserJSPlugin({
|
||||
extractComments: false
|
||||
}),
|
||||
]
|
||||
{
|
||||
mode: 'production',
|
||||
entry:'./src/relationship-mode.js',
|
||||
output: {
|
||||
path: path.resolve(__dirname,'dist'),
|
||||
filename: 'relationship-mode.min.js',
|
||||
globalObject: 'this',
|
||||
library: 'relationshipMode',
|
||||
libraryTarget: 'umd',
|
||||
libraryExport:'default'
|
||||
},
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new TerserJSPlugin({
|
||||
extractComments: false
|
||||
}),
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
];
|
||||
|
95
zh-HK.html
95
zh-HK.html
@ -75,7 +75,11 @@
|
||||
<span>默認</span>
|
||||
</label>
|
||||
<label for="field-0-2">
|
||||
<input id="field-0-2" type="radio" name="mode" value="cantonese">
|
||||
<input id="field-0-2" type="radio" name="mode" value="north">
|
||||
<span>北方地區</span>
|
||||
</label>
|
||||
<label for="field-0-3">
|
||||
<input id="field-0-3" type="radio" name="mode" value="guangdong">
|
||||
<span>粵語慣用</span>
|
||||
</label>
|
||||
</div>
|
||||
@ -409,89 +413,15 @@
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="dist/relationship.zh-HK.min.js"></script>
|
||||
<script type="text/javascript" src="dist/relationship-mode.zh-HK.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
// 獲取數量
|
||||
document.getElementById('count').innerText = relationship.dataCount;
|
||||
|
||||
// 自定義模式
|
||||
relationship.setMode('cantonese',{
|
||||
'f':['阿爸'],
|
||||
'f,f':['阿爺'],
|
||||
'f,f,f':['太公'],
|
||||
'f,f,m':['太婆'],
|
||||
'f,m':['阿嫲'],
|
||||
'f,m,f':['太外公'],
|
||||
'f,m,m':['太外婆'],
|
||||
'f,ob':['大伯'],
|
||||
'f,ob,w':['伯娘'],
|
||||
'f,lb':['阿叔'],
|
||||
'f,lb,w':['阿嬸'],
|
||||
'0,f,xb,d,s':['堂姨甥'],
|
||||
'1,f,xb,d,s':['堂外甥'],
|
||||
'0,f,xb,d,d':['堂姨甥女'],
|
||||
'1,f,xb,d,d':['堂外甥女'],
|
||||
'f,os':['姑媽'],
|
||||
'f,ls':['姑姐'],
|
||||
'f,xs,h':['姑丈'],
|
||||
'0,f,xs,d,s':['姑表姨甥'],
|
||||
'1,f,xs,d,s':['姑表外甥'],
|
||||
'0,f,xs,d,d':['姑表姨甥女'],
|
||||
'1,f,xs,d,d':['姑表外甥女'],
|
||||
'm':['阿媽','老母'],
|
||||
'm,f':['阿公'],
|
||||
'm,f,f':['外太公'],
|
||||
'm,f,m':['外太婆'],
|
||||
'm,m':['阿婆'],
|
||||
'm,m,f':['外太外公'],
|
||||
'm,m,m':['外太外婆'],
|
||||
'm,ob':['舅父'],
|
||||
'm,lb':['舅仔'],
|
||||
'm,xb,w':['舅母'],
|
||||
'0,m,xb,d,s':['舅表姨甥'],
|
||||
'1,m,xb,d,s':['舅表外甥'],
|
||||
'0,m,xb,d,d':['舅表姨甥女'],
|
||||
'1,m,xb,d,d':['舅表外甥女'],
|
||||
'm,os':['姨媽'],
|
||||
'm,ls':['姨仔'],
|
||||
'm,xs,h':['姨丈'],
|
||||
'0,m,xb,d,s':['姨姨甥'],
|
||||
'1,m,xb,d,s':['姨外甥'],
|
||||
'0,m,xb,d,d':['姨姨甥女'],
|
||||
'1,m,xb,d,d':['姨外甥女'],
|
||||
'ob':['阿哥'],
|
||||
'ob,w':['阿嫂'],
|
||||
'lb':['阿弟','細佬'],
|
||||
'lb,w':['弟婦'],
|
||||
'xb,s':['侄'],
|
||||
'xb,d':['侄女'],
|
||||
'os':['阿姐'],
|
||||
'os,h':['姐夫'],
|
||||
'ls':['阿妹'],
|
||||
'ls,h':['妹夫'],
|
||||
'0,xs,s':['姨甥'],
|
||||
'1,xs,s':['外甥'],
|
||||
'0,xs,d':['姨甥女'],
|
||||
'1,xs,d':['外甥女'],
|
||||
's':['仔'],
|
||||
's,w':['新婦'],
|
||||
's,s':['孫'],
|
||||
's,s,w':['孫新婦'],
|
||||
's,s,s':['息仔'],
|
||||
's,s,d':['息女'],
|
||||
's,d':['孫女'],
|
||||
's,d,h':['孫女婿'],
|
||||
's,d,s':['外息仔'],
|
||||
's,d,d':['外息女'],
|
||||
'd':['女'],
|
||||
'd,s':['外孫'],
|
||||
'd,s,w':['外孫新婦'],
|
||||
'd,s,s':['外息仔'],
|
||||
'd,s,d':['外息女'],
|
||||
'd,d':['外孫女'],
|
||||
'd,d,h':['外孫女婿'],
|
||||
'd,d,s':['外息仔'],
|
||||
'd,d,d':['外息女'],
|
||||
});
|
||||
for(var key in relationshipMode){
|
||||
relationship.setMode(key,relationshipMode[key]['data']);
|
||||
}
|
||||
|
||||
// 標籤頁
|
||||
(function(){
|
||||
@ -534,7 +464,12 @@
|
||||
var value = $input.value.trim();
|
||||
if(value){
|
||||
var sex = $sex[0].checked?1:0;
|
||||
var mode = $mode[0].checked?$mode[0].value:$mode[1].value;
|
||||
var mode = 'default';
|
||||
if($mode[1].checked){
|
||||
mode = $mode[1].value;
|
||||
}else if($mode[2].checked){
|
||||
mode = $mode[2].value;
|
||||
}
|
||||
var reverse = !$reverse[0].checked;
|
||||
var result = relationship({text:value,sex:sex,reverse:reverse,mode:mode});
|
||||
$result.value = '';
|
||||
|
Loading…
x
Reference in New Issue
Block a user