updated
This commit is contained in:
parent
a68c68ec0e
commit
5782f6cfdb
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
build/
|
19
README.md
19
README.md
@ -1 +1,20 @@
|
|||||||
# node-vk-flex
|
# node-vk-flex
|
||||||
|
|
||||||
|
Нативный модуль для Node.js для склонения имен. Использует vkext/flex из [KittenPHP](https://github.com/vk-com/kphp-kdb).
|
||||||
|
Включена поддержка русского и украинского.
|
||||||
|
|
||||||
|
### Установка
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install vk-flex
|
||||||
|
```
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
`vkflex.setLang(lang)` - настройка языка.
|
||||||
|
- `lang` - строка, может быть `ru` или `uk`.
|
||||||
|
|
||||||
|
`vkflex.name(name, sex, nameCase)` или `vkflex.surname(surname, sex, nameCase)` - склоняет имя или фамилию.
|
||||||
|
- `name` или `surname` - строка;
|
||||||
|
- `sex` - число, `0` - мужской, `1` - женский;
|
||||||
|
- `nameCase` - падеж: `Gen`, `Dat`, `Acc`, `Ins` или `Abl`.
|
||||||
|
61
index.js
61
index.js
@ -1,28 +1,43 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
//Gen, //родительный падеж (нет кого? чего?)
|
// Gen родительный падеж (нет кого? чего?)
|
||||||
//Dat, //дательный падеж (дать кому? чему?)
|
// Dat дательный падеж (дать кому? чему?)
|
||||||
//Acc, //винительный падеж (вижу кого? что?)
|
// Acc винительный падеж (вижу кого? что?)
|
||||||
//Ins, //творительный падеж (горжусь кем? чем?)
|
// Ins творительный падеж (горжусь кем? чем?)
|
||||||
//Abl, //предложный падеж (думаю о ком? о чём?)
|
// Abl предложный падеж (думаю о ком? о чём?)
|
||||||
//Dir,
|
|
||||||
//Ine,
|
|
||||||
//Ade,
|
|
||||||
//Equ,
|
|
||||||
//Com
|
|
||||||
|
|
||||||
const nativeModule = require('./build/Release/vkext_flex')
|
const vkflex = require('./build/Release/vkext_flex')
|
||||||
nativeModule.languageCode = 0
|
let langCode = 0
|
||||||
nativeModule.initializeLanguage = function(language) {
|
|
||||||
if (language == 'ua') {
|
module.exports = {
|
||||||
nativeModule.languageCode = 1
|
/**
|
||||||
|
* @param {String} lang
|
||||||
|
*/
|
||||||
|
setLang(lang) {
|
||||||
|
switch (lang) {
|
||||||
|
case 'ru': langCode = 0; break
|
||||||
|
case 'uk': langCode = 1; break
|
||||||
|
default: throw new Error('lang "'+lang+'" is not supported'); break
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} name
|
||||||
|
* @param {Number} sex 0 = male, 1 = female
|
||||||
|
* @param {String} nameCase
|
||||||
|
* @return {String}
|
||||||
|
*/
|
||||||
|
name(name, sex, nameCase) {
|
||||||
|
return vkflex.flex(name, sex, nameCase, 'names', langCode)
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} name
|
||||||
|
* @param {Number} sex 0 = male, 1 = female
|
||||||
|
* @param {String} nameCase
|
||||||
|
* @return {String}
|
||||||
|
*/
|
||||||
|
surname(surname, sex, nameCase) {
|
||||||
|
return vkflex.flex(surname, sex, nameCase, 'surnames', langCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nativeModule.flexName = function(name, sex, name_case) {
|
|
||||||
return nativeModule.flex(name, sex, name_case, "names", nativeModule.languageCode)
|
|
||||||
}
|
|
||||||
nativeModule.flexSurname = function(surname, sex, name_case) {
|
|
||||||
return nativeModule.flex(surname, sex, name_case, "surnames", nativeModule.languageCode)
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = nativeModule
|
|
||||||
|
30
package.json
30
package.json
@ -1,15 +1,25 @@
|
|||||||
{
|
{
|
||||||
"description": "VK Name Flex for Node.js",
|
"name": "vk-flex",
|
||||||
"devDependencies": {},
|
"version": "1.0.0",
|
||||||
"gypfile": true,
|
"description": "vk-flex for node.js",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"name": "node-vk-flex",
|
|
||||||
"optionalDependencies": {},
|
|
||||||
"private": true,
|
|
||||||
"readme": "ERROR: No README data found!",
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"install": "node-gyp rebuild",
|
"test": "test.js",
|
||||||
"test": "node index.js"
|
"install": "node-gyp rebuild"
|
||||||
},
|
},
|
||||||
"version": "1.0.0"
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/gch1p/node-vk-flex.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"vk",
|
||||||
|
"flex"
|
||||||
|
],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"gypfile": true,
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/gch1p/node-vk-flex/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/gch1p/node-vk-flex#readme"
|
||||||
}
|
}
|
||||||
|
21
test.js
Normal file
21
test.js
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
const vkflex = require('./index.js')
|
||||||
|
|
||||||
|
let nameCases = ['Gen', 'Dat', 'Acc', 'Ins', 'Abl']
|
||||||
|
let names = [
|
||||||
|
['Евгений', 'Зиновьев', 0],
|
||||||
|
['Павел', 'Дуров', 0],
|
||||||
|
['Анастасия', 'Семенюк', 1],
|
||||||
|
['Катя', 'Лебедева', 1]
|
||||||
|
]
|
||||||
|
|
||||||
|
console.time('flex')
|
||||||
|
for (let [name, surname, sex] of names) {
|
||||||
|
console.log('Testing "'+name+' '+surname+'"...')
|
||||||
|
|
||||||
|
for (let nameCase of nameCases) {
|
||||||
|
console.log(nameCase + ': ' + vkflex.name(name, sex, nameCase) + ' ' + vkflex.surname(surname, sex, nameCase))
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('')
|
||||||
|
}
|
||||||
|
console.timeEnd('flex')
|
8186
vkext_flex_auto.c
8186
vkext_flex_auto.c
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user