Skip to content

Commit

Permalink
feat: Upgrade to use nime 0.2.0 and refactor the architecture
Browse files Browse the repository at this point in the history
  • Loading branch information
jessy1092 committed Jul 11, 2016
1 parent 8f71fff commit 762f6d1
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 57 deletions.
160 changes: 106 additions & 54 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,81 +16,133 @@

'use strict';

let nime = require('nime');
let KEYCODE = require('nime/lib/keyCodes');
let emojione = require('emojione');

let server = nime.createServer();

server.on('connection', (service) => {
function respOnFilterKeyDown(request, state) {

let candidateList = [];
let showCandidates = false;
let compositionString = '';
let compositionCursor = 0;
let {charCode, seqNum} = request;
let {compositionString} = state;

service.on('filterKeyDown', (msg, keyHandler) => {
let response = {
return: false,
success: true,
seqNum
};

console.log('custom filterKeyDown');
if (compositionString !== '' || charCode === ':'.charCodeAt(0)) {
response['return'] = true;
}

let charCode = keyHandler.charCode;
let seqNum = msg['seqNum'];
return response;
}

let response = {
'return': false
};
function respOnKeyDown(request, state) {

if (compositionString !== '' || charCode === ':'.charCodeAt(0)) {
response['return'] = true;
}
let {keyCode, seqNum} = request;

service.writeSuccess(seqNum, response);
});
let response = {
success: true,
return: true,
seqNum
};

if (state['action'] === 'UPDATE_STRING') {
response['compositionString'] = state['compositionString'];
response['compositionCursor'] = state['compositionCursor'];
return response;
}

service.on('onKeyDown', (msg, keyHandler) => {
console.log('custom onKeyDown');
if (state['action'] === 'COMMIT_STRING') {
response['commitString'] = state['commitString'];
response['compositionString'] = state['compositionString'];
return response;
}

let keyCode = keyHandler.keyCode;
let charCode = keyHandler.charCode;
let seqNum = msg['seqNum'];
return response;

let response = {
'return': true
};
}

if (compositionString === '' && charCode === ':'.charCodeAt(0)) {
compositionString = ':';
compositionCursor = 1;
function reduceOnKeyDown(request, preState) {

response['compositionString'] = compositionString;
response['compositionCursor'] = compositionCursor;
let {keyCode, charCode, seqNum} = request;
let {compositionString, compositionCursor} = preState;

} else if (compositionString !== '') {

if (charCode === ':'.charCodeAt(0)) {
let emojikey = compositionString + ':';
compositionString = '';
compositionCursor = 0;
if (compositionString === '' && charCode === ':'.charCodeAt(0)) {
return Object.assign({}, preState, {
action: 'UPDATE_STRING',
compositionString: ':',
compositionCursor: 1
});
}

console.log('Get emoji short name');
console.log(emojikey);
console.log(emojione.shortnameToUnicode(emojikey));
response['commitString'] = emojione.shortnameToUnicode(emojikey);
response['compositionString'] = '';
if (compositionString !== '') {
if (charCode === ':'.charCodeAt(0)) {
let emojikey = compositionString + ':';

} else if (
(charCode >= 'a'.charCodeAt(0) && charCode <= 'z'.charCodeAt(0)) ||
(charCode >= 'A'.charCodeAt(0) && charCode <= 'Z'.charCodeAt(0))) {
console.log('Get emoji short name');
console.log(emojikey);
console.log(emojione.shortnameToUnicode(emojikey));
return Object.assign({}, preState, {
action: 'COMMIT_STRING',
commitString: emojione.shortnameToUnicode(emojikey),
compositionString: '',
compositionCursor: 0
});

compositionString += String.fromCharCode(charCode);
compositionCursor += 1;
}
response['compositionString'] = compositionString;
response['compositionCursor'] = compositionCursor;
} else if (
(charCode >= 'a'.charCodeAt(0) && charCode <= 'z'.charCodeAt(0)) ||
(charCode >= 'A'.charCodeAt(0) && charCode <= 'Z'.charCodeAt(0))) {

return Object.assign({}, preState, {
action: 'UPDATE_STRING',
compositionString: compositionString + String.fromCharCode(charCode),
compositionCursor: compositionCursor + 1
});
}
service.writeSuccess(seqNum, response);
}

return preState;
}

function reduceOnCompositionTerminated(request, preState) {
return Object.assign({}, preState, {
commitString: '',
compositionString: '',
compositionCursor: 0
});
});
}

module.exports = {
textReducer(request, preState) {

if (request['method'] === 'init') {
return Object.assign({}, preState, {
action: '',
compositionString: '',
compositionCursor: 0,
showCandidates: false
});
}

server.listen();
if (request['method'] === 'onKeyDown') {
return reduceOnKeyDown(request, preState);
}

if (request['method'] === 'onCompositionTerminated') {
return reduceOnCompositionTerminated(request, preState);
}
return preState;
},

response(request, state) {
if (request['method'] === 'filterKeyDown') {
return respOnFilterKeyDown(request, state);

} else if (request['method'] === 'onKeyDown') {
return respOnKeyDown(request, state);
}
return {success: true, seqNum: request['seqNum']};
}
}
9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
"description": "The 'real' input method editor of Emoji on windows. Implement by emojione, PIME, NIME.",
"main": "index.js",
"scripts": {
"start": "node index.js",
"start": "cross-env DEBUG=nime:* node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Lee <jessy1092@gmail.com>",
"license": "LGPL-2.1",
"dependencies": {
"emojione": "^2.1.1",
"nime": "^0.1.0"
"emojione": "^2.2.5"
},
"devDependencies": {
"cross-env": "^1.0.8",
"nime": "^0.2.0"
}
}
16 changes: 16 additions & 0 deletions server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
'use strict';

let nime = require('nime');
let fs = require('fs');
let path = require('path');

let service = require('./index');

let configFile = fs.readFileSync(path.join(process.cwd(), 'ime.json'), 'utf8');
let config = JSON.parse(configFile);

config['textService'] = service;

let server = nime.createServer(undefined, [config]);

server.listen();

0 comments on commit 762f6d1

Please sign in to comment.