| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 
							- var hasOwnProperty = Object.prototype.hasOwnProperty;
 
- function buildMap(list, caseInsensitive) {
 
-     var map = Object.create(null);
 
-     if (!Array.isArray(list)) {
 
-         return null;
 
-     }
 
-     for (var i = 0; i < list.length; i++) {
 
-         var name = list[i];
 
-         if (caseInsensitive) {
 
-             name = name.toLowerCase();
 
-         }
 
-         map[name] = true;
 
-     }
 
-     return map;
 
- }
 
- function buildList(data) {
 
-     if (!data) {
 
-         return null;
 
-     }
 
-     var tags = buildMap(data.tags, true);
 
-     var ids = buildMap(data.ids);
 
-     var classes = buildMap(data.classes);
 
-     if (tags === null &&
 
-         ids === null &&
 
-         classes === null) {
 
-         return null;
 
-     }
 
-     return {
 
-         tags: tags,
 
-         ids: ids,
 
-         classes: classes
 
-     };
 
- }
 
- function buildIndex(data) {
 
-     var scopes = false;
 
-     if (data.scopes && Array.isArray(data.scopes)) {
 
-         scopes = Object.create(null);
 
-         for (var i = 0; i < data.scopes.length; i++) {
 
-             var list = data.scopes[i];
 
-             if (!list || !Array.isArray(list)) {
 
-                 throw new Error('Wrong usage format');
 
-             }
 
-             for (var j = 0; j < list.length; j++) {
 
-                 var name = list[j];
 
-                 if (hasOwnProperty.call(scopes, name)) {
 
-                     throw new Error('Class can\'t be used for several scopes: ' + name);
 
-                 }
 
-                 scopes[name] = i + 1;
 
-             }
 
-         }
 
-     }
 
-     return {
 
-         whitelist: buildList(data),
 
-         blacklist: buildList(data.blacklist),
 
-         scopes: scopes
 
-     };
 
- }
 
- module.exports = {
 
-     buildIndex: buildIndex
 
- };
 
 
  |