1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.getLicenseButtons = exports.getLicenseButtonsFile = void 0;
|
4 | const builder_util_1 = require("builder-util");
|
5 | const license_1 = require("app-builder-lib/out/util/license");
|
6 | const fs_extra_1 = require("fs-extra");
|
7 | const iconv = require("iconv-lite");
|
8 | const js_yaml_1 = require("js-yaml");
|
9 | const dmgUtil_1 = require("./dmgUtil");
|
10 | const licenseDefaultButtons_1 = require("./licenseDefaultButtons");
|
11 | async function getLicenseButtonsFile(packager) {
|
12 | return license_1.getLicenseAssets((await packager.resourceList).filter(it => {
|
13 | const name = it.toLowerCase();
|
14 |
|
15 | return name.startsWith("licensebuttons_") && (name.endsWith(".json") || name.endsWith(".yml"));
|
16 | }), packager);
|
17 | }
|
18 | exports.getLicenseButtonsFile = getLicenseButtonsFile;
|
19 | async function getLicenseButtons(licenseButtonFiles, langWithRegion, id, name) {
|
20 | let data = licenseDefaultButtons_1.getDefaultButtons(langWithRegion, id, name);
|
21 | for (const item of licenseButtonFiles) {
|
22 | if (item.langWithRegion !== langWithRegion) {
|
23 | continue;
|
24 | }
|
25 | try {
|
26 | const fileData = js_yaml_1.load(await fs_extra_1.readFile(item.file, "utf-8"));
|
27 | const buttonsStr = labelToHex(fileData.lang, item.lang, item.langWithRegion) +
|
28 | labelToHex(fileData.agree, item.lang, item.langWithRegion) +
|
29 | labelToHex(fileData.disagree, item.lang, item.langWithRegion) +
|
30 | labelToHex(fileData.print, item.lang, item.langWithRegion) +
|
31 | labelToHex(fileData.save, item.lang, item.langWithRegion) +
|
32 | labelToHex(fileData.description, item.lang, item.langWithRegion);
|
33 | data = `data 'STR#' (${id}, "${name}") {\n`;
|
34 | data += dmgUtil_1.serializeString("0006" + buttonsStr);
|
35 | data += `\n};`;
|
36 | if (builder_util_1.log.isDebugEnabled) {
|
37 | builder_util_1.log.debug({ lang: item.langName, data }, `overwriting license buttons`);
|
38 | }
|
39 | return data;
|
40 | }
|
41 | catch (e) {
|
42 | builder_util_1.log.debug({ error: e }, "cannot overwrite license buttons");
|
43 | return data;
|
44 | }
|
45 | }
|
46 | return data;
|
47 | }
|
48 | exports.getLicenseButtons = getLicenseButtons;
|
49 | function labelToHex(label, lang, langWithRegion) {
|
50 | const lbl = hexEncode(label, lang, langWithRegion).toString().toUpperCase();
|
51 | const len = numberToHex(lbl.length / 2);
|
52 | return len + lbl;
|
53 | }
|
54 | function numberToHex(nb) {
|
55 | return ("0" + nb.toString(16)).slice(-2);
|
56 | }
|
57 | function hexEncode(str, lang, langWithRegion) {
|
58 | const macCodePages = getMacCodePage(lang, langWithRegion);
|
59 | let result = "";
|
60 | for (let i = 0; i < str.length; i++) {
|
61 | try {
|
62 | let hex = getMacHexCode(str, i, macCodePages);
|
63 | if (hex === undefined) {
|
64 | hex = "3F";
|
65 | }
|
66 | result += hex;
|
67 | }
|
68 | catch (e) {
|
69 | builder_util_1.log.debug({ error: e, char: str[i] }, "cannot convert");
|
70 | result += "3F";
|
71 | }
|
72 | }
|
73 | return result;
|
74 | }
|
75 | function getMacCodePage(lang, langWithRegion) {
|
76 | switch (lang) {
|
77 | case "ja":
|
78 | return ["euc-jp"];
|
79 | case "zh":
|
80 | if (langWithRegion === "zh_CN") {
|
81 | return ["gb2312"];
|
82 | }
|
83 | return ["big5"];
|
84 | case "ko":
|
85 | return ["euc-kr"];
|
86 | case "ar":
|
87 | case "ur":
|
88 | return ["macarabic"];
|
89 | case "he":
|
90 | return ["machebrew"];
|
91 | case "el":
|
92 | case "elc":
|
93 | return ["macgreek"];
|
94 | case "ru":
|
95 | case "be":
|
96 | case "sr":
|
97 | case "bg":
|
98 | case "uz":
|
99 | return ["maccyrillic"];
|
100 | case "ro":
|
101 | return ["macromania"];
|
102 | case "uk":
|
103 | return ["macukraine"];
|
104 | case "th":
|
105 | return ["macthai"];
|
106 | case "et":
|
107 | case "lt":
|
108 | case "lv":
|
109 | case "pl":
|
110 | case "hu":
|
111 | case "cs":
|
112 | case "sk":
|
113 | return ["maccenteuro"];
|
114 | case "is":
|
115 | case "fo":
|
116 | return ["maciceland"];
|
117 | case "tr":
|
118 | return ["macturkish"];
|
119 | case "hr":
|
120 | case "sl":
|
121 | return ["maccroatian"];
|
122 | default:
|
123 | return ["macroman"];
|
124 | }
|
125 | }
|
126 | function getMacHexCode(str, i, macCodePages) {
|
127 | const code = str.charCodeAt(i);
|
128 | if (code < 128) {
|
129 | return code.toString(16);
|
130 | }
|
131 | else if (code < 256) {
|
132 | return iconv.encode(str[i], "macroman").toString("hex");
|
133 | }
|
134 | else {
|
135 | for (let i = 0; i < macCodePages.length; i++) {
|
136 | const result = iconv.encode(str[i], macCodePages[i]).toString("hex");
|
137 | if (result !== undefined) {
|
138 | return result;
|
139 | }
|
140 | }
|
141 | }
|
142 | return code;
|
143 | }
|
144 |
|
\ | No newline at end of file |