dsh-metaphysics 0.60.0 → 0.61.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1580 -1435
- package/README.md +17 -14
- package/client.almanac.js +24 -24
- package/client.bazi.js +120 -112
- package/client.chenggu.js +40 -40
- package/client.convert.js +22 -22
- package/client.daliuren.js +79 -79
- package/client.fengshui.js +29 -29
- package/client.hepan.js +111 -103
- package/client.js +327 -308
- package/client.liuyao.js +101 -100
- package/client.mbti.js +21 -21
- package/client.name.js +71 -71
- package/client.numerology.js +21 -21
- package/client.qimen.js +82 -82
- package/client.star.js +14 -14
- package/client.tarot.js +107 -107
- package/client.trend.js +81 -81
- package/client.xiaoliuren.js +30 -30
- package/client.zeri.js +59 -59
- package/client.ziwei.js +116 -108
- package/engine/citations.js +4 -0
- package/engine/diff.js +3 -0
- package/engine/event-prompt.js +7 -1
- package/engine/followup.js +16 -1
- package/engine/index.js +16 -3
- package/engine/interpret-knowledge.js +21 -0
- package/engine/interpret.js +7 -3
- package/engine/liuyao.js +4 -0
- package/engine/meihua.js +3 -0
- package/engine/name-data.js +24 -78
- package/engine/name-extra.js +415 -0
- package/engine/name.js +36 -9
- package/engine/plain-summary.js +5 -1
- package/engine/surname-data.js +249 -0
- package/engine/tarot-cards.js +143 -0
- package/engine/tarot.js +74 -27
- package/engine/yijing-text.js +792 -0
- package/engine/zeri-shensha.js +958 -0
- package/engine/zeri.js +126 -28
- package/engine/ziwei-zuoyao.js +313 -0
- package/engine/ziwei.js +37 -1
- package/index.js +6 -1
- package/package.json +2 -2
- package//345/221/275/347/220/206/346/216/222/347/233/230.html +3440 -169
package/engine/citations.js
CHANGED
|
@@ -590,6 +590,9 @@ export const CARD_CITATIONS = {
|
|
|
590
590
|
'ziwei-feixing': { status: 'general', book: '紫微斗数全书 / 飞星派', chapter: '四化篇', reason: '宫干飞化属飞星派传法,非《全书》单条原文' },
|
|
591
591
|
'ziwei-sanfang-fei': { status: 'general', book: '紫微斗数全书 / 飞星派', chapter: '四化篇', reason: '三方四正同飞属飞星派读法,未定位到单条原文' },
|
|
592
592
|
'ziwei-jichuanji': { status: 'general', book: '紫微斗数全书 / 飞星派', chapter: '四化篇', reason: '忌转忌串连属飞星派读法,未定位到单条原文' },
|
|
593
|
+
// 2026-11-02 复核:维基文库本《紫微斗数全书》卷一是赋文与格局、卷二是安身命例,均无杂曜安星诀;
|
|
594
|
+
// 十二颗杂曜的诀文来自近代通行安星诀的多处并核,按口径只作通行说,不冒充《全书》原文。
|
|
595
|
+
'ziwei-zaoyao': { status: 'general', book: '通行安星诀(中州派讲义 / 安星口诀本)', chapter: '杂曜安星诀', reason: '诀文见多处近代通行辑本且逐颗互核一致,但未定位到古籍单条原文,故不署《全书》' },
|
|
593
596
|
// ── 六爻:增删卜易(维基文库本,繁体照录)
|
|
594
597
|
'liuyao-yongshen': { refs: ['zs-yongshen'] },
|
|
595
598
|
'liuyao-fushen': { refs: ['zs-fushen'] },
|
|
@@ -619,6 +622,7 @@ export const CARD_CITATIONS = {
|
|
|
619
622
|
'qimen-gan-shengke': { status: 'general', book: '奇门遁甲统宗', chapter: '卷十二·玄机赋(下)', reason: '底本有「奇仪与日干」生克条,未见单列「干与落宫」生克条;干宫取象为通行读法,不拿十神条文冒充' },
|
|
620
623
|
'qimen-ganying': { status: 'general', book: '奇门十干应克 / 奇门遁甲元灵经', chapter: '通行 100 组表 / 卷二·天盘加地盘吉凶', reason: '100 组为通行表汇编,元灵经只存甲、乙、丙三组,非单条原文' },
|
|
621
624
|
'tarot-orientation': { status: 'general', book: '韦特塔罗', chapter: '逆位读法', reason: '韦特体系无中文古籍原文,逆位读法属近代流派' },
|
|
625
|
+
'tarot-correspondence': { status: 'general', book: 'Liber 777 一脉的公开对应表', chapter: '小阿卡纳 2-10 的旬位与十源质', reason: '属近代西方神秘学对应表,无中文古籍原文;本插件按三处独立公开资料互核后取数字牌旬位,宫廷牌两派映射冲突故不配星座' },
|
|
622
626
|
};
|
|
623
627
|
|
|
624
628
|
export function allCitations() {
|
package/engine/diff.js
CHANGED
|
@@ -336,6 +336,9 @@ export const CALIBER_SWITCHES = {
|
|
|
336
336
|
ziweiSchoolSwitch('shenzhuSchool', '身主:子午皆火星 / 子铃午火', '身主', 'common', 'verse', {
|
|
337
337
|
common: '子午皆火星', verse: '子铃午火(安身主诀逐字)',
|
|
338
338
|
}),
|
|
339
|
+
ziweiSchoolSwitch('zuoyaoSchool', '杂曜:49 颗简盘 / 61 颗全表', '杂曜全表', 'minimal', 'full', {
|
|
340
|
+
minimal: '49 颗(简盘)', full: '61 颗(加十二颗杂曜)',
|
|
341
|
+
}),
|
|
339
342
|
],
|
|
340
343
|
qimen: [
|
|
341
344
|
{
|
package/engine/event-prompt.js
CHANGED
|
@@ -112,7 +112,13 @@ function tarotUse(r) {
|
|
|
112
112
|
name: c.position || '牌位',
|
|
113
113
|
symbol: `${c.name}(${c.orientation || (c.upright ? '正位' : '逆位')})`,
|
|
114
114
|
why: `${c.positionHint || '这一位代表它所标的那个阶段'};牌位决定它代表什么,牌面只说明它是什么样子。`,
|
|
115
|
-
|
|
115
|
+
// 逐张库的三层:占星对应(宫廷牌没有,就给角色)、牌面画了什么、核心与关键词
|
|
116
|
+
fact: [
|
|
117
|
+
c.core || '',
|
|
118
|
+
c.astro ? `占星对应:${c.astro}` : (c.role ? `牌位角色:${c.role}` : ''),
|
|
119
|
+
c.image ? `牌面:${c.image}` : '',
|
|
120
|
+
(c.keywords && c.keywords.length) ? `关键词:${c.keywords.join('、')}` : '',
|
|
121
|
+
].filter(Boolean).join(' '),
|
|
116
122
|
}));
|
|
117
123
|
return cards.length ? cards : [{ name: '牌面', symbol: '—', why: '没有抽到牌', fact: '' }];
|
|
118
124
|
}
|
package/engine/followup.js
CHANGED
|
@@ -204,7 +204,7 @@ export const READING_ORDERS = Object.freeze({
|
|
|
204
204
|
meihua: ['所问与体用', '本卦/互卦/变卦', '五行生克', '应期与依据'],
|
|
205
205
|
daliuren: ['天地盘(月将/贵人)', '四课', '三传', '课体与神将', '依据'],
|
|
206
206
|
qimen: ['四柱与局数', '九宫(星门神/天盘干)', '用神落宫', '门宫·干宫·十干克应', '旺衰·击刑入墓', '依据'],
|
|
207
|
-
tarot: ['问题与牌阵', '
|
|
207
|
+
tarot: ['问题与牌阵', '逐牌(正逆/牌面/元素对应)', '牌间关系', '综合倾向', '边界'],
|
|
208
208
|
fengshui: ['坐向与元运', '运盘/山盘/向盘', '旺山旺向', '取象与边界'],
|
|
209
209
|
});
|
|
210
210
|
|
|
@@ -261,6 +261,21 @@ export function askPrompt(r, opts = {}) {
|
|
|
261
261
|
'',
|
|
262
262
|
'——盘面摘要——',
|
|
263
263
|
summary || '(这张盘没有摘要字段,请先让我重新排一次。)',
|
|
264
|
+
// 六爻/梅花带《周易》原文(engine/yijing-text.js 照录),别的外部模型才不至于只凭白话大意发挥;
|
|
265
|
+
// 读的是结果里已算好的 r.jing,这里不引原文库,ASK 栈因此不必多背 12KB。
|
|
266
|
+
...(String((r && r.jing) || '').trim() ? [
|
|
267
|
+
'',
|
|
268
|
+
'——《周易》经文原文(本插件按三份底本互校照录,〔一作…〕是异文,不是改写)——',
|
|
269
|
+
String(r.jing).trim(),
|
|
270
|
+
] : []),
|
|
271
|
+
// 紫微开了杂曜全表时同理:外部模型看到十二个杂曜名字,不知道它们是怎么定宫的,
|
|
272
|
+
// 很容易当成随意标注的装饰星。把安星诀一起递过去,它才有余力判断这颗落在这宫合不合情理。
|
|
273
|
+
...(r && r.zuoyao && r.zuoyao.verses ? [
|
|
274
|
+
'',
|
|
275
|
+
`——紫微杂曜安星诀(本盘开了全表,${r.zuoyao.placed.length} 颗已按下列诀安入;诀文出多处近代通行辑本并核,属通行说,不是《紫微斗数全书》原文)——`,
|
|
276
|
+
String(r.zuoyao.verses).trim(),
|
|
277
|
+
`未另立:${(r.zuoyao.skipped || []).join(';')}`,
|
|
278
|
+
] : []),
|
|
264
279
|
'',
|
|
265
280
|
'——回答要求——',
|
|
266
281
|
'读者不懂命理。按下面的骨架答;任何一句他看不懂,就算没写完:',
|
package/engine/index.js
CHANGED
|
@@ -64,6 +64,7 @@ function requireGender(value, who = '') {
|
|
|
64
64
|
const ZIWEI_SCHOOL_KEYS = [
|
|
65
65
|
'brightnessSchool', 'gengYearSihua', 'tianmaSchool', 'tiankongSchool', 'jiekongSchool',
|
|
66
66
|
'kuiyueSchool', 'tianshiTianshang', 'changshengSchool', 'lateZishi', 'shenzhuSchool',
|
|
67
|
+
'zuoyaoSchool',
|
|
67
68
|
];
|
|
68
69
|
|
|
69
70
|
/** 紫微流派参数原样透传;非法值交给引擎按默认口径回退 */
|
|
@@ -206,6 +207,7 @@ function ziweiText(r) {
|
|
|
206
207
|
brightnessSchool: '亮度', gengYearSihua: '庚干四化', tianmaSchool: '天马', tiankongSchool: '天空',
|
|
207
208
|
jiekongSchool: '截空', kuiyueSchool: '魁钺', tianshiTianshang: '天伤天使',
|
|
208
209
|
changshengSchool: '长生', lateZishi: '晚子时', shenzhuSchool: '身主',
|
|
210
|
+
zuoyaoSchool: '杂曜全表',
|
|
209
211
|
};
|
|
210
212
|
const diff = Object.entries(labels)
|
|
211
213
|
.filter(([key]) => r.schools[key] && r.schools[key] !== ZIWEI_SCHOOL_DEFAULTS[key])
|
|
@@ -397,7 +399,11 @@ function tarotText(r) {
|
|
|
397
399
|
`【牌阵】${r.spread}${r.castAt ? ` 抽牌于 ${r.castAt}` : ''}`,
|
|
398
400
|
];
|
|
399
401
|
for (const c of r.cards) {
|
|
400
|
-
|
|
402
|
+
// 英文名与占星对应来自逐张库;宫廷牌没有占星,就顶出它的角色
|
|
403
|
+
const ast = c.astro ? ` ${c.astro}` : (c.role ? ` ${c.role}` : '');
|
|
404
|
+
const en = c.en ? ` [${c.en}]` : '';
|
|
405
|
+
lines.push(` ${c.position}:${c.name}${en}(${c.orientation})${ast} ${c.keywords.join('、')}`);
|
|
406
|
+
if (c.image) lines.push(` 牌面:${c.image}`);
|
|
401
407
|
}
|
|
402
408
|
if (r.reading && r.reading.length) {
|
|
403
409
|
lines.push('【解读】');
|
|
@@ -1541,7 +1547,10 @@ function zeriText(r) {
|
|
|
1541
1547
|
? `【择日·${r.meta.task}】候选 ${r.meta.days} 天:${r.meta.candidates.join('、')}${r.meta.shengXiao ? ` 当事人属${r.meta.shengXiao}` : '(未给属相,未做冲煞排除)'}`
|
|
1542
1548
|
: `【择日·${r.meta.task}】${r.meta.startDate} 起 ${r.meta.days} 天${r.meta.shengXiao ? ` 当事人属${r.meta.shengXiao}` : '(未给属相,未做冲煞排除)'}`;
|
|
1543
1549
|
const top = r.days.slice().sort((a, b) => b.score - a.score).slice(0, cand ? 12 : 5)
|
|
1544
|
-
.map((d) =>
|
|
1550
|
+
.map((d) => {
|
|
1551
|
+
const g = d.grade ? `,卷十${d.grade.label}·${d.grade.decision}` : '';
|
|
1552
|
+
return `· ${d.date} ${d.weekday} ${d.verdict}(${d.score}分${g}) 宜${d.yi.slice(0, 3).join('/')} ${d.reasons.join(';') || '无特别加减分'}`;
|
|
1553
|
+
});
|
|
1545
1554
|
const bestLine = cand
|
|
1546
1555
|
? (r.compare.best
|
|
1547
1556
|
? `这一组里最优:${r.compare.best.date}(${r.compare.best.score}分,${r.compare.best.verdict})`
|
|
@@ -1557,6 +1566,10 @@ function zeriText(r) {
|
|
|
1557
1566
|
cand ? '候选日逐日:' : '逐日排序:',
|
|
1558
1567
|
...top,
|
|
1559
1568
|
...(cand ? [`比较口径:${r.compare.note}`] : []),
|
|
1569
|
+
`神煞依据:${r.shenshaRef.text};起法 ${r.shenshaRef.volumes.join('、')}。未实现起法:${r.shenshaRef.unsupported.join('、')}(不计分,逐日 shensha.unsupported 列出)。`,
|
|
1570
|
+
...(r.shenshaRef.juan10
|
|
1571
|
+
? [`卷十依据:${r.shenshaRef.juan10.text}(${r.shenshaRef.juan10.corpusLines});${r.shenshaRef.juan10.thresholdsNote}`]
|
|
1572
|
+
: []),
|
|
1560
1573
|
`口径:${r.meta.scope}`,
|
|
1561
1574
|
].join('\n');
|
|
1562
1575
|
}
|
|
@@ -1756,7 +1769,7 @@ function nameText(r) {
|
|
|
1756
1769
|
: `【五格】${wu ? wu.reason : '未算'}`;
|
|
1757
1770
|
const ph = r.phonetics;
|
|
1758
1771
|
const phLine = ph && ph.available
|
|
1759
|
-
? `【音韵】${ph.chars.map((x) => `${x.char}${x.py}${x.tone}`).join(' ')}|声调 ${ph.tonePattern}|${ph.level}${ph.issues.length ? `:${ph.issues.map((i) => i.text).join(';')}` : ''}`
|
|
1772
|
+
? `【音韵】${ph.chars.map((x) => `${x.char}${x.py}${x.tone}`).join(' ')}|声调 ${ph.tonePattern}|${ph.level}${(ph.alt || []).length ? `|姓又读 ${ph.alt.map((x) => `${x.char}${x.py}${x.tone}`).join('、')}` : ''}${ph.issues.length ? `:${ph.issues.map((i) => i.text).join(';')}` : ''}`
|
|
1760
1773
|
: `【音韵】${ph ? ph.reason : '未算'}`;
|
|
1761
1774
|
return [
|
|
1762
1775
|
`【名字评估】${r.fullName}`,
|
|
@@ -252,6 +252,18 @@ export const KNOWLEDGE = [
|
|
|
252
252
|
status: 'variant',
|
|
253
253
|
note: '串连几跳为止、是否允许借对宫飞化,各派不一;本插件只跟单一支化逐宫走,走满 12 宫或成环即停。',
|
|
254
254
|
},
|
|
255
|
+
{
|
|
256
|
+
id: 'ziwei-zaoyao',
|
|
257
|
+
// 挂在 work / health 不是随手加的:这十二颗里被真正用到的就那几组——
|
|
258
|
+
// 天官、天福、天厨主贵显与俸禄(看事业、公职),天月、解神、阴煞主病符与消灾(看疾厄)。
|
|
259
|
+
// overall 已有三张占位,这张在 overall 排不上号,所以按落宫实质挂后两维。
|
|
260
|
+
system: 'ziwei', dims: ['overall', 'work', 'health'],
|
|
261
|
+
gist: '杂曜多而轻:全表六十余颗,本盘默认只排 49 颗,开开关才补十二颗。',
|
|
262
|
+
detail: '通行全表的杂曜按「定宫依据」分四路:解神、天巫、天月、阴煞只看生月(如解神「正二在申三四在戍,五六在子七八在寅」);天官、天福、天厨只看生年干(如天厨「甲丁食蛇口,乙戊辛马方」);蜚廉、天德、年解只看生年支(天德「起酉宫,顺至生年」,年解「戌宫逆行去」);天才、天寿借命宫与身宫——自命宫/身宫起子年,顺数到本生年支安之。十二颗各有各的诀,没有一条通用规则能推出来,所以只能逐颗查表。它们的作用是补细节(口舌、病符、贵显、寿年、香火),不改主星与四化搭出的骨架,这也是默认盘不排它们的原因:星一多,容易被当成一条条独立的吉凶判决。',
|
|
263
|
+
source: '通行安星诀:王亭之《中州派紫微斗数初级讲义·安星法》、网络《紫微斗数安星法口诀》本、《全书安星法》转录本,三处并核',
|
|
264
|
+
status: 'settled',
|
|
265
|
+
note: '同名不同星不合并:年支系的蜚廉≠博士十二神的飞廉,按年安的天德≠岁前十二神的天德,年解≠按月安的解神(月解)。龙德、月德虽可按年支安,但与岁前神煞同名异宫,本库不另立。转抄例子有一处与自家诀文相抵(天才:命宫在午、戌年生人,按诀应在辰宫,却写「巳宫安天才」),判为笔误,一律以诀文为准。',
|
|
266
|
+
},
|
|
255
267
|
|
|
256
268
|
// ── 六爻 ──────────────────────────────────────────────
|
|
257
269
|
{
|
|
@@ -464,6 +476,15 @@ export const KNOWLEDGE = [
|
|
|
464
476
|
status: 'variant',
|
|
465
477
|
note: '逆位是否参与解读本身就有分歧(有牌阵传统完全不用逆位)。本插件按削弱加内向综合取象,并在开头声明。',
|
|
466
478
|
},
|
|
479
|
+
{
|
|
480
|
+
id: 'tarot-correspondence',
|
|
481
|
+
system: 'tarot', dims: ['overall'],
|
|
482
|
+
gist: '小牌 2-10 按花色三分相排旬位,首牌只归生命树源质,宫廷牌不配星座。',
|
|
483
|
+
detail: '通行表把四组花色各配一个元素三分相(权杖火=白羊/狮子/射手,圣杯水=巨蟹/天蝎/双鱼,宝剑风=天秤/水瓶/双子,星币土=摩羯/金牛/处女):数字 2-4、5-7、8-10 依次落进这三个星座,同组三张各占该星座的第一、二、三旬;旬主星按迦勒底连续序(白羊第一旬起火星,其后土→木→火→日→金→水→月轮下去)定,例:权杖二=火星在白羊第一旬、权杖四=金星在白羊第三旬、圣杯九=木星在双鱼第二旬。四张首牌对应生命树的 Kether 到 Malkuth 之外的「元素之根源」,只归源质不配单一星座。',
|
|
484
|
+
source: 'RWS(1909)牌面;牌义取自黄金黎明体系(Liber 777 一脉的公开对应表,与三处独立资料互核)',
|
|
485
|
+
status: 'variant',
|
|
486
|
+
note: '两处不合并:一是旬主星表本身有两派——本库按迦勒底连续序(白羊一旬起火星,巨蟹一旬起金星),另一派把每个星座的第一旬归本星座守护星(巨蟹一旬起月亮),两派在半个黄道上给出的旬主不同,本库取 777/黄金黎明一路因为小牌的星座-行星对应就是按它排的;二是宫廷牌(侍从/骑士/王后/国王)在公开资料里有两套互相冲突的映射:一套按「国王=本位宫、王后=固定宫、骑士=变动宫」,另一套按黄金黎明四元素层级(骑士=火、国王=风、王后=土、侍从=水)推星座,两派在多数花色上把国王与王后对调。本插件两派都不合并:数字牌取连续序标注旬位,宫廷牌只给元素与角色定位,星座与主星留空。',
|
|
487
|
+
},
|
|
467
488
|
{
|
|
468
489
|
id: 'bazi-dayun-jiaoqi',
|
|
469
490
|
system: 'bazi', dims: [],
|
package/engine/interpret.js
CHANGED
|
@@ -1081,7 +1081,7 @@ function ziweiInterpret(r) {
|
|
|
1081
1081
|
// ══════════════════════════════════════════════════════════
|
|
1082
1082
|
// 卦象通用:卦辞 / 爻辞 / 动爻 / 生活落点
|
|
1083
1083
|
// ══════════════════════════════════════════════════════════
|
|
1084
|
-
function hexSections({ benName, benUpper, benLower, bianName, bianUpper, bianLower, movingLine, moving }) {
|
|
1084
|
+
function hexSections({ benName, benUpper, benLower, bianName, bianUpper, bianLower, movingLine, moving, jing: jingText }) {
|
|
1085
1085
|
const ben = hexInfo(benName, benUpper, benLower);
|
|
1086
1086
|
const sections = [
|
|
1087
1087
|
{
|
|
@@ -1100,6 +1100,10 @@ function hexSections({ benName, benUpper, benLower, bianName, bianUpper, bianLow
|
|
|
1100
1100
|
text: `动爻变化之后得到「${bian.full}」,${bian.meaning}。变卦往往指向事情后来的样子:从「${ben.full}」走到「${bian.full}」,可以理解为局面会从${ben.scene}转为${bian.scene}。`,
|
|
1101
1101
|
});
|
|
1102
1102
|
}
|
|
1103
|
+
// 经文原文由排盘层算好挂进结果(engine/yijing-text.js),这里只做摆放:
|
|
1104
|
+
// 先读白话大意,再对原文,最后才落到生活里。
|
|
1105
|
+
const jing = String(jingText || '');
|
|
1106
|
+
if (jing) sections.push({ key: 'jingText', label: '经文原文', text: jing });
|
|
1103
1107
|
sections.push({
|
|
1104
1108
|
key: 'scene', label: '落到生活里',
|
|
1105
1109
|
text: `把这一卦放进日常:${ben.scene}。${bianName ? `而后续的方向是${hexInfo(bianName, bianUpper, bianLower).scene}。` : ''}你可以对照着看看,眼下哪件事最像这个描述。`,
|
|
@@ -1126,7 +1130,7 @@ function liuyaoInterpret(r, ask) {
|
|
|
1126
1130
|
const { sections, ben: benInfo, bian: bianInfo } = hexSections({
|
|
1127
1131
|
benName: ben.name, benUpper: ben.upper, benLower: ben.lower,
|
|
1128
1132
|
bianName: bian.name, bianUpper: bian.upper, bianLower: bian.lower,
|
|
1129
|
-
moving,
|
|
1133
|
+
moving, jing: r.jing,
|
|
1130
1134
|
});
|
|
1131
1135
|
|
|
1132
1136
|
const shiLine = lines.find((l) => l.position === ben.shi);
|
|
@@ -1383,7 +1387,7 @@ function meihuaInterpret(r) {
|
|
|
1383
1387
|
const { sections, ben: benInfo, bian: bianInfo } = hexSections({
|
|
1384
1388
|
benName: ben.name, benUpper: ben.upper, benLower: ben.lower,
|
|
1385
1389
|
bianName: bian.name, bianUpper: bian.upper, bianLower: bian.lower,
|
|
1386
|
-
moving: movingLine,
|
|
1390
|
+
moving: movingLine, jing: r.jing,
|
|
1387
1391
|
});
|
|
1388
1392
|
|
|
1389
1393
|
const bodyEl = pick(bu.body, 'element', '');
|
package/engine/liuyao.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// 六爻(纳甲)引擎:摇卦、装卦、六亲、六神、世应、变卦
|
|
2
2
|
import { STEMS, BRANCHES, toJDN, ganzhiName, dayGanzhiIndex, sexagenaryIndex, xunKongOf } from './calendar.js';
|
|
3
|
+
import { jingText } from './yijing-text.js';
|
|
3
4
|
|
|
4
5
|
// 八卦三位(自下而上,1 = 阳)
|
|
5
6
|
const TRIGRAM_BITS = {
|
|
@@ -580,6 +581,9 @@ export function buildLiuyao(input = {}) {
|
|
|
580
581
|
body.labels = bodyLabels(body);
|
|
581
582
|
return body;
|
|
582
583
|
})(),
|
|
584
|
+
// 经文原文在排盘时就算好挂上来,解释层只负责摆位置:
|
|
585
|
+
// 这样 yijing-text 只进六爻/梅花那一个分块,不必为了原文把 12KB 塞进 8 个分块。
|
|
586
|
+
jing: jingText({ benName: ben.name, bianName: bian ? bian.name : '', movingPositions: moving.map((i) => i + 1) }),
|
|
583
587
|
};
|
|
584
588
|
}
|
|
585
589
|
|
package/engine/meihua.js
CHANGED
|
@@ -3,6 +3,7 @@ import { BRANCHES } from './calendar.js';
|
|
|
3
3
|
import { solarToLunar } from './lunar.js';
|
|
4
4
|
import { fail } from './fail.js';
|
|
5
5
|
import { hexagramFromBits } from './liuyao.js';
|
|
6
|
+
import { jingText } from './yijing-text.js';
|
|
6
7
|
|
|
7
8
|
// 先天八卦数:乾1 兑2 离3 震4 巽5 坎6 艮7 坤8
|
|
8
9
|
const TRI_NAME = ['', '乾', '兑', '离', '震', '巽', '坎', '艮', '坤'];
|
|
@@ -109,6 +110,8 @@ export function buildMeihua(input = {}) {
|
|
|
109
110
|
bian: { name: bian.name, upper: bian.upper, lower: bian.lower },
|
|
110
111
|
cuo: { name: cuo.name },
|
|
111
112
|
zong: { name: zong.name },
|
|
113
|
+
// 经文原文在排盘时算好挂上,解释层只摆位置(同 liuyao.js,见 engine/yijing-text.js)
|
|
114
|
+
jing: jingText({ benName: ben.name, huName: hu.name, bianName: bian.name, movingPositions: [moving] }),
|
|
112
115
|
bodyUse: {
|
|
113
116
|
body: { trigram: bodyTri, element: TRI_ELEMENT[bodyTri] },
|
|
114
117
|
use: { trigram: useTri, element: TRI_ELEMENT[useTri] },
|
package/engine/name-data.js
CHANGED
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
// 调用方可以用 strokeOverrides 覆盖任意字的笔画,覆盖值会被标注为「用户指定」。
|
|
11
11
|
//
|
|
12
12
|
// 读数口径:拼音只写声母韵母(ü 写作 v),声调 1–4 单独一列;轻声不收录(人名用字几乎不读轻声)。
|
|
13
|
+
import { EXTRA_READING } from './name-extra.js';
|
|
14
|
+
import { SURNAME_ROWS, COMPOUND_ROWS, SURNAME_ALT, SURNAME_COUNTS } from './surname-data.js';
|
|
13
15
|
|
|
14
16
|
/** [字, 拼音(无声调), 声调, 康熙笔画] */
|
|
15
|
-
|
|
17
|
+
const BASE_READING = [
|
|
16
18
|
// ── 木 ──
|
|
17
19
|
['梓', 'zi', 3, 11], ['桐', 'tong', 2, 10], ['楠', 'nan', 2, 13], ['楷', 'kai', 3, 13],
|
|
18
20
|
['松', 'song', 1, 8], ['柏', 'bai', 3, 9], ['枫', 'feng', 1, 13], ['榕', 'rong', 2, 14],
|
|
@@ -120,85 +122,29 @@ export const READING = [
|
|
|
120
122
|
['浦', 'pu', 3, 11],
|
|
121
123
|
];
|
|
122
124
|
|
|
123
|
-
|
|
124
|
-
export const SURNAME_STROKES = {
|
|
125
|
-
王: 4, 李: 7, 张: 11, 刘: 15, 陈: 16, 杨: 13, 黄: 12, 赵: 14, 吴: 7, 周: 8,
|
|
126
|
-
徐: 10, 孙: 10, 马: 10, 朱: 6, 胡: 11, 郭: 15, 何: 7, 高: 10, 林: 8, 罗: 20,
|
|
127
|
-
郑: 19, 梁: 11, 谢: 17, 宋: 7, 唐: 10, 许: 11, 韩: 17, 冯: 12, 曹: 11, 彭: 12,
|
|
128
|
-
曾: 12, 萧: 18, 田: 5, 董: 15, 潘: 16, 袁: 10, 蔡: 17, 余: 7, 于: 3, 杜: 7,
|
|
129
|
-
叶: 15, 程: 12, 魏: 18, 吕: 7, 丁: 2, 任: 6, 姚: 9, 卢: 16, 姜: 9, 崔: 11,
|
|
130
|
-
钟: 17, 谭: 19, 陆: 16, 范: 15, 金: 8, 石: 5, 廖: 14, 贾: 13, 夏: 10, 韦: 9,
|
|
131
|
-
付: 5, 方: 4, 白: 5, 邹: 17, 孟: 8, 熊: 14, 秦: 10, 邱: 12, 江: 7, 尹: 4,
|
|
132
|
-
薛: 19, 段: 9, 雷: 13, 侯: 9, 龙: 16, 史: 5, 陶: 16, 黎: 15, 贺: 12, 顾: 21,
|
|
133
|
-
毛: 4, 郝: 14, 龚: 22, 邵: 12, 钱: 16, 严: 20, 武: 8, 戴: 18, 莫: 13, 孔: 4,
|
|
134
|
-
向: 6, 常: 11, 康: 11, 易: 8, 文: 4, 施: 9, 洪: 10, 安: 6, 颜: 18, 温: 13,
|
|
135
|
-
章: 11, 鲁: 15, 葛: 15, 伍: 6, 申: 5, 尤: 4, 焦: 12, 柳: 9, 邢: 11, 路: 13,
|
|
136
|
-
岳: 8, 乔: 12, 赖: 20, 万: 15, 苏: 22, 蒋: 17, 沈: 8, 汪: 8, 邓: 19, 覃: 12,
|
|
137
|
-
房: 8, 边: 22, 辛: 7, 涂: 11, 甘: 5, 封: 9, 储: 18, 邬: 17, 路: 13, 詹: 13,
|
|
138
|
-
};
|
|
125
|
+
export const READING = [...BASE_READING, ...EXTRA_READING];
|
|
139
126
|
|
|
140
|
-
/**
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
向: ['xiang', 4], 常: ['chang', 2], 康: ['kang', 1], 易: ['yi', 4], 文: ['wen', 2],
|
|
161
|
-
施: ['shi', 1], 洪: ['hong', 2], 安: ['an', 1], 颜: ['yan', 2], 温: ['wen', 1],
|
|
162
|
-
章: ['zhang', 1], 鲁: ['lu', 3], 葛: ['ge', 3], 伍: ['wu', 3], 申: ['shen', 1],
|
|
163
|
-
尤: ['you', 2], 焦: ['jiao', 1], 柳: ['liu', 3], 邢: ['xing', 2], 路: ['lu', 4],
|
|
164
|
-
岳: ['yue', 4], 乔: ['qiao', 2], 赖: ['lai', 4], 万: ['wan', 4], 苏: ['su', 1],
|
|
165
|
-
蒋: ['jiang', 3], 沈: ['shen', 3], 汪: ['wang', 1], 邓: ['deng', 4], 覃: ['tan', 2],
|
|
166
|
-
房: ['fang', 2], 边: ['bian', 1], 辛: ['xin', 1], 涂: ['tu', 2], 甘: ['gan', 1],
|
|
167
|
-
封: ['feng', 1], 储: ['chu', 3], 邬: ['wu', 1], 詹: ['zhan', 1],
|
|
168
|
-
欧: ['ou', 1],
|
|
169
|
-
阳: ['yang', 2],
|
|
170
|
-
司: ['si', 1],
|
|
171
|
-
上: ['shang', 4],
|
|
172
|
-
官: ['guan', 1],
|
|
173
|
-
诸: ['zhu', 1],
|
|
174
|
-
东: ['dong', 1],
|
|
175
|
-
皇: ['huang', 2],
|
|
176
|
-
甫: ['fu', 3],
|
|
177
|
-
尉: ['yu', 4],
|
|
178
|
-
迟: ['chi', 2],
|
|
179
|
-
令: ['ling', 4],
|
|
180
|
-
狐: ['hu', 2],
|
|
181
|
-
慕: ['mu', 4],
|
|
182
|
-
徒: ['tu', 2],
|
|
183
|
-
公: ['gong', 1],
|
|
184
|
-
};
|
|
127
|
+
/**
|
|
128
|
+
* 姓氏数据来自 engine/surname-data.js(单姓 998 + 复姓 82),这里只按原有形状摊开:
|
|
129
|
+
* SURNAME_STROKES[ch] → 康熙笔画
|
|
130
|
+
* SURNAME_READING[ch] → [拼音(ü 写作 v), 声调],只有笔画没有读音的姓不入此表
|
|
131
|
+
* SURNAME_ALT_READING[ch] → 又读(多音姓氏的第二读,音韵行里会并列显示)
|
|
132
|
+
* DOUBLE_SURNAMES[name] → { s: [首字画, 末字画], py, tone }
|
|
133
|
+
* 没有收录的姓:笔画可用 strokeOverrides / surnameStrokes 传入,五格会照算。
|
|
134
|
+
*/
|
|
135
|
+
export const SURNAME_STROKES = {};
|
|
136
|
+
export const SURNAME_READING = {};
|
|
137
|
+
export const SURNAME_ALT_READING = {};
|
|
138
|
+
export const DOUBLE_SURNAMES = {};
|
|
139
|
+
for (const [ch, kx, py, tone] of SURNAME_ROWS) {
|
|
140
|
+
SURNAME_STROKES[ch] = kx;
|
|
141
|
+
if (py) SURNAME_READING[ch] = [py, tone];
|
|
142
|
+
}
|
|
143
|
+
for (const [name, a, b, py, tone] of COMPOUND_ROWS) DOUBLE_SURNAMES[name] = { s: [a, b], py, tone };
|
|
144
|
+
for (const [ch, v] of Object.entries(SURNAME_ALT)) SURNAME_ALT_READING[ch] = v;
|
|
145
|
+
|
|
146
|
+
export const SURNAME_STATS = SURNAME_COUNTS;
|
|
185
147
|
|
|
186
|
-
/** 常见复姓:两字各自的康熙笔画(s)与读音(首字拼音连写,声调取首字) */
|
|
187
|
-
export const DOUBLE_SURNAMES = {
|
|
188
|
-
欧阳: { s: [15, 17], py: 'ouyang', tone: 1 },
|
|
189
|
-
司马: { s: [5, 10], py: 'sima', tone: 1 },
|
|
190
|
-
上官: { s: [3, 8], py: 'shangguan', tone: 4 },
|
|
191
|
-
诸葛: { s: [15, 15], py: 'zhuge', tone: 1 },
|
|
192
|
-
东方: { s: [8, 4], py: 'dongfang', tone: 1 },
|
|
193
|
-
皇甫: { s: [9, 7], py: 'huangfu', tone: 2 },
|
|
194
|
-
尉迟: { s: [11, 19], py: 'yuchi', tone: 4 },
|
|
195
|
-
令狐: { s: [5, 8], py: 'linghu', tone: 4 },
|
|
196
|
-
慕容: { s: [14, 10], py: 'murong', tone: 4 },
|
|
197
|
-
宇文: { s: [6, 4], py: 'yuwen', tone: 3 },
|
|
198
|
-
司徒: { s: [5, 10], py: 'situ', tone: 1 },
|
|
199
|
-
夏侯: { s: [10, 9], py: 'xiahou', tone: 4 },
|
|
200
|
-
公孙: { s: [4, 10], py: 'gongsun', tone: 1 },
|
|
201
|
-
};
|
|
202
148
|
|
|
203
149
|
/**
|
|
204
150
|
* 81 数理(通行本):索引即数,[吉凶, 意象]。
|