Compare commits

...

448 Commits
npm ... master

Author SHA1 Message Date
mumuy
a706d387cc updated js优化 2025-04-12 12:35:28 +08:00
mumuy
5de00bca62 updated 数据错误修复 2025-04-10 19:50:17 +08:00
mumuy
04c659b308 updated 样式调整 2025-04-10 07:24:57 +08:00
mumuy
9cc35a56df updated 风格统一 2025-04-10 07:22:45 +08:00
mumuy
54c8791643 updated 兼容修复 2025-04-10 06:43:54 +08:00
mumuy
c66ae8243a updated 添加新逻辑 2025-04-10 01:45:00 +08:00
mumuy
5ed6e3152f updated 样式细节调整 2025-03-06 00:49:46 +08:00
mumuy
7d97faf262 updated 路径调整 2025-03-06 00:44:59 +08:00
mumuy
522a3d25bb updated vue重写 2025-03-06 00:36:25 +08:00
mumuy
dd491db6a9 updated 文案调整 2024-11-28 22:01:37 +08:00
zhenghaole
bef7f03aa8 updated 测试脚本修改 2024-11-20 08:48:05 +08:00
zhenghaole
61f0d22a46 updated 更新依赖 2024-11-11 20:52:39 +08:00
zhenghaole
2b9a5ec284 updated 配置调整 2024-11-11 09:46:19 +08:00
mumuy
ba1838d28c Update index.css 2024-09-21 19:28:11 +08:00
mumuy
89a1a805a8 updated 位置调整 2024-09-21 11:01:38 +08:00
mumuy
fcd00542c6 updated 添加新模块介绍 2024-09-21 09:36:47 +08:00
zhenghaole
227f44dced Merge branch 'master' of https://github.com/mumuy/relationship
# Conflicts:
#	dist/lang/relationship.zh-HK.min.js
#	dist/lang/relationship.zh-HK.min.mjs
#	dist/relationship.min.js
#	dist/relationship.min.mjs
2024-09-06 09:18:52 +08:00
zhenghaole
d54d8044dc updated 数据错误修复 2024-09-06 09:01:07 +08:00
路人甲
dc64307e79 Update index.css 2024-08-06 23:15:59 +08:00
路人甲
e5a3435926 Update index.js 2024-08-03 11:01:25 +08:00
路人甲
a4699825ca Update index.js 2024-08-03 02:55:15 +08:00
路人甲
9c19981052 Update index.js 2024-08-03 02:17:42 +08:00
路人甲
c66541124a updated 滚动效果优化 2024-08-03 02:08:34 +08:00
路人甲
251f4b9383 Merge branch 'master' of https://github.com/mumuy/relationship 2024-08-02 20:06:21 +08:00
路人甲
050a8e9cec 繁体字 “岳”字的处理 2024-08-02 20:05:55 +08:00
zhenghaole
f1acfdc534 updated 文案错误修复 2024-08-02 17:18:15 +08:00
路人甲
3843d7bece updated 样式优化 2024-08-02 00:25:08 +08:00
路人甲
f358b1e4cd updated 添加一次修饰性样式 2024-08-01 23:56:55 +08:00
路人甲
14eec3a7b2 updated 部分内容调整 2024-07-31 00:15:51 +08:00
路人甲
2c6ca7e5e2 updated 修复错误数据 2024-07-30 00:32:40 +08:00
路人甲
a73f632938 updated 对“妈妈的兄弟”和“爸爸的兄弟”的更准确把控 2024-07-29 22:39:41 +08:00
路人甲
c68dcff37e updated 姻兄弟关系添加 2024-07-25 00:32:19 +08:00
zhenghaole
ed24f0b432 updated 包版本调整 2024-07-24 18:07:29 +08:00
zhenghaole
d0a93b6aeb updated 正则兼容恢复 2024-07-24 17:57:56 +08:00
zhenghaole
e1ce2d85e4 Merge branch 'master' of https://github.com/mumuy/relationship 2024-07-19 18:40:49 +08:00
zhenghaole
0826185a36 updated 页面调整 2024-07-19 18:40:39 +08:00
路人甲
77dab6cada Merge branch 'master' of https://github.com/mumuy/relationship 2024-07-18 20:48:03 +08:00
路人甲
0ed0f82ecb updated 排除文件 2024-07-18 20:47:46 +08:00
zhenghaole
42ceda48ff updated 文件排除 2024-07-08 11:05:35 +08:00
zhenghaole
20021b2904 updated 数据库完善,重新压缩 2024-06-27 15:48:28 +08:00
zhenghaole
9c504ff50c updated 广告代码去除 2024-06-26 12:04:47 +08:00
zhenghaole
565e64db99 updated 页面调整 2024-05-31 14:47:59 +08:00
zhenghaole
443fe3cc4d updated 尝试广告代码 2024-05-31 14:44:10 +08:00
zhenghaole
1148b0bea2 updated 代码优化 2024-04-30 11:50:52 +08:00
zhenghaole
27d424aace updated 构建工具调整 2024-04-28 19:20:02 +08:00
zhenghaole
ce3dd27698 updated 构建工具调整 2024-04-28 18:55:35 +08:00
zhenghaole
00cb5e7b59 updated 图片压缩 2024-04-25 10:01:50 +08:00
zhenghaole
ca3436184d updated 文案调整 2024-04-25 09:53:30 +08:00
zhenghaole
b26ff77935 updated 文案调整 2024-04-25 09:44:13 +08:00
zhenghaole
ec6e666939 updated 图片调整 2024-04-25 09:42:31 +08:00
PASSER-BY
af34067dae Update index.css 2024-04-24 22:15:24 +08:00
PASSER-BY
cc53b29d05 updated 页面调整 2024-04-24 22:14:11 +08:00
PASSER-BY
970094a88f updated 代码优化 2024-04-19 23:50:42 +08:00
zhenghaole
230b0a8d23 updated 模式包不增加版本备注 2024-04-03 17:49:31 +08:00
zhenghaole
6d7dcf0eff updated 别称添加 2024-04-03 17:31:56 +08:00
PASSER-BY
c16938b161 updated 压缩分支数据 2024-02-21 22:39:46 +08:00
zhenghaole
93514d6082 updated 图标调整 2024-01-31 09:36:45 +08:00
zhenghaole
e3010a8c9a Merge branch 'master' of https://github.com/mumuy/relationship 2024-01-31 09:27:45 +08:00
zhenghaole
2583d393c6 updated 添加icon 2024-01-31 09:23:00 +08:00
PASSER-BY
4c6306d24e Merge branch 'master' of https://github.com/mumuy/relationship 2023-12-23 00:44:41 +08:00
PASSER-BY
9ae41c29d4 updated 添加浮动效果 2023-12-23 00:44:36 +08:00
zhenghaole
59ea91a07f updated 代码优化 2023-12-22 17:08:24 +08:00
zhenghaole
b9415abcb7 updated 负向零宽后发断言 支持 2023-12-22 16:29:00 +08:00
路人甲
bb465021c4
Merge pull request #51 from whinc/master
fix: 模块导出导入问题 #50
2023-12-12 11:34:04 +08:00
whincwu
3849adc916 fix: 模块导出导入问题 #50 2023-12-09 19:09:14 +08:00
路人甲
244d7d4ba3
Merge pull request #49 from whinc/fix/webpack-build-failed
fix: 修复webpack构建失败
2023-12-04 16:35:18 +08:00
whincwu
fb4035a9f6 fix: 修复webpack构建失败 2023-12-04 00:10:07 +08:00
zhenghaole
d78d7212ab updated 路径补充完整 2023-12-01 17:36:50 +08:00
zhenghaole
b82979f734 updated 界面调整 2023-11-23 17:49:01 +08:00
路人甲
9bc5e3010a
Update readme.md 2023-10-27 22:11:26 +08:00
路人甲
b6c0666fef
Update test.yml 2023-10-27 21:52:24 +08:00
路人甲
c8085cfc35
Update test.yml 2023-10-27 21:49:31 +08:00
路人甲
c1b0196bb2
Create test.yml 2023-10-27 21:47:22 +08:00
路人甲
3c0146618a
Update readme.md 2023-10-27 20:46:36 +08:00
路人甲
57af1ba3c0
Update readme.md 2023-10-27 20:44:32 +08:00
zhenghaole
3796594ae3 updated 添加npm信息 2023-10-27 20:17:18 +08:00
zhenghaole
461af91bc5 add 添加工作流文件 2023-10-27 19:53:52 +08:00
zhenghaole
23bf7bd63d updated 多余图标删除 2023-10-27 19:51:32 +08:00
zhenghaole
fb3a186959 updated 工作流调整 2023-10-27 19:03:17 +08:00
zhenghaole
add8c13161 updated 版本号修改 2023-10-27 15:59:16 +08:00
zhenghaole
9af1651373 updated 更新包 2023-10-27 15:42:55 +08:00
zhenghaole
c83716cdfa updated 添加esModule支持 2023-10-27 13:59:19 +08:00
zhenghaole
e8208fd778 Merge branch 'master' of https://github.com/mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2023-10-18 15:05:39 +08:00
zhenghaole
0c95ae937c updated 部分称呼才用通用 2023-10-18 14:57:53 +08:00
PASSER-BY
bbb7a97b7e updated 代码优化 2023-10-16 22:52:33 +08:00
zhenghaole
3e421ed1ab Merge branch 'master' of https://github.com/mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2023-10-16 14:04:59 +08:00
zhenghaole
179bc147a7 updated 别称添加 2023-10-16 13:58:23 +08:00
PASSER-BY
a56fd2d6a3 updated 数据调整 2023-10-11 20:31:23 +08:00
PASSER-BY
75631c43d5 Merge branch 'master' of https://github.com/mumuy/relationship 2023-10-11 19:23:30 +08:00
PASSER-BY
617a62d07a updated 2023-10-11 19:20:49 +08:00
zhenghaole
e72964395b updated 添加“嫡侄”称谓 2023-10-11 15:20:17 +08:00
zhenghaole
ae3a3085e0 delete 删除广告 2023-10-10 11:44:38 +08:00
zhenghaole
76947f433f updated 添加广告测试 2023-09-22 15:15:04 +08:00
PASSER-BY
dfd00d4948 Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2023-08-17 11:20:40 +08:00
PASSER-BY
e6d3f09d4d updated 数据微调 2023-08-17 11:19:34 +08:00
PASSER-BY
ca24176a78 updated 统计调整 2023-05-12 01:45:45 +08:00
PASSER-BY
870bb501b8 updated 称呼的细节调整 2023-05-07 09:33:57 +08:00
PASSER-BY
5b506e6484 updated 图片调整 2023-04-27 20:11:12 +08:00
PASSER-BY
917cf68bfd Update index.css 2023-04-26 07:50:10 +08:00
PASSER-BY
25ffb03099 updated 添加扫码 2023-04-26 00:13:51 +08:00
PASSER-BY
a2d206f4e5 updated 别称完善 2023-03-30 15:25:48 +08:00
PASSER-BY
e1dae092cc updated 别称添加 2023-03-27 17:46:49 +08:00
PASSER-BY
7715251d3c updated 页面调整 2023-03-22 09:33:59 +08:00
PASSER-BY
79afde4367 updated 修复算法调整引起的部分关系无法检索bug 2023-03-22 09:31:21 +08:00
PASSER-BY
341d1bbdeb updated 别称分支提取 2023-03-17 09:08:34 +08:00
PASSER-BY
49d3af23f1 updated 整理兄弟姐妹称呼 2023-03-17 08:38:03 +08:00
PASSER-BY
be8eec8973 updated 模块引用命名统一化 2023-03-16 22:44:07 +08:00
PASSER-BY
6306a953d5 Merge branch 'master' of https://github.com/mumuy/relationship 2023-03-14 23:51:35 +08:00
PASSER-BY
47e761e2b9 updated 添加单向映射逻辑 2023-03-14 23:41:51 +08:00
PASSER-BY
e260204986 updated 数据bug修复 2023-03-13 16:55:05 +08:00
PASSER-BY
6f17f7800d updated 数据细节调整 2023-03-13 16:45:14 +08:00
PASSER-BY
fd98fec6f3 updated 数据完善 2023-03-13 16:42:39 +08:00
PASSER-BY
85073a4c25 updated 添加别称 2023-03-11 00:19:35 +08:00
PASSER-BY
c9fa49e2cd updated 压缩工具由webpack换成rollup 2023-03-07 01:00:38 +08:00
PASSER-BY
c97ecf5f40 updated 修复vue版样式错位 2023-03-02 22:32:02 +08:00
PASSER-BY
fb45c390a3 updated 合称合并写法 2023-02-28 22:37:10 +08:00
PASSER-BY
bd71b41d16 updated 区分伯媳和叔嫂关系的差异 2023-02-25 10:52:08 +08:00
PASSER-BY
074c314604 updated 一处合称bug修复及添加襟姐弟、襟兄妹关系 2023-02-25 10:34:54 +08:00
PASSER-BY
fbbd224d4f updated 区分伯侄和叔侄关系 2023-02-24 23:42:23 +08:00
PASSER-BY
84ad926d9a updated 添加别称及内兄、内弟计算异常修复
修复无法计算内兄内弟等称呼问题
2023-02-24 23:29:49 +08:00
PASSER-BY
0fa76e32be updated 别称完善 2023-02-22 23:47:44 +08:00
PASSER-BY
925a01ff81 updated 搜索内侄时,数据重复问题 2023-02-22 23:07:09 +08:00
PASSER-BY
903bc6a58a updated 样式调整 2023-02-10 09:16:25 +08:00
PASSER-BY
0f04bc0cd9 updated 样式调整 2023-02-10 09:03:48 +08:00
PASSER-BY
98c88ddc70 Merge branch 'master' of github.com:mumuy/relationship 2023-02-10 08:55:36 +08:00
PASSER-BY
10a7658e0c updated 移动端样式调整 2023-02-10 08:55:05 +08:00
PASSER-BY
2801e7f536 updated 别称完善 2023-02-08 00:25:55 +08:00
PASSER-BY
0203786249 updated 别称完善 2023-02-08 00:15:49 +08:00
PASSER-BY
de21673e9c updated 序数一处bug修复及姨嬷等称呼添加 2023-02-07 23:53:24 +08:00
PASSER-BY
1424c6ac9f updated 项目推荐添加 2023-02-06 23:34:24 +08:00
PASSER-BY
c269217a3e Create vercel.json 2023-02-02 01:04:19 +08:00
PASSER-BY
d532b63d75 updated 元侄孙等数据补充 2023-02-02 00:47:19 +08:00
PASSER-BY
1309331a3c updated 链接调整 2023-02-01 22:45:06 +08:00
PASSER-BY
38b3fc43cc updated 别称添加 2023-01-31 00:22:50 +08:00
PASSER-BY
24c2601633 updated 序数分析优化 2023-01-30 23:29:12 +08:00
PASSER-BY
99ca69948b updated 小类称呼统一判断 2023-01-30 22:25:16 +08:00
PASSER-BY
707f927d95 updated 分支覆盖bug修复 2023-01-29 23:50:39 +08:00
PASSER-BY
2dee5ff69f updated 兄弟姐妹默认扩展 2023-01-29 22:45:27 +08:00
PASSER-BY
5add4ae44e updated 夫族妻族匹配名称变小bug修复 2023-01-15 23:36:49 +08:00
PASSER-BY
8ef4c3eb88 updated 变量声明修改 2023-01-13 23:04:03 +08:00
PASSER-BY
15bcd4ebca updated 不扩大解释夫妻旁支亲戚年龄 2023-01-13 20:06:26 +08:00
PASSER-BY
4048131aca updated 不扩大解释夫妻长辈的年龄 2023-01-13 19:50:07 +08:00
PASSER-BY
4a5e77c038 updated 冗余称呼去除 2023-01-13 00:28:17 +08:00
PASSER-BY
e75837e000 updated 数据补充及一次错误修复 2023-01-12 23:29:14 +08:00
PASSER-BY
ef92285a7c Update package.json 2023-01-12 00:58:49 +08:00
PASSER-BY
68b60a12c0 Update bg.svg 2023-01-10 23:03:10 +08:00
PASSER-BY
a50674717b Update index.css 2023-01-10 08:06:24 +08:00
PASSER-BY
6585c6ff45 Update index.css 2023-01-10 01:30:18 +08:00
PASSER-BY
53971186e4 updated Demo样式细节优化 2023-01-10 00:18:18 +08:00
PASSER-BY
58cc8f595e updated Demo文案调整 2023-01-08 12:30:11 +08:00
PASSER-BY
97021f0e80 updated 部分亲戚称谓补充及词义扩展
扩展了公婆、父母等称谓
2023-01-08 11:40:29 +08:00
PASSER-BY
ea679adcb6 updated 合称bug修复
bug修复及单元测试
2023-01-04 22:22:47 +08:00
PASSER-BY
318e79bbae Merge branch 'master' of https://github.com/mumuy/relationship 2023-01-03 01:00:23 +08:00
PASSER-BY
0fa8f5d427 updated 别称添加 2023-01-03 00:54:35 +08:00
PASSER-BY
0a1e3db510 updated bug修复 2022-12-30 16:49:28 +08:00
PASSER-BY
db93f2c1d8 updated 页面优化 2022-12-30 16:35:14 +08:00
PASSER-BY
a3510dc3b5 updated 添加数据 2022-12-29 21:53:11 +08:00
PASSER-BY
d568f4514b Merge branch 'master' of https://github.com/mumuy/relationship 2022-12-28 22:10:23 +08:00
PASSER-BY
5cbd9e9dca updated 姑表姐妹夫bug修复 2022-12-28 22:08:47 +08:00
PASSER-BY
165c908adb
Merge pull request #35 from mumuy/dependabot/npm_and_yarn/decode-uri-component-0.2.2
Bump decode-uri-component from 0.2.0 to 0.2.2
2022-12-26 20:18:56 +08:00
PASSER-BY
da7bd9058f updated 缓存独立管理 2022-12-09 20:58:44 +08:00
PASSER-BY
a90e5abb2f updated 删除搜索 2022-12-09 20:26:14 +08:00
PASSER-BY
fff5ea0571 Update search.js 2022-12-09 00:41:50 +08:00
PASSER-BY
0397c0373b updated 重压缩 2022-12-09 00:38:13 +08:00
dependabot[bot]
a6e5574a59
Bump decode-uri-component from 0.2.0 to 0.2.2
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-08 16:33:13 +00:00
PASSER-BY
8e0475864a updated 重表关系添加,检索优化
增加快速检索功能
2022-12-09 00:32:43 +08:00
PASSER-BY
470ee24c45 updated id去重后取名称 2022-12-07 21:48:53 +08:00
PASSER-BY
f61adeeb28 fixed bug修复 2022-12-06 22:53:59 +08:00
PASSER-BY
87b9953768 updated 测试 2022-12-06 22:26:20 +08:00
PASSER-BY
5fc7d649a9 updated 变量复用 2022-11-27 00:18:26 +08:00
PASSER-BY
7a0911d27d updated 将方法进行模块化管理 2022-11-27 00:10:12 +08:00
PASSER-BY
adcbd8530b updated 计算规则模块化 2022-11-25 00:43:36 +08:00
PASSER-BY
6fc0260e27 updated 模块整理 2022-11-24 22:41:05 +08:00
PASSER-BY
25fd5d18ac Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2022-11-17 17:42:04 +08:00
PASSER-BY
9c7e78c02f updated 别称添加 2022-11-17 17:39:28 +08:00
PASSER-BY
f156b62ee2 updated bug修复 2022-11-17 00:31:33 +08:00
PASSER-BY
fbcd0ae0e4 updated 姑表外甥无法查询关系bug修复 2022-11-17 00:15:32 +08:00
PASSER-BY
c5aaefcba3 updated 惯用口语调整 2022-11-17 00:03:45 +08:00
PASSER-BY
b116b643ba updated 口语规范化 2022-11-16 23:57:11 +08:00
PASSER-BY
4436ad24ef updated 部分惯用口语标准化及别称添加 2022-11-16 23:45:40 +08:00
PASSER-BY
f4c1fc2ec1 updated 表达式错误修复 2022-11-16 18:17:04 +08:00
PASSER-BY
bfebad6ef4 updated 判定关系调整 2022-11-16 17:58:32 +08:00
PASSER-BY
83d65d8445 updated 自然语言表达修改 2022-11-16 17:40:00 +08:00
PASSER-BY
43196a265c updated 自然语言表达调整 2022-11-16 17:29:42 +08:00
PASSER-BY
f30975cb63 updated 细节完善 2022-11-16 17:19:02 +08:00
PASSER-BY
dd41acaa36 updated 注解时态调整 2022-11-16 14:23:35 +08:00
PASSER-BY
dd8d19a1cb updated 关系对优化 2022-11-16 14:20:52 +08:00
PASSER-BY
303128974a Merge branch 'master' of github.com:mumuy/relationship 2022-11-16 14:20:13 +08:00
PASSER-BY
b5cb223526 updated 关系对调整 2022-11-16 14:20:03 +08:00
PASSER-BY
6332afea3a updated 表达式语法添加 2022-11-13 23:00:51 +08:00
PASSER-BY
9c5a79c94b updated 细节调整 2022-11-12 00:48:22 +08:00
PASSER-BY
1fd73283f7 updated 代码优化 2022-11-11 23:38:23 +08:00
PASSER-BY
07c6d08e0d
Update readme.md 2022-11-11 01:06:11 +08:00
PASSER-BY
731323a860
Update readme.md 2022-11-11 01:05:25 +08:00
PASSER-BY
7c4ada9667 updated 添加表达式语法特性 2022-11-11 00:53:09 +08:00
PASSER-BY
6c1e03ff66 updated 2022-10-17 22:49:32 +08:00
PASSER-BY
48459758ef updated Demo兼容 2022-10-13 01:39:19 +08:00
PASSER-BY
5ee846c96a updated 参数失效修复 2022-10-13 01:36:39 +08:00
PASSER-BY
08feb7355f updated 方言定制失败问题修复 2022-10-13 01:33:29 +08:00
PASSER-BY
ab84940618 updated 本地化文件格式调整 2022-10-12 01:38:01 +08:00
PASSER-BY
67064d2aa4 Merge branch 'master' of https://github.com/mumuy/relationship 2022-10-12 01:30:12 +08:00
PASSER-BY
04f6e83799 updated 添加模式文件 2022-10-12 01:23:39 +08:00
mumuy
4565f39e49 Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2022-10-08 08:43:10 +08:00
mumuy
e2b9a4e139 updated 排序和无排序优先问题调整及部分别称添加 2022-10-08 08:42:27 +08:00
PASSER-BY
dab145b187 updated 两乔等称呼调整 2022-09-23 00:46:06 +08:00
PASSER-BY
8cbfb8d993 updated 2022-09-08 22:27:21 +08:00
PASSER-BY
89dca5084c updated 修复最优解问题 2022-09-08 22:26:16 +08:00
mumuy
96b1f3d07b updated 性别判断细节修复 2022-09-08 09:03:19 +08:00
PASSER-BY
e5f0f47afc updated 部分称呼去冗 2022-09-08 08:04:25 +08:00
PASSER-BY
2ce8947968 updated bug修复 2022-09-08 02:05:30 +08:00
PASSER-BY
3212d3007e updated 优化部分代码 2022-09-07 23:22:15 +08:00
PASSER-BY
97aa5f4384 updated 条件判断更加严谨 2022-09-07 21:02:06 +08:00
PASSER-BY
03062069ce updated 注释调整 2022-09-06 22:17:43 +08:00
PASSER-BY
59fd3eb5c4 updated bug修复 2022-09-06 22:00:35 +08:00
PASSER-BY
cd19e1888a updated 数据调整 2022-09-05 23:58:47 +08:00
PASSER-BY
3e4ae436fe updated 条件判断细节完善 2022-09-05 23:34:50 +08:00
PASSER-BY
9afde9692d Merge branch 'master' of https://github.com/mumuy/relationship 2022-09-03 02:42:17 +08:00
PASSER-BY
191f28ea67 updated 支持排序计算 2022-09-03 02:42:13 +08:00
PASSER-BY
2f118960df updated 重写底层逻辑,支持排序参与计算 2022-09-03 01:48:27 +08:00
mumuy
1c3c8bec91 updated 细节调整 2022-08-31 10:29:10 +08:00
PASSER-BY
73dc03cec6 updated 头部优化 2022-08-25 01:18:37 +08:00
PASSER-BY
124e8ed8ff updated 统计代码添加 2022-08-25 01:12:58 +08:00
PASSER-BY
5e26ef2930 updated 手机端兼容 2022-08-25 01:06:53 +08:00
PASSER-BY
017dd611f1 updated 手机横屏兼容 2022-08-25 01:02:54 +08:00
PASSER-BY
22ade37ea7 updated 移动端横屏优化 2022-08-25 00:49:54 +08:00
PASSER-BY
964e2ed0fd updated 优化 2022-08-25 00:36:22 +08:00
PASSER-BY
ee2c86f5e3 updated 响应式调整 2022-08-25 00:31:37 +08:00
PASSER-BY
b910333549 updated 恢复使用 2022-08-24 23:00:36 +08:00
PASSER-BY
ffb72aed85 updated 代码恢复,关闭路由懒加载 2022-08-24 22:56:12 +08:00
PASSER-BY
eb8501eaa4 updated 添加最短关系功能 2022-08-24 21:59:54 +08:00
PASSER-BY
c13b00683f
Update readme.md 2022-08-24 18:49:02 +08:00
PASSER-BY
118f8b1e53
Update readme.md 2022-08-24 18:48:25 +08:00
mumuy
15417fd1af updated 添加最短关系功能 2022-08-24 18:45:55 +08:00
mumuy
66be15f326 updated 兼容问题修复 2022-08-24 17:08:48 +08:00
mumuy
640f86dd86 updated rgba问题修复 2022-08-24 16:58:22 +08:00
mumuy
e965727497 updated 样式异常修复 2022-08-24 08:51:41 +08:00
PASSER-BY
956e53192d updated 样式调试 2022-08-24 07:46:07 +08:00
PASSER-BY
e2515eee83 updated 样式调整 2022-08-24 07:23:17 +08:00
PASSER-BY
d9d7021c58 updated 样式调整 2022-08-24 01:10:28 +08:00
PASSER-BY
a7b55e849a updated 文案调整 2022-08-24 00:57:14 +08:00
PASSER-BY
90c077165b updated 图片优化 2022-08-24 00:51:34 +08:00
PASSER-BY
b37a2cf78e updated 模式调整 2022-08-24 00:36:46 +08:00
PASSER-BY
ba750ef7f1 updated 相对目录 2022-08-24 00:26:55 +08:00
PASSER-BY
d47790ea06 updated vue版本更新及添加合称功能 2022-08-24 00:16:41 +08:00
PASSER-BY
72d0eef45d updated bue修复及功能添加
修复两者称谓性别判断s和xs逻辑问题,及关系链输出性别参数带出等问题;
添加合称功能
2022-08-23 02:26:05 +08:00
PASSER-BY
0a707df25b updated 合称添加 2022-08-21 23:16:54 +08:00
PASSER-BY
c70253214c updated 别称添加 2022-08-21 22:00:56 +08:00
PASSER-BY
968f5e690a updated 删除多余 2022-08-21 18:13:47 +08:00
PASSER-BY
0b326d63e2 updated 重新整理旁支关系 2022-08-21 17:36:18 +08:00
PASSER-BY
fe86cc0c40 updated 称呼种的一些bug修复 2022-08-21 01:24:47 +08:00
PASSER-BY
536e3c6460 updated 族和从关系添加 2022-08-20 23:31:49 +08:00
mumuy
e4e732e161 updated 别称添加 2022-08-18 12:19:53 +08:00
PASSER-BY
0e728727a8 updated 别称添加及问题修复 2022-08-17 22:31:57 +08:00
PASSER-BY
ffd968f0fe updated 添加重表数据等 2022-08-17 00:22:47 +08:00
PASSER-BY
9dca9310ad updated 兼容古文 2022-08-16 21:59:14 +08:00
PASSER-BY
19529c64d0 updated 添加上古别称 2022-08-16 21:40:29 +08:00
PASSER-BY
4c2919386a updated 别称添加 2022-08-14 23:55:55 +08:00
PASSER-BY
ee5b5fbbbf updated 别称添加 2022-08-14 23:37:06 +08:00
PASSER-BY
19a41d30a3 updated 二妈、二娘等称呼完善 2022-08-04 23:41:11 +08:00
mumuy
0260001774 updated 古代别称添加 2022-08-04 08:53:03 +08:00
mumuy
d913f12561 updated 关系缺漏及称呼补充 2022-08-04 08:45:47 +08:00
mumuy
259089bb79 updated 重新压缩 2022-07-25 09:12:12 +08:00
mumuy
f42f4176ba Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2022-07-25 09:11:05 +08:00
mumuy
aadfb31602 updated 页面跳转 2022-07-25 09:10:34 +08:00
PASSER-BY
3d78b65af4
Merge pull request #33 from mumuy/dependabot/npm_and_yarn/terser-5.14.2
Bump terser from 5.14.1 to 5.14.2
2022-07-22 09:06:04 +08:00
dependabot[bot]
6f6275725e
Bump terser from 5.14.1 to 5.14.2
Bumps [terser](https://github.com/terser/terser) from 5.14.1 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-21 07:13:07 +00:00
PASSER-BY
55cdc8208c updated 内外表问题修复 2022-07-18 23:11:18 +08:00
mumuy
6f8414bbe4 Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2022-07-18 15:33:54 +08:00
mumuy
0161fd7a72 updated 误删问题修复 2022-07-18 15:12:55 +08:00
PASSER-BY
45b548bfbf updated 部分数据错误修复 2022-07-15 21:31:25 +08:00
PASSER-BY
adfcfd5ee4 updated 数据库中x用几代替,部分称呼更新 2022-07-15 20:23:08 +08:00
PASSER-BY
d2ce4e576e Merge branch 'master' of https://github.com/mumuy/relationship 2022-07-15 19:42:35 +08:00
mumuy
bc610fd790 updated 从祖关系拆分 2022-07-14 17:43:46 +08:00
mumuy
bc4cdb7395 updated 删除冗余 2022-07-13 09:20:31 +08:00
mumuy
afe84a6943 updated bug修复 2022-07-13 09:08:45 +08:00
PASSER-BY
8aa4f9f6c6 updated 配置调整 2022-07-10 15:46:35 +08:00
mumuy
0bee076ec8 updated 配置及注解调整 2022-07-08 08:34:37 +08:00
mumuy
8e72cbdb88 updated gulp版本 2022-07-08 08:07:10 +08:00
PASSER-BY
b74f04ad0b updated package调整 2022-07-08 02:04:24 +08:00
PASSER-BY
51f41dabca Delete relationship.js 2022-07-08 01:48:30 +08:00
PASSER-BY
873f91f5be updated 2022-07-08 01:47:13 +08:00
PASSER-BY
04136643b9 updated 添加UMD打包方式 2022-07-08 01:45:31 +08:00
mumuy
9ef5eaff32 updated 缩进及键值重复去除 2022-07-07 15:56:05 +08:00
mumuy
f77273694e updated 页面调整 2022-07-06 15:52:51 +08:00
PASSER-BY
47088e933d updated 别称调整 2022-07-06 01:00:48 +08:00
mumuy
be3a683cc1 Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2022-07-05 09:07:07 +08:00
mumuy
08ee8df5b7 updated 称为调整 2022-07-05 09:06:19 +08:00
PASSER-BY
498d9c8fef Merge branch 'master' of https://github.com/mumuy/relationship 2022-06-29 19:12:06 +08:00
mumuy
207ba6f683 updated 页面调整 2022-06-29 10:10:29 +08:00
mumuy
6dd4142449 Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2022-06-29 09:09:09 +08:00
mumuy
997ff8dab2 updated 别处调整 2022-06-29 09:07:57 +08:00
PASSER-BY
78d9381781 updated 别称添加 2022-06-29 07:58:04 +08:00
PASSER-BY
bac3f1673b updated 部分数据补充 2022-06-20 23:22:15 +08:00
PASSER-BY
7aaa9d1313 updated 女婿别称补充 2022-06-20 07:46:07 +08:00
PASSER-BY
bb557717e4 updated 离孙、归孙理解错误修复 2022-06-17 22:02:01 +08:00
mumuy
f86ccd5eae updated 数据添加 2022-06-17 19:12:56 +08:00
mumuy
c2521ae13b updated 姨子别称添加 2022-06-17 08:57:51 +08:00
mumuy
c7045a073d Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
#	script/relationship.js
2022-06-17 08:51:28 +08:00
mumuy
367aa75c7e updated 姨毑母毑公等别称添加 2022-06-17 08:48:24 +08:00
PASSER-BY
ea3a47e5a1 updated 部分别称补充 2022-06-16 21:21:29 +08:00
mumuy
d1811607b4 updated 页面调整 2022-06-15 14:25:09 +08:00
mumuy
5fa3c71d9b updated 图片测试 2022-06-15 14:08:30 +08:00
mumuy
c878827c62 updated 别称添加 2022-06-14 16:55:07 +08:00
mumuy
44bbb23251 updated 数据添加 2022-06-14 13:41:47 +08:00
mumuy
b18a93a548 updated 部分数据完善 2022-06-14 09:14:12 +08:00
PASSER-BY
ff0d4dfe56 updated 部分别称修改 2022-06-14 02:01:02 +08:00
PASSER-BY
68bbb14458 updated 数据完善 2022-06-13 01:32:27 +08:00
PASSER-BY
a4c781e84c updated 别称完善 2022-06-11 00:27:13 +08:00
mumuy
b9f31ef389 udated 2022-06-10 09:18:08 +08:00
PASSER-BY
fd426427e7 updated 亲家姻亲七族数据完善 2022-06-10 01:55:00 +08:00
PASSER-BY
09f94c0a15 upated 小细节调整 2022-06-09 07:51:59 +08:00
PASSER-BY
66e9088448 updated 姻亲关系补充 2022-06-09 01:12:04 +08:00
PASSER-BY
d87827a338 updated 添加姑孙、舅孙、叔孙等称呼 2022-06-09 00:01:56 +08:00
PASSER-BY
ece41703d0 updated 部分数据修复 2022-06-03 00:30:33 +08:00
mumuy
6fc277ff16 updated 别称添加 2022-06-02 17:08:31 +08:00
mumuy
6374d77b90 updated 曾祖姑父等调整 2022-06-02 16:50:29 +08:00
mumuy
0e62eccc64 updated 别称添加 2022-06-02 13:40:14 +08:00
PASSER-BY
fbee12155a
Create FUNDING.yml 2022-05-13 21:43:58 +08:00
PASSER-BY
77ff1d1658 updated 祖辈合称bug修复 2022-05-11 22:23:17 +08:00
PASSER-BY
f3d00b642a updated 扩展至祖宗二十四代数据 2022-05-11 20:57:02 +08:00
PASSER-BY
69649cd36c updated 部分词义扩展 2022-05-11 00:33:09 +08:00
PASSER-BY
193d04a5c1 updated 去除冗余 2022-05-11 00:08:08 +08:00
PASSER-BY
6bb5e3c3fc Merge branch 'master' of https://github.com/mumuy/relationship 2022-05-10 23:43:51 +08:00
PASSER-BY
cc07aa5b59 updated 开源说明信息添加及部分别称补充 2022-05-10 23:43:47 +08:00
PASSER-BY
07cf7f4894
Update readme.md 2022-05-10 23:14:24 +08:00
PASSER-BY
a029922c00
Update readme.md 2022-05-10 23:07:03 +08:00
mumuy
58b0071eea updated 添加对“姑舅连桥”“叔伯连桥”的支持 2022-05-10 18:48:35 +08:00
mumuy
06706188dd updated 添加对表大娘的支持 2022-05-10 18:30:54 +08:00
mumuy
367466586f updated 舅子别称添加 2022-05-10 18:24:50 +08:00
PASSER-BY
7db27170f7 Merge branch 'master' of https://github.com/mumuy/relationship 2022-04-20 01:09:46 +08:00
PASSER-BY
274ecf4a7e updated 部分别称修改 2022-04-20 01:09:13 +08:00
PASSER-BY
d36c42b752
Merge pull request #29 from SuperRay3/master
doc: fix typo
2022-04-19 21:31:01 +08:00
PASSER-BY
cb6b7fe78b updated 从子从父调整 2022-04-18 20:59:32 +08:00
PASSER-BY
8d31baedfe updated 部分别称添加 2022-04-13 20:48:56 +08:00
leijialiang
780c838d05 doc: fix typo 2022-04-13 11:48:46 +08:00
PASSER-BY
5ae1ff61e7 updated 别称添加 2022-04-13 07:21:45 +08:00
PASSER-BY
d684761fb6 Update readme.md 2022-04-12 21:55:36 +08:00
PASSER-BY
f167450486 updated 分歧解释文案调整 2022-04-12 21:54:23 +08:00
PASSER-BY
f9d97e9e06 Update readme.md 2022-04-12 21:47:06 +08:00
PASSER-BY
b262fa2b5f Update readme.md 2022-04-12 21:44:10 +08:00
PASSER-BY
7f509847df updated 差异解释添加 2022-04-12 21:43:02 +08:00
PASSER-BY
ae76148e2c updated 别称添加 2022-04-09 23:23:02 +08:00
PASSER-BY
503770a601 updated 数据缺失修复 2022-04-09 11:56:58 +08:00
PASSER-BY
9fe178f7e5 updated 数据缺失修复 2022-04-09 11:54:47 +08:00
PASSER-BY
869d2871f5 updated 部分数据修改 2022-04-07 21:41:03 +08:00
PASSER-BY
6819961be5 Update readme.md 2022-04-03 23:16:19 +08:00
PASSER-BY
0f21f27423 Update readme.md 2022-04-03 10:30:12 +08:00
PASSER-BY
fbad9f51d8
Merge pull request #27 from mumuy/dependabot/npm_and_yarn/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6
2022-04-03 09:49:54 +08:00
dependabot[bot]
b4b094b26a
Bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-02 13:01:35 +00:00
PASSER-BY
b913e3c4e0 updated 逻辑调整 2022-04-01 07:38:25 +08:00
PASSER-BY
b930329901 updated 别称修改 2022-03-31 23:36:14 +08:00
mumuy
aae1f933ab updated 数据错误修复 2022-03-31 16:04:43 +08:00
mumuy
0d98fd6bdf updated 祖先“太爷”“太奶”别称添加 2022-03-31 08:39:11 +08:00
PASSER-BY
0e2f183690 updated 别称添加 2022-03-30 23:54:26 +08:00
PASSER-BY
6e57805bc9 updated '族'的定义错误修复 2022-03-29 23:30:50 +08:00
PASSER-BY
00d649b9c9 updated 部分别称调整及完善 2022-03-29 22:34:31 +08:00
PASSER-BY
2cdbb18ca4 updated bug修复 2022-03-29 20:48:03 +08:00
PASSER-BY
bfafe7c272 updated 标签错误修复 2022-03-29 20:26:33 +08:00
PASSER-BY
733b9609f1 updated js调整 2022-03-29 20:05:34 +08:00
PASSER-BY
76ecc7e668 updated 页面加速 2022-03-29 20:00:37 +08:00
PASSER-BY
888532141a updated 性能优化 2022-03-29 19:40:13 +08:00
PASSER-BY
e4d01c96ed updated 别称删除 2022-03-29 01:27:30 +08:00
PASSER-BY
df8aae7a19 Update index.html 2022-03-29 01:01:28 +08:00
PASSER-BY
fa81baf0ad updated 代码重压缩 2022-03-29 00:56:04 +08:00
PASSER-BY
f5bd7ad3f7 updated 方法简写 2022-03-29 00:19:05 +08:00
PASSER-BY
4a8d180c1f updated bug修复及写法优化 2022-03-28 23:48:44 +08:00
PASSER-BY
11164cb2e5 updated 添加高祖辈称谓 2022-03-27 22:41:59 +08:00
PASSER-BY
f50177865c updated 排序算法调整 2022-03-27 22:02:51 +08:00
PASSER-BY
647ae12d52 updated "大外公"显示异常修复 2022-03-27 21:30:02 +08:00
PASSER-BY
aa4878b35c updated 修复排序算法中“三爷爷”排队为"爷爷"的问题 2022-03-27 21:02:14 +08:00
PASSER-BY
0d2702e6ab updated 重写称呼中排序判断规则及修复“两姨爸”无法显示bug 2022-03-27 20:44:17 +08:00
PASSER-BY
2712db1301 updated 兼容“曾侄”“侄曾”“曾甥”“甥曾”等用法,添加亲家部分称谓 2022-03-27 19:34:18 +08:00
PASSER-BY
d428c100f4 updated 别称添加 2022-03-27 18:11:28 +08:00
PASSER-BY
08bd2c8d0e updated 表爷爷表奶奶表姥姥表姥爷称呼支持 2022-03-27 13:28:10 +08:00
PASSER-BY
0d078af925 updated 部分称呼口语化 2022-03-27 04:10:30 +08:00
PASSER-BY
6195829f38 updated 从男从女数据添加 2022-03-27 04:01:28 +08:00
PASSER-BY
a0f9abe682 update 支持"表表""从表"查询 2022-03-27 02:27:13 +08:00
PASSER-BY
beb33f8ae2 updated 兼容从祖称呼 2022-03-27 00:59:13 +08:00
PASSER-BY
1f12b343f5 updated 多余代码删除 2022-03-27 00:18:41 +08:00
PASSER-BY
35de05044c updated 数据错误修复 2022-03-26 23:55:34 +08:00
PASSER-BY
af7396e30d updated 部分数据复用 2022-03-26 23:22:30 +08:00
PASSER-BY
c3a099db01 updated 自称去除 2022-03-26 22:05:34 +08:00
PASSER-BY
624c1d8d2a updated 亲家关系口语化 2022-03-26 21:42:06 +08:00
PASSER-BY
96585f874e updated 移除多余数据 2022-03-26 21:14:25 +08:00
PASSER-BY
07d7d363ff updated 别称调整 2022-03-26 21:02:37 +08:00
PASSER-BY
b58cf29b89 updated 别称调整 2022-03-26 20:45:01 +08:00
PASSER-BY
74d58eb91a updated 词义扩展bug修复 2022-03-26 20:16:28 +08:00
PASSER-BY
7db42eed44 updated 文案错误修改 2022-03-26 19:41:39 +08:00
PASSER-BY
460af721fe 性别切换细节优化 2022-03-26 19:20:24 +08:00
PASSER-BY
fa1552d1d4 updated 部分别称添加及文案调整 2022-03-26 18:53:29 +08:00
PASSER-BY
9027374a12 updated 关系调整 2022-03-26 13:40:49 +08:00
PASSER-BY
b11876fd92 updated 解析过程中遇到[|xb]报错问题修复 2022-03-26 13:29:06 +08:00
PASSER-BY
af84ec0826 updated 称呼输出结果尽量不显示合称 2022-03-26 13:08:21 +08:00
PASSER-BY
bc6e4619bb Update index.css 2022-03-26 12:45:33 +08:00
PASSER-BY
e8b38892f2 updated 结果不输出“兄弟”、“姐妹”等合称 2022-03-26 12:43:40 +08:00
mumuy
65705dde04 updated 识别问题修复 2022-03-23 12:02:10 +08:00
mumuy
464c1d5840 updated 自动识别bug修复 2022-03-23 11:51:45 +08:00
mumuy
4b94b5460d Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
#	script/relationship.js
2022-03-22 19:06:30 +08:00
mumuy
67876f14db updated 添加数据 2022-03-22 19:03:09 +08:00
PASSER-BY
1186ab5d57 Merge branch 'master' of https://github.com/mumuy/relationship 2022-03-21 23:41:00 +08:00
PASSER-BY
1f60e18d92
Update index.css 2022-03-21 11:22:00 +08:00
PASSER-BY
688560cd3c updated 称呼跳转 2022-03-20 23:36:31 +08:00
PASSER-BY
5724f58f11 updated 外祖岳父母数据错误修复 2022-03-20 13:53:40 +08:00
PASSER-BY
92d90bb048 updated 部分别称添加 2022-03-19 23:46:59 +08:00
PASSER-BY
985b80a6f5 updated 去缓存 2022-03-19 10:24:59 +08:00
PASSER-BY
40acff0b93 updated 添加部分方言别称及页面模块添加 2022-03-19 10:22:41 +08:00
PASSER-BY
70102a9107 Update zh-HK.html 2022-03-19 01:19:07 +08:00
PASSER-BY
5d04fa2bf7 Update zh-HK.html 2022-03-19 01:17:49 +08:00
PASSER-BY
0141e962c1 updated 强制刷新 2022-03-19 01:15:18 +08:00
PASSER-BY
80b9a79ef2 updated 提交新版 2022-03-19 01:12:06 +08:00
PASSER-BY
b91d285a35 updated 修复一处bug及页面改版 2022-03-19 01:09:40 +08:00
mumuy
95e5ed916e Merge branch 'master' of github.com:mumuy/relationship
# Conflicts:
#	dist/relationship.min.js
#	dist/relationship.zh-HK.min.js
2022-03-18 10:04:55 +08:00
mumuy
f0a8432e91 updated 两姨数据恢复 2022-03-18 10:03:42 +08:00
mumuy
f8bbd8571f updated 部分称呼补充 2022-03-18 09:54:11 +08:00
PASSER-BY
90e9ac00b9 update 姑舅儿子别称非主要 2022-03-18 07:37:08 +08:00
PASSER-BY
c72d8c34df updated 方法去除冗余 2022-03-17 23:27:50 +08:00
mumuy
4894d9fe0e updated 添加别称及去冗余 2022-03-17 11:52:26 +08:00
mumuy
237718e834 updated 页面调整 2022-03-17 09:03:46 +08:00
PASSER-BY
2ade95f4c6 updated 链接错误修复 2022-03-17 00:03:57 +08:00
PASSER-BY
809fcfd169 Update zh-HK.html 2022-03-16 23:58:36 +08:00
PASSER-BY
14d9284601 updated 添加繁体支持 2022-03-16 23:54:01 +08:00
mumuy
8c87a88d24 updated bug修复 2022-03-16 10:31:56 +08:00
mumuy
8a215716d6 updated Demo自动识别性别优化 2022-03-16 10:26:29 +08:00
mumuy
70175de89f updated 歧义解决 2022-03-16 09:43:17 +08:00
mumuy
9086979e12 updated 数据完善 2022-03-16 09:20:49 +08:00
mumuy
2c1383cdd4 updated 姻亲bug修复 2022-03-16 08:43:26 +08:00
mumuy
858737774a updated 亲家关系合并 2022-03-16 08:36:57 +08:00
PASSER-BY
18e3e82a88 updated 多余注释删除 2022-03-16 07:44:47 +08:00
PASSER-BY
53d5c10682 updated 一处去重逻辑恢复,修复bug 2022-03-16 07:40:34 +08:00
PASSER-BY
794324bf7e updated 修复词义扩展bug 2022-03-16 02:13:41 +08:00
PASSER-BY
ac3d7d5e1c updated 修复词义扩展出错bug 2022-03-16 02:12:07 +08:00
PASSER-BY
52cf8a9114 updated 重写数据结构并复用
通过复用,记录更多关系
2022-03-16 01:36:28 +08:00
PASSER-BY
724da3b630 updated 添加婆家数据 2022-03-14 18:58:08 +08:00
PASSER-BY
d5d9bbf082 updated 完善岳家婆家数据 2022-03-12 00:20:15 +08:00
mumuy
092f324e93 updated 部分别称添加 2022-03-11 08:56:14 +08:00
PASSER-BY
e2de277f64 updated 部分数据补充 2022-03-10 23:35:04 +08:00
PASSER-BY
9030b7cf95 updated 曾祖高祖数据重新整理,统一 2022-03-10 22:39:43 +08:00
PASSER-BY
01338fa959 updated 合并版本 2022-03-09 20:47:56 +08:00
mumuy
49d1432cc9 updated 数据中的性别错误修复 2022-03-09 08:36:26 +08:00
mumuy
e5b6513c50 updated 数据错误修复 2022-03-09 08:33:48 +08:00
mumuy
712dde6e4d updated 一次数据错误修复及增加父辈合称 2022-03-09 08:26:49 +08:00
PASSER-BY
66ea01cc19 updated 重复数据删除 2022-03-08 23:36:13 +08:00
PASSER-BY
a08eb2da24 updated 妻族数据补充 2022-03-08 23:16:01 +08:00
PASSER-BY
78ae82a0ad updated 部分妻族数据补充 2022-03-08 20:18:01 +08:00
PASSER-BY
37f0cede75 updated 姑舅姐妹等关系完善 2022-03-05 00:31:13 +08:00
mumuy
f1fddf7d9c Merge branch 'master' of github.com:mumuy/relationship 2022-03-03 15:17:06 +08:00
mumuy
cb4644d43e updated bug修复 2022-03-03 15:16:49 +08:00
PASSER-BY
b29706ca77 udpated 部分数据修复 2022-03-02 22:18:46 +08:00
89 changed files with 11426 additions and 7859 deletions

28
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,28 @@
name: Project Build Test
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x, 22.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Build
run: |
npm install
npm run build

View File

@ -1,16 +0,0 @@
language: node_js
node_js:
- "6.2.0"
- "5.6.0"
- "4.4.4"
install:
- npm install
script:
- npm run build
branches:
only:
- gh-pages

6
babel.config.js Normal file
View File

@ -0,0 +1,6 @@
module.exports = {
presets: ['@babel/preset-env'],
plugins: [
'@babel/plugin-transform-runtime'
]
}

View File

@ -0,0 +1 @@
!function(f,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):(f="undefined"!=typeof globalThis?globalThis:f||self).relationshipMode=s()}(this,(function(){"use strict";function f(s){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(f){return typeof f}:function(f){return f&&"function"==typeof Symbol&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f},f(s)}function s(s){var m=function(s,m){if("object"!=f(s)||!s)return s;var o=s[Symbol.toPrimitive];if(void 0!==o){var d=o.call(s,m||"default");if("object"!=f(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===m?String:Number)(s)}(s,"string");return"symbol"==f(m)?m:m+""}function m(f,m,o){return(m=s(m))in f?Object.defineProperty(f,m,{value:o,enumerable:!0,configurable:!0,writable:!0}):f[m]=o,f}var o;return{guangdong:{name:"廣東",data:(o={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":["姨丈"]},m(m(m(m(m(m(m(m(m(m(o,"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",["侄女"]),m(m(m(m(m(m(m(m(m(m(o,"os",["家姐"]),"os,h",["姐夫"]),"ls",["阿妹"]),"ls,h",["妹夫"]),"0,xs,s",["姨甥"]),"1,xs,s",["外甥"]),"0,xs,d",["姨甥女"]),"1,xs,d",["外甥女"]),"s",["仔"]),"s,w",["新婦"]),m(m(m(m(m(m(m(m(m(m(o,"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",["外孫"]),m(m(m(m(m(m(m(o,"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":["大娘"]}}}}));

View File

@ -0,0 +1 @@
function m(s){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(m){return typeof m}:function(m){return m&&"function"==typeof Symbol&&m.constructor===Symbol&&m!==Symbol.prototype?"symbol":typeof m},m(s)}function s(s){var f=function(s,f){if("object"!=m(s)||!s)return s;var d=s[Symbol.toPrimitive];if(void 0!==d){var o=d.call(s,f||"default");if("object"!=m(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===f?String:Number)(s)}(s,"string");return"symbol"==m(f)?f:f+""}function f(m,f,d){return(f=s(f))in m?Object.defineProperty(m,f,{value:d,enumerable:!0,configurable:!0,writable:!0}):m[f]=d,m}var d,o={guangdong:{name:"廣東",data:(d={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":["姨丈"]},f(f(f(f(f(f(f(f(f(f(d,"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",["侄女"]),f(f(f(f(f(f(f(f(f(f(d,"os",["家姐"]),"os,h",["姐夫"]),"ls",["阿妹"]),"ls,h",["妹夫"]),"0,xs,s",["姨甥"]),"1,xs,s",["外甥"]),"0,xs,d",["姨甥女"]),"1,xs,d",["外甥女"]),"s",["仔"]),"s,w",["新婦"]),f(f(f(f(f(f(f(f(f(f(d,"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",["外孫"]),f(f(f(f(f(f(f(d,"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":["大娘"]}}};export{o as default};

13
dist/lang/relationship.zh-HK.min.js vendored Normal file

File diff suppressed because one or more lines are too long

13
dist/lang/relationship.zh-HK.min.mjs vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/relationship-mode.min.js vendored Normal file
View File

@ -0,0 +1 @@
!function(f,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):(f="undefined"!=typeof globalThis?globalThis:f||self).relationshipMode=s()}(this,(function(){"use strict";function f(s){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(f){return typeof f}:function(f){return f&&"function"==typeof Symbol&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f},f(s)}function s(s){var m=function(s,m){if("object"!=f(s)||!s)return s;var o=s[Symbol.toPrimitive];if(void 0!==o){var d=o.call(s,m||"default");if("object"!=f(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===m?String:Number)(s)}(s,"string");return"symbol"==f(m)?m:m+""}function m(f,m,o){return(m=s(m))in f?Object.defineProperty(f,m,{value:o,enumerable:!0,configurable:!0,writable:!0}):f[m]=o,f}var o;return{guangdong:{name:"广东",data:(o={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":["姨丈"]},m(m(m(m(m(m(m(m(m(m(o,"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",["侄女"]),m(m(m(m(m(m(m(m(m(m(o,"os",["家姐"]),"os,h",["姐夫"]),"ls",["阿妹"]),"ls,h",["妹夫"]),"0,xs,s",["姨甥"]),"1,xs,s",["外甥"]),"0,xs,d",["姨甥女"]),"1,xs,d",["外甥女"]),"s",["仔"]),"s,w",["新妇"]),m(m(m(m(m(m(m(m(m(m(o,"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",["外孙"]),m(m(m(m(m(m(m(o,"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":["大娘"]}}}}));

1
dist/relationship-mode.min.mjs vendored Normal file
View File

@ -0,0 +1 @@
function m(s){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(m){return typeof m}:function(m){return m&&"function"==typeof Symbol&&m.constructor===Symbol&&m!==Symbol.prototype?"symbol":typeof m},m(s)}function s(s){var f=function(s,f){if("object"!=m(s)||!s)return s;var d=s[Symbol.toPrimitive];if(void 0!==d){var o=d.call(s,f||"default");if("object"!=m(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===f?String:Number)(s)}(s,"string");return"symbol"==m(f)?f:f+""}function f(m,f,d){return(f=s(f))in m?Object.defineProperty(m,f,{value:d,enumerable:!0,configurable:!0,writable:!0}):m[f]=d,m}var d,o={guangdong:{name:"广东",data:(d={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":["姨丈"]},f(f(f(f(f(f(f(f(f(f(d,"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",["侄女"]),f(f(f(f(f(f(f(f(f(f(d,"os",["家姐"]),"os,h",["姐夫"]),"ls",["阿妹"]),"ls,h",["妹夫"]),"0,xs,s",["姨甥"]),"1,xs,s",["外甥"]),"0,xs,d",["姨甥女"]),"1,xs,d",["外甥女"]),"s",["仔"]),"s,w",["新妇"]),f(f(f(f(f(f(f(f(f(f(d,"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",["外孙"]),f(f(f(f(f(f(f(d,"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":["大娘"]}}};export{o as default};

File diff suppressed because one or more lines are too long

13
dist/relationship.min.mjs vendored Normal file

File diff suppressed because one or more lines are too long

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -1,18 +1,25 @@
const fs = require('fs');
const gulp = require('gulp'); const gulp = require('gulp');
const uglify = require('gulp-uglify');
const rename = require("gulp-rename"); const rename = require("gulp-rename");
const cht = require('gulp-cht');
const replace = require('gulp-replace');
gulp.task('mini', () => ( gulp.task('localization', () => {
gulp.src('script/relationship.js') // gulp.src('./index.html')
.pipe(uglify({ // .pipe(cht())
output:{ // .pipe(rename("zh-HK.html"))
comments: function(node, comment){ // .pipe(gulp.dest("./"));
return /^!/.test(comment.value);
}
}
}))
.pipe(rename("relationship.min.js"))
.pipe(gulp.dest('dist/'))
)); return gulp.src([
'dist/relationship.min.js',
'dist/relationship.min.mjs',
'dist/relationship-mode.min.js',
'dist/relationship-mode.min.mjs',
]).pipe(cht())
.pipe(replace('嶽','岳'))
.pipe(rename(function(path) {
path.basename = path.basename.replace('.min','.zh-HK.min');
}))
.pipe(gulp.dest('dist/lang/'))
});
gulp.task('default', gulp.series(['localization']))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

1097
index.html

File diff suppressed because it is too large Load Diff

8943
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,43 +1,80 @@
{ {
"name": "relationship.js", "name": "relationship.js",
"officialName": "relationship.js", "version": "1.2.7",
"version": "1.1.0", "description": "Chinese kinship library",
"summary": "relationship.js is a javascript library for chinese family relationship. 中国家庭亲戚称谓计算器,家庭关系、亲戚关系算法。", "author": "HaoLe Zheng",
"description": "relationship.js is a javascript library for chinese family relationship.", "license": "MIT",
"author": "mumuy (http://passer-by.com/)", "keywords": [
"license": "MIT", "relationship",
"keywords": [ "relationship.js",
"relationship", "chinese",
"relationship.js", "family",
"chinese", "kinship",
"family", "家庭亲戚称谓",
"relationship", "亲戚关系算法"
"家庭亲戚称谓", ],
"亲戚关系算法" "main": "./dist/relationship.min.js",
], "module": "./dist/relationship.min.mjs",
"main": "dist/relationship.min.js", "exports": {
"repository": { ".": {
"type": "git", "import": "./dist/relationship.min.mjs",
"url": "git+https://github.com/mumuy/relationship.git" "require": "./dist/relationship.min.js",
}, "default": "./dist/relationship.min.js"
"bugs": { },
"url": "https://github.com/mumuy/relationship/issues" "./mode": {
}, "import": "./dist/relationship-mode.min.mjs",
"devDependencies": { "require": "./dist/relationship-mode.min.js",
"gulp": "^4.0.2", "default": "./dist/relationship-mode.min.js"
"gulp-rename": "^2.0.0", },
"gulp-uglify": "^3.0.2", "./zh-HK": {
"tape": "^5.3.1", "import": "./dist/lang/relationship.zh-HK.min.mjs",
"set-value": ">=4.0.1", "require": "./dist/lang/relationship.zh-HK.min.js",
"glob-parent": ">=5.1.2" "default": "./dist/lang/relationship.zh-HK.min.js"
}, },
"scripts": { "./zh-HK/mode": {
"test": "node test/index.js", "import": "./dist/lang/relationship-mode.zh-HK.min.mjs",
"build": "gulp mini && npm run test" "require": "./dist/lang/relationship-mode.zh-HK.min.js",
}, "default": "./dist/lang/relationship-mode.zh-HK.min.js"
"dependencies": {}, }
"homepage": "https://github.com/mumuy/relationship#readme", },
"directories": { "repository": {
"test": "test" "type": "git",
} "url": "git+https://github.com/mumuy/relationship.git"
},
"bugs": {
"url": "https://github.com/mumuy/relationship/issues"
},
"engines": {
"node": ">=20",
"yarn": "please-use-npm",
"npm": ">=8"
},
"files": [
"dist"
],
"devDependencies": {
"@babel/core": "^7.26.0",
"@babel/plugin-transform-runtime": "^7.25.9",
"@babel/preset-env": "^7.26.0",
"@babel/runtime": "^7.26.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.3.0",
"@rollup/plugin-terser": "^0.4.4",
"gulp": "^5.0.0",
"gulp-cht": "^2.0.20",
"gulp-rename": "^2.0.0",
"gulp-replace": "^1.1.4",
"rollup": "^3.29.5",
"tape": "^5.9.0",
"through2": "^4.0.2"
},
"scripts": {
"test": "node test/index.js",
"build": "rollup -c && gulp && npm run test",
"watch": "rollup -wc"
},
"homepage": "https://passer-by.com/relationship/",
"directories": {
"test": "test"
}
} }

166
readme.md
View File

@ -1,85 +1,115 @@
[![Build Status](https://travis-ci.org/mumuy/relationship.svg?branch=gh-pages)](https://travis-ci.org/mumuy/relationship/) ![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/mumuy/relationship/test.yml)
由于工作生活节奏不同,如今很多关系稍疏远的亲戚之间来往并不多。因此放假回家过年时,往往会搞不清楚哪位亲戚应该喊什么称呼,很是尴尬。然而搞不清亲戚关系和亲戚称谓的不仅是小孩,就连年轻一代的大人也都常常模糊混乱。 由于工作生活节奏不同,如今很多关系稍疏远的亲戚之间来往并不多。因此放假回家过年时,往往会搞不清楚哪位亲戚应该喊什么称呼,很是尴尬。然而搞不清亲戚关系和亲戚称谓的不仅是小孩,就连年轻一代的大人也都常常模糊混乱。
“中国家庭称谓计算器”为你避免了这种尴尬,只需简单的输入即可算出称谓。输入框兼容了不同的叫法,你可以称呼父亲为:“老爸”、“爹地”、“老爷子”等等,方不同地域的习惯叫法。快捷输入按键,只需简单的点击即可完成关系输入,算法还支持逆向查找称呼哦~! “中国家庭称谓计算器”为你避免了这种尴尬,只需简单的输入即可算出称谓。输入框兼容了不同的叫法,你可以称呼父亲为:“老爸”、“爹地”、“老爷子”等等,方便不同地域的习惯叫法。快捷输入按键,只需简单的点击即可完成关系输入,算法还支持逆向查找称呼哦~!
项目演示地址:[https://passer-by.com/relationship/](https://passer-by.com/relationship/)
演示地址:[https://passer-by.com/relationship/](http://passer-by.com/relationship/ ) 移动版演示地址: [https://passer-by.com/relationship/vue/](https://passer-by.com/relationship/vue/)
借助这套算法结合vue开发的APP: [https://passer-by.com/relationship/vue/](http://passer-by.com/relationship/vue/)
在微信中搜索“亲戚关系”,还可以体验小程序版本
![亲戚关系计算器](https://passer-by.com/relationship/image/qrcode.jpg)
## 一、下载 & 安装 ## 一、下载 & 安装
该 Javascript 库 / 模块可以用于前端也可以用于后端 Nodejs 中。 脚本库可以用于浏览器,也可以用于 Nodejs 环境中。
1. 直接下载dist/relationship.min.js然后使用 `<script>`标签引入,可以得到全局的方法 `relationship`. 1. 在网页中引入 `<script src="https://passer-by.com/relationship/dist/relationship.min.js">`
2. 使用 npm 进行包管理,具体为:
获取全局方法 `relationship`
2. 使用 npm 安装名为 `relationship.js ` 的包
> **npm install relationship.js** > **npm install relationship.js**
然后使用 `require` 引入模块 在脚本中引入模块
```js
var relationship = require("relationship.js");
```
```js
// CommonJS 引入
const relationship = require("relationship.js");
```
```js
// ES Module 引入
import relationship from 'relationship.js';
```
![npm](https://img.shields.io/npm/v/relationship.js) ![npm](https://img.shields.io/npm/dw/relationship.js)
## 二、使用 ## 二、使用
1. 通用方法: 唯一的计算方法 `relationship`.
1. 内部属性:获取当前数据量 `relationship.dataCount`. * 选项模式 `relationship(options)`
2. 内部方法:用户自定义模式 `relationship.setMode(mode_name,mode_data)`. 参数`options`结构为:
代码示例: ```js
var options = {
text:'', // 目标对象:目标对象的称谓汉字表达,称谓间用‘的’字分隔
target:'', // 相对对象:相对对象的称谓汉字表达,称谓间用‘的’字分隔,空表示自己
sex:-1, // 本人性别0表示女性,1表示男性
type:'default', // 转换类型:'default'计算称谓,'chain'计算关系链,'pair'计算关系合称
reverse:false, // 称呼方式true对方称呼我,false我称呼对方
mode:'default', // 模式选择使用setMode方法定制不同地区模式在此选择自定义模式
optimal:false, // 最短关系:计算两者之间的最短关系
};
```
```js 代码示例:
// 关系解析语法
// 【关系链】f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹
// 【修饰符】 1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列
relationship.setMode('northern',{
'm,f':['姥爷'],
'm,m':['姥姥'],
'm,xb,s&o':['表哥'],
'm,xb,s&l':['表弟'],
});
```
3. 通用方法: 唯一的计算方法 `relationship(options)`. ```js
// 如:我应该叫外婆的哥哥什么?
relationship({text:'妈妈的妈妈的哥哥'});
// => ['舅外公']
参数`options`结构为: // 如:七舅姥爷应该叫我什么?
relationship({text:'七舅姥爷',reverse:true,sex:1});
// => ['甥外孙']
```js // 如:舅公是什么亲戚
var options = { relationship({text:'舅公',type:'chain'});
text:'', //输入文本(称谓的汉字表达,称谓间用‘的’字分隔) // => ['爸爸的妈妈的兄弟', '妈妈的妈妈的兄弟', '老公的妈妈的兄弟']
target:'', //针对对象:空表示自己
sex:-1, //自己的性别0女性,1男性
type:'default', //转换类型:'default'算称谓,'chain'算关系
reverse:false, //称呼方式true对方称呼我,false我称呼对方
mode:'default' //模式选择,可由用户自定义
};
```
代码示例: // 如:舅妈如何称呼外婆?
relationship({text:'外婆',target:'舅妈',sex:1});
// => ['婆婆']
```js // 如:外婆和奶奶之间是什么关系?
// 如:我应该叫外婆的哥哥什么? relationship({text:'外婆',target:'奶奶',type:'pair'});
relationship({text:'妈妈的妈妈的哥哥'}); // => ['儿女亲家']
```
// 如:七舅姥爷应该叫我什么? * 语句模式 `relationship(exptession)`
relationship({text:'七舅姥爷','reverse':true,'sex':1});
// 如:舅公和我是什么关系? 参数`exptession`句式可以为:`xxx是xxx的什么人``xxx叫xxx什么``xxx如何称呼xxx`等.
relationship({text:'舅公',sex:0,type:'chain'});
// 如:舅妈如何称呼外婆? 代码示例:
relationship({text:'外婆',target:'舅妈',sex:1});
```
```js
// 如:舅妈如何称呼外婆?
relationship('舅妈如何称呼外婆?');
// => ['婆婆']
// 如:外婆和奶奶之间是什么关系?
relationship('外婆和奶奶之间是什么关系?');
// => ['儿女亲家']
```
2. 内部属性:获取当前数据表 `relationship.data`.
3. 内部属性:获取当前数据量 `relationship.dataCount`.
4. 内部方法:用户自定义模式 `relationship.setMode(mode_name,mode_data)`.
代码示例(可参考数据表格式对数据进行覆盖)
```js
// 关系解析语法
// 【关系链】f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹
// 【修饰符】 1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列
relationship.setMode('northern',{
'm,f':['姥爷'],
'm,m':['姥姥'],
'm,xb,s&o':['表哥'],
'm,xb,s&l':['表弟'],
});
```
## 三、开发 & 贡献 ## 三、开发 & 贡献
@ -94,19 +124,31 @@ npm run build
npm test npm test
``` ```
当然也可以直接浏览器打开 `index.html` 来在查看网页demo。
## 四、关于分歧 ## 四、关于分歧
一些称呼存在南北方或地区差异,容易引起歧义,并不保证和你所处地区的称谓习惯一致。本程序默认以现代生活常见的理解为主。例如: 一些称呼存在南北方或地区差异,容易引起歧义,并不保证和你所处地区的称谓习惯一致。
* 媳妇:在古代或者当今北方地区指儿子的妻子,这里指自己的妻子。
* 大爷:北方指父亲的哥哥,这里指爷爷的哥哥
* 太太:一些地方指年长的妇人,这里指自己的妻子
针对不同地区的使用,你可以通过上述所说的自定义模式实现。 部分称呼有多种关系且跨辈分。例如:
* 大爷:爷爷的哥哥 / 父亲的哥哥(北方)
* 舅公:爸妈的舅舅 / 老公的舅舅;
* 伯公:爸妈的伯父 / 老公的伯父;
* 叔公:爸妈的叔叔 / 老公的叔叔;
* 姨公:爸妈的姨丈 / 老公的姨丈;
* 姨夫:姨妈的老公 / 姨子的老公;
* 姑夫:姑妈的老公 / 姑子的老公;
* 婶子:叔叔的老婆 / 叔子的老婆;
* 妗子:舅舅的老婆 / 舅子的老婆;
## 五、其他 部分称呼以现代生活常见理解为主。例如:
* 媳妇:在古代或者北方地区指儿子的妻子,这里指自己的妻子(儿媳妇写作“息妇”)
* 太太:一些地方指年长的妇人或曾祖父母,这里指自己的妻子;
## 五、教程
* [算法实现原理](https://github.com/mumuy/relationship/wiki/%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0)
## 六、其他
他们都在用: 他们都在用:

62
rollup.config.mjs Normal file
View File

@ -0,0 +1,62 @@
import resolve from '@rollup/plugin-node-resolve'; // 使用node_modules包
import terser from '@rollup/plugin-terser'; // 代码压缩
import babel from '@rollup/plugin-babel'; // ECMAScript兼容
import pkg from './package.json' with { type:'json' }; // 获取package信息
// 版权信息
const repository = pkg.repository.url.replace(/(.+)(:\/\/.+)\.git$/,'https$2');
const now = new Date();
const date = (new Date(now.getTime()-now.getTimezoneOffset()*60000)).toISOString().substr(0,10);
const banner = `/*!
* ${pkg.name} v${pkg.version}
* ${pkg.description}
* ${pkg.homepage}
*
* Copyright (c) 2016-present, ${pkg.author}
*
* Released under the ${pkg.license} License
* ${repository}
*
* Created on: ${date}
*/`;
const commonPlugins = [
resolve(),
terser(),
babel({
babelHelpers: 'runtime',
exclude:'node_modules/**'
})
];
export default [{
input: './src/relationship.js',
output:[{
file: pkg.main,
format: 'umd',
name: 'relationship',
banner
},{
file: pkg.module,
format: 'es',
banner
}],
plugins: commonPlugins,
watch: {
exclude: 'node_modules/**'
}
},{
input: './src/relationship-mode.js',
output:[{
file: './dist/relationship-mode.min.js',
format: 'umd',
name: 'relationshipMode'
},{
file: './dist/relationship-mode.min.mjs',
format: 'es'
}],
plugins: commonPlugins,
watch: {
exclude: 'node_modules/**'
}
}];

View File

@ -1,274 +0,0 @@
// 获取数量
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,w':['姐夫'],
'ls':['阿妹'],
'ls,w':['妹夫'],
'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':['外息女'],
});
// 标签页
(function(){
var $module = document.querySelector('.mod-panel');
var $items = $module.querySelectorAll('li');
var $panels = $module.querySelectorAll('.c-panel');
for(var i=0;i<$items.length;i++){
(function(i){
$items[i].addEventListener('click',function(){
for(var j=0;j<$panels.length;j++){
$items[j].className = i==j?'active':'';
$panels[j].style.display = i==j?'block':'none';
}
});
})(i);
}
})();
// 通过关系找称呼
(function(){
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(1)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $mode = $panel.querySelectorAll('input[name="mode"]');
var $sex = $panel.querySelectorAll('input[name="sex"]');
var $reverse = $panel.querySelectorAll('input[name="reverse"]');
var $small_btns = $panel.querySelectorAll('.btn-small');
var $input = $panel.querySelector('textarea[name="input"]');
var $result = $panel.querySelector('textarea[name="result"]');
var toggleSex = function(sex){
if(sex){ //男女判断
$small_btns[2].disabled=true;
$small_btns[3].disabled=false;
}else{
$small_btns[2].disabled=false;
$small_btns[3].disabled=true;
}
}
var count = function(){
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 reverse = !$reverse[0].checked;
var result = relationship({text:value,sex:sex,reverse:reverse,mode:mode});
$result.value = '';
if(result.length){
$result.value = result.join('\n');
}else{
$result.value = '貌似他/她跟你不是很熟哦!';
}
}else{
$result.value = '';
}
};
var bindChange = function(){
var value = $input.value.trim();
if(value){
var result = relationship({text:value,sex:-1,type:'chain'});
if(result.length){
var first_name = result[0].split('的').shift();
var name = result[0].split('的').pop();
if(first_name=='老公'){
$sex[1].checked = true;
}else if(first_name=='老婆'){
$sex[0].checked = true;
}
if(!name){
toggleSex($sex[0].checked);
}else{
toggleSex('爸爸,老公,儿子,哥哥,弟弟,兄弟'.indexOf(name)>-1);
}
}
}else{
$result.value = '';
}
};
for(var i=0;i<$small_btns.length;i++){
$small_btns[i].onclick = function(){
var value = $input.value.trim();
var name = this.getAttribute('data-value');
if(value){
$input.value= value+'的'+name;
}else{
$input.value= name;
}
toggleSex('爸爸,老公,儿子,哥哥,弟弟,兄弟'.indexOf(name)>-1);
}
}
for(var i=0;i<$radio.length;i++){
$radio[i].onchange=function(){
toggleSex($sex[0].checked);
if($result.value){
count();
}
}
}
var hander = null;
$input.addEventListener('paste',function(){
hander&&clearTimeout(bindChange,250);
hander = setTimeout(bindChange,250);
});
$input.addEventListener('input',function(){
hander&&clearTimeout(bindChange,250);
hander = setTimeout(bindChange,250);
});
$panel.querySelector('.btn-orange').addEventListener('click',function(){
var value = $input.value.trim();
var index = value.lastIndexOf('的');
index = Math.max(0,index);
var search = value.substr(0,index);
$input.value = search;
$result.value = '';
var name = search.split('的').pop();
if(!name){
toggleSex($sex[0].checked);
}else{
toggleSex('爸爸,老公,儿子,哥哥,弟弟'.indexOf(name)>-1);
}
});
$panel.querySelector('.btn-red').addEventListener('click',function(){
$result.value = $input.value = '';
toggleSex($sex[0].checked);
});
$panel.querySelector('.btn-green').addEventListener('click',count);
toggleSex($sex[0].checked);
})();
// 通过称呼找关系
(function(){
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(2)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $input = $panel.querySelector('input[name="input"]');
var $result = $panel.querySelector('textarea[name="result"]');
var count = function(){
var value = $input.value.trim();
if(value){
var result = relationship({text:value,type:'chain'});
if(result.length){
$result.value = result.join('\n');
}else{
$result.value = '貌似他/她跟你不是很熟哦!';
}
}else{
$result.value = '';
}
};
$panel.querySelector('.btn-red').onclick = function(){
$result.value = $input.value = '';
};
$panel.querySelector('.btn-green').onclick = count;
})();
// 任意两者间称呼
(function(){
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(3)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $reverse = $panel.querySelectorAll('input[name="reverse2"]');
var $person = $panel.querySelector('input[name="person"]');
var $target = $panel.querySelector('input[name="target"]');
var $result = $panel.querySelector('textarea[name="result"]');
var count = function(){
var person = $person.value.trim();
var target = $target.value.trim();
if(person){
var reverse = !$reverse[1].checked;
var result = relationship({text:person,reverse:reverse,target:target});
if(result.length){
$result.value = result.join('\n');
}else{
$result.value = '他们貌似不是很熟哦!';
}
}else{
$result.value = '';
}
};
for(var i=0;i<$radio.length;i++){
$radio[i].onchange=function(){
if($result.value){
count();
}
}
}
$panel.querySelector('.btn-red').onclick = function(){
$result.value = $person.value = $target.value = '';
};
$panel.querySelector('.btn-green').onclick = count;
})();

File diff suppressed because it is too large Load Diff

81
src/locale/guangdong.js Normal file
View 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
View 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':['大娘'],
}
}

27
src/module/cache.js Normal file
View File

@ -0,0 +1,27 @@
/*
* 缓存数据
*/
import _input from './data/input.js';
import _sort from './data/sort.js';
import {modeData} from './mode.js';
function mergeValues(target, source) {
Object.entries(source).forEach(([key, value]) => {
target[key] = (target[key] || []).concat(value);
});
return target;
}
let _hash = mergeValues({...modeData }, _input);
_hash = mergeValues(_hash, _sort);
let cacheData = {};
Object.entries(_hash).forEach(([key, names]) => {
names.forEach((name) => {
if (!cacheData[name]) {
cacheData[name] = [];
}
cacheData[name].push(key);
});
});
export {cacheData};

604
src/module/data/branch.js Normal file
View File

@ -0,0 +1,604 @@
/*
* 分支关系链 - 旁支亲戚的分支关系链
*/
export default {
// 其他旁系
'{G2},s':['父'],
'{G2},s,w':['母'],
'{G2},s,s':['兄弟'],
'{G2},s,s&o':['兄'],
'{G2},s,s&l':['弟'],
'{G2},s,s,s':['男','子'],
'{G2},s,s,d':['女'],
'{G2},s,d':['姊妹'],
'{G2},s,d&o':['姊'],
'{G2},s,d&l':['妹'],
// 高祖以上
'f,f,f,f,f,f,f,f,[{G1M}|{G1W},h]':['鼻祖父'],
'f,f,f,f,f,f,f,f,[{G1M},w|{G1W}]':['鼻祖母'],
'f,f,f,f,f,f,f,[{G1M}|{G1W},h]':['远祖父'],
'f,f,f,f,f,f,f,[{G1M},w|{G1W}]':['远祖母'],
'f,f,f,f,f,f,[{G1M}|{G1W},h]':['太祖父'],
'f,f,f,f,f,f,[{G1M},w|{G1W}]':['太祖母'],
'f,f,f,f,f,[{G1M}|{G1W},h]':['烈祖父'],
'f,f,f,f,f,[{G1M},w|{G1W}]':['烈祖母'],
'f,f,f,f,[{G1M}|{G1W},h]':['天祖父'],
'f,f,f,f,[{G1M},w|{G1W}]':['天祖母'],
// 高祖辈
'f,f,f,[{G1M}|{G1W},h]':['高祖父','外曾外曾外毑父'],
'f,f,f,[{G1M},w|{G1W}]':['高祖母','外曾外曾外毑母'],
'f,f,m,[{G1M}|{G1W},h]':['高外祖父','外曾外曾毑父'],
'f,f,m,[{G1M},w|{G1W}]':['高外祖母','外曾外曾毑母'],
'f,m,f,[{G1M}|{G1W},h]':['曾外曾祖父','外高外毑父'],
'f,m,f,[{G1M},w|{G1W}]':['曾外曾祖母','外高外毑母'],
'f,m,m,[{G1M}|{G1W},h]':['曾外曾外祖父','外高毑父'],
'f,m,m,[{G1M},w|{G1W}]':['曾外曾外祖母','外高毑母'],
'm,f,f,[{G1M}|{G1W},h]':['外高祖父','曾外曾外毑父'],
'm,f,f,[{G1M},w|{G1W}]':['外高祖母','曾外曾外毑母'],
'm,f,m,[{G1M}|{G1W},h]':['外高外祖父','曾外曾祖毑父'],
'm,f,m,[{G1M},w|{G1W}]':['外高外祖母','曾外曾祖毑母'],
'm,m,f,[{G1M}|{G1W},h]':['外曾外曾祖父','高外毑父'],
'm,m,f,[{G1M},w|{G1W}]':['外曾外曾祖母','高外毑母'],
'm,m,m,[{G1M}|{G1W},h]':['外曾外曾外祖父','高毑父'],
'm,m,m,[{G1M},w|{G1W}]':['外曾外曾外祖母','高毑母'],
// 曾祖辈
'f,f,[{G1M}|{G1W},h]':['?曾祖父','曾?祖父','?太公','太?公','?公太','太?爷','?太爷','?太爷爷','太?爷爷'],
'f,f,[{G1M},w|{G1W}]':['?曾祖母','曾?祖母','?太婆','太?婆','?婆太','太?奶','?太奶','?太奶奶','太?奶奶'],
'f,m,[{G1M}|{G1W},h]':['?曾外祖父','曾外?祖父','?太外公','太外?公','太外?爷','?太外爷','?太外爷爷','太外?爷爷'],
'f,m,[{G1M},w|{G1W}]':['?曾外祖母','曾外?祖母','?太外婆','太外?婆','太外?奶','?太外奶','?太外奶奶','太外?奶奶'],
'm,f,[{G1M}|{G1W},h]':['?外曾祖父','外曾?祖父','?外太公','外太?公','外太?爷','?外太爷','?外太爷爷','外太?爷爷'],
'm,f,[{G1M},w|{G1W}]':['?外曾祖母','外曾?祖母','?外太婆','外太?婆','外太?奶','?外太奶','?外太奶奶','外太?奶奶'],
'm,m,[{G1M}|{G1W},h]':['?外曾外祖父','外曾外?祖父','?外太外公','外太外?公','外太外?爷','?外太外爷','?外太外爷爷','外太外?爷爷'],
'm,m,[{G1M},w|{G1W}]':['?外曾外祖母','外曾外?祖母','?外太外婆','外太外?婆','外太外?奶','?外太外奶','?外太外奶奶','外太外?奶奶'],
// 祖辈
'f,[{G1M}|{G1W},h]':['祖父','公','太?父','奶爷','爷爷','爷'],
'f,[{G1M},w|{G1W}]':['祖母','婆','太?母','奶奶','奶'],
'm,[{G1M}|{G1W},h]':['外祖父','外公','外爷','外?公','外?祖父','外太?父','太外?父','姥爷','姥公','毑公','毑爷','毑父','嘎公'],
'm,[{G1M},w|{G1W}]':['外祖母','外婆','外奶','外?婆','外?祖母','外太?母','太外?母','姥姥','姥婆','毑婆','毑毑','毑母','嘎嘎'],
'f,f,{G1},s&o':['伯祖父','伯爷爷'],
'f,f,{G1},s&o,w':['伯祖母','伯奶奶'],
'f,f,{G1},s&l':['叔祖父','叔爷爷'],
'f,f,{G1},s&l,w':['叔祖母','叔奶奶'],
'f,f,{G1},d':['姑祖母','姑奶奶'],
'f,f,{G1},d,h':['姑祖父','姑爷爷'],
'f,m,{G1},s':['舅祖父','舅爷爷'],
'f,m,{G1},s,w':['舅祖母','舅奶奶'],
'f,m,{G1},d':['姨祖母','姨奶奶'],
'f,m,{G1},d,h':['姨祖父','姨爷爷'],
'm,f,{G1},s&o':['伯外祖父','伯外公','伯姥爷'],
'm,f,{G1},s&o,w':['伯外祖母','伯外婆','伯姥姥'],
'm,f,{G1},s&l':['叔外祖父','叔外公','叔姥爷'],
'm,f,{G1},s&l,w':['叔外祖母','叔外婆','叔姥姥'],
'm,f,{G1},d':['姑外祖母','姑外婆','姑姥姥'],
'm,f,{G1},d,h':['姑外祖父','姑外公','姑姥爷'],
'm,m,{G1},s':['舅外祖父','舅外公','舅姥爷'],
'm,m,{G1},s,w':['舅外祖母','舅外婆','舅姥姥'],
'm,m,{G1},d':['姨外祖母','姨外公','姨姥爷'],
'm,m,{G1},d,h':['姨外祖父','姨外婆','姨姥姥'],
// 父辈
'{G1M}#{G1W},h':['父'],
'{G1M},w#{G1W}':['母'],
'f,{G1},s&o':['伯父','伯伯','伯','大爷'],
'f,{G1},s&o,w':['伯母','大娘'],
'f,{G1},s&l':['叔父','叔爸','叔叔','叔'],
'f,{G1},s&l,w':['叔母','婶'],
'f,{G1},d':['姑母','姑姑','姑妈','姑'],
'f,{G1},d,h':['姑父','姑丈','姑爸','姑夫'],
'm,{G1},s':['舅父','舅舅','舅爸','舅'],
'm,{G1},s,w':['舅母','舅妈'],
'm,{G1},d':['姨母','姨姨','姨妈','姨'],
'm,{G1},d,h':['姨父','姨丈','姨爸','姨夫'],
// 同辈及以下
'{G1},s':['兄弟'],
'{G1},s,w':['兄弟妇'],
'{G1},s&o':['哥','哥哥','阿哥'],
'{G1},s&o,w':['嫂','嫂子','兄妇'],
'{G1},s&l':['弟','弟弟','阿弟'],
'{G1},s&l,w':['弟媳','弟妇'],
'{G1},s,s':['侄男','侄子','侄儿'],
'{G1},s,s,w':['侄妇'],
'{G1},s,s,s':['侄孙男'],
'{G1},s,s,s,w':['侄孙妇'],
'{G1},s,s,s,s':['侄曾孙男'],
'{G1},s,s,s,s,w':['侄曾孙妇'],
'{G1},s,s,s,s,s':['侄玄孙男'],
'{G1},s,s,s,s,s,w':['侄玄孙妇'],
'{G1},s,s,s,s,d':['侄玄孙女'],
'{G1},s,s,s,s,d,h':['侄玄孙婿'],
'{G1},s,s,d':['侄孙女'],
'{G1},s,s,d,h':['侄孙婿'],
'{G1},s,s,s,d':['侄曾孙女'],
'{G1},s,s,s,d,h':['侄曾孙婿'],
'{G1},s,d':['侄女','侄女儿'],
'{G1},s,d,h':['侄婿'],
'{G1},s,d,s':['侄外孙男','外孙男'],
'{G1},s,d,s,w':['侄外孙妇'],
'{G1},s,d,d':['侄外孙女','外孙女'],
'{G1},s,d,d,h':['侄外孙婿'],
'{G1},d':['姐妹'],
'{G1},d,h':['姐妹壻'],
'{G1},d&o':['姐','姐姐','阿姐'],
'{G1},d&o,h':['姐夫'],
'{G1},d&l':['妹','妹妹','阿妹'],
'{G1},d&l,h':['妹夫'],
'{G1},d,s':['甥男'],
'{G1},d,s,w':['甥妇'],
'{G1},d,s,s':['甥孙男'],
'{G1},d,s,s,w':['甥孙妇'],
'{G1},d,s,d':['甥孙女'],
'{G1},d,s,d,h':['甥孙婿'],
'{G1},d,d':['甥女'],
'{G1},d,d,h':['甥婿'],
'{G1},d,d,s':['甥外孙男','外孙男'],
'{G1},d,d,s,w':['甥外孙妇'],
'{G1},d,d,d':['甥外孙女','外孙女'],
'{G1},d,d,d,h':['甥外孙婿'],
// 夫族
'h,f,[{G1M}|{G1W},h]':['祖公父','祖公','祖翁','奶公'],
'h,f,[{G1M},w|{G1W}]':['祖婆母','祖婆','祖姆','奶婆'],
'h,m,[{G1M}|{G1W},h]':['外祖公父','外祖公','外祖翁','姥公'],
'h,m,[{G1M},w|{G1W}]':['外祖婆母','外祖婆','外祖姆','姥婆'],
'h,[{G1M}|{G1W},h]':['公父','公公'],
'h,[{G1M},w|{G1W}]':['婆母','婆婆'],
'h,{G1},s&o':['大伯子','大伯兄'],
'h,{G1},s&o,w':['大婶子','大伯嫂'],
'h,{G1},s&l':['小叔子','小叔弟'],
'h,{G1},s&l,w':['小婶子','小叔弟妇'],
'h,{G1},s':['伯叔'],
'h,{G1},s,w':['妯娌'],
'h,{G1},d&o':['大姑子','大姑姐'],
'h,{G1},d&o,h':['大姑夫','大姑姐夫'],
'h,{G1},d&l':['小姑子','小姑妹'],
'h,{G1},d&l,h':['小姑夫','小姑妹夫'],
'h,{G1},d':['姑子'],
'h,{G1},d,h':['姑夫'],
// 妻族
'w,f,[{G1M}|{G1W},h]':['祖岳父','太?岳','祖丈人','爷丈人','奶爷丈人'],
'w,f,[{G1M},w|{G1W}]':['祖岳母','太?岳母','祖丈母','祖丈母娘','奶丈母娘','奶丈母'],
'w,m,[{G1M}|{G1W},h]':['外祖岳父','外太?岳父','太外?岳父','外祖丈人','姥爷丈人'],
'w,m,[{G1M},w|{G1W}]':['外祖岳母','外太?岳母','太外?岳母','外祖丈母','外祖丈母娘','姥丈母娘','姥丈母'],
'w,[{G1M}|{G1W},h]':['岳父','丈人','丈人爹'],
'w,[{G1M},w|{G1W}]':['岳母','丈母','丈母娘'],
'w,{G1},s&o':['大舅子','大舅兄','舅兄'],
'w,{G1},s&o,w':['大舅妇','大舅姆','大舅兄妇','舅兄妇','舅姐','大舅姐','大妗子','大妗儿'],
'w,{G1},s&l':['小舅子','小舅弟','舅弟'],
'w,{G1},s&l,w':['小舅妇','小舅姆','小舅弟妇','舅弟妇','舅妹','小舅妹','小妗子','小妗儿'],
'w,{G1},s':['舅子'],
'w,{G1},s,w':['舅嫂'],
'w,{G1},d&o':['大姨子','大姨姐','姨姐'],
'w,{G1},d&o,h':['大姨夫','大姨姐夫','襟兄','姨兄','大姨哥','大尹子'],
'w,{G1},d&l':['小姨子','小姨妹','姨妹'],
'w,{G1},d&l,h':['小姨夫','小姨妹夫','襟弟','姨弟','小姨弟','小尹子'],
'w,{G1},d':['姨子'],
'w,{G1},d,h':['连襟','连桥'],
// 子辈及以下
'{G0},s':['男','男儿','儿','子','儿子'],
'{G0},s,w':['媳妇','媳','妇'],
'{G0},s,s':['孙','孙男','孙子'],
'{G0},s,s,w':['孙妇'],
'{G0},s,s,s':['曾孙','曾孙男'],
'{G0},s,s,s,w':['曾孙妇'],
'{G0},s,s,s,s':['玄孙','玄孙男','元孙','元孙男'],
'{G0},s,s,s,s,w':['玄孙妇'],
'{G0},s,s,s,d':['玄孙女','元孙女'],
'{G0},s,s,s,d,h':['玄孙婿'],
'{G0},s,s,d':['曾孙女'],
'{G0},s,s,d,h':['曾孙婿'],
'{G0},s,s,d,s':['玄外孙','玄外孙男'],
'{G0},s,s,d,s,w':['玄外孙妇'],
'{G0},s,s,d,d':['玄外孙女'],
'{G0},s,s,d,d,h':['玄外孙婿'],
'{G0},s,d':['孙女'],
'{G0},s,d,h':['孙婿'],
'{G0},s,d,s':['曾外孙','曾外孙男'],
'{G0},s,d,s,w':['曾外孙妇'],
'{G0},s,d,s,s':['曾外曾孙','曾外曾孙男'],
'{G0},s,d,s,s,w':['曾外曾孙妇'],
'{G0},s,d,s,d':['曾外曾孙女'],
'{G0},s,d,s,d,h':['曾外曾孙婿'],
'{G0},s,d,d':['曾外孙女'],
'{G0},s,d,d,h':['曾外孙婿'],
'{G0},s,d,d,s':['曾外曾外孙','曾外曾外孙男'],
'{G0},s,d,d,s,w':['曾外曾外孙妇'],
'{G0},s,d,d,d':['曾外曾外孙女'],
'{G0},s,d,d,d,h':['曾外曾外孙婿'],
'{G0},d':['女','女儿'],
'{G0},d,h':['女婿','婿'],
'{G0},d,s':['外孙','外孙男'],
'{G0},d,s,w':['外孙妇'],
'{G0},d,s,s':['外曾孙','外曾孙男'],
'{G0},d,s,s,w':['外曾孙妇'],
'{G0},d,s,s,s':['外玄孙','外玄孙男'],
'{G0},d,s,s,d':['外玄孙女'],
'{G0},d,s,d':['外曾孙女'],
'{G0},d,s,d,h':['外曾孙婿'],
'{G0},d,s,d,s':['外玄外孙','外玄外孙男'],
'{G0},d,s,d,d':['外玄外孙女'],
'{G0},d,d':['外孙女'],
'{G0},d,d,h':['外孙婿'],
'{G0},d,d,s':['外曾外孙','外曾外孙男'],
'{G0},d,d,s,w':['外曾外孙妇'],
'{G0},d,d,s,s':['外曾外曾孙','外曾外曾孙男'],
'{G0},d,d,s,d':['外曾外曾孙女'],
'{G0},d,d,d':['外曾外孙女'],
'{G0},d,d,d,h':['外曾外孙婿'],
'{G0},d,d,d,s':['外曾外曾外孙'],
'{G0},d,d,d,d':['外曾外曾外孙女'],
// 姻亲关系
'{M2W},xb':['舅祖父'],
'{M2W},xb,w':['舅祖母'],
'{M2W},xb,s&o':['舅表伯父'],
'{M2W},xb,s&o,w':['舅表伯母'],
'{M2W},xb,s&l':['舅表叔父'],
'{M2W},xb,s&l,w':['舅表叔母'],
'{M2W},xb,d':['舅表姑母'],
'{M2W},xb,d,h':['舅表姑父'],
'{M2W},xs':['姨祖母'],
'{M2W},xs,h':['姨祖父'],
'{M2W},xs,s&o':['姨伯父'],
'{M2W},xs,s&o,w':['姨伯母'],
'{M2W},xs,s&l':['姨叔父'],
'{M2W},xs,s&l,w':['姨叔母'],
'{M2W},xs,d':['姨姑母'],
'{M2W},xs,d,h':['姨姑父'],
'{M2M},xb':['叔祖父'],
'{M2M},xb,w':['叔祖母'],
'{M2M},xb,s&o':['堂伯父'],
'{M2M},xb,s&o,w':['堂伯母'],
'{M2M},xb,s&l':['堂叔父'],
'{M2M},xb,s&l,w':['堂叔母'],
'{M2M},xb,d':['堂姑母'],
'{M2M},xb,d,h':['堂姑父'],
'{M2M},xs':['姑祖母'],
'{M2M},xs,h':['姑祖父'],
'{M2M},xs,s&o':['姑表伯父'],
'{M2M},xs,s&o,w':['姑表伯母'],
'{M2M},xs,s&l':['姑表叔父'],
'{M2M},xs,s&l,w':['姑表叔母'],
'{M2M},xs,d':['姑表姑母'],
'{M2M},xs,d,h':['姑表姑父'],
'{M1W},f':['外祖父'],
'{M1W},f,xb,s':['堂舅父'],
'{M1W},f,xb,s,w':['堂舅母'],
'{M1W},f,xb,d':['堂姨母'],
'{M1W},f,xb,d,h':['堂姨父'],
'{M1W},f,ob':['伯外祖父'],
'{M1W},f,ob,w':['伯外祖母'],
'{M1W},f,lb':['叔外祖父'],
'{M1W},f,lb,w':['叔外祖母'],
'{M1W},f,xs':['姑外祖母'],
'{M1W},f,xs,h':['姑外祖父'],
'{M1W},f,xs,s':['姑表舅父'],
'{M1W},f,xs,s,w':['姑表舅母'],
'{M1W},f,xs,d':['姑表姨母'],
'{M1W},f,xs,d,h':['姑表姨父'],
'{M1W},m':['外祖母'],
'{M1W},m,xb':['舅外祖父'],
'{M1W},m,xb,w':['舅外祖母'],
'{M1W},m,xb,s':['舅表舅父'],
'{M1W},m,xb,s,w':['舅表舅母'],
'{M1W},m,xb,d':['舅表姨母'],
'{M1W},m,xb,d,h':['舅表姨父'],
'{M1W},m,xs':['姨外祖母'],
'{M1W},m,xs,h':['姨外祖父'],
'{M1W},m,xs,s':['姨舅父'],
'{M1W},m,xs,s,w':['姨舅母'],
'{M1W},m,xs,d':['姨姨母'],
'{M1W},m,xs,d,h':['姨姨父'],
'{M1W},xb':['舅父'],
'{M1W},xb,w':['舅母'],
'{M1W},xb,[s|d]':['舅表兄弟姊妹'],
'{M1W},xb,s':['舅表兄弟'],
'{M1W},xb,s,w':['舅表兄弟妇'],
'{M1W},xb,s&o':['舅表兄'],
'{M1W},xb,s&o,w':['舅表兄妇'],
'{M1W},xb,s&l':['舅表弟'],
'{M1W},xb,s&l,w':['舅表弟妇'],
'{M1W},xb,s,s':['舅表侄男','侄男'],
'{M1W},xb,s,s,w':['舅表侄妇','侄妇'],
'{M1W},xb,s,d':['舅表侄女','侄女'],
'{M1W},xb,s,d,h':['舅表侄婿','侄婿'],
'{M1W},xb,d':['舅表姊妹'],
'{M1W},xb,d,h':['舅表姊妹壻'],
'{M1W},xb,d&o':['舅表姊'],
'{M1W},xb,d&o,h':['舅表姊壻'],
'{M1W},xb,d&l':['舅表妹'],
'{M1W},xb,d&l,h':['舅表妹壻'],
'{M1W},xb,d,s':['舅表甥男','甥男'],
'{M1W},xb,d,s,w':['舅表甥妇','甥妇'],
'{M1W},xb,d,d':['舅表甥女','甥女'],
'{M1W},xb,d,d,h':['舅表甥婿','甥婿'],
'{M1W},xs':['姨母','姨妈'],
'{M1W},xs,h':['姨父','姨丈','姨夫'],
'{M1W},xs,[s|d]':['姨表兄弟姊妹'],
'{M1W},xs,s':['姨表兄弟'],
'{M1W},xs,s,w':['姨表兄弟妇'],
'{M1W},xs,s&o':['姨表兄'],
'{M1W},xs,s&o,w':['姨表兄妇'],
'{M1W},xs,s&l':['姨表弟'],
'{M1W},xs,s&l,w':['姨表弟妇'],
'{M1W},xs,s,s':['姨表侄男','侄男'],
'{M1W},xs,s,s,w':['姨表侄妇','侄妇'],
'{M1W},xs,s,d':['姨表侄女','侄女'],
'{M1W},xs,s,d,h':['姨表侄婿','侄婿'],
'{M1W},xs,d':['姨表姊妹'],
'{M1W},xs,d,h':['姨表姊妹壻'],
'{M1W},xs,d&o':['姨表姊'],
'{M1W},xs,d&o,h':['姨表姊壻'],
'{M1W},xs,d&l':['姨表妹'],
'{M1W},xs,d&l,h':['姨表妹壻'],
'{M1W},xs,d,s':['姨表甥男','甥男'],
'{M1W},xs,d,s,w':['姨表甥妇','甥妇'],
'{M1W},xs,d,d':['姨表甥女','甥女'],
'{M1W},xs,d,d,h':['姨表甥婿','甥婿'],
'{M1M},f':['祖父'],
'{M1M},f,xb,s&o':['堂伯父'],
'{M1M},f,xb,s&o,w':['堂伯母'],
'{M1M},f,xb,s&l':['堂叔父'],
'{M1M},f,xb,s&l,w':['堂叔母'],
'{M1M},f,xb,d':['堂姑母'],
'{M1M},f,xb,d,h':['堂姑父'],
'{M1M},f,ob':['伯祖父'],
'{M1M},f,ob,w':['伯祖母'],
'{M1M},f,lb':['叔祖父'],
'{M1M},f,lb,w':['叔祖母'],
'{M1M},f,xs':['姑祖母'],
'{M1M},f,xs,h':['姑祖父'],
'{M1M},f,xs,s&o':['姑表伯父'],
'{M1M},f,xs,s&o,w':['姑表伯母'],
'{M1M},f,xs,s&l':['姑表叔父'],
'{M1M},f,xs,s&l,w':['姑表叔母'],
'{M1M},f,xs,d':['姑表姑母'],
'{M1M},f,xs,d,h':['姑表姑父'],
'{M1M},m':['祖母'],
'{M1M},m,xb':['舅祖父'],
'{M1M},m,xb,w':['舅祖母'],
'{M1M},m,xb,s&o':['舅表伯父'],
'{M1M},m,xb,s&o,w':['舅表伯母'],
'{M1M},m,xb,s&l':['舅表叔父'],
'{M1M},m,xb,s&l,w':['舅表叔母'],
'{M1M},m,xb,d':['舅表姑母'],
'{M1M},m,xb,d,h':['舅表姑父'],
'{M1M},m,xs':['姨祖母'],
'{M1M},m,xs,h':['姨祖父'],
'{M1M},m,xs,s&o':['姨伯父'],
'{M1M},m,xs,s&o,w':['姨伯母'],
'{M1M},m,xs,s&l':['姨叔父'],
'{M1M},m,xs,s&l,w':['姨叔母'],
'{M1M},m,xs,d':['姨姑母'],
'{M1M},m,xs,d,h':['姨姑父'],
'{M1M},xb':['叔伯父'],
'{M1M},xb,w':['叔伯母'],
'{M1M},ob':['伯父'],
'{M1M},ob,w':['伯母'],
'{M1M},lb':['叔父'],
'{M1M},lb,w':['叔母'],
'{M1M},xb,[s|d]':['叔表兄弟姊妹'],
'{M1M},xb,s':['叔表兄弟'],
'{M1M},xb,s,w':['叔表兄弟妇'],
'{M1M},xb,s&o':['叔表兄'],
'{M1M},xb,s&o,w':['叔表兄妇'],
'{M1M},xb,s&l':['叔表弟'],
'{M1M},xb,s&l,w':['叔表弟妇'],
'{M1M},xb,s,s':['叔表侄男','侄男'],
'{M1M},xb,s,s,w':['叔表侄妇','侄妇'],
'{M1M},xb,s,d':['叔表侄女','侄女'],
'{M1M},xb,s,d,h':['叔表侄婿','侄婿'],
'{M1M},xb,d':['叔表姊妹'],
'{M1M},xb,d,h':['叔表姊妹壻'],
'{M1M},xb,d&o':['叔表姊'],
'{M1M},xb,d&o,h':['叔表姊壻'],
'{M1M},xb,d&l':['叔表妹'],
'{M1M},xb,d&l,h':['叔表妹壻'],
'{M1M},xb,d,s':['叔表甥男','甥男'],
'{M1M},xb,d,s,w':['叔表甥妇','甥妇'],
'{M1M},xb,d,d':['叔表甥女','甥女'],
'{M1M},xb,d,d,h':['叔表甥婿','甥婿'],
'{M1M},xs':['姑母','姑妈'],
'{M1M},xs,h':['姑父','姑丈','姑夫'],
'{M1M},xs,[s|d]':['姑表兄弟姊妹'],
'{M1M},xs,s':['姑表兄弟'],
'{M1M},xs,s,w':['姑表兄弟妇'],
'{M1M},xs,s&o':['姑表兄'],
'{M1M},xs,s&o,w':['姑表兄妇'],
'{M1M},xs,s&l':['姑表弟'],
'{M1M},xs,s&l,w':['姑表弟妇'],
'{M1M},xs,s,s':['姑表侄男','侄男'],
'{M1M},xs,s,s,w':['姑表侄妇','侄妇'],
'{M1M},xs,s,d':['姑表侄女','侄女'],
'{M1M},xs,s,d,h':['姑表侄婿','侄婿'],
'{M1M},xs,d':['姑表姊妹'],
'{M1M},xs,d,h':['姑表姊妹壻'],
'{M1M},xs,d&o':['姑表姊'],
'{M1M},xs,d&o,h':['姑表姊壻'],
'{M1M},xs,d&l':['姑表妹'],
'{M1M},xs,d&l,h':['姑表妹壻'],
'{M1M},xs,d,s':['姑表甥男','甥男'],
'{M1M},xs,d,s,w':['姑表甥妇','甥妇'],
'{M1M},xs,d,d':['姑表甥女','甥女'],
'{M1M},xs,d,d,h':['姑表甥婿','甥婿'],
'{M0},f':['父'],
'{M0},f,f':['祖父'],
'{M0},f,f,ob':['伯祖父'],
'{M0},f,f,ob,w':['伯祖母'],
'{M0},f,f,lb':['叔祖父'],
'{M0},f,f,lb,w':['叔祖母'],
'{M0},f,f,xs':['姑祖母'],
'{M0},f,f,xs,h':['姑祖父'],
'{M0},f,m':['祖母'],
'{M0},f,m,xb':['舅祖父'],
'{M0},f,m,xb,w':['舅祖母'],
'{M0},f,m,xs':['姨祖母'],
'{M0},f,m,xs,h':['姨祖父'],
'{M0},f,ob':['伯父'],
'{M0},f,ob,w':['伯母'],
'{M0},f,lb':['叔父'],
'{M0},f,lb,w':['叔母'],
'{M0},f,xb,[s|d]':['叔表兄弟姊妹','叔表姊妹兄弟'],
'{M0},f,xb,s':['叔表兄弟'],
'{M0},f,xb,s,w':['叔表兄弟妇'],
'{M0},f,xb,s&o':['叔表兄'],
'{M0},f,xb,s&o,w':['叔表兄妇'],
'{M0},f,xb,s&l':['叔表弟'],
'{M0},f,xb,s&l,w':['叔表弟妇'],
'{M0},f,xb,d':['叔表姊妹'],
'{M0},f,xb,d,h':['叔表姊妹壻'],
'{M0},f,xb,d&o':['叔表姊'],
'{M0},f,xb,d&o,h':['叔表姊壻'],
'{M0},f,xb,d&l':['叔表妹'],
'{M0},f,xb,d&l,h':['叔表妹壻'],
'{M0},f,xs':['姑母','姑妈'],
'{M0},f,xs,h':['姑父','姑丈','姑夫'],
'{M0},f,xs,[s|d]':['姑表兄弟姊妹','姑表姊妹兄弟'],
'{M0},f,xs,s':['姑表兄弟'],
'{M0},f,xs,s,w':['姑表兄弟妇'],
'{M0},f,xs,s&o':['姑表兄'],
'{M0},f,xs,s&o,w':['姑表兄妇'],
'{M0},f,xs,s&l':['姑表弟'],
'{M0},f,xs,s&l,w':['姑表弟妇'],
'{M0},f,xs,d':['姑表姊妹'],
'{M0},f,xs,d,h':['姑表姊妹壻'],
'{M0},f,xs,d&o':['姑表姊'],
'{M0},f,xs,d&o,h':['姑表姊壻'],
'{M0},f,xs,d&l':['姑表妹'],
'{M0},f,xs,d&l,h':['姑表妹壻'],
'{M0},m':['母'],
'{M0},m,f':['外祖父'],
'{M0},m,f,ob':['伯外祖父'],
'{M0},m,f,ob,w':['伯外祖母'],
'{M0},m,f,lb':['叔外祖父'],
'{M0},m,f,lb,w':['叔外祖母'],
'{M0},m,f,xs':['姑外祖母'],
'{M0},m,f,xs,h':['姑外祖父'],
'{M0},m,m':['外祖母'],
'{M0},m,m,xb':['舅外祖父'],
'{M0},m,m,xb,w':['舅外祖母'],
'{M0},m,m,xs':['姨外祖母'],
'{M0},m,m,xs,h':['姨外祖父'],
'{M0},m,xb':['舅父'],
'{M0},m,xb,w':['舅母'],
'{M0},m,xb,[s|d]':['舅表兄弟姊妹','舅表姊妹兄弟'],
'{M0},m,xb,s':['舅表兄弟'],
'{M0},m,xb,s,w':['舅表兄弟妇'],
'{M0},m,xb,s&o':['舅表兄'],
'{M0},m,xb,s&o,w':['舅表兄妇'],
'{M0},m,xb,s&l':['舅表弟'],
'{M0},m,xb,s&l,w':['舅表弟妇'],
'{M0},m,xb,d':['舅表姊妹'],
'{M0},m,xb,d,h':['舅表姊妹壻'],
'{M0},m,xb,d&o':['舅表姊'],
'{M0},m,xb,d&o,h':['舅表姊壻'],
'{M0},m,xb,d&l':['舅表妹'],
'{M0},m,xb,d&l,h':['舅表妹壻'],
'{M0},m,xs':['姨母','姨妈'],
'{M0},m,xs,h':['姨父','姨丈','姨夫'],
'{M0},m,xs,[s|d]':['姨兄弟姊妹','姨姊妹兄弟'],
'{M0},m,xs,s':['姨兄弟'],
'{M0},m,xs,s,w':['姨兄弟妇'],
'{M0},m,xs,s&o':['姨兄'],
'{M0},m,xs,s&o,w':['姨兄妇'],
'{M0},m,xs,s&l':['姨弟'],
'{M0},m,xs,s&l,w':['姨弟妇'],
'{M0},m,xs,d':['姨姊妹'],
'{M0},m,xs,d,h':['姨姊妹壻'],
'{M0},m,xs,d&o':['姨姊'],
'{M0},m,xs,d&o,h':['姨姊壻'],
'{M0},m,xs,d&l':['姨妹'],
'{M0},m,xs,d&l,h':['姨妹壻'],
'{M0},xb':['兄弟'],
'{M0},xb,w':['兄弟妇'],
'{M0},xb&o':['兄'],
'{M0},xb&o,w':['兄妇','兄嫂','嫂子'],
'{M0},xb&l':['弟'],
'{M0},xb&l,w':['弟妇','弟妹'],
'{M0},xb,s':['侄男','侄子','侄儿'],
'{M0},xb,s,w':['侄妇'],
'{M0},xb,d':['侄女'],
'{M0},xb,d,h':['侄婿'],
'{M0},xs':['姊妹'],
'{M0},xs,h':['姊妹壻'],
'{M0},xs&o':['姊'],
'{M0},xs&o,h':['姊壻','姐夫'],
'{M0},xs&l':['妹'],
'{M0},xs&l,h':['妹壻','妹夫'],
'{M0},xs,s':['甥男'],
'{M0},xs,s,w':['甥妇'],
'{M0},xs,d':['甥女'],
'{M0},xs,d,h':['甥婿'],
'{M-1},f':['兄弟'],
'{M-1},f&o':['兄'],
'{M-1},f&l':['弟'],
'{M-1},f,f':['父'],
'{M-1},f,f,f':['祖父'],
'{M-1},f,f,m':['祖母'],
'{M-1},f,f,ob':['伯父'],
'{M-1},f,f,ob,w':['伯母'],
'{M-1},f,f,lb':['叔父'],
'{M-1},f,f,lb,w':['叔母'],
'{M-1},f,m':['母'],
'{M-1},f,m,f':['外祖父'],
'{M-1},f,m,m':['外祖母'],
'{M-1},f,xb':['叔兄弟'],
'{M-1},f,xb,w':['叔兄弟妇'],
'{M-1},f,ob':['叔兄'],
'{M-1},f,ob,w':['叔兄妇'],
'{M-1},f,lb':['叔弟'],
'{M-1},f,lb,w':['叔弟妇'],
'{M-1},f,xb,s':['叔男'],
'{M-1},f,xb,d':['叔女'],
'{M-1},f,xs':['姑姊妹'],
'{M-1},f,xs,h':['姑姊妹壻'],
'{M-1},f,os':['姑姊'],
'{M-1},f,os,h':['姑姊壻'],
'{M-1},f,ls':['姑妹'],
'{M-1},f,ls,h':['姑妹壻'],
'{M-1},f,xs,s':['姑男'],
'{M-1},f,xs,d':['姑女'],
'{M-1},m':['姊妹'],
'{M-1},m&o':['姊'],
'{M-1},m&l':['妹'],
'{M-1},m,f':['父'],
'{M-1},m,f,f':['祖父'],
'{M-1},m,f,m':['祖母'],
'{M-1},m,m':['母'],
'{M-1},m,m,f':['外祖父'],
'{M-1},m,m,m':['外祖母'],
'{M-1},m,xb':['舅兄弟'],
'{M-1},m,xb,w':['舅兄弟妇'],
'{M-1},m,ob':['舅兄'],
'{M-1},m,ob,w':['舅兄妇'],
'{M-1},m,lb':['舅弟'],
'{M-1},m,lb,w':['舅弟妇'],
'{M-1},m,xb,s':['舅男'],
'{M-1},m,xb,d':['舅女'],
'{M-1},m,xs':['姨姊妹'],
'{M-1},m,xs,h':['姨姊妹壻'],
'{M-1},m,os':['姨姊'],
'{M-1},m,os,h':['姨姊壻'],
'{M-1},m,ls':['姨妹'],
'{M-1},m,ls,h':['姨妹壻'],
'{M-1},m,xs,s':['姨男'],
'{M-1},m,xs,d':['姨女'],
'{M-1},xb':['男'],
'{M-1},xb,w':['妇'],
'{M-1},xb,s':['孙男'],
'{M-1},xb,s,w':['孙妇'],
'{M-1},xb,d':['孙女'],
'{M-1},xb,d,h':['孙婿'],
'{M-1},xs':['女'],
'{M-1},xs,h':['婿'],
'{M-1},xs,s':['外孙男'],
'{M-1},xs,s,w':['外孙妇'],
'{M-1},xs,d':['外孙女'],
'{M-1},xs,d,h':['外孙婿'],
'{M-2},f':['男'],
'{M-2},m':['女'],
'{M-2},[f|m],f&o':['兄'],
'{M-2},[f|m],f&l':['弟'],
'{M-2},[f|m],m&o':['姊'],
'{M-2},[f|m],m&l':['妹'],
'{M-2},xb':['孙男'],
'{M-2},xb,w':['孙妇'],
'{M-2},xs':['孙女'],
'{M-2},xs,h':['孙婿'],
};

17
src/module/data/input.js Normal file
View File

@ -0,0 +1,17 @@
/*
* 只作为输入关系链判断
*/
export default {
'xb':['兄弟','亲兄弟','同胞兄弟'],
'xb,w':['兄弟媳妇','兄弟妇'],
'xs':['姐妹','亲姐妹','同胞姐妹'],
'xs,h':['姐妹夫','姊妹婿'],
'f,xb':['伯叔父'],
'f,xb,w':['伯叔母'],
'f,f,xb':['从祖祖父','从祖父'],
'f,f,xb,w':['从祖祖母','从祖母'],
'm,f,xb':['外从祖祖父'],
'm,f,xb,w':['外从祖祖母'],
'h,xb':['伯叔'],
'h,xb,w':['妯娌','娣姒','娣姒姊妹','婶子'],
};

473
src/module/data/main.js Normal file
View File

@ -0,0 +1,473 @@
/*
* 主要关系链
*/
export default {
'':['自己','我','俺','吾','本人','在下'],
// 主线
'f,f,f,f,f,f,f,f,f,f,f,f':['先祖父','先太爷','十二世祖'],
'f,f,f,f,f,f,f,f,f,f,f,m':['先祖母','先太奶'],
'f,f,f,f,f,f,f,f,f,f,f':['始祖父','始太爷','十一世祖'],
'f,f,f,f,f,f,f,f,f,f,m':['始祖母','始太奶'],
'f,f,f,f,f,f,f,f,f,f':['开祖父','开太爷','十世祖'],
'f,f,f,f,f,f,f,f,f,m':['开祖母','开太奶'],
'f,f,f,f,f,f,f,f,f':['鼻祖父','鼻太爷','九世祖'],
'f,f,f,f,f,f,f,f,m':['鼻祖母','鼻太奶'],
'f,f,f,f,f,f,f,f':['远祖父','远太爷','八世祖'],
'f,f,f,f,f,f,f,m':['远祖母','远太奶'],
'f,f,f,f,f,f,f':['太祖父','太太爷','七世祖'],
'f,f,f,f,f,f,m':['太祖母','太太奶'],
'f,f,f,f,f,f':['烈祖父','烈太爷','六世祖'],
'f,f,f,f,f,m':['烈祖母','烈太奶'],
'f,f,f,f,f':['天祖父','天太爷','五世祖'],
'f,f,f,f,m':['天祖母','天太奶'],
// 高祖辈
'f,f,f,f':['高祖父','外曾外曾外毑父','曾曾祖父','祖太公','祖太爷','高太爷','祖太翁','祖太爷爷','四世祖'],
'f,f,f,m':['高祖母','外曾外曾外毑母','曾曾祖母','祖太婆','祖太奶','高太奶','祖太姆','祖太奶奶'],
'f,f,m,f':['高外祖父','外曾外曾毑父','高外翁'],
'f,f,m,m':['高外祖母','外曾外曾毑母','高外婆'],
'f,m,f,f':['曾外曾祖父','外高外毑父'],
'f,m,f,m':['曾外曾祖母','外高外毑母'],
'f,m,m,f':['曾外曾外祖父','外高毑父'],
'f,m,m,m':['曾外曾外祖母','外高毑母'],
'm,f,f,f':['外高祖父','曾外曾外毑父'],
'm,f,f,m':['外高祖母','曾外曾外毑母'],
'm,f,m,f':['外高外祖父','曾外曾祖毑父'],
'm,f,m,m':['外高外祖母','曾外曾祖毑母'],
'm,m,f,f':['外曾外曾祖父','高外毑父'],
'm,m,f,m':['外曾外曾祖母','高外毑母'],
'm,m,m,f':['外曾外曾外祖父','高毑父'],
'm,m,m,m':['外曾外曾外祖母','高毑母'],
// 曾祖辈
'f,f,f':['曾祖父','曾祖','外曾外毑父','太公','太爷','老太爷','太翁','太爷爷','曾爷爷','公太','佬嗲','祖爷','三世祖'],
'f,f,m':['曾祖母','外曾外毑母','太婆','太奶','老太奶','太嬷','太姆','太奶奶','曾奶奶','婆太','老娭毑'],
'f,m,f':['曾外祖父','曾外祖','外曾毑父','太外公','太外爷','太外翁','太外爷爷'],
'f,m,m':['曾外祖母','外曾毑母','太外婆','太外奶','太外嬷','太外姆','太外奶奶'],
'm,f,f':['外曾祖父','外曾祖','曾外毑父','外太公','外太爷','外太翁','外太爷爷'],
'm,f,m':['外曾祖母','曾外毑母','外太婆','外太奶','外太嬷','外太姆','外太奶奶'],
'm,m,f':['外曾外祖父','外曾外祖','曾毑父','外太外公','外太外爷','外太外翁','外太外爷爷','外太姥爷'],
'm,m,m':['外曾外祖母','曾毑母','外太外婆','外太外奶','外太外嬷','外太外姆','外太外奶奶','外太姥姥'],
// 祖父辈
'f,f':['爷爷','祖父','祖公','阿爷','阿公','奶爹','亚爷','亚公','依爷','大父','祖翁','嗲嗲','爷','祖君','奶爷','爷儿','爷老','爷老子','爷老倌','二世祖'],
'f,m':['奶奶','祖母','祖婆','阿奶','阿婆','奶娘','亚嬷','亚婆','依奶','大母','祖嫲','嫲嫲','奶','重慈','阿嬷','婻婻','娭毑','嗯奶','娘姆','媪婆','亲婆'],
'm,f':['外公','外祖父','姥爷','阿公','外爷','客公','毑父','毑公','姥公','舅家爷','嘎公','嘎爹','嘎嘎爹','嘎爷爷','尕公','毑爹','毑爷','外大父','姥爹','魏公','魏爷','简爷'],
'm,m':['外婆','外祖母','姥姥','阿婆','外奶','客婆','毑母','毑婆','姥婆','舅家婆','嘎嘎','嘎婆','嘎嘎婆','嘎奶奶','尕婆','毑娘','毑毑','外大母','姥娘','魏婆','魏奶','简婆','阿嬷','外嬷','嫲嫲','好婆','嫏嫏','嫏娘','姥'],
'f,f,ob':['伯公','伯祖','伯翁','大爷爷','大嗲','大爷','大公','大阿爷'],
'f,f,ob,w':['伯婆','姆婆','大奶奶','伯娭毑'],
'f,f,lb':['叔公','叔祖','叔翁','小爷爷','晚公','幺爷','细嗲'],
'f,f,lb,w':['叔婆','婶婆','小奶奶','叔娭毑','晚婆','幺奶'],
'f,f,xs':['姑奶奶','祖姑','姑奶','恩婆','姑娭毑'],
'f,f,xs,h':['姑爷爷','祖姑丈','恩爹','姑丈公','丈公'],
'f,m,ob':['大舅爷','大舅爹'],
'f,m,ob,w':['大舅婆'],
'f,m,lb':['小舅爷','小舅爹'],
'f,m,lb,w':['小舅婆'],
'f,m,xb':['舅爷爷','舅祖','舅爹','太舅父'],
'f,m,xb,w':['舅奶奶','妗婆','舅婆','妗奶','太舅母'],
'f,m,xs':['姨奶奶','姨奶','姨娭毑'],
'f,m,xs,h':['姨爷爷','姨公公','姨爹','姨丈公','丈公'],
'm,f,ob':['伯外公','外伯祖','伯外祖','大外公','大姥爷','大外爷'],
'm,f,ob,w':['伯外婆','外姆婆','大外婆','大姥姥','大姥奶'],
'm,f,lb':['叔外公','外叔祖','叔外祖','小外公','小姥爷','小外爷'],
'm,f,lb,w':['叔外婆','外婶婆','小外婆','小姥姥','婶姥姥','小姥奶'],
'm,f,xs':['姑外婆','姑婆','恩婆'],
'm,f,xs,h':['姑外公','姑公','恩爹','外姑丈公','外丈公'],
'm,m,xb':['舅外公','舅公','舅爹'],
'm,m,xb,w':['舅外婆','舅婆','妗姥姥','妗姥娘','妗姥','外妗婆'],
'm,m,xs':['姨外婆','姨婆'],
'm,m,xs,h':['姨外公','姨公','外姨丈公','外丈公'],
// 父系
'f':['爸爸','父亲','老父亲','老爸','阿爸','阿父','阿爹','老窦','爹地','依爹','老爹','老汉','老爷子','老子','牙老子','爸','父','爹','老汉儿','牙老倌','爸比','爹爹','爹啲','一世祖'],
'f,ob':['伯父','伯伯','伯爸','阿伯','伯爷','依伯','伯儿','大伯','大爹','大爸','大爸爸','世父','大爷','大大','几伯','伯'],
'f,ob,w':['伯母','伯妈','伯娘','依姆','世母','大娘','伯妇','大嬷','大妈','大妈妈','大姆妈','伯姐','姆'],
'f,lb':['叔叔','叔父','叔爸','阿叔','叔爹','依叔','叔儿','小叔','小爹','小爸','小爸爸','仲父','季父','叔仔','几叔','叔'],
'f,lb,w':['婶婶','叔母','叔妈','阿婶','叔娘','依婶','婶儿','小婶','小娘','小妈','小妈妈','仲母','季母','叔妇','几婶','婶','婶母','婶妈','婶娘','婶子','家婶','婶爹','嬢嬢'],
'f,xb,s&o':['堂哥','堂老兄'],
'f,xb,s&o,w':['堂嫂','堂兄嫂'],
'f,xb,s&l':['堂弟','堂老弟'],
'f,xb,s&l,w':['堂弟媳','堂弟妇','堂弟妹'],
'f,xb,s,s':['堂侄','再从子'],
'f,xb,s,s,w':['堂侄媳妇'],
'f,xb,s,s,s':['堂侄孙','再从孙'],
'f,xb,s,s,s,s':['堂曾孙','再曾孙'],
'f,xb,s,s,s,s,s':['堂玄孙','再玄孙'],
'f,xb,s,d':['堂侄女'],
'f,xb,s,d,h':['堂侄女婿'],
'f,xb,d&o':['堂姐','堂大姐'],
'f,xb,d&o,h':['堂姐夫'],
'f,xb,d&l':['堂妹','堂细妹'],
'f,xb,d&l,h':['堂妹夫'],
'f,xb,d,s':['堂外甥'],
'f,xb,d,s,w':['堂外甥媳妇'],
'f,xb,d,d':['堂外甥女'],
'f,xb,d,d,h':['堂外甥女婿'],
'f,os':['大姑','姑姊','姑嬷'],
'f,os,h':['大姑丈','大姑夫','恩伯'],
'f,ls':['小姑','姑姐','姑妹','姑仔','尕娘','幺姑姐','老姑'],
'f,ls,h':['小姑丈','小姑夫','恩叔'],
'f,xs':['姑妈','姑母','姑姑','恩妈','几姑','姑','嬢嬢','娘娘'],
'f,xs,h':['姑丈','姑父','姑爸','恩爸','姑伯','姑爹','姑夫','姑婿','姑郎','亘'],
'f,f,xb,s&o':['堂伯'],
'f,f,xb,s&o,w':['堂伯母'],
'f,f,xb,s&l':['堂叔'],
'f,f,xb,s&l,w':['堂婶'],
'f,f,xb,s':['堂伯叔父','堂叔伯','从父'],
'f,f,xb,s,w':['堂伯叔母','从母'],
'f,f,xb,s,s&o':['从堂兄'],
'f,f,xb,s,s&l':['从堂弟'],
'f,f,xb,s,s,s':['从堂侄','三从子'],
'f,f,xb,s,s,s,s':['从堂侄孙','三从孙'],
'f,f,xb,s,s,s,s,s':['从堂侄曾孙','三曾孙'],
'f,f,xb,s,s,s,s,s,s':['从堂侄玄孙','三玄孙'],
'f,f,xb,d':['堂姑'],
'f,f,xb,d,h':['堂姑丈'],
'f,f,f,xb':['伯叔曾祖父'],
'f,f,f,xb,w':['伯叔曾祖母'],
'f,f,f,xb,s':['堂伯叔祖父'],
'f,f,f,xb,s,w':['堂伯叔祖母'],
'f,f,f,xb,s,s&o':['从伯父'],
'f,f,f,xb,s,s&o,w':['从伯母'],
'f,f,f,xb,s,s&l':['从叔父'],
'f,f,f,xb,s,s&l,w':['从叔母'],
'f,f,f,xb,s,s':['从伯叔父','再从父'],
'f,f,f,xb,s,s,w':['从伯叔母','再从母'],
'f,f,f,xb,s,s,s&o':['族兄'],
'f,f,f,xb,s,s,s&l':['族弟'],
'f,f,f,xb,s,s,s,s':['族侄','四从子','族子'],
'f,f,f,xb,s,s,s,s,s':['族侄孙','四从孙','族孙'],
'f,f,f,xb,s,s,s,s,s,s':['族侄曾孙','四曾孙','族曾孙'],
'f,f,f,xb,s,s,s,s,s,s,s':['族侄玄孙','四玄孙','族玄孙'],
'f,f,f,f,xb':['伯叔高祖父'],
'f,f,f,f,xb,w':['伯叔高祖母'],
'f,f,f,f,xb,s':['堂伯叔曾祖父'],
'f,f,f,f,xb,s,w':['堂伯叔曾祖母'],
'f,f,f,f,xb,s,s':['从伯叔祖父'],
'f,f,f,f,xb,s,s,w':['从伯叔祖母'],
'f,f,f,f,xb,s,s,s&o':['族伯父'],
'f,f,f,f,xb,s,s,s&o,w':['族伯母'],
'f,f,f,f,xb,s,s,s&l':['族叔父'],
'f,f,f,f,xb,s,s,s&l,w':['族叔母'],
'f,f,f,f,xb,s,s,s':['族伯叔父','三从父','族父'],
'f,f,f,f,xb,s,s,s,w':['族伯叔母','三从母','族母'],
// 母系
'm':['妈妈','母亲','老母亲','老妈','阿妈','阿母','阿娘','老母','妈咪','依妈','老娘','老乸','老妈子','妈子','娘老子','妈','母','娘','阿毑','姆嬷','姆妈','娘亲'],
'm,ob':['大舅','大舅舅','舅伯','元舅'],
'm,ob,w':['大舅妈','大妗','舅嬷'],
'm,lb':['小舅','小舅舅','舅仔','舅父仔','尕阿舅','老舅'],
'm,lb,w':['小舅妈','小妗','细妗'],
'm,xb':['舅舅','舅爸','舅父','舅爹','娘舅','母舅','阿舅','妗公','舅台','几舅','舅'],
'm,xb,w':['舅妈','舅母','舅娘','娘妗','舅妻','舅姆','舅姆妈','舅媳妇','舅妇','舅姥','舅毑','老妗','妗子','妗妗','妗妗儿','妗爹','妗娘','妗爸','妗妈','妗母','阿妗','妗门','妗婆仔','妗儿妈','娘妗子','妗','嬢嬢'],
'm,os':['大姨','姨嬷'],
'm,os,h':['大姨丈','大姨父','大姨夫','姨伯'],
'm,ls':['小姨','姨仔','老姨'],
'm,ls,h':['小姨丈','小姨父','小姨夫','姨叔'],
'm,xs':['姨妈','姨母','姨姨','姨娘','阿姨','从母','几姨','姨','嬢嬢'],
'm,xs,h':['姨丈','姨父','姨夫','姨爸','姨爹','姨婿','姨郎','尹'],
'm,f,xb,s':['堂舅'],
'm,f,xb,s,w':['堂舅妈'],
'm,f,xb,d':['堂姨'],
'm,f,xb,d,h':['堂姨丈'],
// 婆家
'h,f,f,f':['曾祖公父','曾祖公','太公翁'],
'h,f,f,m':['曾祖婆母','曾祖婆','太奶亲'],
'h,f,m,f':['曾外祖公父','曾外祖公'],
'h,f,m,m':['曾外祖婆母','曾外祖婆'],
'h,m,f,f':['外曾祖公父','外曾祖公'],
'h,m,f,m':['外曾祖婆母','外曾祖婆'],
'h,m,m,f':['外曾外祖公父','外曾外祖公'],
'h,m,m,m':['外曾外祖婆母','外曾外祖婆'],
'h,f,f,f,ob':['伯曾祖公父','伯曾祖公','太伯翁'],
'h,f,f,f,ob,w':['伯曾祖婆母','伯曾祖婆','太姆婆'],
'h,f,f,f,lb':['叔曾祖公父','叔曾祖公','太叔翁'],
'h,f,f,f,lb,w':['叔曾祖婆母','叔曾祖婆','太婶婆'],
'h,f,f,f,xs':['姑曾祖婆母','姑曾祖婆'],
'h,f,f,f,xs,h':['姑曾祖公父','姑曾祖婆'],
'h,f,f':['祖公父','祖公','祖公公','祖翁','奶公父'],
'h,f,m':['祖婆母','祖婆','祖婆婆','奶婆母'],
'h,m,f':['外祖公父','毑公父','外祖公','外祖公公','姥公父','姥公'],
'h,m,m':['外祖婆母','毑婆母','外祖婆','外祖婆婆','姥婆母','姥婆'],
'h,f':['公公','公父','家公','家爷','大官','老公公','老人公','大人公','公公爸','公爹','翁亲','君舅','老公爹','家官','老官','婆父','婆爹'],
'h,m':['婆婆','婆母','家婆','家娘','大家','老婆婆','老人婆','大人婆','婆婆妈','婆妈','姑亲','君姑','婆母娘','婆子妈','阿姑'],
'h,f,ob':['伯公父','伯公','伯翁','伯公公','伯祖','婆婆伯'],
'h,f,ob,w':['伯婆母','伯婆','姆婆','伯婆婆','伯姆','婆婆伯姆'],
'h,f,lb':['叔公父','叔公','叔翁','叔公公','叔祖','婆婆叔'],
'h,f,lb,w':['叔婆母','叔婆','婶婆','婶婆婆','婶亲','婆婆婶子'],
'h,f,xs':['姑婆母','姑婆','姑婆婆','婆婆姑'],
'h,f,xs,h':['姑公父','姑公','姑公公','婆婆姑夫'],
'h,m,xb':['舅公父','舅公','舅公公'],
'h,m,xb,w':['舅婆母','舅婆','妗婆婆','舅婆婆'],
'h,m,xs':['姨婆母','姨婆','姨婆婆'],
'h,m,xs,h':['姨公父','姨公','姨公公'],
'h':['老公','丈夫','先生','夫','男人','新郎','爱爷','夫亲','夫君','官人','汉子','老头子','郎君','相公','夫婿','良人','老公仔','爱人','老伴','那口子','配偶','伴侣','伉俪','卿卿'],
'h,ob':['大伯子','大伯儿','大伯兄','伯子','伯仔','伯兄','阿伯','大伯爷','伯爷子','婿伯'],
'h,ob,w':['大婶子','大婶儿','大叔兄妇','伯兄妇','伯嫂','伯妇','伯姆','姒妇','姒姆','大伯嫂','姆姆','大姆','大伯妇','大伯娘','姐妇','阿姆'],
'h,lb':['小叔子','小叔儿','小叔弟','叔子','叔仔','叔弟','阿叔','叔郎','小郎'],
'h,lb,w':['小婶子','小婶儿','小叔弟妇','叔弟妇','叔嫂','叔妇','叔姆','娣妇','娣姆','小叔妇','婶婶','小婶','小婶婶'],
'h,xb,s':['叔侄'],
'h,xb,d':['叔侄女'],
'h,os':['大姑子','大姑姐','大姑儿','大姑娘','姑姊','婆姐','婆婆姐','大娘姑'],
'h,os,h':['大姑夫','大姑姐夫','大亘子','婆姐夫','婆婆姐夫'],
'h,ls':['小姑子','小姑妹','小姑儿','小姑娘','姑妹','婆妹','婆婆妹'],
'h,ls,h':['小姑夫','小姑妹夫','小亘子','婆妹夫','婆婆妹夫'],
'h,xs':['姑子','夫姑'],
'h,xs,h':['姑夫','姑郎'],
'h,xs,s':['姑甥'],
'h,xs,d':['姑甥女'],
// 岳家
'w,f,f,f':['曾祖岳父','曾祖丈人','太爷丈人','祖爷丈人'],
'w,f,f,m':['曾祖岳母','曾祖丈母','曾祖丈母娘','祖奶丈母娘','太奶丈母娘'],
'w,f,m,f':['曾外祖岳父','曾外祖丈人','祖姥爷丈人','太姥爷丈'],
'w,f,m,m':['曾外祖岳母','曾外祖丈母','曾外祖丈母娘','祖姥丈母娘','太姥丈母娘'],
'w,m,f,f':['外曾祖岳父','外曾祖丈人','祖奶爷丈人','太奶爷丈人','祖姥爷丈人','太姥爷丈人'],
'w,m,f,m':['外曾祖岳母','外曾祖丈母','太奶丈母娘','祖姥丈母娘','太姥丈母娘'],
'w,m,m,f':['外曾外祖岳父','外曾外祖丈人','祖姥爷丈人','太姥爷丈人'],
'w,m,m,m':['外曾外祖岳母','外曾外祖丈母','外曾外祖丈母娘','祖姥丈母娘','太姥丈母娘'],
'w,f,f':['祖岳父','太岳父','奶岳父','祖丈人','爷丈人','奶爷丈人','奶丈爷','奶丈人','老丈爷'],
'w,f,m':['祖岳母','太岳母','奶岳母','祖丈母','祖丈母娘','奶丈母娘','奶丈姥','奶丈母','老丈姥'],
'w,f,ob':['伯岳父'],
'w,f,ob,w':['伯岳母'],
'w,f,lb':['叔岳父'],
'w,f,lb,w':['叔岳母'],
'w,f,f,xb,s&o':['姻伯丈'],
'w,f,f,xb,s&o,w':['姻姆'],
'w,f,f,xb,s&l':['姻叔丈'],
'w,f,f,xb,s&l,w':['姻婶'],
'w,m,f':['外祖岳父','毑岳父','外祖丈人爹','外祖丈人','外太岳父','姥岳父','姥丈爷','姥丈人','姥丈人爹','老丈爷','姥爷丈人'],
'w,m,m':['外祖岳母','毑岳母','外祖丈母娘','外祖丈母','外太岳母','姥岳母','姥丈姥','姥丈母','姥丈母娘','老丈娘'],
'w,f':['岳父','丈人','老丈人','外父','泰山','外舅','老亲爷','丈人爹','老干爷','丈人公','丈母爷','丈爷','丈爷爹','丈父','岳老子','老丈杆子','岳丈','岳翁','妻公','妇翁','冰翁'],
'w,m':['岳母','丈母','老丈母','外母','泰水','外姑','老亲娘','丈人娘','老干娘','丈人婆','丈母娘','丈姥','丈姥娘','丈姆','岳母娘','丈母婆','丈姆婆','丈姆娘'],
'w':['老婆','妻子','媳妇','媳妇儿','媳妇子','太太','妻','女人','新娘','爱姥','妻亲','娘子','新娘子','夫人','婆娘','老太婆','内人','内子','内助','贤内助','爱妻','发妻','婆姨','婆子','老婆子','老婆儿','老婆仔','堂客','爱人','老伴','那口子','配偶','伴侣','伉俪','卿卿'],
'w,ob':['大舅子','大舅哥','大舅佬','大阿舅','丈人兄','舅哥'],
'w,ob,w':['大舅妇','大妗子','大妗儿','大舅姆','大舅兄嫂','大舅嫂','大舅姐','大舅媳妇','丈人嫂'],
'w,lb':['小舅子','小舅弟','小舅佬','小阿舅','丈人弟','舅弟'],
'w,lb,w':['小舅妇','小妗子','小妗儿','小舅姆','小舅弟妇','小舅嫂','舅弟媳','小舅妹','小舅媳妇'],
'w,xb':['舅子','舅佬','妻舅','老婆舅','阿舅','亲家舅','舅老倌'],
'w,xb,w':['舅嫂','舅妇','舅姆','妻妗','妗仔','妗子','妗儿'],
'w,xb,s':['舅侄'],
'w,xb,d':['舅侄女'],
'w,os':['大姨子','大姨姐','大姨儿','姨姐'],
'w,os,h':['大姨夫','大姨姐夫','姨姐夫','襟兄','大尹子'],
'w,ls':['小姨子','小姨妹','小茙儿','姨妹','姨仔','姨妹子'],
'w,ls,h':['小姨夫','小姨妹夫','姨妹夫','小茙夫','襟弟','小尹子'],
'w,xs':['姨子','妻姨'],
'w,xs,h':['连襟','姨夫','连桥','两桥','两乔','姨夫爷','老襟','一担挑','老挑','挑担','担儿挑','连襟儿','襟兄弟','友婿','妻尹','娅'],
'w,xs,s':['姨甥'],
'w,xs,d':['姨甥女'],
// 兄弟姐妹系
'ob':['哥哥','哥','胞兄','亲哥','兄亲','老哥','依哥','阿哥','兄台','大佬','家兄','兄长','元兄','长兄','几哥'],
'ob,w':['嫂子','嫂','嫂嫂','阿嫂','家嫂','兄姊','兄嫂','兄妇','兄妻','几嫂'],
'ob,s':['侄子','兄子'],
'ob,d':['侄女','兄女'],
'lb':['弟弟','弟','胞弟','亲弟','弟亲','老弟','依弟','阿弟','弟子','细佬','小弟','几弟'],
'lb,w':['弟妹','弟媳','弟媳妇','弟媳妇子','弟新妇','老弟嫂'],
'lb,s':['侄子','弟子'],
'lb,d':['侄女','弟女'],
'xb,s':['侄子','侄男','侄儿子','侄小子','嫡侄','亲侄','侄儿','侄仔','阿侄','老侄','侄'],
'xb,s,w':['侄媳妇','侄媳','侄嫂','侄妇'],
'xb,d':['侄女','侄囡','侄女儿','侄丫头','侄闺女'],
'xb,d,h':['侄女婿','侄婿','侄郎'],
'os':['姐姐','姐','胞姐','亲姐','姊亲','老姐','依姐','阿姐','姊台','家姐','长姐','姊仔','几姐'],
'os,h':['姐夫','姐丈','姐婿','姐郎','姊兄','姐夫哥','胞姐夫'],
'ls':['妹妹','妹','胞妹','亲妹','妹亲','老妹','依妹','阿妹','妹子','小妹','妹儿','几妹'],
'ls,h':['妹夫','妹丈','妹婿','妹郎','妹弟','妹夫子','胞妹夫'],
'xs,s':['外甥','甥子','甥男','甥儿','甥儿子','甥仔','甥'],
'xs,s,w':['甥媳妇','甥媳','甥嫂','甥妇','甥儿息妇儿'],
'xs,s,s':['甥孙','远甥','弥甥'],
'xs,s,d':['甥孙女','远甥女','弥甥女'],
'xs,d':['外甥女','甥女','甥囡','甥女儿','甥闺女'],
'xs,d,h':['甥女婿','甥婿','甥郎','甥儿息婿儿'],
// 子系
's':['儿子','男儿','息男','闺男','囝囝','囝男','囝儿','小子','娃子','男亲','伢子','长子','次子','幼子','儿','仔','囝','子','阿仔','仔仔','后生','公子','少爷','一世孙'],
's,w':['儿媳','儿媳妇','息妇儿','儿媳妇儿','新妇','新妇囝','心抱','息妇','儿妇','子妇','小妇','少奶奶','少夫人'],
's,w,f':['亲家公'],
's,w,f,f&o':['姻伯'],
's,w,f,f&l':['姻叔'],
's,w,m':['亲家母'],
's,w,xb':['姻侄','世侄'],
's,w,xb,w':['姻侄媳'],
's,w,xb,s':['姻侄孙'],
's,w,xb,d':['姻侄孙女'],
's,w,xs':['姻侄女'],
's,w,xs,h':['姻侄婿'],
's,w,xs,s':['姻侄外孙'],
's,w,xs,d':['姻侄外孙女'],
's,s':['孙子','孙男','孙男儿','孙儿','长孙','嗣孙','孙仔','孙囝','孙娃子','孙伢子','二世孙'],
's,s,w':['孙媳妇','孙媳','孙妇','孙息妇','孙新妇'],
's,s,s':['曾孙','曾孙男','重孙','重孙子','息仔','三世孙'],
's,s,s,w':['曾孙妇','重孙媳妇'],
's,s,s,s':['玄孙','元孙','膀孙','重重孙','四世孙'],
's,s,s,s,w':['玄孙媳妇'],
's,s,s,s,s':['来孙','五世孙'],
's,s,s,s,s,w':['来孙媳妇'],
's,s,s,s,s,s':['晜孙','昆孙','六世孙'],
's,s,s,s,s,s,w':['晜孙媳妇'],
's,s,s,s,s,s,s':['仍孙','礽孙','七世孙'],
's,s,s,s,s,s,s,w':['仍孙媳妇'],
's,s,s,s,s,s,s,s':['云孙','八世孙'],
's,s,s,s,s,s,s,s,w':['云孙媳妇'],
's,s,s,s,s,s,s,s,s':['耳孙','远孙','裔孙','季孙','九世孙'],
's,s,s,s,s,s,s,s,s,w':['耳孙媳妇'],
's,s,s,s,s,s,s,s,s,s':['弥孙','十世孙'],
's,s,s,s,s,s,s,s,s,s,w':['弥孙媳妇'],
's,s,s,s,s,s,s,s,s,s,s':['胎孙','十一世孙'],
's,s,s,s,s,s,s,s,s,s,s,w':['胎孙媳妇'],
's,s,s,s,s,s,s,s,s,s,s,s':['承孙','十二世孙'],
's,s,s,s,s,s,s,s,s,s,s,s,w':['承孙媳妇'],
's,s,s,s,s,s,s,s,s,s,s,d':['承孙女'],
's,s,s,s,s,s,s,s,s,s,s,d,h':['承孙女婿'],
's,s,s,s,s,s,s,s,s,s,d':['胎孙女'],
's,s,s,s,s,s,s,s,s,s,d,h':['胎孙女婿'],
's,s,s,s,s,s,s,s,s,s,d,s':['承外孙'],
's,s,s,s,s,s,s,s,s,s,d,s,w':['承外孙媳妇'],
's,s,s,s,s,s,s,s,s,s,d,d':['承外孙女'],
's,s,s,s,s,s,s,s,s,s,d,d,h':['承外孙女婿'],
's,s,s,s,s,s,s,s,s,d':['弥孙女'],
's,s,s,s,s,s,s,s,s,d,h':['弥孙女婿'],
's,s,s,s,s,s,s,s,s,d,s':['胎外孙'],
's,s,s,s,s,s,s,s,s,d,s,w':['胎外孙媳妇'],
's,s,s,s,s,s,s,s,s,d,d':['胎外孙女'],
's,s,s,s,s,s,s,s,s,d,d,h':['胎外孙女婿'],
's,s,s,s,s,s,s,s,d':['耳孙女'],
's,s,s,s,s,s,s,s,d,h':['耳孙女婿'],
's,s,s,s,s,s,s,s,d,s':['弥外孙'],
's,s,s,s,s,s,s,s,d,s,w':['弥外孙媳妇'],
's,s,s,s,s,s,s,s,d,d':['弥外孙女'],
's,s,s,s,s,s,s,s,d,d,h':['弥外孙女婿'],
's,s,s,s,s,s,s,d':['云孙女'],
's,s,s,s,s,s,s,d,h':['云孙女婿'],
's,s,s,s,s,s,s,d,s':['耳外孙'],
's,s,s,s,s,s,s,d,s,w':['耳外孙媳妇'],
's,s,s,s,s,s,s,d,d':['耳外孙女'],
's,s,s,s,s,s,s,d,d,h':['耳外孙女婿'],
's,s,s,s,s,s,d':['仍孙女','礽孙女'],
's,s,s,s,s,s,d,h':['仍孙女婿'],
's,s,s,s,s,s,d,s':['云外孙'],
's,s,s,s,s,s,d,s,w':['云外孙媳妇'],
's,s,s,s,s,s,d,d':['云外孙女'],
's,s,s,s,s,s,d,d,h':['云外孙女婿'],
's,s,s,s,s,d':['晜孙女'],
's,s,s,s,s,d,h':['晜孙女婿'],
's,s,s,s,s,d,s':['仍外孙'],
's,s,s,s,s,d,s,w':['仍外孙媳妇'],
's,s,s,s,s,d,d':['仍外孙女'],
's,s,s,s,s,d,d,h':['仍外孙女婿'],
's,s,s,s,d':['来孙女'],
's,s,s,s,d,h':['来孙女婿'],
's,s,s,s,d,s':['晜外孙'],
's,s,s,s,d,s,w':['晜外孙媳妇'],
's,s,s,s,d,d':['晜外孙女'],
's,s,s,s,d,d,h':['晜外孙女婿'],
's,s,s,d':['玄孙女','元孙女','膀孙女'],
's,s,s,d,h':['玄孙女婿'],
's,s,s,d,s':['来外孙'],
's,s,s,d,s,w':['来外孙媳妇'],
's,s,s,d,d':['来外孙女'],
's,s,s,d,d,h':['来外孙女婿'],
's,s,d':['曾孙女','重孙女','息女'],
's,s,d,h':['曾孙女婿'],
's,s,d,s':['玄外孙'],
's,s,d,s,w':['玄外孙媳妇'],
's,s,d,d':['玄外孙女'],
's,s,d,d,h':['玄外孙女婿'],
's,d':['孙女','孙女儿','孙囡','孙囡儿','女孙','孙女子'],
's,d,h':['孙女婿','孙婿','孙郎','孙息婿'],
's,d,s':['曾外孙','外息仔'],
's,d,s,w':['曾外孙媳妇'],
's,d,s,s':['曾外曾孙'],
's,d,s,s,w':['曾外曾孙媳妇'],
's,d,s,d':['曾外曾孙女'],
's,d,s,d,h':['曾外曾孙女婿'],
's,d,d':['曾外孙女','外息女'],
's,d,d,h':['曾外孙女婿'],
's,d,d,s':['曾外曾外孙'],
's,d,d,s,w':['曾外曾外孙媳妇'],
's,d,d,d':['曾外曾外孙女'],
's,d,d,d,h':['曾外曾外孙女婿'],
'd':['女儿','千金','小姐','掌上明珠','息女','闺女','囡囡','囡女','囡儿','乖囡','囡嗯','丫头','姑娘','妮子','女亲','长女','次女','幼女','女','阿女','女女'],
'd,h':['女婿','姑爷','姑爷儿','女婿子','女婿儿','儿婿','子婿','息婿','小婿','快婿','郎婿','郎婿子','息婿儿','囝婿','囡婿','东床','半子','甥馆','女夫'],
'd,h,f':['亲家公'],
'd,h,f,f&o':['姻伯'],
'd,h,f,f&l':['姻叔'],
'd,h,m':['亲家母'],
'd,h,xb':['姻侄','世侄'],
'd,h,xb,w':['姻侄媳'],
'd,h,xb,s':['姻侄孙'],
'd,h,xb,d':['姻侄孙女'],
'd,h,xs':['姻侄女'],
'd,h,xs,h':['姻侄婿'],
'd,h,xs,s':['姻侄外孙'],
'd,h,xs,d':['姻侄外孙女'],
'd,s':['外孙','外孙子','外孙儿'],
'd,s,w':['外孙媳妇','外孙妇','外孙新妇'],
'd,s,s':['外曾孙','重外孙','外息仔'],
'd,s,s,w':['外曾孙媳妇','外曾孙妇'],
'd,s,s,s':['外玄孙','外元孙','外膀孙'],
'd,s,s,s,w':['外玄孙媳妇'],
'd,s,s,d':['外玄孙女','外元孙女','外膀孙女'],
'd,s,s,d,h':['外玄孙女婿'],
'd,s,d':['外曾孙女','重外孙女','外息女'],
'd,s,d,h':['外曾孙女婿','重外孙女婿'],
'd,s,d,s':['外玄外孙'],
'd,s,d,s,w':['外玄外孙媳妇'],
'd,s,d,d':['外玄外孙女'],
'd,s,d,d,h':['外玄外孙女婿'],
'd,d':['外孙女','外孙囡','外孙女儿'],
'd,d,h':['外孙女婿','外孙婿','外孙郎'],
'd,d,s':['外曾外孙','外息仔'],
'd,d,s,w':['外曾外孙媳妇'],
'd,d,s,s':['外曾外曾孙'],
'd,d,s,s,w':['外曾外曾孙媳妇'],
'd,d,s,d':['外曾外曾孙女'],
'd,d,s,d,h':['外曾外曾孙女婿'],
'd,d,d':['外曾外孙女','外息女'],
'd,d,d,h':['外曾外孙女婿'],
'd,d,d,s':['外曾外曾外孙'],
'd,d,d,s,w':['外曾外曾外孙媳妇'],
'd,d,d,d':['外曾外曾外孙女'],
'd,d,d,d,h':['外曾外曾外孙女婿'],
// 和性别相关
'1,xb,w,xb':['叔眷兄弟'],
'1,xb,w,xb,s':['叔眷舅男'],
'1,xb,w,xb,d':['叔眷舅女'],
'1,xb,w,xs':['叔眷姊妹'],
'1,xb,w,xs,s':['叔眷姨男'],
'1,xb,w,xs,d':['叔眷姨女'],
'1,xb,s':['从男','从子'],
'1,xb,s,s':['从孙'],
'1,xb,s,s,s':['从曾孙'],
'1,xb,s,s,s,s':['从玄孙'],
'1,xb,s,w':['从妇'],
'1,xb,d':['从女','从子'],
'1,xb,d,h':['从婿'],
'1,xs,h,xb':['姑姻兄弟'],
'1,xs,h,xb,s':['姑姻叔男'],
'1,xs,h,xb,d':['姑姻叔女'],
'1,xs,h,xs':['姑姻姊妹'],
'1,xs,h,xs,s':['姑姻姑男'],
'1,xs,h,xs,d':['姑姻姑女'],
'1,xs,s,s':['离孙男','离孙子'],
'1,xs,s,d':['离孙女'],
'0,xb,w,xb':['舅眷兄弟'],
'0,xb,w,xb,s':['舅眷舅男'],
'0,xb,w,xb,d':['舅眷舅女'],
'0,xb,w,xs':['舅眷姊妹'],
'0,xb,w,xs,s':['舅眷姨男'],
'0,xb,w,xs,d':['舅眷姨女'],
'0,xs,h,xb':['姨姻兄弟'],
'0,xs,h,xb,s':['姨姻叔男'],
'0,xs,h,xb,d':['姨姻叔女'],
'0,xs,h,xs':['姨姻姊妹'],
'0,xs,h,xs,s':['姨姻姑男'],
'0,xs,h,xs,d':['姨姻姑女'],
'0,xb,s':['娘家侄子','娘家侄'],
'0,xb,s,s':['归孙男','归孙子'],
'0,xb,s,d':['归孙女'],
'0,xb,d':['娘家侄女'],
'0,xs,s':['姨甥','姨甥男','从男','从子'],
'0,xs,s,w':['从妇'],
'0,xs,d':['姨甥女','从女','从子'],
'0,xs,d,h':['从婿'],
'0,xs,s,s':['姨甥孙','姨孙','姨甥孙男','姨孙男'],
'0,xs,s,d':['姨甥孙女','姨孙女'],
'0,xs,d,s':['姨甥外孙','姨外孙','姨甥外孙男','姨外孙男'],
'0,xs,d,d':['姨甥外孙女','姨外孙女'],
};

153
src/module/data/multiple.js Normal file
View File

@ -0,0 +1,153 @@
/*
* 并称关系链 - 某个称呼同时包含多层关系链
*/
export default {
'[f,f|f,m|m,f],[f,m],f':['老太奶爷','祖太奶爷'],
'[f,f|f,m|m,f],[f,m],m':['老太奶奶','祖太奶奶'],
'[f,m|m,f|m,m],[f,m],f':['老太姥爷','祖太姥爷'],
'[f,m|m,f|m,m],[f,m],m':['老太姥姥','祖太姥姥'],
'[f|m],[f|m],f':['太老爷'],
'[f|m],[f|m],f,ob':['伯太老爷'],
'[f|m],[f|m],f,ob,w':['伯太老姥'],
'[f|m],[f|m],f,lb':['叔太老爷'],
'[f|m],[f|m],f,lb,w':['叔太老姥'],
'[f|m],[f|m],f,xs':['姑太老姥'],
'[f|m],[f|m],f,xs,h':['姑太老爷'],
'[f|m],[f|m],m':['太老姥'],
'[f|m],[f|m],m,xb':['舅太老爷'],
'[f|m],[f|m],m,xb,w':['舅太老姥'],
'[f|m],[f|m],m,xs':['姨太老姥'],
'[f|m],[f|m],m,xs,h':['姨太老爷'],
'[f,f|f,m|m,f],f':['太奶爷','祖奶爷','祖爷爷'],
'[f,f|f,m|m,f],f,ob':['伯太奶爷','太伯奶爷'],
'[f,f|f,m|m,f],f,ob,w':['伯太奶奶','太伯奶奶'],
'[f,f|f,m|m,f],f,lb':['叔太奶爷','太叔奶爷'],
'[f,f|f,m|m,f],f,lb,w':['叔太奶奶','太叔奶奶'],
'[f,f|f,m|m,f],f,xs':['姑太奶奶','太姑奶奶'],
'[f,f|f,m|m,f],f,xs,h':['姑太奶爷','太姑奶爷'],
'[f,f|f,m|m,f],m':['太奶奶','祖奶奶'],
'[f,f|f,m|m,f],m,xb':['舅太奶爷','太舅奶爷'],
'[f,f|f,m|m,f],m,xb,w':['舅太奶奶','太舅奶奶'],
'[f,f|f,m|m,f],m,xs':['姨太奶奶','太姨奶奶'],
'[f,f|f,m|m,f],m,xs,h':['姨太奶爷','太姨奶爷'],
'[f,m|m,f|m,m],f':['太姥爷','祖姥爷','太毑爷'],
'[f,m|m,f|m,m],f,ob':['伯太姥爷','伯叔姥爷'],
'[f,m|m,f|m,m],f,ob,w':['伯太姥姥','太伯姥姥'],
'[f,m|m,f|m,m],f,lb':['叔太姥爷','太叔姥爷'],
'[f,m|m,f|m,m],f,lb,w':['叔太姥姥','太叔姥姥'],
'[f,m|m,f|m,m],f,xs':['姑太姥姥','太姑姥姥'],
'[f,m|m,f|m,m],f,xs,h':['姑太姥爷','太姑姥爷'],
'[f,m|m,f|m,m],m':['太姥姥','祖姥姥','太毑毑','太姥'],
'[f,m|m,f|m,m],m,xb':['舅太姥爷','太舅姥爷'],
'[f,m|m,f|m,m],m,xb,w':['舅太姥姥','太舅姥姥'],
'[f,m|m,f|m,m],m,xs':['姨太姥姥','太姨姥姥'],
'[f,m|m,f|m,m],m,xs,h':['姨太姥爷','太姨姥爷'],
'[f|m],[f|m],[f|m]':['曾祖辈','祖祖','老太','阿太'],
'[f|m],[f|m]':['祖辈'],
'[f|m],f':['老爷'],
'[f|m],f,ob':['伯老爷'],
'[f|m],f,ob,w':['伯老姥'],
'[f|m],f,lb':['叔老爷'],
'[f|m],f,lb,w':['叔老姥'],
'[f|m],f,xs':['姑老姥'],
'[f|m],f,xs,h':['姑老爷'],
'[f|m],m':['老姥'],
'[f|m],m,xb':['舅老爷'],
'[f|m],m,xb,w':['舅老姥'],
'[f|m],m,xs':['姨老姥'],
'[f|m],m,xs,h':['姨老爷'],
'f,f,[f|m]':['曾祖父母'],
'f,f,[f,xs|m,xb],s':['舅姑爷爷','舅姑爷'],
'f,[f|m]':['祖父母','爷爷奶奶'],
'f,[ob|ob,w]':['伯父母'],
'f,[lb|lb,w]':['叔父母'],
'f,xb,[s|d]':['堂兄弟姐妹','堂姐妹兄弟','从父兄弟姐妹'],
'f,[xs|xs,h]':['姑父母'],
'f,xs,[s|d]':['姑表兄弟姐妹'],
'm,[f|m],f':['老外公','老外爷','老姥爷'],
'm,[f|m],m,':['老外婆','老外奶','老姥姥','老姥娘','老嫏娘'],
'm,[f|m]':['外祖父母','外公外婆','姥姥姥爷'],
'm,f,[f,xs|m,xb],s':['舅姑姥爷'],
'm,[xb|xb,w]':['舅父母'],
'm,xb,[s|d]':['舅表兄弟姐妹'],
'm,[xs|xs,h]':['姨父母'],
'm,xs,[s|d]':['姨兄弟姐妹','姨姐妹兄弟','从母兄弟姐妹'],
'[f|m]':['父母','爹娘','爹妈','爸妈','爸爸妈妈','父母亲','双亲','二亲','两亲','二老','高堂'],
'[f|m],[f,xs|m,xb],s':['舅姑爸','姑舅爸'],
'[f|m],[f,xs|m,xb],s&o,w':['舅姑姆','姑舅姆'],
'[f|m],[f,xs|m,xb],s&l,w':['舅姑婶','姑舅婶'],
'[f|m],[f,xs|m,xb],d':['姑舅娘娘'],
'[f|m],m,xs,s':['两姨爸'],
'[f|m],m,xs,s&o,w':['两姨姆'],
'[f|m],m,xs,s&l,w':['两姨婶'],
'[f|m],m,xs,d':['两姨娘娘'],
'w,[f|m]':['岳父母','岳父岳母','丈人丈母','舅姑'],
'w,f,[ob|ob,w]':['伯岳父母'],
'w,f,[lb|lb,w]':['叔岳父母'],
'w,f,[xs|xs,h]':['姑岳父母'],
'w,m,[xb|xb,w]':['舅岳父母'],
'w,m,[xs|xs,h]':['姨岳父母'],
'w,[f,xs|m,xb],d':['姑舅姨子'],
'w,[f,xs|m,xb],d,h':['姑舅连襟','姑舅连桥'],
'h,[f|m]':['公婆','翁姑','姑翁','姑舅','大家官','公公婆婆','姑章','姑嫜'],
'h,f,[ob|ob,w]':['伯公婆'],
'h,f,[lb|lb,w]':['叔公婆'],
'h,f,[xs|xs,h]':['姑公婆'],
'h,m,[xb|xb,w]':['舅公婆'],
'h,m,[xs|xs,h]':['姨公婆'],
'[xb|xs]':['兄弟姐妹','同胞','同胞兄弟姐妹','手足'],
'[ob|os]':['哥哥姐姐'],
'[lb|ls]':['弟弟妹妹'],
'[ob|ob,w]':['哥哥嫂嫂','兄嫂'],
'[f,xb|m,xs],[s|d]':['从兄弟姐妹','从姐妹兄弟'],
'[f,xs|m,xb],[s|d]':['表兄弟姐妹','表姐妹兄弟','老表','阿表'],
'[f,xs|m,xb],s':['姑舅兄弟','舅姑兄弟'],
'[f,xs|m,xb],s&o':['姑舅哥','姑舅哥哥'],
'[f,xs|m,xb],s&l':['姑舅弟','姑舅弟弟'],
'[f,xs|m,xb],d':['姑舅姊妹','舅姑姊妹'],
'[f,xs|m,xb],d&o':['姑舅姐','姑舅姐姐'],
'[f,xs|m,xb],d&l':['姑舅妹','姑舅妹妹'],
'[f,xs|m,xb],s,s':['姑舅儿子'],
'[f,xs|m,xb],s,d':['姑舅女儿'],
'[xb|xs],[s|d]':['侄甥'],
'xb,[s|d]':['侄子女','侄子侄女'],
'xs,[s|d]':['甥子女','外甥子女'],
'[w|s|d]':['妻儿','妻小'],
'[w|d]':['妻女'],
'[s|d]':['子女','儿女','仔女','小孩','孩子','孩子们','孩儿','小孩儿','宝宝','宝贝','娃','娃子','儿辈','子辈','细伢','伢子','子息','子嗣','崽','幺儿'],
'[s|d],[s|d]':['孙辈','孙息','孙枝'],
's,[s|d]':['孙子女'],
'd,[s|d]':['外孙子女'],
's#xb,s':['子侄'],
's#s,w':['子媳'],
'[s|d]#[s|d],[s|d]':['儿孙','子孙','孙息'],
'[s,w|d,h],[f|m]':['亲家','儿女亲家'],
'[s,w|d,h],f':['亲家公','亲家父','亲家翁','亲家世翁','姻翁'],
'[s,w|d,h],f,f':['太姻翁'],
'[s,w|d,h],f,m':['太姻姆'],
'[s,w|d,h],f,f,f':['太姻翁'],
'[s,w|d,h],f,f,m':['太姻姆'],
'[s,w|d,h],f,f,ob':['姻伯翁'],
'[s,w|d,h],f,f,ob,w':['姻伯姆'],
'[s,w|d,h],f,f,lb':['姻叔翁'],
'[s,w|d,h],f,f,lb,w':['姻叔母'],
'[s,w|d,h],f,f,xb,s&o':['姻家兄'],
'[s,w|d,h],f,f,xb,s&o,w':['姻家兄妇'],
'[s,w|d,h],f,f,xb,s&l':['姻家弟'],
'[s,w|d,h],f,f,xb,s&l,w':['姻家弟妇'],
'[s,w|d,h],f,f,xb,s,s':['姻家侄'],
'[s,w|d,h],f,f,xb,s,s,w':['姻家侄妇'],
'[s,w|d,h],f,ob':['姻兄'],
'[s,w|d,h],f,ob,w':['姻兄妇'],
'[s,w|d,h],f,lb':['姻弟'],
'[s,w|d,h],f,lb,w':['姻弟妇'],
'[s,w|d,h],f,xb,s':['姻侄'],
'[s,w|d,h],f,xb,s,w':['姻侄妇'],
'[s,w|d,h],m':['亲家母','亲家婆','亲家姆','亲姆','姻姆'],
'[s,w|d,h],m,ob':['姻仁兄'],
'[s,w|d,h],m,ob,w':['姻仁兄妇'],
'[s,w|d,h],m,lb':['姻仁弟'],
'[s,w|d,h],m,lb,w':['姻仁弟妇'],
'[s,w|d,h],[f|m],f':['姻太翁'],
'[s,w|d,h],[f|m],m':['姻太姆'],
};

54
src/module/data/pair.js Normal file
View File

@ -0,0 +1,54 @@
/*
* 关系合称 - 两个人之间的关系合称
*/
export default {
'f#s':['父子'],
'm#s':['母子'],
'f#d':['父女'],
'm#d':['母女'],
'h#w':['夫妻'],
'ob#lb':['兄弟'],
'ob#ls':['兄妹'],
'os#ls':['姐妹'],
'os#lb':['姐弟'],
'w,f#d,h':['翁婿'],
'w,m#d,h':['母婿'],
'h,f#s,w':['翁媳'],
'h,m#s,w':['婆媳'],
'f,[f|m]#s,[s|d]':['祖孙'],
'm,f#d,[s|d]':['公孙'],
'm,m#d,[s|d]':['婆孙'],
'f,[ob|ob,w]#[lb|h,lb],[s|d]':['伯侄'],
'f,lb#ob,[s|d]':['叔侄'],
'f,lb,w#h,ob,[s|d]':['婶侄'],
'f,[xs|xs,h]#[xb|w,xb],[s|d]':['姑侄'],
'm,[xb|xb,w]#[xs|h,xs],[s|d]':['舅甥'],
'm,[xs|xs,h]#[xs|w,xs],[s|d]':['姨甥'],
'f,xb,s&o#f,xb,s&l':['堂兄弟'],
'f,xb,s&o#f,xb,d&l':['堂兄妹'],
'f,xb,d&o#f,xb,s&l':['堂姐弟'],
'f,xb,d&o#f,xb,d&l':['堂姐妹'],
'f,xs,s&o#m,xb,s&l':['表兄弟'],
'm,xb,s&o#f,xs,s&l':['表兄弟'],
'f,xs,s&o#m,xb,d&l':['表兄妹'],
'm,xb,s&o#f,xs,d&l':['表兄妹'],
'f,xs,d&o#m,xb,d&l':['表姐妹'],
'm,xb,d&o#f,xs,d&l':['表姐妹'],
'f,xs,d&o#m,xb,s&l':['表姐弟'],
'm,xb,d&o#f,xs,s&l':['表姐弟'],
'm,xs,s&o#m,xs,s&l':['姨兄弟'],
'm,xs,s&o#m,xs,d&l':['姨兄妹'],
'm,xs,d&o#m,xs,s&l':['姨姐弟'],
'm,xs,d&o#m,xs,d&l':['姨姐妹'],
'h,ob,w#h,lb,w':['妯娌'],
'w,os,h#w,ls,h':['连襟'],
'w,os#ls,h':['襟姐弟'],
'w,ls#os,h':['襟兄妹'],
'xs,h#w,xb':['郎舅'],
'xs,h#w,xs':['郎姨'],
'lb,w#h,ob':['伯媳'],
'ob,w#h,lb':['叔嫂'],
'xb,w#h,xs':['姑嫂'],
'xs,h,xb#xb,w,xb':['姻兄弟'],
'd,h,[f|m]#s,w,[f|m]':['儿女亲家'],
}

210
src/module/data/prefix.js Normal file
View File

@ -0,0 +1,210 @@
/*
* 分支前缀 - 旁支亲戚的分支节点
*/
export default {
'{G2}':{
'f,f,xb':['从祖'],
'm,f,xb':['外从祖'],
},
'{G1}':{
'f,xb':['堂','同堂','亲堂','从父','叔伯','堂房','从'],
'f,xs':['姑表','姑家'],
'm,xb':['舅表','舅家'],
'm,xs':['姨','从母','两姨','姨表','从'],
'f,f,xb,s':['从堂','再从父','远堂','堂叔伯','叔伯叔伯','再从'],
'f,f,xb,d':['堂姑表','从父姑表'],
'f,f,xs,s':['姑表叔表'],
'f,f,xs,d':['姑表姑表'],
'f,m,xb,s':['舅表叔表'],
'f,m,xb,d':['舅表姑表'],
'f,m,xs,s':['从母叔表'],
'f,m,xs,d':['从母姑表'],
'm,f,xb,s':['堂舅表','从父舅表'],
'm,f,xb,d':['堂姨表','从父姨表'],
'm,f,xs,s':['姑表舅表'],
'm,f,xs,d':['姑表姨表'],
'm,m,xb,s':['舅表舅表'],
'm,m,xb,d':['舅表姨表'],
'm,m,xs,s':['从母舅表'],
'm,m,xs,d':['再从母','姨姨','再从'],
'f,f,f,xb,s,s':['三从父','再从堂','远堂','族','三从'],
'm,m,m,xs,d,d':['三从母','三从'],
'f,f,f,f,xb,s,s,s':['四从父','三从堂','远堂','族','四从'],
'm,m,m,m,xs,d,d,d':['四从母','四从'],
'[f|m],[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],[s|d]':['重表'],
'[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d]':['重表'],
},
'{G1M}':{
'f,ob':['伯'],
'f,lb':['叔','仲','季'],
'm,xb':['舅'],
'f,f,xb,s':['堂','从父','叔伯','从'],
'f,f,xb,s&o':['堂伯','从父伯','叔伯伯','从伯'],
'f,f,xb,s&l':['堂叔','从父叔','叔伯叔','从叔'],
'f,f,f,xb,s,s':['从堂'],
'f,f,f,xb,s,s&o':['从堂伯'],
'f,f,f,xb,s,s&l':['从堂叔'],
'f,f,f,f,xb,s,s,s':['族'],
'f,f,xs,s&o':['姑表伯'],
'f,f,xs,s&l':['姑表叔'],
'f,m,xb,s&o':['舅表伯'],
'f,m,xb,s&l':['舅表叔'],
'f,m,xs,s&o':['姨伯','从母伯','从伯'],
'f,m,xs,s&l':['姨叔','从母叔','从叔'],
'm,f,xb,s':['堂舅','从父舅','叔伯舅'],
'm,f,xs,s':['姑表舅'],
'm,m,xb,s':['舅表舅'],
'm,m,xs,s':['姨舅','从母舅'],
'f,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],s&o':['重表伯'],
'f,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],s&l':['重表叔'],
'f,[f|m],[f,xs|m,xb],[s|d],s&o':['重表伯'],
'f,[f|m],[f,xs|m,xb],[s|d],s&l':['重表叔'],
'm,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],s':['重表舅'],
'm,[f|m],[f,xs|m,xb],[s|d],s':['重表舅'],
},
'{G1W}':{
'f,xs':['姑'],
'm,xs':['姨','姏','茙','荻'],
'f,f,xb,d':['堂姑','从父姑'],
'f,f,f,xb,s,d':['从堂姑'],
'f,f,xs,d':['姑表姑'],
'f,m,xb,d':['舅表姑'],
'f,m,xs,d':['姨姑','从母姑'],
'm,f,xb,d':['堂姨','从父姨','叔伯姨'],
'm,f,xs,d':['姑表姨'],
'm,m,xb,d':['舅表姨'],
'm,m,xs,d':['姨姨','从母姨'],
'f,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],d':['重表姑'],
'f,[f|m],[f,xs|m,xb],[s|d],d':['重表姑'],
'm,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],d':['重表姨'],
'm,[f|m],[f,xs|m,xb],[s|d],d':['重表姨'],
},
'{G0}':{
'xb':['侄'],
'1,xb':['从'],
'1,f,xb,s':['再从'],
'1,f,f,xb,s,s':['三从'],
'h,xb':['叔侄','叔伯'],
'w,xb':['舅侄'],
'xs':['甥','外甥'],
'0,xs':['从'],
'0,m,xs,d':['再从'],
'0,m,m,xs,d,d':['三从'],
'h,xs':['姑甥'],
'w,xs':['姨甥','襟侄'],
},
'{M2W}':{
'f,f,xb,w':['叔祖眷'],
'm,f,xb,w':['叔外祖眷'],
'f,m,xb,w':['舅祖眷'],
'm,m,xb,w':['舅外祖眷'],
},
'{M2M}':{
'f,f,xs,h':['姑祖姻'],
'm,f,xs,h':['姑外祖姻'],
'f,m,xs,h':['姨祖姻'],
'm,m,xs,h':['姨外祖姻'],
},
'{M1W}':{
'f,xb,w':['叔眷'],
'f,f,xb,s,w':['从父叔眷'],
'f,f,xs,s,w':['姑表叔眷'],
'f,m,xb,s,w':['舅表叔眷'],
'f,m,xs,s,w':['从母叔眷'],
'm,xb,w':['舅眷'],
'm,f,xb,s,w':['从父舅眷'],
'm,f,xs,s,w':['姑表舅眷'],
'm,m,xb,s,w':['舅表舅眷'],
'm,m,xs,s,w':['从母舅眷'],
},
'{M1M}':{
'f,xs,h':['姑姻'],
'f,f,xb,d,h':['从父姑姻'],
'f,f,xs,d,h':['姑表姑姻'],
'f,m,xb,d,h':['舅表姑姻'],
'f,m,xs,d,h':['从母姑姻'],
'm,xs,h':['姨姻'],
'm,f,xb,d,h':['从父姨姻'],
'm,f,xs,d,h':['姑表姨姻'],
'm,m,xb,d,h':['舅表姨姻'],
'm,m,xs,d,h':['从母姨姻'],
},
'{M0}':{
'xb,w':['兄弟眷'],
'xs,h':['姊妹姻'],
'w,xb,w':['舅兄弟眷','内兄弟眷'],
'w,xs,h':['姨姊妹姻','内姊妹姻'],
'h,xb,w':['叔兄弟眷','外兄弟眷'],
'h,xs,h':['姑姊妹姻','外姊妹姻'],
'f,xb,s,w':['从父兄弟眷'],
'f,xb,d,h':['从父姊妹姻'],
'f,xs,s,w':['姑表兄弟眷'],
'f,xs,d,h':['姑表姊妹姻'],
'm,xb,s,w':['舅表兄弟眷'],
'm,xb,d,h':['舅表姊妹姻'],
'm,xs,s,w':['从母兄弟眷'],
'm,xs,d,h':['从母姊妹姻'],
},
'{M-1}':{
's,w':['男眷','息眷'],
'd,h':['女姻','息姻'],
'xb,s,w':['侄眷'],
'xb,d,h':['侄姻'],
'xs,s,w':['甥眷'],
'xs,d,h':['甥姻'],
'h,xb,s,w':['叔侄眷'],
'h,xb,d,h':['叔侄姻'],
'h,xs,s,w':['姑甥眷'],
'h,xs,d,h':['姑甥姻'],
'w,xb,s,w':['舅侄眷'],
'w,xb,d,h':['舅侄姻'],
'w,xs,s,w':['姨甥眷'],
'w,xs,d,h':['姨甥姻'],
'f,xb,s,s,w':['堂侄眷'],
'f,xb,s,d,h':['堂侄姻'],
'f,xb,d,s,w':['堂甥眷'],
'f,xb,d,d,h':['堂甥姻'],
'f,xs,s,s,w':['姑表侄眷'],
'f,xs,s,d,h':['姑表侄姻'],
'f,xs,d,s,w':['姑表甥眷'],
'f,xs,d,d,h':['姑表甥姻'],
'm,xb,s,s,w':['舅表侄眷'],
'm,xb,s,d,h':['舅表侄姻'],
'm,xb,d,s,w':['舅表甥眷'],
'm,xb,d,d,h':['舅表甥姻'],
'm,xs,s,s,w':['姨侄眷'],
'm,xs,s,d,h':['姨侄姻'],
'm,xs,d,s,w':['姨甥眷'],
'm,xs,d,d,h':['姨甥姻'],
},
'{M-2}':{
's,s,w':['孙眷'],
's,d,h':['孙姻'],
'd,s,w':['外孙眷'],
'd,d,h':['外孙姻'],
'xb,s,s,w':['侄孙眷'],
'xb,s,d,h':['侄孙姻'],
'xb,d,s,w':['侄外孙眷'],
'xb,d,d,h':['侄外孙姻'],
'xs,s,s,w':['甥孙眷'],
'xs,s,d,h':['甥孙姻'],
'xs,d,s,w':['甥外孙眷'],
'xs,d,d,h':['甥外孙姻'],
'h,xb,s,s,w':['叔侄孙眷','叔伯孙眷','叔孙眷'],
'h,xb,s,d,h':['叔侄孙姻','叔伯孙姻','叔孙姻'],
'h,xb,d,s,w':['叔侄外孙眷','叔伯外孙眷','叔外孙眷'],
'h,xb,d,d,h':['叔侄外孙姻','叔伯外孙姻','叔外孙姻'],
'h,xs,s,s,w':['姑甥孙眷','姑孙眷'],
'h,xs,s,d,h':['姑甥孙姻','姑孙姻'],
'h,xs,d,s,w':['姑甥外孙眷','姑外孙眷'],
'h,xs,d,d,h':['姑甥外孙姻','姑外孙姻'],
'w,xb,s,s,w':['舅侄孙眷','舅孙眷'],
'w,xb,s,d,h':['舅侄孙姻','舅孙姻'],
'w,xb,d,s,w':['舅侄外孙眷','舅外孙眷'],
'w,xb,d,d,h':['舅侄外孙姻','舅外孙姻'],
'w,xs,s,s,w':['姨甥孙眷','姨孙眷'],
'w,xs,s,d,h':['姨甥孙姻','姨孙姻'],
'w,xs,d,s,w':['姨甥外孙眷','姨外孙眷'],
'w,xs,d,d,h':['姨甥外孙姻','姨外孙姻'],
}
};

11
src/module/data/sort.js Normal file
View File

@ -0,0 +1,11 @@
/*
* 排序字段
*/
export default {
'f,xb':['几爸爸','几爸','几爹'],
'f,xb,w':['几妈妈','几妈','几娘'],
'f,f,xb':['几爷爷','几大爷','几嗲','几爷','几公'],
'f,f,xb,w':['几奶奶','几大娘','几奶','几婆'],
'm,f,xb':['几外公','几姥爷','几外爷'],
'm,f,xb,w':['几外婆','几姥姥','几姥奶','几外奶','几姥'],
};

201
src/module/id.js Normal file
View File

@ -0,0 +1,201 @@
/*
* 标识符 - 唯一性关系链关系链转换成中文表述
*/
import _pair from './data/pair.js';
import _sort from './data/sort.js';
import {number2zh} from './unit.js';
import {selector2id} from './selector.js';
import {modeData} from './mode.js';
// 逆转ID
export function reverseId(id,sex){
if(!id){
return [''];
}
// 映射关系
let hash = {
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']
};
// 年纪判断
let age = '';
if(id.match(/&o$/)){
age = '&l';
}else if(id.match(/&l$/)){
age = '&o';
}
id = id.replace(/&[ol\d+]/g,'');
// 性别判断
if(sex<0){
if(id.match(/^w/)){
sex = 1;
}else if(id.match(/^h/)){
sex = 0;
}
}
const doing = function(sex){
const sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0');
const sid_arr = sid.substring(0,sid.length-2).split(',').reverse();
const r_id = id.split(',').reverse().map((id,i)=>hash[id][sid_arr[i]]).join(',');
const gen = getGenById(r_id);
return r_id + (gen?'':age);
};
if(sex<0){
return [doing(1),doing(0)];
}else{
return [doing(sex)];
}
};
// ID列表去重
export function filterId(arr){
const sameList = arr.filter(item => item === item.replace(/[ol](?=[s|b])/g,'x').replace(/&[ol]/,''));
return arr.filter(item => {
const temp = item.replace(/[ol](?=[s|b])/g,'x').replace(/&[ol]/,'');
return sameList.includes(item)||item!=temp&&!sameList.includes(temp);
}).filter((item,idx,arr) => arr.indexOf(item) === idx);
};
// 通过ID获取世代数
export function getGenById(id){
const gMap = {'f':1,'m':1,'s':-1,'d':-1};
let gen = 0;
id.split(',').forEach(sub => {
const s = sub.replace(/&[ol\d]+/,'');
gen += gMap[s]||0;
});
return gen;
};
// 通过ID获取关系称呼
export function getItemsById(id){
let items = [];
const getData = function(key){
let ids = [];
const k1 = key.replace(/(,[sd])(,[wh])?$/,'$1&o$2');
const k2 = key.replace(/(,[sd])(,[wh])?$/,'$1&l$2');
if(modeData[k1]&&modeData[k2]){
ids = [k1,k2];
}else if(modeData[key]){
ids = [key];
}
return filterId(ids).map(id => modeData[id][0]);
};
// 对排序进行处理
if(id.match(/&([\d]+)(,[hw])?$/)){
const num = id.match(/&([\d]+)(,[hw])?$/)[1];
const zh = number2zh(num);
id = id.replace(/&\d+/g,'');
if(_sort[id]){
items.push(_sort[id][0].replace('几',zh));
}else if(modeData[id]){
const gen = getGenById(id);
let item = '';
if(gen<3&&!id.match(/[hw],/)){
modeData[id].forEach(function(name){
if(!item&&name.includes('几')){
item = name.replace('几',zh);
}
});
if(!item){
item = modeData[id][0];
item = item.match(/^[大小]/)?item.replace(/^[大小]/,zh):zh+item;
}
}
items.push(item);
}
}
// 直接匹配称呼
if(!items.length){
id = id.replace(/&\d+/g,'');
items = getData(id);
}
// 忽略年龄条件查找
if(!items.length){
id = id.replace(/&[ol]/g,'');
items = getData(id);
}
// 忽略年龄条件查找
if(!items.length){
id = id.replace(/[ol](b|s)/g,'x$1');
items = getData(id);
}
// 缩小访问查找
if(!items.length){
let l = id.replace(/x/g,'l');
let o = id.replace(/x/g,'o');
items = items.concat(getData(o),getData(l));
}
return items;
};
// 通过ID获取关系链
let data = {
...modeData,
'xb': ['兄弟'],
'xs': ['姐妹']
};
export function getChainById(id,sex=-1){
let item = id.split(',').map(sign => {
const key = sign.replace(/&[ol\d]+/,'');
return data[key][0];
}).join('的');
if(sex>-1&&data[sex+','+id]){
if(sex==0){
item = '(女性)'+item;
}else if(sex==1){
item = '(男性)'+item;
}
}
return item;
};
// 通过ID获取关系合称
export function getPairsById(id1,id2){
id1 = id1.replace(/&\d+/g,'');
id2 = id2.replace(/&\d+/g,'');
const id1_x = id1.replace(/([ol])([bs])/g,'x$2');
const id2_x = id2.replace(/([ol])([bs])/g,'x$2');
const id1_r = id1.replace(/&[ol]/g,'');
const id2_r = id2.replace(/&[ol]/g,'');
let result = [];
let result_x = [];
let result_r = [];
for(const key in _pair){
const selectors = key.split('#');
if(selectors.length>1){
const list1 = selector2id(selectors[0]);
const list2 = selector2id(selectors[1]);
const list1_r = list1.map(selector => selector.replace(/&[ol\d]+/,'').replace(/([ol])([bs])/,'x$2'));
const list2_r = list2.map(selector => selector.replace(/&[ol\d]+/,'').replace(/([ol])([bs])/,'x$2'));
if(list1.includes(id1)&&list2.includes(id2)||list1.includes(id2)&&list2.includes(id1)){
result.push(_pair[key][0]);
}
if(list1_r.includes(id1_x)&&list2_r.includes(id2_x)||list1_r.includes(id2_x)&&list2_r.includes(id1_x)){
result_x.push(_pair[key][0]);
}
if(list1_r.includes(id1_r)&&list2_r.includes(id2_r)||list1_r.includes(id2_r)&&list2_r.includes(id1_r)){
result_r.push(_pair[key][0]);
}
}
}
if(!result.length){
result = result_x;
}
if(!result.length){
result = result_r;
}
return result;
};

96
src/module/map.js Normal file
View File

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

25
src/module/mode.js Normal file
View File

@ -0,0 +1,25 @@
/*
* 模式数据
*/
import _map from './map.js';
let _mode = {}; // 模式缓存
let modeData = { ..._map }; // 最终数据
// 设置模式数据
export function setModeData(sign,data){
_mode[sign] = { ...(_mode[sign] || {}), ...data };
};
// 获取模式数据
export function getModeData(sign){
modeData = { ..._map };
if(sign&&_mode[sign]){
for(const key in _mode[sign]){
modeData[key] = [].concat(_mode[sign][key],_map[key]||[]);
}
}
return modeData;
};
export {modeData};

14
src/module/options.js Normal file
View File

@ -0,0 +1,14 @@
/*
* 通过表达式获取配置
*/
import _expression from './rule/expression.js';
export function getOptions(text){
for(const item of _expression){
const match = text.match(item['exp']);
if(match){
return item['opt'](match);
}
}
return {};
};

View File

@ -0,0 +1,76 @@
/*
* 自然语言表达 - 语言表达转换成参数调用
*/
export default [
{
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],
type:match[1].includes('的')?'default':'chain'
})
},
{
exp:/^(\S+?)(应该|得)?管(\S+?)叫(什么|啥)?$/,
opt:match=>({
text:match[3],
target:match[1]
})
},
{
exp:/^(\S+?)(和|与)(\S+?)(之间)?是(什么|啥)关系??$/,
opt:match=>({
text:match[1],
target:match[3],
type:'pair'
})
},
{
exp:/^(\S+?)对于(\S+?)是(什么|啥)关系??$/,
opt:match=>({
text:match[1],
target:match[2],
type:'chain'
})
},
{
exp:/^(\S+?)(指的)?是(什么|啥)(意思|关系|亲戚关系|辈分|人)?$/,
opt:match=>({
text:match[1],
type:'chain'
})
},
{
exp:/^(\S+?)(应该|得)?(称呼|叫|喊)(什么|啥)?$/,
opt:match=>({
text:match[1]
})
},
{
exp:/^(\S+?)(应该|得)?(如何|怎么)(称呼|叫|喊)?$/,
opt:match=>({
text:match[1]
})
},
{
exp:/^(\S+?)是(谁|什么|什么亲戚|啥亲戚|什么人|什么辈分|啥辈分)?$/,
opt:match=>({
text:match[1],
type:match[1].includes('的')?'default':'chain'
})
},
];

191
src/module/rule/filter.js Normal file
View File

@ -0,0 +1,191 @@
/*
* 关系链缩写规则 - 关系链缩减成最简表达
*
* 关系数据语法说明
* 关系符 f:; m:; h:; w:; s:; d:; xb:兄弟; ob:; lb:; xs:姐妹; os:; ls:
* 修饰符 1:男性; 0:女性; &o:年长; &l:年幼; &\d+:排序 #:隔断; [a|b]:并列
*/
export default [
/* 年龄 */
{//有大有小,增加不确定性
exp:/^(.+)&o([^#]+)&l/g,
str:'$1$2'
},
{//有大有小,增加不确定性
exp:/^(.+)&l([^#]+)&o/g,
str:'$1$2'
},
{//有大有小,增加不确定性
exp:/^(.+)?,o([sb](&\d+)?)([^#]+)&l/g,
str:'$1,x$2$4'
},
{//有大有小,增加不确定性
exp:/^(.+)?,l([sb](&\d+)?)([^#]+)&o/g,
str:'$1,x$2$4'
},
/* 兄弟姐妹 */
{//哥哥姐姐的哥哥姐姐还是自己的哥哥姐姐(年龄判断)
exp:/(,o[sb](&\d+)?)+(,o[sb])(&\d+)?/,
str:'$3$4'
},
{//弟弟妹妹的弟弟妹妹还是自己的弟弟妹妹(年龄判断)
exp:/(,l[sb](&\d+)?)+(,l[sb])(&\d+)?/,
str:'$3$4'
},
{//如果自己是男性,兄弟姐妹的兄弟就是自己的兄弟或自己
exp:/^(.*,[fh1])(,[olx][sb](&\d+)?)+,[olx]b(.*)$/,
str:'$1,xb$4#$1$4'
},
{//如果自己是女性,兄弟姐妹的姐妹就是自己的姐妹或自己
exp:/^(.*,[mw0])(,[olx][sb](&\d+)?)+,[olx]s(.*)$/,
str:'$1,xs$4#$1$4'
},
{//如果自己是男性,兄弟姐妹的姐妹就是自己的姐妹
exp:/(,[fh1])(,[olx][sb](&\d+)?)+,[olx]s/g,
str:'$1,xs'
},
{//如果自己是女性,兄弟姐妹的兄弟就是自己的兄弟
exp:/(,[mw0])(,[olx][sb](&\d+)?)+,[olx]b/g,
str:'$1,xb'
},
{//不知道性别,兄弟姐妹的兄弟是兄弟或自己
exp:/^,[olx][sb](&\d+)?,[olx]b(.+)?$/,
str:',xb$2#$2'
},
{//不知道性别,兄弟姐妹的姐妹是姐妹或自己
exp:/^,[olx][sb](&\d+)?,[olx]s(.+)?$/,
str:',xs$2#$2'
},
{//将复合称谓拆分
exp:/^,x([sb])$/,
str:',o$1#,l$1'
},
/* 父母 */
{//母亲的丈夫是自己的父亲
exp:/m,h/g,
str:'f'
},
{//父亲的妻子是自己的母亲
exp:/f,w/g,
str:'m'
},
{//兄弟的父母就是自己的父母
exp:/,[xol][sb](&\d+)?(,[mf])/g,
str:'$2'
},
/* 父母的子女 */
{//父母的女儿排序判断姐妹的排序
exp:/,[mf],d(&\d+)/,
str:',xs$1'
},
{//父母的女儿年龄判断是姐姐还是妹妹
exp:/,[mf],d&([ol])/,
str:',$1s'
},
{//父母的儿子排序判断兄弟的排序
exp:/,[mf],s(&\d+)/,
str:',xb$1'
},
{//父母的儿子年龄判断是哥哥还是弟弟
exp:/,[mf],s&([ol])/,
str:',$1b'
},
{//如果自己是男性,父母的儿子是兄弟或者自己
exp:/^(.*,[fh1]|[xol]b(&\d+)?),[mf],s(.*)$/,
str:'$1,xb$3#$1$3'
},
{//如果自己是女性,父母的女儿是姐妹或者自己
exp:/^(.*,[mw0]|[xol]s(&\d+)?),[mf],d(.*)$/,
str:'$1,xs$3#$1$3'
},
{//如果自己是女性,父母的儿子是自己的兄弟
exp:/(,[mw0]|[xol]s(&\d+)?),[mf],s/,
str:'$1,xb'
},
{//如果自己是男性,父母的女儿是自己的姐妹
exp:/(,[fh1]|[xol]b(&\d+)?),[mf],d/,
str:'$1,xs'
},
{//父母的儿子是兄弟或自己
exp:/^,[mf],s(.+)?$/,
str:',xb$1#,1$1'
},
{//父母的女儿是姐妹或者自己
exp:/^,[mf],d(.+)?$/,
str:',xs$1#,0$1'
},
/* 孩子 */
{//孩子的兄弟是自己的儿子(排序判断)
exp:/,[ds](&[ol\d]+)?,[olx]b(&\d+)/g,
str:',s$2'
},
{//孩子的姐妹是自己的女儿(排序判断)
exp:/,[ds](&[ol\d]+)?,[olx]s(&\d+)/g,
str:',d$2'
},
{//孩子的兄弟是自己的儿子(年龄判断)
exp:/,[ds]&o,ob/g,
str:',s&o'
},
{//孩子的姐妹是自己的女儿(年龄判断)
exp:/,[ds]&o,os/g,
str:',d&o'
},
{//孩子的兄弟是自己的儿子(年龄判断)
exp:/,[ds]&l,lb/g,
str:',s&l'
},
{//孩子的姐妹是自己的女儿(年龄判断)
exp:/,[ds]&l,ls/g,
str:',d&l'
},
{//孩子的姐妹是自己的女儿
exp:/,[ds](&[ol\d]+)?,[olx]s(&\d+)?/g,
str:',d$2'
},
{//孩子的兄弟是自己的儿子
exp:/,[ds](&[ol\d]+)?,[olx]b(&\d+)?/g,
str:',s$2'
},
/* 夫妻 */
{//自己是女性,女儿或儿子的妈妈是自己
exp:/(,[mwd0]|,[olx]s)(&[ol\d]+)?,[ds](&[ol\d]+)?,m/g,
str:'$1'
},
{//自己是女性,女儿或儿子的爸爸是自己的丈夫
exp:/(,[mwd0]|,[olx]s)(&[ol\d]+)?,[ds](&[ol\d]+)?,f/g,
str:'$1,h'
},
{//自己是男性,女儿或儿子的爸爸是自己
exp:/(,[fhs1]|,[olx]b)(&[ol\d]+)?,[ds](&[ol\d]+)?,f/g,
str:'$1'
},
{//自己是男性,女儿或儿子的妈妈是自己的妻子
exp:/(,[fhs1]|,[olx]b)(&[ol\d]+)?,[ds](&[ol\d]+)?,m/g,
str:'$1,w'
},
{//不知道性别,子女的妈妈是妻子或自己
exp:/^,[ds],m(.+)?$/,
str:',w$1#$1'
},
{//不知道性别,子女的爸爸是丈夫或自己
exp:/^,[ds],f(.+)?$/,
str:',h$1#$1'
},
{//夫妻的孩子就是自己的孩子
exp:/,[wh](,[ds])/g,
str:'$1'
},
{//夫妻的对方是自己
exp:/,w,h|,h,w/g,
str:''
},
{//并列关系处理1 X[A|B|C]Y = XAY#X[B|C]Y
exp:/(.+)?\[([^\|]+?)\|([^\[\]]*\|[^\[\]]*)\](.+)?/g,
str:'$1$2$4#$1[$3]$4'
},
{//并列关系处理2 X[A|B]Y = XAY#XBY
exp:/(.+)?\[([^\[\]\|]+?)\|([^\[\]\|]+?)?\](.+)?/g,
str:'$1$2$4#$1$3$4'
}
];

View File

@ -0,0 +1,93 @@
/*
* 词义扩展 - 对称呼词义进行扩展
*/
export default [
{
exp:/^从表/,
arr:['从父姑表','从父舅表','从父姨表','从母姑表','从母舅表','从母叔表']
},
{
exp:/^表表/,
arr:['姑表叔表','姑表姑表','姑表舅表','姑表姨表','舅表叔表','舅表姑表','舅表舅表','舅表姨表']
},
{
exp:/^([夫妻内外]?)表/,
arr:['$1姑表','$1舅表']
},
{
exp:/^([姑舅])表(?=[^伯叔])/,
arr:['$1表伯','$1表叔']
},
{
exp:/^姻/,
arr:['姑姻','姨姻','姊妹姻','女姻']
},
{
exp:/^眷/,
arr:['叔眷','舅眷','兄弟眷','男眷']
},
{
exp:/^亲家/,
arr:['姊妹姻','兄弟眷']
},
{
exp:/^([堂表姨]?)([曾高天烈太远鼻]?)(祖?)([伯叔姑舅姨])/,
arr:['$1$4$2$3']
},
{
exp:/^([曾高天烈太远鼻]?)祖?王姑/,
arr:['姑$1祖母']
},
{
exp:/^([曾玄元来晜仍云耳])([侄甥])/,
arr:['$2$1']
},
{
exp:/^外表([伯叔姑舅姨])/,
arr:['姑表$1外','舅表$1外']
},
{
exp:/([堂表姨]?)外甥/,
arr:['$1甥']
},
{
exp:/^([舅叔])([曾玄外]*)孙/,
arr:['$1侄$2孙']
},
{
exp:/^([姨姑])([曾玄外]*)孙/,
arr:['$1甥$2孙']
},
{
exp:/([孙甥侄])$/,
arr:['$1男','$1女']
},
{
exp:/([姑舅姨叔])([孙外]*)([男女])$/,
arr:['$1表侄$2$3','$1表甥$2$3']
},
{
exp:/(.+)父母$/,
arr:['$1父','$1母']
},
{
exp:/(.+)公婆$/,
arr:['$1公','$1婆']
},
{
exp:/祖$/,
arr:['祖父']
},
{
exp:/(新妇|媳)$/,
arr:['媳妇']
},
{
exp:/嫂$/,
arr:['兄妇']
},
{
exp:/女儿$/,
arr:['女']
},
];

View File

@ -0,0 +1,20 @@
/*
* 同义词替换 - 对称呼中的近义词进行替换
*/
export default {
'晜':'兄',
'哥':'兄',
'姐':'姊',
'侄':'姪',
'婿':'壻',
'嬷':'嫲',
'祖父':'王父',
'祖母':'王母',
'孙女婿':'孙婿',
'甥女婿':'甥婿',
'侄女婿':'侄婿',
'孙媳妇':'孙妇',
'甥媳妇':'甥妇',
'侄媳妇':'侄妇',
'弟媳妇':'弟妇',
};

284
src/module/selector.js Normal file
View File

@ -0,0 +1,284 @@
/*
* 选择器 - 非唯一性关系链中文表述转换为关系链
*/
import _filter from './rule/filter.js';
import _replace from './rule/replace.js';
import _similar from './rule/similar.js';
import {zh2number} from './unit.js';
import {reverseId,filterId,getGenById} from './id.js';
import {cacheData} from './cache.js';
// 获得最简
const getOptimal = function(options){
let {
from,
to,
sex
} = options;
let from_chain = from.split(',');
let to_chain = to.split(',');
for(let i=0;i<from_chain.length&&i<to_chain.length;i++){
if(from_chain[i]==to_chain[i]){
from = from_chain.slice(i+1).join(',');
to = to_chain.slice(i+1).join(',');
sex = from_chain[i].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/)?1:0;
continue;
}else{
if(getGenById(from_chain[i])==getGenById(to_chain[i])&&from_chain[i].match(/^[xol][bs]|^[sd]/)&&to_chain[i].match(/^[xol][bs]|^[sd]/)){
let form_type = from_chain[i].replace(/&([ol\d]+)/,'').replace(/^[xol]([bs])/,'$1');
let to_type = to_chain[i].replace(/&([ol\d]+)/,'').replace(/^[xol]([bs])/,'$1');
if(form_type!=to_type){
break;
}
let from_attr = from_chain[i].match(/&([ol\d]+)/)?.[1]||from_chain[i].match(/([ol])[bs]/)?.[1]||'';
let to_attr = to_chain[i].match(/&([ol\d]+)/)?.[1]||to_chain[i].match(/([ol])[bs]/)?.[1]||'';
if(from_attr&&to_attr){
if(!isNaN(from_attr)&&!isNaN(to_attr)){
if(+from_attr>+to_attr){
from_chain[i] = from_chain[i].replace(/^[xol]b|^s/,'lb').replace(/^[xol]s|^d/,'ls');
}else if(+from_attr<+to_attr){
from_chain[i] = from_chain[i].replace(/^[xol]b|^s/,'ob').replace(/^[xol]s|^d/,'os');
}
}else if(!isNaN(from_attr)&&to_attr=='o'||from_attr=='l'&&!isNaN(to_attr)){
from_chain[i] = from_chain[i].replace(/^[xol]b|^s/,'lb').replace(/^[xol]s|^d/,'ls');
}else if(!isNaN(from_attr)&&to_attr=='l'||from_attr=='o'&&!isNaN(to_attr)){
from_chain[i] = from_chain[i].replace(/^[xol]b|^s/,'ob').replace(/^[xol]s|^d/,'os');
}
from = from_chain.slice(i).join(',');
to = to_chain.slice(i+1).join(',');
sex = to_chain[i].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/)?1:0;
}else if(options['optimal']){
from_attr = from_chain[i].match(/([xol])[bs]/)?.[1]||'';
to_attr = to_chain[i].match(/([xol])[bs]/)?.[1]||'';
if(from_attr=='x'||to_attr=='x'){
from = from_chain.slice(i+1).join(',');
to = to_chain.slice(i+1).join(',');
sex = from_chain[i].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/)?1:0;
continue;
}
}
}
break;
}
}
return {
from,
to,
sex
};
};
// 中文获取选择器
export function getSelectors(str){
str = str.replace(/之/g,'的').replace(/吾之?(.+)/,'$1').replace(/我的?(.+)/,'$1');
// 惯用口语标准化
// str = str.replace(/(?<![娘婆岳亲])家的?(?=(孩子|儿子|女儿))/,'的');
if(str.match(/[^娘婆岳亲]家的?(孩子|儿子|女儿)/)){
str = str.replace(/家的?/,'的');
}
str = str.replace(/(舅|姑)+(爸|父|丈|妈|母)?家的?(哥|姐|弟|妹)+/,'$1表$3').replace(/(舅|姑)+(爸|父|丈|妈|母)?家的?/,'$1表');
str = str.replace(/(伯|叔)+(父|母)?家的?(哥|姐|弟|妹)+/,'堂$3').replace(/(伯|叔)+(父|母)?家的?/,'堂');
str = str.replace(/姨+(爸|父|丈|妈|母)?家的?(哥|姐|弟|妹)+/,'姨$2').replace(/姨+(爸|父|丈|妈|母)?家的?/,'姨');
const lists = str.split('的');
let result = [];
let isMatch = true;
while(lists.length){
const name = lists.shift(); //当前匹配词
let items = []; //当前匹配词可能性
const keywords = [name];
let getList = function(name){
// 词义扩展
_replace.forEach(item => {
item['arr'].forEach(word =>{
const name1 = name.replace(item['exp'],word);
if(name1!=name){
keywords.push(name1);
getList(name1);
}
});
});
// 同义词替换
for(const word in _similar){
const name1 = name.replace(word,_similar[word]);
const name2 = name.replace(_similar[word],word);
if(name1!=name){
keywords.push(name1);
}
if(name2!=name){
keywords.push(name2);
}
}
};
getList(name);
// 通过关键词找关系
const items_map = [[],[],[]];
keywords.forEach(function(name){
name = name.replace(/^[尕幺细满碎晚末尾幼]/,'小');
const match = name.match(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/);
if(match){ // 匹配排序
const x_name = name.replace(match[0],'几');
const r_name = name.replace(match[0],'');
const num = zh2number(match[0]);
[x_name,r_name,name].forEach((name, index) => {
const ids = cacheData[name];
if(ids&&ids.length){
ids.forEach(i => {
const id = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
if(!i.match(/^[mf,]+$/)&&!name.match(/^[从世]/)){ // 直系祖辈不参与排序
items_map[index].push(id);
}
});
}
});
}
items = items.concat(cacheData[name]||[]);
});
// console.log('[keywords]',keywords);
// 如找不到结果,再是否存在称呼的排行问题(不直接判断,因存在"大舅""三从父兄""三世祖"这样特俗含义的情况)
items_map.forEach(function(items_x){
if(!items.length){
items = items_x;
}
});
// 完全匹配不到结果
if(!items.length){
isMatch = false;
}
const res = [];
if(!result.length){
result = [''];
}
result.forEach(function(a){
items.forEach(function(b){
res.push(a+(b?','+b:''));
});
});
result = res;
}
return isMatch?filterId(result):[];
};
// 合并选择器,查找两个对象之间的关系
export function mergeSelector(param){
let {
from:from_selector,
to:to_selector,
sex:my_sex
} = param;
if(my_sex<0){
const fromSex = from_selector.match(/^,[w1]/) ? 1 : from_selector.match(/^,[h0]/) ? 0 : -1;
const toSex = to_selector.match(/^,[w1]/) ? 1 : to_selector.match(/^,[h0]/) ? 0 : -1;
if (fromSex === -1 && toSex > -1) {
my_sex = toSex;
} else if (fromSex > -1 && toSex === -1) {
my_sex = fromSex;
} else if (fromSex === toSex) {
my_sex = fromSex;
} else {
return [];
}
}
let from_ids = selector2id(param['from'],my_sex);
let to_ids = selector2id(param['to'],my_sex);
if(!from_ids.length||!to_ids.length){
return [];
}
const result = [];
from_ids.forEach(from => {
to_ids.forEach(to => {
let sex = my_sex;
let selector = ','+to;
if(selector.match(/,([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?$/)){
sex = 1;
}
if(selector.match(/,([mwd0](&[ol\d]+)?|[olx]s)(&[ol\d]+)?$/)){
sex = 0;
}
if(from&&to){
let isOptimal = param.optimal;
if(from.match(/&\d+/)||to.match(/&\d+/)){
isOptimal = true;
}
if(isOptimal){
({
from,
to,
sex:my_sex
} = getOptimal({
from,
to,
sex:my_sex,
optimal:param.optimal
}));
}
}
let to_rids = to?reverseId(to,my_sex):[''];
to_rids.forEach(function(to_r){
let selector = (to_r?','+to_r:'')+(from?','+from:'');
result.push({
selector,
sex
});
});
});
});
return result;
};
// 扩展选择器
export function expandSelector(selector){
const result = [];
const hash = {};
const getSelector = function(selector){
if(!hash[selector]){
hash[selector] = true;
let s='';
do{
s = selector;
for(const item of _filter){
// console.log('[filter]',item['exp'],selector);
selector = selector.replace(item['exp'],item['str']);
if(selector.includes('#')){
selector.split('#').forEach(getSelector);
return false;
}
}
}while(s!=selector);
if(selector.match(/,[mwd0](&[ol\d+])?,w|,[hfs1](&[ol\d]+)?,h/)){ //同志关系去除
return false;
}
result.push(selector);
}
};
getSelector(selector);
return result;
};
// 选择器转ID
export function selector2id(selector,sex){
if(!selector.match(/^,/)){
selector = ','+selector;
}
//性别判断
if(sex<0){
if(selector.match(/^,[w1]/)){
sex = 1;
}else if(selector.match(/^,[h0]/)){
sex = 0;
}
}else if(sex==1&&selector.match(/^,[h0]/)){
return [];
}else if(sex==0&&selector.match(/^,[w1]/)){
return [];
}
if(sex>-1&&!selector.includes(',1')&&!selector.includes(',0')){
selector = ','+sex+selector;
}
if(selector.match(/,[mwd0](&[ol\d]+)?,w|,[hfs1](&[ol\d]+)?,h/)){ //同志关系去除
return [];
}
const result = expandSelector(selector).map(selector => selector.replace(/,[01]/, '').substr(1)); //去前面逗号和性别信息
return filterId(result);
};

32
src/module/unit.js Normal file
View File

@ -0,0 +1,32 @@
/*
* 数值转换
*/
const textAttr = ['','一','二','三','四','五','六','七','八','九','十'];
// 中文数字转阿拉伯数字
export function zh2number(text){
let num = 0;
const map = {'大':1,'小':99};
if(map[text]){
num = map[text];
}else{
let [unit,dec=0] = text.replace(/^十/,'一十').split('十').map(word=> textAttr.indexOf(word)).reverse();
num = dec*10+unit;
}
return num;
};
// 阿拉伯数字转中文数字
export function number2zh(num){
let text = '';
const map = {1:'大',99:'小'};
if(map[num]){
text = map[num];
}else{
let dec = ~~(num/10);
let unit = num%10;
text = (dec?(textAttr[dec]+'十').replace('一十','十'):'')+textAttr[unit];
}
return text;
};

7
src/relationship-mode.js Normal file
View File

@ -0,0 +1,7 @@
import guangdong from './locale/guangdong.js';
import north from './locale/north.js';
export default {
guangdong,
north
};

76
src/relationship.js Normal file
View File

@ -0,0 +1,76 @@
import {getOptions} from './module/options.js';
import {getSelectors,mergeSelector,selector2id} from './module/selector.js';
import {reverseId,getItemsById,getChainById,getPairsById} from './module/id.js';
import {setModeData,getModeData,modeData} from './module/mode.js';
// 对外方法
let relationship = function (parameter) {
if(typeof parameter =='string'){
parameter = getOptions(parameter);
}
let options = Object.assign({
text: '', // 目标对象:目标对象的称谓汉字表达,称谓间用‘的’字分隔
target: '', // 相对对象:相对对象的称谓汉字表达,称谓间用‘的’字分隔,空表示自己
sex: -1, // 本人性别0表示女性,1表示男性
type: 'default', // 转换类型:'default'计算称谓,'chain'计算关系链,'pair'计算关系合称
reverse: false, // 称呼方式true对方称呼我,false我称呼对方
mode: 'default', // 模式选择使用setMode方法定制不同地区模式在此选择自定义模式
optimal: false // 最短关系:计算两者之间的最短关系
}, parameter);
// 切换模式
getModeData(options.mode);
let fromSelectors = getSelectors(options.text);
let toSelectors = getSelectors(options.target);
if (!toSelectors.length) {
toSelectors = [''];
}
const result = fromSelectors.flatMap(fromSelector => {
return toSelectors.flatMap(toSelector => {
return mergeSelector({
from: fromSelector,
to: toSelector,
sex: options.sex,
optimal: options.optimal
}).flatMap(data => {
const ids = data ? selector2id(data['selector'], data['sex']) : [];
return ids.flatMap(id => {
let temps = [id];
let sex = data['sex'];
if (options.reverse) {
temps = reverseId(id,sex);
if(id.match(/([fhs1](&[ol\d]+)?|[olx]b)$/)){
sex = 1;
}else{
sex = 0;
}
}
if (options.type === 'chain') {
return temps.map(id => getChainById(id, sex)).filter(item => item);
} else if (options.type === 'pair') {
const reversedTemps = reverseId(id, data['sex']);
return reversedTemps.flatMap(rId => getPairsById(id, rId));
} else {
return temps.flatMap(id => {
let items = getItemsById(id);
if (!items.length) {
items = getItemsById(sex + ',' + id);
}
return items;
});
}
});
});
});
});
return [...new Set(result)];
};
// 获取数据表
relationship.data = modeData;
// 获取数据量
relationship.dataCount = Object.keys(modeData).length;
// 设置语言模式
relationship.setMode = setModeData;
export default relationship;

BIN
static/image/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

53
static/image/bg.svg Normal file
View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1440px" height="448px" viewBox="0 0 1440 448" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Background</title>
<desc>Created with Sketch.</desc>
<defs>
<linearGradient x1="-5.68700053%" y1="45.5298642%" x2="84.7892757%" y2="53.934985%" id="linearGradient-1">
<stop stop-color="#FBFCFD" offset="0%"></stop>
<stop stop-color="#F8FCFF" offset="100%"></stop>
</linearGradient>
<radialGradient cx="49.4552285%" cy="50%" fx="49.4552285%" fy="50%" r="94.8348304%" gradientTransform="translate(0.494552,0.500000),scale(0.311111,1.000000),rotate(90.000000),translate(-0.494552,-0.500000)" id="radialGradient-2">
<stop stop-color="#FFFFFF" stop-opacity="0.5" offset="0%"></stop>
<stop stop-color="#EDF6FF" stop-opacity="0.578179633" offset="100%"></stop>
</radialGradient>
<rect id="path-3" x="0" y="0" width="1440" height="448"></rect>
<linearGradient x1="72.8463444%" y1="12.5451885%" x2="72.8463444%" y2="295.836589%" id="linearGradient-5">
<stop stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
<stop stop-color="#9FD7FF" stop-opacity="0.383058348" offset="100%"></stop>
</linearGradient>
<linearGradient x1="16.6159843%" y1="49.1386719%" x2="5.85340543%" y2="50.8613281%" id="linearGradient-6">
<stop stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
<stop stop-color="#F2F7FC" offset="100%"></stop>
</linearGradient>
<rect id="path-7" x="0" y="259" width="1440" height="189"></rect>
<linearGradient x1="54.7550093%" y1="16.6478641%" x2="54.7550093%" y2="112.331979%" id="linearGradient-8">
<stop stop-color="#FFFFFF" stop-opacity="0" offset="0%"></stop>
<stop stop-color="#84c1ec" stop-opacity="0.225387893" offset="100%"></stop>
</linearGradient>
</defs>
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g>
<g>
<g>
<g>
<g transform="translate(0.000000, 0.000000)">
<mask id="mask-4" fill="white">
<use xlink:href="#path-3"></use>
</mask>
<g>
<use fill="url(#linearGradient-1)" xlink:href="#path-3"></use>
<use fill="url(#radialGradient-2)" xlink:href="#path-3"></use>
</g>
<g mask="url(#mask-4)">
<use fill="url(#linearGradient-5)" xlink:href="#path-7"></use>
<use fill="url(#linearGradient-6)" xlink:href="#path-7"></use>
</g>
<rect fill="url(#linearGradient-8)" mask="url(#mask-4)" x="0" y="166" width="1440" height="282"></rect>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

1
static/image/draw/1.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

1
static/image/draw/2.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.6 KiB

1
static/image/draw/3.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

1
static/image/draw/4.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
static/image/icon-gotop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
static/image/icon/miui.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
static/image/icon/qinqi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
static/image/qrcode.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
static/image/qrcode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
static/image/scan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

View File

@ -0,0 +1 @@
<svg xmlns='http://www.w3.org/2000/svg' width='25' height='25' viewBox='0 0 25 25'><circle cx='1.5' cy='1.5' r='2' fill='#DCE2E6' fill-rule='evenodd'/></svg>

After

Width:  |  Height:  |  Size: 158 B

46
static/script/index.js Normal file
View File

@ -0,0 +1,46 @@
// 头部滚动
(function(){
let $header = document.querySelector('.mod-head');
document.querySelector('.scroll-container').addEventListener('scroll',function(){
let scrollTop = this.scrollTop;
let ratio = Math.min(scrollTop/1000,1);
$header.style.background = 'rgba(255,255,255,'+(ratio*0.8)+')';
$header.style.boxShadow = '1px 1px 6px rgba(0,0,0,'+(ratio*0.1)+')';
});
})();
// 特征选项卡
(function(){
let $mod_feature = document.querySelector('.mod-feature');
let $nav = $mod_feature.querySelectorAll('.nav li');
let $panels = $mod_feature.querySelectorAll('.panels .panel');
let togglePanel = function(index = 0){
$nav.forEach(function($li){
$li.classList.remove('active');
});
$nav[index].classList.add('active');
$panels.forEach(function($panel){
$panel.classList.remove('active');
});
$panels[index].classList.add('active');
};
$nav.forEach(function($item,index){
$item.addEventListener('click',function(){
togglePanel(index);
});
});
togglePanel(0);
})();
// 底部滚动
(function(){
let $gotop = document.querySelector('.mod-fixedbar .gotop');
let $container = document.querySelector('.scroll-container');
$gotop.addEventListener('click',function(){
$container.scrollTo({
left:0,
top:0,
behavior:'smooth'
});
});
})();

1074
static/style/index.css Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,506 +0,0 @@
html{color:#000;background:#FFF}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}ol,ul{list-style:none}caption,th{text-align:left}h1,h3,h3,h4,h5,h6{font-size:100%;font-weight:normal}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;*font-size:100%}legend{color:#000}
html{
height:100%;
}
body{
height: 100%;
font-size: 14px;
font-family: Arial,Helvetica,"Microsoft Yahei";
color: rgb(110, 119, 129);
}
button, input {
font-family: Arial,Helvetica,"Microsoft Yahei";
}
img{
vertical-align: middle;
}
a{
text-decoration: none;
color: rgb(110, 119, 129);
}
a:hover{
text-decoration: underline;
}
.wrapper{
background: #fdfdfd;
}
.container{
padding: 0 15px 30px;
}
.inner{
max-width: 720px;
margin: 0 auto;
}
.mod-head .hd,.mod-head .bd{
max-width: 540px;
padding: 0 10px;
margin:0 auto;
}
.mod-head .hd{
position: relative;
}
.mod-head .hd span.tag{
position: absolute;
left: 10px;
top: 0;
display: block;
height: 20px;
padding: 5px 12px;
background: #f0f0f0;
line-height: 20px;
color: #444;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
}
.mod-head .bd{
height: 36px;
padding: 10px 10px 0;
margin-bottom: 5px;
text-align: right;
}
.mod-head .btn{
position: relative;
display: inline-block;
min-width: 56px;
height: 34px;
background: #fff;
padding: 0 12px;
border: 1px solid #ececec;
border-radius: 6px;
line-height: 34px;
text-decoration: none;
text-align: center;
font-size: 14px;
color: #333;
overflow: hidden;
transition: color .2s,opacity .2s;
font-family: Tahoma,Arial, Helvetica,"Microsoft YaHei";
outline: none;
-webkit-appearance: none;
}
.mod-head .btn:after {
content: " ";
position: absolute;
width: 100%;
height: 100%;
background: #000;
left: 0;
top: 0;
opacity: 0;
transition: opacity .2s;
border-radius: 6px;
overflow: hidden;
pointer-events: none;
}
.mod-head .btn span,.mod-head .btn svg{
vertical-align: middle;
}
.mod-head .btn svg,.mod-head .btn svg+span{
position: relative;
top: -1px;
}
.mod-head .btn:hover {
color: #000;
opacity: 1;
}
.mod-head .btn:hover:after {
opacity: .02;
}
.mod-panel {
width: 100%;
}
.mod-panel h1{
line-height: 32px;
font-size: 22px;
color:#212121;
}
.mod-panel h2{
line-height: 30px;
text-align: center;
font-weight: normal;
font-size: 18px;
}
.mod-panel .hd,.mod-panel .bd{
max-width: 540px;
margin:0 auto;
}
.mod-panel .hd{
padding: 10px 0;
margin-bottom: 5px;
line-height: 22px;
text-align: left;
}
.mod-panel .hd b{
margin: 0 3px;
color: #fd7474;
}
.mod-panel .bd .c-hd{
height: 36px;
margin-bottom: 10px;
border-bottom: 1px solid #f0f0f0;
}
.mod-panel .bd .c-hd li{
float: left;
width: 33.33%;
height: 36px;
line-height: 36px;
}
.mod-panel .bd .c-hd li a{
display: block;
text-align: center;
text-decoration: none;
color: #999;
cursor: pointer;
}
.mod-panel .bd .c-hd li.active a{
position: relative;
color: #333;
}
.mod-panel .bd .c-hd li.active a::after{
position: absolute;
left: 50%;
bottom: 0;
display: block;
content: '';
width: 16px;
height: 4px;
margin-left: -8px;
background: #2095f2;
border-radius: 3px;
}
.mod-panel .bd .c-panel{
display: none;
}
.mod-panel .bd .operation{
margin: 10px 0;
}
.mod-panel .bd .row{
margin-bottom: 5px;
}
.mod-panel .bd .field{
line-height: 28px;
}
.mod-panel .bd p{
overflow: hidden;
}
.mod-panel .bd label{
display: inline-block;
min-width: 90px;
margin-right: 15px;
}
.mod-panel .bd label span,.mod-panel .bd label input{
vertical-align: middle;
}
.mod-panel .bd .input-text{
display: inline-block;
width: 100%;
height: 30px;
background: #fafafa;
border: 1px solid #ebebeb;
padding: 5px 10px;
box-sizing: border-box;
line-height: 20px;
border-radius: 5px;
outline: none;
}
.mod-panel .bd .input-text-small{
width: 200px;
}
.mod-panel .bd .btn {
height: 32px;
min-width: 90px;
background: #f0f0f0;
border: medium none;
line-height: 30px;
vertical-align: middle;
font-size: 15px;
color: #333333;
cursor: pointer;
outline: none;
border-radius: 4px;
}
.mod-panel .bd .btn:hover{
background: #e4e4e4;
}
.mod-panel .bd .btn-green{
background: #4bae4f;
color: #fff;
}
.mod-panel .bd .btn-green:hover{
background: #47a04b;
}
.mod-panel .bd .btn-red{
background: #f56954;
color: #fff;
}
.mod-panel .bd .btn-red:hover{
background: #f4543c;;
}
.mod-panel .bd .btn-orange{
background: #ff9000;
color: #fff;
}
.mod-panel .bd .btn-orange:hover{
background: #e18309;
}
.mod-panel .bd .btn-small{
min-width: 40px;
cursor: pointer;
}
.mod-panel .bd .btn[disabled]{
background: #f0f0f0;
color: #aaa;
}
.mod-panel .bd textarea{
display: block;
width: 100%;
height: 120px;
padding:5px 10px;
background: #fafafa;
border: 1px solid #ebebeb;
box-sizing: border-box;
border-radius: 5px;
resize: none;
outline: none;
}
.mod-panel .bd p{
line-height: 22px;
}
.mod-panel .bd p span{
margin-right: 10px;
}
.mod-panel .ft{
padding-top: 10px;
border-top:1px dotted #e0e0e0;
}
.mod-panel .about{
padding: 0 20px;
margin-bottom: 20px;
}
.mod-panel .about p{
line-height: 24px;
text-indent: 2em;
}
.mod-panel .copy{
padding: 10px 0;
margin-bottom: 15px;
text-align: center;
}
.mod-panel .copy p{
line-height: 22px;
}
.mod-panel .copy p a,.mod-panel .copy p span{
vertical-align: middle;
}
.mod-panel .copy p.buttons{
margin: 10px 0 5px;
}
.mod-panel .copy .text-red{
font-weight: bold;
color: #fd7474;
}
.mod-panel .intro,.mod-panel .article{
padding: 15px 20px;
margin: 10px 0;
background: rgb(246, 248, 250);
border-radius: 6px;
}
.mod-panel .intro h3{
margin-bottom: 10px;
font-size: 16px;
font-weight: bold;
color: #646464;
}
.mod-panel .intro p{
line-height: 22px;
}
.mod-panel .intro p.q{
margin-top: 10px;
font-weight: bold;
color: #646464;
}
.mod-panel .article p{
line-height: 22px;
text-indent: 2em;
}
.mod-panel .banner{
border: 1px solid #eee;
border-radius: 5px;
overflow: hidden;
box-shadow: 1px 2px 8px rgba(0,0,0,0.03);
}
.mod-panel .banner a{
display: block;
position: relative;
height: 160px;
padding: 10px;
background: #fcfcfc;
overflow: hidden;
}
.mod-panel .banner a:hover{
text-decoration: none;
background: #fffbf5;
}
.mod-panel .banner img{
margin-top: -5px;
}
.mod-panel .banner span{
display: block;
line-height: 32px;
}
.mod-panel .banner span.picture{
float: left;
width: 40%;
text-align: center;
}
.mod-panel .banner span.title{
margin-top: 45px;
margin-left: 50%;
font-weight: bold;
font-size: 24px;
color: #646464;
}
.mod-panel .banner span.subtitle{
margin-left: 50%;
font-size: 18px;
}
.mod-panel .table-inner{
overflow-x: auto;
}
.mod-panel table {
width: 100%;
margin-bottom: 10px;
border: 1px solid #cee1ee;
border-collapse: collapse;
border-spacing: 0;
}
.mod-panel thead{
background-color: #e3eef8;
}
.mod-panel tr {
border-bottom: 1px solid #cee1ee;
line-height: 24px;
font-size: 13px;
}
.mod-panel tr td,.mod-panel tr th{
word-break: break-all;
word-wrap: break-word;
padding: 5px 8px;
border: 1px solid #cee1ee;
line-height: 20px;
font-weight: normal;
}
.mod-panel tr p.name{
font-size: 15px;
font-weight: bold;
}
.mod-panel tr .download{
display: inline-block;
padding: 0 15px;
background: #32ccc8;
color: #fff;
line-height: 32px;
font-size: 13px;
text-align: center;
border-radius: 3px;
text-decoration: none;
}
.mod-panel tr .download:hover{
background: #2e9e9b;
}
.mod-qrcode{
position: fixed;
right: 25px;
bottom: 25px;
text-align: center;
}
.mod-qrcode .box{
width: 150px;
height: 148px;
overflow: hidden;
}
.mod-qrcode p{
line-height: 30px;
}
@media screen and (max-width: 800px) {
.mod-panel .hd{
padding-top: 10px;
}
.mod-panel .hd h1{
font-size: 20px;
}
.mod-panel .hd p{
line-height: 22px;
overflow: hidden;
}
.mod-panel .hd span.tag{
top: 5px;
margin-left: -148px;
font-size: 13px;
}
.mod-panel .c-hd ul{
overflow-x: auto;
white-space: nowrap;
}
.mod-panel .c-hd li{
float: none;
display: inline-block;
width: auto;
}
.mod-panel .c-hd li a{
padding: 0 4px;
}
.mod-panel textarea{
width: 100%;
height: 80px;
box-sizing: border-box;
}
.mod-panel .bd p span{
float: left;
width: 50%;
text-align: center;
margin-right: 0;
}
.mod-panel .btn{
width: 48%;
margin-bottom: 5px;
line-height: 24px;
}
.mod-panel .btn-3{
width: 32%;
}
.mod-panel .banner a{
height: 100px;
}
.mod-panel .banner img{
zoom:0.5;
}
.mod-panel .banner span{
line-height: 24px;
}
.mod-panel .banner span.picture{
width: 35%;
}
.mod-panel .banner span.title{
margin-top: 25px;
margin-left: 40%;
font-size: 18px;
}
.mod-panel .banner span.subtitle{
margin-left: 40%;
font-size: 14px;
}
.mod-qrcode{
position: static;
margin-bottom: 10px;
}
.mod-qrcode .box{
margin: 0 auto;
}
}

View File

@ -2,29 +2,79 @@
var test = require('tape'); var test = require('tape');
var relationship = require('..'); var relationship = require('..');
test('relationship.js show to be tested', function (t) { test('[call]', function (t) {
// TODO // console.log('[test]',relationship({text:'爸爸的妈妈的姐姐的儿子'}));
t.deepEqual(relationship({text:'儿子的爸爸的妈妈',sex:1}),['妈妈']);
t.deepEqual(relationship({text:'爱人',sex:1}),['老婆']); t.deepEqual(relationship({text:'爸爸的哥哥的弟弟的儿子'}),['堂哥','堂弟','哥哥','弟弟','自己']);
t.deepEqual(relationship({text:'爱人的爱人',sex:1}),['自己']); t.deepEqual(relationship({text:'爸爸的妹妹的女儿的老公'}),['姑表姐夫','姑表妹夫']);
t.deepEqual(relationship({text:'老婆的爱人',sex:1}),['自己']); t.deepEqual(relationship({text:'表姐的哥哥',sex:1}),['姑表哥','舅表哥']);
t.deepEqual(relationship({text:'老婆的老公',sex:1}),['自己']); t.deepEqual(relationship({text:'表姐的妹妹',sex:1}),['姑表姐','姑表妹','舅表姐','舅表妹']);
t.deepEqual(relationship({text:'老婆的外孙的姥爷',sex:1}),['自己']); t.deepEqual(relationship({text:'弟弟的表哥',sex:1}),['姑表哥','姑表弟','舅表哥','舅表弟']);
t.deepEqual(relationship({text:'表姐的哥哥',sex:1}),['姑表哥','舅表哥']); t.deepEqual(relationship({text:'姐姐的老公的姐姐的老公'}),['姊妹姻姊妹壻']);
t.deepEqual(relationship({text:'表姐的妹妹',sex:1}),['姑表姐妹','舅表姐妹']); t.deepEqual(relationship({text:'哥哥的弟弟的爸爸的儿子',sex:1}),['哥哥','弟弟','自己']);
t.deepEqual(relationship({text:'弟弟的表哥',sex:1}),['姑表兄弟', '舅表兄弟']); t.deepEqual(relationship({text:'爱人',sex:1}),['老婆']);
t.deepEqual(relationship({text:'老公的老婆的儿子的爸爸',sex:0}),['老公']); t.deepEqual(relationship({text:'爱人的爱人',sex:1}),['自己']);
t.deepEqual(relationship({text:'哥哥的弟弟的爸爸的儿子',sex:1}),['兄弟','自己']); t.deepEqual(relationship({text:'老婆的爱人',sex:1}),['自己']);
t.deepEqual(relationship({text:'爸爸的舅舅',sex:0,reverse:true}),['甥孙女']); t.deepEqual(relationship({text:'老婆的老公',sex:1}),['自己']);
t.deepEqual(relationship({text:'舅爷爷',type:'chain'}),['爸爸的妈妈的兄弟']); t.deepEqual(relationship({text:'老婆的外孙的姥爷',sex:1}),['自己']);
t.deepEqual(relationship({text:'堂兄弟的孩子',sex:1}),['堂侄','堂侄女']); t.deepEqual(relationship({text:'老公的老婆的儿子的爸爸',sex:0}),['老公']);
t.deepEqual(relationship({text:'岳母',target:'女儿',reverse:true}),['外孙女']); t.deepEqual(relationship({text:'堂兄弟的孩子',sex:1}),['堂侄','堂侄女']);
t.deepEqual(relationship({text:'姑妈',target:'舅妈',reverse:true}),['兄弟眷兄妇','兄弟眷弟妇']); t.deepEqual(relationship({text:'儿子的爸爸的妈妈',sex:1}),['妈妈']);
t.deepEqual(relationship({text:'舅妈',target:'女儿',reverse:true}),['姑甥孙女','姑甥外孙女']); t.deepEqual(relationship({text:'岳母的配偶的孩子的爸爸'}),['岳父']);
t.deepEqual(relationship({text:'老公的父母',target:'孩子'}),['爷爷','奶奶']); t.deepEqual(relationship({text:'爸爸的妈妈的姐姐的儿子'}),['姨伯父','姨叔父']);
t.deepEqual(relationship({text:'爸爸的哥哥的弟弟的儿子'}),['堂兄弟', '兄弟', '自己']); t.end();
t.deepEqual(relationship({text:'外婆',target:'女婿',reverse:true}),['外曾孙女婿','外曾外孙女婿']); });
t.deepEqual(relationship({text:'我',target:'爸爸'}),['儿子','女儿']); test('[target]', function (t) {
t.deepEqual(relationship({text:'爱人',target:'娘家侄子'}),['姑丈']); t.deepEqual(relationship({text:'我',target:'爸爸'}),['儿子','女儿']);
t.end(); t.deepEqual(relationship({text:'老公的父母',target:'孩子'}),['爷爷','奶奶']);
t.deepEqual(relationship({text:'爱人',target:'娘家侄子'}),['姑丈']);
t.end();
});
test('[reverse]', function (t) {
t.deepEqual(relationship({text:'爸爸的舅舅',sex:0,reverse:true}),['甥孙女']);
t.deepEqual(relationship({text:'岳母',target:'女儿',reverse:true}),['外孙女']);
t.deepEqual(relationship({text:'姑妈',target:'舅妈',reverse:true}),['兄弟眷兄弟妇']);
t.deepEqual(relationship({text:'舅妈',target:'女儿',reverse:true}),['姑甥孙女','姑甥外孙女']);
t.deepEqual(relationship({text:'外婆',target:'女婿',reverse:true}),['外曾孙女婿','外曾外孙女婿']);
t.end();
});
test('[filter]', function (t) {
t.deepEqual(relationship({text:'内侄'}),['舅侄','舅侄女']);
t.end();
});
test('[type:chain]', function (t) {
t.deepEqual(relationship({text:'舅爷爷',type:'chain'}),['爸爸的妈妈的兄弟']);
t.deepEqual(relationship({text:'妻儿',type:'chain'}),['老婆','儿子','女儿']);
t.deepEqual(relationship({text:'父母',target:'老公',type:'chain'}),['老婆的爸爸','老婆的妈妈']);
t.end();
});
test('[type:pair]', function (t) {
t.deepEqual(relationship({text:'舅妈',target:'哥哥',type:'pair'}),['舅甥']);
t.deepEqual(relationship({text:'舅妈',target:'外婆',type:'pair'}),['婆媳']);
t.deepEqual(relationship({text:'舅妈',target:'二舅',type:'pair'}),['伯媳','叔嫂','夫妻']);
t.deepEqual(relationship({text:'堂哥',target:'叔叔',type:'pair'}),['伯侄', '叔侄', '父子']);
t.end();
});
test('[age]', function (t) {
t.deepEqual(relationship({text:'妈妈的二哥'}),['二舅']);
t.deepEqual(relationship({text:'爸爸的二哥'}),['二伯']);
t.deepEqual(relationship({text:'二舅妈',target:'三舅'}),['二嫂']);
t.deepEqual(relationship({text:'爸爸的二爸'}),['二爷爷']);
t.deepEqual(relationship({text:'姑姑',target:'叔叔',optimal:true}),['姐姐','妹妹']);
t.deepEqual(relationship({text:'大舅',target:'二舅的儿子'}),['伯父']);
t.deepEqual(relationship({text:'二舅妈',target:'二舅',type:'pair'}),['夫妻']);
t.deepEqual(relationship({text:'二舅妈',target:'大舅',type:'pair'}),['伯媳']);
t.end();
});
test('[expression]', function (t) {
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.deepEqual(relationship('外婆和奶奶之间是什么关系?'),['儿女亲家']);
t.end();
}); });

5
vercel.json Normal file
View File

@ -0,0 +1,5 @@
{
"github": {
"silent": true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.container .inner[data-v-34e41ea0],.container[data-v-34e41ea0]{height:100%}.mod-detail[data-v-34e41ea0]{height:100%;background:#333}.mod-detail .hd[data-v-34e41ea0]{height:.48rem;background:#444;border-bottom:1px solid hsla(0,0%,100%,.08)}.mod-detail .hd a[data-v-34e41ea0]{position:relative;display:inline-block;height:.2rem;margin:.09rem .15rem .09rem .24rem;padding:.05rem .1rem .05rem .05rem;background:#333;line-height:.2rem;border-top-right-radius:.03rem;border-bottom-right-radius:.03rem;color:hsla(0,0%,100%,.8)}.mod-detail .hd a[data-v-34e41ea0]:before{position:absolute;left:-.3rem;top:0;content:"";width:0;border:.15rem solid transparent;border-right-color:#333}.mod-detail .bd[data-v-34e41ea0]{padding:.15rem;color:hsla(0,0%,100%,.8)}.mod-detail .bd h3[data-v-34e41ea0]{line-height:.3rem;font-weight:700;font-size:.16rem}.mod-detail .bd p[data-v-34e41ea0]{line-height:.3rem}

View File

@ -1 +0,0 @@
.container .inner[data-v-8bae315e],.container[data-v-8bae315e]{height:100%}.mod-calculator[data-v-8bae315e]{height:100%;background:#333}.mod-calculator .hd[data-v-8bae315e]{margin:0 .02rem;padding:.15rem 0 .1rem}.mod-calculator .hd .title[data-v-8bae315e]{display:inline-block;line-height:.22rem;border-left:.04rem solid #e7763e;padding-left:.12rem;font-weight:700;font-size:.17rem}.mod-calculator .search[data-v-8bae315e]{padding:0 .16rem;margin-bottom:.2rem;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.mod-calculator .search .row[data-v-8bae315e]{position:relative;width:100%;margin-bottom:.03rem}.mod-calculator .search input[data-v-8bae315e]{padding:.05rem .08rem;background:hsla(0,0%,100%,.1);line-height:.36rem;font-family:Arial,Helvetica,Microsoft Yahei}.mod-calculator .search button[data-v-8bae315e],.mod-calculator .search input[data-v-8bae315e]{display:block;width:100%;border:medium none;height:.36rem;font-size:.16rem;color:hsla(0,0%,100%,.9);border-radius:.05rem;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none}.mod-calculator .search button[data-v-8bae315e]{margin:.1rem 0 .05rem;background:#e7763e}.mod-calculator .search button[data-v-8bae315e]:hover{background:#e66747}.mod-calculator .search .close[data-v-8bae315e]{position:absolute;right:.15rem;top:.09rem;opacity:.6}.mod-calculator .list[data-v-8bae315e]{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;padding:.08rem .16rem;color:hsla(0,0%,100%,.9)}.mod-calculator .list .item[data-v-8bae315e]{padding:.1rem .15rem;margin-bottom:.02rem;background:hsla(0,0%,49%,.15);border-radius:.03rem;line-height:.24rem;font-size:.16rem}

View File

@ -1 +0,0 @@
.container .inner[data-v-634b12ec],.container[data-v-634b12ec]{height:100%}.mod-calculator[data-v-634b12ec]{height:100%;background:#333}.mod-calculator .hd[data-v-634b12ec]{margin:0 .02rem;padding:.15rem 0 .1rem}.mod-calculator .hd .title[data-v-634b12ec]{display:inline-block;line-height:.22rem;border-left:.04rem solid #e7763e;padding-left:.12rem;font-weight:700;font-size:.17rem}.mod-calculator .search[data-v-634b12ec]{padding:0 .16rem;margin-bottom:.2rem;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.mod-calculator .search .row[data-v-634b12ec]{position:relative;width:100%;margin-bottom:.03rem}.mod-calculator .search input[data-v-634b12ec]{padding:.05rem .08rem;background:hsla(0,0%,100%,.1);line-height:.36rem;font-family:Arial,Helvetica,Microsoft Yahei}.mod-calculator .search button[data-v-634b12ec],.mod-calculator .search input[data-v-634b12ec]{display:block;width:100%;border:medium none;height:.36rem;font-size:.16rem;color:hsla(0,0%,100%,.9);border-radius:.05rem;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none}.mod-calculator .search button[data-v-634b12ec]{margin:.1rem 0 .05rem;background:#e7763e}.mod-calculator .search button[data-v-634b12ec]:hover{background:#e66747}.mod-calculator .search .close[data-v-634b12ec]{position:absolute;right:.15rem;top:.09rem;opacity:.6}.mod-calculator .search .call[data-v-634b12ec]{display:inline-block;line-height:.24rem;color:#bbb}.mod-calculator .search .exchange[data-v-634b12ec]{float:right;display:inline-block;width:.2rem;height:.2rem;margin:.02rem .1rem;background:#e7763e;line-height:.2rem;text-align:center;font-size:.16rem;border-radius:50%;color:hsla(0,0%,100%,.8)}.mod-calculator .search .exchange[data-v-634b12ec]:hover{background:#e66747}.mod-calculator .list[data-v-634b12ec]{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;padding:.08rem .16rem;color:hsla(0,0%,100%,.9)}.mod-calculator .list .item[data-v-634b12ec]{padding:.1rem .15rem;margin-bottom:.02rem;background:hsla(0,0%,49%,.15);border-radius:.03rem;line-height:.24rem;font-size:.16rem}

View File

@ -1 +0,0 @@
.container .inner[data-v-247784a0],.container[data-v-247784a0]{height:100%}.mod-calculator[data-v-247784a0]{height:100%;background:#333}.mod-calculator .row[data-v-247784a0]{height:100%;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:space-between;-ms-flex-align:space-between;align-items:space-between;-webkit-box-sizing:border-box;box-sizing:border-box}.mod-calculator .row2[data-v-247784a0]{-webkit-box-flex:2;-ms-flex:2;flex:2}.mod-calculator .col[data-v-247784a0]{width:100%;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:space-between;-ms-flex-align:space-between;align-items:space-between;-webkit-box-sizing:border-box;box-sizing:border-box}.mod-calculator span[data-v-247784a0]{vertical-align:middle}.mod-calculator .screen[data-v-247784a0]{width:100%;height:40%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:space-between;-ms-flex-align:space-between;align-items:space-between}.mod-calculator .screen .tip[data-v-247784a0]{width:100%;padding:0 .15rem;height:.3rem;line-height:.3rem;color:#bbb;-webkit-box-sizing:border-box;box-sizing:border-box}.mod-calculator .screen .input[data-v-247784a0],.mod-calculator .screen .output[data-v-247784a0]{width:100%;padding:0 .15rem .15rem .1rem;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.mod-calculator .screen .input[data-v-247784a0]{-webkit-box-flex:2;-ms-flex:2;flex:2;font-size:.16rem;color:#bbb}.mod-calculator .screen .output[data-v-247784a0]{-webkit-box-flex:3;-ms-flex:3;flex:3;font-size:.21rem;color:#fff}.mod-calculator .screen .setting[data-v-247784a0]{width:100%;padding:0 .15rem;height:.4rem;background:rgba(0,0,0,.15);line-height:.4rem;font-size:.16rem;color:hsla(0,0%,100%,.9);-webkit-box-sizing:border-box;box-sizing:border-box}.mod-calculator .screen .setting input[type=checkbox][data-v-247784a0]{display:none}.mod-calculator .screen .setting .checkbox[data-v-247784a0]{margin:0 .07rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:inline-block;width:.4rem;height:.2rem;background:hsla(0,0%,100%,.15);line-height:.2rem;vertical-align:middle;text-align:center;border-radius:.1rem}.mod-calculator .screen .setting .switch[data-v-247784a0]{position:absolute;left:0;width:.2rem;height:.2rem;content:"";background:hsla(0,0%,100%,.72);border-radius:.1rem}.mod-calculator .screen .setting input:checked+.checkbox .switch[data-v-247784a0]{left:auto;right:0}.mod-calculator .screen .setting .copyright[data-v-247784a0]{float:right;font-size:.14rem;color:#484848}.mod-calculator .panel[data-v-247784a0]{width:100%;height:60%;font-size:.16rem}.mod-calculator .panel a[data-v-247784a0],.mod-calculator .panel button[data-v-247784a0]{position:relative;background:transparent;border:none;border-left:.01rem solid #444;border-top:.01rem solid #444;font-family:Arial,Helvetica,Microsoft Yahei;font-size:.18rem;color:hsla(0,0%,100%,.9);-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center;vertical-align:middle;border-radius:.02rem}.mod-calculator .panel a[data-v-247784a0]:active,.mod-calculator .panel button[data-v-247784a0]:active{background-color:rgba(0,0,0,.1);color:hsla(0,0%,100%,.8)}.mod-calculator .panel button[disabled][data-v-247784a0]{background:transparent;color:hsla(0,0%,100%,.3)}.mod-calculator .panel .btn-first[data-v-247784a0]{border-left:none}.mod-calculator .panel .btn-equal[data-v-247784a0]{background:#e7763e}.mod-calculator .panel .btn-equal-hover[data-v-247784a0]{background:#e66747}.mod-calculator .panel .btn-active[data-v-247784a0]{background-color:rgba(0,0,0,.2);color:hsla(0,0%,100%,.7)}

View File

@ -1,24 +1,61 @@
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=https://passer-by.com/relationship/vue/favicon.ico><title>亲戚计算器手机版 亲戚称呼计算器APP</title><meta name=keywords content=家庭称谓,亲戚称呼,亲戚称谓,亲戚叫法,亲戚关系计算器,亲戚计算器,称呼计算器,親戚關係稱呼,亲戚关系大全,叫什么,什么关系><meta name=description content=中国亲戚关系计算器手机版,走亲访友,逢年过节必备神器。它避免了叫错、不会叫亲戚的尴尬,人人必备家庭教育工具。><link href=https://passer-by.com/relationship/vue/css/chunk-1d9ca9a0.css rel=prefetch><link href=https://passer-by.com/relationship/vue/css/chunk-25bca69f.css rel=prefetch><link href=https://passer-by.com/relationship/vue/css/chunk-337d0ccf.css rel=prefetch><link href=https://passer-by.com/relationship/vue/css/chunk-7f98b868.css rel=prefetch><link href=https://passer-by.com/relationship/vue/js/chunk-1d9ca9a0.js rel=prefetch><link href=https://passer-by.com/relationship/vue/js/chunk-25bca69f.js rel=prefetch><link href=https://passer-by.com/relationship/vue/js/chunk-337d0ccf.js rel=prefetch><link href=https://passer-by.com/relationship/vue/js/chunk-7f98b868.js rel=prefetch><link href=https://passer-by.com/relationship/vue/css/app.css rel=preload as=style><link href=https://passer-by.com/relationship/vue/js/app.js rel=preload as=script><link href=https://passer-by.com/relationship/vue/js/chunk-vendors.js rel=preload as=script><link href=https://passer-by.com/relationship/vue/css/app.css rel=stylesheet></head><body><noscript><strong>We're sorry but caipiao doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><script>setTimeout(function(){ <!DOCTYPE html>
if(location.hostname.indexOf('passer-by.com')==-1&&location.hostname!='localhost'){ <html lang="zh-CN">
location.href = 'http://passer-by.com/'; <head>
}else if( window.top != window.self ) { <meta charset="utf-8">
window.top.location = self.location.href; <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
} <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
},parseInt(3000+15000*Math.random()));</script><div id=app></div><script src=https://passer-by.com/relationship/script/relationship.js></script><script>var _hmt = _hmt || []; <meta name="robots" content="all">
(function() { <meta name="referrer" content="always">
var hm = document.createElement("script"); <meta name="renderer" content="webkit">
hm.src = "https://hm.baidu.com/hm.js?b86879c9cc57dd112fe1f7dd75206b82"; <meta http-equiv="Cache-Control" content="no-transform" />
var s = document.getElementsByTagName("script")[0]; <meta name="format-detection" content="telephone=no"/>
s.parentNode.insertBefore(hm, s); <meta name="applicable-device" content="pc,mobile"/>
})();</script><script>(function(){ <meta name="mobile-web-app-capable" content="yes"/>
var bp = document.createElement('script'); <meta name="mobile-web-app-status-bar-style" content="black"/>
var curProtocol = window.location.protocol.split(':')[0]; <link rel="icon" href="/relationship/vue/assets/favicon-CcRSb4Ef.ico">
if (curProtocol === 'https') { <title>亲戚计算器手机版 亲戚称呼计算器APP</title>
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; <meta name="keywords" content="家庭称谓,亲戚称呼,亲戚称谓,亲戚叫法,亲戚关系计算器,亲戚计算器,称呼计算器,親戚關係稱呼,亲戚关系大全,叫什么,什么关系">
} <meta name="description" content="中国亲戚关系计算器手机版,走亲访友,逢年过节必备神器。它避免了叫错、不会叫亲戚的尴尬,人人必备家庭教育工具。">
else { <script type="module" crossorigin src="/relationship/vue/assets/index-BiHcNiMB.js"></script>
bp.src = 'http://push.zhanzhang.baidu.com/push.js'; <link rel="stylesheet" crossorigin href="/relationship/vue/assets/index-Bqz9Bu5y.css">
} </head>
var s = document.getElementsByTagName("script")[0]; <body>
s.parentNode.insertBefore(bp, s); <noscript>
})();</script><div style="display: none;"><script>document.writeln('<iframe src="https://passer-by.com/browser/stat.html?type=relationship&ua='+navigator.userAgent+'" width="" height=""></iframe>');</script></div><script src=https://passer-by.com/relationship/vue/js/chunk-vendors.js></script><script src=https://passer-by.com/relationship/vue/js/app.js></script></body></html> <strong>We're sorry but caipiao doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<script type="text/javascript">
setTimeout(function(){
if(location.hostname.indexOf('passer-by.com')==-1&&location.hostname!='localhost'){
location.href = 'http://passer-by.com/';
}else if( window.top != window.self ) {
window.top.location = self.location.href;
}
},parseInt(3000+15000*Math.random()));
</script>
<div id="app"></div>
<script type="text/javascript" src="https://passer-by.com/relationship/dist/relationship.min.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?b86879c9cc57dd112fe1f7dd75206b82";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-1d9ca9a0"],{"98f3":function(t,a,s){"use strict";var n=s("d83d"),e=s.n(n);e.a},"9fc0":function(t,a,s){"use strict";s.r(a);var n=function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("div",{staticClass:"container"},[s("div",{staticClass:"mod-detail"},[s("div",{staticClass:"hd"},[s("router-link",{attrs:{to:"/"}},[t._v("返回")])],1),t._m(0),s("div",{staticClass:"ft"})])])},e=[function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("div",{staticClass:"bd"},[s("h3",[t._v("使用说明")]),s("p",[s("span",{staticClass:"name"},[t._v("←")]),s("span",[t._v("删除上一层关系")])]),s("p",[s("span",{staticClass:"name"},[t._v("↻")]),s("span",[t._v("清除所有输入")])]),s("p",[s("span",{staticClass:"name"},[t._v("⇌")]),s("span",[t._v("互称间切换")])]),s("p",[t._v("开始计算前,先在键盘左上方选择自己的性别")])])}],c={name:"Help",components:{},data:function(){return{}},computed:{},methods:{},created:function(){}},i=c,d=(s("98f3"),s("2877")),r=Object(d["a"])(i,n,e,!1,null,"34e41ea0",null);a["default"]=r.exports},d83d:function(t,a,s){}}]);
//# sourceMappingURL=chunk-1d9ca9a0.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-25bca69f"],{"0a24":function(t,e,i){},9304:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAgRJREFUWEfNlz1PFFEUhp+3JQFDgJIgFiaWdjZQUWuUCIZEe038BZoICfwCEu0piKiQYE0FDRWUJBQqUIoxaqA95mxmzOzd+biz7mb2NpvNnHPeZ/eee+c9InKZ2TAwBywCt4FxYCxJ/wFcAqfAFrAn6U9MaVUFmdkd4CXwBBitik+e/wTeA+uSTspySgHMbDURH4kUDsN+JxCvi/ILAcxsH5jpUjhMO5A0m1crF8DMvid73CP9VplLSRNhwQ4AM/sK3OylcqbWN0nT2dptAGb2AXjcJ/G07EdJC+mXfwBJw70KxJclrZjZG2C5JlhZ7pqkVmO2AJKjdgi0dbukLGAdiJZ4CmxmFsD76bjnRzQFeAs8z/mFYaEYiNicd5JeyMxuAGeAf+at2IKeWyf2FzDlAE+BjYr9jSkcExPKPHOAT8B8RIOVCXQj7pLbDnAE3I0AKPqLCRoupk9SuWMHOAcmIwE6ILJ5XRzXCwe4AoZqAORCdCHuda4HAqDxLWi8Cd25uM2qWv04hlveAw+BnYYuokcO4GbTr+Iiv1fnkqkT675xqvmX0UC8jhMId8DNGJKMceilEy7q6zaHnGdK++GIU5gOZ1xky/vhjDscsVOVDSa9dMhtTji7N4M7mmUaMx1Ol0p8Y9hw7vc2/3s4DcyGm9b7wAPgVsF4/gXYBT5LcojK9RfajEl0w5N/GQAAAABJRU5ErkJggg=="},9347:function(t,e,i){"use strict";var a=i("0a24"),s=i.n(a);s.a},ad80:function(t,e,i){"use strict";i.r(e);var a=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"container"},[a("div",{staticClass:"mod-calculator"},[t._m(0),a("div",{staticClass:"bd"},[a("div",{staticClass:"search"},[a("div",{staticClass:"row"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],attrs:{type:"text",placeholder:"输入你亲戚的称谓"},domProps:{value:t.value},on:{input:[function(e){e.target.composing||(t.value=e.target.value)},t.bindInput]}}),t.value?[a("span",{staticClass:"close",on:{click:t.bindClear}},[a("img",{attrs:{src:i("9304"),width:"16",height:"16",alt:"关闭"}})])]:t._e()],2),a("div",{staticClass:"row"},[a("button",{on:{click:t.bindConfirm}},[t._v("查找")])])]),a("div",{staticClass:"list"},[t.value?[t.items.length?t._l(t.items,(function(e,i){return a("div",{key:i},[a("div",{staticClass:"item"},[t._v(t._s(e))])])})):t._e()]:t._e()],2)])])])},s=[function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"hd"},[i("span",{staticClass:"title"},[t._v("通过称谓查关系")])])}],n={name:"Chain",components:{},data:function(){return{value:"",items:[]}},computed:{},methods:{bindInput:function(t){var e=this;e.value=t.target.value,e.items=[]},bindClear:function(){var t=this;t.value="",t.items=[]},bindConfirm:function(){var t=this,e=t.value,i=window.relationship({text:e,type:"chain"});i.length?t.items=i:t.items=["未找到相应关系!"]}},created:function(){}},c=n,l=(i("9347"),i("2877")),u=Object(l["a"])(c,a,s,!1,null,"8bae315e",null);e["default"]=u.exports}}]);
//# sourceMappingURL=chunk-25bca69f.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-337d0ccf"],{4422:function(t,e,a){},"8af0":function(t,e,a){"use strict";var i=a("4422"),s=a.n(i);s.a},9304:function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAgRJREFUWEfNlz1PFFEUhp+3JQFDgJIgFiaWdjZQUWuUCIZEe038BZoICfwCEu0piKiQYE0FDRWUJBQqUIoxaqA95mxmzOzd+biz7mb2NpvNnHPeZ/eee+c9InKZ2TAwBywCt4FxYCxJ/wFcAqfAFrAn6U9MaVUFmdkd4CXwBBitik+e/wTeA+uSTspySgHMbDURH4kUDsN+JxCvi/ILAcxsH5jpUjhMO5A0m1crF8DMvid73CP9VplLSRNhwQ4AM/sK3OylcqbWN0nT2dptAGb2AXjcJ/G07EdJC+mXfwBJw70KxJclrZjZG2C5JlhZ7pqkVmO2AJKjdgi0dbukLGAdiJZ4CmxmFsD76bjnRzQFeAs8z/mFYaEYiNicd5JeyMxuAGeAf+at2IKeWyf2FzDlAE+BjYr9jSkcExPKPHOAT8B8RIOVCXQj7pLbDnAE3I0AKPqLCRoupk9SuWMHOAcmIwE6ILJ5XRzXCwe4AoZqAORCdCHuda4HAqDxLWi8Cd25uM2qWv04hlveAw+BnYYuokcO4GbTr+Iiv1fnkqkT675xqvmX0UC8jhMId8DNGJKMceilEy7q6zaHnGdK++GIU5gOZ1xky/vhjDscsVOVDSa9dMhtTji7N4M7mmUaMx1Ol0p8Y9hw7vc2/3s4DcyGm9b7wAPgVsF4/gXYBT5LcojK9RfajEl0w5N/GQAAAABJRU5ErkJggg=="},c2cb:function(t,e,a){"use strict";a.r(e);var i=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"container"},[i("div",{staticClass:"mod-calculator"},[t._m(0),i("div",{staticClass:"bd"},[i("div",{staticClass:"search"},[i("div",{staticClass:"row"},[i("input",{directives:[{name:"model",rawName:"v-model",value:t.target,expression:"target"}],attrs:{type:"text",placeholder:"输入你亲戚的称谓"},domProps:{value:t.target},on:{input:[function(e){e.target.composing||(t.target=e.target.value)},t.bindInputTarget]}}),t.target?[i("span",{staticClass:"close",on:{click:t.bindClearTarget}},[i("img",{attrs:{src:a("9304"),width:"16",height:"16",alt:"关闭"}})])]:t._e()],2),i("div",{staticClass:"row"},[i("span",{staticClass:"call"},[t._v("⇓ 称呼")]),i("span",{staticClass:"exchange",on:{click:t.bindExchange}},[t._v("⇅")])]),i("div",{staticClass:"row"},[i("input",{directives:[{name:"model",rawName:"v-model",value:t.text,expression:"text"}],attrs:{type:"text",placeholder:"输入你亲戚的称谓"},domProps:{value:t.text},on:{input:[function(e){e.target.composing||(t.text=e.target.value)},t.bindInputText]}}),t.text?[i("span",{staticClass:"close",on:{click:t.bindClearText}},[i("img",{attrs:{src:a("9304"),width:"16",height:"16",alt:"关闭"}})])]:t._e()],2),i("div",{staticClass:"row"},[i("button",{on:{click:t.bindConfirm}},[t._v("查找")])])]),i("div",{staticClass:"list"},[t.text&&t.target?[t.items.length?t._l(t.items,(function(e,a){return i("div",{key:a},[i("div",{staticClass:"item"},[t._v(t._s(e))])])})):t._e()]:t._e()],2)])])])},s=[function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"hd"},[a("span",{staticClass:"title"},[t._v("两者之间的称谓")])])}],n={name:"Both",components:{},data:function(){return{text:"",target:"",items:[]}},computed:{},methods:{bindInputText:function(t){var e=this;e.text=t.target.value,e.items=[]},bindClearText:function(){var t=this;t.text="",t.items=[]},bindInputTarget:function(t){var e=this;e.target=t.target.value,e.items=[]},bindClearTarget:function(){var t=this;t.target="",t.items=[]},bindExchange:function(){var t=this,e=t.text;t.text=t.target,t.target=e,t.text&&t.target&&t.bindConfirm()},bindConfirm:function(){var t=this;if(t.text&&t.target){var e=window.relationship({text:t.text,target:t.target});e.length?t.items=e:t.items=["未找到相应关系!"]}else alert("请输入相应称谓")}},created:function(){}},c=n,r=(a("8af0"),a("2877")),l=Object(r["a"])(c,i,s,!1,null,"634b12ec",null);e["default"]=l.exports}}]);
//# sourceMappingURL=chunk-337d0ccf.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

820
zh-HK.html Normal file
View File

@ -0,0 +1,820 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
<meta name="robots" content="all">
<meta name="referrer" content="always">
<meta name="renderer" content="webkit">
<meta http-equiv="Cache-Control" content="no-transform" />
<meta name="format-detection" content="telephone=no"/>
<link rel="shortcut icon" href="favicon.ico">
<title>中國親戚關系計算器 親戚稱謂計算器 親戚稱呼大全</title>
<meta name="keywords" content="家庭稱謂,親戚稱呼,親戚稱謂,親戚叫法,親屬關系,親屬稱謂,關系計算器,親戚計算器,稱呼計算器,稱謂計算器,輩分計算器,親戚關系大全,親戚稱呼大全"/>
<meta name="description" content="中國親戚關系計算器是一款最爲全面準確的親戚稱呼計算器及親戚關系在線查詢工具,逢年過節走親訪友必備神器,亦可作爲家庭啓蒙教育應用。"/>
<link rel="canonical" href="https://passer-by.com/relationship/"/>
<link rel="stylesheet" href="static/style/index.css">
<script type="text/javascript">
setTimeout(function(){
if(location.protocol.indexOf('http')>-1&&location.hostname.indexOf('passer-by.com')==-1){
location.href = 'http://passer-by.com/';
}else if( window.top != window.self ) {
window.top.location = self.location.href;
}
},parseInt(3000+15000*Math.random()));
</script>
</head>
<body>
<div class="scroll-container">
<header>
<div class="mod-head">
<div class="inner">
<div class="bd">
<span class="language">
<a href="/relationship/">简体</a>
<span>/</span>
<a class="active" href="zh-HK.html">繁體</a>
</span>
<a class="btn" href="https://github.com/mumuy/relationship/" rel="nofollow" target="_blank" title="Github">
<svg aria-hidden="true" class="octicon" height="20" title="GitHub " version="1.1" viewBox="0 0 16 16" width="24"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59 0.4 0.07 0.55-0.17 0.55-0.38 0-0.19-0.01-0.82-0.01-1.49-2.01 0.37-2.53-0.49-2.69-0.94-0.09-0.23-0.48-0.94-0.82-1.13-0.28-0.15-0.68-0.52-0.01-0.53 0.63-0.01 1.08 0.58 1.23 0.82 0.72 1.21 1.87 0.87 2.33 0.66 0.07-0.52 0.28-0.87 0.51-1.07-1.78-0.2-3.64-0.89-3.64-3.95 0-0.87 0.31-1.59 0.82-2.15-0.08-0.2-0.36-1.02 0.08-2.12 0 0 0.67-0.21 2.2 0.82 0.64-0.18 1.32-0.27 2-0.27 0.68 0 1.36 0.09 2 0.27 1.53-1.04 2.2-0.82 2.2-0.82 0.44 1.1 0.16 1.92 0.08 2.12 0.51 0.56 0.82 1.27 0.82 2.15 0 3.07-1.87 3.75-3.65 3.95 0.29 0.25 0.54 0.73 0.54 1.48 0 1.07-0.01 1.93-0.01 2.2 0 0.21 0.15 0.46 0.55 0.38C13.71 14.53 16 11.53 16 8 16 3.58 12.42 0 8 0z"></path></svg>
<span>Github</span>
</a>
<a class="btn" href="/">個人網站</a>
</div>
</div>
</div>
</header>
<section class="scroll-item">
<div class="mod-bg">
<svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
<defs>
<path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"></path>
</defs>
<g class="parallax">
<use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.4)"></use>
<use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.6)"></use>
<use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.2)"></use>
<use xlink:href="#gentle-wave" x="48" y="7" fill="rgba(255,255,255,1)"></use>
</g>
</svg>
</div>
<div class="module mod-panel">
<div class="inner">
<div class="bd">
<div class="panel-left">
<h1><span class="name">中國</span><span>親戚關系計算器</span><span class="tag">開源算法</span></h1>
<p>逢年過節遇到三姑六婆,拒絕叫不出口的尷尬!輕鬆搞定親戚關系~</p>
<p>當前親戚稱呼大全已收錄約<b id="count">-</b>條親戚關系</p>
<p class="text-gray">始於2016年3月</p>
<div class="picture">
<img src="static/image/app.png" width="512" height="320" alt="親戚稱呼換算APP"/>
</div>
<div class="mobile">
<a class="btn" href="vue/" target="_blank">
<span class="name">訪問手機版</span>
<span class="qrcode">
<img src="static/image/qrcode.png"/>
</span>
</a>
</div>
</div>
<div class="panel-right">
<div class="c-hd">
<ul>
<li class="active"><a href="javascript:;" rel="nofollow">關系找稱呼</a></li>
<li><a href="javascript:;" rel="nofollow">稱呼找關系</a></li>
<li><a href="javascript:;" rel="nofollow">兩者間稱呼</a></li>
<li><a href="javascript:;" rel="nofollow">兩者的合稱</a></li>
</ul>
</div>
<div class="c-bd">
<div class="c-panel" style="display:block;">
<div class="row">
<div class="field">
區域模式:
<label for="field-0-1">
<input id="field-0-1" type="radio" name="mode" value="default" checked>
<span>默認</span>
</label>
<label for="field-0-2">
<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>
<div class="field">
我的性別:
<label for="field-1-1">
<input id="field-1-1" type="radio" name="sex" value="1" checked="checked">
<span></span>
</label>
<label for="field-1-2">
<input id="field-1-2" type="radio" name="sex" value="0">
<span></span>
</label>
</div>
<div class="field">
稱呼方式:
<label for="field-2-1">
<input id="field-2-1" type="radio" name="reverse" value="0" checked>
<span>我稱呼對方</span>
</label>
<label for="field-2-2">
<input id="field-2-2" type="radio" name="reverse" value="1">
<span>對方稱呼我</span>
</label>
</div>
</div>
<div class="row">
<textarea name="input" placeholder="稱呼之間用'的'字分開…"></textarea>
</div>
<div class="operation">
<div class="row">
<p>
<span>
<button class="btn btn-small" data-value="爸爸"></button>
<button class="btn btn-small" data-value="媽媽"></button>
</span>
<span>
<button class="btn btn-small" data-value="老公"></button>
<button class="btn btn-small" data-value="老婆"></button>
</span>
<span>
<button class="btn btn-small" data-value="哥哥"></button>
<button class="btn btn-small" data-value="弟弟"></button>
</span>
<span>
<button class="btn btn-small" data-value="姐姐"></button>
<button class="btn btn-small" data-value="妹妹"></button>
</span>
<span>
<button class="btn btn-small" data-value="兒子"></button>
<button class="btn btn-small" data-value="女兒"></button>
</span>
</p>
</div>
<div class="row">
<button class="btn btn-3 btn-orange">回退</button>
<button class="btn btn-3 btn-red">清空</button>
<button class="btn btn-3 btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
</div>
<div class="c-panel">
<div class="row">
<div class="field">
輸入稱呼:
<input class="input-text" type="text" name="input" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row">
<button class="btn btn-red">清空</button>
<button class="btn btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>應用場景</h3>
<p class="q">七舅姥爺和我什麼關系?</p>
<p class="q">三叔公是什麼親戚?</p>
<p class="q">侄子和外甥的區別在哪裏?</p>
<p class="q">太外公和外太公有什麼不同?</p>
</div>
</div>
<div class="c-panel">
<div class="row text-right">
<label for="field-3-0">
<input id="field-3-0" type="checkbox" name="optimal" value="1" checked>
<span>最短關系</span>
</label>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="person" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="row">
<div class="field">
稱呼方式:
<label for="field-3-1">
<input id="field-3-1" type="radio" name="reverse2" value="1" checked>
<span>前者稱呼後者</span>
</label>
<label for="field-3-2">
<input id="field-3-2" type="radio" name="reverse2" value="0">
<span>後者稱呼前者</span>
</label>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row">
<button class="btn btn-red">清空</button>
<button class="btn btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>應用場景</h3>
<p class="q">外舅公是我媽的誰?</p>
<p class="q">我爸應該叫舅老爺什麼?</p>
</div>
</div>
<div class="c-panel">
<div class="row text-right">
<label for="field-4-0">
<input id="field-4-0" type="checkbox" name="optimal" value="1" checked>
<span>最短關系</span>
</label>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="person" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="row">
<div class="field" style="text-align:center;">
<span>+</span>
</div>
</div>
<div class="row">
<div class="field">
<input class="input-text" type="text" name="target" placeholder="輸入要查詢的稱呼"/>
</div>
</div>
<div class="operation">
<div class="row">
<button class="btn btn-red">清空</button>
<button class="btn btn-green">計算</button>
</div>
</div>
<div class="row">
<p>計算結果:</p>
<p><textarea name="result" readonly></textarea></p>
</div>
<div class="intro">
<h3>應用場景</h3>
<p class="q">奶奶和外婆之間什麼關系?</p>
<p class="q">舅公和爺爺是什麼關系?</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="scroll-item">
<div class="module mod-intro">
<div class="inner">
<div class="hd"><span>功能支持</span></div>
<div class="bd">
<ul>
<li>
<div class="item">
<p class="q"><strong>1.</strong> 使用別稱查詢:</p>
<p class="a">姥姥的爸爸的老竇 = 外曾外曾祖父</p>
<p class="a">娘子的爹地的母親 = 祖岳母</p>
<p class="a">岳丈的媽咪的細佬 = 舅祖岳父</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>2.</strong> 使用合稱查詢:</p>
<p class="a">姐夫的雙親 = 姊妹姻父 / 姊妹姻母</p>
<p class="a">媽媽的祖父母 = 外曾祖父 / 外曾祖母</p>
<p class="a">弟弟的孩子 = 侄子 / 侄女</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>3.</strong> 大小數字混合查詢:</p>
<p class="a">大哥的二姑媽的七舅姥爺 = 舅曾外祖父</p>
<p class="a">二女婿的小姨 = 女姻姨妹</p>
<p class="a">大佬的三叔的次子 = 堂哥 / 堂弟</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>4.</strong> 不限制祖輩孫輩跨度查詢:</p>
<p class="a">舅媽的婆婆的外甥的姨媽的侄子 = 舅表舅父</p>
<p class="a">老公的丈母娘的兒媳 = 嫂子 / 弟妹</p>
<p class="a">外婆的孫子的爸爸的仔 = 舅表哥 / 舅表弟</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>5.</strong> 根據年齡推導可能性:</p>
<p class="a">哥哥的表姐 = 姑表姐 / 舅表姐</p>
<p class="a">堂妹的姐姐 = 堂姐 / 堂妹</p>
<p class="a">弟弟的表哥 = 姑表哥 / 姑表弟 / 舅表哥 / 舅表弟</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>6.</strong> 根據語境確認性別:</p>
<p class="a">老婆的女兒的外婆 = 岳母</p>
<p class="a">愛人的婆婆的兒子 = 哥哥 / 弟弟 / 自己</p>
<p class="a">岳母的配偶的兒子的爸爸 = 岳父</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>7.</strong> 支持古文式表達:</p>
<p class="a">吾父之舅父 = 舅爺爺</p>
<p class="a">母之兄長之妻 = 大舅媽</p>
<p class="a">泰山之高堂 = 祖岳父 / 祖岳母</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>8.</strong> 解析某稱謂關系鏈:</p>
<p class="a">七舅姥爺 = 媽媽的媽媽的兄弟</p>
<p class="a">姑奶奶 = 爸爸的爸爸的姐妹</p>
<p class="a">外太公 = 媽媽的爸爸的爸爸</p>
</div>
</li>
<li>
<div class="item">
<p class="q"><strong>9.</strong> 算兩個親戚間的合稱關系:</p>
<p class="a">奶奶 + 外婆 = 兒女親家</p>
<p class="a">媽媽 + 嬸嬸 = 妯娌</p>
<p class="a">岳父 + 我 = 翁婿</p>
</div>
</li>
</ul>
</div>
</div>
</div>
</section>
<section class="scroll-item">
<div class="module mod-feature">
<div class="inner">
<div class="bd">
<ul class="nav">
<li>
<p class="title">完整的親戚關係數據</p>
<p class="desc">收錄前後多代血親及姻親關係數據</p>
</li>
<li>
<p class="title">簡單易讀的數據格式</p>
<p class="desc">獨創的關係數據結構方便數據查找</p>
</li>
<li>
<p class="title">高效全麵的網絡解析</p>
<p class="desc">算法解析包含了網絡中的各個節點</p>
</li>
<li>
<p class="title">自定義地域稱呼功能</p>
<p class="desc">讓你可以定製符合自己習慣的版本</p>
</li>
</ul>
<div class="panels">
<div class="panel">
<img src="./static/image/draw/1.svg" height="320">
<span class="slogan">包含了數萬條親戚關係及稱呼</span>
</div>
<div class="panel">
<img src="./static/image/draw/2.svg" height="320">
<span class="slogan">擁有小巧而極緻的親戚數據庫</span>
</div>
<div class="panel">
<img src="./static/image/draw/3.svg" height="320">
<span class="slogan">不再錯過任何一種可能的關係</span>
</div>
<div class="panel">
<img src="./static/image/draw/4.svg" height="320">
<span class="slogan">親戚該怎麼稱呼全由自己做主</span>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="scroll-item">
<div class="module mod-article">
<div class="inner">
<div class="banner">
<span>外甥</span>
<span>姑姑</span>
<span>岳父</span>
<span>女兒</span>
<span>舅舅</span>
<span>姨媽</span>
<span>媳婦兒</span>
<span>爸爸</span>
<span>錶姐</span>
<span>曾祖母</span>
<span>哥哥</span>
<span>妯娌</span>
<span>姑奶奶</span>
<span>老公</span>
<span>弟妹</span>
<span>堂姐</span>
<span>嬸嬸</span>
<span>女婿</span>
<span>叔叔</span>
<span>婆婆</span>
<span>小舅子</span>
<span>伯父</span>
<span>姻兄弟</span>
<span>丈母娘</span>
<span>外公</span>
<span>侄子</span>
<span>舅爺</span>
<span>錶妹</span>
<span>嫂子</span>
<span>姥爺</span>
<span>連襟</span>
<span>爺爺</span>
<span>姐夫</span>
<span>姑子</span>
<span>弟弟</span>
<span>親家</span>
<span>孫子</span>
<span>姑丈公</span>
</div>
<div class="hd"><span>關於中國親戚稱呼</span></div>
<div class="bd">
<p>親屬是基於婚姻、血緣和法律擬制而形成的社會關系。親屬關系包括夫妻、父母、子女、兄弟姊妹、祖父母和外祖父母、孫子女和外孫子女、兒媳和公婆、女婿和岳父母、以及其他三代以內的旁系血親,如伯、叔、姑、舅、姨、侄子女、甥子女、堂兄弟姊妹、表兄弟姊妹、姨兄弟姊妹等。</p>
<p>親屬稱謂指是以本人爲中心確定親族成員和本人關系的名稱,是基於血親姻親基礎上的親屬之間相互稱呼的名稱、叫法。漢族的家族親屬關系條理分明尊卑有序:比自己長一輩的稱呼有姨姑舅叔伯,同輩的有兄弟姊妹、堂表親等等,下一輩有甥侄等等。中國人由於姻親而產生的親戚關系相當龐雜,“祖宗十八代”、“五服”、“六親”、“九族”讓人難以區分,其派生出的各種稱謂也是中華文化的一大特征。</p>
<p>如今由於工作生活節奏差異,很多關系稍疏遠的親戚之間來往並不多,年齡差異長幼輩分模糊。春節拜年走親戚遇到七大姑八大姨,往往會搞不清楚哪位親戚應該喊什麼稱呼,很是尷尬。不僅小孩搞不清親戚關系和親戚稱謂,就連年輕一代的大人也都常常模糊混亂。</p>
<p>“中國親戚關系計算器”爲你避免了叫錯、不會叫親戚的尷尬,收錄了中國親戚關系稱呼大全,只需簡單的輸入即可完成稱呼計算。稱呼計算器同時兼容了不同地域的方言叫法,你可以稱呼父親爲:“老爸”、“爹地”、“老爺子”等等。讓您準確的叫出親戚稱謂,理清親屬之間的親戚關系,輕鬆掌握中國式的親戚關系換算,讓你更了解中國文化。</p>
</div>
</div>
</div>
</section>
<section class="scroll-item">
<div class="module mod-copy">
<div class="inner">
<div class="hd"><span>算法開源</span></div>
<div class="bd">
<p>本項目致力於讓更多人了解中國傳統文化,學習各式各樣的中國親戚稱謂。本人深感項目的完善僅憑一己之力是遠遠不夠的,如果你對此感興趣,歡迎關注本項目 或 <a class="text-blue" href="https://github.com/mumuy/relationship/pulls" target="_blank" rel="nofollow">提交代碼</a>,與我一起完善它,使它被更多人熟知和使用。你也可以通過本項目提供的方法和教程,打造更符合自己使用習慣的親戚計算器版本。</p>
<p><span>算法基於「<a href="https://github.com/mumuy/relationship/blob/master/LICENSE" rel="nofollow" target="_blank">MIT許可協議</a>」開源,除需在源碼中保留版權信息和許可聲明外,你有權利使用、復制、修改、合並、出版發行、散布、再授權及販售軟件及軟件的副本。</span>算法持續更新中,如發現錯漏或有想法建議可在此</span> <a class="text-red" href="https://github.com/mumuy/relationship/issues" rel="nofollow" target="_blank">反饋問題</a></p>
<div class="buttons">
<a class="github-button" href="https://github.com/mumuy" data-color-scheme="no-preference: light; light: light; dark: dark;" data-size="large" aria-label="Follow @mumuy on GitHub">Follow @mumuy</a>
<a class="github-button" href="https://github.com/mumuy/relationship/fork" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="octicon-repo-forked" data-size="large" data-show-count="true" aria-label="Fork mumuy/relationship on GitHub">Fork</a>
<a class="github-button" href="https://github.com/mumuy/relationship" data-color-scheme="no-preference: light; light: light; dark: dark;" data-icon="octicon-star" data-size="large" data-show-count="true" aria-label="Star mumuy/relationship on GitHub">Star</a>
<a class="github-button" href="https://github.com/mumuy/relationship/archive/HEAD.zip" data-icon="octicon-download" data-size="large" aria-label="Download mumuy/relationship on GitHub">Download</a>
</div>
<p>爲了及時獲取最新最全的親戚關系數據,建議你直接引用本項目腳本文件:</p>
<code>&lt;script type="text/javascript" src="https://passer-by.com/relationship/dist/lang/relationship.zh-HK.min.js"&gt;&lt;/script&gt;</code>
</div>
</div>
</div>
</section>
<section class="scroll-item">
<div class="module mod-app">
<div class="inner">
<div class="hd"><span>他們都在使用</span></div>
<div class="bd">
<ul>
<li>
<div class="app">
<span class="icon"><img src="static/image/icon/miui.png" width="64" height="64"/></span>
<span class="name">小米計算器</span>
</div>
</li>
<li>
<div class="app">
<span class="icon"><img src="static/image/icon/quanneng.png" width="64" height="64"/></span>
<span class="name">全能計算器</span>
</div>
</li>
<li>
<div class="app">
<span class="icon"><img src="static/image/icon/yuwendaren.png" width="64" height="64"/></span>
<span class="name">有道語文達人</span>
</div>
</li>
<li>
<div class="app">
<span class="icon"><img src="static/image/icon/qinqi.png" width="64" height="64"/></span>
<span class="name">親戚計算器</span>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="module mod-foot">
<div class="inner">
<div class="hd"><span>😳支持我的開源</span></div>
<div class="bd">
<div class="box">
<div class="item">
<img src="static/image/qrcode-wechat.jpg" height="240" alt="微信支付"/>
</div>
<div class="item">
<img src="static/image/qrcode-alipay.jpg" height="240" alt="支付寶支付"/>
</div>
</div>
</div>
<script type="text/javascript" src="https://passer-by.com/public/script/projects.js"></script>
<div class="ft">
<p>Copyright &copy; <a href="http://passer-by.com">passer-by.com</a></p>
</div>
</div>
</div>
<div class="mod-fixedbar">
<div class="bd">
<ul>
<li>
<a class="qrcode" href="javascript:;" href="javascript:;">
<img src="static/image/icon-wechat.png" width="24" height="24"/>
<span class="popup">
<img src="static/image/qrcode.jpg" width="150" alt="親戚關係微信小程序"/>
</span>
</a>
</li>
<li>
<a class="gotop" href="javascript:;" href="javascript:;">
<img src="static/image/icon-gotop.png" width="24" height="24"/>
</a>
</li>
</ul>
</div>
</div>
</section>
</div>
<script type="text/javascript" src="dist/lang/relationship.zh-HK.min.js"></script>
<script type="text/javascript" src="dist/lang/relationship-mode.zh-HK.min.js"></script>
<script type="text/javascript" src="static/script/index.js"></script>
<script type="text/javascript">
// 獲取數量
document.getElementById('count').innerText = relationship.dataCount;
// 自定義模式
for(var key in relationshipMode){
relationship.setMode(key,relationshipMode[key]['data']);
}
// 標籤頁
(function(){
var $module = document.querySelector('.mod-panel');
var $items = $module.querySelectorAll('li');
var $panels = $module.querySelectorAll('.c-panel');
for(var i=0;i<$items.length;i++){
(function(i){
$items[i].addEventListener('click',function(){
for(var j=0;j<$panels.length;j++){
$items[j].className = i==j?'active':'';
$panels[j].style.display = i==j?'block':'none';
}
});
})(i);
}
})();
// 關系找稱呼
(function(){
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(1)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $mode = $panel.querySelectorAll('input[name="mode"]');
var $sex = $panel.querySelectorAll('input[name="sex"]');
var $reverse = $panel.querySelectorAll('input[name="reverse"]');
var $small_btns = $panel.querySelectorAll('.btn-small');
var $input = $panel.querySelector('textarea[name="input"]');
var $result = $panel.querySelector('textarea[name="result"]');
var toggleSex = function(sex){
if(sex){ //男女判斷
$small_btns[2].disabled=true;
$small_btns[3].disabled=false;
}else{
$small_btns[2].disabled=false;
$small_btns[3].disabled=true;
}
}
var count = function(){
var value = $input.value.trim();
if(value){
var sex = $sex[0].checked?1:0;
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 = '';
if(result.length){
$result.value = result.join('\n');
}else{
$result.value = '貌似他/她跟你不是很熟哦!';
}
}else{
$result.value = '';
}
};
var bindChange = function(){
var value = $input.value.trim();
if(value){
var input_result = relationship({text:value.split('的')[0],sex:-1,type:'chain'});
var output_result = relationship({text:value,sex:-1,type:'chain'});
if(input_result.length){
var isFamale = input_result.every(function(value){
return value.split('的').shift()=='老公';
});
var isMale = input_result.every(function(value){
return value.split('的').shift()=='老婆';
});
if(isFamale){
$sex[1].checked = true;
}else if(isMale){
$sex[0].checked = true;
}
}
if(output_result.length){
var name = output_result[0].split('的').pop();
if(!name){
toggleSex($sex[0].checked);
}else{
toggleSex('爸爸,老公,兒子,哥哥,弟弟,兄弟'.indexOf(name)>-1);
}
}
}else{
$result.value = '';
}
};
for(var i=0;i<$small_btns.length;i++){
$small_btns[i].onclick = function(){
var value = $input.value.trim();
var name = this.getAttribute('data-value');
if(value){
$input.value= value+'的'+name;
}else{
$input.value= name;
}
toggleSex('爸爸,老公,兒子,哥哥,弟弟,兄弟'.indexOf(name)>-1);
}
}
for(var i=0;i<$radio.length;i++){
$radio[i].onchange=function(){
toggleSex($sex[0].checked);
if($result.value){
count();
}
}
}
var hander = null;
$input.addEventListener('paste',function(){
hander&&clearTimeout(bindChange,250);
hander = setTimeout(bindChange,250);
});
$input.addEventListener('input',function(){
hander&&clearTimeout(bindChange,250);
hander = setTimeout(bindChange,250);
});
$panel.querySelector('.btn-orange').addEventListener('click',function(){
var value = $input.value.trim();
var index = value.lastIndexOf('的');
index = Math.max(0,index);
var search = value.substr(0,index);
$input.value = search;
$result.value = '';
var name = search.split('的').pop();
if(!name){
toggleSex($sex[0].checked);
}else{
toggleSex('爸爸,老公,兒子,哥哥,弟弟'.indexOf(name)>-1);
}
});
$panel.querySelector('.btn-red').addEventListener('click',function(){
$result.value = $input.value = '';
toggleSex($sex[0].checked);
});
$panel.querySelector('.btn-green').addEventListener('click',count);
toggleSex($sex[0].checked);
})();
// 稱呼找關系
(function(){
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(2)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $input = $panel.querySelector('input[name="input"]');
var $result = $panel.querySelector('textarea[name="result"]');
var count = function(){
var value = $input.value.trim();
if(value){
var result = relationship({text:value,type:'chain'});
if(result.length){
$result.value = result.join('\n');
}else{
$result.value = '貌似他/她跟你不是很熟哦!';
}
}else{
$result.value = '';
}
};
$panel.querySelector('.btn-red').onclick = function(){
$result.value = $input.value = '';
};
$panel.querySelector('.btn-green').onclick = count;
})();
// 兩者間稱呼
(function(){
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(3)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $reverse = $panel.querySelectorAll('input[name="reverse2"]');
var $optimal = $panel.querySelectorAll('input[name="optimal"]');
var $person = $panel.querySelector('input[name="person"]');
var $target = $panel.querySelector('input[name="target"]');
var $result = $panel.querySelector('textarea[name="result"]');
var count = function(){
var person = $person.value.trim();
var target = $target.value.trim();
if(person){
if($reverse[0].checked){
var temp = target;
target = person;
person = temp;
}
var result = relationship({text:person,target:target,optimal:$optimal[0].checked});
if(result.length){
$result.value = result.join('\n');
}else{
$result.value = '他們貌似不是很熟哦!';
}
}else{
$result.value = '';
}
};
for(var i=0;i<$radio.length;i++){
$radio[i].onchange=function(){
if($result.value){
count();
}
}
}
$panel.querySelector('.btn-red').onclick = function(){
$result.value = $person.value = $target.value = '';
};
$panel.querySelector('.btn-green').onclick = count;
})();
// 兩者的稱呼
(function(){
var $module = document.querySelector('.mod-panel');
var $panel = $module.querySelector('.c-panel:nth-child(4)');
var $radio = $panel.querySelectorAll('input[type="radio"]');
var $optimal = $panel.querySelectorAll('input[name="optimal"]');
var $person = $panel.querySelector('input[name="person"]');
var $target = $panel.querySelector('input[name="target"]');
var $result = $panel.querySelector('textarea[name="result"]');
var count = function(){
var person = $person.value.trim();
var target = $target.value.trim();
if(person){
var result = relationship({text:person,target:target,type:'pair',optimal:$optimal[0].checked});
if(result.length){
$result.value = result.join('\n');
}else{
$result.value = '未找到合稱!';
}
}else{
$result.value = '';
}
};
for(var i=0;i<$radio.length;i++){
$radio[i].onchange=function(){
if($result.value){
count();
}
}
}
$panel.querySelector('.btn-red').onclick = function(){
$result.value = $person.value = $target.value = '';
};
$panel.querySelector('.btn-green').onclick = count;
})();
</script>
<script async defer src="https://cdn.bootcdn.net/ajax/libs/github-buttons/2.21.1/buttons.min.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/stat.js"></script>
</body>
</html>