scancscode 1.0.30 → 1.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.trae/specs/fix-doc-comment-boundary/checklist.md +7 -0
- package/.trae/specs/fix-doc-comment-boundary/spec.md +52 -0
- package/.trae/specs/fix-doc-comment-boundary/tasks.md +34 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/checklist.md +7 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/spec.md +55 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/tasks.md +25 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/checklist.md +9 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/spec.md +59 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/tasks.md +41 -0
- package/.trae/specs/fix-return-interpolated-string/checklist.md +8 -0
- package/.trae/specs/fix-return-interpolated-string/spec.md +60 -0
- package/.trae/specs/fix-return-interpolated-string/tasks.md +39 -0
- package/.trae/specs/handle-interpolated-string-double-braces/checklist.md +9 -0
- package/.trae/specs/handle-interpolated-string-double-braces/spec.md +61 -0
- package/.trae/specs/handle-interpolated-string-double-braces/tasks.md +41 -0
- package/.trae/specs/handle-return-statement/checklist.md +11 -0
- package/.trae/specs/handle-return-statement/spec.md +76 -0
- package/.trae/specs/handle-return-statement/tasks.md +44 -0
- package/.trae/specs/handle-special-string-characters/checklist.md +13 -0
- package/.trae/specs/handle-special-string-characters/spec.md +94 -0
- package/.trae/specs/handle-special-string-characters/tasks.md +74 -0
- package/.trae/specs/unify-return-statement-string-extraction/checklist.md +10 -0
- package/.trae/specs/unify-return-statement-string-extraction/spec.md +70 -0
- package/.trae/specs/unify-return-statement-string-extraction/tasks.md +54 -0
- package/bin/scanliterals.js +3 -3
- package/bin/slimlangs.js +3 -3
- package/dist/src/CSharpStringExtractor.js +1755 -358
- package/dist/src/CmdExecutor.js +6 -8
- package/dist/test/CSharpStringExtractor.test.js +1484 -207
- package/docs/CSharpStringExtractor/344/273/243/347/240/201/347/224/237/346/210/220/346/217/220/347/244/272/350/257/215.txt +73 -0
- package/jest.config.js +9 -9
- package/package.json +1 -1
- package/src/CSCodeScanner.ts +305 -305
- package/src/CSVUtils.ts +181 -181
- package/src/CSharpStringExtractor.ts +2019 -479
- package/src/CmdExecutor.ts +107 -106
- package/src/LiteralCollector.ts +143 -143
- package/src/RunConvert.ts +3 -3
- package/src/RunSlimLangs.ts +3 -3
- package/src/TableScanner.ts +92 -92
- package/test/CSharpStringExtractor.test.ts +1564 -208
- package/test/KeeperDialog.cs +114 -0
- package/test/TestSpecialString.cs +24 -0
- package/tsconfig.json +109 -109
- package/dist/CSCodeScanner.js +0 -271
- package/dist/CSVUtils.js +0 -218
- package/dist/CmdExecutor.js +0 -101
- package/dist/CodeSnippet.js +0 -2
- package/dist/LiteralCollector.js +0 -124
- package/dist/RunConvert.js +0 -4
- package/dist/RunSlimLangs.js +0 -4
- package/dist/TableScanner.js +0 -107
- package/dist/TestConvert.test.js +0 -10
- package/dist/TestSlimCsv.test.js +0 -10
- package/dist/index.js +0 -4
package/dist/LiteralCollector.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.LiteralCollector = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const glob_1 = require("glob");
|
|
39
|
-
const CSCodeScanner_1 = require("./CSCodeScanner");
|
|
40
|
-
const CSVUtils_1 = require("./CSVUtils");
|
|
41
|
-
const TableScanner_1 = require("./TableScanner");
|
|
42
|
-
class LiteralCollector {
|
|
43
|
-
scanCodeInFolder(folder, literals, unexpects, trmethod, scanonly, verbose) {
|
|
44
|
-
if (fs.existsSync(folder) == false) {
|
|
45
|
-
console.warn(`代码目录不存在: ${folder}`);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
let files = glob_1.glob.sync("**/*.cs", { cwd: folder });
|
|
49
|
-
// let testFullPath = "@";
|
|
50
|
-
let testFullPath = "E:/DATA/Projects/ZhiYou/ProjectFClient/GameClient/Assets/Bundles/FGUI/SutraUI_Detail/MainSutraDetailDialog.cs";
|
|
51
|
-
for (const filePath of files) {
|
|
52
|
-
let fullPath = folder + filePath;
|
|
53
|
-
if (testFullPath != "@") {
|
|
54
|
-
fullPath = testFullPath;
|
|
55
|
-
}
|
|
56
|
-
if (verbose) {
|
|
57
|
-
console.log(`处理文件: ${filePath}`);
|
|
58
|
-
}
|
|
59
|
-
const content = fs.readFileSync(fullPath, "utf-8");
|
|
60
|
-
const snippets = CSCodeScanner_1.CSCodeScanner.scanFile(fullPath, content, trmethod);
|
|
61
|
-
if (snippets.length > 0) {
|
|
62
|
-
if (!scanonly) {
|
|
63
|
-
let convertedContent = CSCodeScanner_1.CSCodeScanner.replaceInFile(content, snippets);
|
|
64
|
-
if (convertedContent != content) {
|
|
65
|
-
fs.writeFileSync(fullPath, convertedContent, "utf-8");
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
for (const snippet of snippets) {
|
|
69
|
-
literals.push(...snippet.literals);
|
|
70
|
-
unexpects.push(...snippet.unexpects);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (fullPath == testFullPath) {
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
unexpects = [...new Set(unexpects)];
|
|
78
|
-
}
|
|
79
|
-
scanTablesInFolder(folder, literals, verbose) {
|
|
80
|
-
if (fs.existsSync(folder) == false) {
|
|
81
|
-
console.warn(`表格目录不存在: ${folder}`);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
let scanner = new TableScanner_1.TableScanner();
|
|
85
|
-
scanner.scanTablesLiterals(folder + "Main/", literals, verbose);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* 去重
|
|
89
|
-
* @param literals
|
|
90
|
-
*/
|
|
91
|
-
filterLiterals(literals) {
|
|
92
|
-
let literalsSet = new Set(literals);
|
|
93
|
-
literalsSet.delete("");
|
|
94
|
-
for (let literal of literals) {
|
|
95
|
-
let match = literal.match(/^[\da-zA-Z!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+$/m);
|
|
96
|
-
if (match != null) {
|
|
97
|
-
literalsSet.delete(literal);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
literals.length = 0;
|
|
101
|
-
literals.push(...literalsSet);
|
|
102
|
-
}
|
|
103
|
-
async convert(cscodeFolders, gameConfigFolders, outCsvFile, langs, trmethod = "Tr.TR", scanonly = false, verbose = false) {
|
|
104
|
-
let literals = [];
|
|
105
|
-
let unexpects = [];
|
|
106
|
-
for (const cscodeFolder of cscodeFolders) {
|
|
107
|
-
this.scanCodeInFolder(cscodeFolder, literals, unexpects, trmethod, scanonly, verbose);
|
|
108
|
-
}
|
|
109
|
-
for (const gameConfigFolder of gameConfigFolders) {
|
|
110
|
-
this.scanTablesInFolder(gameConfigFolder, literals, verbose);
|
|
111
|
-
}
|
|
112
|
-
this.filterLiterals(literals);
|
|
113
|
-
if (verbose) {
|
|
114
|
-
console.log("扫描合并结果:", literals);
|
|
115
|
-
}
|
|
116
|
-
if (!scanonly) {
|
|
117
|
-
await CSVUtils_1.CSVUtils.updateToFile(outCsvFile, literals, langs);
|
|
118
|
-
}
|
|
119
|
-
for (const unexpect of unexpects) {
|
|
120
|
-
console.error(unexpect);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
exports.LiteralCollector = LiteralCollector;
|
package/dist/RunConvert.js
DELETED
package/dist/RunSlimLangs.js
DELETED
package/dist/TableScanner.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.TableScanner = void 0;
|
|
37
|
-
const fs = __importStar(require("fs"));
|
|
38
|
-
const glob_1 = require("glob");
|
|
39
|
-
class TableScanner {
|
|
40
|
-
parseTrStrFields(content) {
|
|
41
|
-
let m = content.match(/\/\/ NeedTranslateFields\: \[([a-zA-Z_,\s0-9]*)\]$/m);
|
|
42
|
-
if (m != null) {
|
|
43
|
-
let wordsContent = m[1];
|
|
44
|
-
let words = wordsContent.split(", ");
|
|
45
|
-
return words;
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
scanJsonWords(jsonContent, fields, literals) {
|
|
52
|
-
let arr = JSON.parse(jsonContent);
|
|
53
|
-
for (const jsonRow of arr) {
|
|
54
|
-
for (const key of fields) {
|
|
55
|
-
let value = jsonRow[key];
|
|
56
|
-
if (typeof (value) == "string") {
|
|
57
|
-
literals.push(value);
|
|
58
|
-
}
|
|
59
|
-
else if (Array.isArray(value)) {
|
|
60
|
-
literals.push(...value);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
scanTableLiterals(csFullPath, literals, verbose) {
|
|
66
|
-
// csFullPath = "E:/DATA/Projects/ZhiYou/ProjectFClient/GameClient/Assets/Bundles/GameConfigs/Main/RefinerTable-RefinerEventTable.cs";
|
|
67
|
-
let jsonFullPath = csFullPath.replace("/Main/", "/Auto/").replace(/\.cs$/, ".json");
|
|
68
|
-
if (fs.existsSync(jsonFullPath) && fs.existsSync(csFullPath)) {
|
|
69
|
-
let csContent = fs.readFileSync(csFullPath, "utf-8");
|
|
70
|
-
let trstrFields = this.parseTrStrFields(csContent);
|
|
71
|
-
if (trstrFields.length > 0) {
|
|
72
|
-
if (verbose) {
|
|
73
|
-
console.log(`扫描表格: ${csFullPath} , 需要翻译字段: ${trstrFields}`);
|
|
74
|
-
}
|
|
75
|
-
let jsonContent = fs.readFileSync(jsonFullPath, "utf-8");
|
|
76
|
-
this.scanJsonWords(jsonContent, trstrFields, literals);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
if (verbose) {
|
|
80
|
-
console.log(`跳过表格: ${csFullPath}`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
if (verbose) {
|
|
86
|
-
if (fs.existsSync(csFullPath) == false) {
|
|
87
|
-
console.warn(`表格 CS 文件不存在: ${jsonFullPath}`);
|
|
88
|
-
}
|
|
89
|
-
if (fs.existsSync(jsonFullPath) == false) {
|
|
90
|
-
console.warn(`表格 JSON 文件不存在: ${csFullPath}`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* 扫描
|
|
97
|
-
*/
|
|
98
|
-
scanTablesLiterals(folder, literals, verbose) {
|
|
99
|
-
let dir = folder;
|
|
100
|
-
let files = glob_1.glob.sync("*.cs", { cwd: dir });
|
|
101
|
-
for (const filePath of files.reverse()) {
|
|
102
|
-
let csFullPath = folder + filePath;
|
|
103
|
-
this.scanTableLiterals(csFullPath, literals, verbose);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
exports.TableScanner = TableScanner;
|
package/dist/TestConvert.test.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_test_1 = __importDefault(require("node:test"));
|
|
7
|
-
const CmdExecutor_1 = require("./CmdExecutor");
|
|
8
|
-
(0, node_test_1.default)("test convert", () => {
|
|
9
|
-
CmdExecutor_1.CmdExecutor.testConvert();
|
|
10
|
-
});
|
package/dist/TestSlimCsv.test.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_test_1 = __importDefault(require("node:test"));
|
|
7
|
-
const CmdExecutor_1 = require("./CmdExecutor");
|
|
8
|
-
(0, node_test_1.default)("test slim csv", () => {
|
|
9
|
-
CmdExecutor_1.CmdExecutor.testSlimCsv();
|
|
10
|
-
});
|
package/dist/index.js
DELETED