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.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'
|
||||
|
||||
//Gen, //родительный падеж (нет кого? чего?)
|
||||
//Dat, //дательный падеж (дать кому? чему?)
|
||||
//Acc, //винительный падеж (вижу кого? что?)
|
||||
//Ins, //творительный падеж (горжусь кем? чем?)
|
||||
//Abl, //предложный падеж (думаю о ком? о чём?)
|
||||
//Dir,
|
||||
//Ine,
|
||||
//Ade,
|
||||
//Equ,
|
||||
//Com
|
||||
// Gen родительный падеж (нет кого? чего?)
|
||||
// Dat дательный падеж (дать кому? чему?)
|
||||
// Acc винительный падеж (вижу кого? что?)
|
||||
// Ins творительный падеж (горжусь кем? чем?)
|
||||
// Abl предложный падеж (думаю о ком? о чём?)
|
||||
|
||||
const nativeModule = require('./build/Release/vkext_flex')
|
||||
nativeModule.languageCode = 0
|
||||
nativeModule.initializeLanguage = function(language) {
|
||||
if (language == 'ua') {
|
||||
nativeModule.languageCode = 1
|
||||
const vkflex = require('./build/Release/vkext_flex')
|
||||
let langCode = 0
|
||||
|
||||
module.exports = {
|
||||
/**
|
||||
* @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",
|
||||
"devDependencies": {},
|
||||
"gypfile": true,
|
||||
"name": "vk-flex",
|
||||
"version": "1.0.0",
|
||||
"description": "vk-flex for node.js",
|
||||
"main": "index.js",
|
||||
"name": "node-vk-flex",
|
||||
"optionalDependencies": {},
|
||||
"private": true,
|
||||
"readme": "ERROR: No README data found!",
|
||||
"scripts": {
|
||||
"install": "node-gyp rebuild",
|
||||
"test": "node index.js"
|
||||
"test": "test.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