mkpod
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/local/bin/perl5
  2. # Filename: mkpod
  3. #
  4. # Author: Paul Marquess
  5. # File types
  6. #
  7. #    Macro files end with .M
  8. #    Tagged source files end with .T
  9. #    Output from the code ends with .O
  10. #    Pre-Pod file ends with .P
  11. #    
  12. # Tags
  13. #
  14. #    ## BEGIN tagname
  15. #     ...
  16. #    ## END tagname
  17. #
  18. #    ## 0
  19. #    ## 1
  20. #
  21. # Constants
  22. $TOKEN = '##' ;
  23. $Verbose = 1 if $ARGV[0] =~ /^-v/i ;
  24. # Macros files first
  25. foreach $file (glob("*.M"))
  26. {
  27.     open (F, "<$file") or die "Cannot open '$file':$!n" ;
  28.     print "    Processing Macro file $filen"  ;
  29.     while (<F>)
  30.     {
  31.         # Skip blank & comment lines
  32.         next if /^s*$/ || /^s*#/ ;
  33. ($name, $expand) = split (/t+/, $_, 2) ;
  34. $expand =~ s/^s*// ;
  35.         $expand =~ s/s*$// ;
  36. if ($expand =~ /[#/ )
  37. {
  38. }
  39. $Macros{$name} = $expand ;
  40.     }
  41.     close F ;
  42. }
  43. # Suck up all the code files
  44. foreach $file (glob("t/*.T"))
  45. {
  46.     ($newfile = $file) =~ s/.T$// ;
  47.     open (F, "<$file") or die "Cannot open '$file':$!n" ;
  48.     open (N, ">$newfile") or die "Cannot open '$newfile':$!n" ;
  49.     print "    Processing $file -> $newfilen"  ;
  50.     while ($line = <F>)
  51.     {
  52.         if ($line =~ /^$TOKENs*BEGINs+(w+)s*$/ or
  53.             $line =~ m[s*/*$TOKENs*BEGINs+(w+)s*$] )
  54.         {
  55.     print "    Section $1 beginsn" if $Verbose ;
  56.     $InSection{$1} ++ ;
  57.     $Section{$1} = '' unless $Section{$1} ;
  58.         }
  59.         elsif ($line =~ /^$TOKENs*ENDs+(w+)s*$/ or
  60.                $line =~ m[^s*/*$TOKENs*ENDs+(w+)s*$] )
  61.         {
  62.     warn "Encountered END without a begin [$line]n"
  63. unless $InSection{$1} ;
  64.     delete $InSection{$1}  ;
  65.     print "    Section $1 endsn" if $Verbose ;
  66.         }
  67.         else
  68.         {
  69.     print N $line ;
  70.     chop $line ;
  71.     $line =~ s/s*$// ;
  72.     # Save the current line in each of the sections
  73.     foreach( keys %InSection)
  74.     {
  75. if ($line !~ /^s*$/ )
  76.           #{ $Section{$_} .= "    $line" }
  77.           { $Section{$_} .= $line }
  78.         $Section{$_} .= "n" ;
  79.     }
  80.         }
  81.     }
  82.     if (%InSection)
  83.     {
  84.         # Check for unclosed sections
  85. print "The following Sections are not terminatedn" ;
  86.         foreach (sort keys %InSection)
  87.           { print "t$_n" }
  88. exit 1 ;
  89.     }
  90.     close F ;
  91.     close N ;
  92. }
  93. print "nnCreating pod file(s)nn" if $Verbose ;
  94. @ppods = glob('*.P') ;
  95. #$ppod = $ARGV[0] ;
  96. #$pod = $ARGV[1] ;
  97. # Now process the pre-pod file
  98. foreach $ppod (@ppods)
  99. {
  100.     ($pod = $ppod) =~ s/.P$// ;
  101.     open (PPOD, "<$ppod") or die "Cannot open file '$ppod': $!n" ;
  102.     open (POD, ">$pod") or die "Cannot open file '$pod': $!n" ;
  103.     print "    $ppod -> $podn" ;
  104.     while ($line = <PPOD>)
  105.     {
  106.         if ( $line =~ /^s*$TOKENs*(w+)s*$/)
  107.         {
  108.             warn "No code insert '$1' availablen"
  109.         unless $Section{$1} ;
  110.     
  111.     print "Expanding section $1n" if $Verbose ;
  112.     print POD $Section{$1} ;
  113.         }
  114.         else
  115.         {
  116. #     $line =~ s/[#([^]])]/$Macros{$1}/ge ;
  117.     print POD $line ;
  118.         }
  119.     }
  120.     
  121.     close PPOD ;
  122.     close POD ;
  123. }