ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/pod2wiki
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/pod2wiki (file contents):
Revision 1.5 by root, Mon Aug 14 01:54:09 2006 UTC vs.
Revision 1.19 by root, Mon May 5 17:07:13 2008 UTC

37 s/\s+/ /g; 37 s/\s+/ /g;
38 38
39 $_ 39 $_
40} 40}
41 41
42sub special {
43 $MA_BEG . (join $MA_SEP, @_) . $MA_END
44}
45
42package AsParagraphs; 46package AsParagraphs;
43 47
44use strict; 48use strict;
45 49
46use base "Pod::POM::View"; 50use base "Pod::POM::View";
51
52# nodes (order must stay as it is)
53sub N_PARENT (){ 0 }
54sub N_PAR (){ 1 }
55sub N_LEVEL (){ 2 }
56sub N_KW (){ 3 }
57sub N_DOC (){ 4 }
58
59# paragraphs (order must stay as it is)
60sub P_INDENT (){ 0 }
61sub P_LEVEL (){ 1 }
62sub P_MARKUP (){ 2 }
63sub P_INDEX (){ 3 }
47 64
48*view_seq_file = 65*view_seq_file =
49*view_seq_code = 66*view_seq_code =
50*view_seq_bold = sub { "<b>$_[1]</b>" }; 67*view_seq_bold = sub { "<b>$_[1]</b>" };
51*view_seq_italic = sub { "<i>$_[1]</i>" }; 68*view_seq_italic = sub { "<i>$_[1]</i>" };
52*view_seq_zero = sub { }; 69*view_seq_zero = sub { };
53*view_seq_space = sub { my $text = $_[1]; $text =~ s/ /&#160;/g; $text }; 70*view_seq_space = sub { my $text = $_[1]; $text =~ s/ /&#160;/g; $text };
54*view_seq_index = sub { push @{ $result[-1]{index} }, $_[1]; "" }; 71*view_seq_index = sub { push @{ $result[-1][P_INDEX] }, $_[1]; "" };
55 72
56sub view_seq_text { 73sub view_seq_text {
57 my $text = $_[1]; 74 my $text = $_[1];
58 $text =~ s/\s+/ /g; 75 $text =~ s/\s+/ /g;
59 ::asxml $text 76 ::asxml $text
60} 77}
61 78
62sub view_seq_link { 79sub view_seq_link {
63 my (undef, $link) = @_; 80 my (undef, $link) = @_;
64 81
65 my $text = $link =~ s/^(.*)\|// ? $1 : $link; 82 $link =~ s/^(.*)\|//
83 or $link =~ /([^\/]*)$/;
84
85 my $text = $1;
66 86
67 if ($link =~ /http:/) { 87 if ($link =~ /http:/) {
68 "<u>" . (::asxml $link) . "</u>" 88 "<u>" . (::asxml $link) . "</u>"
69 } elsif ($link =~ /^\$ARCH\/(.+)$/) { 89 } elsif ($link =~ /^\$ARCH\/(.+\....)$/) {
70 my $path = $1; 90 my $file = $1;
71 (my $base = $path) =~ s/.*\///; 91
72 -f "$ARCH/$path" && system "cp -p \Q$ARCH/$path\E \Qresources/arch/$base"; 92 unless (-f "resources/arch/$file.png") {
73 "${MA_BEG}image${MA_SEP}arch/$base$MA_END" 93 print "ARCHIMG $file is missing, trying to supply... ";
94 my ($path) = split /\x00/, qx<find \Q$ARCH\E -name \Q$file.64x64.png*\E -print0>;
95 -f $path or die "$file: could not find arch image";
96 print "$path\n";
97 system "rsync -a \Q$path\E resources/arch/\Q$file.png"
98 and die "rsync failed: $?";
99 system "cvs add -kb resources/arch/\Q$file.png"
100 and ((unlink "resources/arch/$file.png"), die "cvs add failed: $?");
101 }
102
103 ::special image => "arch/$file.png", 1;
74 } else { 104 } else {
75 "${MA_BEG}link$MA_SEP$text$MA_SEP$link$MA_END" 105 ::special link => $text, $link
76 }
77}
78
79sub view_item {
80 push @result, {
81 indent => $indent * 8,
82 level => $level,
83 }; 106 }
84 my $title = $_[1]->title->present ($_[0]);
85 $result[-1]{markup} = "$title\n\n" if length $title;
86 $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title;
87 local $level = $level + 1;
88 $_[1]->content->present ($_[0]);
89 ()
90} 107}
91 108
92sub view_verbatim { 109sub view_verbatim {
93 push @result, { 110 push @result, [ $indent * 16, $level, "<tt>" . (::asxml $_[1]) . "</tt>\n" ];
94 indent => $indent * 16,
95 level => $level,
96 markup => "<tt>" . (::asxml $_[1]) . "</tt>\n",
97 };
98 () 111 ()
99} 112}
100 113
101sub view_textblock { 114sub view_textblock {
102 push @result, { 115 push @result, [ $indent * 16, $level, "$_[1]\n" ];
103 indent => $indent * 16,
104 level => $level,
105 markup => "$_[1]\n",
106 };
107 () 116 ()
108} 117}
109 118
110sub view_head1 { 119sub view_head1 {
111 push @result, { 120 push @result, [ $indent * 16, $level ];
112 indent => $indent * 16,
113 level => $level,
114 };
115 my $title = $_[1]->title->present ($_[0]); 121 my $title = $_[1]->title->present ($_[0]);
116 $result[-1]{markup} = "\n\n<span foreground='#ffff00' size='x-large'>$title</span>\n" if length $title; 122 $result[-1][P_MARKUP] = ::special h1 => $title if length $title;
117 $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title; 123 $title = ::flatten $title;
124 unshift @{ $result[-1][P_INDEX] }, $title
125 if !$result[-1][P_INDEX];
118 local $level = $level + 1; 126 local $level = $level + 1;
119 $_[1]->content->present ($_[0]); 127 $_[1]->content->present ($_[0]);
120 () 128 ()
121}; 129};
122 130
123sub view_head2 { 131sub view_head2 {
124 push @result, { 132 push @result, [ $indent * 16, $level ];
125 indent => $indent * 16,
126 level => $level,
127 };
128 my $title = $_[1]->title->present ($_[0]); 133 my $title = $_[1]->title->present ($_[0]);
129 $result[-1]{markup} = "\n\n<span foreground='#ccccff' size='large'>$title</span>\n" if length $title; 134 $result[-1][P_MARKUP] = ::special h2 => $title if length $title;
130 $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title; 135 $title = ::flatten $title;
136 unshift @{ $result[-1][P_INDEX] }, $title
137 if !$result[-1][P_INDEX];
131 local $level = $level + 1; 138 local $level = $level + 1;
132 $_[1]->content->present ($_[0]); 139 $_[1]->content->present ($_[0]);
133 () 140 ()
134}; 141};
135 142
136sub view_head3 { 143sub view_head3 {
137 push @result, { 144 push @result, [ $indent * 16, $level ];
138 indent => $indent * 16,
139 level => $level,
140 };
141 my $title = $_[1]->title->present ($_[0]); 145 my $title = $_[1]->title->present ($_[0]);
142 $result[-1]{markup} = "\n\n<span size='large'>$title</span>\n" if length $title; 146 $result[-1][P_MARKUP] = ::special h3 => $title if length $title;
143 $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title; 147 $title = ::flatten $title;
148 unshift @{ $result[-1][P_INDEX] || [] }, $title
149 if !$result[-1][P_INDEX];
144 local $level = $level + 1; 150 local $level = $level + 1;
145 $_[1]->content->present ($_[0]); 151 $_[1]->content->present ($_[0]);
146 () 152 ()
147}; 153};
148 154
149sub view_over { 155sub view_over {
150 local $indent = $indent + $_[1]->indent; 156 local $indent = $indent + $_[1]->indent;
151 push @result, { indent => $indent }; 157 push @result, [ $indent, $level ];
158 $_[1]->content->present ($_[0]);
159 ()
160}
161
162sub view_item {
163 push @result, [ $indent * 8, $level ];
164 my $title = $_[1]->title->present ($_[0]);
165 $result[-1][P_MARKUP] = "$title\n" if length $title;
166 $title = ::flatten $title;
167 unshift @{ $result[-1][P_INDEX] || [] }, $title
168 if !$result[-1][P_INDEX];
169 local $level = $level + 1;
152 $_[1]->content->present ($_[0]); 170 $_[1]->content->present ($_[0]);
153 () 171 ()
154} 172}
155 173
156sub view_for { 174sub view_for {
157 if ($_[1]->format eq "image") { 175 if ($_[1]->format eq "image") {
158 push @result, { 176 push @result, [
159 indent => $indent * 16, 177 $indent * 16,
160 level => $level, 178 $level,
161 markup => "${MA_BEG}image${MA_SEP}pod/" . $_->text . $MA_END, 179 (::special image => "pod/" . $_->text),
162 }; 180 ];
163 } 181 }
182 ()
183}
184
185sub view_begin {
164 () 186 ()
165} 187}
166 188
167sub view { 189sub view {
168 my ($self, $type, $item) = @_; 190 my ($self, $type, $item) = @_;
174 196
175sub as_paragraphs($) { 197sub as_paragraphs($) {
176 my ($pom) = @_; 198 my ($pom) = @_;
177 199
178 local $indent = 0; 200 local $indent = 0;
179 local $level = 1; 201 local $level = 2;
180 local @result = ( { } ); 202 local @result = ( [] );
181 203
182 $pom->present ("AsParagraphs"); 204 $pom->present ("AsParagraphs");
183 205
184 [grep $_->{index} || exists $_->{markup}, @result] 206 [grep $_->[P_INDEX] || defined $_->[P_MARKUP], @result]
185} 207}
186 208
187############################################################################# 209#############################################################################
210
211$| = 1;
188 212
189my %wiki; 213my %wiki;
190 214
191sub add_node($) { 215sub add_node($) {
192 my ($node) = @_; 216 my ($node) = @_;
193 217
194 for (@{ $node->{kw} || {} }) { 218 for (@{ $node->[N_KW] || {} }) {
195 push @{$wiki{lc $_}}, $node; 219 push @{$wiki{$_}}, $node;
196 } 220 }
197} 221}
198 222
199my $root = { 223my $root;
200 kw => ["pod"], 224$root->[N_KW] = ["Documents", "pod"];
201}; 225$root->[N_DOC] = [[0, 0, ::special link => "All Documents", "pod/*"]];
202 226
203for my $path (@ARGV) { 227for my $path (@ARGV) {
204 $path =~ /([^\/\\]+)\.pod$/ or die "$path: illegal pathname"; 228 $path =~ /([^\/\\]+)\.pod$/ or die "$path: illegal pathname";
205 my $base = $1; 229 my $base = $1;
206 my $pom = Pod::POM->new->parse_text (do { 230 my $pom = Pod::POM->new->parse_text (do {
210 <$pod> 234 <$pod>
211 }); 235 });
212 236
213 my $para = as_paragraphs $pom; 237 my $para = as_paragraphs $pom;
214 238
239 my $pod;
240 $pod->[N_PARENT] = $root;
241 $pod->[N_PAR] = 0;
242 $pod->[N_LEVEL] = 1;
243 $pod->[N_KW] = [$base];
244 $pod->[N_DOC] = $para;
245
215 my @parent = ( 246 my @parent = ($pod);
216 { parent => $root, kw => [$base], doc => $para, par => 0, level => 0 },
217 );
218 add_node $parent[-1];
219 247
220 for my $idx (0 .. $#$para) { 248 for my $idx (0 .. $#$para) {
221 my $par = $para->[$idx]; 249 my $par = $para->[$idx];
222 250
223 while ($parent[-1]{level} >= $par->{level}) { 251 while ($parent[-1][N_LEVEL] >= $par->[P_LEVEL]) {
224 pop @parent; 252 pop @parent;
225 } 253 }
226 254
227 if ($par->{index}) { 255 if ($par->[P_INDEX]) {
228 my $node = { 256 my $node;
229 kw => $par->{index}, 257 $node->[N_PARENT] = $parent[-1];
230 parent => $parent[-1], 258 $node->[N_PAR] = $idx;
231 doc => $para, 259 $node->[N_LEVEL] = $par->[P_LEVEL];
232 par => $idx, 260 $node->[N_KW] = $par->[P_INDEX];
233 level => $par->{level}, 261 $node->[N_DOC] = $para;
234 };
235 push @parent, $node; 262 push @parent, $node;
236 add_node $node; 263 add_node $node;
237 } 264 }
238 } 265 }
266
267 add_node $pod;
239} 268}
269
270add_node $root;
240 271
241Storable::nstore \%wiki, "docwiki.pst"; 272Storable::nstore \%wiki, "docwiki.pst";
242 273

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines