commit 954f8bd001a4767f33206b0df70f8b26f8aadc69
parent e576416831d4a2016d11e20fa85ed30239d45beb
Author: Simon Kornblith <simon@simonster.com>
Date: Thu, 19 Jun 2014 17:30:52 -0400
Fix #496, Remove uses of nsICharsetConverterManager
We should confirm that the manually added charsets still work on
Firefox 32 once we #502
Diffstat:
2 files changed, 69 insertions(+), 31 deletions(-)
diff --git a/chrome/content/zotero/charsetMenu.js b/chrome/content/zotero/charsetMenu.js
@@ -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") {
diff --git a/chrome/content/zotero/xpcom/translation/translate_firefox.js b/chrome/content/zotero/xpcom/translation/translate_firefox.js
@@ -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) {