UNPKG

2.32 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13Object.defineProperty(exports, "__esModule", { value: true });
14exports.defaultParserOpts = {
15 rule: [5, 7, 5],
16 exact: false,
17};
18var sutekana = /[ぁぃぅぇぉゃゅょゎァィゥェォャュョヮ]/g;
19exports.parser = function (nodes, options) {
20 var ku = [];
21 var rulePosition = 0;
22 var reading = 0;
23 var fullRule = false;
24 var _a = __assign({}, exports.defaultParserOpts, options), rule = _a.rule, exact = _a.exact;
25 var addNode = function (_node, index) {
26 if (!ku[index]) {
27 ku[index] = [];
28 }
29 ku[index].push(_node);
30 };
31 var nextPosition = function () {
32 rulePosition++;
33 };
34 var reset = function () {
35 reading = 0;
36 };
37 for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
38 var node = nodes_1[_i];
39 var _read = (node.reading || node.surface_form).replace(sutekana, '');
40 if (reading === 0 && !node.head) {
41 ku = [];
42 break;
43 }
44 reading += _read.length;
45 if (reading < rule[rulePosition]) {
46 addNode(node, rulePosition);
47 }
48 else if (reading === rule[rulePosition]) {
49 addNode(node, rulePosition);
50 nextPosition();
51 reset();
52 if (typeof rule[rulePosition] === 'undefined') {
53 fullRule = true;
54 if (!node.tail) {
55 ku = [];
56 }
57 break;
58 }
59 }
60 else {
61 ku = [];
62 break;
63 }
64 }
65 if (!fullRule) {
66 return undefined;
67 }
68 if (exact && ku.reduce(function (pre, cur) { return pre + cur.length; }, 0) !== nodes.length) {
69 return undefined;
70 }
71 return ku.length ? ku : undefined;
72};
73exports.joinNodes = function (nodes) {
74 return nodes.map(function (_node) { return _node.map(function (_nd) { return _nd.surface_form; }); });
75};