diff --git a/ndarray/flag/coverage.ndjson b/ndarray/flag/coverage.ndjson index f303eb46c..ecff396f9 100644 --- a/ndarray/flag/coverage.ndjson +++ b/ndarray/flag/coverage.ndjson @@ -1,2 +1,3 @@ [100,100,100,8,8,100,1,1,100,100,100,100,"6bbca954939bdbfbfd31fe8c402bc06cdb1addf7","2023-12-30 23:55:36 -0800"] [100,100,100,8,8,100,1,1,100,100,100,100,"b7789348dcfa85d8e0b0987a54dc2986f2e68ce5","2023-12-31 14:22:18 -0800"] +[100,100,100,8,8,100,1,1,100,100,100,100,"5c8d407a1ae6fb6128343b7465741922369d500a","2024-01-04 20:12:44 -0800"] diff --git a/ndarray/flag/index.html b/ndarray/flag/index.html index 1b207dd83..2e52ef6b7 100644 --- a/ndarray/flag/index.html +++ b/ndarray/flag/index.html @@ -116,7 +116,7 @@

All files ndarray/flag/lib

+ + + + + + \ No newline at end of file diff --git a/string/next-grapheme-cluster-break/index.js.html b/string/next-grapheme-cluster-break/index.js.html new file mode 100644 index 000000000..db0caa034 --- /dev/null +++ b/string/next-grapheme-cluster-break/index.js.html @@ -0,0 +1,214 @@ + + + + + + Code coverage report for string/next-grapheme-cluster-break/lib/index.js + + + + + + + + + +
+
+

All files / string/next-grapheme-cluster-break/lib index.js

+
+ +
+ 100% + Statements + 43/43 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 43/43 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +4410x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2020 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+'use strict';
+ 
+/**
+* Return the next extended grapheme cluster break in a string after a specified position.
+*
+* @module @stdlib/string/next-grapheme-cluster-break
+*
+* @example
+* var nextGraphemeClusterBreak = require( '@stdlib/string/next-grapheme-cluster-break' );
+*
+* var out = nextGraphemeClusterBreak( 'अनुच्छेद', 1 );
+* // returns 3
+*
+* out = nextGraphemeClusterBreak( '🌷', 0 );
+* // returns -1
+*/
+ 
+// MODULES //
+ 
+var main = require( './main.js' );
+ 
+ 
+// EXPORTS //
+ 
+module.exports = main;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/string/next-grapheme-cluster-break/main.js.html b/string/next-grapheme-cluster-break/main.js.html new file mode 100644 index 000000000..d583c827c --- /dev/null +++ b/string/next-grapheme-cluster-break/main.js.html @@ -0,0 +1,478 @@ + + + + + + Code coverage report for string/next-grapheme-cluster-break/lib/main.js + + + + + + + + + +
+
+

All files / string/next-grapheme-cluster-break/lib main.js

+
+ +
+ 100% + Statements + 131/131 +
+ + +
+ 100% + Branches + 20/20 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 131/131 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +13210x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +61x +61x +61x +61x +61x +61x +61x +61x +61x +24x +24x +61x +31x +9x +9x +22x +61x +6x +6x +28x +61x +5x +5x +1x +1x +5x +61x +8x +8x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +61x +21x +21x +1x +1x +20x +20x +20x +20x +20x +20x +20x +20x +21x +13x +13x +13x +21x +7x +7x +61x +10x +10x +10x +10x +10x + 
/**
+* @license Apache-2.0
+*
+* Copyright (c) 2020 The Stdlib Authors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+ 
+'use strict';
+ 
+// MODULES //
+ 
+var isString = require( '@stdlib/assert/is-string' ).isPrimitive;
+var isInteger = require( '@stdlib/assert/is-integer' ).isPrimitive;
+var codePointAt = require( '@stdlib/string/code-point-at' );
+var hasUTF16SurrogatePairAt = require( '@stdlib/assert/has-utf16-surrogate-pair-at' );
+var grapheme = require( '@stdlib/string/tools/grapheme-cluster-break' );
+var format = require( '@stdlib/string/format' );
+ 
+ 
+// VARIABLES //
+ 
+var breakType = grapheme.breakType;
+var breakProperty = grapheme.breakProperty;
+var emojiProperty = grapheme.emojiProperty;
+ 
+ 
+// MAIN //
+ 
+/**
+* Returns the next extended grapheme cluster break in a string after a specified position.
+*
+* @param {string} str - input string
+* @param {integer} [fromIndex=0] - position
+* @throws {TypeError} first argument must be a string
+* @throws {TypeError} second argument must be an integer
+* @returns {NonNegativeInteger} next grapheme break position
+*
+* @example
+* var out = nextGraphemeClusterBreak( 'last man standing', 4 );
+* // returns 5
+*
+* @example
+* var out = nextGraphemeClusterBreak( 'presidential election', 8 );
+* // returns 9
+*
+* @example
+* var out = nextGraphemeClusterBreak( 'अनुच्छेद', 1 );
+* // returns 3
+*
+* @example
+* var out = nextGraphemeClusterBreak( '🌷' );
+* // returns -1
+*/
+function nextGraphemeClusterBreak( str, fromIndex ) {
+	var breaks;
+	var emoji;
+	var len;
+	var idx;
+	var cp;
+	var i;
+ 
+	if ( !isString( str ) ) {
+		throw new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', str ) );
+	}
+	if ( arguments.length > 1 ) {
+		if ( !isInteger( fromIndex ) ) {
+			throw new TypeError( format( 'invalid argument. Second argument must be an integer. Value: `%s`.', fromIndex ) );
+		}
+		idx = fromIndex;
+	} else {
+		idx = 0;
+	}
+	len = str.length;
+	if ( idx < 0 ) {
+		idx += len;
+		if ( idx < 0 ) {
+			idx = 0;
+		}
+	}
+	if ( len === 0 || idx >= len ) {
+		return -1;
+	}
+	// Initialize caches for storing grapheme break and emoji properties:
+	breaks = [];
+	emoji = [];
+ 
+	// Get the code point for the starting index:
+	cp = codePointAt( str, idx );
+ 
+	// Get the corresponding grapheme break and emoji properties:
+	breaks.push( breakProperty( cp ) );
+	emoji.push( emojiProperty( cp ) );
+ 
+	// Begin searching for the next grapheme cluster break...
+	for ( i = idx+1; i < len; i++ ) {
+		// If the current character is part of a surrogate pair, move along...
+		if ( hasUTF16SurrogatePairAt( str, i-1 ) ) {
+			continue;
+		}
+		// Get the next code point:
+		cp = codePointAt( str, i );
+ 
+		// Get the corresponding grapheme break and emoji properties:
+		breaks.push( breakProperty( cp ) );
+		emoji.push( emojiProperty( cp ) );
+ 
+		// Determine if we've encountered a grapheme cluster break...
+		if ( breakType( breaks, emoji ) > 0 ) {
+			// We've found a break!
+			return i;
+		}
+	}
+	// Unable to find a grapheme cluster break:
+	return -1;
+}
+ 
+ 
+// EXPORTS //
+ 
+module.exports = nextGraphemeClusterBreak;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file