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:
Simon Kornblith 2014-06-19 17:30:52 -04:00
parent e576416831
commit 954f8bd001
2 changed files with 69 additions and 31 deletions

View File

@ -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") {

View File

@ -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) {