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: Thu, 09 Mar 2017 07:05:31 -0500
> 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.
NSTextBlock is a rarely used class, so it’s hard to find sample code on it. I got some on <https://github.com/jyhong836/MarkdownAttribute>, but his/her handling code is spread over several files. But I don’t see how his/her code could work if the paragraph/block attribute doesn’t splatter upon range change. I don’t see that s/he is doing anything special to ensure a reset.
How is a paragraph defined in terms of applied paragraph styles? (Like if you fix an attributed-string’s paragraph styles, they are based on the setting of the “first” character.) Is it the first character after a line-break sequence to the end of the next line-break sequence?
—
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