@doujinreviewers/textlint-rule-for-creation 0.0.1 → 0.0.2

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.

Potentially problematic release.


This version of @doujinreviewers/textlint-rule-for-creation might be problematic. Click here for more details.

package/README.md CHANGED
@@ -13,13 +13,13 @@
13
13
 
14
14
  例えば、文章の形式、スタイル、文体、文の冗長さ、二重否定、二重助詞、表記ゆれ、送り仮名のゆれ、記号や三点リーダーの使い方など
15
15
 
16
- - ら抜き言葉
16
+ - ら抜き言葉、い抜き言葉
17
17
 
18
18
  これで喋るキャラがいるかもしれないし、作品の雰囲気に必要かもしれない
19
19
 
20
20
  ## インストール
21
21
 
22
- npm install textlint-rule-for-creation
22
+ npm install @doujinreviewers/textlint-rule-for-creation
23
23
 
24
24
  ## 使い方
25
25
 
@@ -28,7 +28,7 @@
28
28
  ```json
29
29
  {
30
30
  "rules": {
31
- "for-creation": true
31
+ "@doujinreviewers/textlint-rule-for-creation": true
32
32
  }
33
33
  }
34
34
  ```
@@ -36,7 +36,7 @@
36
36
  コマンドラインで使う
37
37
 
38
38
  ```
39
- textlint --rule for-creation README.md
39
+ textlint --rule @doujinreviewers/textlint-rule-for-creation README.md
40
40
  ```
41
41
 
