[Jifty-commit] r6186 - in Template-Declare/branches/markapl-syntax: . lib/Template/Declare

Jifty commits jifty-commit at lists.jifty.org
Thu Dec 25 15:15:18 EST 2008


Author: gugod
Date: Thu Dec 25 15:15:18 2008
New Revision: 6186

Modified:
   Template-Declare/branches/markapl-syntax/   (props changed)
   Template-Declare/branches/markapl-syntax/lib/Template/Declare/Tags.pm
   Template-Declare/branches/markapl-syntax/t/markapl-syntax-xul-tagset.t

Log:
 r9519 at yra:  gugod | 2008-12-26 01:56:56 +0800
 Handle the case where a tag come with proto but without block. In tis case, it's:
 
    radio(id => "foo");
 


Modified: Template-Declare/branches/markapl-syntax/lib/Template/Declare/Tags.pm
==============================================================================
--- Template-Declare/branches/markapl-syntax/lib/Template/Declare/Tags.pm	(original)
+++ Template-Declare/branches/markapl-syntax/lib/Template/Declare/Tags.pm	Thu Dec 25 15:15:18 2008
@@ -15,6 +15,7 @@
 use Symbol 'qualify_to_ref';
 use Devel::Declare ();
 use B::Hooks::EndOfScope;
+use YAML;
 
 # use Template::Declare::TagCompiler;
 
@@ -67,6 +68,7 @@
             croak "Failed to load tagset module $module";
         }
         ### TagSet options: $opts
+
         my $tagset = $module->new($opts);
         my $tag_list = $tagset->get_tag_list;
 
@@ -75,11 +77,10 @@
         foreach my $tag (@$tag_list) {
             my $alternative = $tagset->get_alternate_spelling($tag) || $tag;
 
-            $code_str .= qq{sub $alternative (&);};
-            $config->{$alternative} = {
-                const => tag_parser_for($tag, $tagset)
-            }
+            $code_str .= "sub $alternative;";
+            $config->{$alternative} = { const => tag_parser_for($tag, $tagset) };
         }
+
         eval $code_str;
         Devel::Declare->setup_for($opts->{package}, $config);
     }
@@ -146,6 +147,13 @@
     return (defined($proto) && length($proto)) ? "($proto);" : "";
 }
 
+sub inject_right_here {
+    my $inject = shift;
+    my $linestr = Devel::Declare::get_linestr;
+    substr($linestr, $Offset, 0) = $inject;
+    Devel::Declare::set_linestr($linestr);
+}
+
 sub inject_if_block {
     my $inject = shift;
     skipspace;
@@ -163,6 +171,7 @@
     if (substr($linestr, $Offset, 1) eq '{') {
         substr($linestr, $Offset, 0) = $inject;
         Devel::Declare::set_linestr($linestr);
+        return 1;
     }
 }
 
@@ -180,6 +189,11 @@
 
     return sub {
         my $block = pop;
+        if ((ref($block) ne 'CODE')) {
+            push @_, $block;
+            $block = sub {};
+        }
+        
         my @attr = @_;
         %ATTRIBUTES = ();
 
@@ -219,12 +233,10 @@
 
         inject_if_block("no strict; BEGIN { Template::Declare::TagCompiler::inject_scope }; use strict;");
 
-        if (defined($proto)) {
-            inject_before_block("$proto, sub");
-        }
-        else {
-            inject_before_block("sub");
+        unless (inject_before_block(defined $proto ? "$proto, sub" : "sub")) {
+            inject_right_here("($proto)") if defined $proto;
         }
+        
         shadow(_tag_builder_for($tag, $tagset));
     }
 }

Modified: Template-Declare/branches/markapl-syntax/t/markapl-syntax-xul-tagset.t
==============================================================================
--- Template-Declare/branches/markapl-syntax/t/markapl-syntax-xul-tagset.t	(original)
+++ Template-Declare/branches/markapl-syntax/t/markapl-syntax-xul-tagset.t	Thu Dec 25 15:15:18 2008
@@ -26,13 +26,6 @@
 use Test::More tests => 1;
 
 my $out = (Template::Declare->show("main"));
-diag($out);
-
-# like($out, qr{<div(\s+id="id")?>\s*<p>.+?</p>\s*</div>});
-pass;
-
-
-
-
-
+# diag($out);
 
+like($out, qr{<radio\s+id=".+?".+/>});


More information about the Jifty-commit mailing list