#!/usr/bin/perl -w # # rozkladaczka.pl ver 0.2 # # Na potrzeby kt.linuxnews.pl napisał Jakub Jankowski # Code released under GNU GPLv2 or later. # # Czyta XML z oryginałem, dzieli go na sekcje. Każdą z nich zapisuje # jako katalog_na_sekcje/odcinek-YYsuffix.xml gdzie YY to numer sekcji. # Intro, jeśli obecne, zostaje zapisane jako # katalog_na_sekcje/odcinek-0suffix.xml # # Sugeruję używać suffixu w rodzaju `-en' # # Changes: # 0.1 - initial release # 0.2 - try making dir if not found instead of bailing out instantly # fix by Pawel Kot use strict; my $VERSION = "0.2"; my $issue = shift; my $dir = shift; my $infile = shift; my $suffix = shift; local *IN; local *OUT; local *I; my $has_intro = 0; my $in_intro = 0; $dir =~ s/([\/]+)$// if defined $dir; if (defined($suffix)) { # some sanity $suffix =~ s/([\/]+)//g; $suffix = "-" . $suffix unless ($suffix =~ /^-/); $suffix = "-en" unless ($suffix =~ /^-[a-zA-Z0-9]+/); } else { $suffix = ""; } if (!defined($issue) || !defined($dir) || !defined($infile) || $issue !~ /^([0-9]{3})$/) { print_usage(); exit(1); } if (! -d $dir || ! -w $dir) { mkdir($dir, 0700) or die("Nie mogę pisać do katalogu $dir: $!\n"); } # void print_usage() # prints usage howto sub print_usage { print("Użycie: ./rozkladaczka.pl [suffix]\n"); } # void print_info() sub print_info { print("Rozkładaczka ver. $VERSION\n"); print("\t Dzielę odcinek: $issue\n"); print("\tPliki cząstkowe do: $dir\n"); print("\t Plik wejściowy: $infile\n"); print("\t Suffix: $suffix\n") unless ($suffix eq ""); } sub main { # welcome note print_info(); # trochę debuggingu print("\nDzielenie na sekcje odcinka $issue\n"); print("Otwieram plik $infile\n"); open(IN, "<$infile") or die "Nie mogę otworzyć $infile: $!"; my $counter = 1; my $o = 0; my $filename = ""; while() { # if (/^\/) { print("Odcinek $issue posiada intro\n") and ($has_intro = 1); open(I, ">$dir/$issue-0$suffix.xml") or die "Nie mogę otworzyć $dir/$issue-0$suffix.xml: $!"; $in_intro = 1; } # if (/^\<\/intro\>/ && $in_intro) { print(I $_); close(I); $in_intro = 0; next; } if ($in_intro) { print(I $_); next; } if (/^\
$dir/$filename") or die "Nie mogę otworzyć pliku $dir/$filename: $!"; $o = 1; $counter++; } print(OUT $_) if ($o && !$in_intro); } # oryginał już nam nie będzie potrzebny print("Zamykam plik wejściowy $infile.\n"); close(IN); print("Sekcji: " . --$counter . "\n"); close(OUT) if $o; # That's all folks! print("\nWygląda na to, że wszystko skończyło się pomyślnie.\nOwocnego tłumaczenia!\n"); } main(); exit(0);