diff --git a/chrome/content/zotero/xpcom/cite.js b/chrome/content/zotero/xpcom/cite.js index eb2c2a35c..76d3474f7 100644 --- a/chrome/content/zotero/xpcom/cite.js +++ b/chrome/content/zotero/xpcom/cite.js @@ -293,13 +293,14 @@ Zotero.Cite.makeFormattedBibliography = function(cslEngine, format) { if(lineSpacing == NaN) throw "Invalid linespacing"; var str; - default xml namespace = ''; with({}); - try { - XML.prettyPrinting = false; - XML.ignoreWhitespace = false; - var xml = new XML(html); + try { + var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"] + .createInstance(Components.interfaces.nsIDOMParser), + doc = parser.parseFromString(html, "application/xml"); - var multiField = !!xml..div.(@class == "csl-left-margin").length(); + var leftMarginDivs = Zotero.Utilities.xpath(doc, '//div[@class="csl-left-margin"]'), + multiField = !!leftMarginDivs.length, + clearEntries = multiField; // One of the characters is usually a period, so we can adjust this down a bit maxOffset = Math.max(1, maxOffset - 2); @@ -307,7 +308,9 @@ Zotero.Cite.makeFormattedBibliography = function(cslEngine, format) { // Force a minimum line height if(lineSpacing <= 1.35) lineSpacing = 1.35; - xml.@style += "line-height: " + lineSpacing + "; "; + var style = doc.documentElement.getAttribute("style"); + if(!style) style = ""; + style += "line-height: " + lineSpacing + "; "; if(hangingIndent) { if (multiField && !secondFieldAlign) { @@ -315,32 +318,28 @@ Zotero.Cite.makeFormattedBibliography = function(cslEngine, format) { } // If only one field, apply hanging indent on root else if (!multiField) { - xml.@style += "padding-left: " + hangingIndent + "em; text-indent:-" + hangingIndent + "em;"; + style += "padding-left: " + hangingIndent + "em; text-indent:-" + hangingIndent + "em;"; } } - var leftMarginDivs = xml..div.(@class == "csl-left-margin"); - var clearEntries = leftMarginDivs.length() > 0; + if(style) doc.documentElement.setAttribute("style", style); // csl-entry - var divs = xml..div.(@class == "csl-entry"); - var num = divs.length(); - var i = 0; - for each(var div in divs) { - var first = i == 0; - var last = i == num - 1; + var divs = Zotero.Utilities.xpath(doc, '//div[@class="csl-entry"]'); + for(var i=0, n=divs.length; i