42
42
  ### Build
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ module.exports = {
4
+ "jidousi_tadousi": ["開け", "あけ"]
5
+ };
6
+ //# sourceMappingURL=arrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/arrow.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB;AACf,qBAAmB,CACjB,IADiB,EAEjB,IAFiB;AADJ,CAAjB","sourcesContent":["module.exports = {\n \"jidousi_tadousi\": [\n \"開け\",\n \"あけ\",\n ]\n};"],"file":"arrow.js"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }];
30
+ //# sourceMappingURL=dictAA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/dictAA.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACI,aAAW,+BADf;AAEI,cAAY,KAFhB;AAGI,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHd,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n];"],"file":"dictAA.js"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }];
30
+ //# sourceMappingURL=dict_miss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/dict_miss.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,+BADb;AAEE,cAAY,KAFd;AAGE,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n];"],"file":"dict_miss.js"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
5
+ "expected": "を適用",
6
+ "tokens": [{
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ }, {
18
+ "surface_form": "適応",
19
+ "pos": "名詞",
20
+ "pos_detail_1": "サ変接続",
21
+ "pos_detail_2": "*",
22
+ "pos_detail_3": "*",
23
+ "conjugated_type": "*",
24
+ "conjugated_form": "*",
25
+ "basic_form": "適応",
26
+ "reading": "テキオウ",
27
+ "pronunciation": "テキオー"
28
+ }]
29
+ }];
30
+ //# sourceMappingURL=miss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/miss.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,+BADb;AAEE,cAAY,KAFd;AAGE,YAAU,CACR;AACE,oBAAgB,GADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,KAHlB;AAIE,oBAAgB,IAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,GARhB;AASE,eAAW,GATb;AAUE,qBAAiB;AAVnB,GADQ,EAaR;AACE,oBAAgB,IADlB;AAEE,WAAO,IAFT;AAGE,oBAAgB,MAHlB;AAIE,oBAAgB,GAJlB;AAKE,oBAAgB,GALlB;AAME,uBAAmB,GANrB;AAOE,uBAAmB,GAPrB;AAQE,kBAAc,IARhB;AASE,eAAW,MATb;AAUE,qBAAiB;AAVnB,GAbQ;AAHZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"\\\"適用\\\"の誤用である可能性があります。適応 => 適用\",\n \"expected\": \"を適用\",\n \"tokens\": [\n {\n \"surface_form\": \"を\",\n \"pos\": \"助詞\",\n \"pos_detail_1\": \"格助詞\",\n \"pos_detail_2\": \"一般\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"を\",\n \"reading\": \"ヲ\",\n \"pronunciation\": \"ヲ\"\n },\n {\n \"surface_form\": \"適応\",\n \"pos\": \"名詞\",\n \"pos_detail_1\": \"サ変接続\",\n \"pos_detail_2\": \"*\",\n \"pos_detail_3\": \"*\",\n \"conjugated_type\": \"*\",\n \"conjugated_form\": \"*\",\n \"basic_form\": \"適応\",\n \"reading\": \"テキオウ\",\n \"pronunciation\": \"テキオー\"\n }\n ]\n },\n];"],"file":"miss.js"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ module.exports = [{
4
+ "message": "れ足す言葉の可能性があります",
5
+ "tokens": [{
6
+ "pos": "動詞",
7
+ "conjugated_type": "一段"
8
+ }, {
9
+ "pos": "動詞",
10
+ "pos_detail_1": "接尾",
11
+ "basic_form": "れる"
12
+ }]
13
+ }];
14
+ //# sourceMappingURL=retasu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dict/retasu.js"],"names":["module","exports"],"mappings":";;AAAAA,MAAM,CAACC,OAAP,GAAiB,CACf;AACE,aAAW,gBADb;AAEE,YAAU,CACR;AACE,WAAO,IADT;AAEE,uBAAmB;AAFrB,GADQ,EAKR;AACE,WAAO,IADT;AAEE,oBAAgB,IAFlB;AAGE,kBAAc;AAHhB,GALQ;AAFZ,CADe,CAAjB","sourcesContent":["module.exports = [\n {\n \"message\": \"れ足す言葉の可能性があります\",\n \"tokens\": [\n {\n \"pos\": \"動詞\",\n \"conjugated_type\": \"一段\",\n },\n {\n \"pos\": \"動詞\",\n \"pos_detail_1\": \"接尾\",\n \"basic_form\": \"れる\",\n }\n ]\n },\n];"],"file":"retasu.js"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
9
+
10
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
11
+
12
+ var Romanizer = require('js-hira-kata-romanize');
13
+
14
+ var romajiConv = require('@koozaki/romaji-conv');
15
+
16
+ var arrow = require('./dict/arrow');
17
+
18
+ class EnhancedEngine {
19
+ constructor() {
20
+ this.romanizer = new Romanizer({
21
+ mapping: Romanizer.MAPPING_KUNREI,
22
+ chouon: Romanizer.CHOUON_CIRCUMFLEX,
23
+ upper: Romanizer.UPPER_NONE
24
+ });
25
+ }
26
+
27
+ romanize(hiraganaOrKatakana) {
28
+ return this.romanizer.romanize(hiraganaOrKatakana);
29
+ }
30
+
31
+ checkRetasu(tokenizer, text) {
32
+ return _asyncToGenerator(function* () {
33
+ if (/れ$/.test(text)) {
34
+ text += "る";
35
+ }
36
+
37
+ var tokens = yield tokenizer(text);
38
+ var meirei = yield tokenizer(tokens[0].surface_form + "。");
39
+
40
+ if (meirei[0].conjugated_form == "命令e" || /五段/.test(meirei[0].conjugated_type)) {
41
+ // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉
42
+ if (!arrow.jidousi_tadousi.includes(meirei[0].surface_form)) {
43
+ // 許可リストにもない
44
+ return true;
45
+ }
46
+ }
47
+
48
+ return false;
49
+ })();
50
+ }
51
+
52
+ }
53
+
54
+ var _default = new EnhancedEngine();
55
+
56
+ exports.default = _default;
57
+ //# sourceMappingURL=enhanced-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/enhanced-engine.js"],"names":["Romanizer","require","romajiConv","arrow","EnhancedEngine","constructor","romanizer","mapping","MAPPING_KUNREI","chouon","CHOUON_CIRCUMFLEX","upper","UPPER_NONE","romanize","hiraganaOrKatakana","checkRetasu","tokenizer","text","test","tokens","meirei","surface_form","conjugated_form","conjugated_type","jidousi_tadousi","includes"],"mappings":";;;;;;;;;;;AAAA,IAAMA,SAAS,GAAGC,OAAO,CAAC,uBAAD,CAAzB;;AACA,IAAMC,UAAU,GAAGD,OAAO,CAAC,sBAAD,CAA1B;;AACA,IAAME,KAAK,GAAGF,OAAO,CAAC,cAAD,CAArB;;AAEA,MAAMG,cAAN,CAAqB;AAEnBC,EAAAA,WAAW,GAAG;AACZ,SAAKC,SAAL,GAAiB,IAAIN,SAAJ,CAAc;AAC7BO,MAAAA,OAAO,EAAEP,SAAS,CAACQ,cADU;AAE7BC,MAAAA,MAAM,EAAET,SAAS,CAACU,iBAFW;AAG7BC,MAAAA,KAAK,EAAEX,SAAS,CAACY;AAHY,KAAd,CAAjB;AAKD;;AAEDC,EAAAA,QAAQ,CAACC,kBAAD,EAAoB;AAC1B,WAAO,KAAKR,SAAL,CAAeO,QAAf,CAAwBC,kBAAxB,CAAP;AACD;;AAEKC,EAAAA,WAAW,CAACC,SAAD,EAAYC,IAAZ,EAAiB;AAAA;AAChC,UAAG,KAAKC,IAAL,CAAUD,IAAV,CAAH,EAAmB;AACjBA,QAAAA,IAAI,IAAI,GAAR;AACD;;AACD,UAAIE,MAAM,SAASH,SAAS,CAACC,IAAD,CAA5B;AACA,UAAIG,MAAM,SAASJ,SAAS,CAACG,MAAM,CAAC,CAAD,CAAN,CAAUE,YAAV,GAAyB,GAA1B,CAA5B;;AACA,UAAGD,MAAM,CAAC,CAAD,CAAN,CAAUE,eAAV,IAA6B,KAA7B,IAAsC,KAAKJ,IAAL,CAAUE,MAAM,CAAC,CAAD,CAAN,CAAUG,eAApB,CAAzC,EAA8E;AAC5E;AACA,YAAG,CAACpB,KAAK,CAACqB,eAAN,CAAsBC,QAAtB,CAA+BL,MAAM,CAAC,CAAD,CAAN,CAAUC,YAAzC,CAAJ,EAA2D;AACzD;AACA,iBAAO,IAAP;AACD;AACF;;AACD,aAAO,KAAP;AAbgC;AAcjC;;AA5BkB;;eAgCN,IAAIjB,cAAJ,E","sourcesContent":["const Romanizer = require('js-hira-kata-romanize');\nconst romajiConv = require('@koozaki/romaji-conv');\nconst arrow = require('./dict/arrow');\n\nclass EnhancedEngine {\n\n constructor() {\n this.romanizer = new Romanizer({\n mapping: Romanizer.MAPPING_KUNREI,\n chouon: Romanizer.CHOUON_CIRCUMFLEX,\n upper: Romanizer.UPPER_NONE\n });\n }\n\n romanize(hiraganaOrKatakana){\n return this.romanizer.romanize(hiraganaOrKatakana);\n }\n\n async checkRetasu(tokenizer, text){\n if(/れ$/.test(text)){\n text += \"る\";\n }\n let tokens = await tokenizer(text);\n let meirei = await tokenizer(tokens[0].surface_form + \"。\");\n if(meirei[0].conjugated_form == \"命令e\" || /五段/.test(meirei[0].conjugated_type)){\n // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉\n if(!arrow.jidousi_tadousi.includes(meirei[0].surface_form)){\n // 許可リストにもない\n return true;\n }\n }\n return false;\n }\n\n}\n\nexport default new EnhancedEngine();"],"file":"enhanced-engine.js"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var Romanizer = require('js-hira-kata-romanize');
9
+
10
+ class ModifiedEngine {
11
+ constructor() {
12
+ this.romanizer = new Romanizer({
13
+ chouon: Romanizer.CHOUON_CIRCUMFLEX,
14
+ upper: Romanizer.UPPER_NONE
15
+ });
16
+ }
17
+
18
+ romanize(hiraganaOrKatakana) {
19
+ return this.romanizer.romanize(hiraganaOrKatakana);
20
+ }
21
+
22
+ }
23
+
24
+ var _default = new ModifiedEngine();
25
+
26
+ exports.default = _default;
27
+ //# sourceMappingURL=modified-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modified-engine.js"],"names":["Romanizer","require","ModifiedEngine","constructor","romanizer","chouon","CHOUON_CIRCUMFLEX","upper","UPPER_NONE","romanize","hiraganaOrKatakana"],"mappings":";;;;;;;AAAA,IAAMA,SAAS,GAAGC,OAAO,CAAC,uBAAD,CAAzB;;AAEA,MAAMC,cAAN,CAAqB;AAEnBC,EAAAA,WAAW,GAAG;AACZ,SAAKC,SAAL,GAAiB,IAAIJ,SAAJ,CAAc;AAC7BK,MAAAA,MAAM,EAAEL,SAAS,CAACM,iBADW;AAE7BC,MAAAA,KAAK,EAAEP,SAAS,CAACQ;AAFY,KAAd,CAAjB;AAID;;AAEDC,EAAAA,QAAQ,CAACC,kBAAD,EAAoB;AAC1B,WAAO,KAAKN,SAAL,CAAeK,QAAf,CAAwBC,kBAAxB,CAAP;AACD;;AAXkB;;eAcN,IAAIR,cAAJ,E","sourcesContent":["const Romanizer = require('js-hira-kata-romanize');\n\nclass ModifiedEngine {\n\n constructor() {\n this.romanizer = new Romanizer({\n chouon: Romanizer.CHOUON_CIRCUMFLEX,\n upper: Romanizer.UPPER_NONE\n });\n }\n\n romanize(hiraganaOrKatakana){\n return this.romanizer.romanize(hiraganaOrKatakana);\n }\n}\n\nexport default new ModifiedEngine();"],"file":"modified-engine.js"}
@@ -9,11 +9,19 @@ var _morphemeMatchTextlint = require("morpheme-match-textlint");
9
9
 
