Re: Displaying one NSTextStorage with two sets of temporary attributes
Re: Displaying one NSTextStorage with two sets of temporary attributes
- Subject: Re: Displaying one NSTextStorage with two sets of temporary attributes
- From: Ross Carter <email@hidden>
- Date: Fri, 2 May 2008 10:57:46 -0400
I'm not sure whether you need to change a particular set of attributes
(font, line spacing, tabs, etc) in each layout manager or merely
suppress the display of text in other series. If the former, I would
think that the layout manager is not best place to handle the
attribute fixing. I'd think about either subclassing NSTextStorage and
have it modify the attributes that it receives from and sends to the
various layout managers, or subclassing the typesetter and overriding
setAttributedString: to change the attributes as needed. I haven't
ever done either of those things, mind you, so I don't know whether
they would work.
It just seems to me that by the time the layout manager goes to work,
it's difficult to change the attributes (except for things that don't
affect the layout, such as underlining) because of the complex
interaction between the layout manager and the typesetter. You
probably want to intervene before the attributedString gets converted
into glyphs.
On May 1, 2008, at 8:25 PM, Adam C.M. Solove wrote:
Hello all,
In the episode of Late Night Cocoa on the text system, [
http://www.macdevnet.com/index.php/shows/latenightcocoa/37-latenightcocoa/93-lnc005
] Juan Pablo Claude described a setup with multiple NSLayoutManagers
editing text from the same NSTextStorage and then said, off-hand, that
you might do this if you wanted to display the same text with
different fonts. I am curious if anyone could discuss how this might
be done: displaying the same underlying attributed string, but
formatting it before the NSLayoutManager tries to lay it out and
formatting it back when the NSTextView sends back changes. I cannot
find specific information on subclassing NSLayoutManager to make these
sorts of changes.
(I know there is an Apple demo [TextViewConfig,
http://developer.apple.com/samplecode/TextViewConfig/index.html] which
shows multiple layout managers, but these both render the exact same
attributed string (except that one view has been essentially zoomed to
twice the size). I am curious if it is possible to actually change
temporary attributes in one LayoutManager but not the other, and then
change them back appropriately before sending events to the
NSTextStorage.)
End technical discussion
----
Begin back story for those interested:
I am a relatively new Cocoa developer working on an open-source
project for academics. I recently spent considerable time working on
a web-based version of this application before learning that the
hardest part was technically infeasible because of some limitations in
HTML's designmode. In starting with Cocoa, I will be happy if the
project and required learning takes many years, so long as there is an
answer in advance to this one difficult question.
The application is an editor for a specific subset of the TEI XML
guidelines for encoding literary works and scholarly commentaries on
them. The underlying data maps very nicely into an attributed string,
because it is a single text divided up into separate 'series' (main
text, footnotes, cross-links) The series are all anchored together,
but would best be displayed apart, with first the main text, then each
series of notes. I believe the easiest way to do this would be to have
a single underlying NSTextStorage, to attribute every range of text to
one series, and then to create various subclasses (or formatters) for
NSLayoutManager that each display only text in one particular series.
I suspect this could also be done with a custom Typesetter and the
method setNotShownAttribute:forGlyphAtIndex:, but am curious if there
is a more general hook to set attributes on the string before layout.
Thank you,
Adam Solove
_______________________________________________
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
_______________________________________________
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