From: Kenneth McDonald Date: 2007-08-11T14:34:04+09:00 Subject: Re: Creating a over a range while preserving nesting The easy way to do this is to annotate _all text runs_ in the selected area; don't try to figure out if other tags are partly included or not. In this example, I'll use and :A> to mean a that closes an "anno" span. , , etc, stand for arbitrary other tags. All text is in lower case. So, your example is this is a:B> test bizarre:C> markup. your example of what you wanted then can be written as: :B> bizarre:C> markup.:A> This is difficult because it requires some amount of parsing to figure out what markup is 'complete' (both start and end tags present) and what isn't complete, then various processing to take that info into account. It's a pain Instead, if you can accept markup like this: :B>:D>:C> Then the algorithm for marking up the selection is simple; just find all pieces of "real" text in selection (i.e. not start or end tags), and wrap those pieces in . This is very easy to do with regular expressions. A potential problem is that you may end up with 'gaps' in your highlighting. On the other hand, you're less likely to run into weird CSS problems. Cheers, Ken Burke Libbey wrote: > While this is a rails-related question, it has more to do with ruby in > general. > > The user selects a range by highlighting it. This is detected with > javascript and fed to ruby. I want to take this range and highlight it. > > I'm doing that by adding around the region. > So that works ok, except that this often causes tag nesting problems. > What I want to do is intelligently add more tag pairs to preserve > nesting. > > For example, the range: > > this is a test that uses pretty > bizarre markup. > > Should become: > > this is a test > that uses pretty bizarre markup. > > I'm not looking for someone to write the code for me (although if you > did, I wouldn't complain); I just need someone to point me in the right > direction. Should I start from scratch with RegExes, or is there a > suitable library? > > Thanks. > > /burke >