Changeset 7958


Ignore:
Timestamp:
06/28/10 20:33:07 (2 years ago)
Author:
MichaelTempest
Message:

Item1117: Make PreferencesPlugin ignore settings inside verbatim blocks, which means that settings inside verbatim blocks do not break the PreferencesPlugin anymore

Location:
trunk/PreferencesPlugin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/PreferencesPlugin/lib/Foswiki/Plugins/PreferencesPlugin.pm

    r7943 r7958  
    8888 
    8989        # Replace setting values by form fields but not inside comments Item4816 
     90        # and also not inside verbatim blocks Item1117 
    9091        my $outtext       = ''; 
    9192        my $insidecomment = 0; 
    92         foreach my $token ( split /(<!--|-->)/, $_[0] ) { 
    93             if ( $token =~ /<!--/ ) { 
     93        my $insideverbatim = 0; 
     94        foreach my $token ( split /(<!--|-->|<\/?verbatim\b[^>]*>)/, $_[0] ) { 
     95            if ( !$insideverbatim and $token =~ /<!--/ ) { 
    9496                $insidecomment++; 
    9597            } 
    96             elsif ( $token =~ /-->/ ) { 
     98            elsif ( !$insideverbatim and $token =~ /-->/ ) { 
    9799                $insidecomment-- if ( $insidecomment > 0 ); 
    98100            } 
    99             elsif ( !$insidecomment ) { 
     101            elsif ( $token =~ /<verbatim/ ) { 
     102                $insideverbatim++; 
     103            } 
     104            elsif ( $token =~ /<\/verbatim/ ) { 
     105                $insideverbatim-- if ( $insideverbatim > 0 ); 
     106            } 
     107            elsif ( !$insidecomment and !$insideverbatim) { 
    100108                $token =~ 
    101109s/^($Foswiki::regex{setRegex})($Foswiki::regex{tagNameRegex})\s*\=(.*$(?:\n[ \t]+[^\s*].*$)*)/ 
  • trunk/PreferencesPlugin/test/unit/PreferencesPlugin/PreferencesPluginTests.pm

    r7943 r7958  
    106106   * Set HIDDENSETTING = hidden 
    107107--> 
     108HTML 
     109 
     110    $session->finish(); 
     111} 
     112 
     113# Item1117 
     114sub test_edit_multiple_with_verbatim { 
     115    my $this  = shift; 
     116    my $query = new Unit::Request( { prefsaction => ['edit'], } ); 
     117    my $text  = <<HERE; 
     118Normal text outside form 
     119<verbatim> 
     120<!-- Comment-start inside verbatim is ignored 
     121</verbatim> 
     122%EDITPREFERENCES% 
     123   * Set FLEEGLE = floon 
     124<verbatim> 
     125Not in the form 
     126   * Set VERBATIMSETTING = ignored 
     127</verbatim> 
     128   * Set FLEEGLE2 = floontoo 
     129HERE 
     130    my $session = new Foswiki( undef, $query ); 
     131    $Foswiki::Plugins::SESSION = $session; 
     132    my $result = 
     133      Foswiki::Func::expandCommonVariables( $text, $this->{test_topic}, 
     134        $this->{test_web}, undef ); 
     135    my $viewUrl = 
     136      Foswiki::Func::getScriptUrl( $this->{test_web}, $this->{test_topic}, 
     137        'viewauth' ); 
     138    Foswiki::Plugins::PreferencesPlugin::postRenderingHandler($result); 
     139 
     140    # That <!-- in the verbatim block is encoded when rendering 
     141    # and it must be encoded here or else the "html_equals" fails 
     142    $result =~ s/<!-- Comment/&lt;!-- Comment/; 
     143    $result =~ s/<(\/?)verbatim>/<$1pre>/g; 
     144    $this->assert_html_equals( <<HTML, $result ); 
     145Normal text outside form 
     146<pre> 
     147&lt;!-- Comment-start inside verbatim is ignored 
     148</pre> 
     149<form method="post" action="$viewUrl" enctype="multipart/form-data" name="editpreferences"> 
     150 <input type="submit" name="prefsaction" value="Save new settings" accesskey="s" class="foswikiSubmit" /> 
     151 &nbsp; 
     152 <input type="submit" name="prefsaction" value="Cancel" accesskey="c" class="foswikiButtonCancel" /> 
     153   * Set <span style="font-weight:bold;" class="foswikiAlert">FLEEGLE = <input type="text" name="FLEEGLE" value="floon" size="80" class="foswikiAlert foswikiInputField" /></span> 
     154<pre> 
     155Not in the form 
     156   * Set VERBATIMSETTING = ignored 
     157</pre> 
     158   * Set <span style="font-weight:bold;" class="foswikiAlert">FLEEGLE2 = <input type="text" name="FLEEGLE2" value="floontoo" size="80" class="foswikiAlert foswikiInputField" /></span></form> 
    108159HTML 
    109160 
Note: See TracChangeset for help on using the changeset viewer.