text: let path = require('path');
  
  let regenerate = require('regenerate');
  let unicodeVersion = '8.0.0';
  
  let ascii = c => c < 128;
  let nonAscii = c => c >= 128;
  
  let makeCharRegex = s => `/^${regenerate().add(...s).toString()}$/`;
  let makeCharArray = s => JSON.stringify(regenerate().add(...s).toArray());
  
  let whitespace = [0x09, 0x0B, 0x0c, 0x20, 0xA0, 0xFEFF].concat(require(`unicode-${unicodeVersion}/General_Category/Space_Separator/code-points`));
  let whitespaceSmall = whitespace.filter(ascii);
  let whitespaceArray = makeCharArray(whitespace.filter(a => a >= 256));
  let whitespaceBool = Array(128).fill(0).map((v, i) => whitespace.indexOf(i) !== -1);
  // Note that we've omitted the range [0xA0, 0xFF], which must be tested in another way.
  
  
  let idStart = ['$'.charCodeAt(0), '_'.charCodeAt(0)].concat(require(`unicode-${unicodeVersion}/Binary_Property/ID_Start/code-points`));
  let idStartSmall = idStart.filter(ascii);
  let idStartLarge = idStart.filter(nonAscii);
  let idStartBool = Array(128).fill(0).map((v, i) => idStartSmall.indexOf(i) !== -1);
  
  
  let idContinue = ['$'.charCodeAt(0), '_'.charCodeAt(0), 0x200C, 0x200D].concat(require(`unicode-${unicodeVersion}/Binary_Property/ID_Continue/code-points`));
  let idContinueSmall = idContinue.filter(ascii);
  let idContinueLarge = idContinue.filter(nonAscii);
  let idContinueBool = Array(128).fill(0).map((v, i) => idContinueSmall.indexOf(i) !== -1);
  
  
  console.log(`// Generated by ${path.join(path.parse(__dirname).base, path.parse(__filename).base)}
  
  exports.whitespaceArray = ${whitespaceArray};
  exports.whitespaceBool = ${JSON.stringify(whitespaceBool)};
  
  exports.idStartLargeRegex = ${makeCharRegex(idStartLarge)};
  exports.idStartBool = ${JSON.stringify(idStartBool)};
  
  exports.idContinueLargeRegex = ${makeCharRegex(idContinueLarge)};
  exports.idContinueBool = ${JSON.stringify(idContinueBool)};
  `);