#/usr/bin/perl -w ############################################################################### # Perl-skripti harjoitustyon ottamiseksi WWW:sta tai laittamiseksi sinne # # Kutsun syntaksi: # lue.pl KOMENTO ohjetiedosto kone kayttaja kurssi [comps-hakemisto] [passwd] # # Esim: # # perl lue.pl GET files.txt www.jyu.fi vesal gko # - hakee ensin tiedoston http://www.jyu.fi/~vesal/gko/files.txt # ja sitten sen ohjeiden mukaan tekee paikalliselle levylle # tarvittavat alihakemistot ja hakee sitten tarvittavat tiedostot # Jos koneen nimen perässä on polku, niin mitään ei lisätä # Eli esim: # perl lue.pl GET files.txt www.it.jyu.fi/users/vesal/gko # - hakee ensin tiedoston # http://www.it.jyu.fi/users/vesal/gko/files.txt # ja sitten sen ohjeiden mukaan tekee paikalliselle levylle # tarvittavat alihakemistot ja hakee sitten tarvittavat tiedostot # perl lue.pl FTP files.txt www.jyu.fi vesal gko # - lukee paikallisen levyn oletushakemistosta tiedoston # files.txt ja sen ohjeiden mukaan kopioi paikalliselta levylta # ftp:lla tiedostoja www.jyu.fi-koneessa käyttäjän vesal kotihakemisto # ja sen alla www/gko hakemistoon luoden tarvittaessa uusia # hakemistoja # Tekee lisäksi saman kuin HTML # perl lue.pl HTML files.txt tukki vesal gko # - lukee paikallisen levyn oletushakemistosta tiedoston # files.txt ja tekee siitä tiedostot files.html ja index.html, jotka # kopioidaan ftp:lla tukki-koneeseen käyttäjän vesal kotihakemistoon # hakemistoon www/gko. # perl lue.pl HTML files.txt tukki vesal gko comps - # - lukee paikallisen levyn oletushakemistosta tiedoston # files.txt ja tekee siitä tiedostot files.html ja index.html, joita # ei kopioida mihinkään muualle, sillä salasanana on - # # perl lue.pl PUREHTML files.txt tukki vesal gko srcreplacement # - lukee paikallisen levyn oletushakemistosta tiedoston # files.txt ja tekee siitä tiedostot files.html ja index.html, joita # ei kopioida mihinkään muualle # srcreplacement on hakemiston nimi, jolla java-tiedostoissa oleva src # merkkijono korvataan (jos src halutaa poistaa, on tämä tyhjä, jos säilyttää, niin src/) # # perl lue.pl COPY files.txt w: vesal gko # - lukee paikallisen levyn oletushakemistosta tiedoston # files.txt ja tekee siitä tiedostot files.html ja index.html, ja # kopioi ne paikkaa w:\gko # # perl lue.pl SVN files.txt # - lukee paikallisen levyn oletushakemistosta tiedoston # files.txt ja lisää sen mukaan kaikki siinä olevat tiedostot # oletushakemiston # kopioi ne paikkaa w:\gko # # Javadoc tehdään javadoc -ohjelmalla ja sen on oltava polussa # jos files.txt:ssä on .java -tiedostoja # c# doc tehdään doxygen-ohjelmalla ja sen on oltava polussa # jos on .cs-tiedostoja. doxyfile-tiedostossa on ohjeet dokumentin # tekoon. doxyfile-tiedostoa etsitään oletushakemistosta ylöspäin. # Oletushakemistoa lähintä doxyfile-tiedostoa käytetään. # Jos doxyfile tiedostoa ei löydy, käytetään lue.pl:n hakemistosta # löytyvää versiota. # doxyfile-tiedostossa voidaan (ja kannattaa) ottaa mukaan # d.dox tiedosto joka generoidaan lue.pl ajossa. # # Jos tiedoston nimi on muotoa (files.tx:n sijaan) nimiN.txt # (missä N on luku) # niin tulostiedostot ovat vastaavasti filesN.html, indexN.html # Esim. files2.txt => files2.html ja index2.html # # Tiedoston files.txt muoto on yksinkertaisimmillaan: # oma/tiedosto.c = kommentti # oma/ali/ali.c = kommentti 2 # # Tahan voidaan lisata myos koristeita, # =-- => WWW-sivulle
, eli viiva # = Otsikko => WWW-sivulle Pelkastaan teksti Otsikko # # =------------------------------ # = Otsikko # =------------------------------ # oma/tiedosto.c = kommentti # oma/ali/ali.c = kommentti 2 # =------------------------------ # # Huom! =-merkin jälkeen on oltava välilyönti tai - (jos piirretään hr) # # Jos tiedostoon halutaan linkki, se voidaan tehdä tyyliin: # # @https://trac.cc.jyu.fi/projects/ohj2k11/wiki/suunnitelmat/vesal=Suunnitelma Wikissä # # tai yksi linkki tyyliin # !https://trac.cc.jyu.fi/projects/ohj2k11/wiki/suunnitelmat/vesal=Suunnitelma Wikissä # # jolloin tästä linkistä tulee framen oletuslinkki (näkyy framessa oletuksena). # Muuten oletuslinkkinä on 1. löytynyt tiedosto # # Jos kommenttiosa on pelkkä linkki tyyliin: # # = http://user.jyu.fi/~vesal # # niin se muutetaan linkiksi. Jos rivillä on muuta, ei muuteta linkiksi. # # Jos projektiin tarvitaan esim. muiden tekemia komponentteja, niin # nehan tietysti luetaan aivan jostakin muusta paikasta ja niita # ei kirjoiteta FTP-komennossa takaisin (ei me pilata muiden tekemia). # Talloin files.txt voisi olla esimerkiksi: # # =-------------------- # =Delphi työ # =-------------------- # delphi/vespacad.dpr = projektitiedosto VespaCadia varten # delphi/vespacadf.dfm = päälomake # delphi/vespacadf.pas = lähdekoodi # =-------------------- # =Muut tarvittavat komponentit # =-------------------- # $DESTINATION=$COMPS # $SOURCEPATH=http://www.mit.jyu.fi/~vesal/kurssit/winohj/winohj/delphi/comps/editpnl/ # savepos.pas = komponentti paikan tallettamiseksi # SavePos.dcr = komponentin kuvake # # Selityksia files.txt -tiedostosta # tiedoston nimi= suhteellinen nimi nykyiseen $SOURCEPATH-muuttujaan # ja paikallisen levyn hakemistoon verrattuna. # Oletuksena $SOURCEPATH riippuu konetorivin parametreista. # Eli esimerkissa luetaan # (komento: GET, tiedosto: delphi/vespacadf.pas) # http://www.jyu.fi/~vesal/gko/delphi/vespacadf.pas # -tiedosto, luodaan paikalliselle levylle delphi # niminen alihakemisto ja kopioidaan tiedosto sinne. # Vastaavasti FTP-komennolla otetaan paikallisen levyn # tiedosto delphi/vespacadf.pas ja kirjoitetaan se # www.jyu.fi-koneessa kayttajan vesal kotihakemistosta # alkaen tiedostoksi www/gko/delphi/vespacad.pas # # $DESTINATION = paikallisen levyn hakemisto, jonne tiedosto laitetaan # Apumuuttuja $COMPS on komentorivilta annetun # comps-hakemiston arvo (pitaa sisaltaa /-merkki lopussa). # Oletuksena comps-hakemisto on ../comps/ # $SOURCEPATH = www-polku, joka lisataan seuraavien tiedostojen nimien # eteen kun tiedostoa haetaan WWW:sta. # Oletuksena tama on tyhja. Ja jos kirjoitetaan # $SOURCEPATH =, palataan kayttamaan alkuperaista hakemistoa # joka maaraytyy komentorivin parametreista # Ne tiedostot, joiden aikana $SOURCEPATH on epatyhja, ovat # ReadOnly-tiedostoja, eli niita ei kopioda FTP-komennolla # takaisin verkkoon. $SOURCEPATH ja $DESTINATION voidaan # muuttaa kuinka monta kertaa tahansa, ja ne vaikuttavat # seuraavaan muutokseen saakka. # # Kayttovinkkeja: # ================ # # A. Aloitus ja tallettaminen # ---------------------------- # 1) kirjoita paikalliselle levylle tiedosto files.txt # 2a)anna komento: # perl lue.pl FTP files.txt www.jyu.fi vesal gko # (Tietenkin korvaten www.jyu.fi, vesal ja gko vastaavilla koneen nimella, # omalla tunnuksellasi ko. koneessa ja kurssin nimella). # 2b)anna komento # perl lue.pl COPY files.txt w: vesal gko # 3) Nain sinulle syntyy www.jyu.fi-koneeseen hakemisto www/gko ja sen alle # tarvittavat alihakemistot. Hakemistoon gko tulee tiedostot # files.html ja index.html, joilla tiedostojasi voi selata kivasti. # 4) Kun jatkossa lisaat uusia tiedostoja projektiisi tai paivitat # vanhoja, niin tarpeen mukaan muutat paikallisessa koneessa # (siis kayttamassasi mikrossa) tiedostoa files.txt tarpeen mukaan. # Sitten annat aina kohdassa 2) mainitun komennon # # B. Tyon jatkaminen toisessa koneessa # ------------------------------------ # 1) siirry paikallisessa koneessa omaan hakemistoosi, esim # d:\omat\vesal\gko # 2a)anna komentorivilta komento # perl lue.pl GET files.txt www.jyu.fi vesal gko # (Tietenkin taas korvaten nimet vastaavilla) # 2b)anna komentorivilta komento # perl lue.pl GET files.txt www.infotec.jyu.fi/users/vesal/gko # (Tietenkin taas korvaten nimet vastaavilla) # 3) Jatkat ohjelmointia ja lopettaessasi annat komennon kohdasta A.2) # # C. Helpottaminen # ---------------- # 1) Jos osaat yhtaan kirjoittaa DOS-komentoja .bat -tiedostoon, niin # kirjoitat itsellesi komento ht.bat: # lue.pl %1 files.txt www.jyu.fi vesal gko # 2) Lukeminen: # ht GET # 3) Tallettaminen: # ht FTP # # D. Harjoitustyon nayttaminen # ----------------------------- # 1) Kun saavut nayttamaan harjoitustyotasi kerro ohjaajalle # a) tunnuksesi (esim. vesal) # b) koneen nimi (esim. www.jyu.fi) # c) kurssin tunnus (esim. gko) # # Vesa Lappalainen # 26.5.1999 # 5.8.1999 # 26.10.1999 # + luodaan kurssihakemisto www-koneeseenkin jos se puuttuu # 30.10.1999 # + vaihdettu käyttämään vlftplib.pl, koska alkup. ftplib.pl ei # osannut binääristä siirtoa :-( # 27.12.1999 # + salasana - katkaisee lopun skriptin suorituksen # 19.11.2000 # + COPY - komento # + PUREHTML -komento # + GET-komentoon / tulkinta estämään polun muokkaus # + Tuotettu HTML paremmin kelpaamaan validaattorille # + hakemisotn nimen pakkomuuttaminen pieneksi poistettu => # PITÄÄ olla huolellinen hakemistojen nimiä kirjoitettaessa # # 27.12.2000 # + COPY luo kaikki tarvittavat kohdepolussa olevat hakemistot # # 20.1.2001 # + tulostetaan
:iä kommenttirivien perään # + tarkistetaan paremmin milloin lisätään http: ja milloin ei # # 27.1.2001 # + muuttaa välilyönnilliset tiedoston nimet linkeissä muotoon %20 # myös % muuteteen %25 # + tekee myös FTP:llä tarvittavat alihakemistot ennen siirtoa # # 12.1.2003 Heikki Kainulainen # + tekee java-koodista javadocin ja sorsat html-muotoon # käytetään ohjelmaa java2html (http://www.java2html.com) # # 27.1.2011 Vesa Lappalainen # + tekee .cs tiedosta doxygen dokut ja linkit vastaavasti # ############################################################################### # require('vlftplib.pl'); # siirretty vain niihin kohti, joissa tarvitaan use strict; ############################################################################### sub trim($) { # merkkijono => merkkijono my($s) = @_; # Poistetaan merkkijonosta alkutyhjat, lopputyhjat ja rivinvaihdot (lopusta) # Esim. " kissa istuu\n " => "kissa istuu" $s =~ s/^\s*//; # alkutyhjat $s =~ s/\s*$//; # lopputyhjat (myös rivinvaihdot) # s/^\s*(.*?)\s*$/\1/; return $s; } ############################################################################### sub ToHtmlName($) { # merkkijono => merkkijono my($s) = @_; # Poistetaan merkkijonosta alkutyhjat, lopputyhjat ja rivinvaihdot (lopusta) # Esim. " kissa istuu\n " => "kissa istuu" $s =~ s/%/%25/g; # välilyönnit $s =~ s/ /%20/g; # välilyönnit return $s; } ############################################################################### sub CheckHTTP($) { # merkkijono => merkkijono my($s) = @_; # Jos jonossa ei ole http://, niin se lisätään # Samoin loppu / jos se puuttuu # Esim. "www.mit.jyu.fi/~vesal" => "http://www.mit.jyu.fi/~vesal/" # Tyhjästä jonosta palautetaan tyhjä jono # if ( $s eq "" ) { return $s; } if ( !( $s =~ /\/$/ ) ) { $s = "$s/"; } if ( !( $s =~ /^http:/ ) ) { if ( !( $s =~ /^\// ) ) { $s = "/$s"; } if ( !( $s =~ /^\/\// ) ) { $s = "/$s"; } $s = "http:$s"; } return $s; } use Time::localtime; use File::stat; ############################################################################### sub GetWWWFileDate($) # => mtime #------------------------------------------------------------------------------ # Hakee WWW-tiedoston päiväyksen # Esim: GetWWWFileDate('http://www.jyu.fi/~vesal/gko/delphi/vespacadf.dfm') ############################################################################### { my ($url) = @_; $url = ToHtmlName(trim($url)); require LWP; # Create the user agent object my $ua =new LWP::UserAgent; # Set up a request. We will use the same request object for all URLs. my $request = new HTTP::Request "GET"; # Send the request and get a response back from the server $request->url($url); my $response = $ua->request($request); if ($response->is_success) { $response->headers->last_modified; } else { 0; } } #open(VSTDERR,">c:\\temp\\error.txt"); ############################################################################### sub GetWWWFile($$) { my ($url,$file) = map {trim($_)} @_; $url = ToHtmlName($url); # $file = trim($file); #------------------------------------------------------------------------------ # Hakee WWW-tiedoston ja tallettaa sen lokaalisti valituksi tiedostoksi # Esim: GetWWWFile('http://www.jyu.fi/~vesal/gko/delphi/vespacadf.dfm', # 'delphi/vespacadf.dfm'); # Mahdollisesti tarvittavat alihakemistot pitää jo olla olemassa # Otetaan vain tiedostot, jotka ovat uudempia kuin kohdekoneessa ############################################################################### my $filedate = 0; my $filestat; $filestat = stat($file) and $filedate = $filestat->mtime; # my $filedate = $filestat->mtime if $filestat = stat($file); require LWP; # Create the user agent object my $ua =new LWP::UserAgent; # Set up a request. We will use the same request object for all URLs. my $request = new HTTP::Request "GET"; # Send the request and get a response back from the server $request->url($url); my $response = $ua->request($request); if ($response->is_success) { if ( $response->headers->last_modified > $filedate ) { print "$url => $file\n"; # print ctime($response->headers->last_modified) . " " . ctime($filedate) . "\n"; # print $response->headers->last_modified . " $filedate"\n"; open(OUT, ">$file") or die "Error opening output file $file: $!\n"; binmode OUT; print OUT $response->content; close(OUT) if ($file); utime $response->headers->last_modified,$response->headers->last_modified,$file; } # else { print ctime($response->headers->last_modified) . " " . ctime($filedate) . "\n"; } # else { print "@{[ctime($response->headers->last_modified) ctime($filedate)\n"; } # else { print "$response->headers->last_modified"; } else { print STDERR "ERROR: $url\n"; print STDERR $response->error_as_HTML; } } ############################################################################### sub CopyFileIfNewer($$) { my ($source,$dest) = map {trim($_)} @_; # $url = trim($url); # $file = trim($file); #------------------------------------------------------------------------------ # Kopioi lokaalin tiedoston toiselle levylle # Esim: CopyFileIfNewer('delphi/vespacadf.dfm','w:/gko/delphi/vespacadf.dfm'); # Mahdollisesti tarvittavat alihakemistot pitää jo olla olemassa # Kopioidaan vain tiedostot, jotka ovat uudempia kuin kohdekoneessa ############################################################################### use File::Copy; my $destdate = 0; my $deststat; my $sourcedate = 0; my $sourcestat; $deststat = stat($dest) and $destdate = $deststat->mtime; $sourcestat = stat($source) and $sourcedate = $sourcestat->mtime; my $filetype = substr($source, -5); # if($filetype eq ".java"){ # my $src = substr($source, 0, index($source,".")); # my $dst = substr($dest, 0, index($dest,$source)); # copy("doc/$src.html","$dst/doc/$src.html"); # copy("doc/$src.java.html","$dst/doc/$src.java.html"); # } # print "try: $source => $dest\n"; if ( $sourcedate > $destdate ) { print " $source => $dest"; if ( !copy($source,$dest) ) { print " Error: $!"; } print "\n"; } # else { print ctime($response->headers->last_modified) . " " . ctime($filedate) . "\n"; } # else { print "@{[ctime($response->headers->last_modified) ctime($filedate)\n"; } # else { print "$response->headers->last_modified"; } ############################################################################### sub hakemisto_lista($$) { # $hakemisto,\%hakemistot #------------------------------------------------------------------------------ # Lisää %hakemistot-listaan kaikki hakemiston alihakemistot joita ei vielä ole # listassa. # Esim: $hakemisto = "oma1/oma2" => lisätään ("oma1","oma1/oma2") ############################################################################### my ($hakemisto,$hakemistot) = @_; my $loput = $hakemisto; my $alku = ""; my $hak; while ( 1 ) { ($hak,$loput) = split("[/\\x5c]",$loput,2); # print "$hak $loput \n"; if ( not $loput ) { last; } if ( not $hak ) { next; } $alku .= $hak; $$hakemistot{($alku)} = ""; # $$hakemistot{lc($alku)} = ""; $alku .= "/"; } } # @dirs = split "/", lc $hakemisto; # for(0..$#dirs) {$hakemistot->{join '/', @dirs[0..$_]} = ""} ############################################################################### sub takeType($) { # merkkijono => merkkijono ############################################################################### #------------------------------------------------------------------------------ # Palauttaa tiedostosta tyyppiosan # Esim: takeType("kalle.ville\\oma.cs") => .cs # ei toimi jos . puuttuu ############################################################################### my($rivi) = @_; my ($filename,$filetype) = split(/\.([^\.]+)$/,$rivi,2); $filetype = ".".$filetype; return $filetype; } ############################################################################### sub takeFilename($) { # merkkijono => merkkijono ############################################################################### #------------------------------------------------------------------------------ # Palauttaa tiedostosta nimiosan # Esim: takeFilename("kalle.ville/oma.cs") => kalle.ville/oma # ei toimi jos . puuttuu ############################################################################### my($rivi) = @_; my ($filename,$filetype) = split(/\.([^\.]+)$/,$rivi,2); #print "|$rivi| => |$filename|\n"; return $filename } ############################################################################### sub takeJustFilename($) { # merkkijono => merkkijono ############################################################################### #------------------------------------------------------------------------------ # Palauttaa tiedostosta nimiosan # Esim: takeJustFilename("kalle.ville/oma.cs") => kalle.ville/oma # ei toimi jos . puuttuu ############################################################################### my($rivi) = @_; my ($path,$justfile) = split(/\/([^\/]+)$/,takeFilename($rivi),2); #print "|$rivi| => |$filename|\n"; if ( $justfile ne "" ) { return $justfile; } return $path; } ############################################################################### sub takePath($) { # merkkijono => merkkijono ############################################################################### #------------------------------------------------------------------------------ # Palauttaa tiedostosta polkuosan # Esim: takePath("kalle.ville/oma.cs") => kalle.ville ############################################################################### my($rivi) = @_; my ($path,$file) = split(/\/([^\/]+)$/,$rivi,2); if ( $file ne "" ) { return $path; } return ""; } use Cwd; use Cwd 'abs_path'; ############################################################################### sub findFile($$) { # file,def => filewithpath ############################################################################### #------------------------------------------------------------------------------ # Palauttaa tiedoston nimen kiiveten hakemistoa ylöispäin kunnes löytyy. # Jos ei löydy, paluttaa tiedoston nimen oletushakemistosta. # Esim: findFile("ohj.txt","c:\mytemp") => xxx/ohj.txt missä xxx on hakemisto # josta ohj.txt löytyi kun aloitettiin # nykyhakemistosta ############################################################################### my ($file,$def) = @_; my ($path) = getcwd(); while ( 1 == 1 ) { my $name = "$path/$file"; # print "$name|$path|$file|$def\n"; if ( -e $name ) { return $name; } my ($p,$last) = split(/\/([^\/]+)$/,$path,2); # print "hajoitus: |$p|$path|\n"; if ( $p eq "" ) { last; } if ( $p eq $path ) { last; } $path = $p; } return "$def/$file"; } ############################################################################### sub ShowFtpError() { ############################################################################### # my $error = ftp::error(); # if ( $error ) { print "FTP error: $error\n"; } } ############################################################################### # Pääohjelma ############################################################################### my $command = $ARGV[0]; my $filename = $ARGV[1]; my $www = $ARGV[2]; my $user = $ARGV[3]; #my $kurssi = $ARGV[4]; my ($kurssi,$foo) = split("[/\\x5c]",$ARGV[4],2); my $comps = $ARGV[5]; my $passwd = $ARGV[6]; my $mainpath = $ARGV[2]; my $subpath = $ARGV[4]; my $srcreplace = $ARGV[5]; my $docdir = "doc"; $subpath =~ s!/*$!!; # delete extra / end of subpath $www =~ s!/*$!!; # delete extra / end of www-machine my $defwww = "$www/~$user/$subpath"; my $filenr = $filename; $filenr =~ s!(.*?)([0-9]*).txt!\2!; if ( $filenr == $filename ) { $filenr = ""; } my $fileshtml = "files$filenr.html"; my $indexhtml = "index$filenr.html"; if ( $www =~ /\// ) { $defwww = $www; } # if / in www then this is the # total path if ( $comps lt " " ) { $comps = '../comps/'; } # as default my $sourcepath = ""; my $destination = ""; $defwww = CheckHTTP("$defwww"); if ( $command eq "GET" ) { GetWWWFile("$defwww$filename","$filename"); } #print "Args: 0:$command 1:$filename 2:$www 3:$user 4:$kurssi 5:$comps 6:$passwd 7:$mainpath $subpath 8:$defwww 9:$docdir $srcreplace\n"; open(TIEDOSTOT,$filename) or die("File not found: $filename!\n"); my @tiedostot = (); my @alkuosat = (); my @kommentit = (); my @lahdepolut = (); my @lahteet = (); my @kohdepolut = (); my %hakemistot = (); # Käytetään vain hashin avainosaa :-) my $deflink = ""; while (my $rivi=) { $rivi = trim($rivi); my ($alkuosa, $kommentti) = split(/\B= *|=\B */,$rivi,2); $alkuosa = trim($alkuosa); $kommentti = trim($kommentti); if ( $alkuosa eq '=' ) { $alkuosa = ""; } if ( ( $command eq "SVN" ) && ( $alkuosa =~ /overview-tree.html/ ) ) { next; } if ( $alkuosa eq '$SOURCEPATH' ) { $sourcepath = trim($kommentti); next; } if ( $alkuosa eq '$DESTINATION' ) { $destination = trim($kommentti); if ( $destination eq '$COMPS' ) { $destination = $comps; } next; } if ( $alkuosa =~ m/^[\!@].*/ ) { # alkaa ! tai @, eli linkki my $link = substr($alkuosa,1); $kommentti = "$kommentti"; if ( $alkuosa =~ m/^\!.*/ && $deflink eq "" ) { # ensimmäisestä ! oletuslinkki $deflink = $link; } if ( $kommentti le " " ) { next; } $alkuosa = ""; } if ( ($kommentti =~ m/http/) && (! ($kommentti =~ m/http$link2$afterlink"; # print "KOMMENTTI: $kommentti\n"; } push @alkuosat, ($alkuosa); push @kommentit,(trim($kommentti)); push @lahteet,($sourcepath); if ( $alkuosa ge " " ) { push @lahdepolut,($sourcepath); push @kohdepolut,($destination); push @tiedostot, ($alkuosa); hakemisto_lista("$destination$alkuosa",\%hakemistot); } } close(TIEDOSTOT); if ($deflink le " " ) { $deflink = $tiedostot[0]; } my @lajiteltu = sort(keys(%hakemistot)); ############################################################################### sub MakeHtmlFiles() { ############################################################################### use File::Copy; # my $javadoc = "javadoc -nodeprecatedlist -nohelp -private -version -author -d doc -docletpath c:/bat/XHTML_Doclet.jar -doclet xhtmldoclet.XhtmlDoclet -linksource -tag example:a:\"Example:\" "; my $javadoc = "javadoc -nodeprecatedlist -nohelp -version -author -d $docdir -link http://java.sun.com/javase/6/docs/api -linksource -tag example:a:\"Example:\" "; my $j2h = "j2h -d $docdir/src-html -js "; my @arr = glob("*.java"); my $source = ""; my $files = ""; my $csfiles = ""; if(@arr > 0){ $source = "*.java "; } $" = "."; for(my $i = 0; $i < @lajiteltu; $i++){ my @parts = split("/",$lajiteltu[$i]); @arr = glob("$lajiteltu[$i]/*.java"); if(@arr > 0){ $source = "$source $lajiteltu[$i]/*.java"; } } for (my $i=0; $i < @tiedostot; $i++ ) { my $tied = trim($tiedostot[$i]); if ( $lahdepolut[$i] gt " " ) { next; } my $filetype = takeType($tied); if($filetype eq ".java"){ $files = "$files $tied"; } if ( $filetype eq ".cs"){ $csfiles = "$csfiles $tied"; } } if ( $source ge " " ) { print "$javadoc $files\n"; # print `$javadoc $source`; print `$javadoc $files`; print `$j2h .`; print "$j2h .\n"; print "Paketteja käsittelmään: $source\n"; handlePackages($source); } print "CSFILES: $csfiles\n"; if ( $csfiles ge " " ) { my $doxycs = "doxygen " . findFile("doxyfile",takePath(abs_path($0))); open(OUT, ">d.dox") || die "Error opening output file d.ox $!\n"; print OUT <<"__STOP__"; PROJECT_NAME=$user OUTPUT_DIRECTORY=csdoc INPUT= __STOP__ close OUT; print "$doxycs \n"; print `$doxycs `; } open(OUT, ">$indexhtml") || die "Error opening output file $indexhtml: $!\n"; print OUT <<"__STOP__"; $user/$kurssi/ <body> <!-- Made by lue.pl --> <h1>$kurssi/$user</h1> </body> __STOP__ close OUT; open(OUT, ">$fileshtml") || die "Error opening output file $fileshtml: $!\n"; print OUT <<"__STOP__"; $user/$kurssi

$kurssi/$user

__STOP__ for (my $i=0; $i < @alkuosat; $i++ ) { if ( $alkuosat[$i] ge " " ) { my $htmlfile = ToHtmlName("$lahteet[$i]$alkuosat[$i]"); my $filetype = takeType($htmlfile); # print "$htmlfile =>$filetype=> "; if ( $htmlfile =~ m/\.\..*/ ){ # jos tiedoston nimessä .. eli eri hakemistossa, ei tehdä dokuja print OUT "$alkuosat[$i]"; # print "ei\n"; } elsif ( $filetype eq ".cs" ) { # .cs tiedosto my $fileName = takeFilename($htmlfile); my $justFileName = takeJustFilename($htmlfile); my $coloredfilelink = "csdoc/html/$justFileName"."_8cs_source.html"; if ( !(-e $coloredfilelink) ) { $coloredfilelink = "csdoc/html/$justFileName"."_8cs-source.html"; #older doxygen } print OUT "$fileName"; # file:///E:/kurssit/ohjelmointi1/2011/demot/vast/demo4/csdoc/html/KirjaintenMuutos_8cs.html print OUT "\."; print OUT "cs"; } elsif ( $filetype eq ".java" ) { # .java tiedosto # my $part = substr($htmlfile, 0, index($htmlfile,".")); my $origpart = substr($htmlfile, 0, -5); my $part = $origpart; $origpart =~ s/^src\//$srcreplace/; $part =~ s/^src\///; print OUT "$part"; # print OUT "java"; # print "DOCFILE: $docdir/$part.html\n"; if ( open(DOCFILE,"<$docdir/$part.html") ) { #|| die "ERROR!"; # print OUT "doc\n"; # print "doc\n"; print OUT "."; if ( 0 ) { # ei tarvii lisätä SRC-HTML -linkkiä my @array = ; close(DOCFILE); my $target = " " . " Class "; if (open(RESULTFILE, ">$docdir/$part.html")) { for(my $k = 0; $k < @array; $k++){ my $line = $array[$k]; if( $line =~ m/$target/){ my @foo = split("/",$part); print "part: $part\n"; $line = $line . " " . # "" . "" . "SRC-HTML \n"; } print RESULTFILE $line; } close(RESULTFILE); } } # ei SCR-HTML -linkkiä } else { print OUT "."; } print OUT "java"; # print OUT "html\n"; } # .java tiedosto else { # kaikista muista pelkkä linkki print OUT "$alkuosat[$i]"; } #print OUT " \n"; # print OUT qq{$alkuosat[$i] = $kommentit[$i]
\n}; } else { if ( "-" le $kommentit[$i] && $kommentit[$i] lt "-A" ) { print OUT "
\n"; } elsif ( $kommentit[$i] ge " " ) { print OUT "$kommentit[$i]"; if ( ! ( $kommentit[$i] =~ // ) ) { print OUT "
"; } print OUT "\n"; } else { print OUT "
\n"; } } } print OUT "\n"; print OUT "\n"; close OUT; } ############################################################################### if ( $command eq "GET" ) { foreach my $hak (@lajiteltu) { mkdir $hak,0; print "mkdir $hak\n"; } # for my $i (0..$#tiedostot) { for (my $i=0; $i < @tiedostot; $i++ ) { my $tied = $tiedostot[$i]; my $lahde = $lahdepolut[$i]; my $kohde = $kohdepolut[$i]; if ( $lahde eq "" ) { $lahde = CheckHTTP($defwww); } # my $lahde = ($lahdepolut[$i] || CheckHTTP("$www/~$user/$kurssi"); GetWWWFile("$lahde$tied","$kohde$tied"); } } ############################################################################### if ( $command eq "PUREHTML" ) { if ( $subpath ne "" ) { $docdir = $subpath . "/"; } MakeHtmlFiles(); } ############################################################################### if ( $command eq "HTML" || $command eq "FTP" ) { require('vlftplib.pl'); MakeHtmlFiles(); my $host = $www; $host =~ s!.*//!!; # Mahdollinen http:// pois $host =~ s!/.*!!; # Kaikki /-jälkeiset osat pois if ( $passwd eq "" ) { print "Password for $host.$user >"; $passwd = ; if ( $passwd eq "" ) { die "No passwd"; } $passwd =~ s/\n//; } if ( $passwd eq "-" ) { die "No ftp"; } ftp::debug('ON'); ftp::open($host, $user, $passwd) or die("Can not open ftp $host, $user"); ShowFtpError; ftp::binary(); my %polun_palat = (); # Käytetään vain hashin avainosaa :-) hakemisto_lista("$subpath/.",\%polun_palat); my @spolun_palat = sort(keys(%polun_palat)); # print %polun_palat; print "\n"; # print @spolun_palat; print "\n"; ftp::cwd("www"); ShowFtpError; foreach my $hak (@spolun_palat) { ftp::mkdir("$hak"); ShowFtpError; # ftp::cwd("$hak"); ShowFtpError; print "mkdir $hak\n"; } # ftp::mkdir("www/$subpath"); ShowFtpError; ftp::cwd("$subpath"); ShowFtpError; ftp::put("$fileshtml","$fileshtml"); ShowFtpError; ftp::put("$indexhtml","$indexhtml"); ShowFtpError; # my @dir = ftp::dir("."); # print "---------\n"; # print $dir[0]; # print "---------\n"; ############################################################################### if ( $command eq "FTP" ) { require('vlftplib.pl'); ftp::mkdir("doc"); ShowFtpError; foreach my $hak (@lajiteltu) { print "mkdir $hak\n"; ftp::mkdir($hak); ShowFtpError; ftp::mkdir("doc/$hak"); ShowFtpError; } ftp::put("$filename","$filename"); ShowFtpError; ftp::put("doc/stylesheet.css","doc/stylesheet.css"); ShowFtpError; ftp::put("doc/overview-tree.html","doc/overview-tree.html"); ShowFtpError; ftp::put("doc/index-all.html","doc/index-all.html"); ShowFtpError; # foreach my $tied (@tiedostot) { for (my $i=0; $i < @tiedostot; $i++ ) { my $tied = trim($tiedostot[$i]); if ( $lahdepolut[$i] gt " " ) { next; } my $lahde = $lahdepolut[$i]; # if ( $lahde eq "" ) { $lahde = CheckHTTP("$www/~$user/$subpath"); } if ( $lahde eq "" ) { $lahde = CheckHTTP("$defwww"); } # print "$lahde$tied\n"; my $mtime = GetWWWFileDate("$lahde$tied"); my $filedate = 0; my $filestat; $filestat = stat($tied) and $filedate = $filestat->mtime; print "$tied: " . ctime($filedate) . " - " . ctime($mtime) ; if ( $filedate > $mtime ) { ftp::put($tied,$tied); ShowFtpError; print "->"; } my $filetype = substr($tied, -5); if($filetype eq ".java"){ my $part = substr($tied, 0, index($tied,".")); ftp::put("doc/$part.html","doc/$part.html"); ftp::put("doc/$part.java.html","doc/$part.java.html"); } print "\n"; } } ftp::close(); } ############################################################################### ############################################################################### if ( $command eq "COPY" ) { MakeHtmlFiles(); my $destpath = "$mainpath/$subpath"; my %polun_palat = (); # Käytetään vain hashin avainosaa :-) hakemisto_lista("$subpath/.",\%polun_palat); my @spolun_palat = sort(keys(%polun_palat)); # print %polun_palat; print "\n"; # print @spolun_palat; print "\n"; foreach my $hak (@spolun_palat) { mkdir "$mainpath/$hak",0; print "mkdir $mainpath/$hak\n"; } # print "mkdir $destpath\n"; # mkdir "$destpath",0; mkdir "$destpath/doc",0; mkdir "$destpath/doc/src-html",0; foreach my $hak (@lajiteltu) { my $dochak = $hak; $dochak =~ s/^src\///; $hak =~ s/^src\//$srcreplace/; print "mkdir $destpath/$hak\n"; mkdir "$destpath/$hak",0; mkdir "$destpath/doc/$dochak",0; mkdir "$destpath/doc/src-html/$dochak",0; CopyFileIfNewer("doc/$dochak/package-frame.html","$destpath/doc/$dochak/package-frame.html"); CopyFileIfNewer("doc/$dochak/package-summary.html","$destpath/doc/$dochak/package-summary.html"); CopyFileIfNewer("doc/$dochak/package-tree.html","$destpath/doc/$dochak/package-tree.html"); # copy("doc/$hak/*.html","$destpath/doc/$hak/"); } CopyFileIfNewer("$filename","$destpath/$filename"); CopyFileIfNewer("$fileshtml","$destpath/$fileshtml"); CopyFileIfNewer("$indexhtml","$destpath/$indexhtml"); CopyFileIfNewer("doc/front.html","$destpath/doc/front.html"); CopyFileIfNewer("doc/AllClasses.html","$destpath/doc/AllClasses.html"); CopyFileIfNewer("doc/allclasses-frame.html","$destpath/doc/allclasses-frame.html"); CopyFileIfNewer("doc/$indexhtml","$destpath/doc/$indexhtml"); CopyFileIfNewer("doc/stylesheet.css","$destpath/doc/stylesheet.css"); CopyFileIfNewer("doc/src-html/stylesheet.css","$destpath/doc/src-html/stylesheet.css"); CopyFileIfNewer("doc/overview-tree.html","$destpath/doc/overview-tree.html"); CopyFileIfNewer("doc/overview-summary.html","$destpath/doc/overview-summary.html"); CopyFileIfNewer("doc/overview-frame.html","$destpath/doc/overview-frame.html"); CopyFileIfNewer("doc/index-all.html","$destpath/doc/index-all.html"); CopyFileIfNewer("doc/packages.html","$destpath/doc/packages.html"); # foreach my $tied (@tiedostot) { for (my $i=0; $i < @tiedostot; $i++ ) { my $tied = trim($tiedostot[$i]); if ( $lahdepolut[$i] gt " " ) { next; } my $desttied = $tied; $desttied =~ s/^src\//$srcreplace/; CopyFileIfNewer($tied,"$destpath/$desttied"); my $filetype = substr($tied, -5); if($filetype eq ".java"){ my $part = substr($tied, 0, index($tied,".")); $part =~ s/^src\///; CopyFileIfNewer("doc/$part.html","$destpath/doc/$part.html"); CopyFileIfNewer("doc/src-html/$part.html","$destpath/doc/src-html/$part.html"); CopyFileIfNewer("doc/src-html/$part.java.html","$destpath/doc/src-html/$part.java.html"); } } } ############################################################################### ############################################################################### if ( $command eq "SVN" ) { # my $destpath = "$mainpath/$subpath"; my %polun_palat = (); # Käytetään vain hashin avainosaa :-) hakemisto_lista("$subpath/.",\%polun_palat); my @spolun_palat = sort(keys(%polun_palat)); # print %polun_palat; print "\n"; # print @spolun_palat; print "\n"; foreach my $hak (@spolun_palat) { print `svn add -N $hak 2>nul`; } print `svn add -N .svnignore 2>nul`; print `svn add -N files.txt 2>nul`; print `svn add -N .classpath 2>nul`; print `svn add -N .project 2>nul`; foreach my $hak (@lajiteltu) { print `svn add -N $hak 2>nul`; } for (my $i=0; $i < @tiedostot; $i++ ) { my $tied = trim($tiedostot[$i]); if ( $lahdepolut[$i] gt " " ) { next; } # print "svn add -N $tied 2>nul\n"; print `svn add -N $tied 2>nul`; # print `svn add -N $tied `; } } ############################################################################### sub handlePackages() { my $mask = shift; my @packages = split(" ",$mask); foreach my $package (@packages) { handlePackage($package); } } ############################################################################### # sub handlePackage() { my $package = shift; #print "Paketti: $package\n"; $package =~ s/\/\*\.java//; print "Paketti: $package\n"; if ( $package =~ m/^\.\./ ) { return; } if ( $package eq "*.java" ) { $package = ""; } print "Paketti: $package\n"; $package =~ s/^src\///; my $dir = "$docdir/src-html/$package"; $dir =~s/\\\\\/\//\//; # korvataan \\// yhdellä / $dir =~s/\\//; # poistetaan \ print "dir = $dir\n"; opendir(D, $dir) || die "can't opendir $dir: $!"; my @f = readdir(D); closedir(D); foreach my $file (@f) { my $filename = $dir . '/' . $file; print "$filename\n"; if ($file eq '.' || $file eq '..') { } elsif (-d $filename) { # depending on your needs you can do subdirs } else { if ( $filename =~ m/\.java\.html/ ) { handleFile($filename); } } } foreach my $file (@f) { my $filename = $dir . '/' . $file; my $repname; if ($file eq '.' || $file eq '..') { } elsif (-d $filename) { # depending on your needs you can do subdirs } else { if ( $file =~ m/\..*\.html/ && !($file =~ m/\.java\.html/) ) { $repname = $file; # copy something??? why??? $repname =~ s!\..*\.!.!; print "$repname <= $filename\n"; copy($dir . '/' . $repname,$filename); } } } } ############################################################################### sub handleFile() { # make copies from j2h java source files Class.java.html and change links a bit my $name = shift; my $outname = $name; my $line; $outname =~ s/\.java//; # copy over javadoc file Class.html print "$outname\n"; open(FILE,"<$name") or die "Error opening input file $name: $!\n"; open(OUT, ">$outname") or die "Error opening output file $outname: $!\n"; while ($line = ) { $line =~ s/NAME=\"/NAME=\"line\./g; $line =~ s!\.java\.html!\.html!g; print OUT $line; } close(OUT); close(FILE); } ############################################################################### ###############################################################################