* updated files * queue and ready are now separate * checkpoint * found it! fixed missing call * cleaned up and refactored a bit * cleanup * whoops. make sure linter runs! * Make the queue itself static * addressed formatting issues, added more rules to eslint * more formatting, made ready Promise/void * checkpoint * checkpoint * checkpoint * checkpoint (linting) * checkpoint * checkpoint * checkpoint * checkpoint * renamed path to filepath. * checkpoint * checkpoint * so close... * checkpoint again * before making doc * checkpoint * checkpoint * Checkpoint * renamed awaiters * eslint * fix format on generated native strings * add dummy pretest task back in for the moment * change unit test runing * posix calc test failure * make signal dispose better * add est regen script * missed file * checkpoint * Improve scripts a bit * remove hooks for now * remove unused script * remove unused script * filter out files * ensure that eslint works for scripts too * fix build oses to specific version * cleanups and tweaking * adjusted for cosmetic feedback * more * add eslint rule to fix space before/after semicolon * remove tba/tbd * cleanup * Added space-infix-ops rule * cleanup * resolve comments * resolve comments * add simple debug task * spelling fixes * cleanup more * More changes. yay * remove the extra whitespace from before comments * add eslint rule to ensure that there are never extra spaces * adding another eslint rule to ensure that there isn't spacing around unary operators, which we all know is dangerous. Or weird. I forget which * added a space between vs and code because a space is the desired format * removed all mentions of transpiler which was removed * removed an extra comma * removed a trailing slash * removed useless lines * missed as file * reconfigure no-extra-parens rule * added note about yarn install * whatever * more fun * FIx it so that it webpacks correctly * remove refernces to attic * restore line to correct check * fix whitespace * added blank yarn install * removed
135 lines
5.8 KiB
TypeScript
135 lines
5.8 KiB
TypeScript
/* --------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All Rights Reserved.
|
|
* See 'LICENSE' in the project root for license information.
|
|
* ------------------------------------------------------------------------------------------ */
|
|
|
|
import { parse } from 'comment-json';
|
|
import { resolve } from 'path';
|
|
import { read, write } from './common';
|
|
|
|
// ****************************
|
|
// Command: generate-native-strings
|
|
// The following is used to generate nativeStrings.ts and localized_string_ids.h from ./src/nativeStrings.json
|
|
// If adding localized strings to the native side, start by adding it to nativeStrings.json and use this to generate the others.
|
|
// ****************************
|
|
export async function main() {
|
|
const $root = resolve(`${__dirname}/..`);
|
|
const stringTable = parse(await read(`${$root}/src/nativeStrings.json`)) as any;
|
|
|
|
let nativeEnumContent = "";
|
|
let nativeStringTableContent = "";
|
|
let typeScriptSwitchContent = "";
|
|
|
|
let stringIndex = 1;
|
|
for (const property in stringTable) {
|
|
let stringValue = stringTable[property];
|
|
let hintValue;
|
|
if (typeof stringValue !== "string") {
|
|
hintValue = stringValue.hint;
|
|
stringValue = stringValue.text;
|
|
}
|
|
|
|
// Add to native enum
|
|
nativeEnumContent += ` ${property} = ${stringIndex},\n`;
|
|
|
|
// Add to native string table
|
|
nativeStringTableContent += ` ${JSON.stringify(stringValue)},\n`;
|
|
|
|
// Add to TypeScript switch
|
|
// Skip empty strings, which can be used to prevent enum/index reordering
|
|
if (stringValue !== "") {
|
|
// It's possible that a translation may skip "{#}" entries, so check for up to 50 of them.
|
|
let numArgs = 0;
|
|
for (let i = 0; i < 50; i++) {
|
|
if (stringValue.includes(`{${i}}`)) {
|
|
numArgs = i + 1;
|
|
}
|
|
}
|
|
typeScriptSwitchContent += ` case ${stringIndex}:\n`;
|
|
if (numArgs !== 0) {
|
|
typeScriptSwitchContent += ` if (stringArgs) {\n`;
|
|
if (hintValue) {
|
|
typeScriptSwitchContent += ` message = localize({ key: ${JSON.stringify(property)}, comment: [${JSON.stringify(hintValue)}] }, ${JSON.stringify(stringValue)}`;
|
|
} else {
|
|
typeScriptSwitchContent += ` message = localize(${JSON.stringify(property)}, ${JSON.stringify(stringValue)}`;
|
|
}
|
|
for (let i = 0; i < numArgs; i++) {
|
|
typeScriptSwitchContent += `, stringArgs[${i}]`;
|
|
}
|
|
typeScriptSwitchContent += `);\n break;\n }\n`;
|
|
}
|
|
if (hintValue) {
|
|
typeScriptSwitchContent += ` message = localize({ key: ${JSON.stringify(property)}, comment: [${JSON.stringify(hintValue)}] }, ${JSON.stringify(stringValue)}`;
|
|
} else {
|
|
typeScriptSwitchContent += ` message = localize(${JSON.stringify(property)}, ${JSON.stringify(stringValue)}`;
|
|
}
|
|
typeScriptSwitchContent += `);\n break;\n`;
|
|
}
|
|
++stringIndex;
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
// Generate the TypeScript file
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
const typeScriptContent = `/* --------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All Rights Reserved.
|
|
* See 'LICENSE' in the project root for license information.
|
|
* ------------------------------------------------------------------------------------------ */
|
|
|
|
// ****** This file is generated from nativeStrings.json. Do not edit this file directly. ******
|
|
|
|
'use strict';
|
|
|
|
import * as nls from 'vscode-nls';
|
|
|
|
nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })();
|
|
const localize: nls.LocalizeFunc = nls.loadMessageBundle();
|
|
|
|
export const localizedStringCount: number = ${stringIndex};
|
|
|
|
export function lookupString(stringId: number, stringArgs?: string[]): string {
|
|
let message: string = "";
|
|
switch (stringId) {
|
|
case 0:
|
|
// Special case for blank string
|
|
break;
|
|
${typeScriptSwitchContent}
|
|
default:
|
|
console.assert(\"Unrecognized string ID\");
|
|
break;
|
|
}
|
|
return message;
|
|
}
|
|
`;
|
|
|
|
// If the file isn't there, or the contents are different, write it out
|
|
await write(`${$root}/src/nativeStrings.ts`, typeScriptContent);
|
|
|
|
// --------------------------------------------------------------------------------------------
|
|
// Generate the native string header file
|
|
// --------------------------------------------------------------------------------------------
|
|
const nativeContents = `/* --------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All Rights Reserved.
|
|
* See 'LICENSE' in the project root for license information.
|
|
* ------------------------------------------------------------------------------------------ */
|
|
|
|
// ****** This file is generated from nativeStrings.json. Do not edit this file directly. ******
|
|
|
|
#pragma once
|
|
// NOLINTBEGIN(modernize-raw-string-literal)
|
|
enum class localized_string_id : unsigned int
|
|
{
|
|
blank = 0,
|
|
${nativeEnumContent}};
|
|
|
|
inline static const char *localizable_strings[] = {
|
|
"",
|
|
${nativeStringTableContent}};
|
|
// NOLINTEND(modernize-raw-string-literal)
|
|
`;
|
|
|
|
// If the file isn't there, or the contents are different, write it out
|
|
await write(`${$root}/localized_string_ids.h`, nativeContents);
|
|
}
|