MSI.wsf enhancements
- IDT2PO arguments reordered to make job reusable for POT extraction - IDTTranslate job added to replace "rcxgettext.exe idtp" functionality
This commit is contained in:
parent
be0487d0c5
commit
c0bc0c70aa
161
IDT.js
161
IDT.js
@ -19,29 +19,50 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*@cc_on @*/
|
/*@cc_on @*/
|
||||||
/*@if (! @__IDT_JS__) @*/
|
/*@if (! @_escapeIDT_JS__) @*/
|
||||||
/*@set @__IDT_JS__ = true @*/
|
/*@set @_escapeIDT_JS__ = true @*/
|
||||||
|
|
||||||
|
var escapeIDT_stat = null;
|
||||||
function CodePageToId(codepage)
|
function escapeIDT(str)
|
||||||
{
|
{
|
||||||
switch (codepage) {
|
if (!escapeIDT_stat) {
|
||||||
case 932 : return "shift-jis";
|
escapeIDT_stat = {
|
||||||
case 936 : return "gb2312";
|
"re_lf": new RegExp("\n", "g"),
|
||||||
case 949 : return "euc-kr";
|
"re_cr": new RegExp("\r", "g"),
|
||||||
case 950 : return "big5";
|
"re_tab": new RegExp("\t", "g")
|
||||||
case 874 :
|
};
|
||||||
case 1250:
|
|
||||||
case 1251:
|
|
||||||
case 1252:
|
|
||||||
case 1253:
|
|
||||||
case 1254:
|
|
||||||
case 1255:
|
|
||||||
case 1256:
|
|
||||||
case 1257:
|
|
||||||
case 1258: return "windows-" + codepage;
|
|
||||||
default : throw new Error("Unsupported code page.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (str == null) return null;
|
||||||
|
switch (typeof(str)) {
|
||||||
|
case "string": break;
|
||||||
|
case "undefined": return null;
|
||||||
|
default: try { str = str.toString(); } catch (err) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.replace(escapeIDT_stat.re_lf, "\\n").replace(escapeIDT_stat.re_cr, "\\r").replace(escapeIDT_stat.re_tab, "\\t");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var unescapeIDT_stat = null;
|
||||||
|
function unescapeIDT(str)
|
||||||
|
{
|
||||||
|
if (!unescapeIDT_stat) {
|
||||||
|
unescapeIDT_stat = {
|
||||||
|
"re_lf": new RegExp("\\\\n", "g"),
|
||||||
|
"re_cr": new RegExp("\\\\r", "g"),
|
||||||
|
"re_tab": new RegExp("\\\\t", "g")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str == null) return null;
|
||||||
|
switch (typeof(str)) {
|
||||||
|
case "string": break;
|
||||||
|
case "undefined": return null;
|
||||||
|
default: try { str = str.toString(); } catch (err) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.replace(unescapeIDT_stat.re_lf, "\n").replace(unescapeIDT_stat.re_cr, "\r").replace(unescapeIDT_stat.re_tab, "\t");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -53,7 +74,7 @@ function IDT(path)
|
|||||||
|
|
||||||
dat.Open();
|
dat.Open();
|
||||||
try {
|
try {
|
||||||
// IDT is text file, uses CRLF line breaks and Windows 1252 header.
|
// IDT is text file, uses MSDOS line breaks and Windows 1252 header.
|
||||||
dat.Type = adTypeText;
|
dat.Type = adTypeText;
|
||||||
dat.LineSeparator = adCRLF;
|
dat.LineSeparator = adCRLF;
|
||||||
dat.Charset = "windows-1252";
|
dat.Charset = "windows-1252";
|
||||||
@ -63,7 +84,7 @@ function IDT(path)
|
|||||||
|
|
||||||
var parseRow = function(row) {
|
var parseRow = function(row) {
|
||||||
for (var col in row)
|
for (var col in row)
|
||||||
row[col] = CRLF2LF(_unC(row[col]));
|
row[col] = CRLF2LF(unescapeIDT(row[col]));
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,32 +114,76 @@ function IDT(path)
|
|||||||
dat.Charset = CodePageToId(this.codepage);
|
dat.Charset = CodePageToId(this.codepage);
|
||||||
|
|
||||||
// Skip header.
|
// Skip header.
|
||||||
dat.ReadText(adReadLine);
|
dat.SkipLine();
|
||||||
dat.ReadText(adReadLine);
|
dat.SkipLine();
|
||||||
dat.ReadText(adReadLine);
|
dat.SkipLine();
|
||||||
|
|
||||||
// Parse data and build associative array.
|
// Parse data and build associative array.
|
||||||
this.data = new Array();
|
this.data = new Array();
|
||||||
|
this.linenum = new Array();
|
||||||
|
var linenum = 4;
|
||||||
while (!dat.EOS) {
|
while (!dat.EOS) {
|
||||||
line = parseRow(dat.ReadText(adReadLine).split("\t"));
|
line = parseRow(dat.ReadText(adReadLine).split("\t"));
|
||||||
var key = new Array();
|
var key = new Array();
|
||||||
for (var i in this.key)
|
for (var i in this.key)
|
||||||
key.push(line[this.key[i]]);
|
key.push(line[this.key[i]]);
|
||||||
this.data[key] = line;
|
this.data[key] = line;
|
||||||
|
this.linenum[key] = linenum++;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
dat.Close();
|
dat.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
IDT.prototype.save = function(path)
|
||||||
|
{
|
||||||
|
// Build output IDT file in memory.
|
||||||
|
var dat = WScript.CreateObject("ADODB.Stream");
|
||||||
|
dat.Open();
|
||||||
|
try {
|
||||||
|
// IDT is text file, uses MSDOS line breaks, and specific encoding (optional).
|
||||||
|
dat.Type = adTypeText;
|
||||||
|
dat.LineSeparator = adCRLF;
|
||||||
|
if ("codepage" in this)
|
||||||
|
dat.Charset = CodePageToId(this.codepage);
|
||||||
|
|
||||||
|
var buildRow = function(row) {
|
||||||
|
for (var col in row)
|
||||||
|
row[col] = escapeIDT(LF2CRLF(row[col]));
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write header.
|
||||||
|
dat.WriteText(buildRow(this.columns).join("\t"), adWriteLine);
|
||||||
|
dat.WriteText(buildRow(this.types ).join("\t"), adWriteLine);
|
||||||
|
var meta = new Array();
|
||||||
|
if (WScript.Arguments.Named.Exists("CP"))
|
||||||
|
meta.push(WScript.Arguments.Named("CP"));
|
||||||
|
meta.push(this.table);
|
||||||
|
for (var key in this.key)
|
||||||
|
meta.push(this.columns[this.key[key]]);
|
||||||
|
dat.WriteText(buildRow(meta).join("\t"), adWriteLine);
|
||||||
|
|
||||||
|
// Save data.
|
||||||
|
for (var key in this.data)
|
||||||
|
dat.WriteText(buildRow(this.data[key]).join("\t"), adWriteLine);
|
||||||
|
|
||||||
|
// Save to file.
|
||||||
|
dat.SaveToFile(path, adSaveCreateOverWrite);
|
||||||
|
} finally {
|
||||||
|
dat.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*@end @*/
|
/*@end @*/
|
||||||
|
|
||||||
// SIG // Begin signature block
|
// SIG // Begin signature block
|
||||||
// SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
|
// SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
|
||||||
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
|
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
|
||||||
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
|
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
|
||||||
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFM8VLy9MohNO
|
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFDK3v7xPfQA4
|
||||||
// SIG // CzcQIdkRVyOGdiKcoIISyDCCA+4wggNXoAMCAQICEH6T
|
// SIG // KZZoKH2KE80Twx3HoIISyDCCA+4wggNXoAMCAQICEH6T
|
||||||
// SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
|
// SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
|
||||||
// SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
|
// SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
|
||||||
// SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
|
// SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
|
||||||
@ -272,30 +337,30 @@ function IDT(path)
|
|||||||
// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
|
// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
|
||||||
// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
|
// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
|
||||||
// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
|
// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
|
||||||
// SIG // DQEJBDEWBBTfJgGHRKQ2tinqe14PycjEqCboeTANBgkq
|
// SIG // DQEJBDEWBBT3K5DzXHaaaztTUWYcKscHz5goHTANBgkq
|
||||||
// SIG // hkiG9w0BAQEFAASCAQAdZIIOXCs3tEP8LMe5TFe9UL1d
|
// SIG // hkiG9w0BAQEFAASCAQBCIQ7y8ZVmNZke0OJsfe38h/25
|
||||||
// SIG // A+9n5HmR9CglRlSImbMohrztrWc2aSZ/G3ITRUdsszHV
|
// SIG // VCuB1bCSqiqF7+el2gXbKcQSMSpbF+PqG6HjtzMiFncJ
|
||||||
// SIG // smqtKGN6Ci6nosFuvrMdRLIqx6xQt/DpBTPPMd0VARGJ
|
// SIG // myApTJ+AyBh8ScoRwa+XoOeIV+TPwW2UKy1FUUJ7TAi7
|
||||||
// SIG // uR6sZP77IR0zoLnIKxhW7dZe3GEM5sZbuHE0xWOb+ZVB
|
// SIG // /R7LhYq2xuhcAt6S0kxXy/qDJhhhPSXovi1d1dlNHINT
|
||||||
// SIG // +5GNoXiCZLN8YO2P+QOrG0csrcL21sZUP1PLYHCUTjt3
|
// SIG // wPy9yPeTqD8eSug3xYvt6rsKtQEqJyITIjeU4YIQWDDw
|
||||||
// SIG // 9Mz/0WfSh8Y5YE/LKeFFrx6xWZRPzQOk9pnxO/oQUjkS
|
// SIG // UfdCLhybrtbvyZ881KICrkol/u3DzPF6L9CiHayFYXUO
|
||||||
// SIG // orbbKtB7X0eSWY+tQBwEblFTlxZpVQZYjzI6o3jHN5xy
|
// SIG // ToJOGPiGOAedHLWFpFG0QdYZvQogtzZcYuFtZWbTx/ud
|
||||||
// SIG // 7ILoVfXXoI/dJi83/WSuK8p4IIWR3Z050SWjpdRsSpja
|
// SIG // SSXr5BOydkUZ0qjAQoIWuUZbdhGfPoVGQOPUzQVChKYj
|
||||||
// SIG // QPqiM5NjoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
|
// SIG // yn/1DQrfoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
|
||||||
// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
||||||
// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
||||||
// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
||||||
// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
|
// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
|
||||||
// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
||||||
// SIG // hvcNAQkFMQ8XDTE2MDkxNTA5NTQxNlowIwYJKoZIhvcN
|
// SIG // hvcNAQkFMQ8XDTE2MDkxNjEyMzczMlowIwYJKoZIhvcN
|
||||||
// SIG // AQkEMRYEFOYsLSnDfzdhw/4I8pCP0bgfeIz9MA0GCSqG
|
// SIG // AQkEMRYEFHa81Osey4h4aGVWL2y16ek6c50BMA0GCSqG
|
||||||
// SIG // SIb3DQEBAQUABIIBAJqxWik7hDX5hTBagi4lQlhzhvTA
|
// SIG // SIb3DQEBAQUABIIBAIyk3446yLyAYUB/wxL7SYuRdyBQ
|
||||||
// SIG // y/771WsTQ/zKHfcxmS4ArMbZuuabEMnit58NmX7FAzij
|
// SIG // zVPGxWbW73lgTAPzWMqWVtkEOPEe1z6T1us5Ss9OFQ8g
|
||||||
// SIG // U7I+i/bnLl/PArICQ/CSUAG6gfyQY02hMdq82zdsX5yd
|
// SIG // P3VbDUfvIxNA2q0a2Z+GgS8tyrlQK1WswLdv11mmVmGa
|
||||||
// SIG // me13e/4YHxSigRnr+k90BbvkKRbdEWgRgxLMhe/WAZ/W
|
// SIG // c4+FG5pZu0KEHkzAhTfq6H6DPg+fz46OTCyxYaNIYzHp
|
||||||
// SIG // wM7VucTmX4MpcX5eUa85rsUkLMicl2dpGBV8X1cZaA79
|
// SIG // azs8tyylmjFS9jEo57Fo+Px23ISqEmBsGVx8vEMY0+N7
|
||||||
// SIG // Tv3vpQPiXQ2OMr+Mew6ZL687pYVxOLgnG4WYNZxopoeG
|
// SIG // UOh1sVj8XTHrZi9DHAvs+JX1o5XcYW+9tRiQshrXgba6
|
||||||
// SIG // 9n/wZL0iHWQSxB5sQCyEBztGxDjCxKGKyy9XSVzXC3L+
|
// SIG // QVSb21e5G7lPMPWD1tGLfbCqKhDYqHFCy5RnQbfYaWTh
|
||||||
// SIG // 0Ax68XmDRzh0ntkIo3oPCQscaVEgh8PI0ZwlY66u1phb
|
// SIG // ZnjfmfQ9+/2MWbRdFNqscheuMcasYaEQWFsTiMV/p7D6
|
||||||
// SIG // BtAzkCM=
|
// SIG // MP2TGpo=
|
||||||
// SIG // End signature block
|
// SIG // End signature block
|
||||||
|
207
MSI.wsf
207
MSI.wsf
@ -458,15 +458,95 @@
|
|||||||
</job>
|
</job>
|
||||||
<job id="IDT2PO">
|
<job id="IDT2PO">
|
||||||
<runtime>
|
<runtime>
|
||||||
<description>Extract strings to translate by comparing two IDT files.</description>
|
<description>Extract strings to translate. If already translated IDT file is available, extract translations of matching rows (by IDT key column(s)).</description>
|
||||||
<unnamed name="<source.idt>" helpstring="Original IDT file" required="true"/>
|
|
||||||
<unnamed name="<destination.idt>" helpstring="Translated IDT file" required="true"/>
|
|
||||||
<unnamed name="<output.po>" helpstring="Output PO file" required="true"/>
|
<unnamed name="<output.po>" helpstring="Output PO file" required="true"/>
|
||||||
|
<unnamed name="<source.idt>" helpstring="Original IDT file" required="true"/>
|
||||||
|
<unnamed name="<destination.idt>" helpstring="Translated IDT file" required="false"/>
|
||||||
<named name="L" helpstring="Language identifier" type="string" required="false"/>
|
<named name="L" helpstring="Language identifier" type="string" required="false"/>
|
||||||
</runtime>
|
</runtime>
|
||||||
<reference object="ADODB.Stream"/>
|
<reference object="ADODB.Stream"/>
|
||||||
<reference object="Scripting.FileSystemObject"/>
|
<reference object="Scripting.FileSystemObject"/>
|
||||||
<script language="JScript" src="IDT.js"/>
|
<script language="JScript" src="IDT.js"/>
|
||||||
|
<script language="JScript" src="PO.js"/>
|
||||||
|
<script language="JScript" src="String.js"/>
|
||||||
|
<script language="JScript"><![CDATA[
|
||||||
|
if (WScript.Arguments.Unnamed.Length < 2) {
|
||||||
|
WScript.Arguments.ShowUsage();
|
||||||
|
WScript.Quit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var
|
||||||
|
fso = WScript.CreateObject("Scripting.FileSystemObject"),
|
||||||
|
po_path = WScript.Arguments.Unnamed(0);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Open and parse IDT file(s).
|
||||||
|
var
|
||||||
|
idt_src_path = WScript.Arguments.Unnamed(1),
|
||||||
|
idt_src = new IDT(idt_src_path),
|
||||||
|
idt_dst;
|
||||||
|
|
||||||
|
if (WScript.Arguments.Unnamed.Length >= 3) {
|
||||||
|
idt_dst = new IDT(WScript.Arguments.Unnamed(2));
|
||||||
|
|
||||||
|
// IDT files must represent identical table.
|
||||||
|
if (idt_src.columns.toString() != idt_dst.columns.toString() ||
|
||||||
|
idt_src.types .toString() != idt_dst.types .toString() ||
|
||||||
|
idt_src.table != idt_dst.table ||
|
||||||
|
idt_src.key .toString() != idt_dst.key .toString())
|
||||||
|
throw new Error("IDT files are not compatible.");
|
||||||
|
} else
|
||||||
|
idt_dst = null;
|
||||||
|
|
||||||
|
var po = new POCatalog();
|
||||||
|
|
||||||
|
// Add header.
|
||||||
|
po.push("",
|
||||||
|
"MIME-Version: 1.0\n" +
|
||||||
|
"Content-Type: text/plain; charset=" + po.charset + "\n" +
|
||||||
|
"Content-Transfer-Encoding: 8bit\n" +
|
||||||
|
(WScript.Arguments.Named.Exists("L") ? "Language: "+ WScript.Arguments.Named("L") +"\n" : ""), false);
|
||||||
|
|
||||||
|
// Build translations.
|
||||||
|
for (var key in idt_src.data) {
|
||||||
|
if (idt_dst != null && (key in idt_dst.data)) {
|
||||||
|
// We found a record in both IDT files.
|
||||||
|
for (var col in idt_src.types)
|
||||||
|
if (idt_src.types[col].charAt(0).toUpperCase() == "L" && idt_src.data[key][col] != "")
|
||||||
|
po.push(idt_src.data[key][col], idt_dst.data[key][col], false, "#: " + idt_src_path + ":" + idt_src.linenum[key]);
|
||||||
|
} else {
|
||||||
|
// The record is available in the source IDT file only (or there is no destination IDT).
|
||||||
|
for (var col in idt_src.types)
|
||||||
|
if (idt_src.types[col].charAt(0).toUpperCase() == "L" && idt_src.data[key][col] != "")
|
||||||
|
po.push(idt_src.data[key][col], "", false, "#: " + idt_src_path + ":" + idt_src.linenum[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save to file.
|
||||||
|
po.save(po_path);
|
||||||
|
} catch (err) {
|
||||||
|
// In case of error, delete output file.
|
||||||
|
if (fso.FileExists(po_path))
|
||||||
|
fso.DeleteFile(po_path);
|
||||||
|
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
WScript.Quit(0);
|
||||||
|
]]></script>
|
||||||
|
</job>
|
||||||
|
<job id="IDTTranslate">
|
||||||
|
<runtime>
|
||||||
|
<description>Translate IDT file.</description>
|
||||||
|
<unnamed name="<destination.idt>" helpstring="Translated IDT file" required="true"/>
|
||||||
|
<unnamed name="<source.idt>" helpstring="Original IDT file" required="true"/>
|
||||||
|
<unnamed name="<catalogue.po>" helpstring="PO catalog file with translations" required="true"/>
|
||||||
|
<named name="CP" helpstring="Output code page" type="string" required="false"/>
|
||||||
|
</runtime>
|
||||||
|
<reference object="ADODB.Stream"/>
|
||||||
|
<reference object="Scripting.FileSystemObject"/>
|
||||||
|
<script language="JScript" src="IDT.js"/>
|
||||||
|
<script language="JScript" src="PO.js"/>
|
||||||
<script language="JScript" src="String.js"/>
|
<script language="JScript" src="String.js"/>
|
||||||
<script language="JScript"><![CDATA[
|
<script language="JScript"><![CDATA[
|
||||||
if (WScript.Arguments.Unnamed.Length < 3) {
|
if (WScript.Arguments.Unnamed.Length < 3) {
|
||||||
@ -475,77 +555,30 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
var
|
var
|
||||||
fso = WScript.CreateObject("Scripting.FileSystemObject"),
|
fso = WScript.CreateObject("Scripting.FileSystemObject"),
|
||||||
po_path = WScript.Arguments.Unnamed(2);
|
idt_dst_path = WScript.Arguments.Unnamed(0);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Open and parse IDT files.
|
// Open and parse source IDT file and PO catalogue.
|
||||||
var
|
var
|
||||||
idt_src = new IDT(WScript.Arguments.Unnamed(0)),
|
idt_src = new IDT(WScript.Arguments.Unnamed(1)),
|
||||||
idt_dst = new IDT(WScript.Arguments.Unnamed(1));
|
po = new POCatalog(WScript.Arguments.Unnamed(2));
|
||||||
|
|
||||||
// IDT files must represent identical table.
|
// Translate records.
|
||||||
if (idt_src.columns.toString() != idt_dst.columns.toString() ||
|
|
||||||
idt_src.types .toString() != idt_dst.types .toString() ||
|
|
||||||
idt_src.table != idt_dst.table ||
|
|
||||||
idt_src.key .toString() != idt_dst.key .toString())
|
|
||||||
throw new Error("IDT files are not compatible.");
|
|
||||||
|
|
||||||
// Build translations.
|
|
||||||
var trans = new Array();
|
|
||||||
for (var key in idt_src.data) {
|
for (var key in idt_src.data) {
|
||||||
if (key in idt_dst.data) {
|
for (var col in idt_src.types) {
|
||||||
// We found a record in both IDT files.
|
if (idt_src.types[col].charAt(0).toUpperCase() == "L" && idt_src.data[key][col] != "")
|
||||||
for (var col in idt_src.types) {
|
idt_src.data[key][col] = po.translate(idt_src.data[key][col]);
|
||||||
if (idt_src.types[col].charAt(0).toUpperCase() == "L" && idt_src.data[key][col] != "" && idt_dst.data[key][col] != "")
|
|
||||||
trans[idt_src.data[key][col]] = idt_dst.data[key][col];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add header.
|
if (WScript.Arguments.Named.Exists("CP"))
|
||||||
trans[""] =
|
idt_src.codepage = parseInt(WScript.Arguments.Named("CP"), 10);
|
||||||
"MIME-Version: 1.0\n" +
|
idt_src.save(idt_dst_path);
|
||||||
"Content-Type: text/plain; charset=UTF-8\n" +
|
|
||||||
"Content-Transfer-Encoding: 8bit\n" +
|
|
||||||
(WScript.Arguments.Named.Exists("L") ? "Language: "+ WScript.Arguments.Named("L") +"\n" : "");
|
|
||||||
|
|
||||||
// Open PO file in memory.
|
|
||||||
var po_dat_tmp = WScript.CreateObject("ADODB.Stream");
|
|
||||||
po_dat_tmp.Open();
|
|
||||||
try {
|
|
||||||
// PO is text file, uses Unix line breaks and UTF-8 encoding.
|
|
||||||
po_dat_tmp.Type = adTypeText;
|
|
||||||
po_dat_tmp.LineSeparator = adLF;
|
|
||||||
po_dat_tmp.Charset = "utf-8";
|
|
||||||
|
|
||||||
for (var rec in trans) {
|
|
||||||
po_dat_tmp.WriteText("msgid \"" + _PO( rec ) + "\"", adWriteLine);
|
|
||||||
po_dat_tmp.WriteText("msgstr \"" + _PO(trans[rec]) + "\"", adWriteLine);
|
|
||||||
po_dat_tmp.WriteText("", adWriteLine);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write to file without UTF-8 BOM.
|
|
||||||
var po_dat = WScript.CreateObject("ADODB.Stream");
|
|
||||||
po_dat.Type = adTypeBinary;
|
|
||||||
po_dat.Mode = adModeReadWrite;
|
|
||||||
po_dat.Open();
|
|
||||||
try {
|
|
||||||
// Skip BOM (first three bytes) and copy the rest.
|
|
||||||
po_dat_tmp.Position = 3;
|
|
||||||
po_dat_tmp.CopyTo(po_dat);
|
|
||||||
|
|
||||||
po_dat.SaveToFile(po_path, adSaveCreateOverWrite);
|
|
||||||
} finally {
|
|
||||||
po_dat.Close();
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
po_dat_tmp.Close();
|
|
||||||
}
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// In case of error, delete output file.
|
// In case of error, delete output file.
|
||||||
if (fso.FileExists(po_path))
|
if (fso.FileExists(idt_dst_path))
|
||||||
fso.DeleteFile(po_path);
|
fso.DeleteFile(idt_dst_path);
|
||||||
|
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
@ -576,8 +609,8 @@
|
|||||||
** SIG ** MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
|
** SIG ** MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
|
||||||
** SIG ** DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
|
** SIG ** DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
|
||||||
** SIG ** gjcCAR4wJAIBAQQQcAVhGs441BGiowAQS9NQkAIBAAIB
|
** SIG ** gjcCAR4wJAIBAQQQcAVhGs441BGiowAQS9NQkAIBAAIB
|
||||||
** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFPA0F7YWxPGa
|
** SIG ** AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFBFS1Dc0BFx7
|
||||||
** SIG ** aaKC2NHNwBJi9fvvoIISyDCCA+4wggNXoAMCAQICEH6T
|
** SIG ** 6vYeYiyIGC1cPCcBoIISyDCCA+4wggNXoAMCAQICEH6T
|
||||||
** SIG ** 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
|
** SIG ** 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
|
||||||
** SIG ** CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
|
** SIG ** CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
|
||||||
** SIG ** cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
|
** SIG ** cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
|
||||||
@ -731,31 +764,31 @@
|
|||||||
** SIG ** OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
|
** SIG ** OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
|
||||||
** SIG ** MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
|
** SIG ** MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
|
||||||
** SIG ** AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
|
** SIG ** AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
|
||||||
** SIG ** DQEJBDEWBBRlb6oTWBq6akVrgx27UItStgXvjjANBgkq
|
** SIG ** DQEJBDEWBBS+6SF1g2JrK4rp+O3L8qwB8cicdDANBgkq
|
||||||
** SIG ** hkiG9w0BAQEFAASCAQBJaRJTWHHN/P3WZVZb+RtVDElR
|
** SIG ** hkiG9w0BAQEFAASCAQAUJ11IjJjmGNrCZkBHUPzPUspV
|
||||||
** SIG ** bePmsJHgWffw3iOdfRFv6g1lMS8e6N7/DmY0pVMoJKZe
|
** SIG ** 9z7eS08u30ORQ4Rl9otiIg4HJUeEfnQyG2O3w1xmOvwJ
|
||||||
** SIG ** l4THbgsPh6pDF7l473LnDS6B05WLbq9qxFMc8xtDbsLy
|
** SIG ** w1qeAgNttl4+Bj2mUBY8QFLy0HubXMLEPQBDTZ7f/pSg
|
||||||
** SIG ** 6HHWUfVDhlAV519egugXvA3XnDvVlboVgtpI++TVSg90
|
** SIG ** yYE+pSqciCGCYrAFWkucH/ui0S/gfxZnBbM9K1AjRDRW
|
||||||
** SIG ** w2qCOCzDLU1B9K+4f20QQvK0HMJQwND5wBRBj3TXALbM
|
** SIG ** B9oMbRx9yY2URqHachNKZ+LTGBPhVuiLy245Nw4uuLe8
|
||||||
** SIG ** JKZthUbMN6Xc0nCppuv2luHTbE8/GZc6ZAMi0MckfaLf
|
** SIG ** i9bX2kEV8XPUSanko0mtY7h06b4n2b90Buby+4TId9hC
|
||||||
** SIG ** ii1bdx/2gOqQ0s/a06kiLuJpjQcs0cezf1+BsbNAGOcH
|
** SIG ** BerBnjrAbYS0c+Ra3GMURtCbGbAzmg8ixR/kg0IPF1wu
|
||||||
** SIG ** E2uXa6RR5ZhDAdrIJkG38y/5FmNSLixEeD2VpsFXMrM6
|
** SIG ** QNqrhnw2yWJXhnTEZm5HPQVYISl8QkO3TFcfHBxkb/Oe
|
||||||
** SIG ** vN12aXCeoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
|
** SIG ** QRR/NYwboYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
|
||||||
** SIG ** AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
** SIG ** AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
||||||
** SIG ** bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
** SIG ** bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
||||||
** SIG ** bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
** SIG ** bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
||||||
** SIG ** RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
|
** SIG ** RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
|
||||||
** SIG ** MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
** SIG ** MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
||||||
** SIG ** hvcNAQkFMQ8XDTE2MDkxNjA3MjE0OVowIwYJKoZIhvcN
|
** SIG ** hvcNAQkFMQ8XDTE2MDkxNjEyMzgwM1owIwYJKoZIhvcN
|
||||||
** SIG ** AQkEMRYEFIj9RVeKG8Hl8qqiSdovh558lv89MA0GCSqG
|
** SIG ** AQkEMRYEFASd3svY6QexmPrwyTgYM37i8CbtMA0GCSqG
|
||||||
** SIG ** SIb3DQEBAQUABIIBAB1ael8+RXKwxaqXerbsR197Skc1
|
** SIG ** SIb3DQEBAQUABIIBAA5YzP22hUvXvFxoEB/NGRSxYN1r
|
||||||
** SIG ** 30KCTlLd93OVQYBiXZ3uV0HQ9+tQhHEc8+xcBUuT7QX3
|
** SIG ** ruCy/XfTOs6MaML1by7TpUR0ID6NxEibSEiL8LdjKl1F
|
||||||
** SIG ** m8DmdxM8detXbEzT5CqXtsdxF83TxTIU1Ps59KJdsJvM
|
** SIG ** eQUksNz3i7knlXzjbt76IWJIwszJg1kfhvpnBOk+lIW+
|
||||||
** SIG ** OPPyx5S4izd3whRSgGDtsPbocFJYy0YARYEUVGwf4Kc/
|
** SIG ** Yl75P+Is3XO/6B7W2S9zon8qlLg8aK3pjBvq/bCfhqrB
|
||||||
** SIG ** bKqebNaQpegur/Ani2G2ossA/ohV+Nrs/7Y1E7zbXW91
|
** SIG ** jY8IbgTY4nv5onMF4WaC5/MXI6/N2Eb6RWuH2Ywd7xlk
|
||||||
** SIG ** WWjVXf2WLiWgyFHmw6Jf5TaOX7AZBJAvLn2yRBTG5Wsi
|
** SIG ** qiahhIey5Z8IZLuEVAH+PiZV89wf23t/OnmhKcgkNwHU
|
||||||
** SIG ** WDgmvqYimPJYF3fjm0y8jggpQfKqKQd80xrIlE61RmDt
|
** SIG ** 7fe8PUq8H+2LB+kA43JWmgDoy5rjTxgr6u/KGBIn4wVg
|
||||||
** SIG ** 4ratGN7hPoJe+RxndAtJCjLIsvpKKkTiaPDtqum+1yyV
|
** SIG ** +WqvhbRk/EF994ZtE5vMg4lqMTOiUmvJoTJVOZd6pQlL
|
||||||
** SIG ** bSdt9G0=
|
** SIG ** K7/akzU=
|
||||||
</signature>
|
</signature>
|
||||||
</package>
|
</package>
|
||||||
|
454
PO.js
Normal file
454
PO.js
Normal file
@ -0,0 +1,454 @@
|
|||||||
|
/*
|
||||||
|
Copyright 1991-2015 Amebis
|
||||||
|
Copyright 2016 GÉANT
|
||||||
|
|
||||||
|
This file is part of MSIBuild.
|
||||||
|
|
||||||
|
MSIBuild is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
MSIBuild is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with MSIBuild. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*@cc_on @*/
|
||||||
|
/*@if (! @_escapePO_JS__) @*/
|
||||||
|
/*@set @_escapePO_JS__ = true @*/
|
||||||
|
|
||||||
|
|
||||||
|
var escapePO_stat = null;
|
||||||
|
function escapePO(str)
|
||||||
|
{
|
||||||
|
if (!escapePO_stat) {
|
||||||
|
escapePO_stat = {
|
||||||
|
"re_bslash": new RegExp("\\\\", "g"),
|
||||||
|
"re_bs": new RegExp("\b", "g"),
|
||||||
|
"re_ff": new RegExp("\f", "g"),
|
||||||
|
"re_lf": new RegExp("\n", "g"),
|
||||||
|
"re_cr": new RegExp("\r", "g"),
|
||||||
|
"re_tab": new RegExp("\t", "g"),
|
||||||
|
"re_quot": new RegExp("\"", "g")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str == null) return null;
|
||||||
|
switch (typeof(str)) {
|
||||||
|
case "string": break;
|
||||||
|
case "undefined": return null;
|
||||||
|
default: try { str = str.toString(); } catch (err) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.replace(escapePO_stat.re_bslash, "\\\\").replace(escapePO_stat.re_bs, "\\b").replace(escapePO_stat.re_ff, "\\f").replace(escapePO_stat.re_lf, "\\n").replace(escapePO_stat.re_cr, "\\r").replace(escapePO_stat.re_tab, "\\t").replace(escapePO_stat.re_quot, "\\\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var unescapePO_stat = null;
|
||||||
|
function unescapePO(str)
|
||||||
|
{
|
||||||
|
if (!unescapePO_stat) {
|
||||||
|
unescapePO_stat = {
|
||||||
|
"re_bslash": new RegExp("\\\\\\\\", "g"),
|
||||||
|
"re_bs": new RegExp("\\\\b", "g"),
|
||||||
|
"re_ff": new RegExp("\\\\f", "g"),
|
||||||
|
"re_lf": new RegExp("\\\\n", "g"),
|
||||||
|
"re_cr": new RegExp("\\\\r", "g"),
|
||||||
|
"re_tab": new RegExp("\\\\t", "g"),
|
||||||
|
"re_apost": new RegExp("\\\\\\\'", "g"),
|
||||||
|
"re_quot": new RegExp("\\\\\\\"", "g")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str == null) return null;
|
||||||
|
switch (typeof(str)) {
|
||||||
|
case "string": break;
|
||||||
|
case "undefined": return null;
|
||||||
|
default: try { str = str.toString(); } catch (err) { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.replace(unescapePO_stat.re_bslash, "\\").replace(unescapePO_stat.re_bs, "\b").replace(unescapePO_stat.re_ff, "\f").replace(unescapePO_stat.re_lf, "\n").replace(unescapePO_stat.re_cr, "\r").replace(unescapePO_stat.re_tab, "\t").replace(unescapePO_stat.re_apost, "\'").replace(unescapePO_stat.re_quot, "\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function POCatalog()
|
||||||
|
{
|
||||||
|
this.charset = "utf-8";
|
||||||
|
this.data = new Array();
|
||||||
|
|
||||||
|
if (arguments.length) {
|
||||||
|
var
|
||||||
|
path = arguments[0];
|
||||||
|
|
||||||
|
// Open file.
|
||||||
|
var dat = new ActiveXObject("ADODB.Stream");
|
||||||
|
dat.Open();
|
||||||
|
try {
|
||||||
|
// PO catalogue is text file, uses Unix line breaks and UTF-8.
|
||||||
|
dat.Type = adTypeText;
|
||||||
|
dat.LineSeparator = adLF;
|
||||||
|
dat.Charset = this.charset;
|
||||||
|
|
||||||
|
// Load file.
|
||||||
|
dat.LoadFromFile(path);
|
||||||
|
|
||||||
|
// Prepare regular expressions for catalogue parsing.
|
||||||
|
var regexp = {
|
||||||
|
"fuzzy": new RegExp("^\\s*#,\\s*fuzzy", "i"),
|
||||||
|
"comment": new RegExp("^\\s*#", ""),
|
||||||
|
"record": new RegExp("^\\s*(\\w*)\\s*\"(.*)\"\\s*$", "")
|
||||||
|
};
|
||||||
|
|
||||||
|
var getNext = function() {
|
||||||
|
var
|
||||||
|
id = null,
|
||||||
|
rec = new Array();
|
||||||
|
|
||||||
|
while (!dat.EOS) {
|
||||||
|
var
|
||||||
|
s = Trim(dat.ReadText(adReadLine)),
|
||||||
|
m;
|
||||||
|
|
||||||
|
// The line is empty => end of record.
|
||||||
|
if (s == "" && "msgid" in rec)
|
||||||
|
return rec;
|
||||||
|
|
||||||
|
// The record is marked as "fuzzy".
|
||||||
|
if (s.search(regexp.fuzzy) != -1) {
|
||||||
|
rec["fuzzy"] = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Concatenate comments.
|
||||||
|
if (s.search(regexp.comment) != -1) {
|
||||||
|
if ("#" in rec)
|
||||||
|
rec["#"] += s + "\n";
|
||||||
|
else
|
||||||
|
rec["#"] = s + "\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
m = s.match(regexp.record);
|
||||||
|
if (m) {
|
||||||
|
// Record found.
|
||||||
|
if (m[1] != "")
|
||||||
|
id = unescapePO(new String(m[1]));
|
||||||
|
if (id in rec)
|
||||||
|
rec[id] += unescapePO(new String(m[2]));
|
||||||
|
else
|
||||||
|
rec[id] = unescapePO(new String(m[2]));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "msgid" in rec ? rec : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read header record.
|
||||||
|
var rec = getNext();
|
||||||
|
if (rec == null)
|
||||||
|
return;
|
||||||
|
if (rec.msgid == "") {
|
||||||
|
// Parse charset.
|
||||||
|
m = rec.msgstr.match(new RegExp("^\\s*Content-Type\\s*:\\s*([-\\w]+/[-\\w]+)\\s*(;\\s*charset\\s*=\\s*([-\\w]+))?$", "im"));
|
||||||
|
if (m && m.length >= 4) {
|
||||||
|
this.charset = m[3];
|
||||||
|
|
||||||
|
// Rewind and reconfigure code page.
|
||||||
|
dat.Position = 0;
|
||||||
|
dat.Charset = this.charset;
|
||||||
|
|
||||||
|
// Re-read header.
|
||||||
|
rec = getNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load header and all the records.
|
||||||
|
this.push(rec.msgid, rec.msgstr, rec.fuzzy, "#" in rec ? rec["#"] : null);
|
||||||
|
while ((rec = getNext()) != null)
|
||||||
|
this.push(rec.msgid, rec.msgstr, rec.fuzzy, "#" in rec ? rec["#"] : null);
|
||||||
|
} finally {
|
||||||
|
dat.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
POCatalog.prototype.push = function(key, trans, fuzzy, comment)
|
||||||
|
{
|
||||||
|
var rec = {
|
||||||
|
"msgstr" : trans,
|
||||||
|
"fuzzy" : fuzzy ? true : false
|
||||||
|
};
|
||||||
|
if (comment)
|
||||||
|
rec["#"] = comment;
|
||||||
|
|
||||||
|
this.data[key] = rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
POCatalog.prototype.translate = function(key)
|
||||||
|
{
|
||||||
|
if (!(key in this.data)) {
|
||||||
|
// No translation found.
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rec = this.data[key];
|
||||||
|
if (rec.msgstr == "" || rec.fuzzy) {
|
||||||
|
// Translation is blank (untranslated) or fuzzy.
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rec.msgstr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
POCatalog.prototype.save = function(path)
|
||||||
|
{
|
||||||
|
// Open PO file in memory.
|
||||||
|
var dat = new ActiveXObject("ADODB.Stream");
|
||||||
|
dat.Open();
|
||||||
|
try {
|
||||||
|
// PO is text file, uses Unix line breaks and given encoding.
|
||||||
|
dat.Type = adTypeText;
|
||||||
|
dat.LineSeparator = adLF;
|
||||||
|
dat.Charset = this.charset;
|
||||||
|
|
||||||
|
var writeRec = function(key, rec) {
|
||||||
|
if (rec.fuzzy)
|
||||||
|
dat.WriteText("#, fuzzy", adWriteLine);
|
||||||
|
|
||||||
|
if ("#" in rec)
|
||||||
|
dat.WriteText(rec["#"], adWriteLine);
|
||||||
|
|
||||||
|
dat.WriteText("msgid \"" + escapePO(key ) + "\"", adWriteLine);
|
||||||
|
dat.WriteText("msgstr \"" + escapePO(rec.msgstr) + "\"", adWriteLine);
|
||||||
|
dat.WriteText("", adWriteLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write header first.
|
||||||
|
if ("" in this.data)
|
||||||
|
writeRec("", this.data[""]);
|
||||||
|
|
||||||
|
// Write records, skip header.
|
||||||
|
for (var key in this.data) {
|
||||||
|
if (key == "") continue;
|
||||||
|
writeRec(key, this.data[key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.charset.toLowerCase() == "utf-8") {
|
||||||
|
// Write to file without UTF-8 BOM.
|
||||||
|
var dat_nobom = new ActiveXObject("ADODB.Stream");
|
||||||
|
dat_nobom.Type = adTypeBinary;
|
||||||
|
dat_nobom.Mode = adModeReadWrite;
|
||||||
|
dat_nobom.Open();
|
||||||
|
try {
|
||||||
|
// Skip BOM (first three bytes) and copy the rest.
|
||||||
|
dat.Position = 3;
|
||||||
|
dat.CopyTo(dat_nobom);
|
||||||
|
|
||||||
|
dat_nobom.SaveToFile(path, adSaveCreateOverWrite);
|
||||||
|
} finally {
|
||||||
|
dat_nobom.Close();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dat.SaveToFile(path, adSaveCreateOverWrite);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
dat.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*@end @*/
|
||||||
|
|
||||||
|
// SIG // Begin signature block
|
||||||
|
// SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
|
||||||
|
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
|
||||||
|
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
|
||||||
|
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFIWWycuo7hWC
|
||||||
|
// SIG // XD4eXBJhT5qNXjhRoIISyDCCA+4wggNXoAMCAQICEH6T
|
||||||
|
// SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
|
||||||
|
// SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
|
||||||
|
// SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
|
||||||
|
// SIG // EwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZp
|
||||||
|
// SIG // Y2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1w
|
||||||
|
// SIG // aW5nIENBMB4XDTEyMTIyMTAwMDAwMFoXDTIwMTIzMDIz
|
||||||
|
// SIG // NTk1OVowXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
||||||
|
// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
||||||
|
// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
||||||
|
// SIG // RzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
||||||
|
// SIG // AQCxrLNJVEuXHBIK2CV5kSJXKm/cuCbEQ3Nrwr8uUFr7
|
||||||
|
// SIG // FMJ2jkMBJUO0oeJF9Oi3e8N0zCLXtJQAAvdN7b+0t0Qk
|
||||||
|
// SIG // a81fRTvRRM5DEnMXgotptCvLmR6schsmTXEfsTHd+1Fh
|
||||||
|
// SIG // AlOmqvVJLAV4RaUvic7nmef+jOJXPz3GktxK+Hsz5HkK
|
||||||
|
// SIG // +/B1iEGc/8UDUZmq12yfk2mHZSmDhcJgFMTIyTsU2sCB
|
||||||
|
// SIG // 8B8NdN6SIqvK9/t0fCfm90obf6fDni2uiuqm5qonFn1h
|
||||||
|
// SIG // 95hxEbziUKFL5V365Q6nLJ+qZSDT2JboyHylTkhE/xni
|
||||||
|
// SIG // RAeSC9dohIBdanhkRc1gRn5UwRN8xXnxycFxAgMBAAGj
|
||||||
|
// SIG // gfowgfcwHQYDVR0OBBYEFF+a9W5czMx0mtTdfe8/2+xM
|
||||||
|
// SIG // gC7dMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYW
|
||||||
|
// SIG // aHR0cDovL29jc3AudGhhd3RlLmNvbTASBgNVHRMBAf8E
|
||||||
|
// SIG // CDAGAQH/AgEAMD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6
|
||||||
|
// SIG // Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVUaW1lc3RhbXBp
|
||||||
|
// SIG // bmdDQS5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDgYD
|
||||||
|
// SIG // VR0PAQH/BAQDAgEGMCgGA1UdEQQhMB+kHTAbMRkwFwYD
|
||||||
|
// SIG // VQQDExBUaW1lU3RhbXAtMjA0OC0xMA0GCSqGSIb3DQEB
|
||||||
|
// SIG // BQUAA4GBAAMJm495739ZMKrvaLX64wkdu0+CBl03X6ZS
|
||||||
|
// SIG // nxaN6hySCURu9W3rWHww6PlpjSNzCxJvR6muORH4KrGb
|
||||||
|
// SIG // sBrDjutZlgCtzgxNstAxpghcKnr84nodV0yoZRjpeUBi
|
||||||
|
// SIG // JZZux8c3aoMhCI5B6t3ZVz8dd0mHKhYGXqY4aiISo1EZ
|
||||||
|
// SIG // g362MIIEozCCA4ugAwIBAgIQDs/0OMj+vzVuBNhqmBsa
|
||||||
|
// SIG // UDANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJVUzEd
|
||||||
|
// SIG // MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xMDAu
|
||||||
|
// SIG // BgNVBAMTJ1N5bWFudGVjIFRpbWUgU3RhbXBpbmcgU2Vy
|
||||||
|
// SIG // dmljZXMgQ0EgLSBHMjAeFw0xMjEwMTgwMDAwMDBaFw0y
|
||||||
|
// SIG // MDEyMjkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMR0wGwYD
|
||||||
|
// SIG // VQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjE0MDIGA1UE
|
||||||
|
// SIG // AxMrU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNl
|
||||||
|
// SIG // cyBTaWduZXIgLSBHNDCCASIwDQYJKoZIhvcNAQEBBQAD
|
||||||
|
// SIG // ggEPADCCAQoCggEBAKJjCzlEuLsjp0RJuw7/ofBhClOT
|
||||||
|
// SIG // sJjbrSwPSsVu/4Y8U1UPFc4EPyv9qZaW2b5heQtbyUyG
|
||||||
|
// SIG // duXgQ0sile7CK0PBn9hotI5AT+6FOLkRxSPyZFjwFTJv
|
||||||
|
// SIG // TlehroikAtcqHs1L4d1j1ReJMluwXplaqJ0oUA4X7pbb
|
||||||
|
// SIG // YTtFUR3PElYLkkf8q672Zj1HrHBy55LnX80QucSDZJQZ
|
||||||
|
// SIG // vSWA4ejSIqXQugJ6oXeTW2XD7hd0vEGGKtwITIySjJEt
|
||||||
|
// SIG // nndEH2jWqHR32w5bMotWizO92WPISZ06xcXqMwvS8aMb
|
||||||
|
// SIG // 9Iu+2bNXizveBKd6IrIkri7HcMW+ToMmCPsLvalPmQjh
|
||||||
|
// SIG // EChyqs0CAwEAAaOCAVcwggFTMAwGA1UdEwEB/wQCMAAw
|
||||||
|
// SIG // FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/
|
||||||
|
// SIG // BAQDAgeAMHMGCCsGAQUFBwEBBGcwZTAqBggrBgEFBQcw
|
||||||
|
// SIG // AYYeaHR0cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29t
|
||||||
|
// SIG // MDcGCCsGAQUFBzAChitodHRwOi8vdHMtYWlhLndzLnN5
|
||||||
|
// SIG // bWFudGVjLmNvbS90c3MtY2EtZzIuY2VyMDwGA1UdHwQ1
|
||||||
|
// SIG // MDMwMaAvoC2GK2h0dHA6Ly90cy1jcmwud3Muc3ltYW50
|
||||||
|
// SIG // ZWMuY29tL3Rzcy1jYS1nMi5jcmwwKAYDVR0RBCEwH6Qd
|
||||||
|
// SIG // MBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTIwHQYD
|
||||||
|
// SIG // VR0OBBYEFEbGaaMOShQe1UzaUmMXP142vA3mMB8GA1Ud
|
||||||
|
// SIG // IwQYMBaAFF+a9W5czMx0mtTdfe8/2+xMgC7dMA0GCSqG
|
||||||
|
// SIG // SIb3DQEBBQUAA4IBAQB4O7SRKgBM8I9iMDd4o4QnB28Y
|
||||||
|
// SIG // st4l3KDUlAOqhk4ln5pAAxzdzuN5yyFoBtq2MrRtv/Qs
|
||||||
|
// SIG // JmMz5ElkbQ3mw2cO9wWkNWx8iRbG6bLfsundIMZxD82V
|
||||||
|
// SIG // dNy2XN69Nx9DeOZ4tc0oBCCjqvFLxIgpkQ6A0RH83Vx2
|
||||||
|
// SIG // bk9eDkVGQW4NsOo4mrE62glxEPwcebSAe6xp9P2ctgwW
|
||||||
|
// SIG // K/F/Wwk9m1viFsoTgW0ALjgNqCmPLOGy9FqpAa8VnCwv
|
||||||
|
// SIG // SRvbIrvD/niUUcOGsYKIXfA9tFGheTMrLnu53CAJE3Hr
|
||||||
|
// SIG // ahlbz+ilMFcsiUk/uc9/yb8+ImhjU5q9aXSsxR08f5Lg
|
||||||
|
// SIG // w7wc2AR1MIIEzjCCA7agAwIBAgIQMHo2eqo+aIGm+U8I
|
||||||
|
// SIG // yzs5ZDANBgkqhkiG9w0BAQsFADB/MQswCQYDVQQGEwJV
|
||||||
|
// SIG // UzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24x
|
||||||
|
// SIG // HzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsx
|
||||||
|
// SIG // MDAuBgNVBAMTJ1N5bWFudGVjIENsYXNzIDMgU0hBMjU2
|
||||||
|
// SIG // IENvZGUgU2lnbmluZyBDQTAeFw0xNTEwMDkwMDAwMDBa
|
||||||
|
// SIG // Fw0xODExMDcyMzU5NTlaMGExCzAJBgNVBAYTAlNJMREw
|
||||||
|
// SIG // DwYDVQQIEwhTbG92ZW5pYTEPMA0GA1UEBxMGS2Ftbmlr
|
||||||
|
// SIG // MRYwFAYDVQQKFA1BbWViaXMgZC5vLm8uMRYwFAYDVQQD
|
||||||
|
// SIG // FA1BbWViaXMgZC5vLm8uMIIBIjANBgkqhkiG9w0BAQEF
|
||||||
|
// SIG // AAOCAQ8AMIIBCgKCAQEAl/LoF3DHaSrIaG1pgBmBwDyl
|
||||||
|
// SIG // Yt7sRvIuoEdGr/yMhV9RfUIft+xsTPVQOAirvgG+KUbc
|
||||||
|
// SIG // E3KMnGH+VuK7Y+vYzRp3dYTLinSQz1NKYAELyTdVzmmY
|
||||||
|
// SIG // mU3LX764yk3ABtSZsZwPoiCy+TXE9ZsCkugB2c7Qp9N/
|
||||||
|
// SIG // O9EjjQDRwZlUa3nLoY96Y3qNPwkCn04ppYiqPeIXTRz8
|
||||||
|
// SIG // XBLs4Nl/bD9wymEuNSV75vzobJ7BUYQwRU7lmNL2SwRY
|
||||||
|
// SIG // ENaf0DpdiyFLBsNafHjGYiXQHgNxZUBpj7OoRDNBvMQY
|
||||||
|
// SIG // L+LM8OrjhGIK1uGL5CqBD/p81ebeFsAZVxg9hrgnkPVQ
|
||||||
|
// SIG // w77U0LZw8wIDAQABo4IBYjCCAV4wCQYDVR0TBAIwADAO
|
||||||
|
// SIG // BgNVHQ8BAf8EBAMCB4AwKwYDVR0fBCQwIjAgoB6gHIYa
|
||||||
|
// SIG // aHR0cDovL3N2LnN5bWNiLmNvbS9zdi5jcmwwZgYDVR0g
|
||||||
|
// SIG // BF8wXTBbBgtghkgBhvhFAQcXAzBMMCMGCCsGAQUFBwIB
|
||||||
|
// SIG // FhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEF
|
||||||
|
// SIG // BQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAT
|
||||||
|
// SIG // BgNVHSUEDDAKBggrBgEFBQcDAzBXBggrBgEFBQcBAQRL
|
||||||
|
// SIG // MEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zdi5zeW1jZC5j
|
||||||
|
// SIG // b20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zdi5zeW1jYi5j
|
||||||
|
// SIG // b20vc3YuY3J0MB8GA1UdIwQYMBaAFJY7U/B5M5evfYPv
|
||||||
|
// SIG // LivMyreGHnJmMB0GA1UdDgQWBBT3B72WgJotdMR/DD09
|
||||||
|
// SIG // J93UkAqfzDANBgkqhkiG9w0BAQsFAAOCAQEAinEvQC+1
|
||||||
|
// SIG // yttKEsqAjt2YufpYlul3OQH17YKbUy4AAiKiAsUXWfTu
|
||||||
|
// SIG // XRVdkT6CrEYcHyOLaHfe36jVHw8vLIiR2cyEcB3vweyr
|
||||||
|
// SIG // JnNpt+Za4I/XZMoG/vvCJmSltOj8C/7PRKWklGgynPNe
|
||||||
|
// SIG // HI8+0d1vLzRtK77hFeV7CIMIfnpoYThJKTSLxdr0kn+j
|
||||||
|
// SIG // M8otfdLN2aDonnxe0Mf+2rkrX8AFIIHPpIXZj2X2VEmk
|
||||||
|
// SIG // ZdyFINgI+KlJVQY/RY9BFMM2htLAIkNcDP1QVzFajhGH
|
||||||
|
// SIG // yj+C+UtZQf5PceGYtJHNeq3cm6omjnEfyzi8/NwYFlkW
|
||||||
|
// SIG // hvzJEH3woPqKgUramNFFLD0W5zCCBVkwggRBoAMCAQIC
|
||||||
|
// SIG // ED141/l2SWCyYX308B7KhiowDQYJKoZIhvcNAQELBQAw
|
||||||
|
// SIG // gcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
|
||||||
|
// SIG // biwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3Qg
|
||||||
|
// SIG // TmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDYgVmVyaVNp
|
||||||
|
// SIG // Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
||||||
|
// SIG // eTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMyBQdWJs
|
||||||
|
// SIG // aWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
||||||
|
// SIG // eSAtIEc1MB4XDTEzMTIxMDAwMDAwMFoXDTIzMTIwOTIz
|
||||||
|
// SIG // NTk1OVowfzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
||||||
|
// SIG // bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h
|
||||||
|
// SIG // bnRlYyBUcnVzdCBOZXR3b3JrMTAwLgYDVQQDEydTeW1h
|
||||||
|
// SIG // bnRlYyBDbGFzcyAzIFNIQTI1NiBDb2RlIFNpZ25pbmcg
|
||||||
|
// SIG // Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
||||||
|
// SIG // AQCXgx4AFq8ssdIIxNdok1FgHnH24ke021hNI2JqtL9a
|
||||||
|
// SIG // G1H3ow0Yd2i72DarLyFQ2p7z518nTgvCl8gJcJOp2lwN
|
||||||
|
// SIG // TqQNkaC07BTOkXJULs6j20TpUhs/QTzKSuSqwOg5q1PM
|
||||||
|
// SIG // IdDMz3+b5sLMWGqCFe49Ns8cxZcHJI7xe74xLT1u3LWZ
|
||||||
|
// SIG // Qp9LYZVfHHDuF33bi+VhiXjHaBuvEXgamK7EVUdT2bMy
|
||||||
|
// SIG // 1qEORkDFl5KK0VOnmVuFNVfT6pNiYSAKxzB3JBFNYoO2
|
||||||
|
// SIG // untogjHuZcrf+dWNsjXcjCtvanJcYISc8gyUXsBWUgBI
|
||||||
|
// SIG // zNP4pX3eL9cT5DiohNVGuBOGwhud6lo43ZvbAgMBAAGj
|
||||||
|
// SIG // ggGDMIIBfzAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUH
|
||||||
|
// SIG // MAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/
|
||||||
|
// SIG // BAgwBgEB/wIBADBsBgNVHSAEZTBjMGEGC2CGSAGG+EUB
|
||||||
|
// SIG // BxcDMFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3lt
|
||||||
|
// SIG // YXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6
|
||||||
|
// SIG // Ly93d3cuc3ltYXV0aC5jb20vcnBhMDAGA1UdHwQpMCcw
|
||||||
|
// SIG // JaAjoCGGH2h0dHA6Ly9zMS5zeW1jYi5jb20vcGNhMy1n
|
||||||
|
// SIG // NS5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
|
||||||
|
// SIG // BwMDMA4GA1UdDwEB/wQEAwIBBjApBgNVHREEIjAgpB4w
|
||||||
|
// SIG // HDEaMBgGA1UEAxMRU3ltYW50ZWNQS0ktMS01NjcwHQYD
|
||||||
|
// SIG // VR0OBBYEFJY7U/B5M5evfYPvLivMyreGHnJmMB8GA1Ud
|
||||||
|
// SIG // IwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
|
||||||
|
// SIG // SIb3DQEBCwUAA4IBAQAThRoeaak396C9pK9+HWFT/p2M
|
||||||
|
// SIG // XgymdR54FyPd/ewaA1U5+3GVx2Vap44w0kRaYdtwb9oh
|
||||||
|
// SIG // BcIuc7pJ8dGT/l3JzV4D4ImeP3Qe1/c4i6nWz7s1LzNY
|
||||||
|
// SIG // qJJW0chNO4LmeYQW/CiwsUfzHaI+7ofZpn+kVqU/rYQu
|
||||||
|
// SIG // Kd58vKiqoz0EAeq6k6IOUCIpF0yH5DoRX9akJYmbBWsv
|
||||||
|
// SIG // tMkBTCd7C6wZBSKgYBU/2sn7TUyP+3Jnd/0nlMe6NQ6I
|
||||||
|
// SIG // Sf6N/SivShK9DbOXBd5EDBX6NisD3MFQAfGhEV0U5eK9
|
||||||
|
// SIG // J0tUviuEXg+mw3QFCu+Xw4kisR93873NQ9TxTKk/tYuE
|
||||||
|
// SIG // r2Ty0BQhMYIEPDCCBDgCAQEwgZMwfzELMAkGA1UEBhMC
|
||||||
|
// SIG // VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9u
|
||||||
|
// SIG // MR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3Jr
|
||||||
|
// SIG // MTAwLgYDVQQDEydTeW1hbnRlYyBDbGFzcyAzIFNIQTI1
|
||||||
|
// SIG // NiBDb2RlIFNpZ25pbmcgQ0ECEDB6NnqqPmiBpvlPCMs7
|
||||||
|
// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
|
||||||
|
// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
|
||||||
|
// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
|
||||||
|
// SIG // DQEJBDEWBBRu3FF9mP0st28sz6ozxdOz3hoXGjANBgkq
|
||||||
|
// SIG // hkiG9w0BAQEFAASCAQAAwzjZxcGwor+hr9BV4ToMMRKE
|
||||||
|
// SIG // Ev3JQ8MzzA//8Mcc7hMu8tk6EwmsyvvujWKd35ZDlI6z
|
||||||
|
// SIG // 5+gL+efrY/oYgu+SMSFkPUEx0rNxophdRqA/kBJ3mYjI
|
||||||
|
// SIG // iWjY4d5PMDMQLRZcIAEm/nHZVwVw8TEX4Llpl/YO7ZoG
|
||||||
|
// SIG // /JGnkLyzDvP2HOmKu6zWj69F3ICx6HcTuzBbe8ipW/2Q
|
||||||
|
// SIG // TU+3biVCqw9F664Rx4JELBBz0Vy21HEhEAG4nOLzc0wY
|
||||||
|
// SIG // v+A5aGNKxvT1B6v86+NSwc2BRjthy+tZyY7i3d2mqoXE
|
||||||
|
// SIG // CLtvqlCDhRgmsAEuTriiA1NoTfpTpTqcqEsalbherJGQ
|
||||||
|
// SIG // ZPBwqeopoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
|
||||||
|
// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
||||||
|
// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
||||||
|
// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
||||||
|
// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
|
||||||
|
// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
||||||
|
// SIG // hvcNAQkFMQ8XDTE2MDkxNjEyMzczNFowIwYJKoZIhvcN
|
||||||
|
// SIG // AQkEMRYEFKRwj4RX4soe1EoFkdcak0yL5smOMA0GCSqG
|
||||||
|
// SIG // SIb3DQEBAQUABIIBAB4JKKplFtYkF6cigGfevY4aPAIA
|
||||||
|
// SIG // S1ygZPaknt16zruQbKcqSxs/tGYzgw/Af0s6mpZGv6Gn
|
||||||
|
// SIG // FiyK8aQ+ZxHmNnxQzjEtggHRAuf7uRNwK63RNIDgz35I
|
||||||
|
// SIG // 6vqHQnZjCOlFEUYHPxqjqTJFua6OOoWsmNNpWVc3KO4K
|
||||||
|
// SIG // MzUVyA3wqtxc/N0eq6y5BOkB+WMkrz3Si896uHrwkm2f
|
||||||
|
// SIG // 03qUwPDoJLCdVIrGfzf+ktIEPsCHYPDHk6s/tCI+o4gQ
|
||||||
|
// SIG // OfKUsbzrVwmbdEK4HnNsu/hjCGs6sT2mjgysJWO6kFN/
|
||||||
|
// SIG // K/57qEOBFIjRkzE8WZS/D4OmrUTR552WiiLUb16NOWgy
|
||||||
|
// SIG // J+F5oIk=
|
||||||
|
// SIG // End signature block
|
121
String.js
121
String.js
@ -42,59 +42,6 @@ function _S(str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var _unC_stat = null;
|
|
||||||
function _unC(str)
|
|
||||||
{
|
|
||||||
if (!_unC_stat) {
|
|
||||||
_unC_stat = {
|
|
||||||
"re_bslash": new RegExp("\\\\\\\\", "g"),
|
|
||||||
"re_bs": new RegExp("\\\\b", "g"),
|
|
||||||
"re_ff": new RegExp("\\\\f", "g"),
|
|
||||||
"re_lf": new RegExp("\\\\n", "g"),
|
|
||||||
"re_cr": new RegExp("\\\\r", "g"),
|
|
||||||
"re_tab": new RegExp("\\\\t", "g"),
|
|
||||||
"re_apost": new RegExp("\\\\\\\'", "g"),
|
|
||||||
"re_quot": new RegExp("\\\\\\\"", "g")
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str == null) return null;
|
|
||||||
switch (typeof(str)) {
|
|
||||||
case "string": break;
|
|
||||||
case "undefined": return null;
|
|
||||||
default: try { str = str.toString(); } catch (err) { return null; }
|
|
||||||
}
|
|
||||||
|
|
||||||
return str.replace(_unC_stat.re_bslash, "\\").replace(_unC_stat.re_bs, "\b").replace(_unC_stat.re_ff, "\f").replace(_unC_stat.re_lf, "\n").replace(_unC_stat.re_cr, "\r").replace(_unC_stat.re_tab, "\t").replace(_unC_stat.re_apost, "\'").replace(_unC_stat.re_quot, "\"");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var _PO_stat = null;
|
|
||||||
function _PO(str)
|
|
||||||
{
|
|
||||||
if (!_PO_stat) {
|
|
||||||
_PO_stat = {
|
|
||||||
"re_bslash": new RegExp("\\\\", "g"),
|
|
||||||
"re_bs": new RegExp("\b", "g"),
|
|
||||||
"re_ff": new RegExp("\f", "g"),
|
|
||||||
"re_lf": new RegExp("\n", "g"),
|
|
||||||
"re_cr": new RegExp("\r", "g"),
|
|
||||||
"re_tab": new RegExp("\t", "g"),
|
|
||||||
"re_quot": new RegExp("\"", "g")
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str == null) return null;
|
|
||||||
switch (typeof(str)) {
|
|
||||||
case "string": break;
|
|
||||||
case "undefined": return null;
|
|
||||||
default: try { str = str.toString(); } catch (err) { return null; }
|
|
||||||
}
|
|
||||||
|
|
||||||
return str.replace(_PO_stat.re_bslash, "\\\\").replace(_PO_stat.re_bs, "\\b").replace(_PO_stat.re_ff, "\\f").replace(_PO_stat.re_lf, "\\n").replace(_PO_stat.re_cr, "\\r").replace(_PO_stat.re_tab, "\\t").replace(_PO_stat.re_quot, "\\\"");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var LF2CRLF_stat = null;
|
var LF2CRLF_stat = null;
|
||||||
function LF2CRLF(str)
|
function LF2CRLF(str)
|
||||||
{
|
{
|
||||||
@ -171,14 +118,36 @@ function Time2Str(date)
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function CodePageToId(codepage)
|
||||||
|
{
|
||||||
|
switch (codepage) {
|
||||||
|
case 932 : return "shift-jis";
|
||||||
|
case 936 : return "gb2312";
|
||||||
|
case 949 : return "euc-kr";
|
||||||
|
case 950 : return "big5";
|
||||||
|
case 874 :
|
||||||
|
case 1250:
|
||||||
|
case 1251:
|
||||||
|
case 1252:
|
||||||
|
case 1253:
|
||||||
|
case 1254:
|
||||||
|
case 1255:
|
||||||
|
case 1256:
|
||||||
|
case 1257:
|
||||||
|
case 1258: return "windows-" + codepage;
|
||||||
|
default : throw new Error("Unsupported code page.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*@end @*/
|
/*@end @*/
|
||||||
|
|
||||||
// SIG // Begin signature block
|
// SIG // Begin signature block
|
||||||
// SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
|
// SIG // MIIXmAYJKoZIhvcNAQcCoIIXiTCCF4UCAQExCzAJBgUr
|
||||||
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
|
// SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
|
||||||
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
|
// SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
|
||||||
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFOcRfNpt3sEy
|
// SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFI98xdWTelNz
|
||||||
// SIG // ab6nmkkq0PgWnXbBoIISyDCCA+4wggNXoAMCAQICEH6T
|
// SIG // qT5D7pR+82v8ABwLoIISyDCCA+4wggNXoAMCAQICEH6T
|
||||||
// SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
|
// SIG // 6/t8xk5Z6kuad9QG/DswDQYJKoZIhvcNAQEFBQAwgYsx
|
||||||
// SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
|
// SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
|
||||||
// SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
|
// SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
|
||||||
@ -332,30 +301,30 @@ function Time2Str(date)
|
|||||||
// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
|
// SIG // OWQwCQYFKw4DAhoFAKBwMBAGCisGAQQBgjcCAQwxAjAA
|
||||||
// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
|
// SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
|
||||||
// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
|
// SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3
|
||||||
// SIG // DQEJBDEWBBSzVMOrdxwhJK+dOwU4w0O2BEHrmjANBgkq
|
// SIG // DQEJBDEWBBSgoocOnvchKPKJ1HqukYvKDXVP3jANBgkq
|
||||||
// SIG // hkiG9w0BAQEFAASCAQCAh6joUvFt1ZWhs+CGcsDjQz4N
|
// SIG // hkiG9w0BAQEFAASCAQBIlkezUHnJIWH3uNdR8h/RNyfH
|
||||||
// SIG // eSgv+U3xTwKpI9r3f69EkxkxKHuAdmNw2xJtZkKsYkeU
|
// SIG // aeCGbKLy9bqvoYpvnuyGSv6P/rYumMTv1pdIKIRjU3PW
|
||||||
// SIG // NeQSd/X+BLciIwURdlzy/NM2SLNPtWEgJ3k1/6y9P6iG
|
// SIG // Fb3s1u2MtsfnnEdXexp9R3C4SQYZrBlBsLZfeibafO+O
|
||||||
// SIG // 4vh9mS4XgbcTKUFeNDoZTUi2K4pFG8jt3ZEp0hs/10HP
|
// SIG // qvE6L1xtND+AL4XV4Z3gioek5x3cd7p/3g0lTxl/vwMn
|
||||||
// SIG // yu/xcjrKm7hbfqmpVknCg4VskqYvhO2buKemBunOXeE7
|
// SIG // J7WH8q8ah/cqWRSztgLj7oF9fcn7PlzaYbDSfSWef7LC
|
||||||
// SIG // mI7VuZdb9FxRzLqvTMDZn2JvTEarFQSw/g9YAVQU7mG0
|
// SIG // uFQlrbKrVmt4+C3nb5vDcZR8btbFZobM7JO+qtI8gvEn
|
||||||
// SIG // nfzGHkUupzBn08+0tYMM3Pje46/crpvnFbXKFqnGyp0o
|
// SIG // NVQXB11m8xEQKXPQzb3Tog/nUO7i6l6GuwMJTaa5/rRZ
|
||||||
// SIG // Ul5he1JsbucU6p6Nodw2B+N5HaqKWkqFDUNuw3lgfPOg
|
// SIG // VIQPyd9XNJjBy7CJVaB/dN0QadK00IaAu0kmJiG6IXtR
|
||||||
// SIG // jB3TKX4+oYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
|
// SIG // TaZaWe4PoYICCzCCAgcGCSqGSIb3DQEJBjGCAfgwggH0
|
||||||
// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
// SIG // AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5
|
||||||
// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
// SIG // bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1h
|
||||||
// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
// SIG // bnRlYyBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBIC0g
|
||||||
// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
|
// SIG // RzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBd
|
||||||
// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
// SIG // MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
|
||||||
// SIG // hvcNAQkFMQ8XDTE2MDkxNDA5MjIzN1owIwYJKoZIhvcN
|
// SIG // hvcNAQkFMQ8XDTE2MDkxNjEyMzczN1owIwYJKoZIhvcN
|
||||||
// SIG // AQkEMRYEFJQ8zQKYFKsfkI71sxAyY/H1pqIaMA0GCSqG
|
// SIG // AQkEMRYEFKnxIOZoy8pd+dy2DepQsjHKsRIfMA0GCSqG
|
||||||
// SIG // SIb3DQEBAQUABIIBADlU9yp2QITWzpkjhkdJ6RSW/s8m
|
// SIG // SIb3DQEBAQUABIIBAHwDAeP7+NxrS7/X4F7tdHL8PM7R
|
||||||
// SIG // 6w/2KaDoRmHaqh9l6oUxUBTzyDhNjaMFyH8OKHMG6MEk
|
// SIG // f8lhflQd/vpFn8R+rk+ZrXyY4TkcyLmX4+KF/HswKHnm
|
||||||
// SIG // 0MlgAaFND52lPdffcCUfHAbctbXRqLJ4/DfTYfnGOtpm
|
// SIG // tcQ+Bs0RtkSwpJ9mAFd6AMfbvQ6HenchN+oy0sI3VZ7A
|
||||||
// SIG // diV0uVEda1zfCW3pUtDM/atJ3nOYJFtuTXm2L3Pt0edM
|
// SIG // BV0s2NCD0QY3wthzfQibnecVp0NHsIjAzRG4Ueo8DIL8
|
||||||
// SIG // 6E5oqlpdWLPWyGyOQeEm8cNWm7T/a8At9Blsl4joQ+i8
|
// SIG // 5pvlRkLVudZ5v1T5hiLkEo6fG+MFb5fFjNAaZr05i8RU
|
||||||
// SIG // SguHzcrLfOaoKZu5psWJq3uGP5WBcCEmftVsjha42F+D
|
// SIG // HiLIdGyTu8hMf/iSSTEzkRvPMSPyjda+W/IRQN+08aJp
|
||||||
// SIG // e1hbUOksE+z5bwfS3nrlMTnz5r8bo5zGi46tplzuGWzj
|
// SIG // r9EcazspX5hUDfo/IzJcpuQJLJtBtkXaaBPt/Gzb85MX
|
||||||
// SIG // rtK8crBwMM3AzZLOvwFSQ20Auj/q7UzpgiaPK8fN5GaN
|
// SIG // DfpSu9FxqB+8nMWItQsGxNP5n68nECEfvSGOxjEMmeTh
|
||||||
// SIG // dwvV22k=
|
// SIG // 0raRTkI=
|
||||||
// SIG // End signature block
|
// SIG // End signature block
|
||||||
|
Loading…
x
Reference in New Issue
Block a user