From: <de...@de...> - 2011-04-14 08:11:14
|
Author: PeterThoeny Date: 2011-04-14 03:11:07 -0500 (Thu, 14 Apr 2011) New Revision: 21008 Trac url: http://develop.twiki.org/trac/changeset/21008 Modified: twiki/trunk/core/lib/TWiki.pm Log: Item6684: Include parameters with default feature - implementation (docs pending) Modified: twiki/trunk/core/lib/TWiki.pm =================================================================== --- twiki/trunk/core/lib/TWiki.pm 2011-04-12 04:34:40 UTC (rev 21007) +++ twiki/trunk/core/lib/TWiki.pm 2011-04-14 08:11:07 UTC (rev 21008) @@ -2961,17 +2961,19 @@ my $e = $this->{prefs}->getPreferencesValue( $tag ); if( defined( $e ) ) { if( $args ) { + # Codev.ParameterizedVariables feature my $attrs = new TWiki::Attrs( $args, $contextFreeSyntax{$tag} ); # Not possible to define a _DEFAULT setting, so use DEFAULT: if( ! defined $attrs->{DEFAULT} && defined $attrs->{_DEFAULT} ) { $attrs->{DEFAULT} = $attrs->{_DEFAULT}; } while( my ( $key, $value ) = each( %$attrs ) ) { - $e =~ s/%${key}({.*?default="(.*?[^\\])".*?})?%/_unescapeBS( $value )/ge; + $e =~ s/%${key}({ *default="(.*?[^\\]?)" *})?%/_unescapeQuotes( $value )/ge; } } + # In parameterized variables, expand %ALL_UNUSED_TAGS{ default="..." }% to defaults # FIXME: Quick hack; do proper variable parsing - $e =~ s/%[A-Za-z0-9_]+{.*?default="(.*?[^\\])".*?}%/_unescapeBS( $1 )/ge; + $e =~ s/%[A-Za-z0-9_]+{ *default="(.*?[^\\]?)" *}%/_unescapeQuotes( $1 )/ge; } else { $e = $this->{SESSION_TAGS}{$tag} unless( $args ); @@ -2984,7 +2986,7 @@ return $e; } -sub _unescapeBS { +sub _unescapeQuotes { my $text = shift; $text =~ s/\\(["'])/$1/g; return $text; @@ -3674,11 +3676,6 @@ $this->{SESSION_TAGS}{INCLUDINGWEB} = $includingWeb; $this->{SESSION_TAGS}{INCLUDINGTOPIC} = $includingTopic; - # copy params into session tags - foreach my $k ( keys %$params ) { - $this->{SESSION_TAGS}{$k} = $params->{$k}; - } - ( $meta, $text ) = $this->{store}->readTopic( undef, $includedWeb, $includedTopic, $rev ); @@ -3733,6 +3730,26 @@ $text =~ s/%TOC(?:{(.*?)})?%//g; } + # Codev.IncludeParametersWithDefault feature: + # Change %ALLTAGS{ default="..." }% to %ALLTAGS% and capture tags with defaults + # FIXME: Quick hack; do proper variable parsing + my $tagsWithDefault = undef; + $text =~ s/(%)([A-Za-z0-9_]+)({ *default=")(.*?[^\\]?)(" *})(%)/ + $tagsWithDefault->{$2} = _unescapeQuotes( $4 ); + "$1$2$6"/ge; + + foreach my $k ( keys %$params ) { + next if( $k eq '_RAW' ); + # copy params into session tags + $this->{SESSION_TAGS}{$k} = $params->{$k}; + # remove captured tag with default + delete $tagsWithDefault->{$k}; + } + foreach my $k ( keys %$tagsWithDefault ) { + # copy left over captured tags with default into session tags + $this->{SESSION_TAGS}{$k} = $tagsWithDefault->{$k}; + } + expandAllTags( $this, \$text, $includedTopic, $includedWeb, $meta ); # 4th parameter tells plugin that its called for an included file |