Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Add custom element name validator

  • Loading branch information...
commit a4c77f4533e86fefe7de1bb67ddcb7601cf9da3b 1 parent 9faaa49
@mathiasbynens authored
View
2  bgcolor/tools/generate-regex.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
# http://code.google.com/p/esprima/issues/detail?id=110#c1
View
2  byte-counter/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
View
2  css-escapes/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
View
5 custom-element-name/README.md
@@ -0,0 +1,5 @@
+# [Custom element name validator](http://mothereff.in/custom-element-name)
+
+Wondering if you can use a given string as a [custom element name](http://customelements.io/) in HTML? This tool will tell you.
+
+Made by [Mathias Bynens](http://mathiasbynens.be/) using [Sindre Sorhus’s excellent validate-element-name](https://github.com/sindresorhus/validate-element-name).
View
106 custom-element-name/eff.css
@@ -0,0 +1,106 @@
+html, input, hgroup h2 {
+ font: 1em/1.6 sans-serif;
+}
+
+body {
+ max-width: 40em;
+ padding: 0 1em;
+}
+
+h1 {
+ text-align: center;
+ font-size: 1.3em;
+ margin: 0 0 .5em;
+ padding-top: 1em;
+}
+
+a {
+ color: #333;
+ text-decoration: none;
+ border-bottom: 1px solid #aaa;
+ padding: .1em .2em;
+}
+
+a:hover, a:focus {
+ color: #fff;
+ border-color: #036;
+ background: #36c;
+}
+
+i {
+ font-style: normal;
+}
+
+#footer {
+ margin-top: 2em;
+ text-align: center;
+}
+
+#permalink {
+ float: right;
+ padding-bottom: 0;
+}
+
+#valid.show, #invalid.show {
+ display: block;
+}
+
+#valid.hide, #invalid.hide {
+ display: none;
+}
+
+pre {
+ padding: 1em;
+ border: 3px double green;
+ background: #90ee90;
+}
+
+.invalid {
+ border-color: red;
+ background: #ffb6c1;
+}
+
+input {
+ width: 100%;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ text-align: center;
+ margin: 1em 0 .5em;
+ padding: .7em;
+ border: 3px double green;
+ background: #90ee90;
+}
+
+label {
+ display: block;
+ cursor: pointer;
+}
+
+code, input {
+ font-family: Monaco, monospace;
+ font-size: .9em;
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+@media (min-width: 42em) {
+
+ html {
+ font-size: 1.2em;
+ background: #c4c4c4;
+ height: 100%;
+ }
+
+ body {
+ margin: 0 auto;
+ padding: 0 2em;
+ min-height: 100%;
+ background: #fff;
+ border: solid #aaa;
+ border-width: 0 1px;
+ }
+
+}
View
77 custom-element-name/eff.js
@@ -0,0 +1,77 @@
+(function(window, document) {
+
+ var input = document.getElementsByTagName('input')[0];
+ var valid = window.valid;
+ var invalid = window.invalid;
+ var permalink = document.getElementById('permalink');
+ // http://mathiasbynens.be/notes/localstorage-pattern
+ var storage = (function() {
+ var uid = new Date;
+ var storage;
+ var result;
+ try {
+ (storage = window.localStorage).setItem(uid, uid);
+ result = storage.getItem(uid) == uid;
+ storage.removeItem(uid);
+ return result && storage;
+ } catch(exception) {}
+ }());
+ var stringFromCharCode = String.fromCharCode;
+
+ function encode(string) {
+ // URL-encode some more characters to avoid issues when using permalink URLs in Markdown
+ return encodeURIComponent(string).replace(/['()_*]/g, function(character) {
+ return '%' + character.charCodeAt().toString(16);
+ });
+ }
+
+ function update() {
+ var value = input.value;
+ try {
+ validate(value);
+ valid.className = 'show';
+ invalid.className = 'hide';
+ input.className = 'valid';
+ } catch(exception) {
+ // Note: the use of `innerHTML` is intended and safe in this case, since
+ // we fully control the error messages.
+ invalid.innerHTML = exception.message;
+ valid.className = 'hide';
+ invalid.className = 'show';
+ input.className = 'invalid';
+ }
+ permalink.hash = encode(value);
+ storage && (storage.customElementName = value);
+ }
+
+ // http://mathiasbynens.be/notes/oninput
+ input.onkeyup = update;
+ input.oninput = function() {
+ input.onkeyup = null;
+ update();
+ };
+
+ if (storage) {
+ storage.customElementName && (input.value = storage.customElementName);
+ update();
+ }
+
+ window.onhashchange = function() {
+ input.value = decodeURIComponent(location.hash.slice(1));
+ update();
+ };
+
+ if (location.hash) {
+ window.onhashchange();
+ }
+
+}(this, document));
+
+// Google Analytics
+window._gaq = [['_setAccount', 'UA-6065217-60'], ['_trackPageview']];
+(function(d, t) {
+ var g = d.createElement(t);
+ var s = d.getElementsByTagName(t)[0];
+ g.src = '//www.google-analytics.com/ga.js';
+ s.parentNode.insertBefore(g, s);
+}(document, 'script'));
View
18 custom-element-name/index.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang=en>
+<meta charset=utf-8>
+<title>Custom HTML element name validator</title>
+<meta name=viewport content="width=device-width,initial-scale=1">
+<link rel=stylesheet href=eff.css>
+<meta name=description content="Wondering if you can use a given string as a custom element name in HTML? This tool will tell you.">
+<h1>Custom HTML element name validator</h1>
+<p>Are you developing with <a href=http://www.w3.org/TR/components-intro/>Web Components</a>, and wondering if you can use a given string as <a href=http://customelements.io/>a custom element name</a> in HTML? Just use this tool.</p>
+<noscript><strong>To use this tool, please <a href=http://enable-javascript.com/>enable JavaScript</a> and reload the page.</strong></noscript>
+<a href=#yolo-swag id=permalink>permalink</a> <label>Enter a variable name: <input value=yolo-swag required autofocus placeholder="e.g. kitchensink"></label>
+<p id=valid>That’s <i>a valid</i> custom element name.
+<p id=invalid class=hide>That’s <i>an invalid</i> custom element name.
+<h2>About this tool</h2>
+<p>This tool uses <a href=http://sindresorhus.com/>Sindre Sorhus</a>’s <a href=https://github.com/sindresorhus/validate-element-name><i>validate-element-name</i></a> under the hood.
+<p id=footer>Made by <a href=http://mathiasbynens.be/>@mathias</a> — <a href=https://github.com/mathiasbynens/mothereff.in/tree/master/custom-element-name>fork this on GitHub!</a></p>
+<script src=vendor/all.js></script>
+<script src=eff.js></script>
View
72 custom-element-name/vendor/all.js
@@ -0,0 +1,72 @@
+(function() {
+ 'use strict';
+
+ // based on https://github.com/sindresorhus/xml-char-classes
+ var xmlChars = {
+ 'letter': /[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3007\u3021-\u3029\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\u4E00-\u9FA5\uAC00-\uD7A3]/,
+ 'combiningChar': /[\u0300-\u0345\u0360\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094D\u0951-\u0954\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A02\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A70\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B82\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C82\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A]/,
+ 'digit': /[0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29]/,
+ 'extender': /[\xB7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D\u309E\u30FC-\u30FE]/
+ };
+
+ function getRange(re) {
+ return re.toString().slice(2).slice(0, -2);
+ }
+
+ // http://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName
+ var ncname = new RegExp('^[' + getRange(xmlChars.letter) + '_][' + getRange(xmlChars.letter) + getRange(xmlChars.digit) + '\\.\\-_' + getRange(xmlChars.combiningChar) + getRange(xmlChars.extender) + ']*$');
+
+
+ var reservedNames = [
+ 'annotation-xml',
+ 'color-profile',
+ 'font-face',
+ 'font-face-src',
+ 'font-face-uri',
+ 'font-face-format',
+ 'font-face-name',
+ 'missing-glyph'
+ ];
+
+ window.validate = function(name) {
+ if (!name) {
+ throw new Error('Missing element name.');
+ }
+
+ if (name.indexOf('-') === -1) {
+ throw new Error('Custom element names must contain a hyphen. Example: <code>unicorn-cake</code>.');
+ }
+
+ if (/^polymer-/.test(name)) {
+ throw new Error('Custom element names should not start with <code>polymer-</code>.\nSee <a href=http://webcomponents.github.io/articles/how-should-i-name-my-element>“How should I name my element?”</a>.');
+ }
+
+ if (/^x-/.test(name)) {
+ throw new Error('Custom element names should not start with <code>x-</code>.\nSee <a href=http://webcomponents.github.io/articles/how-should-i-name-my-element>“How should I name my element?”</a>.');
+ }
+
+ if (/^ng-/.test(name)) {
+ throw new Error('Custom element names should not start with <code>ng-</code>.\nSee <a href=http://docs.angularjs.org/guide/directive#creating-directives>“How to create an AngularJS directive”</a>.');
+ }
+
+ if (/^\d/i.test(name)) {
+ throw new Error('Custom element names must not start with a digit.');
+ }
+
+ if (/^-/i.test(name)) {
+ throw new Error('Custom element names must not start with a hyphen.');
+ }
+
+ // http://www.w3.org/TR/custom-elements/#concepts
+ if (!ncname.test(name)) {
+ throw new Error('Invalid element name.');
+ }
+
+ if (reservedNames.indexOf(name) !== -1) {
+ throw new Error('The supplied element name is reserved and can’t be used.\nSee <a href=http://www.w3.org/TR/custom-elements/#concepts>“Custom Elements Specification: Concepts”</a>.');
+ }
+
+ return true;
+ };
+
+}());
View
9 custom-element-name/vendor/ncname.js
@@ -0,0 +1,9 @@
+'use strict';
+var xmlChars = require('xml-char-classes');
+
+function getRange(re) {
+ return re.toString().slice(2).slice(0, -2);
+}
+
+// http://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName
+module.exports = new RegExp('^[' + getRange(xmlChars.letter) + '_][' + getRange(xmlChars.letter) + getRange(xmlChars.digit) + '\\.\\-_' + getRange(xmlChars.combiningChar) + getRange(xmlChars.extender) + ']*$');
View
10 custom-element-name/vendor/update.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+cd "$(dirname "${BASH_SOURCE}")"
+
+curl -# "https://raw.githubusercontent.com/sindresorhus/ncname/master/index.js" > ncname.js
+curl -# "https://raw.githubusercontent.com/sindresorhus/validate-element-name/master/index.js" > validate.js
+
+cat "all.js" "../eff.js" > "/tmp/custom-element-name.js"
+echo "Copying concatenated JS to pasteboard..."
+pbcopy < "/tmp/custom-element-name.js"
View
54 custom-element-name/vendor/validate.js
@@ -0,0 +1,54 @@
+'use strict';
+var ncname = require('ncname');
+
+var reservedNames = [
+ 'annotation-xml',
+ 'color-profile',
+ 'font-face',
+ 'font-face-src',
+ 'font-face-uri',
+ 'font-face-format',
+ 'font-face-name',
+ 'missing-glyph'
+];
+
+module.exports = function (name) {
+ if (!name) {
+ throw new Error('Missing element name');
+ }
+
+ if (name.indexOf('-') === -1) {
+ throw new Error('Custom element names must contain a hyphen. Example: unicorn-cake');
+ }
+
+ if (/^polymer-/.test(name)) {
+ throw new Error('Custom element names should not start with `polymer-`.\nSee: http://webcomponents.github.io/articles/how-should-i-name-my-element');
+ }
+
+ if (/^x-/.test(name)) {
+ throw new Error('Custom element names should not start with `x-`.\nSee: http://webcomponents.github.io/articles/how-should-i-name-my-element/');
+ }
+
+ if (/^ng-/.test(name)) {
+ throw new Error('Custom element names should not start with `ng-`.\nSee: http://docs.angularjs.org/guide/directive#creating-directives');
+ }
+
+ if (/^\d/i.test(name)) {
+ throw new Error('Custom element names must not start with a digit');
+ }
+
+ if (/^-/i.test(name)) {
+ throw new Error('Custom element names must not start with a hyphen');
+ }
+
+ // http://www.w3.org/TR/custom-elements/#concepts
+ if (!ncname.test(name)) {
+ throw new Error('Invalid element name.');
+ }
+
+ if (reservedNames.indexOf(name) !== -1) {
+ throw new Error('The supplied element name is reserved and can\'t be used.\nSee: http://www.w3.org/TR/custom-elements/#concepts');
+ }
+
+ return true;
+};
View
9 custom-element-name/vendor/xml-char-classes.js
@@ -0,0 +1,9 @@
+// based on https://github.com/sindresorhus/xml-char-classes
+var xmlChars = {
+ 'baseChar': /[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3]/,
+ 'ideographic': /[\u3007\u3021-\u3029\u4E00-\u9FA5]/,
+ 'letter': /[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3007\u3021-\u3029\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\u4E00-\u9FA5\uAC00-\uD7A3]/,
+ 'combiningChar': /[\u0300-\u0345\u0360\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094D\u0951-\u0954\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A02\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A70\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B82\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C82\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A]/,
+ 'digit': /[0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29]/,
+ 'extender': /[\xB7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D\u309E\u30FC-\u30FE]/
+};
View
2  html-entities/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
View
2  js-escapes/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
View
2  js-variables/tools/generate-regex.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
# http://code.google.com/p/esprima/issues/detail?id=110#c1
View
2  lua-minifier/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
View
2  operator-precedence/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "$0")/vendor"
View
2  punycode/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
View
2  reverse-string/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
View
2  update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
echo "Updating dependencies..."
./byte-counter/vendor/update.sh
View
2  utf-8/vendor/update.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE}")"
Please sign in to comment.
Something went wrong with that request. Please try again.