react-saasify-chrisvxd
Version:
React components for Saasify web clients.
139 lines (127 loc) • 4.18 kB
JavaScript
// Generated by CoffeeScript 1.8.0
(function() {
var CR, Control, Extend, L, LF, LV, LVT, Regional_Indicator, SpacingMark, T, UnicodeTrie, V, classTrie, codePointAt, fs, shouldBreak, _ref;
_ref = require('./classes.json'), CR = _ref.CR, LF = _ref.LF, Control = _ref.Control, Extend = _ref.Extend, Regional_Indicator = _ref.Regional_Indicator, SpacingMark = _ref.SpacingMark, L = _ref.L, V = _ref.V, T = _ref.T, LV = _ref.LV, LVT = _ref.LVT;
UnicodeTrie = require('unicode-trie');
fs = require('fs');
classTrie = new UnicodeTrie(fs.readFileSync(__dirname + '/classes.trie'));
codePointAt = function(str, idx) {
var code, hi, low;
idx = idx || 0;
code = str.charCodeAt(idx);
if ((0xD800 <= code && code <= 0xDBFF)) {
hi = code;
low = str.charCodeAt(idx + 1);
if ((0xDC00 <= low && low <= 0xDFFF)) {
return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
}
return hi;
}
if ((0xDC00 <= code && code <= 0xDFFF)) {
hi = str.charCodeAt(idx - 1);
low = code;
if ((0xD800 <= hi && hi <= 0xDBFF)) {
return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
}
return low;
}
return code;
};
shouldBreak = function(previous, current) {
if (previous === CR && current === LF) {
return false;
} else if (previous === Control || previous === CR || previous === LF) {
return true;
} else if (current === Control || current === CR || current === LF) {
return true;
} else if (previous === L && (current === L || current === V || current === LV || current === LVT)) {
return false;
} else if ((previous === LV || previous === V) && (current === V || current === T)) {
return false;
} else if ((previous === LVT || previous === T) && current === T) {
return false;
} else if (previous === Regional_Indicator && current === Regional_Indicator) {
return false;
} else if (current === Extend) {
return false;
} else if (current === SpacingMark) {
return false;
}
return true;
};
exports.nextBreak = function(string, index) {
var i, next, prev, _i, _ref1, _ref2, _ref3, _ref4;
if (index == null) {
index = 0;
}
if (index < 0) {
return 0;
}
if (index >= string.length - 1) {
return string.length;
}
prev = classTrie.get(codePointAt(string, index));
for (i = _i = _ref1 = index + 1, _ref2 = string.length; _i < _ref2; i = _i += 1) {
if ((0xd800 <= (_ref3 = string.charCodeAt(i - 1)) && _ref3 <= 0xdbff) && (0xdc00 <= (_ref4 = string.charCodeAt(i)) && _ref4 <= 0xdfff)) {
continue;
}
next = classTrie.get(codePointAt(string, i));
if (shouldBreak(prev, next)) {
return i;
}
prev = next;
}
return string.length;
};
exports.previousBreak = function(string, index) {
var i, next, prev, _i, _ref1, _ref2, _ref3;
if (index == null) {
index = string.length;
}
if (index > string.length) {
return string.length;
}
if (index <= 1) {
return 0;
}
index--;
next = classTrie.get(codePointAt(string, index));
for (i = _i = _ref1 = index - 1; _i >= 0; i = _i += -1) {
if ((0xd800 <= (_ref2 = string.charCodeAt(i)) && _ref2 <= 0xdbff) && (0xdc00 <= (_ref3 = string.charCodeAt(i + 1)) && _ref3 <= 0xdfff)) {
continue;
}
prev = classTrie.get(codePointAt(string, i));
if (shouldBreak(prev, next)) {
return i + 1;
}
next = prev;
}
return 0;
};
exports["break"] = function(str) {
var brk, index, res;
res = [];
index = 0;
while ((brk = exports.nextBreak(str, index)) < str.length) {
res.push(str.slice(index, brk));
index = brk;
}
if (index < str.length) {
res.push(str.slice(index));
}
return res;
};
exports.countBreaks = function(str) {
var brk, count, index;
count = 0;
index = 0;
while ((brk = exports.nextBreak(str, index)) < str.length) {
index = brk;
count++;
}
if (index < str.length) {
count++;
}
return count;
};
}).call(this);