/usr/share/javascript/yui3/highlight-accentfold/highlight-accentfold.js is in libjs-yui3-full 3.5.1-1ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | /*
YUI 3.5.1 (build 22)
Copyright 2012 Yahoo! Inc. All rights reserved.
Licensed under the BSD License.
http://yuilibrary.com/license/
*/
YUI.add('highlight-accentfold', function(Y) {
/**
Adds accent-folding highlighters to `Y.Highlight`.
@module highlight
@submodule highlight-accentfold
**/
/**
@class Highlight
@static
**/
var AccentFold = Y.Text.AccentFold,
Escape = Y.Escape,
EMPTY_OBJECT = {},
Highlight = Y.mix(Y.Highlight, {
// -- Public Static Methods ------------------------------------------------
/**
Accent-folding version of `all()`.
@method allFold
@param {String} haystack String to apply highlighting to.
@param {String|String[]} needles String or array of strings that should be
highlighted.
@param {Object} [options] Options object.
@param {Boolean} [options.startsWith=false] If `true`, matches must be
anchored to the beginning of the string.
@return {String} Escaped and highlighted copy of _haystack_.
@static
**/
allFold: function (haystack, needles, options) {
var template = Highlight._TEMPLATE,
results = [],
startPos = 0,
chunk, i, len, match, result;
options = Y.merge({
// This tells Highlight.all() not to escape HTML, in order to ensure
// usable match offsets. The output of all() is discarded, and we
// perform our own escaping before returning the highlighted string.
escapeHTML: false,
// While the highlight regex operates on the accent-folded strings,
// this replacer will highlight the matched positions in the
// original string.
//
// Note: this implementation doesn't handle multi-character folds,
// like "æ" -> "ae". Doing so correctly would be prohibitively
// expensive both in terms of code size and runtime performance, so
// I've chosen to take the pragmatic route and just not do it at
// all. This is one of many reasons why accent folding is best done
// on the server.
replacer: function (match, p1, foldedNeedle, pos) {
var len;
// Ignore matches inside HTML entities.
if (p1 && !(/\s/).test(foldedNeedle)) {
return match;
}
len = foldedNeedle.length;
results.push([
haystack.substring(startPos, pos), // substring between previous match and this match
haystack.substr(pos, len) // match to be highlighted
]);
startPos = pos + len;
}
}, options || EMPTY_OBJECT);
// Run the highlighter on the folded strings. We don't care about the
// output; our replacer function will build the canonical highlighted
// string, with original accented characters.
Highlight.all(AccentFold.fold(haystack), AccentFold.fold(needles), options);
// Tack on the remainder of the haystack that wasn't highlighted, if
// any.
if (startPos < haystack.length) {
results.push([haystack.substr(startPos)]);
}
// Highlight and escape the string.
for (i = 0, len = results.length; i < len; ++i) {
chunk = Escape.html(results[i][0]);
if ((match = results[i][1])) {
chunk += template.replace(/\{s\}/g, Escape.html(match));
}
results[i] = chunk;
}
return results.join('');
},
/**
Accent-folding version of `start()`.
@method startFold
@param {String} haystack String to apply highlighting to.
@param {String|String[]} needles String or array of strings that should be
highlighted.
@return {String} Escaped and highlighted copy of _haystack_.
@static
**/
startFold: function (haystack, needles) {
return Highlight.allFold(haystack, needles, {startsWith: true});
},
/**
Accent-folding version of `words()`.
@method wordsFold
@param {String} haystack String to apply highlighting to.
@param {String|String[]} needles String or array of strings containing words
that should be highlighted. If a string is passed, it will be split
into words; if an array is passed, it is assumed to have already been
split.
@return {String} Escaped and highlighted copy of _haystack_.
@static
**/
wordsFold: function (haystack, needles) {
var template = Highlight._TEMPLATE;
return Highlight.words(haystack, AccentFold.fold(needles), {
mapper: function (word, needles) {
if (needles.hasOwnProperty(AccentFold.fold(word))) {
return template.replace(/\{s\}/g, Escape.html(word));
}
return Escape.html(word);
}
});
}
});
}, '3.5.1' ,{requires:['highlight-base', 'text-accentfold']});
|