basic HTML tags
Matt S Trout [Wed, 21 Oct 2009 16:34:43 +0000 (12:34 -0400)]
lib/HTML/Tags.pm [new file with mode: 0644]
lib/XML/Tags.pm
t/tags.t

diff --git a/lib/HTML/Tags.pm b/lib/HTML/Tags.pm
new file mode 100644 (file)
index 0000000..6957831
--- /dev/null
@@ -0,0 +1,30 @@
+package HTML::Tags;
+
+use strict;
+use warnings FATAL => 'all';
+use XML::Tags ();
+
+my @HTML_TAGS = qw(
+        h1 h2 h3 h4 h5 h6 p br hr ol ul li dl dt dd menu code var strong em tt
+        u i b blockquote pre img a address cite samp dfn html head base body
+        link nextid title meta kbd start_html end_html input select option
+        comment charset escapehtml div table caption th td tr tr sup sub
+        strike applet param nobr embed basefont style span layer ilayer font
+        frameset frame script small big area map abbr acronym bdo col colgroup
+        del fieldset iframe ins label legend noframes noscript object optgroup
+        q thead tbody tfoot blink fontsize center textfield textarea filefield
+        password_field hidden checkbox checkbox_group submit reset defaults
+        radio_group popup_menu button autoescape scrolling_list image_button
+        start_form end_form startform endform start_multipart_form
+        end_multipart_form isindex tmpfilename uploadinfo url_encoded
+        multipart form canvas
+);
+
+sub import {
+  my ($class, @rest) = @_;
+  my $opts = ref($rest[0]) eq 'HASH' ? shift(@rest) : {};
+  ($opts->{into_level}||=1)++;
+  XML::Tags->import($opts, @HTML_TAGS, @rest);
+}
+
+1;
index f469070..480fefc 100644 (file)
@@ -3,6 +3,10 @@ package XML::Tags;
 use strict;
 use warnings FATAL => 'all';
 
+use File::Glob ();
+
+
+
 my $IN_SCOPE = 0;
 
 sub import {
@@ -12,6 +16,7 @@ sub import {
   my $opts = shift(@args) if ref($args[0]) eq 'HASH';
   my $target = $class->_find_target(0, $opts);
   my @tags = $class->_find_tags(@args);
+  $class->_setup_glob_override;
   my $unex = $class->_export_tags_into($target => @tags);
   $class->_install_unexporter($unex);
   $IN_SCOPE = 1;
@@ -36,7 +41,7 @@ sub _find_target {
     *CORE::GLOBAL::glob = sub {
       for ($_[0]) {
         # unless it smells like </foo> or <foo bar="baz">
-        return CORE::glob($_[0]) unless (/^\/\w+$/ || /^\w+\s+\w+="/);
+        return File::Glob::glob($_[0]) unless (/^\/\w+$/ || /^\w+\s+\w+="/);
       }
       return '<'.$_[0].'>';
     };
@@ -49,11 +54,6 @@ sub _export_tags_into {
     no strict 'refs';
     tie *{"${into}::${tag}"}, 'XML::Tags::TIEHANDLE', "<${tag}>";
   }
-  my $orig = \&CORE::GLOBAL::glob || sub { CORE::glob($_[0]) };
-  {
-    no warnings 'redefine';
-    *CORE::GLOBAL::glob = sub { '<'.$_[0].'>' };
-  }
   return sub {
     foreach my $tag (@tags) {
       no strict 'refs';
index b7857ca..4f9807b 100644 (file)
--- a/t/tags.t
+++ b/t/tags.t
@@ -19,6 +19,11 @@ use Test::More qw(no_plan);
     use XML::Tags qw(bar);
     </bar>;
   }
+
+  sub quux {
+    use HTML::Tags;
+    <html>, <body id="spoon">, "YAY", </body>, </html>;
+  }
 }
 
 is(
@@ -34,3 +39,9 @@ is(
   '</bar>',
   'close tag ok'
 );
+
+is(
+  join('', Foo::quux),
+  '<html><body id="spoon">YAY</body></html>',
+  'HTML tags ok'
+);