OSDN Git Service

Fix a typo
[linuxjf/JF.git] / bin / ldp.pm
1 # $Id: ldp.pm,v 1.12 2009/05/18 13:32:00 mdk Exp $
2 package ldp;
3
4 #################################################################
5 # LDP ¤Î "sorted_howtos.dat" ¤òÆɤ߹þ¤ó¤Ç¡¢¤¤¤¯¤Ä¤«¤Î¥ê¥¹¥È/¥Ï¥Ã¥·¥å¤Ø¤Î
6 # ¥ê¥Õ¥¡¥ì¥ó¥¹¤òÊÖ¤¹¡£"sorted_howtos.dat" ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë°Í¸¤·¤Æ¤¤¤ë¤Î¤Ç
7 # "sorted_howtos.dat" ¤¬ÂçÉý¤Ë½ñ¤­´¹¤¨¤é¤ì¤ë¤è¤¦¤Ê¤³¤È¤Ë¤Ê¤Ã¤¿¤é¡¢¤³¤Î script
8 # ¤Î¤³¤Î´Ø¿ô¤Ï½ñ¤­´¹¤¨¤ëɬÍפ¬¤¢¤ë¡£
9 #
10 # °ú¿ô¤Î¥ê¥¹¥È
11 #
12 # [0]: "sorted_howtos.dat" ¤Î¥Õ¥¡¥¤¥ë¤Î½êºß
13 #
14 # ÊÖ¤êÃͤȤʤë¤â¤Î¤Î¥ê¥¹¥È
15 #
16 # 1 : LDP ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ëʸ½ñ¤Î BASENAME (ʸ½ñ̾)¤Î¥ê¥¹¥È
17 # 2 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ãø¼Ô¥Ç¡¼¥¿¤Ø¤Î¥Ï¥Ã¥·¥å
18 # 3 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤ÎºÇ½ª¹¹¿·Æü»þ (YYYY/MM/DD)¤Ø¤Î¥Ï¥Ã¥·¥å
19 # 4 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î´Êñ¤ÊÀâÌÀʸ¤Ø¤Î¥Ï¥Ã¥·¥å
20 # 5 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î¼ïÎà¡£HOWTO or MINI
21 #
22 # ¤³¤Î¤¦¤Á¡¢¤³¤Î script ¤Ç¼ÂºÝ¤Ë¤Ä¤«¤Ã¤Æ¤¤¤ë¤Î¤Ï 1, 3, 5 ¤À¤±¤Ç¤¢¤ë¡£
23 # ¤È¤¤¤¦¤«¡¢4 ¤Ï¤â¤È¤â¤È¤Î¥Ç¡¼¥¿ (sorted_howtos.dat) ¤Ë̵¤¤¤«¤é
24 # Ä´¤Ù¤è¤¦¤¬¤Ê¤¤
25 sub read_sorted_howtos{
26
27     my $DATAFILE = shift;
28     my (@NAMES, %title, %update, %type, %docbook, %authors, %desc);
29     #
30     # ÊÑ¿ô¤ÎÀâÌÀ:
31     #
32     # @NAMES:   Ê¸½ñ̾¤ò³ÊǼ¤¹¤ë¥ê¥¹¥È
33     # %title:   Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î¥¿¥¤¥È¥ë¤Î¥Ï¥Ã¥·¥å (̤»ÈÍÑ)
34     # %update:  Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤ÎºÇ½ª¹¹¿·Æü»þ
35     # %type:    Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î¥¿¥¤¥× (HOWTO or MINI)
36     # %docbook: Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¼ïÎà (d or l)
37     # %authors: Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤ÎÃø¼Ô̾ (̤»ÈÍÑ & ¶õ)
38     # %desc:    Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î²òÀâ (̤»ÈÍÑ & ¶õ)
39     # $bn:      ³Æ¥Ç¡¼¥¿¤ò³ÊǼ¤¹¤ëºÝ¤Ë¥­¡¼¤È¤Ê¤ëʸ½ñ̾¤¬Æþ¤ë¥¹¥«¥é¡¼ÊÑ¿ô
40     #
41     open(LDP, $DATAFILE) or die "can't open $DATAFILE";
42
43     my $dummyline = "";
44
45     while(<LDP>){
46         chomp;
47
48     # sorted_howto.dat ¤Ç SUBTITLE ¤ò¸¡º÷¤¹¤ë¤È¤ï¤«¤ë¤±¤É¡¢
49     # ÊѤʠrecord ¤¬º®¤¸¤Ã¤Æ¤¤¤ë¡£¤³¤Î¤¿¤á¤Ë¥¨¥é¡¼¤Ë¤Ê¤ë ;_; 
50     # ²óÈò¤¹¤ë¤¿¤á¤ËÉղä·¤¿Éôʬ¤¬¤³¤³¤«¤é ----
51         if (/<\/SUBTITLE$/) {
52           $dummyline = $_;
53           next;
54         }
55         $_ = $dummyline . $_;
56         s/<SUBTITLE>.*<\/SUBTITLE>//;
57         $dummyline = "";
58     # ---------------------------------------- ¤³¤³¤Þ¤Ç
59
60         my($update, $dummy, $title, $url) = split("\t");
61
62         my $docbook = "l"; # linuxdoc
63         if ($url =~ /\/index\.html$/ or $url =~ /\/$/) {
64             $docbook = "d"; # docbook
65             $url =~ s/\/$//;
66             $url =~ s/\/index\.html$//;
67         }
68
69         my($bn) = ($url =~ m|([^/]+)$|);
70         $bn  =~ s/\.html//;
71
72         next unless length $bn;
73
74         my $type = "HOWTO";
75         if ($url =~ /^HOWTO\/mini\//) {
76             $type = "MINI";
77         }
78
79         ### These documents have been renamed. ############
80
81         $bn = 'Cipe+Masq' if $bn =~ /Cipe\+Masq/;
82 #        $bn = 'Partition_LONGNAME'
83 #         if $bn eq 'Partition-Mass-Storage-Dummies-Linux-HOWTO';
84
85         ################################################
86
87         push(@NAMES, $bn);
88         $type{$bn} = $type;
89         $title{$bn} = $title;
90         $docbook{$bn} = $docbook;
91
92         # ¤¤¤Á¤ª¤¦¥Ì¥ëʸ»úÎó¤òÆþ¤ì¤Æ¤ª¤¯
93         $authors{$bn} = '';
94         $desc{$bn} = '';
95
96         $update =~ s|-|/|g;
97         $update{$bn} = $update;
98     }
99     close LDP;
100     return (\@NAMES, \%authors, \%update, \%desc, \%type, \%docbook);
101 }
102
103 #
104 # °Ê²¼¤Ï ¤¿¤Ö¤ó ¤â¤¦ »È¤ï¤Ê¤¤
105 #
106
107 sub get_LDP_list {
108 #
109 # LDP ¤Î "HOWTO-INDEX.sgml" ¤òÆɤ߹þ¤ó¤Ç¡¢¤¤¤¯¤Ä¤«¤Î¥ê¥¹¥È/¥Ï¥Ã¥·¥å¤Ø¤Î
110 # ¥ê¥Õ¥¡¥ì¥ó¥¹¤òÊÖ¤¹¡£"HOWTO-INDEX.sgml" ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë°Í¸¤·¤Æ¤¤¤ë¤Î¤Ç
111 # "HOWTO-INDEX.sgml" ¤¬ÂçÉý¤Ë½ñ¤­´¹¤¨¤é¤ì¤ë¤è¤¦¤Ê¤³¤È¤Ë¤Ê¤Ã¤¿¤é¡¢¤³¤Î script
112 # ¤Î¤³¤Î´Ø¿ô¤Ï½ñ¤­´¹¤¨¤ëɬÍפ¬¤¢¤ë¡£
113 #
114 # °ú¿ô¤Î¥ê¥¹¥È
115 #
116 # [0]: "HOWTO-INDEX.sgml" ¤Î¥Õ¥¡¥¤¥ë¤Î½êºß
117 # [1]: "HOWTO-INDEX.sgml" ¤Ë¤Ï¡¢·î¤Î̾Á°¤Ë´ö¤Ä¤« typo ¤¬¤¢¤ë¡£³°Éô¤ÇÄêµÁ¤·¤¿
118 #       ¥Ï¥Ã¥·¥å¤Ç¤½¤ì¤é¤Î̾Á°¤«¤é ·î¤Î¿ô»úÎó¤ËÊÑ´¹¤¹¤ë¤³¤È¤Ë¤Ê¤ë¡£
119 #
120 # ÊÖ¤êÃͤȤʤë¤â¤Î¤Î¥ê¥¹¥È
121 #
122 # 1 : LDP ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ëʸ½ñ¤Î BASENAME (ʸ½ñ̾)¤Î¥ê¥¹¥È
123 # 2 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ãø¼Ô¥Ç¡¼¥¿¤Ø¤Î¥Ï¥Ã¥·¥å
124 # 3 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤ÎºÇ½ª¹¹¿·Æü»þ (YYYY/MM/DD)¤Ø¤Î¥Ï¥Ã¥·¥å
125 # 4 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î´Êñ¤ÊÀâÌÀʸ¤Ø¤Î¥Ï¥Ã¥·¥å
126 # 5 : Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î¼ïÎà¡£HOWTO or MINI
127 #
128 # ¤³¤Î¤¦¤Á¡¢¤³¤Î script ¤Ç¼ÂºÝ¤Ë¤Ä¤«¤Ã¤Æ¤¤¤ë¤Î¤Ï 1, 3 ¤À¤±¤Ç¤¢¤ë¡£»Ä¤ê¤Ï
129 # Ê̤γÈÄ¥¤ËÌò¤ËΩ¤Ä¤³¤È¤â¤¢¤ë¤«¤â(?)
130 #
131 #
132   my ($LDPINDEX) = @_;
133
134 my $monthref = {
135 #
136 # LDP ¤Î HOWTO-INDEX.sgml ¤Ë¤Ï¡¢¤¤¤¯¤Ä¤«¤Î typo ¤¬Â¸ºß¤·¤Æ¤¤¤ë¤Î¤Ç¡¢
137 # Ä̾ï¤Î·î/¿ô»úÊÑ´¹¥Ï¥Ã¥·¥å¤Ë¤½¤ì¤é¤ò²Ã¤¨¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
138 #
139 # sorted_howtos.dat ¤Ë°Ü¹Ô¤¬ºÑ¤ó¤À¤é¡¢¤³¤Î¥Æ¡¼¥Ö¥ë¤ÏÉÔÍ×
140 #
141                 "April"        =>   "04",
142                 "August"       =>   "08",
143                 "Dececember"   =>   "12",
144                 "December"     =>   "12",
145                 "February"     =>   "02",
146                 "January"      =>   "01",
147                 "July"         =>   "07",
148                 "June"         =>   "06",
149                 "March"        =>   "03",
150                 "May"          =>   "05",
151                 "November"     =>   "11",
152                 "October"      =>   "10",
153                 "September"    =>   "09",
154                 "Sep"          =>   "09",
155 };
156
157   my @categ = ("", "HOWTO", "MINI", "SPEC", "");
158   my $class = 0;
159   my (@NAMES, %titl, %url, %authors, %desc, %update, %type, $bn) = ();
160   #
161   # ÊÑ¿ô¤ÎÀâÌÀ:
162   #
163   # @NAMES:   Ê¸½ñ̾¤ò³ÊǼ¤¹¤ë¥ê¥¹¥È
164   # %titl:    Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î¥¿¥¤¥È¥ë¤Î¥Ï¥Ã¥·¥å
165   # %url:     Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î URL ¤Ø¤Î¥Ï¥Ã¥·¥å (̤»ÈÍÑ)
166   # %authors: Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤ÎÃø¼Ô̾
167   # %desc:    Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤Î²òÀâ
168   # %update:  Ê¸½ñ̾¤ò¥­¡¼¤È¤·¤¿Ê¸½ñ¤ÎºÇ½ª¹¹¿·Æü»þ
169   # $bn:      ³Æ¥Ç¡¼¥¿¤ò³ÊǼ¤¹¤ëºÝ¤Ë¥­¡¼¤È¤Ê¤ëʸ½ñ̾¤¬Æþ¤ë¥¹¥«¥é¡¼ÊÑ¿ô
170   #
171   open(LDP, $LDPINDEX) or die "can't open $LDPINDEX";
172   while (<LDP>) {
173     $class    = 1 if /^<sect1>HOWTOs$/i;  
174     $class    = 2 if /^<sect1>mini-HOWTOs$/i;
175     $class    = 3 if /^<sect1>Special HOWTOs$/i;
176     $class    = 4 if /^<SECT1>Unmaintained HOWTOs and mini-HOWTOs$/i;
177     
178     next if $class < 1;
179     next if $class > 3;
180
181     s/&lt;/</g;
182     s/&gt;/>/g;
183
184     if (/^<item><htmlurl\s+url=\"(.*)\"\s*name=\"(.*)\">/) {
185       $bn = $1;
186       $bn =~ s,\.html,,;
187       $bn =~ s,^mini/,,;
188
189       ### This document has been renamed. ############
190       $bn = "Visible-bell" if $bn eq "Visual-Bell";  
191       $bn = "Cipe+Masq" if $bn =~ /Cipe\+Masq/;  
192       ################################################
193
194       push(@NAMES, $bn);
195       $type{$bn} = $categ[$class];
196       $titl{$bn} = $2;
197       $url{$bn}  = $1;
198       next;
199     }
200
201     if ($bn) {
202       if ((($class == 1) &&  /^\s+(.*)[\.\s]+$/) || 
203           (($class == 2) &&  /^by\s+(.*)[\.\s]+$/)) {
204         $authors{$bn} = $1;
205         next;
206       }
207     }
208
209     if ($bn && /(.*)\s+Updated*\s+(.*[12]\d\d\d).*$/) {
210       chomp;
211       $desc{$bn} =   $1;
212
213       my ($day, $month, $year);
214       my @p = split(" ", $2);
215
216       shift @p if /dosemu/;
217
218       if ($p[0] =~ /\d+/) {
219         $day = $p[0];
220         $month = $monthref->{$p[1]};
221         $year = $p[2];
222       } elsif ($p[1] =~ /^\d{1,2},$/) {
223         $p[1] =~ s/,//;
224         $day = $p[1];
225         $month = $monthref->{$p[0]};
226         $year = $p[2];
227       } else {
228         $day = "00";
229         $month = $monthref->{$p[0]};
230         $year = $p[1];
231       }
232       ################################
233       if ($bn eq "Printing-HOWTO") {
234         $year = 1999;
235         $month = 11;
236         $day   = 19;
237       }
238       ################################
239       if ($day < 10) {
240         $day =~ s/^0//;
241         $day = "0" . $day;
242       }
243       $update{$bn} = "$year/$month/$day";
244     } elsif ($bn && /\w+/) {
245       chomp;
246       $desc{$bn} .=   $_;
247       next;
248     } elsif ($bn && /^$/) {
249       $update{$bn} = "(unknown)";
250       #####################################
251       if ($bn eq "Emacs-Beginner-HOWTO") {
252         $update{$bn} = "1999/10/14";
253       }
254       #####################################
255     }
256     if ($bn && $desc{$bn} && $update{$bn}) {
257       $bn = "";
258       next;
259     }
260     next;
261   }
262   close LDP;
263   return (\@NAMES, \%authors, \%update, \%desc, \%type);
264 }
265
266 1;