in reply to Converting span tags.
Everytime you find an open span tag push the attribute onto the stack. When you find a close span tag pop the attribute off the stack. You'll then know which attribute you are closing.
If the stack runs out of attributes or if you have some left over you'll also know that the span tags weren't balanced :-)
Hope that helps.
Update:
I would _certainly_ use an HTML parser
Update 2:
Code added.
Output#!/usr/bin/perl use warnings; use strict; use HTML::TokeParser::Simple; my $html; { local $/; $html = <DATA> } my @stack; my %lookup = ( 'font-weight: bold;' => 'b', 'font-style: italic;' => 'i', 'text-decoration: underline;' => 'u', ); my $tp = HTML::TokeParser::Simple->new(\$html); while (my $t = $tp->get_token){ if ($t->is_start_tag('span')){ my $attr = $t->get_attr('style'); my $tag = $lookup{$attr}; push @stack, $tag; print "<$tag>"; next; } if ($t->is_end_tag('span')){ my $tag = pop @stack; print "</$tag>"; next; } print $t->as_is; } __DATA__ this <span style="font-weight: bold;">is</span> some <span style="font-weight: bold;">test <span style="font-style: italic;">text</span> <span style="text-decoration: underline;">for</span> bolding</span>, + underlining and italicizing text.<br />
---------- Capture Output ---------- > "c:\perl\bin\perl.exe" _new.pl this <b>is</b> some <b>test <i>text</i> <u>for</u> bolding</b>, underlining and italicizing text.<br /> > Terminated with exit code 0.
|
|---|
| Replies are listed 'Best First'. |
|---|