Skip to content

Commit 51dde99

Browse files
committed
[optimize] auto convert encoding for cmsis config wizard
1 parent dcccd7b commit 51dde99

3 files changed

Lines changed: 40 additions & 16 deletions

File tree

src/CodeConverter.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class CodeConverter {
5858
return str;
5959
}
6060

61-
private getCodeType(bomHead: Buffer): CodeType {
61+
private static getCodeType(bomHead: Buffer): CodeType {
6262

6363
let codeType: CodeType;
6464

@@ -111,27 +111,27 @@ export class CodeConverter {
111111
return codeType;
112112
}
113113

114-
GetCodeType(file: File): Promise<CodeType> {
114+
static getFileCodeType(file: File): Promise<CodeType> {
115115
return new Promise((resolve) => {
116116
const stream = fs.createReadStream(file.path);
117117
stream.on('readable', () => {
118118
let bomHead: Buffer = stream.read(4);
119119
stream.close();
120-
resolve(this.getCodeType(bomHead));
120+
resolve(CodeConverter.getCodeType(bomHead));
121121
});
122122
});
123123
}
124124

125-
getCodeTypeSync(file: File): CodeType {
125+
static getCodeTypeSync(file: File): CodeType {
126126
const buf = fs.readFileSync(file.path);
127-
return this.getCodeType(buf);
127+
return CodeConverter.getCodeType(buf);
128128
}
129129

130-
ExistCode(encoding: string): boolean {
130+
static existCode(encoding: string): boolean {
131131
return iconv.encodingExists(encoding);
132132
}
133133

134-
ConvertToUTF8(file: File, originalEncoding: string, outPath: string) {
134+
static convertFileToUTF8(file: File, originalEncoding: string, outPath: string) {
135135
fs.createReadStream(file.path)
136136
.pipe(iconv.decodeStream(originalEncoding))
137137
.pipe(iconv.encodeStream('utf8'))
@@ -140,7 +140,11 @@ export class CodeConverter {
140140
}));
141141
}
142142

143-
toTargetCode(str: string, encoding: string): Buffer {
143+
static toTargetCode(str: string, encoding: string): Buffer {
144144
return iconv.encode(iconv.decode(Buffer.from(str), 'utf8'), encoding);
145145
}
146+
147+
static toUtf8Code(buff: Buffer, encoding: string): Buffer {
148+
return iconv.encode(iconv.decode(buff, encoding), 'utf8');
149+
}
146150
}

src/HexUploader.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,12 +312,11 @@ class JLinkUploader extends HexUploader<any> {
312312
jlinkCommandtemplate = this.project.resolveEnvVar(jlinkCommandtemplate);
313313
jlinkCommandtemplate = jlinkCommandtemplate + os.EOL + 'exit'; // append 'exit' command
314314

315-
const codeConverter = new CodeConverter();
316315
const codePage = ResManager.getLocalCodePage();
317316

318317
// write commands file
319-
if (codePage && codeConverter.ExistCode(codePage)) {
320-
fs.writeFileSync(jlinkCommandsFile.path, codeConverter.toTargetCode(jlinkCommandtemplate, codePage));
318+
if (codePage && CodeConverter.existCode(codePage)) {
319+
fs.writeFileSync(jlinkCommandsFile.path, CodeConverter.toTargetCode(jlinkCommandtemplate, codePage));
321320
} else {
322321
jlinkCommandsFile.Write(jlinkCommandtemplate);
323322
}

src/WebPanelManager.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import * as NodePath from 'path';
3333
import * as CmsisConfigParser from './CmsisConfigParser'
3434
import * as os from 'os'
3535
import * as platform from './Platform';
36+
import * as fs from 'fs';
37+
import { CodeConverter } from "./CodeConverter";
3638

3739
let _instance: WebPanelManager;
3840

@@ -242,8 +244,17 @@ export class WebPanelManager {
242244

243245
showCmsisConfigWizard(uri: vscode.Uri): void {
244246

245-
const srcFile = new File(uri.fsPath);
246-
const lines = srcFile.Read().split(/\r\n|\n/);
247+
// get current encoding for this file
248+
const fencoding = vscode.workspace.getConfiguration(undefined, uri).get<string>('files.encoding') || 'utf8';
249+
const inputFile = new File(uri.fsPath);
250+
251+
let fileContUtf8Buf = fs.readFileSync(inputFile.path);
252+
253+
if (fencoding != 'utf8') {
254+
fileContUtf8Buf = CodeConverter.toUtf8Code(fileContUtf8Buf, fencoding);
255+
}
256+
257+
const lines = fileContUtf8Buf.toString().split(/\r\n|\n/);
247258

248259
let cmsisConfig: CmsisConfigParser.CmsisConfiguration | undefined;
249260

@@ -268,7 +279,7 @@ export class WebPanelManager {
268279

269280
const panel = vscode.window.createWebviewPanel(
270281
'cmsis_wizard_view',
271-
srcFile.name,
282+
inputFile.name,
272283
vscode.ViewColumn.One,
273284
panelOptions
274285
);
@@ -326,8 +337,18 @@ export class WebPanelManager {
326337
};
327338

328339
try {
329-
if (!Array.isArray(data)) throw Error(`Error response type: \'${typeof (data)}\'`);
330-
srcFile.Write(data.join(os.EOL));
340+
if (!Array.isArray(data)) {
341+
throw Error(`Error response type: \'${typeof (data)}\'`);
342+
}
343+
344+
const fileContent = data.join(os.EOL);
345+
346+
if (fencoding != 'utf8') {
347+
fs.writeFileSync(inputFile.path, CodeConverter.toTargetCode(fileContent, fencoding));
348+
} else {
349+
inputFile.Write(fileContent);
350+
}
351+
331352
status.success = true;
332353
status.msg = 'Save Done !';
333354
} catch (error) {

0 commit comments

Comments
 (0)