countUntil with negated pre-defined predicate?

Robert M. Münch robert.muench at saphirion.com
Sun May 3 12:19:30 UTC 2020


On 2020-05-02 22:33:59 +0000, Harry Gillanders said:

> This depends on what you classify as drawable, and what you consider to 
> be a character (the joys of Unicode),

Absolutely... however, trying getting close to what works in most cases.

> and why you want to search for them anyway.

I'm doing some cursor-movement in a text-field. So, need to find out 
where the cursor should be positioned.

> One way (I haven't verified this) could be to check if any of the 
> code-points within a grapheme are graphical[1], and not white-space 
> (and are not any other code-point you consider non-drawable).

Yes, that makes sense. I wasn't aware about graphical category... so 
would have used the !isWhite approach only. Thanks.

> Which could look like so:
> 
> 	import std.algorithm;
> 	import std.range;
> 	import std.uni;
> 
> 	size_t drawableCharacterCount (CodePoints) (auto ref CodePoints codePoints)

What does this line do?

> 	if (isInputRange!CodePoints && is(ElementType!CodePoints : dchar))
> 	{
> 		bool isDrawableCodePoint (dchar c)
> 		{
> 			return c.isGraphical() && !c.isWhite();
> 		}
> 
> 		return codePoints.byGrapheme().count!(
> 			g => g[].any!isDrawableCodePoint
> 		);
> 	}

I want to identify spans of drawable and isWhite in a grapheme array. 
So, I think any! just gives the total count of the whole thing. But 
anyway, thanks for the input, helps to better understand the whole 
thing.

-- 
Robert M. Münch
http://www.saphirion.com
smarter | better | faster



More information about the Digitalmars-d-learn mailing list