html2wml.pl
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:6k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. #!/usr/bin/perl
  2. require HTML::TokeParser;
  3. # html2wml 0.1 13/01/2000
  4. # Taneli Leppa <rosmo@SEKTORI.COM>
  5. # License: public domain
  6. $error_cardstart = "<card id="error" title="Error" newcontext="true">n";
  7. $error_cardend   = "</card>n";
  8. $error_filenotfound = $error_cardstart . "<p>The file was not found.</p>n" . $error_cardend;
  9. $HTML_HEAD = 0x0001;
  10. $HTML_UL   = 0x0002;
  11. $HTML_NL   = 0x0004;
  12. # Print default headers
  13. $wml = q{<?xml version="1.0"?>
  14. <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
  15. <wml>
  16. };
  17. # Read in the HTML
  18. #
  19. if (!($p = HTML::TokeParser->new($ARGV[0]))) 
  20.   { $wml .= $error_filenotfound; goto "FINISH"; }
  21. $p->get_tag("title");
  22. $title = $p->get_text;
  23. $wml .= "<card id="foo" title="$title">n";
  24. if (!($p = HTML::TokeParser->new($ARGV[0]))) 
  25.   { $wml .= $error_filenotfound; goto "FINISH"; }
  26. $hide_text = 0;
  27. $current_place = 0;
  28. while ($token = $p->get_token)
  29. {
  30.     $_ = $token->[0];
  31.     TAGTYPE: {
  32. /S/ &&  do { $wmlbit = start_tag($token->[1], $token->[2]); last TAGTYPE; };
  33. /E/ &&  do { $wmlbit = end_tag($token->[1]); last TAGTYPE; };
  34. /T/ &&  do { $wmlbit = $token->[1]; chomp $wmlbit; last TAGTYPE; };
  35. # /D/ &&  do { $text = $token->[0]; last TAGTYPE; };
  36. # /PI/ && do { $text = $token->[0]; last TAGTYPE; };
  37.     }
  38.     if (!$hide_text) { $wml .= $wmlbit; }
  39. }
  40. close(F);
  41. FINISH:
  42. $wml .= "n</card>n</wml>";
  43. print length($wml), "n";
  44. print $wml;
  45. sub start_tag {
  46.     local($tag, $attrs) = @_;
  47.     my $s;
  48.    
  49.     if (uc($tag) eq "LI")
  50.     {
  51.       if ($current_place & $HTML_UL)
  52.        { if ($list_index > 1) { $s = "<BR/>"; } $s .= "* "; }  
  53.       if ($current_place & $HTML_OL)
  54.        { if ($list_index > 1) { $s = "<BR/>"; } $s .= " " . $list_index . ". "; }  
  55.       $list_index++;
  56.     }
  57.         
  58.     if (uc($tag) eq "BR")
  59.     {  
  60. $s = "<BR/>";
  61.     }
  62.     if (uc($tag) eq "UL")
  63.     {
  64. $list_index = 1;
  65. $current_place |= $HTML_UL;
  66. $s = "<BR/>";
  67.     }
  68.     if (uc($tag) eq "NL")
  69.     {
  70. $list_index = 1;
  71. $current_place |= $HTML_NL;
  72. $s = "<BR/>";
  73.     }
  74.     if (uc($tag) eq "H1" || uc($tag) eq "H2")
  75.     { 
  76. $s = "<STRONG>";
  77.     } 
  78.     if (uc($tag) eq "H3" || uc($tag) eq "H4")
  79.     { 
  80. $s = "<EM>";
  81.     } 
  82.     if (uc($tag) eq "H5" || uc($tag) eq "H6")
  83.     { 
  84. $s = "<B>";
  85.     } 
  86.     if (uc($tag) eq "HEAD")
  87.     {
  88. $current_place |= $HTML_HEAD;
  89. $hide_text = 1;
  90.     }
  91.     if (uc($tag) eq "IMG")
  92.     {
  93. if ($attrs->{"alt"} ne "")
  94.         {
  95.     $s = $attrs->{"alt"};
  96. }
  97.     }
  98.     if (uc($tag) eq "TEXTAREA")
  99.     {
  100. $s = "<INPUT type="text" name="" . $attrs->{"name"} . """;
  101. if ($attrs->{"size"} ne "") { $s .= " size="" . $attrs->{"size"} . """; } 
  102. $s .= " value="";
  103. push @form_dynamic_vars, $attrs->{"name"};
  104.     }
  105.     if (uc($tag) eq "INPUT")
  106.     {
  107. if (uc($attrs->{"type"}) eq "TEXT")
  108. {
  109.     $s = "<INPUT type="text" name="" . $attrs->{"name"} . "" value="" . $attrs->{"value"} . """;
  110.     if ($attrs->{"size"} ne "") { $s .= " size="" . $attrs->{"size"} . """; } 
  111.             $s .= "/>n";
  112.     push @form_dynamic_vars, $attrs->{"name"};
  113. }
  114. if (uc($attrs->{"type"}) eq "SUBMIT") 
  115. {
  116.     $form_submit_label = $attrs->{"value"};
  117. }
  118. if (uc($attrs->{"type"}) eq "PASSWORD") 
  119. {
  120.     $s = "<INPUT type="text" name="" . $attrs->{"name"} . """;
  121.     if ($attrs->{"size"} ne "") { $s .= " size="" . $attrs->{"size"} . """; } 
  122.     $s .= "/>";
  123.     push @form_dynamic_vars, $attrs->{"name"};             
  124. }
  125. if (uc($attrs->{"type"}) eq "HIDDEN") 
  126. {
  127.     push @form_static_vars, ($attrs->{"name"}, $attrs->{"value"});
  128. }
  129.     }
  130.     if (uc($tag) eq "FORM")
  131.     {
  132. reset(@form_dynamic_vars);
  133. reset(@form_static_vars);
  134.         reset $form_submit_label;
  135. $form_method = $attrs->{"method"};
  136. $form_action = $attrs->{"action"};
  137.     }
  138.     if (uc($tag) eq "A")
  139.     {
  140.      $s = "<A href="" . $attrs->{"href"} . "">";
  141.     }
  142.     if (uc($tag) eq "B")
  143.     {
  144. $s = "<EM>";
  145.     }
  146.     if (uc($tag) eq "I" || uc($tag) eq "U")
  147.     {
  148. $s = "<" . uc($tag) . ">";
  149.     }
  150.     if (uc($tag) eq "P")
  151.     {
  152. $s = "<P/>";
  153.     }
  154.     return $s; 
  155. }
  156. sub end_tag {
  157.     local($tag) = @_;
  158.     my $s;
  159.     if (uc($tag) eq "UL")
  160.     {
  161. $current_place ^= $HTML_UL;
  162. $s = "<BR/>";
  163.     }
  164.     if (uc($tag) eq "NL")
  165.     {
  166. $current_place ^= $HTML_NL;
  167. $s = "<BR/>";
  168.     }
  169.    
  170.     if (uc($tag) eq "H1" || uc($tag) eq "H2")
  171.     { 
  172. $s = "</STRONG><BR/>";
  173.     } 
  174.     if (uc($tag) eq "H3" || uc($tag) eq "H4")
  175.     { 
  176. $s = "</EM><BR/>";
  177.     } 
  178.     if (uc($tag) eq "H5" || uc($tag) eq "H6")
  179.     { 
  180. $s = "</B><BR/>";
  181.     } 
  182.     if (uc($tag) eq "HEAD")
  183.     {
  184. $current_place ^= $HTML_HEAD;
  185. $hide_text = 0;
  186.     }
  187.     if (uc($tag) eq "STYLE")
  188.     {
  189. if ($current_place & $HTML_HEAD) { $hide_text = 0; }
  190.     }
  191.     if (uc($tag) eq "TEXTAREA")
  192.     {
  193. $s = ""/>";
  194.     }
  195.     if (uc($tag) eq "FORM")
  196.     {
  197. $s =  "n<DO type="accept" label="$form_submit_label">n";
  198.         if (uc($form_method) eq "") { $form_method = "GET"; }
  199.         if (uc($form_method) eq "POST") 
  200. {
  201.     $s .= "t<GO method="POST" href="$form_action">n";
  202.     $z = pop @form_static_vars;
  203.     while (defined($z)) 
  204.     {
  205.         $x = pop @form_static_vars;
  206. $s .= "tt" . "<POSTFIELD name="$z" value="$x">n";
  207.         $z = pop @form_static_vars;
  208.             }
  209.     foreach $z (@form_dynamic_vars)
  210.     {
  211. $s .= "tt" . "<POSTFIELD name="$z" value="${$z}">n";
  212.             }
  213.     $s .= "nt</GO>n";
  214.         }
  215.         if (uc($form_method) eq "GET") 
  216. {
  217.     $s .= "t<GO href="$form_action?"; 
  218.       
  219.         $z = pop @form_static_vars; $i = 0;
  220.             while (defined($z)) 
  221.     {
  222. if ($i++ > 0) { $s .= "&"; } 
  223. $s .= $z;
  224.                 $z = pop @form_static_vars;                
  225. if (defined($z)) 
  226.                   { 
  227.    $s .= "=" . $z; 
  228.                    $z = pop @form_static_vars;                
  229.   }
  230.             }
  231.         $z = pop @form_dynamic_vars;
  232.             while (defined($z)) 
  233.     {
  234. if ($i++ > 0) { $s .= "&amp;"; } 
  235. $s .= $z . "=${" . $z . "}";
  236.                 $z = pop @form_dynamic_vars;                
  237.             }
  238.     $s .= ""/>t</GO>n";
  239.         }
  240. $s .= "</DO>n";
  241.     }
  242.     if (uc($tag) eq "A")
  243.     {
  244. $s = "</A>";
  245.     }
  246.     if (uc($tag) eq "B")
  247.     {
  248. $s = "</EM>";
  249.     }
  250.     if (uc($tag) eq "I" || uc($tag) eq "U")
  251.     {
  252. $s = "</" . uc($tag) . ">";
  253.     }
  254.     return $s;
  255. }
  256. exit 0;