Author: CrawfordCurrie Date: 2007-09-28 04:44:04 -0500 (Fri, 28 Sep 2007) New Revision: 15077 Modified: twiki/branches/MAIN/twikiplugins/WysiwygPlugin/data/TWiki/WysiwygPlugin.txt twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/HTML2TML/Node.pm twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/TML2HTML.pm twiki/branches/MAIN/twikiplugins/WysiwygPlugin/test/unit/WysiwygPlugin/TranslatorTests.pm Log: Item4700: fixed colspans Item4712: fixed eating of noautolink and literal Modified: twiki/branches/MAIN/twikiplugins/WysiwygPlugin/data/TWiki/WysiwygPlugin.txt =================================================================== --- twiki/branches/MAIN/twikiplugins/WysiwygPlugin/data/TWiki/WysiwygPlugin.txt 2007-09-28 06:32:56 UTC (rev 15076) +++ twiki/branches/MAIN/twikiplugins/WysiwygPlugin/data/TWiki/WysiwygPlugin.txt 2007-09-28 09:44:04 UTC (rev 15077) @@ -165,6 +165,7 @@ | License | [[http://www.gnu.org/licenses/gpl.html][GPL (Gnu General Public License)]] | | Plugin Version: | %$VERSION% | | Change History: | | +| | Bugs:Item4700: fixed colspans Bugs:Item4712: fixed eating of noautolink | | 17 Sep 2007 | Bugs:Item4647: Bugs:Item4652: problems related to DIV fixed. Bugs:Item4653: fixed multi-line twiki variables | | 16 Sep 2007 | Bugs:Item4630: polished up the way the secret string is done, to ensure synch between perl and JS. Item4622: added UTF-8 handling steps that fixup malformed UTF8 strings before presenting them to the editor (saves Moz) and stops the editor passing them back to TWiki (saves IE). Removed extra entity decoding steps that were causing problems. Bugs:Item4629: fixed issues with verbatim, highlighted by previous mangling of this topic | | 13 Sep 2007 | Bugs:Item4613 cleaned up spurious message when navigating away Bugs:Item4615 fixed incorrect rendering of emphasis next to br | Modified: twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/HTML2TML/Node.pm =================================================================== --- twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/HTML2TML/Node.pm 2007-09-28 06:32:56 UTC (rev 15076) +++ twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/HTML2TML/Node.pm 2007-09-28 09:44:04 UTC (rev 15077) @@ -105,6 +105,8 @@ sub addChild { my( $this, $node ) = @_; + ASSERT($node != $this) if DEBUG; + push( @{$this->{children}}, $node ); } @@ -258,6 +260,10 @@ #print STDERR " -> '",WC::debugEncode($tml),"'\n"; $text .= $tml; } + # Collapse adjacent tags + foreach my $tag qw(noautolink verbatim literal) { + $text =~ s#</$tag>(\s*)<$tag>#$1#gs; + } # Top and tail, and terminate with a single newline $text =~ s/^\n*//s; $text =~ s/\s*$/\n/s; @@ -584,10 +590,11 @@ } } $text =~ s/ /$WC::NBSP/g; - if (--$ignoreCols > 0) { - # colspanned - $text = ''; - } elsif ($text =~ /^$WC::NBSP*$/) { + #if (--$ignoreCols > 0) { + # # colspanned + # $text = ''; + #} els + if ($text =~ /^$WC::NBSP*$/) { $text = $WC::NBSP; } else { $text = $WC::NBSP.$text.$WC::NBSP; @@ -598,6 +605,10 @@ } # Pad to allow wikiwords to work push( @row, $text ); + while ($ignoreCols > 1) { + push( @row, '' ); + $ignoreCols--; + } } return \@row; } Modified: twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/TML2HTML.pm =================================================================== --- twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/TML2HTML.pm 2007-09-28 06:32:56 UTC (rev 15076) +++ twiki/branches/MAIN/twikiplugins/WysiwygPlugin/lib/TWiki/Plugins/WysiwygPlugin/TML2HTML.pm 2007-09-28 09:44:04 UTC (rev 15077) @@ -47,8 +47,10 @@ # HTML elements that are palatable to editors. Other HTM tags will be # rendered in 'protected' regions to prevent the WYSIWYG editor mussing -# them up. -my $PALATABLE_HTML = qr/(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|BR|CAPTION|CENTER|CITE|CODE|COL|COLGROUP|DD|DEL|DFN|DIR|DIV|DL|DT|EM|FONT|H1|H2|H3|H4|H5|H6|HR|HTML|I|IMG|INS|ISINDEX|KBD|LABEL|LEGEND|LI|OL|P|PRE|Q|S|SAMP|SMALL|SPAN|STRONG|SUB|SUP|TABLE|TBODY|TD|TFOOT|TH|THEAD|TITLE|TR|TT|U|UL)/i; +# them up. Note that as well as the HTML tags we also consider NOAUTOLINK +# palatable, even though it isn't HTML, because it will be used later in +# the rendering process to generate a span. +my $PALATABLE_HTML = qr/(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|BR|CAPTION|CENTER|CITE|CODE|COL|COLGROUP|DD|DEL|DFN|DIR|DIV|DL|DT|EM|FONT|H1|H2|H3|H4|H5|H6|HR|HTML|I|IMG|INS|ISINDEX|KBD|LABEL|LEGEND|LI|OL|P|PRE|Q|S|SAMP|SMALL|SPAN|STRONG|SUB|SUP|TABLE|TBODY|TD|TFOOT|TH|THEAD|TITLE|TR|TT|U|UL|NOAUTOLINK)/i; =pod @@ -209,10 +211,10 @@ $this->{removed} = {}; # Map of placeholders to tag parameters and text + $text = $this->_takeOutBlocks( $text, 'verbatim' ); + $text = $this->_takeOutBlocks( $text, 'literal' ); - $text = $this->_takeOutBlocks( $text, 'verbatim' ); - $text = $this->_takeOutSets( $text ); # Remove PRE to prevent TML interpretation of text inside it @@ -420,11 +422,11 @@ $this->_putBackBlocks( $text, 'pre' ); + $this->_putBackBlocks( $text, 'literal', 'div' ); + # replace verbatim with pre in the final output, with encoded entities $this->_putBackBlocks( $text, 'verbatim', 'pre', \&_encodeEntities ); - $this->_putBackBlocks( $text, 'literal', 'div' ); - $text =~ s/(<nop>)/$this->_liftOut($1, 'PROTECTED')/ge; return $text; @@ -680,17 +682,20 @@ } # Work out colspans my $colspan = 0; + my @row; for (my $i = $#tr; $i >= 0; $i--) { if ($i && length($tr[$i]->{text}) == 0) { $colspan++; + next; } elsif ($colspan) { $tr[$i]->{attr}->{colspan} = $colspan + 1; $colspan = 0; } + unshift(@row, $tr[$i]); } no strict 'refs'; return $pre.CGI::Tr(join('', map { &{$_->{fn}}($_->{attr}, $_->{text}) } - @tr)); + @row)); use strict 'refs'; } Modified: twiki/branches/MAIN/twikiplugins/WysiwygPlugin/test/unit/WysiwygPlugin/TranslatorTests.pm =================================================================== --- twiki/branches/MAIN/twikiplugins/WysiwygPlugin/test/unit/WysiwygPlugin/TranslatorTests.pm 2007-09-28 06:32:56 UTC (rev 15076) +++ twiki/branches/MAIN/twikiplugins/WysiwygPlugin/test/unit/WysiwygPlugin/TranslatorTests.pm 2007-09-28 09:44:04 UTC (rev 15077) @@ -422,7 +422,7 @@ </noautolink> HERE finaltml => <<'HERE', -<noautolink>RedHat & SuSE</noautolink> +<noautolink> RedHat & SuSE </noautolink> HERE }, { @@ -841,7 +841,7 @@ html => '<table cellspacing="0" cellpadding="8" border="1" class="plain" _moz_resizing="true"> <tbody> <tr>a0<td>a1</td><td>a2</td><td>a3</td></tr> -<tr>b0<td colspan="2">b1</td><td></td><td>b3</td></tr> +<tr>b0<td colspan="2">b1</td><td>b3</td></tr> <tr>c0<td>c1</td><td>c2</td><td>c3</td></tr> </tbody> </table>', @@ -894,8 +894,8 @@ html => '<p>abcd </p> <table cellspacing="1" cellpadding="0" border="1"> -<tr><td colspan="2">efg</td><td></td><td> </td></tr> -<tr><td colspan="3"></td><td></td><td></td></tr></table> +<tr><td colspan="2">efg</td><td> </td></tr> +<tr><td colspan="3"></td></tr></table> hijk', tml => 'abcd | efg || | @@ -1288,6 +1288,48 @@ tml => 'ABC<br /> _DEF_', html => 'ABC<br /><i>DEF</i>', }, + { + exec => $TML2HTML | $HTML2TML, + name => 'Item4700', + tml => <<EXPT, +| ex | per | iment | +| exper | iment || +| expe || riment | +|| exper | iment | +EXPT + finaltml => <<EXPT, +| ex | per | iment | +| exper | iment || +| expe || riment | +| | exper | iment | +EXPT + html => <<HEXPT, +<table cellspacing="1" cellpadding="0" border="1"> +<tr><td>ex</td><td>per</td><td>iment</td></tr> +<tr><td>exper</td><td colspan="2">iment</td></tr> +<tr><td colspan="2">expe</td><td>riment</td></tr> +<tr><td></td><td>exper</td><td>iment</td></tr> +</table> +HEXPT + }, + { + exec => $ROUNDTRIP, + name => 'Item4700_2', + tml => <<EXPT, +| ex | per | iment | +| exper | iment || +| expe || riment | +| | exper | iment | +EXPT + html => <<HEXPT, +<table cellspacing="1" cellpadding="0" border="1"> +<tr><td>ex</td><td>per</td><td>iment</td></tr> +<tr><td>exper</td><td colspan="2">iment</td></tr> +<tr><td colspan="2">expe</td><td>riment</td></tr> +<tr><td></td><td>exper</td><td>iment</td></tr> +</table> +HEXPT + }, ]; sub gen_compare_tests { |