Fix #496, Remove uses of nsICharsetConverterManager
We should confirm that the manually added charsets still work on Firefox 32 once we #502
This commit is contained in:
parent
e576416831
commit
954f8bd001
|
@ -42,40 +42,76 @@ var Zotero_Charset_Menu = new function() {
|
|||
var charsetSeparator = document.createElement("menuseparator");
|
||||
charsetPopup.appendChild(charsetSeparator);
|
||||
|
||||
var charsetConverter = Components.classes["@mozilla.org/charset-converter-manager;1"].
|
||||
getService(Components.interfaces.nsICharsetConverterManager);
|
||||
var charsets = charsetConverter.getEncoderList();
|
||||
|
||||
// add charsets to popup in order
|
||||
while(charsets.hasMore()) {
|
||||
var charset = charsets.getNext();
|
||||
try {
|
||||
var label = charsetConverter.getCharsetTitle(charset);
|
||||
} catch(e) {
|
||||
continue;
|
||||
var charsets = [];
|
||||
|
||||
if(Zotero.platformMajorVersion >= 32) {
|
||||
Components.utils.import("resource://gre/modules/CharsetMenu.jsm");
|
||||
var cmData = CharsetMenu.getData();
|
||||
for each(var charsetList in [cmData.pinnedCharsets, cmData.otherCharsets]) {
|
||||
for each(var charsetInfo in charsetList) {
|
||||
if(charsetInfo.value == "UTF-8") {
|
||||
charsets.push({
|
||||
"label":"Unicode (UTF-8)",
|
||||
"value":"UTF-8"
|
||||
});
|
||||
} else {
|
||||
charsets.push({
|
||||
"label":charsetInfo.label,
|
||||
"value":charsetInfo.value
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var isUTF16 = charset.length >= 6 && charset.substr(0, 6) == "UTF-16";
|
||||
|
||||
// Show UTF-16 element appropriately depending on exportMenu
|
||||
if(isUTF16 && exportMenu == (charset == "UTF-16") ||
|
||||
(!exportMenu && charset == "UTF-32LE")) {
|
||||
continue;
|
||||
} else if(charset == "x-mac-roman") {
|
||||
// use the IANA name
|
||||
charset = "macintosh";
|
||||
} else if(!exportMenu && charset == "UTF-32BE") {
|
||||
label = "Unicode (UTF-32)";
|
||||
charset = "UTF-32";
|
||||
charsets = charsets.concat([
|
||||
{"label":"UTF-16LE", "value":"UTF-16LE"},
|
||||
{"label":"UTF-16BE", "value":"UTF-16BE"},
|
||||
{"label":"Western (IBM-850)", "value":"IBM850"},
|
||||
{"label":"Western (MacRoman)", "value":"macintosh"}
|
||||
]);
|
||||
} else {
|
||||
var charsetConverter = Components.classes["@mozilla.org/charset-converter-manager;1"].
|
||||
getService(Components.interfaces.nsICharsetConverterManager);
|
||||
var ccCharsets = charsetConverter.getEncoderList();
|
||||
// add charsets to popup in order
|
||||
while(ccCharsets.hasMore()) {
|
||||
var charset = ccCharsets.getNext();
|
||||
try {
|
||||
var label = charsetConverter.getCharsetTitle(charset);
|
||||
} catch(e) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var isUTF16 = charset.length >= 6 && charset.substr(0, 6) == "UTF-16";
|
||||
|
||||
// Show UTF-16 element appropriately depending on exportMenu
|
||||
if(isUTF16 && exportMenu == (charset == "UTF-16") ||
|
||||
(!exportMenu && charset == "UTF-32LE")) {
|
||||
continue;
|
||||
} else if(charset == "x-mac-roman") {
|
||||
// use the IANA name
|
||||
charset = "macintosh";
|
||||
} else if(!exportMenu && charset == "UTF-32BE") {
|
||||
label = "Unicode (UTF-32)";
|
||||
charset = "UTF-32";
|
||||
}
|
||||
charsets.push({
|
||||
"label":label,
|
||||
"value":charset
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for(var i=0; i<charsets.length; i++) {
|
||||
var charset = charsets[i].value,
|
||||
label = charsets[i].label;
|
||||
|
||||
// add element
|
||||
var itemNode = document.createElement("menuitem");
|
||||
itemNode.setAttribute("label", label);
|
||||
itemNode.setAttribute("value", charset);
|
||||
|
||||
charsetMap[charset] = itemNode;
|
||||
if(isUTF16 || (label.length > 7 &&
|
||||
if(isUTF16 || (label.length >= 7 &&
|
||||
label.substr(0, 7) == "Western")) {
|
||||
charsetPopup.insertBefore(itemNode, charsetSeparator);
|
||||
} else if(charset == "UTF-8") {
|
||||
|
|
|
@ -583,12 +583,14 @@ Zotero.Translate.IO.Read = function(file, mode) {
|
|||
const encodingRe = /encoding=['"]([^'"]+)['"]/;
|
||||
var m = encodingRe.exec(firstPart);
|
||||
if(m) {
|
||||
// Make sure encoding is valid
|
||||
try {
|
||||
var charconv = Components.classes["@mozilla.org/charset-converter-manager;1"]
|
||||
.getService(Components.interfaces.nsICharsetConverterManager)
|
||||
.getCharsetTitle(m[1]);
|
||||
if(charconv) this._charset = m[1];
|
||||
} catch(e) {}
|
||||
var charconv = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
|
||||
.getService(Components.interfaces.nsIScriptableUnicodeConverter);
|
||||
charconv.charset = m[1];
|
||||
} catch(e) {
|
||||
Zotero.debug("Translate: Ignoring unknown XML encoding "+m[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if(this._charset) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user