1 | #! perl |
1 | #! perl |
2 | |
2 | |
|
|
3 | # convert given .pod files to wiki style |
|
|
4 | |
|
|
5 | # base path of arch tree, only used for new arch graphics |
|
|
6 | my $ARCH = "/root/devel/cvs/cf.schmorp.de/arch"; |
|
|
7 | |
|
|
8 | use strict; |
|
|
9 | |
3 | use Storable; |
10 | use Storable; |
4 | |
|
|
5 | # convert given .pod files to wiki style |
|
|
6 | |
|
|
7 | use strict; |
|
|
8 | |
|
|
9 | use Pod::POM; |
11 | use Pod::POM; |
10 | |
12 | |
11 | our @result; |
13 | our @result; |
12 | our $indent; |
14 | our $indent; |
13 | our $level; |
15 | our $level; |
|
|
16 | |
|
|
17 | my $MA_BEG = "\x{fcd0}"; |
|
|
18 | my $MA_SEP = "\x{fcd1}"; |
|
|
19 | my $MA_END = "\x{fcd2}"; |
14 | |
20 | |
15 | sub asxml($) { |
21 | sub asxml($) { |
16 | local $_ = $_[0]; |
22 | local $_ = $_[0]; |
17 | |
23 | |
18 | s/&/&/g; |
24 | s/&/&/g; |
… | |
… | |
29 | s/^\s+//; |
35 | s/^\s+//; |
30 | s/\s+$//; |
36 | s/\s+$//; |
31 | s/\s+/ /g; |
37 | s/\s+/ /g; |
32 | |
38 | |
33 | $_ |
39 | $_ |
|
|
40 | } |
|
|
41 | |
|
|
42 | sub special { |
|
|
43 | $MA_BEG . (join $MA_SEP, @_) . $MA_END |
34 | } |
44 | } |
35 | |
45 | |
36 | package AsParagraphs; |
46 | package AsParagraphs; |
37 | |
47 | |
38 | use strict; |
48 | use strict; |
… | |
… | |
54 | } |
64 | } |
55 | |
65 | |
56 | sub view_seq_link { |
66 | sub view_seq_link { |
57 | my (undef, $link) = @_; |
67 | my (undef, $link) = @_; |
58 | |
68 | |
59 | # TODO: |
69 | my $text = $link =~ s/^(.*)\|// ? $1 : $link; |
60 | # http://... |
|
|
61 | # ref |
|
|
62 | # pod/ref |
|
|
63 | |
70 | |
|
|
71 | if ($link =~ /http:/) { |
64 | "<u>" . (::asxml $_[1]) . "</u>"; |
72 | "<u>" . (::asxml $link) . "</u>" |
|
|
73 | } elsif ($link =~ /^\$ARCH\/(.+)$/) { |
|
|
74 | my $path = $1; |
|
|
75 | (my $base = $path) =~ s/.*\///; |
|
|
76 | -f "$ARCH/$path" && system "rsync -av -c \Q$ARCH/$path\E \Qresources/arch/$base"; |
|
|
77 | ::special image => "arch/$base", 1; |
|
|
78 | } else { |
|
|
79 | ::special link => $text, $link |
|
|
80 | } |
65 | } |
81 | } |
66 | |
82 | |
67 | sub view_item { |
83 | sub view_item { |
68 | push @result, { |
84 | push @result, { |
69 | indent => $indent * 8, |
85 | indent => $indent * 8, |
70 | level => $level, |
86 | level => $level, |
71 | }; |
87 | }; |
72 | my $title = $_[1]->title->present ($_[0]); |
88 | my $title = $_[1]->title->present ($_[0]); |
73 | $result[-1]{markup} = "$title\n\n"; |
89 | $result[-1]{markup} = "$title\n" if length $title; |
74 | unshift @{ $result[-1]{index} }, ::flatten $title; |
90 | $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title; |
75 | local $level = $level + 1; |
91 | local $level = $level + 1; |
76 | $_[1]->content->present ($_[0]); |
92 | $_[1]->content->present ($_[0]); |
77 | () |
93 | () |
78 | } |
94 | } |
79 | |
95 | |
… | |
… | |
99 | push @result, { |
115 | push @result, { |
100 | indent => $indent * 16, |
116 | indent => $indent * 16, |
101 | level => $level, |
117 | level => $level, |
102 | }; |
118 | }; |
103 | my $title = $_[1]->title->present ($_[0]); |
119 | my $title = $_[1]->title->present ($_[0]); |
104 | $result[-1]{markup} = "\n\n<span foreground='#ffff00' size='x-large'>$title</span>\n"; |
120 | $result[-1]{markup} = "\n\n<span foreground='#ffff00' size='x-large'>$title</span>\n" if length $title; |
105 | unshift @{ $result[-1]{index} }, ::flatten $title; |
121 | $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title; |
106 | local $level = $level + 1; |
122 | local $level = $level + 1; |
107 | $_[1]->content->present ($_[0]); |
123 | $_[1]->content->present ($_[0]); |
108 | () |
124 | () |
109 | }; |
125 | }; |
110 | |
126 | |
… | |
… | |
112 | push @result, { |
128 | push @result, { |
113 | indent => $indent * 16, |
129 | indent => $indent * 16, |
114 | level => $level, |
130 | level => $level, |
115 | }; |
131 | }; |
116 | my $title = $_[1]->title->present ($_[0]); |
132 | my $title = $_[1]->title->present ($_[0]); |
117 | $result[-1]{markup} = "\n\n<span foreground='#ccccff' size='large'>$title</span>\n"; |
133 | $result[-1]{markup} = "\n\n<span foreground='#ccccff' size='large'>$title</span>\n" if length $title; |
118 | unshift @{ $result[-1]{index} }, ::flatten $title; |
134 | $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title; |
119 | local $level = $level + 1; |
135 | local $level = $level + 1; |
120 | $_[1]->content->present ($_[0]); |
136 | $_[1]->content->present ($_[0]); |
121 | () |
137 | () |
122 | }; |
138 | }; |
123 | |
139 | |
… | |
… | |
125 | push @result, { |
141 | push @result, { |
126 | indent => $indent * 16, |
142 | indent => $indent * 16, |
127 | level => $level, |
143 | level => $level, |
128 | }; |
144 | }; |
129 | my $title = $_[1]->title->present ($_[0]); |
145 | my $title = $_[1]->title->present ($_[0]); |
130 | $result[-1]{markup} = "\n\n<span size='large'>$title</span>\n"; |
146 | $result[-1]{markup} = "\n\n<span size='large'>$title</span>\n" if length $title; |
131 | unshift @{ $result[-1]{index} }, ::flatten $title; |
147 | $title = ::flatten $title; unshift @{ $result[-1]{index} }, $title if length $title; |
132 | local $level = $level + 1; |
148 | local $level = $level + 1; |
133 | $_[1]->content->present ($_[0]); |
149 | $_[1]->content->present ($_[0]); |
134 | () |
150 | () |
135 | }; |
151 | }; |
136 | |
152 | |
… | |
… | |
144 | sub view_for { |
160 | sub view_for { |
145 | if ($_[1]->format eq "image") { |
161 | if ($_[1]->format eq "image") { |
146 | push @result, { |
162 | push @result, { |
147 | indent => $indent * 16, |
163 | indent => $indent * 16, |
148 | level => $level, |
164 | level => $level, |
149 | markup => "\x{fffc}", |
165 | markup => (::special image => "pod/" . $_->text), |
150 | widget => [["CFPlus::UI::Image" => path => "pod/" . $_[1]->text]], |
|
|
151 | }; |
166 | }; |
152 | } |
167 | } |
153 | () |
168 | () |
154 | } |
169 | } |
155 | |
170 | |
… | |
… | |
162 | ############################################################################# |
177 | ############################################################################# |
163 | |
178 | |
164 | sub as_paragraphs($) { |
179 | sub as_paragraphs($) { |
165 | my ($pom) = @_; |
180 | my ($pom) = @_; |
166 | |
181 | |
167 | local @result = ( { } ); |
|
|
168 | local $indent = 0; |
182 | local $indent = 0; |
169 | local $level = 1; |
183 | local $level = 1; |
|
|
184 | local @result = ( { } ); |
170 | |
185 | |
171 | $pom->present ("AsParagraphs"); |
186 | $pom->present ("AsParagraphs"); |
172 | |
187 | |
173 | [grep exists $_->{markup}, @result] |
188 | [grep $_->{index} || exists $_->{markup}, @result] |
174 | } |
189 | } |
175 | |
190 | |
176 | ############################################################################# |
191 | ############################################################################# |
177 | |
192 | |
178 | my %wiki; |
193 | my %wiki; |
179 | |
194 | |
180 | sub add_node($) { |
195 | sub add_node($) { |
181 | my ($node) = @_; |
196 | my ($node) = @_; |
182 | |
197 | |
183 | for (@{ $node->{kw} || {} }) { |
198 | for (@{ $node->{kw} || {} }) { |
184 | push @{$wiki{$_}}, $node; |
199 | push @{$wiki{lc $_}}, $node; |
185 | } |
200 | } |
186 | } |
201 | } |
187 | |
202 | |
188 | my $root = { |
203 | my $root = { |
189 | kw => ["pod"], |
204 | kw => ["pod"], |