Comparing version 0.3.0 to 1.0.0
{ | ||
"name": "linebreak", | ||
"version": "0.3.0", | ||
"version": "1.0.0", | ||
"description": "An implementation of the Unicode Line Breaking Algorithm (UAX #14)", | ||
@@ -26,9 +26,6 @@ "repository": { | ||
"devDependencies": { | ||
"coffee-script": "^1.7.1", | ||
"mocha": "*" | ||
"mocha": "^6.0.2" | ||
}, | ||
"scripts": { | ||
"prepublish": "coffee -c src/", | ||
"postpublish": "rm -rf src/*.js", | ||
"test": "node_modules/mocha/bin/mocha" | ||
"test": "mocha" | ||
}, | ||
@@ -35,0 +32,0 @@ "main": "src/linebreaker", |
@@ -10,3 +10,3 @@ # linebreak | ||
This is a JavaScript/CoffeeScript implementation of the | ||
This is a JavaScript implementation of the | ||
[Unicode Line Breaking Algorithm](http://www.unicode.org/reports/tr14/#SampleCode) for Node.js | ||
@@ -42,2 +42,4 @@ (and browsers I guess). It is used by [PDFKit](http://github.com/devongovett/pdfkit/) for | ||
} | ||
last = bk.position; | ||
} | ||
@@ -63,2 +65,2 @@ ``` | ||
MIT | ||
MIT |
@@ -1,85 +0,44 @@ | ||
// Generated by CoffeeScript 1.7.1 | ||
(function() { | ||
var AI, AL, B2, BA, BB, BK, CB, CJ, CL, CM, CP, CR, EX, GL, H2, H3, HL, HY, ID, IN, IS, JL, JT, JV, LF, NL, NS, NU, OP, PO, PR, QU, RI, SA, SG, SP, SY, WJ, XX, ZW; | ||
// The following break classes are handled by the pair table | ||
exports.OP = OP = 0; | ||
exports.OP = 0; // Opening punctuation | ||
exports.CL = 1; // Closing punctuation | ||
exports.CP = 2; // Closing parenthesis | ||
exports.QU = 3; // Ambiguous quotation | ||
exports.GL = 4; // Glue | ||
exports.NS = 5; // Non-starters | ||
exports.EX = 6; // Exclamation/Interrogation | ||
exports.SY = 7; // Symbols allowing break after | ||
exports.IS = 8; // Infix separator | ||
exports.PR = 9; // Prefix | ||
exports.PO = 10; // Postfix | ||
exports.NU = 11; // Numeric | ||
exports.AL = 12; // Alphabetic | ||
exports.HL = 13; // Hebrew Letter | ||
exports.ID = 14; // Ideographic | ||
exports.IN = 15; // Inseparable characters | ||
exports.HY = 16; // Hyphen | ||
exports.BA = 17; // Break after | ||
exports.BB = 18; // Break before | ||
exports.B2 = 19; // Break on either side (but not pair) | ||
exports.ZW = 20; // Zero-width space | ||
exports.CM = 21; // Combining marks | ||
exports.WJ = 22; // Word joiner | ||
exports.H2 = 23; // Hangul LV | ||
exports.H3 = 24; // Hangul LVT | ||
exports.JL = 25; // Hangul L Jamo | ||
exports.JV = 26; // Hangul V Jamo | ||
exports.JT = 27; // Hangul T Jamo | ||
exports.RI = 28; // Regional Indicator | ||
exports.CL = CL = 1; | ||
exports.CP = CP = 2; | ||
exports.QU = QU = 3; | ||
exports.GL = GL = 4; | ||
exports.NS = NS = 5; | ||
exports.EX = EX = 6; | ||
exports.SY = SY = 7; | ||
exports.IS = IS = 8; | ||
exports.PR = PR = 9; | ||
exports.PO = PO = 10; | ||
exports.NU = NU = 11; | ||
exports.AL = AL = 12; | ||
exports.HL = HL = 13; | ||
exports.ID = ID = 14; | ||
exports.IN = IN = 15; | ||
exports.HY = HY = 16; | ||
exports.BA = BA = 17; | ||
exports.BB = BB = 18; | ||
exports.B2 = B2 = 19; | ||
exports.ZW = ZW = 20; | ||
exports.CM = CM = 21; | ||
exports.WJ = WJ = 22; | ||
exports.H2 = H2 = 23; | ||
exports.H3 = H3 = 24; | ||
exports.JL = JL = 25; | ||
exports.JV = JV = 26; | ||
exports.JT = JT = 27; | ||
exports.RI = RI = 28; | ||
exports.AI = AI = 29; | ||
exports.BK = BK = 30; | ||
exports.CB = CB = 31; | ||
exports.CJ = CJ = 32; | ||
exports.CR = CR = 33; | ||
exports.LF = LF = 34; | ||
exports.NL = NL = 35; | ||
exports.SA = SA = 36; | ||
exports.SG = SG = 37; | ||
exports.SP = SP = 38; | ||
exports.XX = XX = 39; | ||
}).call(this); | ||
// The following break classes are not handled by the pair table | ||
exports.AI = 29; // Ambiguous (Alphabetic or Ideograph) | ||
exports.BK = 30; // Break (mandatory) | ||
exports.CB = 31; // Contingent break | ||
exports.CJ = 32; // Conditional Japanese Starter | ||
exports.CR = 33; // Carriage return | ||
exports.LF = 34; // Line feed | ||
exports.NL = 35; // Next line | ||
exports.SA = 36; // South-East Asian | ||
exports.SG = 37; // Surrogates | ||
exports.SP = 38; // Space | ||
exports.XX = 39; // Unknown |
@@ -1,45 +0,48 @@ | ||
// Generated by CoffeeScript 1.7.1 | ||
(function() { | ||
var UnicodeTrieBuilder, classes, fs, request; | ||
const fs = require('fs'); | ||
const request = require('request'); | ||
const classes = require('./classes'); | ||
const UnicodeTrieBuilder = require('unicode-trie/builder'); | ||
fs = require('fs'); | ||
// this loads the LineBreak.txt file for Unicode and parses it to | ||
// combine ranges and generate JavaScript | ||
request('http://www.unicode.org/Public/7.0.0/ucd/LineBreak.txt', function(err, res, data) { | ||
const matches = data.match(/^[0-9A-F]+(\.\.[0-9A-F]+)?;[A-Z][A-Z0-9]/gm); | ||
request = require('request'); | ||
let start = null; | ||
let end = null; | ||
let type = null; | ||
const trie = new UnicodeTrieBuilder(classes.XX); | ||
classes = require('./classes'); | ||
UnicodeTrieBuilder = require('unicode-trie/builder'); | ||
request('http://www.unicode.org/Public/7.0.0/ucd/LineBreak.txt', function(err, res, data) { | ||
var end, match, matches, rangeEnd, rangeStart, rangeType, start, trie, type, _i, _len; | ||
matches = data.match(/^[0-9A-F]+(\.\.[0-9A-F]+)?;[A-Z][A-Z0-9]/gm); | ||
start = null; | ||
end = null; | ||
type = null; | ||
trie = new UnicodeTrieBuilder(classes.XX); | ||
for (_i = 0, _len = matches.length; _i < _len; _i++) { | ||
match = matches[_i]; | ||
match = match.split(/;|\.\./); | ||
rangeStart = match[0]; | ||
if (match.length === 3) { | ||
rangeEnd = match[1]; | ||
rangeType = match[2]; | ||
} else { | ||
rangeEnd = rangeStart; | ||
rangeType = match[1]; | ||
} | ||
if ((type != null) && rangeType !== type) { | ||
trie.setRange(parseInt(start, 16), parseInt(end, 16), classes[type], true); | ||
type = null; | ||
} | ||
if (type == null) { | ||
start = rangeStart; | ||
type = rangeType; | ||
} | ||
end = rangeEnd; | ||
// collect entries in the linebreaking table into ranges | ||
// to keep things smaller. | ||
for (let match of matches) { | ||
var rangeEnd, rangeType; | ||
match = match.split(/;|\.\./); | ||
const rangeStart = match[0]; | ||
if (match.length === 3) { | ||
rangeEnd = match[1]; | ||
rangeType = match[2]; | ||
} else { | ||
rangeEnd = rangeStart; | ||
rangeType = match[1]; | ||
} | ||
trie.setRange(parseInt(start, 16), parseInt(end, 16), classes[type], true); | ||
return fs.writeFile(__dirname + '/classes.trie', trie.toBuffer()); | ||
}); | ||
if ((type != null) && (rangeType !== type)) { | ||
trie.setRange(parseInt(start, 16), parseInt(end, 16), classes[type], true); | ||
type = null; | ||
} | ||
if ((type == null)) { | ||
start = rangeStart; | ||
type = rangeType; | ||
} | ||
end = rangeEnd; | ||
} | ||
trie.setRange(parseInt(start, 16), parseInt(end, 16), classes[type], true); | ||
}).call(this); | ||
// write the trie to a file | ||
fs.writeFile(__dirname + '/classes.trie', trie.toBuffer()); | ||
}); |
@@ -1,161 +0,130 @@ | ||
// Generated by CoffeeScript 1.7.1 | ||
(function() { | ||
var AI, AL, BA, BK, CB, CI_BRK, CJ, CP_BRK, CR, DI_BRK, ID, IN_BRK, LF, LineBreaker, NL, NS, PR_BRK, SA, SG, SP, UnicodeTrie, WJ, XX, base64, characterClasses, classTrie, data, fs, pairTable, _ref, _ref1; | ||
let AI, AL, BA, BK, CB, CJ, CR, ID, LF, NL, NS, SA, SG, SP, WJ, XX; | ||
const UnicodeTrie = require('unicode-trie'); | ||
const fs = require('fs'); | ||
const base64 = require('base64-js'); | ||
({BK, CR, LF, NL, CB, BA, SP, WJ, SP, BK, LF, NL, AI, AL, SA, SG, XX, CJ, ID, NS} = require('./classes')); | ||
const {DI_BRK, IN_BRK, CI_BRK, CP_BRK, PR_BRK, pairTable} = require('./pairs'); | ||
UnicodeTrie = require('unicode-trie'); | ||
const data = base64.toByteArray(fs.readFileSync(__dirname + '/classes.trie', 'base64')); | ||
const classTrie = new UnicodeTrie(data); | ||
fs = require('fs'); | ||
const mapClass = function(c) { | ||
switch (c) { | ||
case AI: return AL; | ||
case SA: case SG: case XX: return AL; | ||
case CJ: return NS; | ||
default: return c; | ||
} | ||
}; | ||
const mapFirst = function(c) { | ||
switch (c) { | ||
case LF: case NL: return BK; | ||
case CB: return BA; | ||
case SP: return WJ; | ||
default: return c; | ||
} | ||
}; | ||
base64 = require('base64-js'); | ||
_ref = require('./classes'), BK = _ref.BK, CR = _ref.CR, LF = _ref.LF, NL = _ref.NL, CB = _ref.CB, BA = _ref.BA, SP = _ref.SP, WJ = _ref.WJ, SP = _ref.SP, BK = _ref.BK, LF = _ref.LF, NL = _ref.NL, AI = _ref.AI, AL = _ref.AL, SA = _ref.SA, SG = _ref.SG, XX = _ref.XX, CJ = _ref.CJ, ID = _ref.ID, NS = _ref.NS, characterClasses = _ref.characterClasses; | ||
_ref1 = require('./pairs'), DI_BRK = _ref1.DI_BRK, IN_BRK = _ref1.IN_BRK, CI_BRK = _ref1.CI_BRK, CP_BRK = _ref1.CP_BRK, PR_BRK = _ref1.PR_BRK, pairTable = _ref1.pairTable; | ||
data = base64.toByteArray(fs.readFileSync(__dirname + '/classes.trie', 'base64')); | ||
classTrie = new UnicodeTrie(data); | ||
LineBreaker = (function() { | ||
var Break, mapClass, mapFirst; | ||
function LineBreaker(string) { | ||
this.string = string; | ||
this.pos = 0; | ||
this.lastPos = 0; | ||
this.curClass = null; | ||
this.nextClass = null; | ||
class Break { | ||
constructor(position, required = false) { | ||
this.position = position; | ||
this.required = required; | ||
} | ||
}; | ||
class LineBreaker { | ||
constructor(string) { | ||
this.string = string; | ||
this.pos = 0; | ||
this.lastPos = 0; | ||
this.curClass = null; | ||
this.nextClass = null; | ||
} | ||
nextCodePoint() { | ||
const code = this.string.charCodeAt(this.pos++); | ||
const next = this.string.charCodeAt(this.pos); | ||
// If a surrogate pair | ||
if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) { | ||
this.pos++; | ||
return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000; | ||
} | ||
LineBreaker.prototype.nextCodePoint = function() { | ||
var code, next; | ||
code = this.string.charCodeAt(this.pos++); | ||
next = this.string.charCodeAt(this.pos); | ||
if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) { | ||
this.pos++; | ||
return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000; | ||
return code; | ||
} | ||
nextCharClass() { | ||
return mapClass(classTrie.get(this.nextCodePoint())); | ||
} | ||
nextBreak() { | ||
// get the first char if we're at the beginning of the string | ||
if (this.curClass == null) { this.curClass = mapFirst(this.nextCharClass()); } | ||
while (this.pos < this.string.length) { | ||
this.lastPos = this.pos; | ||
const lastClass = this.nextClass; | ||
this.nextClass = this.nextCharClass(); | ||
// explicit newline | ||
if ((this.curClass === BK) || ((this.curClass === CR) && (this.nextClass !== LF))) { | ||
this.curClass = mapFirst(mapClass(this.nextClass)); | ||
return new Break(this.lastPos, true); | ||
} | ||
return code; | ||
}; | ||
mapClass = function(c) { | ||
switch (c) { | ||
case AI: | ||
return AL; | ||
case SA: | ||
case SG: | ||
case XX: | ||
return AL; | ||
case CJ: | ||
return NS; | ||
default: | ||
return c; | ||
// handle classes not handled by the pair table | ||
let cur | ||
switch (this.nextClass) { | ||
case SP: cur = this.curClass; break; | ||
case BK: case LF: case NL: cur = BK; break; | ||
case CR: cur = CR; break; | ||
case CB: cur = BA; break; | ||
} | ||
}; | ||
mapFirst = function(c) { | ||
switch (c) { | ||
case LF: | ||
case NL: | ||
return BK; | ||
case CB: | ||
return BA; | ||
case SP: | ||
return WJ; | ||
default: | ||
return c; | ||
if (cur != null) { | ||
this.curClass = cur; | ||
if (this.nextClass === CB) { return new Break(this.lastPos); } | ||
continue; | ||
} | ||
}; | ||
LineBreaker.prototype.nextCharClass = function(first) { | ||
if (first == null) { | ||
first = false; | ||
// if not handled already, use the pair table | ||
let shouldBreak = false; | ||
switch (pairTable[this.curClass][this.nextClass]) { | ||
case DI_BRK: // Direct break | ||
shouldBreak = true; | ||
break; | ||
case IN_BRK: // possible indirect break | ||
shouldBreak = lastClass === SP; | ||
break; | ||
case CI_BRK: | ||
shouldBreak = lastClass === SP; | ||
if (!shouldBreak) { continue; } | ||
break; | ||
case CP_BRK: // prohibited for combining marks | ||
if (lastClass !== SP) { continue; } | ||
break; | ||
} | ||
return mapClass(classTrie.get(this.nextCodePoint())); | ||
}; | ||
Break = (function() { | ||
function Break(position, required) { | ||
this.position = position; | ||
this.required = required != null ? required : false; | ||
this.curClass = this.nextClass; | ||
if (shouldBreak) { | ||
return new Break(this.lastPos); | ||
} | ||
return Break; | ||
})(); | ||
LineBreaker.prototype.nextBreak = function() { | ||
var cur, lastClass, shouldBreak; | ||
if (this.curClass == null) { | ||
this.curClass = mapFirst(this.nextCharClass()); | ||
} | ||
if (this.pos >= this.string.length) { | ||
if (this.lastPos < this.string.length) { | ||
this.lastPos = this.string.length; | ||
return new Break(this.string.length); | ||
} else { | ||
return null; | ||
} | ||
while (this.pos < this.string.length) { | ||
this.lastPos = this.pos; | ||
lastClass = this.nextClass; | ||
this.nextClass = this.nextCharClass(); | ||
if (this.curClass === BK || (this.curClass === CR && this.nextClass !== LF)) { | ||
this.curClass = mapFirst(mapClass(this.nextClass)); | ||
return new Break(this.lastPos, true); | ||
} | ||
cur = (function() { | ||
switch (this.nextClass) { | ||
case SP: | ||
return this.curClass; | ||
case BK: | ||
case LF: | ||
case NL: | ||
return BK; | ||
case CR: | ||
return CR; | ||
case CB: | ||
return BA; | ||
} | ||
}).call(this); | ||
if (cur != null) { | ||
this.curClass = cur; | ||
if (this.nextClass === CB) { | ||
return new Break(this.lastPos); | ||
} | ||
continue; | ||
} | ||
shouldBreak = false; | ||
switch (pairTable[this.curClass][this.nextClass]) { | ||
case DI_BRK: | ||
shouldBreak = true; | ||
break; | ||
case IN_BRK: | ||
shouldBreak = lastClass === SP; | ||
break; | ||
case CI_BRK: | ||
shouldBreak = lastClass === SP; | ||
if (!shouldBreak) { | ||
continue; | ||
} | ||
break; | ||
case CP_BRK: | ||
if (lastClass !== SP) { | ||
continue; | ||
} | ||
} | ||
this.curClass = this.nextClass; | ||
if (shouldBreak) { | ||
return new Break(this.lastPos); | ||
} | ||
} | ||
if (this.pos >= this.string.length) { | ||
if (this.lastPos < this.string.length) { | ||
this.lastPos = this.string.length; | ||
return new Break(this.string.length); | ||
} else { | ||
return null; | ||
} | ||
} | ||
}; | ||
return LineBreaker; | ||
})(); | ||
module.exports = LineBreaker; | ||
}).call(this); | ||
} | ||
} | ||
}; | ||
module.exports = LineBreaker; |
@@ -1,17 +0,39 @@ | ||
// Generated by CoffeeScript 1.7.1 | ||
(function() { | ||
var CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK; | ||
exports.DI_BRK = DI_BRK = 0; | ||
exports.IN_BRK = IN_BRK = 1; | ||
exports.CI_BRK = CI_BRK = 2; | ||
exports.CP_BRK = CP_BRK = 3; | ||
exports.PR_BRK = PR_BRK = 4; | ||
exports.pairTable = [[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK]]; | ||
}).call(this); | ||
let CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK; | ||
exports.DI_BRK = (DI_BRK = 0); // Direct break opportunity | ||
exports.IN_BRK = (IN_BRK = 1); // Indirect break opportunity | ||
exports.CI_BRK = (CI_BRK = 2); // Indirect break opportunity for combining marks | ||
exports.CP_BRK = (CP_BRK = 3); // Prohibited break for combining marks | ||
exports.PR_BRK = (PR_BRK = 4); // Prohibited break | ||
// table generated from http://www.unicode.org/reports/tr14/#Table2 | ||
exports.pairTable = [ | ||
[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], | ||
[IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], | ||
[DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK] | ||
]; |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
1
271
0
64
897459
10
3
1