UNPKG

5.55 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.getLicenseButtons = exports.getLicenseButtonsFile = void 0;
4const builder_util_1 = require("builder-util");
5const license_1 = require("app-builder-lib/out/util/license");
6const fs_extra_1 = require("fs-extra");
7const iconv = require("iconv-lite");
8const js_yaml_1 = require("js-yaml");
9const dmgUtil_1 = require("./dmgUtil");
10const licenseDefaultButtons_1 = require("./licenseDefaultButtons");
11async function getLicenseButtonsFile(packager) {
12 return license_1.getLicenseAssets((await packager.resourceList).filter(it => {
13 const name = it.toLowerCase();
14 // noinspection SpellCheckingInspection
15 return name.startsWith("licensebuttons_") && (name.endsWith(".json") || name.endsWith(".yml"));
16 }), packager);
17}
18exports.getLicenseButtonsFile = getLicenseButtonsFile;
19async 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}
48exports.getLicenseButtons = getLicenseButtons;
49function 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}
54function numberToHex(nb) {
55 return ("0" + nb.toString(16)).slice(-2);
56}
57function 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}
75function getMacCodePage(lang, langWithRegion) {
76 switch (lang) {
77 case "ja": //japanese
78 return ["euc-jp"]; //Apple Japanese
79 case "zh": //chinese
80 if (langWithRegion === "zh_CN") {
81 return ["gb2312"]; //Apple Simplified Chinese (GB 2312)
82 }
83 return ["big5"]; //Apple Traditional Chinese (Big5)
84 case "ko": //korean
85 return ["euc-kr"]; //Apple Korean
86 case "ar": //arabic
87 case "ur": //urdu
88 return ["macarabic"]; //Apple Arabic
89 case "he": //hebrew
90 return ["machebrew"]; //Apple Hebrew
91 case "el": //greek
92 case "elc": //greek
93 return ["macgreek"]; //Apple Greek
94 case "ru": //russian
95 case "be": //belarussian
96 case "sr": //serbian
97 case "bg": //bulgarian
98 case "uz": //uzbek
99 return ["maccyrillic"]; //Apple Macintosh Cyrillic
100 case "ro": //romanian
101 return ["macromania"]; //Apple Romanian
102 case "uk": //ukrainian
103 return ["macukraine"]; //Apple Ukrainian
104 case "th": //thai
105 return ["macthai"]; //Apple Thai
106 case "et": //estonian
107 case "lt": //lithuanian
108 case "lv": //latvian
109 case "pl": //polish
110 case "hu": //hungarian
111 case "cs": //czech
112 case "sk": //slovak
113 return ["maccenteuro"]; //Apple Macintosh Central Europe
114 case "is": //icelandic
115 case "fo": //faroese
116 return ["maciceland"]; //Apple Icelandic
117 case "tr": //turkish
118 return ["macturkish"]; //Apple Turkish
119 case "hr": //croatian
120 case "sl": //slovenian
121 return ["maccroatian"]; //Apple Croatian
122 default:
123 return ["macroman"]; //Apple Macintosh Roman
124 }
125}
126function 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//# sourceMappingURL=licenseButtons.js.map
\No newline at end of file