OSDN Git Service

未定義変数の追加とドキュメント修正
[fswiki/fswiki.git] / tools / wiki2html.pl
1 #!/usr/local/bin/perl
2 ############################################################
3 #
4 # Wiki¥Õ¥©¡¼¥Þ¥Ã¥È¤«¤éHTML¤òÀ¸À®¤¹¤ë¥¹¥¯¥ê¥×¥È
5 #
6 ############################################################
7 use lib "$ENV{'FSWIKI_HOME'}/lib";
8 use Wiki;
9 use Util;
10 use Jcode;
11 use Cwd;
12
13 #===========================================================
14 # °ú¿ô¤¬Â­¤ê¤Ê¤¤
15 #===========================================================
16 if($#ARGV==-1){
17         die "wiki2html.pl filename [-title=title] [-css=stylesheet] [-output=sjis|euc] [-farm=farmname]\n";
18 }
19
20 #===========================================================
21 # ÊÑ¿ô¤Î½àÈ÷
22 #===========================================================
23 my $from    = "";
24 my $title   = "";
25 my $css     = "";
26 my $input   = "";
27 my $output  = "euc";
28 my $farm    = "";
29 my $count   = 0;
30 my $current = cwd();
31 chdir($ENV{'FSWIKI_HOME'});
32
33 #===========================================================
34 # ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Î²òÀÏ
35 #===========================================================
36 foreach(@ARGV){
37         if($count==0){
38                 $from = $_;
39         } else {
40                 my ($key,$value)=split(/=/,$_);
41                 if($key eq "-title"){
42                         $title = $value;
43                 } elsif($key eq "-css"){
44                         $css = $value;
45                 } elsif($key eq "-input"){
46                         $input = $value;
47                 } elsif($key eq "-output"){
48                         $output = $value;
49                 } elsif($key eq "-farm"){
50                         $farm = $value;
51                 } else {
52                         die $key." is Unknown Option.\n";
53                 }
54         }
55         $count++;
56
57 }
58
59 if($title eq ""){
60         $title = $from;
61         $title =~ s/.*\///;
62         $title =~ s/\.wiki//;
63         #$title =~ s/%([0-9a-f]{2})/pack("C",$1)/ige;
64 }
65
66 my $url = $from;
67 $url =~ s/\?.*$//;
68 my $wiki = Wiki::Wiki2HTML->new('setup.dat', CGI->new($url));
69
70 if($farm ne ""){
71         $farm =~ s|\/$||;
72         $farm=~/^\// or $farm = "/$farm";
73         $wiki->config('data_dir'   , $wiki->config('data_dir'  ).$farm);
74         $wiki->config('config_dir' , $wiki->config('config_dir').$farm);
75 }
76
77 #===========================================================
78 # Wiki¥½¡¼¥¹¤ò¼èÆÀ
79 #===========================================================
80 my $source = "";
81 if(index($from,"http://")==0 || index($from,"https://")==0){
82         # HTTP·Ðͳ¤Ç¥½¡¼¥¹¤ò¼èÆÀ
83         $source = &Util::get_response($wiki,$from);
84 } else {
85         # ¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¤«¤é¥½¡¼¥¹¤ò¼èÆÀ
86         chdir($current);
87         open(DATA,$from) or die "File Open Error :$from\n";
88         while(<DATA>){
89                 $source .= $_;
90         }
91         close(DATA);
92         chdir($ENV{'FSWIKI_HOME'});
93 }
94 &Jcode::convert(\$source,"euc");
95
96 #===========================================================
97 # HTMLÀ¸À®
98 #===========================================================
99 my $buf = "<html>\n".
100           "<head>\n".
101           "  <title>".Util::escapeHTML($title)."</title>\n";
102 if($output eq 'euc'){
103         $buf .= "  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">\n";
104 } else {
105         $buf .= "  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n";
106 }
107
108 if($css ne ""){
109         $buf .= "  <link rel=\"stylesheet\" type=\"text/css\" href=\"".$css."\">\n";
110 }
111 $buf .= "</head>\n".
112         "<body>\n".
113         "<h1>@{[Util::escapeHTML($title)]}</h1>\n".
114         $wiki->process_wiki($source).
115         "</body>\n".
116         "</html>\n";
117
118 &Jcode::convert(\$buf,$output);
119 print $buf;
120
121 package Wiki::Wiki2HTML;
122 use base qw(Wiki);
123
124 sub process_wiki {
125         my $self    = shift;
126         my $source  = shift;
127         my $mainflg = shift;
128         
129         if($self->{parse_times} >= 50){
130                 return $self->error("Wiki::process_wiki¤Î¸Æ¤Ó½Ð¤·²ó¿ô¤¬¾å¸Â¤ò±Û¤¨¤Þ¤·¤¿¡£");
131         }
132         
133         $self->{parse_times}++;
134         my $parser = Wiki::Wiki2HTMLParser->new($self,$mainflg);
135         $parser->parse($source);
136         $self->{parse_times}--;
137         
138         return $parser->{html};
139 }
140
141 package Wiki::Wiki2HTMLParser;
142 use base qw(Wiki::HTMLParser);
143
144 sub wiki_anchor {
145         my $self = shift;
146         my $page = shift;
147         my $name = shift;
148         
149         if(!defined($name) || $name eq ""){
150                 $name = $page;
151         }
152         if($self->{wiki}->page_exists($page)){
153                 my $link = "@{[Util::url_encode(Util::url_encode($page))]}.html";
154                 return qq|<a href="$link" class="wikipage">@{[Util::escapeHTML($name)]}</a>|;
155         } else {
156                 return qq|<span class="nopage">@{[Util::escapeHTML($name)]}</span><a href="#">?</a>|;
157         }
158 }
159
160 #===========================================================
161 # CGI.pm¤Î¥â¥Ã¥¯¥ª¥Ö¥¸¥§¥¯¥È
162 #===========================================================
163 package CGI;
164
165 sub new {
166         my $class = shift;
167         my $self  = {};
168         $self->{url} = shift;
169         return bless $self, $class;
170 }
171
172 sub url {
173         my $self = shift;
174         return $self;
175 }
176
177 sub get_session {
178         return undef;
179 }