Re: How do I use a NSTextBlock in an attributed string?
Re: How do I use a NSTextBlock in an attributed string?
- Subject: Re: How do I use a NSTextBlock in an attributed string?
- From: Daryle Walker <email@hidden>
- Date: Fri, 10 Mar 2017 03:47:52 -0500
> On Mar 9, 2017, at 7:05 AM, Daryle Walker <email@hidden> wrote:
>
>>
>> On Mar 8, 2017, at 4:17 PM, Daryle Walker <email@hidden> wrote:
>>
>> I tried:
>>
>>> // Set the paragraph formatting for the body...
>>> let bodyAdvancement = bodyFont.maximumAdvancement
>>> let bodyIndent = max(bodyAdvancement.width, bodyAdvancement.height) / 2.0
>>> let bodyParagraphStyle = NSParagraphStyle.default().mutableCopy() as! NSMutableParagraphStyle
>>> bodyParagraphStyle.headIndent = bodyIndent
>>> bodyParagraphStyle.lineBreakMode = .byWordWrapping
>>>
>>> // ...and separator
>>> let separatorParagraphStyle = bodyParagraphStyle.mutableCopy() as! NSMutableParagraphStyle
>>> let separatorTextBlock = NSTextBlock()
>>> separatorParagraphStyle.textBlocks.append(separatorTextBlock)
>>>
>>> // Set the body, but add a line for the initial separator
>>> let richSeparator = NSMutableAttributedString(string: " \n", attributes: [NSFontAttributeName: bodyFont, NSParagraphStyleAttributeName: separatorParagraphStyle])
>>> let richBody = NSMutableAttributedString(string: body, attributes: [NSFontAttributeName: bodyFont, NSParagraphStyleAttributeName: bodyParagraphStyle])
>>> result.append(richSeparator)
>>> result.append(richBody)
>>
>> What I wanted: the separator line surrounded by a block.
>> What I got: the separator and the body all surrounded by a block.
>>
>> I originally had the separator and body in a single string, and used a range to influence just the separator. This got the same result. I thought treating the separator and body in separate strings first wouldn’t infect the body with the text block, but it (illogically) does!
>>
>> How do I end the influence of a block? Put -1 entries in the text-block array?
>
> From tinkering around it seem like there is splatter dynamics when going across ranges of text with different “textBlocks” settings, UNLESS the second range uses no blocks. In just that case the second range copies the block policy of the first range. This makes no sense.
I read the paragraph styles of my paragraphs, and their block settings are as expected. The separator has a single block, and the body has no blocks. This is a straight-up bug, but in Apple’s code (during rendering). That’s the problem with rarely-used/mentioned classes: not only does barely anyone knows how to use them, sometimes the creators didn’t do enough testing.
Since the bug is on Apple’s side (# 30968328), I can’t fix it and I’m stuck. The only idea in mind, besides giving up, is to create a 1x1 table. Now for more research….
—
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden