[Bio] / KBaseTutorials / publish_site.pl Repository:
ViewVC logotype

Annotation of /KBaseTutorials/publish_site.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (view) (download) (as text)

1 : overbeek 1.1 use strict;
2 :     use Cwd;
3 : olson 1.3 use Data::Dumper;
4 :     use HTML::TreeBuilder;
5 :     use File::Copy;
6 :     use File::Basename;
7 :     my $scriptdir = dirname($0);
8 : overbeek 1.1
9 :     @ARGV == 2 or die "Usage: $0 mode destination-dir\n";
10 :     my $mode = shift;
11 :     my $dest = shift;
12 :    
13 : olson 1.2 my @valid_modes = qw(copy link show kbase);
14 :     my %valid_modes = map { $_ => 1 } @valid_modes;
15 :     if (!$valid_modes{$mode})
16 : overbeek 1.1 {
17 : olson 1.2 die "mode must be one of @valid_modes\n";
18 : overbeek 1.1 }
19 :    
20 : olson 1.3 my $tut_url = "http://kbase.us/developer-zone/tutorials";
21 :     #
22 :     # Links using API
23 :     #
24 :     #my $cdmi_url = "http://kbase.us/developer-zone/api-documentation/cdmi-api/#";
25 :     #my $cdmi_entity_url = "http://kbase.us/developer-zone/api-documentation/cdmi-entity-api/#";
26 :     #my $idserver_url = "http://kbase.us/developer-zone/api-documentation/idserver-api/#";
27 :    
28 :     #
29 :     # Links using command line scripts
30 :     #
31 :     my $cdmi_url = "http://kbase.us/developer-zone/api-documentation/cdm-command-line-scripts/#";
32 :     my $cdmi_entity_url = "http://kbase.us/developer-zone/api-documentation/cdm-entity-relationship-command-scripts/#";
33 :     my $idserver_url = "http://kbase.us/developer-zone/api-documentation/id-server-commandline-scripts/#";
34 :    
35 :     my $add_links_args = "'$cdmi_url' '$cdmi_entity_url' '$idserver_url' $scriptdir/../KBaseCDMI";
36 :    
37 :     my %tut_dir_map;
38 :     if ($mode eq 'kbase')
39 :     {
40 :     #
41 :     # Read the tutorial-to-directory mapping
42 :     #
43 :     if (!open(MAP, "<", "$scriptdir/tutorial-dir-map"))
44 :     {
45 :     warn "Tutorial directory map not found in $scriptdir/tutorial-dir-map: $!";
46 :     }
47 :     else
48 :     {
49 :     while (<MAP>)
50 :     {
51 :     chomp;
52 :     my($dir, $file) = split(/\t/);
53 :     $tut_dir_map{$file} = $dir;
54 :     }
55 :     close(MAP);
56 :     }
57 :     }
58 : olson 1.2
59 : overbeek 1.1 open(ORDER, "<", "ORDER") or die "cannot open ORDER: $!";
60 :    
61 :     my @dirs = <ORDER>;
62 :     chomp @dirs;
63 :     close(ORDER);
64 :    
65 : olson 1.2 my @files;
66 : olson 1.3 my @other_files;
67 : olson 1.2 for my $dir (@dirs)
68 :     {
69 : olson 1.3 my($f, $of) = find_titles_in_dir($dir, $dest);
70 :     push(@files, @$f);
71 :     push(@other_files, @$of);
72 : olson 1.2 }
73 : overbeek 1.1
74 : olson 1.2 if ($mode eq 'show')
75 : overbeek 1.1 {
76 : olson 1.2 print join("\t", @$_), "\n" foreach @files;
77 :     exit 0;
78 : overbeek 1.1 }
79 : olson 1.2
80 :     open(INDEX, ">", "$dest/index.html") or die "Cannot write $dest/index.html: $!";
81 :     print INDEX "<ul>\n";
82 :    
83 : olson 1.3 publish_files(\@files, \@other_files);
84 : olson 1.2
85 : overbeek 1.1 print INDEX "</ul>\n";
86 : olson 1.2 close(INDEX);
87 : overbeek 1.1
88 : olson 1.2 sub find_titles_in_dir
89 : overbeek 1.1 {
90 :     my($dir, $dest) = @_;
91 :    
92 :     my $here = getcwd;
93 :    
94 :     my @files;
95 :     if (open(O, "<", "$dir/ORDER"))
96 :     {
97 :     @files = <O>;
98 :     chomp @files;
99 :     close(O);
100 :     }
101 :     else
102 :     {
103 :     opendir(D, $dir) or die "cannot opendir $dir: $!";
104 :     @files = sort { $a cmp $b } grep { /\.html$/ && -f "$dir/$_" } readdir(D);
105 :     closedir(D);
106 :     }
107 :    
108 : olson 1.3 my %seen;
109 : olson 1.2 my @out;
110 : overbeek 1.1 for my $file (@files)
111 :     {
112 : olson 1.3 $seen{$file} = 1;
113 : overbeek 1.1 my $title = get_title("$dir/$file");
114 : olson 1.2
115 :     my $kbfile = lc($title);
116 : olson 1.3 $kbfile =~ s/[^-\w\s]//g;
117 : olson 1.2 $kbfile =~ s/\s+/-/g;
118 :    
119 :     push(@out, [$file, $title, $kbfile, "$dir/$file"]);
120 :     }
121 : olson 1.3
122 :     #
123 :     # Build the list of other files we want to copy.
124 :     #
125 :     opendir(D, $dir) or die "cannot opendir $dir: $!";
126 :     my @other = map { [$_, "$dir/$_"] } grep { -f "$dir/$_" && !$seen{$_} && !/^\./ } readdir(D);
127 :     closedir(D);
128 :     return \@out, \@other;
129 : olson 1.2 }
130 :    
131 :     sub publish_files
132 :     {
133 : olson 1.3 my($html_files, $other_files) = @_;
134 : olson 1.2
135 :     if ($mode eq 'kbase')
136 :     {
137 :     #
138 :     # Write the mapping file for add_links_to_tutorials to use
139 :     #
140 :     open(H, ">html.map") or die "Cannot write html.map: $!";
141 : olson 1.3 for my $fent (@$html_files)
142 : olson 1.2 {
143 :     my($file, $title, $kbtitle) = @$fent;
144 : olson 1.3 my $sdir = $tut_dir_map{$file};
145 :     $sdir .= "/" if $sdir;
146 :     print STDERR "Look up $file: $sdir\n";
147 :     print H join("\t", $file, "$tut_url/$sdir$kbtitle/"), "\n";
148 : olson 1.2 }
149 :    
150 :     close(H);
151 :     }
152 :    
153 :     my $here = getcwd;
154 : olson 1.3 for my $fent (@$html_files)
155 : olson 1.2 {
156 :     my($file, $title, $kbtitle, $src) = @$fent;
157 :    
158 : olson 1.3 my $skip_commands = ($title =~ /Index/) ? "--skip-commands" : "";
159 :    
160 : olson 1.2 if ($mode ne 'show')
161 :     {
162 :     print INDEX "<li><a href='$file'>$title</a></li>\n";
163 :     unlink("$dest/$file");
164 :     }
165 :    
166 : overbeek 1.1 if ($mode eq 'copy')
167 :     {
168 : olson 1.3 run("perl $scriptdir/add_links_to_tutorials.pl $skip_commands $add_links_args < $src > $dest/$file");
169 : olson 1.2 }
170 :     elsif ($mode eq 'kbase')
171 :     {
172 : olson 1.3 run("perl $scriptdir/add_links_to_tutorials.pl $skip_commands --linkmap html.map $add_links_args < $src > $dest/$file");
173 : overbeek 1.1 }
174 :     elsif ($mode eq 'link')
175 :     {
176 : olson 1.2 symlink("$here/$src", "$dest/$file");
177 :     }
178 :     elsif ($mode eq 'show')
179 :     {
180 :     print "$file\t$title\t$dest/$file\n";
181 : overbeek 1.1 }
182 :     }
183 : olson 1.3 for my $fent (@$other_files)
184 :     {
185 :     my($file, $src) = @$fent;
186 :     copy($src, "$dest/$file");
187 :     }
188 : overbeek 1.1 }
189 :    
190 :     sub run
191 :     {
192 :     my(@cmd) = @_;
193 : olson 1.2 # print "RUN @cmd\n";
194 : overbeek 1.1 my $rc = system(@cmd);
195 : olson 1.2 # print "DONE $rc\n";
196 : overbeek 1.1 $rc == 0 || die "Failed with $rc: @cmd\n";
197 :     }
198 :    
199 :     sub get_title
200 :     {
201 :     my($file) = @_;
202 : olson 1.3 my $tree = HTML::TreeBuilder->new;
203 :     $tree->parse_file($file);
204 :     my $h1 = $tree->look_down("_tag", "h1");
205 :     if ($h1)
206 :     {
207 :     return $h1->as_text;
208 :     }
209 :     else
210 :     {
211 :     return basename($file);
212 :     }
213 :     }
214 :    
215 :     sub get_title_old
216 :     {
217 :     my($file) = @_;
218 : overbeek 1.1 open(F, "<", $file) or die "Cannot read $file: $!";
219 :     my $title;
220 :     while (<F>)
221 :     {
222 :     if (/<h1>(.*?)</)
223 :     {
224 :     $title = $1;
225 :     last;
226 :     }
227 :     }
228 :     close(F);
229 :     return $title;
230 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3