@zhin.js/plugin-idiom-chain 1.0.0
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/lib/chain-command.d.ts +5 -0
- package/lib/chain-command.d.ts.map +1 -0
- package/lib/chain-command.js +48 -0
- package/lib/chain-command.js.map +1 -0
- package/lib/commands.d.ts +6 -0
- package/lib/commands.d.ts.map +1 -0
- package/lib/commands.js +94 -0
- package/lib/commands.js.map +1 -0
- package/lib/data/idioms.d.ts +8 -0
- package/lib/data/idioms.d.ts.map +1 -0
- package/lib/data/idioms.js +422 -0
- package/lib/data/idioms.js.map +1 -0
- package/lib/engine.d.ts +4 -0
- package/lib/engine.d.ts.map +1 -0
- package/lib/engine.js +3 -0
- package/lib/engine.js.map +1 -0
- package/lib/game-flow.d.ts +11 -0
- package/lib/game-flow.d.ts.map +1 -0
- package/lib/game-flow.js +203 -0
- package/lib/game-flow.js.map +1 -0
- package/lib/hub-register.d.ts +5 -0
- package/lib/hub-register.d.ts.map +1 -0
- package/lib/hub-register.js +31 -0
- package/lib/hub-register.js.map +1 -0
- package/lib/idiom-provider.d.ts +23 -0
- package/lib/idiom-provider.d.ts.map +1 -0
- package/lib/idiom-provider.js +110 -0
- package/lib/idiom-provider.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +26 -0
- package/lib/index.js.map +1 -0
- package/lib/models.d.ts +35 -0
- package/lib/models.d.ts.map +1 -0
- package/lib/models.js +28 -0
- package/lib/models.js.map +1 -0
- package/lib/session-service.d.ts +25 -0
- package/lib/session-service.d.ts.map +1 -0
- package/lib/session-service.js +108 -0
- package/lib/session-service.js.map +1 -0
- package/lib/view.d.ts +6 -0
- package/lib/view.d.ts.map +1 -0
- package/lib/view.js +54 -0
- package/lib/view.js.map +1 -0
- package/package.json +38 -0
- package/plugin.yml +2 -0
- package/src/chain-command.ts +57 -0
- package/src/commands.ts +112 -0
- package/src/engine.ts +18 -0
- package/src/game-flow.ts +270 -0
- package/src/hub-register.ts +32 -0
- package/src/idiom-provider.ts +165 -0
- package/src/index.ts +32 -0
- package/src/models.ts +64 -0
- package/src/session-service.ts +117 -0
- package/src/view.ts +65 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Message, Plugin } from 'zhin.js';
|
|
2
|
+
import type { SessionService } from './session-service.js';
|
|
3
|
+
export declare const CHAIN_HELP: string;
|
|
4
|
+
export declare function runChainCommand(plugin: Plugin, services: SessionService, message: Message<any>, action: string): Promise<string | undefined>;
|
|
5
|
+
//# sourceMappingURL=chain-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-command.d.ts","sourceRoot":"","sources":["../src/chain-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAK/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,UAAU,QAWX,CAAC;AAEb,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA+B7B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { channelKey } from '@zhin.js/game-shared';
|
|
2
|
+
import { continueGame, startGame } from './game-flow.js';
|
|
3
|
+
import { idiomCount, modeLabel, promptLine } from './engine.js';
|
|
4
|
+
export const CHAIN_HELP = [
|
|
5
|
+
'📜 成语接龙(文字接龙 · 四字成语)',
|
|
6
|
+
`开源词库 ${idiomCount()} 条 · 机器人先出第一句`,
|
|
7
|
+
'接龙 / chain — 帮助',
|
|
8
|
+
'接龙 开始 / 同音 — 同音接龙(默认,首字同音即可)',
|
|
9
|
+
'接龙 同字 — 严格同字接龙',
|
|
10
|
+
'接龙 继续 — 刷新界面',
|
|
11
|
+
'接龙 放弃 — 结束对局',
|
|
12
|
+
'',
|
|
13
|
+
'进行中:直接回复四字成语',
|
|
14
|
+
'按钮:提示 · 跳过 · 认输(失误 3 次判负)',
|
|
15
|
+
].join('\n');
|
|
16
|
+
export async function runChainCommand(plugin, services, message, action) {
|
|
17
|
+
const ch = channelKey(message);
|
|
18
|
+
const userId = message.$sender.id;
|
|
19
|
+
if (!action || action === 'help') {
|
|
20
|
+
const active = await services.getActiveByChannel(ch);
|
|
21
|
+
const lines = [CHAIN_HELP, ''];
|
|
22
|
+
if (active) {
|
|
23
|
+
const mode = active.match_mode === 'char' ? 'char' : 'pinyin';
|
|
24
|
+
lines.push(`进行中:${active.player_name} · ${modeLabel(mode)} · 局分 ${active.player_score}:${active.bot_score} · 连击 ${active.streak}`);
|
|
25
|
+
if (active.last_idiom)
|
|
26
|
+
lines.push(promptLine(active.last_idiom, mode));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
lines.push('暂无对局,发送「接龙 开始」或「接龙 同字」。');
|
|
30
|
+
}
|
|
31
|
+
return lines.join('\n');
|
|
32
|
+
}
|
|
33
|
+
if (action === 'start_pinyin')
|
|
34
|
+
return startGame(plugin, services, message, 'pinyin');
|
|
35
|
+
if (action === 'start_char')
|
|
36
|
+
return startGame(plugin, services, message, 'char');
|
|
37
|
+
if (action === 'continue')
|
|
38
|
+
return continueGame(plugin, services, message);
|
|
39
|
+
if (action === 'quit') {
|
|
40
|
+
const row = await services.getActiveForUser(ch, userId);
|
|
41
|
+
if (!row)
|
|
42
|
+
return '你没有进行中的接龙。';
|
|
43
|
+
await services.updateSession(row.id, { status: 'aborted' });
|
|
44
|
+
return '已放弃成语接龙。';
|
|
45
|
+
}
|
|
46
|
+
return `未知子命令:${action}\n\n${CHAIN_HELP}`;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=chain-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-command.js","sourceRoot":"","sources":["../src/chain-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,sBAAsB;IACtB,QAAQ,UAAU,EAAE,eAAe;IACnC,iBAAiB;IACjB,8BAA8B;IAC9B,gBAAgB;IAChB,cAAc;IACd,cAAc;IACd,EAAE;IACF,cAAc;IACd,2BAA2B;CAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,QAAwB,EACxB,OAAqB,EACrB,MAAc;IAEd,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAc,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzE,KAAK,CAAC,IAAI,CACR,OAAO,MAAM,CAAC,WAAW,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,CACvH,CAAC;YACF,IAAI,MAAM,CAAC,UAAU;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrF,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjF,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE1E,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG;YAAE,OAAO,YAAY,CAAC;QAC9B,MAAM,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,SAAS,MAAM,OAAO,UAAU,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Plugin } from 'zhin.js';
|
|
2
|
+
import type { SessionService } from './session-service.js';
|
|
3
|
+
export declare function registerCommands(plugin: Plugin, getServices: () => SessionService | null): void;
|
|
4
|
+
export declare function registerInteractive(plugin: Plugin, getServices: () => SessionService | null): void;
|
|
5
|
+
export declare function registerTextMiddleware(plugin: Plugin, getServices: () => SessionService | null): void;
|
|
6
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AASrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAoB3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAG/F;AA4BD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAUlG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAsCrG"}
|
package/lib/commands.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { MessageCommand, getActionFromMessage } from 'zhin.js';
|
|
2
|
+
import { buildChoiceFallbackMap, channelKey, normalizeChainAction, parseChoicePayload, } from '@zhin.js/game-shared';
|
|
3
|
+
import { CHAIN_PREFIX, handleChoice, processIdiomText } from './game-flow.js';
|
|
4
|
+
import { runChainCommand } from './chain-command.js';
|
|
5
|
+
function registerPattern(plugin, pattern, desc, getServices) {
|
|
6
|
+
plugin.addCommand(new MessageCommand(pattern)
|
|
7
|
+
.desc(desc)
|
|
8
|
+
.action(async (message, result) => {
|
|
9
|
+
const services = getServices();
|
|
10
|
+
if (!services)
|
|
11
|
+
return '成语接龙需要启用 database 配置。';
|
|
12
|
+
const raw = result.params.action ?? '';
|
|
13
|
+
return runChainCommand(plugin, services, message, normalizeChainAction(raw));
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
export function registerCommands(plugin, getServices) {
|
|
17
|
+
registerPattern(plugin, 'chain [action:word]', '成语接龙(chain)', getServices);
|
|
18
|
+
registerPattern(plugin, '接龙 [action:word]', '成语接龙(中文)', getServices);
|
|
19
|
+
}
|
|
20
|
+
async function resolveChoice(message, services) {
|
|
21
|
+
const action = getActionFromMessage(message);
|
|
22
|
+
if (!action)
|
|
23
|
+
return null;
|
|
24
|
+
const parsed = parseChoicePayload(action.payload, CHAIN_PREFIX);
|
|
25
|
+
if (parsed)
|
|
26
|
+
return { sessionId: parsed.sessionId, choiceId: parsed.choiceId };
|
|
27
|
+
const choiceId = action.id || action.payload;
|
|
28
|
+
if (!choiceId)
|
|
29
|
+
return null;
|
|
30
|
+
const ch = channelKey(message);
|
|
31
|
+
const session = await services.getActiveForUser(ch, message.$sender.id)
|
|
32
|
+
?? (action.sourceMessageId
|
|
33
|
+
? await services.getActiveByBoardMessageId(action.sourceMessageId)
|
|
34
|
+
: null);
|
|
35
|
+
if (!session || session.channel_key !== ch)
|
|
36
|
+
return null;
|
|
37
|
+
const valid = ['hint', 'skip', 'quit', 'restart'];
|
|
38
|
+
if (!valid.includes(choiceId))
|
|
39
|
+
return null;
|
|
40
|
+
return { sessionId: session.id, choiceId };
|
|
41
|
+
}
|
|
42
|
+
export function registerInteractive(plugin, getServices) {
|
|
43
|
+
plugin.registerInteractiveHandler(`${CHAIN_PREFIX}:`, async (message) => {
|
|
44
|
+
const services = getServices();
|
|
45
|
+
if (!services)
|
|
46
|
+
return false;
|
|
47
|
+
const choice = await resolveChoice(message, services);
|
|
48
|
+
if (!choice)
|
|
49
|
+
return false;
|
|
50
|
+
const err = await handleChoice(plugin, services, message, choice.sessionId, choice.choiceId);
|
|
51
|
+
if (err)
|
|
52
|
+
await message.$reply?.(err);
|
|
53
|
+
return true;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export function registerTextMiddleware(plugin, getServices) {
|
|
57
|
+
plugin.addMiddleware(async (message, next) => {
|
|
58
|
+
const services = getServices();
|
|
59
|
+
if (!services)
|
|
60
|
+
return next();
|
|
61
|
+
const action = getActionFromMessage(message);
|
|
62
|
+
if (action?.payload.startsWith(`${CHAIN_PREFIX}:`))
|
|
63
|
+
return next();
|
|
64
|
+
const ch = channelKey(message);
|
|
65
|
+
const session = await services.getActiveForUser(ch, message.$sender.id);
|
|
66
|
+
if (!session)
|
|
67
|
+
return next();
|
|
68
|
+
const raw = message.$raw?.trim() ?? '';
|
|
69
|
+
if (!raw)
|
|
70
|
+
return next();
|
|
71
|
+
const n = /^(\d+)$/.exec(raw);
|
|
72
|
+
if (n && session.status === 'active') {
|
|
73
|
+
const map = buildChoiceFallbackMap(CHAIN_PREFIX, session.id, [
|
|
74
|
+
{ id: 'hint', label: '提示' },
|
|
75
|
+
{ id: 'skip', label: '跳过' },
|
|
76
|
+
{ id: 'quit', label: '认输' },
|
|
77
|
+
]);
|
|
78
|
+
const payload = map[n[1]];
|
|
79
|
+
const parsed = payload ? parseChoicePayload(payload, CHAIN_PREFIX) : null;
|
|
80
|
+
if (parsed?.sessionId === session.id) {
|
|
81
|
+
const err = await handleChoice(plugin, services, message, session.id, parsed.choiceId);
|
|
82
|
+
if (err)
|
|
83
|
+
await message.$reply?.(err);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (/^[\u4e00-\u9fff]{2,8}$/.test(raw)) {
|
|
88
|
+
await processIdiomText(plugin, services, message, raw);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
return next();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idioms.d.ts","sourceRoot":"","sources":["../../src/data/idioms.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,MAAM,EAAE,UAAU,EAoa9B,CAAC"}
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
export const IDIOMS = [
|
|
2
|
+
{ text: '一心一意', gloss: '专注不变' },
|
|
3
|
+
{ text: '意气风发', gloss: '精神振奋' },
|
|
4
|
+
{ text: '发扬光大', gloss: '使更加盛大' },
|
|
5
|
+
{ text: '大显身手', gloss: '充分显示本领' },
|
|
6
|
+
{ text: '手不释卷', gloss: '勤奋读书' },
|
|
7
|
+
{ text: '卷土重来', gloss: '失败后重新恢复' },
|
|
8
|
+
{ text: '来龙去脉', gloss: '事情的原委' },
|
|
9
|
+
{ text: '脉脉含情', gloss: '暗中流露感情' },
|
|
10
|
+
{ text: '情同手足', gloss: '感情如同兄弟' },
|
|
11
|
+
{ text: '足智多谋', gloss: '富有智慧与谋略' },
|
|
12
|
+
{ text: '谋事在人', gloss: '计划在于人为' },
|
|
13
|
+
{ text: '人山人海', gloss: '人非常多' },
|
|
14
|
+
{ text: '海阔天空', gloss: '形容开阔无边' },
|
|
15
|
+
{ text: '空前绝后', gloss: '前所未有' },
|
|
16
|
+
{ text: '后来居上', gloss: '后来超过先前的' },
|
|
17
|
+
{ text: '上行下效', gloss: '上面怎么做下面跟着学' },
|
|
18
|
+
{ text: '效犬马力', gloss: '尽力效劳' },
|
|
19
|
+
{ text: '力不从心', gloss: '心里想做而力不够' },
|
|
20
|
+
{ text: '心花怒放', gloss: '非常高兴' },
|
|
21
|
+
{ text: '放虎归山', gloss: '放回有害的人' },
|
|
22
|
+
{ text: '山清水秀', gloss: '风景优美' },
|
|
23
|
+
{ text: '秀外慧中', gloss: '外表秀美内心聪明' },
|
|
24
|
+
{ text: '中流砥柱', gloss: '坚强独立的人' },
|
|
25
|
+
{ text: '柱天踏地', gloss: '担当重任' },
|
|
26
|
+
{ text: '地广人稀', gloss: '土地广而人烟少' },
|
|
27
|
+
{ text: '稀世之宝', gloss: '极珍贵的宝物' },
|
|
28
|
+
{ text: '宝刀未老', gloss: '本领依然高强' },
|
|
29
|
+
{ text: '老当益壮', gloss: '年纪虽老志气更壮' },
|
|
30
|
+
{ text: '壮志凌云', gloss: '理想宏伟远大' },
|
|
31
|
+
{ text: '云开见日', gloss: '黑暗过去见到光明' },
|
|
32
|
+
{ text: '日新月异', gloss: '每天每月都有新变化' },
|
|
33
|
+
{ text: '异口同声', gloss: '说法完全一致' },
|
|
34
|
+
{ text: '声名鹊起', gloss: '名声迅速提高' },
|
|
35
|
+
{ text: '起死回生', gloss: '使将死者活过来' },
|
|
36
|
+
{ text: '生龙活虎', gloss: '活泼有生气' },
|
|
37
|
+
{ text: '虎虎生威', gloss: '很有威风' },
|
|
38
|
+
{ text: '威风凛凛', gloss: '威严气派' },
|
|
39
|
+
{ text: '凛然正气', gloss: '正直严肃的气概' },
|
|
40
|
+
{ text: '气贯长虹', gloss: '气势极盛' },
|
|
41
|
+
{ text: '长虹贯日', gloss: '气势盛大' },
|
|
42
|
+
{ text: '日久天长', gloss: '时间长久' },
|
|
43
|
+
{ text: '长驱直入', gloss: '迅速进军' },
|
|
44
|
+
{ text: '入木三分', gloss: '见解深刻' },
|
|
45
|
+
{ text: '分秒必争', gloss: '抓紧时间' },
|
|
46
|
+
{ text: '争奇斗艳', gloss: '竞相展示新奇' },
|
|
47
|
+
{ text: '艳冠群芳', gloss: '在所有花中最艳丽' },
|
|
48
|
+
{ text: '芳名远播', gloss: '好名声传播很远' },
|
|
49
|
+
{ text: '播撒希望', gloss: '传播希望(常用搭配)' },
|
|
50
|
+
{ text: '望梅止渴', gloss: '用空想安慰自己' },
|
|
51
|
+
{ text: '渴而掘井', gloss: '临渴掘井' },
|
|
52
|
+
{ text: '井底之蛙', gloss: '见识短浅' },
|
|
53
|
+
{ text: '蛙鸣蝉噪', gloss: '低水平的议论' },
|
|
54
|
+
{ text: '噪杂不安', gloss: '吵闹不静' },
|
|
55
|
+
{ text: '安居乐业', gloss: '安定生活愉快工作' },
|
|
56
|
+
{ text: '业精于勤', gloss: '学业因勤奋而精' },
|
|
57
|
+
{ text: '勤能补拙', gloss: '勤奋可补不足' },
|
|
58
|
+
{ text: '拙嘴笨舌', gloss: '不善言辞' },
|
|
59
|
+
{ text: '舌战群儒', gloss: '与众人辩论' },
|
|
60
|
+
{ text: '儒雅风流', gloss: '温文尔雅' },
|
|
61
|
+
{ text: '流芳百世', gloss: '美名永远流传' },
|
|
62
|
+
{ text: '世外桃源', gloss: '理想的美好境界' },
|
|
63
|
+
{ text: '源远流长', gloss: '历史悠久' },
|
|
64
|
+
{ text: '长命百岁', gloss: '长寿' },
|
|
65
|
+
{ text: '岁岁平安', gloss: '每年都平安' },
|
|
66
|
+
{ text: '安步当车', gloss: '慢慢走当作坐车' },
|
|
67
|
+
{ text: '车水马龙', gloss: '车马很多' },
|
|
68
|
+
{ text: '龙马精神', gloss: '精神健旺' },
|
|
69
|
+
{ text: '神采奕奕', gloss: '精神饱满' },
|
|
70
|
+
{ text: '奕奕生辉', gloss: '光彩闪耀' },
|
|
71
|
+
{ text: '辉光日新', gloss: '每天更新进步' },
|
|
72
|
+
{ text: '新仇旧恨', gloss: '新旧仇恨' },
|
|
73
|
+
{ text: '恨铁不成钢', gloss: '非四字,跳过' },
|
|
74
|
+
{ text: '恨之入骨', gloss: '痛恨到极点' },
|
|
75
|
+
{ text: '骨瘦如柴', gloss: '非常瘦' },
|
|
76
|
+
{ text: '柴毁骨立', gloss: '因哀痛过度而消瘦' },
|
|
77
|
+
{ text: '立身处世', gloss: '人在社会上立足' },
|
|
78
|
+
{ text: '世态炎凉', gloss: '人情冷暖' },
|
|
79
|
+
{ text: '凉薄之人', gloss: '冷淡薄情的人' },
|
|
80
|
+
{ text: '人之常情', gloss: '一般人有的感情' },
|
|
81
|
+
{ text: '情投意合', gloss: '感情和志趣相投' },
|
|
82
|
+
{ text: '合情合理', gloss: '符合情理' },
|
|
83
|
+
{ text: '理直气壮', gloss: '理由充分' },
|
|
84
|
+
{ text: '壮怀激烈', gloss: '胸怀壮志' },
|
|
85
|
+
{ text: '烈火真金', gloss: '真才在考验中显露' },
|
|
86
|
+
{ text: '金玉良言', gloss: '非常宝贵的劝告' },
|
|
87
|
+
{ text: '言而有信', gloss: '说话算数' },
|
|
88
|
+
{ text: '信口开河', gloss: '随口乱说' },
|
|
89
|
+
{ text: '河清海晏', gloss: '天下太平' },
|
|
90
|
+
{ text: '晏然自若', gloss: '平静自如' },
|
|
91
|
+
{ text: '若有所思', gloss: '好像在思考' },
|
|
92
|
+
{ text: '思前想后', gloss: '反复考虑' },
|
|
93
|
+
{ text: '后来之秀', gloss: '后来的优秀人物' },
|
|
94
|
+
{ text: '秀色可餐', gloss: '女子容貌美丽' },
|
|
95
|
+
{ text: '餐风宿露', gloss: '旅途辛苦' },
|
|
96
|
+
{ text: '露水夫妻', gloss: '短暂结合' },
|
|
97
|
+
{ text: '夫妻反目', gloss: '夫妻翻脸' },
|
|
98
|
+
{ text: '目空一切', gloss: '骄傲自大' },
|
|
99
|
+
{ text: '切中要害', gloss: '击中要害' },
|
|
100
|
+
{ text: '害群之马', gloss: '危害集体的人' },
|
|
101
|
+
{ text: '马到成功', gloss: '立刻成功' },
|
|
102
|
+
{ text: '功成名就', gloss: '功业建立了名声也有了' },
|
|
103
|
+
{ text: '就事论事', gloss: '根据事情本身评论' },
|
|
104
|
+
{ text: '事在人为', gloss: '事情成功在于人努力' },
|
|
105
|
+
{ text: '为人师表', gloss: '做榜样' },
|
|
106
|
+
{ text: '表里如一', gloss: '内外一致' },
|
|
107
|
+
{ text: '一鸣惊人', gloss: '平时不出名突然做出惊人成绩' },
|
|
108
|
+
{ text: '人定胜天', gloss: '人的力量能战胜自然' },
|
|
109
|
+
{ text: '天衣无缝', gloss: '完美没有破绽' },
|
|
110
|
+
{ text: '缝缝补补', gloss: '修补' },
|
|
111
|
+
{ text: '补偏救弊', gloss: '补救偏差漏洞' },
|
|
112
|
+
{ text: '弊绝风清', gloss: '坏事杜绝风气清' },
|
|
113
|
+
{ text: '清风明月', gloss: '清闲的景色' },
|
|
114
|
+
{ text: '月光如水', gloss: '月光皎洁' },
|
|
115
|
+
{ text: '水到渠成', gloss: '条件成熟自然成功' },
|
|
116
|
+
{ text: '成竹在胸', gloss: '已有完整计划' },
|
|
117
|
+
{ text: '胸有成竹', gloss: '心中有数' },
|
|
118
|
+
{ text: '竹报平安', gloss: '平安家信' },
|
|
119
|
+
{ text: '安如泰山', gloss: '非常稳固' },
|
|
120
|
+
{ text: '山高水长', gloss: '比喻恩德深厚' },
|
|
121
|
+
{ text: '长风破浪', gloss: '志向远大' },
|
|
122
|
+
{ text: '浪子回头', gloss: '迷途知返' },
|
|
123
|
+
{ text: '头头是道', gloss: '说话做事有条理' },
|
|
124
|
+
{ text: '道听途说', gloss: '没有根据的传闻' },
|
|
125
|
+
{ text: '说一不二', gloss: '说话算数' },
|
|
126
|
+
{ text: '二话不说', gloss: '不说多余话' },
|
|
127
|
+
{ text: '说长道短', gloss: '议论别人' },
|
|
128
|
+
{ text: '短兵相接', gloss: '近距离搏斗' },
|
|
129
|
+
{ text: '接二连三', gloss: '连续不断' },
|
|
130
|
+
{ text: '三顾茅庐', gloss: '诚心邀请' },
|
|
131
|
+
{ text: '庐舍简陋', gloss: '房屋简单' },
|
|
132
|
+
{ text: '陋巷箪瓢', gloss: '安贫乐道' },
|
|
133
|
+
{ text: '瓢泼大雨', gloss: '雨很大' },
|
|
134
|
+
{ text: '雨过天晴', gloss: '困难过去' },
|
|
135
|
+
{ text: '晴耕雨读', gloss: '田园生活' },
|
|
136
|
+
{ text: '读书百遍', gloss: '书读百遍其义自见' },
|
|
137
|
+
{ text: '遍览群书', gloss: '广泛阅读' },
|
|
138
|
+
{ text: '书山有路', gloss: '学习有途径' },
|
|
139
|
+
{ text: '路不拾遗', gloss: '社会风气好' },
|
|
140
|
+
{ text: '遗臭万年', gloss: '坏名声永远流传' },
|
|
141
|
+
{ text: '年富力强', gloss: '年纪不大体力强' },
|
|
142
|
+
{ text: '强弩之末', gloss: '力量已经用尽' },
|
|
143
|
+
{ text: '末路穷途', gloss: '到了无路可走' },
|
|
144
|
+
{ text: '途穷日暮', gloss: '走投无路' },
|
|
145
|
+
{ text: '暮鼓晨钟', gloss: '使人觉醒' },
|
|
146
|
+
{ text: '钟灵毓秀', gloss: '地方有灵气' },
|
|
147
|
+
{ text: '秀外惠中', gloss: '外表美内心慧' },
|
|
148
|
+
{ text: '中庸之道', gloss: '不偏不倚' },
|
|
149
|
+
{ text: '道貌岸然', gloss: '假装严肃' },
|
|
150
|
+
{ text: '然糠照薪', gloss: '勤奋学习' },
|
|
151
|
+
{ text: '薪火相传', gloss: '学问继承' },
|
|
152
|
+
{ text: '传宗接代', gloss: '延续家族' },
|
|
153
|
+
{ text: '代代相传', gloss: '一代传一代' },
|
|
154
|
+
{ text: '传为佳话', gloss: '成为美谈' },
|
|
155
|
+
{ text: '话里有话', gloss: '言外之意' },
|
|
156
|
+
{ text: '话不投机', gloss: '意见不合' },
|
|
157
|
+
{ text: '机不可失', gloss: '机会不能错过' },
|
|
158
|
+
{ text: '失之交臂', gloss: '当面错过' },
|
|
159
|
+
{ text: '臂有四肘', gloss: '人多手杂' },
|
|
160
|
+
{ text: '肘腋之患', gloss: '近在身边的祸患' },
|
|
161
|
+
{ text: '患难与共', gloss: '共同承担困难' },
|
|
162
|
+
{ text: '共商国是', gloss: '共同商量国家大事' },
|
|
163
|
+
{ text: '是非分明', gloss: '分清对错' },
|
|
164
|
+
{ text: '明辨是非', gloss: '清楚分辨' },
|
|
165
|
+
{ text: '非亲非故', gloss: '没有亲戚关系' },
|
|
166
|
+
{ text: '故弄玄虚', gloss: '故意迷惑' },
|
|
167
|
+
{ text: '虚怀若谷', gloss: '胸怀像山谷一样空' },
|
|
168
|
+
{ text: '谷贱伤农', gloss: '粮价低农民受损' },
|
|
169
|
+
{ text: '农时不误', gloss: '不错过农时' },
|
|
170
|
+
{ text: '误打误撞', gloss: '碰巧' },
|
|
171
|
+
{ text: '撞钟击鼓', gloss: '敲钟击鼓' },
|
|
172
|
+
{ text: '鼓足干劲', gloss: '充分准备力量' },
|
|
173
|
+
{ text: '劲草逢霜', gloss: '经得起考验' },
|
|
174
|
+
{ text: '霜降鸿过', gloss: '秋景' },
|
|
175
|
+
{ text: '过目不忘', gloss: '记忆力强' },
|
|
176
|
+
{ text: '忘乎所以', gloss: '高兴得忘了分寸' },
|
|
177
|
+
{ text: '以德报怨', gloss: '用恩德回报怨恨' },
|
|
178
|
+
{ text: '怨声载道', gloss: '到处都有怨言' },
|
|
179
|
+
{ text: '道不拾遗', gloss: '路上没人拾东西' },
|
|
180
|
+
{ text: '遗世独立', gloss: '超脱世俗' },
|
|
181
|
+
{ text: '立竿见影', gloss: '立刻见效' },
|
|
182
|
+
{ text: '影影绰绰', gloss: '模模糊糊' },
|
|
183
|
+
{ text: '绰有余裕', gloss: '很宽裕' },
|
|
184
|
+
{ text: '裕国足民', gloss: '国家富足人民丰足' },
|
|
185
|
+
{ text: '民殷国富', gloss: '人民富裕国家富强' },
|
|
186
|
+
{ text: '富国强兵', gloss: '国家富足兵力强盛' },
|
|
187
|
+
{ text: '兵不厌诈', gloss: '作战不排斥诡诈' },
|
|
188
|
+
{ text: '诈败佯输', gloss: '假装失败' },
|
|
189
|
+
{ text: '输肝写胆', gloss: '表示忠诚' },
|
|
190
|
+
{ text: '胆大包天', gloss: '胆子极大' },
|
|
191
|
+
{ text: '天罗地网', gloss: '包围严密' },
|
|
192
|
+
{ text: '网开一面', gloss: '留有余地' },
|
|
193
|
+
{ text: '面面俱到', gloss: '各方面都照顾到' },
|
|
194
|
+
{ text: '到岸为止', gloss: '到此为止' },
|
|
195
|
+
{ text: '止戈为武', gloss: '停止战争才是武' },
|
|
196
|
+
{ text: '武不善作', gloss: '动武不是好办法' },
|
|
197
|
+
{ text: '作茧自缚', gloss: '自己束缚自己' },
|
|
198
|
+
{ text: '缚鸡之力', gloss: '力气很小' },
|
|
199
|
+
{ text: '力不从心', gloss: '力量不够' },
|
|
200
|
+
{ text: '心直口快', gloss: '性情直爽' },
|
|
201
|
+
{ text: '快马加鞭', gloss: '加快速度' },
|
|
202
|
+
{ text: '鞭辟入里', gloss: '分析透彻' },
|
|
203
|
+
{ text: '里应外合', gloss: '内外配合' },
|
|
204
|
+
{ text: '合二为一', gloss: '合为一体' },
|
|
205
|
+
{ text: '一诺千金', gloss: '说话算数' },
|
|
206
|
+
{ text: '金玉满堂', gloss: '财富很多' },
|
|
207
|
+
{ text: '堂而皇之', gloss: '公开大胆' },
|
|
208
|
+
{ text: '之乎者也', gloss: '文绉绉' },
|
|
209
|
+
{ text: '也罢也罢', gloss: '算了' },
|
|
210
|
+
{ text: '罢黜百家', gloss: '独尊儒术' },
|
|
211
|
+
{ text: '家徒四壁', gloss: '家里很穷' },
|
|
212
|
+
{ text: '壁垒森严', gloss: '防守严密' },
|
|
213
|
+
{ text: '严阵以待', gloss: '做好战斗准备' },
|
|
214
|
+
{ text: '待时而动', gloss: '等待时机' },
|
|
215
|
+
{ text: '动如脱兔', gloss: '行动敏捷' },
|
|
216
|
+
{ text: '兔死狐悲', gloss: '同类悲伤' },
|
|
217
|
+
{ text: '悲天悯人', gloss: '哀怜世人' },
|
|
218
|
+
{ text: '人浮于事', gloss: '人员过多' },
|
|
219
|
+
{ text: '事倍功半', gloss: '费力大收效小' },
|
|
220
|
+
{ text: '半途而废', gloss: '中途停止' },
|
|
221
|
+
{ text: '废寝忘食', gloss: '非常专心' },
|
|
222
|
+
{ text: '食古不化', gloss: '拘泥古板' },
|
|
223
|
+
{ text: '化险为夷', gloss: '转危为安' },
|
|
224
|
+
{ text: '夷然自若', gloss: '平静自如' },
|
|
225
|
+
{ text: '若即若离', gloss: '好像接近又好像疏远' },
|
|
226
|
+
{ text: '离经叛道', gloss: '背离正道' },
|
|
227
|
+
{ text: '道高一丈', gloss: '正义更胜' },
|
|
228
|
+
{ text: '丈二和尚', gloss: '摸不着头脑' },
|
|
229
|
+
{ text: '尚方宝剑', gloss: '极大权力' },
|
|
230
|
+
{ text: '剑拔弩张', gloss: '形势紧张' },
|
|
231
|
+
{ text: '张灯结彩', gloss: '布置喜庆' },
|
|
232
|
+
{ text: '彩凤随鸦', gloss: '女子嫁劣男' },
|
|
233
|
+
{ text: '鸦雀无声', gloss: '非常安静' },
|
|
234
|
+
{ text: '声东击西', gloss: '迷惑对方' },
|
|
235
|
+
{ text: '西出阳关', gloss: '离别' },
|
|
236
|
+
{ text: '阳关大道', gloss: '光明大道' },
|
|
237
|
+
{ text: '道旁苦李', gloss: '无用的人' },
|
|
238
|
+
{ text: '李代桃僵', gloss: '代人受过' },
|
|
239
|
+
{ text: '僵李代桃', gloss: '代人受过' },
|
|
240
|
+
{ text: '桃李满门', gloss: '学生很多' },
|
|
241
|
+
{ text: '门庭若市', gloss: '来往人多' },
|
|
242
|
+
{ text: '市井小人', gloss: '市井小民' },
|
|
243
|
+
{ text: '人山人海', gloss: '人很多' },
|
|
244
|
+
{ text: '海阔天空', gloss: '开阔' },
|
|
245
|
+
{ text: '空前绝后', gloss: '独一无二' },
|
|
246
|
+
{ text: '后生可畏', gloss: '年轻人值得敬畏' },
|
|
247
|
+
{ text: '畏首畏尾', gloss: '胆小' },
|
|
248
|
+
{ text: '尾大不掉', gloss: '下级强大难控制' },
|
|
249
|
+
{ text: '掉以轻心', gloss: '轻率大意' },
|
|
250
|
+
{ text: '心明眼亮', gloss: '清楚明白' },
|
|
251
|
+
{ text: '亮晶晶', gloss: '非标准跳过' },
|
|
252
|
+
{ text: '亮节高风', gloss: '高尚节操' },
|
|
253
|
+
{ text: '风调雨顺', gloss: '风雨适宜' },
|
|
254
|
+
{ text: '顺水推舟', gloss: '顺势办事' },
|
|
255
|
+
{ text: '舟中敌国', gloss: '内部有敌人' },
|
|
256
|
+
{ text: '国色天香', gloss: '女子极美' },
|
|
257
|
+
{ text: '香消玉殒', gloss: '美女死亡' },
|
|
258
|
+
{ text: '殒身不恤', gloss: '牺牲生命不顾' },
|
|
259
|
+
{ text: '恤老怜贫', gloss: '体恤老人穷人' },
|
|
260
|
+
{ text: '贫无立锥', gloss: '穷得没地方站' },
|
|
261
|
+
{ text: '锥处囊中', gloss: '才能显露' },
|
|
262
|
+
{ text: '囊萤映雪', gloss: '勤学' },
|
|
263
|
+
{ text: '雪中送炭', gloss: '及时帮助' },
|
|
264
|
+
{ text: '炭火之灾', gloss: '火灾' },
|
|
265
|
+
{ text: '灾梨祸枣', gloss: '刻书灾梨' },
|
|
266
|
+
{ text: '枣核形状', gloss: '非成语跳过' },
|
|
267
|
+
{ text: '枣胜核梨', gloss: '各有所长' },
|
|
268
|
+
{ text: '梨园子弟', gloss: '戏曲演员' },
|
|
269
|
+
{ text: '弟子贤良', gloss: '学生贤良' },
|
|
270
|
+
{ text: '良辰美景', gloss: '美好时光' },
|
|
271
|
+
{ text: '景星庆云', gloss: '吉祥征兆' },
|
|
272
|
+
{ text: '云程发轫', gloss: '事业开端' },
|
|
273
|
+
{ text: '轫发千钧', gloss: '开始发箭' },
|
|
274
|
+
{ text: '钧天广乐', gloss: '天上音乐' },
|
|
275
|
+
{ text: '乐不思蜀', gloss: '乐而忘返' },
|
|
276
|
+
{ text: '蜀犬吠日', gloss: '少见多怪' },
|
|
277
|
+
{ text: '日新月异', gloss: '天天更新' },
|
|
278
|
+
{ text: '异想天开', gloss: '想法离奇' },
|
|
279
|
+
{ text: '开卷有益', gloss: '读书有好处' },
|
|
280
|
+
{ text: '益国利民', gloss: '对国家人民有益' },
|
|
281
|
+
{ text: '民以食为天', gloss: '非四字' },
|
|
282
|
+
{ text: '民脂民膏', gloss: '人民血汗' },
|
|
283
|
+
{ text: '膏腴之地', gloss: '肥沃土地' },
|
|
284
|
+
{ text: '地大物博', gloss: '土地广物产丰' },
|
|
285
|
+
{ text: '博古通今', gloss: '学问渊博' },
|
|
286
|
+
{ text: '今非昔比', gloss: '现在不同于过去' },
|
|
287
|
+
{ text: '比翼双飞', gloss: '夫妻恩爱' },
|
|
288
|
+
{ text: '飞黄腾达', gloss: '官职地位升很快' },
|
|
289
|
+
{ text: '达则兼济', gloss: '得志时帮助天下' },
|
|
290
|
+
{ text: '济世安民', gloss: '帮助世人' },
|
|
291
|
+
{ text: '民安物阜', gloss: '人民安定' },
|
|
292
|
+
{ text: '阜民安物', gloss: '使民富' },
|
|
293
|
+
{ text: '物华天宝', gloss: '物产华美' },
|
|
294
|
+
{ text: '宝刀未老', gloss: '本领还在' },
|
|
295
|
+
{ text: '老骥伏枥', gloss: '年老仍有志' },
|
|
296
|
+
{ text: '枥马长嘶', gloss: '马鸣' },
|
|
297
|
+
{ text: '嘶风掣电', gloss: '跑得飞快' },
|
|
298
|
+
{ text: '电光石火', gloss: '极快' },
|
|
299
|
+
{ text: '火树银花', gloss: '灯火灿烂' },
|
|
300
|
+
{ text: '花好月圆', gloss: '美好圆满' },
|
|
301
|
+
{ text: '圆凿方枘', gloss: '格格不入' },
|
|
302
|
+
{ text: '枘圆凿方', gloss: '格格不入' },
|
|
303
|
+
{ text: '方兴未艾', gloss: '正在发展' },
|
|
304
|
+
{ text: '艾发衰容', gloss: '头发花白' },
|
|
305
|
+
{ text: '容光焕发', gloss: '精神好' },
|
|
306
|
+
{ text: '发愤图强', gloss: '决心奋斗' },
|
|
307
|
+
{ text: '强人所难', gloss: '勉强人做不愿做' },
|
|
308
|
+
{ text: '难能可贵', gloss: '很难得' },
|
|
309
|
+
{ text: '贵不凌贱', gloss: '不以贵凌贱' },
|
|
310
|
+
{ text: '贱买贵卖', gloss: '低价买高价卖' },
|
|
311
|
+
{ text: '卖国求荣', gloss: '出卖国家' },
|
|
312
|
+
{ text: '荣华富贵', gloss: '有钱有势' },
|
|
313
|
+
{ text: '华而不实', gloss: '外表好看不实在' },
|
|
314
|
+
{ text: '实事求是', gloss: '从实际出发' },
|
|
315
|
+
{ text: '是非曲直', gloss: '对错善恶' },
|
|
316
|
+
{ text: '直抒胸臆', gloss: '直接表达心意' },
|
|
317
|
+
{ text: '臆测妄断', gloss: '主观猜测' },
|
|
318
|
+
{ text: '断章取义', gloss: '歪曲原意' },
|
|
319
|
+
{ text: '义愤填膺', gloss: '正义愤怒' },
|
|
320
|
+
{ text: '膺箓受图', gloss: '顺应天命' },
|
|
321
|
+
{ text: '图穷匕见', gloss: '真相显露' },
|
|
322
|
+
{ text: '见多识广', gloss: '见闻广' },
|
|
323
|
+
{ text: '广开言路', gloss: '广泛听取意见' },
|
|
324
|
+
{ text: '路见不平', gloss: '见到不平' },
|
|
325
|
+
{ text: '平步青云', gloss: '轻易升高位' },
|
|
326
|
+
{ text: '云蒸霞蔚', gloss: '景物绚烂' },
|
|
327
|
+
{ text: '蔚然成风', gloss: '形成风气' },
|
|
328
|
+
{ text: '风驰电掣', gloss: '非常快' },
|
|
329
|
+
{ text: '掣电流星', gloss: '飞快' },
|
|
330
|
+
{ text: '星罗棋布', gloss: '分布密集' },
|
|
331
|
+
{ text: '布鼓雷门', gloss: '在行家前卖弄' },
|
|
332
|
+
{ text: '门可罗雀', gloss: '门庭冷落' },
|
|
333
|
+
{ text: '雀屏中选', gloss: '被选为女婿' },
|
|
334
|
+
{ text: '选贤任能', gloss: '选贤人' },
|
|
335
|
+
{ text: '能屈能伸', gloss: '能弯曲能伸展' },
|
|
336
|
+
{ text: '伸张正义', gloss: '扩大正义' },
|
|
337
|
+
{ text: '义薄云天', gloss: '正义极高' },
|
|
338
|
+
{ text: '天经地义', gloss: '理所当然' },
|
|
339
|
+
{ text: '义正词严', gloss: '理由正当' },
|
|
340
|
+
{ text: '严丝合缝', gloss: '非常严密' },
|
|
341
|
+
{ text: '缝缝连连', gloss: '连续缝' },
|
|
342
|
+
{ text: '连绵不断', gloss: '连续不间断' },
|
|
343
|
+
{ text: '断点续传', gloss: '现代词跳过' },
|
|
344
|
+
{ text: '断鹤续凫', gloss: '行事违反自然' },
|
|
345
|
+
{ text: '凫短鹤长', gloss: '各适其宜' },
|
|
346
|
+
{ text: '长亭短亭', gloss: '旅途送别' },
|
|
347
|
+
{ text: '亭亭玉立', gloss: '身材修长' },
|
|
348
|
+
{ text: '立锥之地', gloss: '极小地方' },
|
|
349
|
+
{ text: '地老天荒', gloss: '时间久远' },
|
|
350
|
+
{ text: '荒无人烟', gloss: '荒凉' },
|
|
351
|
+
{ text: '烟波浩渺', gloss: '烟雾笼罩' },
|
|
352
|
+
{ text: '渺若烟云', gloss: '渺茫' },
|
|
353
|
+
{ text: '云谲波诡', gloss: '变化多端' },
|
|
354
|
+
{ text: '诡秘莫测', gloss: '神秘难测' },
|
|
355
|
+
{ text: '莫测高深', gloss: '难以测知' },
|
|
356
|
+
{ text: '高深莫测', gloss: '高深难懂' },
|
|
357
|
+
{ text: '测字占卜', gloss: '非标准' },
|
|
358
|
+
{ text: '测天量地', gloss: '测量天地' },
|
|
359
|
+
{ text: '地动山摇', gloss: '震动剧烈' },
|
|
360
|
+
{ text: '摇旗呐喊', gloss: '助威' },
|
|
361
|
+
{ text: '喊冤叫屈', gloss: '叫屈' },
|
|
362
|
+
{ text: '屈打成招', gloss: '屈打成招' },
|
|
363
|
+
{ text: '招兵买马', gloss: '召集人马' },
|
|
364
|
+
{ text: '马首是瞻', gloss: '跟随行动' },
|
|
365
|
+
{ text: '瞻前顾后', gloss: '顾虑太多' },
|
|
366
|
+
{ text: '后发制人', gloss: '后出手制服' },
|
|
367
|
+
{ text: '人定胜天', gloss: '人胜天' },
|
|
368
|
+
{ text: '天伦之乐', gloss: '家庭乐趣' },
|
|
369
|
+
{ text: '乐善好施', gloss: '喜欢做善事' },
|
|
370
|
+
{ text: '施恩不望', gloss: '施恩不图报' },
|
|
371
|
+
{ text: '望眼欲穿', gloss: '盼望急切' },
|
|
372
|
+
{ text: '穿针引线', gloss: '从中联系' },
|
|
373
|
+
{ text: '线断风筝', gloss: '失去联系' },
|
|
374
|
+
{ text: '筝鸣鹤唳', gloss: '清越声音' },
|
|
375
|
+
{ text: '唳天犬吠', gloss: '犬吠' },
|
|
376
|
+
{ text: '吠影吠声', gloss: '盲目跟从' },
|
|
377
|
+
{ text: '声嘶力竭', gloss: '声音嘶哑' },
|
|
378
|
+
{ text: '竭泽而渔', gloss: '只顾眼前' },
|
|
379
|
+
{ text: '渔人之利', gloss: '第三者得利' },
|
|
380
|
+
{ text: '利令智昏', gloss: '贪利失去理智' },
|
|
381
|
+
{ text: '昏天黑地', gloss: '黑暗混乱' },
|
|
382
|
+
{ text: '地覆天翻', gloss: '变化巨大' },
|
|
383
|
+
{ text: '翻江倒海', gloss: '力量大' },
|
|
384
|
+
{ text: '海枯石烂', gloss: '历时长久' },
|
|
385
|
+
{ text: '烂醉如泥', gloss: '大醉' },
|
|
386
|
+
{ text: '泥牛入海', gloss: '一去无回' },
|
|
387
|
+
{ text: '海屋添筹', gloss: '长寿' },
|
|
388
|
+
{ text: '筹谋规划', gloss: '计划' },
|
|
389
|
+
{ text: '划一不二', gloss: '一致' },
|
|
390
|
+
{ text: '二龙戏珠', gloss: '两条龙戏珠' },
|
|
391
|
+
{ text: '珠联璧合', gloss: '完美结合' },
|
|
392
|
+
{ text: '合二为一', gloss: '合成一体' },
|
|
393
|
+
{ text: '一清二白', gloss: '非常清楚' },
|
|
394
|
+
{ text: '白手起家', gloss: '空手创业' },
|
|
395
|
+
{ text: '家喻户晓', gloss: '人人都知道' },
|
|
396
|
+
{ text: '晓风残月', gloss: '清晨凉风' },
|
|
397
|
+
{ text: '月下花前', gloss: '恋爱场景' },
|
|
398
|
+
{ text: '前因后果', gloss: '原因结果' },
|
|
399
|
+
{ text: '果不其然', gloss: '果然如此' },
|
|
400
|
+
{ text: '然诺千金', gloss: '许诺重' },
|
|
401
|
+
{ text: '金枝玉叶', gloss: '皇族子孙' },
|
|
402
|
+
{ text: '叶落归根', gloss: '回到故乡' },
|
|
403
|
+
{ text: '根生叶长', gloss: '根本重要' },
|
|
404
|
+
{ text: '长命富贵', gloss: '长寿富贵' },
|
|
405
|
+
{ text: '贵而不骄', gloss: '显贵不骄' },
|
|
406
|
+
{ text: '骄兵必败', gloss: '骄傲必败' },
|
|
407
|
+
{ text: '败军之将', gloss: '打败的将军' },
|
|
408
|
+
{ text: '将功赎罪', gloss: '立功抵罪' },
|
|
409
|
+
{ text: '罪有应得', gloss: '罪恶应得惩罚' },
|
|
410
|
+
{ text: '得心应手', gloss: '技艺纯熟' },
|
|
411
|
+
{ text: '手到擒来', gloss: '轻易取得' },
|
|
412
|
+
{ text: '来日方长', gloss: '将来日子还长' },
|
|
413
|
+
{ text: '长话短说', gloss: '简要说' },
|
|
414
|
+
{ text: '说三道四', gloss: '乱加评论' },
|
|
415
|
+
{ text: '四面楚歌', gloss: '四面受敌' },
|
|
416
|
+
{ text: '歌功颂德', gloss: '颂扬功绩' },
|
|
417
|
+
{ text: '德高望重', gloss: '品德声望高' },
|
|
418
|
+
{ text: '重峦叠嶂', gloss: '山连绵' },
|
|
419
|
+
{ text: '嶂叠重峦', gloss: '山重叠' },
|
|
420
|
+
{ text: '峦峰叠翠', gloss: '山峰叠翠' },
|
|
421
|
+
];
|
|
422
|
+
//# sourceMappingURL=idioms.js.map
|