-
Notifications
You must be signed in to change notification settings - Fork 18
/
1.1.5.js
87 lines (83 loc) · 3.32 KB
/
1.1.5.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// LICENSE : MIT
"use strict";
/*
1.1.5.図表のキャプション
文章の内容に応じて、敬体、常体、体言止めを使います。
いずれの場合も、複数の文体をできるだけ混在させないことが重要です。
通常、文末に句点(。)を付けませんが、複数の文章になる場合は句点を使用します。
キャプション間で文体が混ざっていないことを確認する。
*/
import { analyzeDesumasu, analyzeDearu } from "analyze-desumasu-dearu";
module.exports = function (context) {
let { Syntax, RuleError, report, getSource } = context;
let desumasuList = [];
let dearuList = [];
function resetState() {
desumasuList = [];
dearuList = [];
}
const imagePaddingLet = 2; // ![ の分paddingを付ける
function reportResult(list, { desumasu, dearu }) {
list.forEach(({ node, matches }) => {
matches.forEach((match) => {
let message;
if (desumasu) {
message = `図表のキャプションを敬体(ですます調)に統一して下さい。\n図表のキャプション内で敬体、常体を混在させないことが重要です。\n"${match.value}"が常体(である調)です。`;
} else if (dearu) {
message = `図表のキャプションを常体(である調)に統一して下さい。\n図表のキャプション内で敬体、常体を混在させないことが重要です。\n"${match.value}"が敬体(ですます調)です。`;
}
report(
node,
new RuleError(message, {
line: match.lineNumber - 1,
column: match.columnIndex + imagePaddingLet
})
);
});
});
}
return {
[Syntax.Document]: resetState,
[Syntax.Image](node) {
let text = node.alt;
// alt がない場合は無視する
if (text === undefined || text === null) {
return;
}
let retDesumasu = analyzeDesumasu(text);
if (retDesumasu.length > 0) {
desumasuList.push({
node: node,
matches: retDesumasu
});
}
let retDearu = analyzeDearu(text);
if (retDearu.length > 0) {
dearuList.push({
node: node,
matches: retDearu
});
}
},
[`${Syntax.Document}:exit`]() {
let desumasuCount = desumasuList.reduce((count, { matches }) => count + matches.length, 0);
let dearuCount = dearuList.reduce((count, { matches }) => count + matches.length, 0);
if (desumasuCount === 0 || dearuCount === 0) {
return;
}
if (desumasuCount > dearuCount) {
reportResult(dearuList, {
desumasu: true
});
} else if (desumasuCount < dearuCount) {
reportResult(desumasuList, {
dearu: true
});
} else {
reportResult(dearuList, {
desumasu: true
});
}
}
};
};