home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 May / CHIP_CD_2003-05.iso / bonus / listing / listing.txt next >
Text File  |  2005-05-04  |  7KB  |  208 lines

  1.  
  2.  
  3. # mkmap.pl - ±Ω≡Φ∩≥ Σδ  πσφσ≡α÷ΦΦ Ωα≡≥√ ±αΘ≥α
  4. # Γ ±εε≥Γσ≥±≥ΓΦΦ ± ±≤∙σ±≥Γ≤■∙σΘ δεπΦ≈σ±ΩεΘ ±≥≡≤Ω≥≤≡εΘ
  5. # (C) └. ╦ε∞εΓ, 2003
  6.  
  7. # ╬≥Ω≡√Γασ∞ ⌠αΘδ source.txt Σδ  ≈≥σφΦ  ΩαΩ ∩ε≥εΩ SOURCE.
  8. # ┬ ±δ≤≈ασ ε≥±≤≥±≥ΓΦ  ≥αΩεπε ⌠αΘδα Γ√ΓεΣΦ∞ ±εεß∙σφΦσ εß ε°ΦßΩσ.
  9. if (-e 'source.txt')
  10. {
  11.   open(SOURCE, "source.txt");
  12. }
  13. else
  14. {
  15.   print "MkMap: ═σ ≤Σασ≥±  εßφα≡≤µΦ≥ⁿ ⌠αΘδ source.txt.\n";
  16.   exit(0);
  17. }
  18.  
  19. # ╧≤≥ⁿ Ω Ωα≥αδεπ≤, Γ Ωε≥ε≡ε∞ ±δσΣ≤σ≥ Φ±Ωα≥ⁿ ⌠αΘδ√ Σδ  Γ√≈δσφσφΦ 
  20. # φατΓαφΦΘ Φ ε∩Φ±αφΦΘ ΣεΩ≤∞σφ≥εΓ, ταΣασ≥±  ∩εδⁿτεΓα≥σδσ∞ Γ
  21. # Ωε∞αφΣφεΘ ±≥≡εΩσ. ┬ ±δ≤≈ασ, σ±δΦ ∩≤≥ⁿ φσ ταΣαφ, ∩εΣ≡ατ≤∞σΓασ≥± 
  22. # ≥σΩ≤∙ΦΘ Ωα≥αδεπ.
  23. $path = shift(@ARGV);
  24.  
  25. # ─εßαΓδ σ∞ Γ Ωεφσ÷ ∩≤≥Φ εß≡α≥φ√Θ "±δ²°", σ±δΦ ∩≤≥ⁿ φσ ≡αΓσφ
  26. # ∩≤±≥εΘ ±≥≡εΩσ Φ Γ Ωεφ÷σ σπε σ∙σ φσ≥ "±δ²°α".
  27. if (($path ne '') && (substr($path, -1) ne '\\'))
  28. {
  29.   $path = $path . '\\';
  30. }
  31.  
  32. # ┬√⌡εΣφεΘ ⌠αΘδ - sitemap.html. ╥α∞ ∩ε εΩεφ≈αφΦΦ ≡αßε≥√ ±Ω≡Φ∩≥α ß≤Σσ≥
  33. # ±εΣσ≡µα≥ⁿ±  πε≥εΓα  Ωα≡≥α ±αΘ≥α.
  34. open(SITEMAP, '>sitemap.html');
  35.  
  36. # ╧σ≡Γα  ±≥≡ε≈Ωα Γ√⌡εΣφεπε ⌠αΘδα - ε≥Ω≡√Γα■∙ΦΘ ≥²π
  37. # ∞α≡ΩΦ≡εΓαφφεπε ±∩Φ±Ωα.
  38. print SITEMAP "<ul>\n";
  39.  
  40. # ╙±≥αφαΓδΦΓασ∞ Γ 0 τφα≈σφΦσ ∩σ≡σ∞σφφεΘ, φατφα≈σφΦσ
  41. # Ωε≥ε≡εΘ ß≤Σσ≥ ∩ε ±φσφε ≈≤≥ⁿ φΦµσ.
  42. $lastspaces = 0;
  43.  
  44. # ╓ΦΩδ Γ√∩εδφ σ≥± , ∩εΩ≤Σα "σ±≥ⁿ ∩ε≡ε⌡ Γ ∩ε≡ε⌡εΓφΦ÷α⌡" -
  45. # ∩ε±≥≡ε≈φε ≈Φ≥ασ∞ ⌠αΘδ source.txt.
  46. while ($filename = <SOURCE>)
  47. {
  48.   chomp ($filename);
  49.  
  50.   # ╓σδⁿ φΦµσ±δσµ≤■∙σπε ÷ΦΩδα - Γ√ ΓΦ≥ⁿ ΩεδΦ≈σ±≥Γε ∩≡εßσδεΓ ∩σ≡σΣ
  51.   # ε≈σ≡σΣφ√∞ Φ∞σφσ∞ ⌠αΘδα, α ≥αΩµσ τα∩Φ±ⁿ Γ ∩σ≡σ∞σφφ≤■ $filename
  52.   # "ε≈Φ∙σφφεπε" ε≥ ∩≡εßσδεΓ Φ∞σφΦ ⌠αΘδα.
  53.   for($spaces = 0; $spaces <= length($filename); $spaces++)
  54.   {
  55.     if (substr($filename, $spaces, 1) ne ' ')
  56.     {
  57.       $filename = substr($filename, $spaces);
  58.       last;
  59.     }
  60.   }
  61.  
  62.   # ╧σ≡σ∞σφφα  $lastspaces ε≥≡αµασ≥ ΩεδΦ≈σ±≥Γε ∩≡εßσδεΓ, φαΘΣσφφ√⌡
  63.   # Γ ∩≡σΣ√Σ≤∙ΦΘ ≡ατ. ┬ ∩σ≡σ∞σφφεΘ $spaces ±εΣσ≡µΦ≥±  ΩεδΦ≈σ±≥Γε
  64.   # ∩≡εßσδεΓ, φαΘΣσφφ√⌡ Γ φα≈αδσ ±≥≡εΩΦ ± Φ∞σφσ∞ ⌠αΘδα Γ ²≥ε≥ ≡ατ.
  65.   # ╧σ≡σ∞σφφα  $diff ∩≡ΦτΓαφα ⌡≡αφΦ≥ⁿ ≡ατφε±≥ⁿ ²≥Φ⌡ ∩εΩαταφΦΘ.
  66.   $diff = $lastspaces - $spaces;
  67.  
  68.   # ┼±δΦ Γ ²≥ε≥ ≡ατ ∩≡εßσδεΓ ±≥αδε φα εΣΦφ ßεδⁿ°σ, ΣεßαΓδ σ∞ σ∙σ
  69.   # εΣΦφ ≤≡εΓσφⁿ Γδεµσφφε±≥Φ Γ ±∩Φ±εΩ ∩≤≥σ∞ Γ√ΓεΣα Σε∩εδφΦ≥σδⁿφεπε ≥²πα
  70.   # <ul>. ┬ ±δ≤≈ασ, σ±δΦ φεΓ√⌡ ∩≡εßσδεΓ ±≥αδε ßεδⁿ°σ εΣφεπε,
  71.   # ∩≡σΣ≤∩≡σµΣασ∞ εß ε°ΦßΩσ δεπΦ≈σ±ΩεΘ ±≥≡≤Ω≥≤≡√. ═σ±∞ε≥≡  φα ε°ΦßΩ≤,
  72.   # ≈α±≥ⁿ Ωα≡≥√ ±αΘ≥α ±⌠ε≡∞Φ≡εΓαφε Φ Σε±≥≤∩φε Σδ  αφαδΦτα Γ ⌠αΘδσ
  73.   # sitemap.html, ≈≥ε φσ  Γδ σ≥± , Γ ±≤∙φε±≥Φ, φσΣε±≥α≥Ωε∞ ±Ω≡Φ∩≥α -
  74.   # ΓσΣⁿ φσ Σε Ωεφ÷α ±πσφσ≡Φ≡εΓαφφα  Ωα≡≥α ∩ε∞εµσ≥ ß√±≥≡ε ≤±≥αφεΓΦ≥ⁿ
  75.   # ∞σ±≥ε ε°ΦßΩΦ.
  76.   if($diff < 0)
  77.   {
  78.     if($diff < -1)
  79.     {
  80.       print "MkMap: ╬°ΦßΩα δεπΦ≈σ±ΩεΘ ±≥≡≤Ω≥≤≡√ - φσ≥ εΣφεπε ΦδΦ
  81.       φσ±ΩεδⁿΩΦ⌡ ≤≡εΓφσΘ Φσ≡α≡⌡ΦΦ.\n";
  82.       exit(0);
  83.     }
  84.     print SITEMAP "<ul>\n";
  85.   }
  86.  
  87.   # ┬ ±δ≤≈ασ, σ±δΦ ∩≡εßσδεΓ ±≥αδε ∞σφⁿ°σ, Γ√ΓεΣ ≥±  ταΩ≡√Γα■∙Φσ ≥²πΦ
  88.   # </ul> Γ ΩεδΦ≈σ±≥Γσ, ±εε≥Γσ≥±≥Γ≤■∙σ∞ ≈Φ±δ≤ ∩≡εßσδεΓ. ┬σ≡ε ≥φε, ²≥ε≥
  89.   # ÷ΦΩδ ∞εµφε ΩαΩΦ∞-≥ε εß≡ατε∞ εß·σΣΦφΦ≥ⁿ ± ∩≡σΣ√Σ≤∙Φ∞, Φ Γεεß∙σ
  90.   # ±Σσδα≥ⁿ Γ±σ ßεδσσ ε∩≥Φ∞αδⁿφ√∞ Φ ²δσπαφ≥φ√∞, φε ∞√ ∩Φ°σ∞ ±Ω≡Φ∩≥ Σδ 
  91.   # ±σß , Φ φα°α ÷σδⁿ - ±²Ωεφε∞Φ≥ⁿ ±Γεσ ≡αßε≈σσ Γ≡σ∞ , α φσ ∩≡ε÷σ±±ε≡φεσ
  92.   # Γ≡σ∞  Ωε∞∩ⁿ■≥σ≡α (Ωε≥ε≡επε Φ ßστ ≥επε ≥≡α≥Φ≥±  ε≈σφⁿ φσ∞φεπε).
  93.   if($diff > 0)
  94.   {
  95.     for($j = 0; $j < $diff; $j++)
  96.     {
  97.       print SITEMAP "</ul>\n";
  98.     }
  99.   }
  100.  
  101.   # ╬≡παφΦτ≤σ∞ φεΓ≤■ ∩σ≡σ∞σφφ≤■ $file, πΣσ ß≤Σσ∞ ⌡≡αφΦ≥ⁿ
  102.   # αß±εδ■≥φ√Θ ∩≤≥ⁿ Ω ⌠αΘδ≤ HTML-±≥≡αφΦ÷√, Ωε≥ε≡√Θ φ≤µφε
  103.   # ∩≡εαφαδΦτΦ≡εΓα≥ⁿ. ╩αΩ Γ√ ∩ε∞φΦ≥σ, Γ ⌠αΘδσ source.txt
  104.   # φα⌡εΣ ≥±  δΦ°ⁿ ε≥φε±Φ≥σδⁿφ√σ ∩≤≥Φ.
  105.   $file = $filename;
  106.  
  107.   # ╧≡Φßσπασ∞ Ω ∩ε∞ε∙Φ ≡σπ≤δ ≡φ√⌡ Γ√≡αµσφΦΘ. ╙ßΦ≡ασ∞ Γετ∞εµφ√σ
  108.   # ±Φ∞Γεδ√ "\" Φ "/" Φτ φα≈αδα ±≥≡εΩΦ.
  109.   $file =~ s/^\\//;
  110.   $file =~ s/^\///;
  111.  
  112.   # ╟α∞σφ σ∞ Γ±σ ∩≡ ∞√σ "±δ²°Φ" φα εß≡α≥φ√σ - Γ ≡στ≤δⁿ≥α≥σ ±Ω≡Φ∩≥
  113.   # ß≤Σσ≥ φσ≈≤Γ±≥ΓΦ≥σδσφ Ω ∩≡ΦΓ√≈Ωα∞ ∩εδⁿτεΓα≥σδ .
  114.   $file =~ s/\//\\/g;
  115.  
  116.   # ╧≡Φ±εσΣΦφ σ∞ Ω φα≈αδ≤ ±≥≡εΩΦ αß±εδ■≥φ√Θ ∩≤≥ⁿ Ω Ωα≥αδεπ≤, Γτ ≥√Θ,
  117.   # φα∩ε∞φΦ∞, Φτ ∩α≡α∞σ≥≡α Ωε∞αφΣφεΘ ±≥≡εΩΦ.
  118.   $file = $path . $file;
  119.  
  120.   # ┬ ±δ≤≈ασ εßφα≡≤µσφΦ  ⌠αΘδα $file ±≈Φ≥√Γασ∞ Φτ φσπε Γ±■
  121.   # Φφ⌠ε≡∞α÷Φ■ Γ ΓΦΣσ εΣφεΘ ßεδⁿ°εΘ ±≥≡εΩΦ $info.
  122.   if (-e $file)
  123.   {
  124.     @filestats = stat($file);
  125.     $filesize = $filestats[7];
  126.     open(FILEINFO, $file);
  127.     sysread (FILEINFO, $info, $filesize);
  128.     close(FILEINFO);
  129.   }
  130.  
  131.   # ╙ßΦ≡ασ∞ Φτ ±≥≡εΩΦ $info Γ±σ ±Φ∞Γεδ√ φεΓεΘ ±≥≡εΩΦ Φ
  132.   # ταΓεΣΦ∞ φεΓ≤■ ∩σ≡σ∞σφφ≤■ $descr. ┬ ±≥≡εΩσ $info Γ∩ε±δσΣ±≥ΓΦΦ
  133.   # ß≤Σσ≥ ⌡≡αφΦ≥ⁿ±  ≥εδⁿΩε ±εΣσ≡µΦ∞εσ Ωεφ≥σΘφσ≡α <title>...</title>,
  134.   # α ∩σ≡σ∞σφφα  $descr ß≤Σσ≥ ∩≡σΣ±≥αΓδ ≥ⁿ ±εßεΘ ε∩Φ±αφΦσ, Γτ ≥εσ
  135.   # Φτ ∞σ≥α≥²πα.
  136.   $info =~ s/\n//g;
  137.   $descr = $info;
  138.  
  139.   # ╙Σαδ σ∞ Γ±σ, ≈≥ε ß√δε Σε <title>...
  140.   $info =~ s/^.+<title>//;
  141.  
  142.   # ...Φ Γ±σ, ≈≥ε ß≤Σσ≥ ∩ε±δσ </title>
  143.   $info =~ s/<\/title>.+$//;
  144.  
  145.   # ▌≥ε ≡σπ≤δ ≡φεσ Γ√≡αµσφΦσ ∩≡σΣφατφα≈σφε Σδ  Φσ≡α≡⌡Φ≈σ±ΩΦ⌡
  146.   # ταπεδεΓΩεΓ, ≡α±±∞ε≥≡σφφ√⌡ Γ φα≈αδσ ±≥α≥ⁿΦ. ╬≥≡στασ≥±  Γ±σ,
  147.   # ≈≥ε ±δσΣ≤σ≥ τα ∩σ≡Γ√∞ Γ±≥≡σ≥ΦΓ°Φ∞±  ±ε≈σ≥αφΦσ∞ " -", ΓΩδ■≈α 
  148.   # σπε ±α∞ε.
  149.   $info =~ s/ -.+//;
  150.  
  151.   # ╙Σαδ σ∞ Γ±σ, ≈≥ε ß√δε Σε "meta name="description" content=""...
  152.   $descr =~ s/^.+<meta name=\"description\" content=\"//;
  153.  
  154.   # ...Φ Γ±σ, ≈≥ε ß≤Σσ≥ ∩ε±δσ ∩σ≡ΓεΘ Γ±≥≡σ≥ΦΓ°σΘ±  ΩαΓ√≈ΩΦ
  155.   $descr =~ s/\".+//;
  156.  
  157.   # ╟α∞σφ σ∞ Γ $filename Γ±σ εß≡α≥φ√σ "±δ²°Φ" φα ∩≡ ∞√σ, ΩαΩ ∩≡Φφ ≥ε
  158.   # Γ πΦ∩σ≡±±√δΩα⌡.
  159.   $filename =~ s/\\/\//g;
  160.  
  161.   # ├σφσ≡Φ≡≤σ∞ ∩≤φΩ≥ ±∩Φ±Ωα - ≥²π <li> Φ ±±√δΩ≤ φα ⌠αΘδ.
  162.   print SITEMAP "<li><a href=\"$filename\">";
  163.  
  164.   # ┼±δΦ $info φσ ±εΣσ≡µΦ≥ ≤πδεΓ√⌡ ±ΩεßεΩ Φ ±δ²°σΘ, α ≥αΩµσ φσ
  165.   #  Γδ σ≥±  ∩≤±≥εΘ ±≥≡εΩεΘ, σ±≥ⁿ ε±φεΓαφΦ  ∩εδαπα≥ⁿ, ≈≥ε ²≥α
  166.   # ±≥≡εΩα ±εΣσ≡µΦ≥ Φ∞σφφε ≥ε, ≈≥ε φα∞ ≥≡σß≤σ≥± . ╬⌠ε≡∞δ σ∞ τφα≈σφΦσ
  167.   # ∩σ≡σ∞σφφεΘ $info ΩαΩ ±±√δΩ≤. ┬ ∩≡ε≥ΦΓφε∞ ±δ≤≈ασ ε⌠ε≡∞δ σ∞ ΩαΩ
  168.   # ±±√δΩ≤ ±δεΓε±ε≈σ≥αφΦσ "Untitled document" - Γετ∞εµφε, ταπεδεΓΩα
  169.   # εΩφα Γ ΣεΩ≤∞σφ≥σ ∩ε∩≡ε±≥≤ φσ≥.
  170.   if (($info !~ /[<>\/\"]/) && ($info ne ''))
  171.   {
  172.     print SITEMAP "$info</a>\n";
  173.  
  174.     # ┬ ±δ≤≈ασ, σ±δΦ ±≥≡εΩα $descr ≥αΩµσ φσ ∩≤±≥α  Φ φσ ±εΣσ≡µΦ≥ ≤πδεΓ√⌡
  175.     # ±ΩεßεΩ Φ ±δ²°σΘ, ∩εΣ ±±√δΩεΘ ∩ε∞σ∙ασ∞ ε∩Φ±αφΦσ ΣεΩ≤∞σφ≥α,
  176.     # φαß≡αφφεσ ≈≤≥ⁿ ∞σφⁿ°Φ∞ Ωσπδσ∞ (∩≡Φ∞σφ σ∞ ≥²π <small>).
  177.     if (($descr !~ /[<>\/\"]/) && ($descr ne ''))
  178.     {
  179.       print SITEMAP "<br><small>$descr</small>\n";
  180.     }
  181.   }
  182.   else
  183.   {
  184.     print SITEMAP "(Untitled document)</a>\n";
  185.   }
  186.  
  187.   $lastspaces = $spaces;
  188. }
  189.  
  190. # ┬ Ωεφ÷σ ≡αßε≥√ ΣεßαΓδ σ∞ φ≤µφεσ ΩεδΦ≈σ±≥Γε ταΩ≡√Γα■∙Φ⌡ ≥²πεΓ </ul>.
  191. for($j = 0; $j < $lastspaces; $j++)
  192. {
  193.   print SITEMAP "</ul>\n";
  194. }
  195.  
  196. print SITEMAP "</ul>";
  197.  
  198. # ╘ΦφΦ°φα  ∩≡ ∞α .
  199.  
  200. close(SOURCE);
  201.  
  202. print "MkMap: ≡αßε≥α ≤±∩σ°φε ταΓσ≡°σφα. ╤∞. ⌠αΘδ sitemap.html\n";
  203.  
  204. exit(0);
  205.  
  206.  
  207.  
  208.