Publish Vulpes Preview 15 sources for desktop, Android and Tundra

Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,175 @@
/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
/* jshint sub: true */
'use strict';
var Module;
var emEngine;
var procFunction;
self.onmessage = function(e) {
var data = e.data;
if (data.id == 'init') {
initModule(data.id, data.param);
} else if (procFunction[data.id]) {
var result = procFunction[data.id](data.param);
post(data.id, result);
} else {
log('echo: ' + JSON.stringify(e.data));
}
};
function initModule(msgId, param) {
Module = {
canvas: {},
stdout: null,
setStatus: log,
preRun: [function() {
if (param.userDict) {
Module['addRunDependency']('fp data/user_dict.data');
Module['FS_createPreloadedFile'](
'/data', 'user_dict.data', param.userDict, true, true, function() {
Module['removeRunDependency']('fp data/user_dict.data');
});
}
}],
_main: function() {
emEngine = {
openDecoder:
Module.cwrap('im_open_decoder', 'number', ['string', 'string']),
closeDecoder:
Module.cwrap('im_close_decoder', '', []),
search:
Module.cwrap('im_search', 'number', ['string', 'number']),
resetSearch:
Module.cwrap('im_reset_search', '', []),
getCandidateAt:
Module.cwrap('im_get_candidate_char', 'string', ['number']),
getPredicts:
Module.cwrap('im_get_predicts_utf8', 'number', ['string', 'number']),
getPredictAt:
Module.cwrap('im_get_predict_at', 'string', ['number']),
choose:
Module.cwrap('im_choose', 'number', ['number']),
getSplStart:
Module.cwrap('im_get_spl_start', 'number', []),
getSplStartAt:
Module.cwrap('im_get_spl_start_at', 'number', ['number']),
getFixedLen:
Module.cwrap('im_get_fixed_len', 'number', []),
flushCache:
Module.cwrap('im_flush_cache', '', [])
};
if (emEngine.openDecoder('data/dict.data', 'data/user_dict.data')) {
initProcFunctions();
post(msgId, true);
} else {
post(msgId, false);
}
}
};
try {
importScripts('empinyin_files.js');
importScripts('libpinyin.js');
} catch (e) {
log(e.toString());
post(msgId, false);
}
}
function initProcFunctions() {
var getSearchResult = function(emEngineGetAt, param) {
var start = param.start;
var count = param.count;
var results = [];
for (var i = start; i < count; i++) {
results.push(emEngineGetAt(i));
}
return results;
};
var search = function(emEngineSearch, emEngineGetAt, param) {
var query = param.queryString;
var numberToReturn = param.limit;
var resultLen = emEngineSearch(query, query.length);
var results;
if (numberToReturn) {
if (numberToReturn < 0 || numberToReturn > resultLen) {
numberToReturn = resultLen;
}
results = getSearchResult(emEngineGetAt, {
start: 0,
count: numberToReturn
});
}
return {
length: resultLen,
results: results
};
};
procFunction = {};
/*jshint -W040 */
procFunction['im_search'] =
search.bind(this, emEngine.search, emEngine.getCandidateAt);
procFunction['im_get_candidates'] =
getSearchResult.bind(this, emEngine.getCandidateAt);
procFunction['im_search_predicts'] =
search.bind(this, emEngine.getPredicts, emEngine.getPredictAt);
procFunction['im_get_predicts'] =
getSearchResult.bind(this, emEngine.getPredictAt);
/*jshint +W040 */
procFunction['im_flush_cache'] =
emEngine.flushCache;
procFunction['im_choose'] = function(param) {
var candsNum = emEngine.choose(param.candId);
if (candsNum == 1 && emEngine.getFixedLen() == emEngine.getSplStart()) {
var convertedText = emEngine.getCandidateAt(0);
emEngine.resetSearch();
return convertedText;
}
return null;
};
procFunction['im_get_pending_symbols_info'] = function() {
var fixedLen = emEngine.getFixedLen();
var splStartLen = emEngine.getSplStart();
var splStart = [];
for (var i = 0; i <= splStartLen; i++) {
splStart.push(emEngine.getSplStartAt(i));
}
return {
fixedLen: fixedLen,
splStart: splStart
};
};
procFunction['im_get_user_dict_data'] = function() {
if (!Module['FS']) {
return null;
}
emEngine.flushCache();
return Module['FS'].findObject('data/user_dict.data').contents;
};
}
function post(id, returnValue) {
postMessage({
id: id,
returnValue: returnValue
});
}
function log(message) {
post('message', message);
}