10
10
  var _kuromojin = require("kuromojin");
11
11
 
12
+ var _enhancedEngine = _interopRequireDefault(require("./enhanced-engine"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
17
+
18
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
19
+
12
20
  var loadDictionaries = () => {
13
21
  // unavoidable
14
- var dict1 = require('./dict/dict');
22
+ var dict1 = require('./dict/retasu');
15
23
 
16
- var dict2 = require('./dict/dict2');
24
+ var dict2 = require('./dict/miss');
17
25
 
18
26
  return dict1.concat(dict2);
19
27
  };
@@ -30,23 +38,40 @@ var reporter = context => {
30
38
  tokenize: _kuromojin.tokenize,
31
39
  dictionaries: loadDictionaries()
32
40
  });
41
+ var engine = _enhancedEngine.default;
33
42
  return {
34
43
  [Syntax.Str](node) {
35
- var text = getSource(node);
36
- return matchAll(text).then(results => {
37
- results.forEach(result => {
38
- if (result.expected) {
39
- report(node, new RuleError(result.message, {
40
- index: result.index,
41
- fix: fixer.replaceTextRange(result.range, result.expected)
42
- }));
43
- } else {
44
- report(node, new RuleError(result.message, {
45
- index: result.index
46
- }));
44
+ return new Promise( /*#__PURE__*/function () {
45
+ var _ref = _asyncToGenerator(function* (resolve, reject) {
46
+ var text = getSource(node);
47
+ var results = yield matchAll(text);
48
+
49
+ for (var result of results) {
50
+ if (result.message == "れ足す言葉の可能性があります") {
51
+ if (!(yield engine.checkRetasu(_kuromojin.tokenize, text.slice(result.range[0], result.range[1])))) {
52
+ continue;
53
+ }
54
+ }
55
+
56
+ if (result.expected) {
57
+ report(node, new RuleError(result.message, {
58
+ index: result.index,
59
+ fix: fixer.replaceTextRange(result.range, result.expected)
60
+ }));
61
+ } else {
62
+ report(node, new RuleError(result.message, {
63
+ index: result.index
64
+ }));
65
+ }
47
66
  }
67
+
68
+ resolve();
48
69
  });
49
- });
70
+
71
+ return function (_x, _x2) {
72
+ return _ref.apply(this, arguments);
73
+ };
74
+ }());
50
75
  }
51
76
 
52
77
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/textlint-rule-for-creation.js"],"names":["loadDictionaries","dict1","require","dict2","concat","reporter","context","Syntax","RuleError","fixer","report","getSource","matchAll","tokenize","dictionaries","Str","node","text","then","results","forEach","result","expected","message","index","fix","replaceTextRange","range","linter"],"mappings":";;;;;;;AAAA;;AACA;;AAEA,IAAMA,gBAAgB,GAAG,MAAM;AAC3B;AACA,MAAIC,KAAK,GAAGC,OAAO,CAAC,aAAD,CAAnB;;AACA,MAAIC,KAAK,GAAGD,OAAO,CAAC,cAAD,CAAnB;;AACA,SAAOD,KAAK,CAACG,MAAN,CAAaD,KAAb,CAAP;AACH,CALD;;AAOA,IAAME,QAAQ,GAAIC,OAAD,IAAa;AAC1B,MAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,SAAV;AAAqBC,IAAAA,KAArB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAkDL,OAAxD;AACA,MAAMM,QAAQ,GAAG,kDAAsB;AACnCC,IAAAA,QAAQ,EAAEA,mBADyB;AAEnCC,IAAAA,YAAY,EAAEd,gBAAgB;AAFK,GAAtB,CAAjB;AAIA,SAAO;AACH,KAACO,MAAM,CAACQ,GAAR,EAAaC,IAAb,EAAmB;AACf,UAAMC,IAAI,GAAGN,SAAS,CAACK,IAAD,CAAtB;AACA,aAAOJ,QAAQ,CAACK,IAAD,CAAR,CAAeC,IAAf,CAAoBC,OAAO,IAAI;AAClCA,QAAAA,OAAO,CAACC,OAAR,CAAgBC,MAAM,IAAI;AACtB,cAAIA,MAAM,CAACC,QAAX,EAAqB;AACjBZ,YAAAA,MAAM,CAACM,IAAD,EAAO,IAAIR,SAAJ,CAAca,MAAM,CAACE,OAArB,EAA8B;AACvCC,cAAAA,KAAK,EAAEH,MAAM,CAACG,KADyB;AAEvCC,cAAAA,GAAG,EAAEhB,KAAK,CAACiB,gBAAN,CAAuBL,MAAM,CAACM,KAA9B,EAAqCN,MAAM,CAACC,QAA5C;AAFkC,aAA9B,CAAP,CAAN;AAIH,WALD,MAKO;AACHZ,YAAAA,MAAM,CAACM,IAAD,EAAO,IAAIR,SAAJ,CAAca,MAAM,CAACE,OAArB,EAA8B;AACvCC,cAAAA,KAAK,EAAEH,MAAM,CAACG;AADyB,aAA9B,CAAP,CAAN;AAGH;AACJ,SAXD;AAYH,OAbM,CAAP;AAcH;;AAjBE,GAAP;AAmBH,CAzBD;;eA2Be;AACXI,EAAAA,MAAM,EAAEvB,QADG;AAEXI,EAAAA,KAAK,EAAEJ;AAFI,C","sourcesContent":["import { createTextlintMatcher } from \"morpheme-match-textlint\";\nimport { tokenize } from \"kuromojin\";\n\nconst loadDictionaries = () => {\n // unavoidable\n let dict1 = require('./dict/dict');\n let dict2 = require('./dict/dict2');\n return dict1.concat(dict2)\n}\n\nconst reporter = (context) => {\n const { Syntax, RuleError, fixer, report, getSource } = context;\n const matchAll = createTextlintMatcher({\n tokenize: tokenize,\n dictionaries: loadDictionaries()\n });\n return {\n [Syntax.Str](node) {\n const text = getSource(node);\n return matchAll(text).then(results => {\n results.forEach(result => {\n if (result.expected) {\n report(node, new RuleError(result.message, {\n index: result.index,\n fix: fixer.replaceTextRange(result.range, result.expected)\n }));\n } else {\n report(node, new RuleError(result.message, {\n index: result.index\n }));\n }\n });\n });\n }\n };\n};\n\nexport default {\n linter: reporter,\n fixer: reporter\n};"],"file":"textlint-rule-for-creation.js"}
1
+ {"version":3,"sources":["../src/textlint-rule-for-creation.js"],"names":["loadDictionaries","dict1","require","dict2","concat","reporter","context","Syntax","RuleError","fixer","report","getSource","matchAll","tokenize","dictionaries","engine","EnhancedEngine","Str","node","Promise","resolve","reject","text","results","result","message","checkRetasu","slice","range","expected","index","fix","replaceTextRange","linter"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG,MAAM;AAC7B;AACA,MAAIC,KAAK,GAAGC,OAAO,CAAC,eAAD,CAAnB;;AACA,MAAIC,KAAK,GAAGD,OAAO,CAAC,aAAD,CAAnB;;AACA,SAAOD,KAAK,CAACG,MAAN,CAAaD,KAAb,CAAP;AACD,CALD;;AAOA,IAAME,QAAQ,GAAIC,OAAD,IAAa;AAC5B,MAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,SAAV;AAAqBC,IAAAA,KAArB;AAA4BC,IAAAA,MAA5B;AAAoCC,IAAAA;AAApC,MAAkDL,OAAxD;AACA,MAAMM,QAAQ,GAAG,kDAAsB;AACrCC,IAAAA,QAAQ,EAAEA,mBAD2B;AAErCC,IAAAA,YAAY,EAAEd,gBAAgB;AAFO,GAAtB,CAAjB;AAIA,MAAMe,MAAM,GAAGC,uBAAf;AACA,SAAO;AACL,KAACT,MAAM,CAACU,GAAR,EAAaC,IAAb,EAAmB;AACjB,aAAO,IAAIC,OAAJ;AAAA,qCAAY,WAAOC,OAAP,EAAgBC,MAAhB,EAA2B;AAC5C,cAAMC,IAAI,GAAGX,SAAS,CAACO,IAAD,CAAtB;AACA,cAAIK,OAAO,SAASX,QAAQ,CAACU,IAAD,CAA5B;;AACA,eAAK,IAAME,MAAX,IAAqBD,OAArB,EAA8B;AAC5B,gBAAGC,MAAM,CAACC,OAAP,IAAkB,gBAArB,EAAsC;AACpC,kBAAG,QAAQV,MAAM,CAACW,WAAP,CAAmBb,mBAAnB,EAA6BS,IAAI,CAACK,KAAL,CAAWH,MAAM,CAACI,KAAP,CAAa,CAAb,CAAX,EAA2BJ,MAAM,CAACI,KAAP,CAAa,CAAb,CAA3B,CAA7B,CAAR,CAAH,EAAsF;AACpF;AACD;AACF;;AACD,gBAAIJ,MAAM,CAACK,QAAX,EAAqB;AACnBnB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCK,gBAAAA,KAAK,EAAEN,MAAM,CAACM,KAD2B;AAEzCC,gBAAAA,GAAG,EAAEtB,KAAK,CAACuB,gBAAN,CAAuBR,MAAM,CAACI,KAA9B,EAAqCJ,MAAM,CAACK,QAA5C;AAFoC,eAA9B,CAAP,CAAN;AAID,aALD,MAKO;AACLnB,cAAAA,MAAM,CAACQ,IAAD,EAAO,IAAIV,SAAJ,CAAcgB,MAAM,CAACC,OAArB,EAA8B;AACzCK,gBAAAA,KAAK,EAAEN,MAAM,CAACM;AAD2B,eAA9B,CAAP,CAAN;AAGD;AACF;;AACDV,UAAAA,OAAO;AACR,SArBM;;AAAA;AAAA;AAAA;AAAA,UAAP;AAsBD;;AAxBI,GAAP;AA0BD,CAjCD;;eAmCe;AACba,EAAAA,MAAM,EAAE5B,QADK;AAEbI,EAAAA,KAAK,EAAEJ;AAFM,C","sourcesContent":["import { createTextlintMatcher } from \"morpheme-match-textlint\";\nimport { tokenize } from \"kuromojin\";\nimport EnhancedEngine from \"./enhanced-engine\";\n\nconst loadDictionaries = () => {\n // unavoidable\n let dict1 = require('./dict/retasu');\n let dict2 = require('./dict/miss');\n return dict1.concat(dict2)\n}\n\nconst reporter = (context) => {\n const { Syntax, RuleError, fixer, report, getSource } = context;\n const matchAll = createTextlintMatcher({\n tokenize: tokenize,\n dictionaries: loadDictionaries()\n });\n const engine = EnhancedEngine\n return {\n [Syntax.Str](node) {\n return new Promise(async (resolve, reject) => {\n const text = getSource(node);\n let results = await matchAll(text);\n for (const result of results) {\n if(result.message == \"れ足す言葉の可能性があります\"){\n if(!(await engine.checkRetasu(tokenize, text.slice(result.range[0],result.range[1])))){\n continue;\n }\n }\n if (result.expected) {\n report(node, new RuleError(result.message, {\n index: result.index,\n fix: fixer.replaceTextRange(result.range, result.expected)\n }));\n } else {\n report(node, new RuleError(result.message, {\n index: result.index\n }));\n }\n }\n resolve();\n });\n }\n };\n};\n\nexport default {\n linter: reporter,\n fixer: reporter\n};"],"file":"textlint-rule-for-creation.js"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.1",
2
+ "version": "0.0.2",
3
3
  "keywords": [
4
4
  "textlintrule"
5
5
  ],
@@ -33,6 +33,8 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
+ "@koozaki/romaji-conv": "^2.0.16",
37
+ "js-hira-kata-romanize": "^1.0.5",
36
38
  "kuromojin": "^3.0.0",
37
39
  "morpheme-match-textlint": "^2.0.6"
38
40
  }
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ "jidousi_tadousi": [
3
+ "開け",
4
+ "あけ",
5
+ ]
6
+ };
@@ -0,0 +1,32 @@
1
+ module.exports = [
2
+ {
3
+ "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
4
+ "expected": "を適用",
5
+ "tokens": [
6
+ {
7
+ "surface_form": "を",
8
+ "pos": "助詞",
9
+ "pos_detail_1": "格助詞",
10
+ "pos_detail_2": "一般",
11
+ "pos_detail_3": "*",
12
+ "conjugated_type": "*",
13
+ "conjugated_form": "*",
14
+ "basic_form": "を",
15
+ "reading": "ヲ",
16
+ "pronunciation": "ヲ"
17
+ },
18
+ {
19
+ "surface_form": "適応",
20
+ "pos": "名詞",
21
+ "pos_detail_1": "サ変接続",
22
+ "pos_detail_2": "*",
23
+ "pos_detail_3": "*",
24
+ "conjugated_type": "*",
25
+ "conjugated_form": "*",
26
+ "basic_form": "適応",
27
+ "reading": "テキオウ",
28
+ "pronunciation": "テキオー"
29
+ }
30
+ ]
31
+ },
32
+ ];
@@ -0,0 +1,16 @@
1
+ module.exports = [
2
+ {
3
+ "message": "れ足す言葉の可能性があります",
4
+ "tokens": [
5
+ {
6
+ "pos": "動詞",
7
+ "conjugated_type": "一段",
8
+ },
9
+ {
10
+ "pos": "動詞",
11
+ "pos_detail_1": "接尾",
12
+ "basic_form": "れる",
13
+ }
14
+ ]
15
+ },
16
+ ];
@@ -0,0 +1,37 @@
1
+ const Romanizer = require('js-hira-kata-romanize');
2
+ const romajiConv = require('@koozaki/romaji-conv');
3
+ const arrow = require('./dict/arrow');
4
+
5
+ class EnhancedEngine {
6
+
7
+ constructor() {
8
+ this.romanizer = new Romanizer({
9
+ mapping: Romanizer.MAPPING_KUNREI,
10
+ chouon: Romanizer.CHOUON_CIRCUMFLEX,
11
+ upper: Romanizer.UPPER_NONE
12
+ });
13
+ }
14
+
15
+ romanize(hiraganaOrKatakana){
16
+ return this.romanizer.romanize(hiraganaOrKatakana);
17
+ }
18
+
19
+ async checkRetasu(tokenizer, text){
20
+ if(/れ$/.test(text)){
21
+ text += "る";
22
+ }
23
+ let tokens = await tokenizer(text);
24
+ let meirei = await tokenizer(tokens[0].surface_form + "。");
25
+ if(meirei[0].conjugated_form == "命令e" || /五段/.test(meirei[0].conjugated_type)){
26
+ // 「れる」を抜いても命令形で意味が通じるか、最初の文字が五段活用動詞になると多分れ足す言葉
27
+ if(!arrow.jidousi_tadousi.includes(meirei[0].surface_form)){
28
+ // 許可リストにもない
29
+ return true;
30
+ }
31
+ }
32
+ return false;
33
+ }
34
+
35
+ }
36
+
37
+ export default new EnhancedEngine();
@@ -1,41 +1,50 @@
1
1
  import { createTextlintMatcher } from "morpheme-match-textlint";
2
2
  import { tokenize } from "kuromojin";
3
+ import EnhancedEngine from "./enhanced-engine";
3
4
 
4
5
  const loadDictionaries = () => {
5
- // unavoidable
6
- let dict1 = require('./dict/dict');
7
- let dict2 = require('./dict/dict2');
8
- return dict1.concat(dict2)
6
+ // unavoidable
7
+ let dict1 = require('./dict/retasu');
8
+ let dict2 = require('./dict/miss');
9
+ return dict1.concat(dict2)
9
10
  }
10
11
 
11
12
  const reporter = (context) => {
12
- const { Syntax, RuleError, fixer, report, getSource } = context;
13
- const matchAll = createTextlintMatcher({
14
- tokenize: tokenize,
15
- dictionaries: loadDictionaries()
16
- });
17
- return {
18
- [Syntax.Str](node) {
19
- const text = getSource(node);
20
- return matchAll(text).then(results => {
21
- results.forEach(result => {
22
- if (result.expected) {
23
- report(node, new RuleError(result.message, {
24
- index: result.index,
25
- fix: fixer.replaceTextRange(result.range, result.expected)
26
- }));
27
- } else {
28
- report(node, new RuleError(result.message, {
29
- index: result.index
30
- }));
31
- }
32
- });
33
- });
13
+ const { Syntax, RuleError, fixer, report, getSource } = context;
14
+ const matchAll = createTextlintMatcher({
15
+ tokenize: tokenize,
16
+ dictionaries: loadDictionaries()
17
+ });
18
+ const engine = EnhancedEngine
19
+ return {
20
+ [Syntax.Str](node) {
21
+ return new Promise(async (resolve, reject) => {
22
+ const text = getSource(node);
23
+ let results = await matchAll(text);
24
+ for (const result of results) {
25
+ if(result.message == "れ足す言葉の可能性があります"){
26
+ if(!(await engine.checkRetasu(tokenize, text.slice(result.range[0],result.range[1])))){
27
+ continue;
28
+ }
29
+ }
30
+ if (result.expected) {
31
+ report(node, new RuleError(result.message, {
32
+ index: result.index,
33
+ fix: fixer.replaceTextRange(result.range, result.expected)
34
+ }));
35
+ } else {
36
+ report(node, new RuleError(result.message, {
37
+ index: result.index
38
+ }));
39
+ }
34
40
  }
35
- };
41
+ resolve();
42
+ });
43
+ }
44
+ };
36
45
  };
37
46
 
38
47
  export default {
39
- linter: reporter,
40
- fixer: reporter
48
+ linter: reporter,
49
+ fixer: reporter
41
50
  };
package/src/dict/dict.js DELETED
@@ -1,55 +0,0 @@
1
- module.exports = [
2
- {
3
- message: `"することが可能$1"は冗長な表現です。"することが可能"を省き簡潔な表現にすると文章が明瞭になります。`,
4
- tokens: [
5
- {
6
- "surface_form": "する",
7
- "pos": "動詞",
8
- "pos_detail_1": "自立",
9
- "pos_detail_2": "*",
10
- "pos_detail_3": "*",
11
- "conjugated_type": "サ変・スル",
12
- "conjugated_form": "基本形",
13
- "basic_form": "する",
14
- "reading": "スル",
15
- "pronunciation": "スル"
16
- }, {
17
- "surface_form": "こと",
18
- "pos": "名詞",
19
- "pos_detail_1": "非自立",
20
- "pos_detail_2": "一般",
21
- "pos_detail_3": "*",
22
- "conjugated_type": "*",
23
- "conjugated_form": "*",
24
- "basic_form": "こと",
25
- "reading": "コト",
26
- "pronunciation": "コト"
27
- }, {
28
- "surface_form": "が",
29
- "pos": "助詞",
30
- "pos_detail_1": "格助詞",
31
- "pos_detail_2": "一般",
32
- "pos_detail_3": "*",
33
- "conjugated_type": "*",
34
- "conjugated_form": "*",
35
- "basic_form": "が",
36
- "reading": "ガ",
37
- "pronunciation": "ガ"
38
- }, {
39
- "surface_form": "可能",
40
- "pos": "名詞",
41
- "pos_detail_1": "形容動詞語幹",
42
- "pos_detail_2": "*",
43
- "pos_detail_3": "*",
44
- "conjugated_type": "*",
45
- "conjugated_form": "*",
46
- "basic_form": "可能",
47
- "reading": "カノウ",
48
- "pronunciation": "カノー"
49
- }, {
50
- "pos": "助動詞",
51
- "_capture": "$1"
52
- }
53
- ]
54
- },
55
- ];
package/src/dict/dict2.js DELETED
@@ -1,32 +0,0 @@
1
- module.exports = [
2
- {
3
- "message": "\"適用\"の誤用である可能性があります。適応 => 適用",
4
- "expected": "を適用",
5
- "tokens": [
6
- {
7
- "surface_form": "を",
8
- "pos": "助詞",
9
- "pos_detail_1": "格助詞",
10
- "pos_detail_2": "一般",
11
- "pos_detail_3": "*",
12
- "conjugated_type": "*",
13
- "conjugated_form": "*",
14
- "basic_form": "を",
15
- "reading": "ヲ",
16
- "pronunciation": "ヲ"
17
- },
18
- {
19
- "surface_form": "適応",
20
- "pos": "名詞",
21
- "pos_detail_1": "サ変接続",
22
- "pos_detail_2": "*",
23
- "pos_detail_3": "*",
24
- "conjugated_type": "*",
25
- "conjugated_form": "*",
26
- "basic_form": "適応",
27
- "reading": "テキオウ",
28
- "pronunciation": "テキオー"
29
- }
30
- ]
31
- },
32
- ];