home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2003 May
/
CHIP_CD_2003-05.iso
/
bonus
/
listing
/
listing.txt
next >
Wrap
Text File
|
2005-05-04
|
7KB
|
208 lines
# mkmap.pl - ±Ω≡Φ∩≥ Σδ πσφσ≡α÷ΦΦ Ωα≡≥√ ±αΘ≥α
# Γ ±εε≥Γσ≥±≥ΓΦΦ ± ±≤∙σ±≥Γ≤■∙σΘ δεπΦ≈σ±ΩεΘ ±≥≡≤Ω≥≤≡εΘ
# (C) └. ╦ε∞εΓ, 2003
# ╬≥Ω≡√Γασ∞ ⌠αΘδ source.txt Σδ ≈≥σφΦ ΩαΩ ∩ε≥εΩ SOURCE.
# ┬ ±δ≤≈ασ ε≥±≤≥±≥ΓΦ ≥αΩεπε ⌠αΘδα Γ√ΓεΣΦ∞ ±εεß∙σφΦσ εß ε°ΦßΩσ.
if (-e 'source.txt')
{
open(SOURCE, "source.txt");
}
else
{
print "MkMap: ═σ ≤Σασ≥± εßφα≡≤µΦ≥ⁿ ⌠αΘδ source.txt.\n";
exit(0);
}
# ╧≤≥ⁿ Ω Ωα≥αδεπ≤, Γ Ωε≥ε≡ε∞ ±δσΣ≤σ≥ Φ±Ωα≥ⁿ ⌠αΘδ√ Σδ Γ√≈δσφσφΦ
# φατΓαφΦΘ Φ ε∩Φ±αφΦΘ ΣεΩ≤∞σφ≥εΓ, ταΣασ≥± ∩εδⁿτεΓα≥σδσ∞ Γ
# Ωε∞αφΣφεΘ ±≥≡εΩσ. ┬ ±δ≤≈ασ, σ±δΦ ∩≤≥ⁿ φσ ταΣαφ, ∩εΣ≡ατ≤∞σΓασ≥±
# ≥σΩ≤∙ΦΘ Ωα≥αδεπ.
$path = shift(@ARGV);
# ─εßαΓδ σ∞ Γ Ωεφσ÷ ∩≤≥Φ εß≡α≥φ√Θ "±δ²°", σ±δΦ ∩≤≥ⁿ φσ ≡αΓσφ
# ∩≤±≥εΘ ±≥≡εΩσ Φ Γ Ωεφ÷σ σπε σ∙σ φσ≥ "±δ²°α".
if (($path ne '') && (substr($path, -1) ne '\\'))
{
$path = $path . '\\';
}
# ┬√⌡εΣφεΘ ⌠αΘδ - sitemap.html. ╥α∞ ∩ε εΩεφ≈αφΦΦ ≡αßε≥√ ±Ω≡Φ∩≥α ß≤Σσ≥
# ±εΣσ≡µα≥ⁿ± πε≥εΓα Ωα≡≥α ±αΘ≥α.
open(SITEMAP, '>sitemap.html');
# ╧σ≡Γα ±≥≡ε≈Ωα Γ√⌡εΣφεπε ⌠αΘδα - ε≥Ω≡√Γα■∙ΦΘ ≥²π
# ∞α≡ΩΦ≡εΓαφφεπε ±∩Φ±Ωα.
print SITEMAP "<ul>\n";
# ╙±≥αφαΓδΦΓασ∞ Γ 0 τφα≈σφΦσ ∩σ≡σ∞σφφεΘ, φατφα≈σφΦσ
# Ωε≥ε≡εΘ ß≤Σσ≥ ∩ε ±φσφε ≈≤≥ⁿ φΦµσ.
$lastspaces = 0;
# ╓ΦΩδ Γ√∩εδφ σ≥± , ∩εΩ≤Σα "σ±≥ⁿ ∩ε≡ε⌡ Γ ∩ε≡ε⌡εΓφΦ÷α⌡" -
# ∩ε±≥≡ε≈φε ≈Φ≥ασ∞ ⌠αΘδ source.txt.
while ($filename = <SOURCE>)
{
chomp ($filename);
# ╓σδⁿ φΦµσ±δσµ≤■∙σπε ÷ΦΩδα - Γ√ ΓΦ≥ⁿ ΩεδΦ≈σ±≥Γε ∩≡εßσδεΓ ∩σ≡σΣ
# ε≈σ≡σΣφ√∞ Φ∞σφσ∞ ⌠αΘδα, α ≥αΩµσ τα∩Φ±ⁿ Γ ∩σ≡σ∞σφφ≤■ $filename
# "ε≈Φ∙σφφεπε" ε≥ ∩≡εßσδεΓ Φ∞σφΦ ⌠αΘδα.
for($spaces = 0; $spaces <= length($filename); $spaces++)
{
if (substr($filename, $spaces, 1) ne ' ')
{
$filename = substr($filename, $spaces);
last;
}
}
# ╧σ≡σ∞σφφα $lastspaces ε≥≡αµασ≥ ΩεδΦ≈σ±≥Γε ∩≡εßσδεΓ, φαΘΣσφφ√⌡
# Γ ∩≡σΣ√Σ≤∙ΦΘ ≡ατ. ┬ ∩σ≡σ∞σφφεΘ $spaces ±εΣσ≡µΦ≥± ΩεδΦ≈σ±≥Γε
# ∩≡εßσδεΓ, φαΘΣσφφ√⌡ Γ φα≈αδσ ±≥≡εΩΦ ± Φ∞σφσ∞ ⌠αΘδα Γ ²≥ε≥ ≡ατ.
# ╧σ≡σ∞σφφα $diff ∩≡ΦτΓαφα ⌡≡αφΦ≥ⁿ ≡ατφε±≥ⁿ ²≥Φ⌡ ∩εΩαταφΦΘ.
$diff = $lastspaces - $spaces;
# ┼±δΦ Γ ²≥ε≥ ≡ατ ∩≡εßσδεΓ ±≥αδε φα εΣΦφ ßεδⁿ°σ, ΣεßαΓδ σ∞ σ∙σ
# εΣΦφ ≤≡εΓσφⁿ Γδεµσφφε±≥Φ Γ ±∩Φ±εΩ ∩≤≥σ∞ Γ√ΓεΣα Σε∩εδφΦ≥σδⁿφεπε ≥²πα
# <ul>. ┬ ±δ≤≈ασ, σ±δΦ φεΓ√⌡ ∩≡εßσδεΓ ±≥αδε ßεδⁿ°σ εΣφεπε,
# ∩≡σΣ≤∩≡σµΣασ∞ εß ε°ΦßΩσ δεπΦ≈σ±ΩεΘ ±≥≡≤Ω≥≤≡√. ═σ±∞ε≥≡ φα ε°ΦßΩ≤,
# ≈α±≥ⁿ Ωα≡≥√ ±αΘ≥α ±⌠ε≡∞Φ≡εΓαφε Φ Σε±≥≤∩φε Σδ αφαδΦτα Γ ⌠αΘδσ
# sitemap.html, ≈≥ε φσ Γδ σ≥± , Γ ±≤∙φε±≥Φ, φσΣε±≥α≥Ωε∞ ±Ω≡Φ∩≥α -
# ΓσΣⁿ φσ Σε Ωεφ÷α ±πσφσ≡Φ≡εΓαφφα Ωα≡≥α ∩ε∞εµσ≥ ß√±≥≡ε ≤±≥αφεΓΦ≥ⁿ
# ∞σ±≥ε ε°ΦßΩΦ.
if($diff < 0)
{
if($diff < -1)
{
print "MkMap: ╬°ΦßΩα δεπΦ≈σ±ΩεΘ ±≥≡≤Ω≥≤≡√ - φσ≥ εΣφεπε ΦδΦ
φσ±ΩεδⁿΩΦ⌡ ≤≡εΓφσΘ Φσ≡α≡⌡ΦΦ.\n";
exit(0);
}
print SITEMAP "<ul>\n";
}
# ┬ ±δ≤≈ασ, σ±δΦ ∩≡εßσδεΓ ±≥αδε ∞σφⁿ°σ, Γ√ΓεΣ ≥± ταΩ≡√Γα■∙Φσ ≥²πΦ
# </ul> Γ ΩεδΦ≈σ±≥Γσ, ±εε≥Γσ≥±≥Γ≤■∙σ∞ ≈Φ±δ≤ ∩≡εßσδεΓ. ┬σ≡ε ≥φε, ²≥ε≥
# ÷ΦΩδ ∞εµφε ΩαΩΦ∞-≥ε εß≡ατε∞ εß·σΣΦφΦ≥ⁿ ± ∩≡σΣ√Σ≤∙Φ∞, Φ Γεεß∙σ
# ±Σσδα≥ⁿ Γ±σ ßεδσσ ε∩≥Φ∞αδⁿφ√∞ Φ ²δσπαφ≥φ√∞, φε ∞√ ∩Φ°σ∞ ±Ω≡Φ∩≥ Σδ
# ±σß , Φ φα°α ÷σδⁿ - ±²Ωεφε∞Φ≥ⁿ ±Γεσ ≡αßε≈σσ Γ≡σ∞ , α φσ ∩≡ε÷σ±±ε≡φεσ
# Γ≡σ∞ Ωε∞∩ⁿ■≥σ≡α (Ωε≥ε≡επε Φ ßστ ≥επε ≥≡α≥Φ≥± ε≈σφⁿ φσ∞φεπε).
if($diff > 0)
{
for($j = 0; $j < $diff; $j++)
{
print SITEMAP "</ul>\n";
}
}
# ╬≡παφΦτ≤σ∞ φεΓ≤■ ∩σ≡σ∞σφφ≤■ $file, πΣσ ß≤Σσ∞ ⌡≡αφΦ≥ⁿ
# αß±εδ■≥φ√Θ ∩≤≥ⁿ Ω ⌠αΘδ≤ HTML-±≥≡αφΦ÷√, Ωε≥ε≡√Θ φ≤µφε
# ∩≡εαφαδΦτΦ≡εΓα≥ⁿ. ╩αΩ Γ√ ∩ε∞φΦ≥σ, Γ ⌠αΘδσ source.txt
# φα⌡εΣ ≥± δΦ°ⁿ ε≥φε±Φ≥σδⁿφ√σ ∩≤≥Φ.
$file = $filename;
# ╧≡Φßσπασ∞ Ω ∩ε∞ε∙Φ ≡σπ≤δ ≡φ√⌡ Γ√≡αµσφΦΘ. ╙ßΦ≡ασ∞ Γετ∞εµφ√σ
# ±Φ∞Γεδ√ "\" Φ "/" Φτ φα≈αδα ±≥≡εΩΦ.
$file =~ s/^\\//;
$file =~ s/^\///;
# ╟α∞σφ σ∞ Γ±σ ∩≡ ∞√σ "±δ²°Φ" φα εß≡α≥φ√σ - Γ ≡στ≤δⁿ≥α≥σ ±Ω≡Φ∩≥
# ß≤Σσ≥ φσ≈≤Γ±≥ΓΦ≥σδσφ Ω ∩≡ΦΓ√≈Ωα∞ ∩εδⁿτεΓα≥σδ .
$file =~ s/\//\\/g;
# ╧≡Φ±εσΣΦφ σ∞ Ω φα≈αδ≤ ±≥≡εΩΦ αß±εδ■≥φ√Θ ∩≤≥ⁿ Ω Ωα≥αδεπ≤, Γτ ≥√Θ,
# φα∩ε∞φΦ∞, Φτ ∩α≡α∞σ≥≡α Ωε∞αφΣφεΘ ±≥≡εΩΦ.
$file = $path . $file;
# ┬ ±δ≤≈ασ εßφα≡≤µσφΦ ⌠αΘδα $file ±≈Φ≥√Γασ∞ Φτ φσπε Γ±■
# Φφ⌠ε≡∞α÷Φ■ Γ ΓΦΣσ εΣφεΘ ßεδⁿ°εΘ ±≥≡εΩΦ $info.
if (-e $file)
{
@filestats = stat($file);
$filesize = $filestats[7];
open(FILEINFO, $file);
sysread (FILEINFO, $info, $filesize);
close(FILEINFO);
}
# ╙ßΦ≡ασ∞ Φτ ±≥≡εΩΦ $info Γ±σ ±Φ∞Γεδ√ φεΓεΘ ±≥≡εΩΦ Φ
# ταΓεΣΦ∞ φεΓ≤■ ∩σ≡σ∞σφφ≤■ $descr. ┬ ±≥≡εΩσ $info Γ∩ε±δσΣ±≥ΓΦΦ
# ß≤Σσ≥ ⌡≡αφΦ≥ⁿ± ≥εδⁿΩε ±εΣσ≡µΦ∞εσ Ωεφ≥σΘφσ≡α <title>...</title>,
# α ∩σ≡σ∞σφφα $descr ß≤Σσ≥ ∩≡σΣ±≥αΓδ ≥ⁿ ±εßεΘ ε∩Φ±αφΦσ, Γτ ≥εσ
# Φτ ∞σ≥α≥²πα.
$info =~ s/\n//g;
$descr = $info;
# ╙Σαδ σ∞ Γ±σ, ≈≥ε ß√δε Σε <title>...
$info =~ s/^.+<title>//;
# ...Φ Γ±σ, ≈≥ε ß≤Σσ≥ ∩ε±δσ </title>
$info =~ s/<\/title>.+$//;
# ▌≥ε ≡σπ≤δ ≡φεσ Γ√≡αµσφΦσ ∩≡σΣφατφα≈σφε Σδ Φσ≡α≡⌡Φ≈σ±ΩΦ⌡
# ταπεδεΓΩεΓ, ≡α±±∞ε≥≡σφφ√⌡ Γ φα≈αδσ ±≥α≥ⁿΦ. ╬≥≡στασ≥± Γ±σ,
# ≈≥ε ±δσΣ≤σ≥ τα ∩σ≡Γ√∞ Γ±≥≡σ≥ΦΓ°Φ∞± ±ε≈σ≥αφΦσ∞ " -", ΓΩδ■≈α
# σπε ±α∞ε.
$info =~ s/ -.+//;
# ╙Σαδ σ∞ Γ±σ, ≈≥ε ß√δε Σε "meta name="description" content=""...
$descr =~ s/^.+<meta name=\"description\" content=\"//;
# ...Φ Γ±σ, ≈≥ε ß≤Σσ≥ ∩ε±δσ ∩σ≡ΓεΘ Γ±≥≡σ≥ΦΓ°σΘ± ΩαΓ√≈ΩΦ
$descr =~ s/\".+//;
# ╟α∞σφ σ∞ Γ $filename Γ±σ εß≡α≥φ√σ "±δ²°Φ" φα ∩≡ ∞√σ, ΩαΩ ∩≡Φφ ≥ε
# Γ πΦ∩σ≡±±√δΩα⌡.
$filename =~ s/\\/\//g;
# ├σφσ≡Φ≡≤σ∞ ∩≤φΩ≥ ±∩Φ±Ωα - ≥²π <li> Φ ±±√δΩ≤ φα ⌠αΘδ.
print SITEMAP "<li><a href=\"$filename\">";
# ┼±δΦ $info φσ ±εΣσ≡µΦ≥ ≤πδεΓ√⌡ ±ΩεßεΩ Φ ±δ²°σΘ, α ≥αΩµσ φσ
# Γδ σ≥± ∩≤±≥εΘ ±≥≡εΩεΘ, σ±≥ⁿ ε±φεΓαφΦ ∩εδαπα≥ⁿ, ≈≥ε ²≥α
# ±≥≡εΩα ±εΣσ≡µΦ≥ Φ∞σφφε ≥ε, ≈≥ε φα∞ ≥≡σß≤σ≥± . ╬⌠ε≡∞δ σ∞ τφα≈σφΦσ
# ∩σ≡σ∞σφφεΘ $info ΩαΩ ±±√δΩ≤. ┬ ∩≡ε≥ΦΓφε∞ ±δ≤≈ασ ε⌠ε≡∞δ σ∞ ΩαΩ
# ±±√δΩ≤ ±δεΓε±ε≈σ≥αφΦσ "Untitled document" - Γετ∞εµφε, ταπεδεΓΩα
# εΩφα Γ ΣεΩ≤∞σφ≥σ ∩ε∩≡ε±≥≤ φσ≥.
if (($info !~ /[<>\/\"]/) && ($info ne ''))
{
print SITEMAP "$info</a>\n";
# ┬ ±δ≤≈ασ, σ±δΦ ±≥≡εΩα $descr ≥αΩµσ φσ ∩≤±≥α Φ φσ ±εΣσ≡µΦ≥ ≤πδεΓ√⌡
# ±ΩεßεΩ Φ ±δ²°σΘ, ∩εΣ ±±√δΩεΘ ∩ε∞σ∙ασ∞ ε∩Φ±αφΦσ ΣεΩ≤∞σφ≥α,
# φαß≡αφφεσ ≈≤≥ⁿ ∞σφⁿ°Φ∞ Ωσπδσ∞ (∩≡Φ∞σφ σ∞ ≥²π <small>).
if (($descr !~ /[<>\/\"]/) && ($descr ne ''))
{
print SITEMAP "<br><small>$descr</small>\n";
}
}
else
{
print SITEMAP "(Untitled document)</a>\n";
}
$lastspaces = $spaces;
}
# ┬ Ωεφ÷σ ≡αßε≥√ ΣεßαΓδ σ∞ φ≤µφεσ ΩεδΦ≈σ±≥Γε ταΩ≡√Γα■∙Φ⌡ ≥²πεΓ </ul>.
for($j = 0; $j < $lastspaces; $j++)
{
print SITEMAP "</ul>\n";
}
print SITEMAP "</ul>";
# ╘ΦφΦ°φα ∩≡ ∞α .
close(SOURCE);
print "MkMap: ≡αßε≥α ≤±∩σ°φε ταΓσ≡°σφα. ╤∞. ⌠αΘδ sitemap.html\n";
exit(0);