70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
|
|
const EXSLT_REGEXP_CID = Components.ID("{18a03189-067b-4978-b4f1-bafe35292ed6}");
|
|
const EXSLT_REGEXP_CONTRACTID = "@mozilla.org/exslt/regexp;1";
|
|
|
|
const NODESET_CONTRACTID = "@mozilla.org/transformiix-nodeset;1";
|
|
|
|
const Ci = Components.interfaces;
|
|
|
|
function txEXSLTRegExFunctions()
|
|
{
|
|
}
|
|
|
|
var SingletonInstance = null;
|
|
|
|
txEXSLTRegExFunctions.prototype = {
|
|
classID: EXSLT_REGEXP_CID,
|
|
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.txIEXSLTRegExFunctions]),
|
|
|
|
classInfo: XPCOMUtils.generateCI({classID: EXSLT_REGEXP_CID,
|
|
contractID: EXSLT_REGEXP_CONTRACTID,
|
|
interfaces: [Ci.txIEXSLTRegExFunctions]}),
|
|
|
|
// txIEXSLTRegExFunctions
|
|
match: function(context, str, regex, flags) {
|
|
var nodeset = Components.classes[NODESET_CONTRACTID]
|
|
.createInstance(Ci.txINodeSet);
|
|
|
|
var re = new RegExp(regex, flags);
|
|
var matches = str.match(re);
|
|
if (matches != null && matches.length > 0) {
|
|
var contextNode = context.contextNode;
|
|
var doc = contextNode.nodeType == Ci.nsIDOMNode.DOCUMENT_NODE ?
|
|
contextNode : contextNode.ownerDocument;
|
|
var docFrag = doc.createDocumentFragment();
|
|
|
|
for (var i = 0; i < matches.length; ++i) {
|
|
var match = matches[i];
|
|
var elem = doc.createElementNS(null, "match");
|
|
var text = doc.createTextNode(match ? match : '');
|
|
elem.appendChild(text);
|
|
docFrag.appendChild(elem);
|
|
nodeset.add(elem);
|
|
}
|
|
}
|
|
|
|
return nodeset;
|
|
},
|
|
|
|
replace: function(str, regex, flags, replace) {
|
|
var re = new RegExp(regex, flags);
|
|
|
|
return str.replace(re, replace);
|
|
},
|
|
|
|
test: function(str, regex, flags) {
|
|
var re = new RegExp(regex, flags);
|
|
|
|
return re.test(str);
|
|
}
|
|
}
|
|
|
|
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([txEXSLTRegExFunctions]);
|