[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Creating a over a range while preserving nesting

burke

8/10/2007 3:29:00 PM

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 <span class="anno"></span> 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</span> test <strong>that <span>uses pretty</span>
bizarre</strong> markup.

Should become:

<span class="anno">this is a</span></span><span class="anno"> test
<strong>that <span>uses pretty</span> bizarre</strong> markup.</span>

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
--
Posted via http://www.ruby-....

2 Answers

Konrad Meyer

8/10/2007 11:06:00 PM

0

On Friday 10 August 2007 08:28:38 am 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 <span class="anno"></span> 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</span> test <strong>that <span>uses pretty</span>
> bizarre</strong> markup.
>
> Should become:
>
> <span class="anno">this is a</span></span><span class="anno"> test
> <strong>that <span>uses pretty</span> bizarre</strong> markup.</span>
>
> 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

You might look into Hpricot by _why or stdlib REXML.

--
Konrad Meyer <konrad@tylerc.org> http://konrad.sobertil...

Kenneth McDonald

8/11/2007 5:34:00 AM

0

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 <A: to mean <span class="anno"> and :A> to
mean a </span> that
closes an "anno" span. <B and B>, <C and C>, etc, stand for arbitrary
other tags. All text
is in lower case.

So, your example is

this is a:B> test <C:that <D:uses pretty:D>
bizarre:C> markup.

your example of what you wanted then can be written as:

<A:this is a:A>:B><A: test <C:that <D:uses pretty:D>
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:

<A:this is a:A>:B><A: test :A><C:<A:that :A><D:<A:uses pretty:A>:D><A:bizarre:A>:C><A: markup.:A>

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 <A: and :A>. 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 <span class="anno"></span> 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</span> test <strong>that <span>uses pretty</span>
> bizarre</strong> markup.
>
> Should become:
>
> <span class="anno">this is a</span></span><span class="anno"> test
> <strong>that <span>uses pretty</span> bizarre</strong> markup.</span>
>
> 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
>