/* * Copyright (c) 2009, 2010 and 2011 Frank G. Bennett, Jr. All Rights * Reserved. * * The contents of this file are subject to the Common Public * Attribution License Version 1.0 (the “License”); you may not use * this file except in compliance with the License. You may obtain a * copy of the License at: * * http://bitbucket.org/fbennett/citeproc-js/src/tip/LICENSE. * * The License is based on the Mozilla Public License Version 1.1 but * Sections 14 and 15 have been added to cover use of software over a * computer network and provide for limited attribution for the * Original Developer. In addition, Exhibit A has been modified to be * consistent with Exhibit B. * * Software distributed under the License is distributed on an “AS IS” * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is the citation formatting software known as * "citeproc-js" (an implementation of the Citation Style Language * [CSL]), including the original test fixtures and software located * under the ./std subdirectory of the distribution archive. * * The Original Developer is not the Initial Developer and is * __________. If left blank, the Original Developer is the Initial * Developer. * * The Initial Developer of the Original Code is Frank G. Bennett, * Jr. All portions of the code written by Frank G. Bennett, Jr. are * Copyright (c) 2009 and 2010 Frank G. Bennett, Jr. All Rights Reserved. * * Alternatively, the contents of this file may be used under the * terms of the GNU Affero General Public License (the [AGPLv3] * License), in which case the provisions of [AGPLv3] License are * applicable instead of those above. If you wish to allow use of your * version of this file only under the terms of the [AGPLv3] License * and not to allow others to use your version of this file under the * CPAL, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the * [AGPLv3] License. If you do not delete the provisions above, a * recipient may use your version of this file under either the CPAL * or the [AGPLv3] License.” */ var CSL_E4X = function () {}; CSL_E4X.prototype.clean = function (xml) { xml = xml.replace(/<\?[^?]+\?>/g, ""); xml = xml.replace(/]+>/g, ""); xml = xml.replace(/^\s+/g, ""); xml = xml.replace(/\s+$/g, ""); return xml; }; CSL_E4X.prototype.getStyleId = function (myxml) { var text = ""; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); var node = myxml..id; if (node && node.length()) { text = node[0].toString(); } return text; }; CSL_E4X.prototype.children = function (myxml) { return myxml.children(); }; CSL_E4X.prototype.nodename = function (myxml) { var ret = myxml.localName(); return ret; }; CSL_E4X.prototype.attributes = function (myxml) { var ret, attrs, attr, key, xml; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); ret = new Object(); attrs = myxml.attributes(); for each (attr in attrs) { key = "@" + attr.localName(); if (key.slice(0,5) == "@e4x_") { continue; } ret[key] = attr.toString(); } return ret; }; CSL_E4X.prototype.content = function (myxml) { return myxml.toString(); }; CSL_E4X.prototype.namespace = { "xml":"http://www.w3.org/XML/1998/namespace" } CSL_E4X.prototype.numberofnodes = function (myxml) { return myxml.length(); }; CSL_E4X.prototype.getAttributeName = function (attr) { var ret = attr.localName(); return ret; } CSL_E4X.prototype.getAttributeValue = function (myxml,name,namespace) { var xml; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); if (namespace) { var ns = new Namespace(this.namespace[namespace]); var ret = myxml.@ns::[name].toString(); } else { if (name) { var ret = myxml.attribute(name).toString(); } else { var ret = myxml.toString(); } } return ret; } CSL_E4X.prototype.getNodeValue = function (myxml,name) { var xml; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); if (name){ return myxml[name].toString(); } else { return myxml.toString(); } } CSL_E4X.prototype.setAttributeOnNodeIdentifiedByNameAttribute = function (myxml,nodename,attrname,attr,val) { var xml; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); if (attr[0] != '@'){ attr = '@'+attr; } myxml[nodename].(@name == attrname)[0][attr] = val; } CSL_E4X.prototype.deleteNodeByNameAttribute = function (myxml,val) { delete myxml.*.(@name==val)[0]; } CSL_E4X.prototype.deleteAttribute = function (myxml,attr) { delete myxml["@"+attr]; } CSL_E4X.prototype.setAttribute = function (myxml,attr,val) { myxml['@'+attr] = val; } CSL_E4X.prototype.nodeCopy = function (myxml) { return myxml.copy(); } CSL_E4X.prototype.getNodesByName = function (myxml,name,nameattrval) { var xml, ret; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); ret = myxml.descendants(name); if (nameattrval){ ret = ret.(@name == nameattrval); } return ret; } CSL_E4X.prototype.nodeNameIs = function (myxml,name) { var xml; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); if (myxml.localName() && myxml.localName().toString() == name){ return true; } return false; } CSL_E4X.prototype.makeXml = function (myxml) { var xml; XML.ignoreComments = true; XML.ignoreProcessingInstructions = true; XML.ignoreWhitespace = true; XML.prettyPrinting = true; XML.prettyIndent = 2; if ("xml" == typeof myxml){ myxml = myxml.toXMLString(); }; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); xml = new Namespace("http://www.w3.org/XML/1998/namespace"); if (myxml){ myxml = myxml.replace(/\s*<\?[^>]*\?>\s*\n*/g, ""); myxml = new XML(myxml); } else { myxml = new XML(); } return myxml; }; CSL_E4X.prototype.insertChildNodeAfter = function (parent,node,pos,datexml) { var myxml, xml; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); myxml = XML(datexml.toXMLString()); parent.insertChildAfter(node,myxml); delete parent.*[pos]; return parent; }; CSL_E4X.prototype.insertPublisherAndPlace = function(myxml) { default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); for each (var node in myxml..group) { if (node.children().length() === 2) { var twovars = []; for each (var child in node.children()) { if (child.children().length() === 0 ) { twovars.push(child.@variable.toString()); if (child.@suffix.toString() || child.@prefix.toString()) { twovars = []; break; } } } if (twovars.indexOf("publisher") > -1 && twovars.indexOf("publisher-place") > -1) { node["@has-publisher-and-publisher-place"] = "true"; } } } }; CSL_E4X.prototype.addMissingNameNodes = function(myxml) { default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); for each (node in myxml..names) { if ("xml" == typeof node && node.parent().localName() !== "substitute" && node.elements("name").length() === 0) { var name = ; node.appendChild(name); } } }; CSL_E4X.prototype.addInstitutionNodes = function(myxml) { var institution_long, institution_short, name_part, children, node, xml; default xml namespace = "http://purl.org/net/xbiblio/csl"; with({}); for each (node in myxml..names) { if ("xml" == typeof node && node.elements("name").length() > 0) { if (!node.institution.toXMLString()) { institution_long = institution_part = ; node.name += institution_long; node.institution.@delimiter = node.name.@delimiter.toString(); if (node.name.@and.toXMLString()) { node.institution.@and = "text"; } node.institution[0].appendChild(institution_part); for each (var attr in CSL.INSTITUTION_KEYS) { if (node.name.@[attr].toString()) { node.institution['institution-part'][0].@[attr] = node.name.@[attr].toString(); } } for each (var namepartnode in node.name['name-part']) { if (namepartnode.@name.toString() === 'family') { for each (var attr in CSL.INSTITUTION_KEYS) { if (namepartnode.@[attr].toString()) { node.institution['institution-part'][0].@[attr] = namepartnode.@[attr].toString(); } } } } } } } };