-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathespdicilo.js
103 lines (99 loc) · 3.1 KB
/
espdicilo.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
'use strict';
const fs = require('fs'),
_ = require('lodash'),
Promise = require('bluebird');
searchEspDic("hand", "eneo").then(x=>
console.log(x)
)
function searchEspDic (query, langs) {
return new Promise(function(resolve, reject) {
let word = new RegExp(query, "i")
let text = ''
fs.readFile('espdic.json', (err, data)=>{
if (err) {
console.log(err)
reject (err)
} else {
let result = [];
const dic = JSON.parse(data).vortaro;
if (langs === "eoen") {
result = dic.filter(x=>{
return word.test(x.eo)
})
if (result.length > 0) {
dic.filter(x=>{
let reg;
if (/o$/.test(x.eo)) {
reg = new RegExp(x.eo.substring(0, x.eo.length - 1), "i")
} else {
reg = new RegExp(x.eo, "i")
}
return reg.test(query)
}).forEach(x=>{
result.push(x)
})
}
} else if (langs === "eneo") {
result = dic.filter(x=>{
return word.test(x.en)
})
}
resolve ( sortResult(result, query, langs) )
}
})
})
}
function sortResult (result, query, langs) {
const starting = new RegExp("^" + query, "i")
const ending = new RegExp(query + "$", "i")
const exact = new RegExp("^" + query + "$", "i")
let finalResult = [],
exactArr = [],
startingArr = [],
endingArr = [];
if (langs === "eoen") {
if (result.length > 0) {
exactArr = result.filter(x=>{
return exact.test(x.eo)
})
startingArr = result.filter(x=>{
return starting.test(x.eo)
})
endingArr = result.filter(x=>{
return ending.test(x.eo)
})
}
} else if (langs === "eneo") {
if (result.length > 0) {
exactArr = result.filter(x=>{
return exact.test(x.en)
})
startingArr = result.filter(x=>{
return starting.test(x.en)
})
endingArr = result.filter(x=>{
return ending.test(x.en)
})
}
}
if (exactArr.length > 0) {
exactArr.forEach(x=>{
finalResult.push(x)
})
}
if (startingArr.length > 0) {
startingArr.forEach(x=>{
finalResult.push(x)
})
}
if (endingArr.length > 0) {
endingArr.forEach(x=>{
finalResult.push(x)
})
}
result.forEach(x=>{
finalResult.push(x)
});
finalResult = _.uniq(finalResult)
return finalResult
}