This commit is contained in:
evgeny 2016-09-17 17:11:12 +02:00
parent a68c68ec0e
commit 5782f6cfdb
6 changed files with 3337 additions and 4981 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
build/

View File

@ -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`.

View File

@ -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

View File

@ -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
View 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')

File diff suppressed because one or more lines are too long