341 lines
9.8 KiB
HTML
341 lines
9.8 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>wildstring Source: F:/Git/wildstring/wildstring.js</title>
|
|
|
|
<!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]-->
|
|
<link type="text/css" rel="stylesheet" href="styles/sunlight.default.css">
|
|
|
|
<link type="text/css" rel="stylesheet" href="styles/site.simplex.css">
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div class="navbar navbar-default navbar-fixed-top navbar-inverse">
|
|
<div class="container">
|
|
<div class="navbar-header">
|
|
<a class="navbar-brand" href="index.html">wildstring</a>
|
|
</div>
|
|
<div class="navbar-collapse">
|
|
<ul class="nav navbar-nav">
|
|
|
|
<li class="dropdown">
|
|
<a href="namespaces.list.html" class="dropdown-toggle" data-toggle="dropdown">Namespaces<b class="caret"></b></a>
|
|
<ul class="dropdown-menu ">
|
|
<li><a href="wildstring.html">wildstring</a></li>
|
|
</ul>
|
|
</li>
|
|
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="container">
|
|
<div class="row">
|
|
|
|
|
|
<div class="col-md-12">
|
|
|
|
<div id="main">
|
|
|
|
|
|
<h1 class="page-title">Source: F:/Git/wildstring/wildstring.js</h1>
|
|
|
|
<section>
|
|
<article>
|
|
<pre
|
|
class="sunlight-highlight-javascript linenums">'use strict';
|
|
|
|
/**
|
|
* @namespace wildstring
|
|
* @property {string} wildcard the wildcard to use in your strings, defaults to '*'
|
|
* @property {boolean} caseSensitive whether matches should care about case, defaults to true
|
|
*/
|
|
var wildstring = {
|
|
wildcard: '*',
|
|
caseSensitive: true,
|
|
|
|
/**
|
|
* When a match doesn't continue to the end of the string, this function rolls back to try again with the rest of the string
|
|
* @memberof wildstring
|
|
* @access private
|
|
* @param {string[]} rollbackStrings The list of substrings that appeared prior to the current match
|
|
* @param {string[]} patternSubstrings The matching list of pattens that need to be matched before the current pattern
|
|
*/
|
|
checkRollbackStrings: function (rollbackStrings, patternSubstrings) {
|
|
for (var s = 0; s < rollbackStrings.length; ++s) {
|
|
var currentString = rollbackStrings[s].string; // starting with the rolled back string
|
|
var patternIndex = rollbackStrings[s].index;
|
|
|
|
while (patternIndex < patternSubstrings.length) {
|
|
if (currentString.indexOf(patternSubstrings[patternIndex]) === -1) {
|
|
break;
|
|
}
|
|
|
|
var testString = currentString.substr(1); //remove just one char to retest
|
|
rollbackStrings.push({ string: testString, index: patternIndex });
|
|
if (testString.indexOf(patternSubstrings[patternIndex]) === -1) {
|
|
rollbackStrings.pop();
|
|
}
|
|
|
|
currentString = currentString.substr(
|
|
currentString.indexOf(patternSubstrings[patternIndex]) + patternSubstrings[patternIndex].length
|
|
);
|
|
|
|
patternIndex++;
|
|
while (patternSubstrings[patternIndex] === '') {
|
|
patternIndex++;
|
|
}
|
|
|
|
if (patternIndex >= patternSubstrings.length) {
|
|
if (patternSubstrings[patternSubstrings.length - 1] !== '' &&
|
|
currentString.length > 0) {
|
|
// not ending with a wildcard, we need to backtrack
|
|
break;
|
|
}
|
|
else {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
/**
|
|
* Check if a string matches a pattern
|
|
* @memberof wildstring
|
|
* @param {string} pattern The pattern to match using the configured wildcard
|
|
* @param {string} string The string to test for a match
|
|
*/
|
|
match: function (pattern, string) {
|
|
// if there are no wildcards, must be exact
|
|
if (pattern.indexOf(wildstring.wildcard) === -1) {
|
|
return pattern === string;
|
|
}
|
|
if (!wildstring.caseSensitive) {
|
|
pattern = pattern.toLowerCase();
|
|
string = string.toLowerCase();
|
|
}
|
|
var patternSubstrings = pattern.split(wildstring.wildcard);
|
|
|
|
var patternIndex = 0;
|
|
var currentString = string;
|
|
|
|
// find pattern beginning
|
|
while (patternSubstrings[patternIndex] === '') {
|
|
patternIndex++;
|
|
// if the pattern is just wildcards, it matches
|
|
if (patternIndex === pattern.length) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (patternIndex === 0 && string.indexOf(patternSubstrings[0]) !== 0) {
|
|
// not starting with a wildcard
|
|
return false;
|
|
}
|
|
|
|
var rollbackStrings = [];
|
|
|
|
while (patternIndex < patternSubstrings.length) {
|
|
if (currentString.indexOf(patternSubstrings[patternIndex]) === -1) {
|
|
return wildstring.checkRollbackStrings(rollbackStrings, patternSubstrings);
|
|
}
|
|
|
|
// create a queue of strings to roll back and try again if we fail later
|
|
var testString = currentString.substr(1); //remove just one char to retest
|
|
rollbackStrings.push({ string: testString, index: patternIndex });
|
|
if (testString.indexOf(patternSubstrings[patternIndex]) === -1) {
|
|
rollbackStrings.pop();
|
|
}
|
|
|
|
currentString = currentString.substr(
|
|
currentString.indexOf(patternSubstrings[patternIndex]) + patternSubstrings[patternIndex].length
|
|
);
|
|
|
|
patternIndex++;
|
|
while (patternSubstrings[patternIndex] === '') {
|
|
patternIndex++;
|
|
}
|
|
}
|
|
|
|
if (patternIndex >= patternSubstrings.length &&
|
|
patternSubstrings[patternSubstrings.length - 1] !== '' &&
|
|
currentString.length > 0) {
|
|
// not ending with a wildcard, we need to backtrack
|
|
if (currentString === string) { // this string doesn't even match a little
|
|
return false;
|
|
}
|
|
|
|
return wildstring.checkRollbackStrings(rollbackStrings, patternSubstrings);
|
|
}
|
|
|
|
return true;
|
|
},
|
|
|
|
/**
|
|
* Replace wildcards in a pattern with strings (string interpolation)
|
|
* @memberof wildstring
|
|
* @param {string} pattern The start string, using wildcards as placeholders
|
|
* @param {string|string[]} strings The string or strings to replace the wildcards in the pattern.
|
|
* If you pass a single string, it will replace all the wildcards with the string.
|
|
* If you pass an array of strings, they will replace the wildcards in order from left to right.
|
|
* @throws The number of items in the strings array (if you pass an array) must match the number of wildcards in the pattern string.
|
|
* @throws You need to pass both parameters
|
|
* @throws You need to pass the right types
|
|
*/
|
|
replace: function (pattern, strings) {
|
|
if (pattern === undefined || strings === undefined) {
|
|
throw new Error('wildstring.replace takes the pattern as one parameter and either a string or an array of strings as the second. You didn\'t pass enough parameters.');
|
|
}
|
|
if (typeof(strings) === typeof('')) {
|
|
return pattern.replace(wildstring.wildcard, strings);
|
|
}
|
|
if (!Array.isArray(strings) || typeof(pattern) !== typeof('')) {
|
|
throw new Error('wildstring.replace takes the pattern as one parameter and either a string or an array of strings as the second. Your parameter types are incorrect.');
|
|
}
|
|
if (pattern.indexOf(wildstring.wildcard) === -1) {
|
|
return pattern; // if there are no wildcards, just return the pattern
|
|
}
|
|
var patternSubstrings = pattern.split(wildstring.wildcard);
|
|
if (patternSubstrings.length - 1 !== strings.length) {
|
|
var message = 'There are a different number of wildcards than strings to replace them. You have ' +
|
|
wildstring.wildcard +' wildcards in "' + wildstring.wildcard + '" and ' + wildstring.wildcard +
|
|
' replacement strings.';
|
|
throw new Error(wildstring.replace(message, [ patternSubstrings.length - 1, pattern, strings.length ]));
|
|
}
|
|
|
|
var result = '';
|
|
|
|
for (var s = 0; s < strings.length; ++s) {
|
|
result += patternSubstrings[s] + strings[s];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
};
|
|
|
|
if (typeof(module) !== 'undefined') { module.exports = wildstring; }
|
|
if (typeof(angular) !== 'undefined') { angular.module('wildstring', []).factory('wildstring', function() { return wildstring; }); }
|
|
if (typeof(define) !== 'undefined') { define([], wildstring); }
|
|
</pre>
|
|
</article>
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="clearfix"></div>
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<footer>
|
|
|
|
|
|
<span class="copyright">
|
|
DocStrap Copyright © 2012-2014 The contributors to the JSDoc3 and DocStrap projects.
|
|
</span>
|
|
|
|
<span class="jsdoc-message">
|
|
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.3</a>
|
|
on Mon Apr 24th 2017 using the <a
|
|
href="https://github.com/docstrap/docstrap">DocStrap template</a>.
|
|
</span>
|
|
</footer>
|
|
|
|
<!--<script src="scripts/sunlight.js"></script>-->
|
|
<script src="scripts/docstrap.lib.js"></script>
|
|
<script src="scripts/bootstrap-dropdown.js"></script>
|
|
<script src="scripts/toc.js"></script>
|
|
|
|
<script>
|
|
$( function () {
|
|
$( "[id*='$']" ).each( function () {
|
|
var $this = $( this );
|
|
|
|
$this.attr( "id", $this.attr( "id" ).replace( "$", "__" ) );
|
|
} );
|
|
|
|
$( ".tutorial-section pre, .readme-section pre" ).each( function () {
|
|
var $this = $( this );
|
|
|
|
var example = $this.find( "code" );
|
|
exampleText = example.html();
|
|
var lang = /{@lang (.*?)}/.exec( exampleText );
|
|
if ( lang && lang[1] ) {
|
|
exampleText = exampleText.replace( lang[0], "" );
|
|
example.html( exampleText );
|
|
lang = lang[1];
|
|
} else {
|
|
var langClassMatch = example.parent()[0].className.match(/lang\-(\S+)/);
|
|
lang = langClassMatch ? langClassMatch[1] : "javascript";
|
|
}
|
|
|
|
if ( lang ) {
|
|
|
|
$this
|
|
.addClass( "sunlight-highlight-" + lang )
|
|
.addClass( "linenums" )
|
|
.html( example.html() );
|
|
|
|
}
|
|
} );
|
|
|
|
Sunlight.highlightAll( {
|
|
lineNumbers : true,
|
|
showMenu : true,
|
|
enableDoclinks : true
|
|
} );
|
|
|
|
$( "#toc" ).toc( {
|
|
anchorName : function ( i, heading, prefix ) {
|
|
var id = $( heading ).attr( "id" );
|
|
return id && id.replace(/\~/g, '-inner-').replace(/\./g, '-static-') || ( prefix + i );
|
|
},
|
|
selectors : "h1,h2,h3,h4",
|
|
showAndHide : false,
|
|
navbarOffset: 10,
|
|
smoothScrolling: true
|
|
} );
|
|
|
|
$( "#toc>ul" ).addClass( "nav nav-pills nav-stacked" );
|
|
$( "#main span[id^='toc']" ).addClass( "toc-shim" );
|
|
$( '.dropdown-toggle' ).dropdown();
|
|
// $( ".tutorial-section pre, .readme-section pre" ).addClass( "sunlight-highlight-javascript" ).addClass( "linenums" );
|
|
|
|
$( "table" ).each( function () {
|
|
var $this = $( this );
|
|
$this.addClass('table');
|
|
} );
|
|
|
|
} );
|
|
</script>
|
|
|
|
|
|
|
|
<!--Navigation and Symbol Display-->
|
|
|
|
|
|
<!--Google Analytics-->
|
|
|
|
|
|
</body>
|
|
</html>
|