| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- var types = require('./types');
 
- var sets  = require('./sets');
 
- // All of these are private and only used by randexp.
 
- // It's assumed that they will always be called with the correct input.
 
- var CTRL = '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?';
 
- var SLSH = { '0': 0, 't': 9, 'n': 10, 'v': 11, 'f': 12, 'r': 13 };
 
- /**
 
-  * Finds character representations in str and convert all to
 
-  * their respective characters
 
-  *
 
-  * @param {String} str
 
-  * @return {String}
 
-  */
 
- exports.strToChars = function(str) {
 
-   /* jshint maxlen: false */
 
-   var chars_regex = /(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g;
 
-   str = str.replace(chars_regex, function(s, b, lbs, a16, b16, c8, dctrl, eslsh) {
 
-     if (lbs) {
 
-       return s;
 
-     }
 
-     var code = b     ? 8 :
 
-                a16   ? parseInt(a16, 16) :
 
-                b16   ? parseInt(b16, 16) :
 
-                c8    ? parseInt(c8,   8) :
 
-                dctrl ? CTRL.indexOf(dctrl) :
 
-                SLSH[eslsh];
 
-     var c = String.fromCharCode(code);
 
-     // Escape special regex characters.
 
-     if (/[\[\]{}\^$.|?*+()]/.test(c)) {
 
-       c = '\\' + c;
 
-     }
 
-     return c;
 
-   });
 
-   return str;
 
- };
 
- /**
 
-  * turns class into tokens
 
-  * reads str until it encounters a ] not preceeded by a \
 
-  *
 
-  * @param {String} str
 
-  * @param {String} regexpStr
 
-  * @return {Array.<Array.<Object>, Number>}
 
-  */
 
- exports.tokenizeClass = function(str, regexpStr) {
 
-   /* jshint maxlen: false */
 
-   var tokens = [];
 
-   var regexp = /\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g;
 
-   var rs, c;
 
-   while ((rs = regexp.exec(str)) != null) {
 
-     if (rs[1]) {
 
-       tokens.push(sets.words());
 
-     } else if (rs[2]) {
 
-       tokens.push(sets.ints());
 
-     } else if (rs[3]) {
 
-       tokens.push(sets.whitespace());
 
-     } else if (rs[4]) {
 
-       tokens.push(sets.notWords());
 
-     } else if (rs[5]) {
 
-       tokens.push(sets.notInts());
 
-     } else if (rs[6]) {
 
-       tokens.push(sets.notWhitespace());
 
-     } else if (rs[7]) {
 
-       tokens.push({
 
-         type: types.RANGE,
 
-         from: (rs[8] || rs[9]).charCodeAt(0),
 
-           to: rs[10].charCodeAt(0),
 
-       });
 
-     } else if (c = rs[12]) {
 
-       tokens.push({
 
-         type: types.CHAR,
 
-         value: c.charCodeAt(0),
 
-       });
 
-     } else {
 
-       return [tokens, regexp.lastIndex];
 
-     }
 
-   }
 
-   exports.error(regexpStr, 'Unterminated character class');
 
- };
 
- /**
 
-  * Shortcut to throw errors.
 
-  *
 
-  * @param {String} regexp
 
-  * @param {String} msg
 
-  */
 
- exports.error = function(regexp, msg) {
 
-   throw new SyntaxError('Invalid regular expression: /' + regexp + '/: ' + msg);
 
- };
 
 
  |