diff --git a/stdlib/davidgu/polycode/functions/__main__.js b/stdlib/davidgu/polycode/functions/__main__.js index d01e192..f98b08f 100755 --- a/stdlib/davidgu/polycode/functions/__main__.js +++ b/stdlib/davidgu/polycode/functions/__main__.js @@ -1,16 +1,17 @@ const lib = require("lib"); /** -* @param {string} doc Plaintext of the document to be translated -* @param {string} from ISO 639-1 language code for -* @param {string} to -* @param {string} map -* @param {string} scriptlang -* @returns {any} +* @param {string} doc Plaintext of the document to be translated +* @param {string} from 2-letter code of language to translate from +* @param {string} to 2-letter code of language to be translate into +* @param {string} map JSON-stringified string of map file +* @param {string} ext File extension of doc +* @returns {object} */ -module.exports = async (doc, from="EN", to="FR", map="{}", scriptlang="python", context) => { +module.exports = async (doc, from="EN", to="FR", map="{}", ext=".py", context) => { map = JSON.parse(map); - var tokens = await lib[`${context.service.identifier}.get_tokens`](doc, scriptlang); + var lang = langForExt[ext]; + var tokens = await lib[`${context.service.identifier}.get_tokens`](doc, lang); var result = await lib[`${context.service.identifier}.token_mapper`](tokens, from, to, map); tokens = result["tokens"]; map = result["map"]; @@ -18,3 +19,9 @@ module.exports = async (doc, from="EN", to="FR", map="{}", scriptlang="python", return {"doc": doc, "map": map} }; + +langForExt = { + ".py": "python", + ".js": "javascript", + ".jsx": "javascript" +} diff --git a/stdlib/davidgu/polycode/functions/get_tokens.js b/stdlib/davidgu/polycode/functions/get_tokens.js index 746b2e0..10c2fca 100644 --- a/stdlib/davidgu/polycode/functions/get_tokens.js +++ b/stdlib/davidgu/polycode/functions/get_tokens.js @@ -15,7 +15,9 @@ getTokensForLang = { "python": function(doc) { var tokens = []; - var nextToken = filbert.tokenize(doc); + docClean = doc.split("@").join(";"); + + var nextToken = filbert.tokenize(docClean); var t = nextToken(); while (t["type"]["type"] !== "eof") { diff --git a/stdlib/davidgu/polycode/functions/token_mapper.js b/stdlib/davidgu/polycode/functions/token_mapper.js index b48af28..b1d5656 100644 --- a/stdlib/davidgu/polycode/functions/token_mapper.js +++ b/stdlib/davidgu/polycode/functions/token_mapper.js @@ -44,28 +44,19 @@ module.exports = async (tokens, from, to, map) => { } }); if (!inDict) { - var value = tokens[i].value; - if (!tokens[i].isComment) { - value = Case.lower(value); - } - allPromises.push(translateText(value, i, from, to)); + allPromises.push(translateToken(tokens[i], i, from, to)); } } var results = await Promise.all(allPromises); results.forEach(result => { - token = tokens[result["index"]]; - origValue = result["origValue"] - var translated = result["translated"]; - if (!token.isComment) { - translated = Case[Case.of(origValue)](translated).split(" ").join("_"); - } - token.translated = translated; + var token = result.token; + tokens[result.index] = token; // Update map with new language translation of a token that var found = false; for (var j = 0; j < map["tokens"].length; j++) { - if (map["tokens"][j][fromLangIdx] === origValue) { - map["tokens"][j][toLangIdx] = translated; + if (map["tokens"][j][fromLangIdx] === token.value) { + map["tokens"][j][toLangIdx] = token.translated; found = true; break; } @@ -73,26 +64,36 @@ module.exports = async (tokens, from, to, map) => { if (!found) { // Completely new token: push new row row = new Array(map["languages"].length).fill(null); - row[fromLangIdx] = origValue; - row[toLangIdx] = translated; + row[fromLangIdx] = token.value; + row[toLangIdx] = token.translated; map["tokens"].push(row); } }); return {"tokens": tokens, "map": map}; - function translateText(value, index, fromLanguage, toLanguage) { + function translateToken(token, index, fromLanguage, toLanguage) { return new Promise((resolve, reject) => { - googleTranslate.translate(value, fromLanguage, toLanguage, (err, translation) => { + if (token.value.length === 1) { + token.translated = token.value; + resolve({"index": index, "token": token}); + } + var text = token.value; + if (!token.isComment) { + text = Case.lower(text); + } + googleTranslate.translate(text, fromLanguage, toLanguage, (err, translation) => { if (err !== null) { reject(err); } else { - resolve({ - "index": index, - "origValue": value, - "translated": translation.translatedText - }); + var translated = translation.translatedText; + if (!token.isComment) { + translated = Case[Case.of(token.value)](translated).split(" ").join("_"); + } + token.translated = translated; + + resolve({"index": index, "token": token}); } }); }); diff --git a/stdlib/davidgu/polycode/package-lock.json b/stdlib/davidgu/polycode/package-lock.json index c48bdf1..c577e8e 100644 --- a/stdlib/davidgu/polycode/package-lock.json +++ b/stdlib/davidgu/polycode/package-lock.json @@ -14,7 +14,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", "requires": { - "acorn": "^5.0.3" + "acorn": "5.7.2" } }, "ajv": { @@ -22,10 +22,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "asn1": { @@ -33,7 +33,7 @@ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "requires": { - "safer-buffer": "~2.1.0" + "safer-buffer": "2.1.2" } }, "assert-plus": { @@ -46,7 +46,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.10" } }, "asynckit": { @@ -70,7 +70,7 @@ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "case": { @@ -93,7 +93,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "core-util-is": { @@ -106,7 +106,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "delayed-stream": { @@ -120,8 +120,8 @@ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "optional": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "extend": { @@ -159,9 +159,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.19" } }, "getpass": { @@ -169,7 +169,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "google-translate": { @@ -193,8 +193,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "he": { @@ -207,9 +207,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" } }, "is-typedarray": { @@ -274,7 +274,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "~1.35.0" + "mime-db": "1.35.0" } }, "oauth-sign": { @@ -302,26 +302,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.19", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" }, "dependencies": { "uuid": { @@ -346,15 +346,15 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "tough-cookie": { @@ -362,7 +362,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" } }, "tunnel-agent": { @@ -370,7 +370,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -389,9 +389,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } } }