Perl normally assumes that you call a function like sub mysub { my $self = shift; # or use $_[0]; my $class = $self->someFunction(); } In this example someFunction is called with one parameter, the class it belongs to! Strange but sometime useful!
I looked into Sword.pm, the declaration of zCom::createModule is at line 971. First try to craete the module using RawText. If this works try to use zCom. In the example I used Sword::RawCom::createModule("data/modules/comments/rawcom/mak") || die "Couldn't create the RawCom module!"; my $mod = Sword::RawCom->new("data/modules/comments/rawcom/mak"); The last call is of the type I mentioned above, it wants two parameters (self and path), but since you call it from Sword::RawCom you have to pass only the path parameter. Have a look into the example, it's a working script. I attached a small piece of text data which is in the format create_mak.pl wants to have. Simply copy the file (keeping the name) into the dir where the script is, change into this dir and run the script. The created new module will be in mak.zip. If you need help let me know. It works pretty well for me. Joachim > OK, the class is in the zcom.i file but after I build SWIG and install > Perl it does not show up in the Sword.pm file. So ever time I try and > use it, Perl can't find that function. And when I try and create a > RawText module or other modules I get this message. > > Usage: RawText_createModule(self,path); > > It seems that the function is looking for two arguments (self, path). I > know that path is where I want the module but what is the self. > Furthermore this is not how it is set up in the rawtext.i file. It > shows only one argument. Do you have any more things I can try? > > Thanks > Chad > > On Sun, 2003-01-19 at 17:34, Joachim Ansorg wrote: > > Normally build it with > > > > cd bindings/swig > > ./configure > > make > > cd perl; > > make install > > > > The make install is important, otherwise the Sword module is not > > available and can't load the shared lib. > > > > Have a look into the .i files which functions are available in which > > classes. Basically it's most of the things available in > > sword-cvs/doc/api-documentation/ > > > > If you need some missing classes let me know. > > > > Let me know how it works, > > Joachim > > > > > That did not work. I get a message when I try creating an zCom module > > > in Perl. > > > > > > Can't locate auto/Sword/zCom/createModul.al in @INC > > > > > > I don't find zCom::createModule in the Sword.pm file. Did I build SWIG > > > Perl wrong or something. > > > > > > Thanks > > > Chad > > > > > > On Sun, 2003-01-19 at 05:25, Joachim Ansorg wrote: > > > > Chad, > > > > Have a look at the following messy Perl script. It was never intended > > > > for a release, so the code isn't very good. At the end you'll see how > > > > I created a compressed commentary module using the Swig bindings. > > > > > > > > If you need more help let me know. > > > > > > > > Joachim > > > > > > > > > Can someone tell me how to create a module in SWIG Perl? I try and > > > > > follow the example given but I get an error message like this: > > > > > > > > > > Usage: xText_createModule(self,path,blockBound); > > > > > > > > > > Can any one help? > > > > > > > > > > Thanks > > > > > Chad > > > > > > > > > > _______________________________________________ > > > > > sword-devel mailing list > > > > > [EMAIL PROTECTED] > > > > > http://www.crosswire.org/mailman/listinfo/sword-devel > > > > > > > > -- > > > > Joachim Ansorg > > > > www.bibletime.info > > > > www.ansorgs.de > > > > > > > > ---- > > > > > > > > > > > > #!/usr/bin/perl > > > > > > > > use Sword; #Use the Sword bindings for Perl > > > > use Encode; > > > > use File::Path; > > > > use Cwd; > > > > use strict; > > > > > > > > # Parameters: > > > > # 1. The modules > > > > # 2. The key as english string > > > > # 3. The data as string > > > > > > > > sub writeData { > > > > my $mod = shift; > > > > my $key = shift; > > > > my $data = shift; > > > > > > > > # We have to parse the key to be able to write a range to the module > > > > # The first entry is written using the data, ther others are written > > > > as links my $vk = Sword::VerseKey->new(); > > > > $vk->setLocale("de"); > > > > > > > > my $list = $vk->ParseVerseList($key, "Genesis 1:1", 1); # "1" to > > > > parse ranges! for (my $i = 0; $i < $list->Count(); $i++) { > > > > my $sw_key= $list->GetElement($i); > > > > if (my $rangeKey = $sw_key->toVerseKey()) { > > > > # write the data to the first key and link the others >to this > > > > first one my $k = $rangeKey->LowerBound(); > > > > print "\tWriting to " . $k->getText() . "\n"; > > > > $mod->SetKey($k); > > > > $mod->write($data); > > > > > > > > $k->next(); > > > > # go up until we reach UpperBound and link each entry >to the > > > > LowerBound while(($k->compare($rangeKey->UpperBound()) == -1)) { #as > > > > long as $k is before UpperBound $mod->SetKey($k); > > > > $mod->writeLink($rangeKey->LowerBound()); > > > > print "\t\t" . $k->getText() . ": linking to ". > > > > $sw_key->getText() . "\n"; $k->next(); > > > > } > > > > #we reached the last entry > > > > #$mod->writeLink($rangeKey->LowerBound()); > > > > print "\t\t" . $k->getText() . ": linking to ". >$sw_key->getText() > > > > . "\n"; } > > > > else { > > > > print "\tWriting single key to " . $sw_key->getText() >. "\n"; > > > > $mod->SetKey($sw_key); > > > > $mod->write($data); > > > > } > > > > } > > > > > > > > #print out the list > > > > }; > > > > > > > > sub convert_key { > > > > my $key = shift; > > > > $key =~ s/,/:/g; > > > > $key =~ s/(\d)\./$1. /; > > > > if ($key =~ /[^0-9]$/) { > > > > die "Invalid key $key" > > > > }; > > > > > > > > return $key; > > > > }; > > > > > > > > sub format_content { > > > > my $key = shift; > > > > my $date = shift; > > > > my $data = shift; > > > > # Format the data in the following way: > > > > # Datum: $date > > > > # Stelle: <scripRef passage="$englishKey">$key</scripRef> > > > > # <BR> > > > > # $data > > > > > > > > #Fix existing scripRefs > > > > # 1. Remove newlines within scripRef tags > > > > $data =~ s/<scripRef[\n\s]?(.+?)\n(.+?)>/<scripRef $1 $2>/gi; > > > > # 2. Remove version=".+?" parts > > > > $data =~ s|<scripRef (.+?)version=".+?"(.+?)>|<scripRef $1 $2>|gis; > > > > # 3. Beautify scripRefs, e.g. remove trailing spaces > > > > $data =~ s|<scripRef (.+?)\s+>|<scripRef $1>|gis; > > > > > > > > > > > > my $ret = '<FONT color="#800000"><B>Datum:</B> ' . $date . > > > > '</FONT><BR>'; > > > > > > > > my $vk = Sword::VerseKey->new(); > > > > $vk->setLocale("de"); > > > > $vk->setText($key); > > > > #$vk->setLocale("en"); > > > > > > > > my $rangeText = undef; > > > > my $list = $vk->ParseVerseList($key, "Genesis 1:1", 1); # "1" to > > > > parse ranges! for (my $i = 0; $i < $list->Count(); $i++) { > > > > my $sw_key= $list->GetElement($i); > > > > if (my $rangeKey = $sw_key->toVerseKey()) { > > > > $rangeKey->setLocale("en"); > > > > # write the data to the first key and link the others >to this > > > > first one if( > > > > $rangeKey->LowerBound()->compare($rangeKey->UpperBound()) == -1 ) { > > > > #as long as $k is before UpperBound $rangeText .= > > > > $rangeKey->LowerBound()->getText() . "-" . > > > > $rangeKey->UpperBound()->getText() . ";"; } > > > > } > > > > else { > > > > $vk->setLocale("de"); > > > > $vk->setText($sw_key->getText()); > > > > $vk->setLocale("en"); > > > > $rangeText .= $vk->getText(); > > > > } > > > > } > > > > > > > > > > > > $ret .= '<FONT color="#800000"><B>Stelle:</B> ' . '<scripRef > > > > passage="' . $rangeText .'">' . $key . '</scripRef></FONT>'; $ret .= > > > > '<BR><P align="justify">' . $data . '</P>'; > > > > > > > > #Finally change all possible characters into UTF-8 so it will work > > > > on any platform Encode::from_to($ret, "iso-8859-15", "utf-8"); > > > > return $ret; > > > > }; > > > > > > > > # This function created the module configuration file for the MAK > > > > module sub create_config { > > > > my $path = shift; > > > > my $filename = shift; > > > > > > > > mkpath("$path"); > > > > open(OUT, "> $path/$filename"); > > > > > > > > print OUT <<'EOF'; > > > > [MAK] > > > > DataPath=./modules/comments/rawcom/mak/ > > > > ModDrv=RawCom > > > > SourceType=ThML > > > > Encoding=UTF-8 > > > > Lang=de > > > > MinimumVersion=1.5.2 > > > > Version=1.0 > > > > History_1.0=2002-11-24 -- Major update. Many new comments, updated > > > > format, changed encoding to UTF-8, fixed existing scripRefs > > > > History_0.9=2000-07-29 -- First official version -- ThML-Tags for > > > > scripture ref SwordVersionDate=2002-11-24 > > > > Description=Matthias Ansorgs Kommentar > > > > About=Matthias Ansorgs Kommentar zur Bibel\par\ > > > > Der Kommentar wurde von Matthias Ansorg geschrieben.\par\ > > > > Kontakt: [EMAIL PROTECTED] > > > > TextSource=Matthias Ansorg,[EMAIL PROTECTED] > > > > LCSH=Bible--Commentaries, German. > > > > DistributionLicense=Public Domain > > > > EOF > > > > close(OUT); > > > > }; > > > > > > > > > > > > > > > > sub write_module { > > > > Sword::LocaleMgr::getSystemLocaleMgr()->setDefaultLocaleName("de"); > > > > > > > > my $file = shift; > > > > open(IN, $file) || die "Can't open file $file\n"; > > > > > > > > my $key = undef; > > > > my $date = undef; > > > > my $comment = undef; > > > > > > > > #Create the directories where the module should be created > > > > mkpath("data/modules/comments/rawcom/mak"); > > > > #LocaleMgr()->setDefaultLocaleName("de"); > > > > > > > > > > > > #Sword::zCom::createModule("data/modules/comments/rawcom/mak",4) || > > > > die "Couldn't create the zCom module!"; > > > > Sword::RawCom::createModule("data/modules/comments/rawcom/mak") || > > > > die "Couldn't create the zCom module!"; #my $compressor = > > > > Sword::LZSSCompress->new(); > > > > #my $mod = Sword::zCom->new("data/modules/comments/rawcom/mak", 0, > > > > 0, 4, $compressor ); #blocktype = 4, compressor type is > > > > LZSSCompression my $mod = > > > > Sword::RawCom->new("data/modules/comments/rawcom/mak"); > > > > $mod->setSkipConsecutiveLinks(0); > > > > > > > > while (<IN>) { > > > > if (/^Text:\s?(.+?)\n/) { #The start if a new entry was found > > > > if ($key && $date && $comment) { #write the found >comment to disk > > > > $key = convert_key($key); > > > > print "Found: " . $key. "\n"; > > > > my $data = format_content($key, $date, >$comment); > > > > writeData($mod, $key, $data); > > > > }; > > > > > > > > $key = $1; > > > > $date = undef; > > > > $comment = undef; > > > > } > > > > elsif (/^Datum:\s?(.+?)\n/) { > > > > $date = $1; > > > > } > > > > else { > > > > $comment .= $_; > > > > }; > > > > }; > > > > #write the last entry into the module > > > > if ($key && $date && $comment) { #write the found comment to disk > > > > $key = convert_key($key); > > > > print "Found: " . $key. "\n"; > > > > my $data = format_content($key, $date, $comment); > > > > writeData($mod, $key, $data); > > > > }; > > > > > > > > close(IN); > > > > }; > > > > > > > > sub zip_module { > > > > my $path = shift; > > > > my $filename = shift; > > > > > > > > my $start_dir = getcwd(); > > > > unlink("$filename"); > > > > chdir("$path"); > > > > > > > > system("chmod -R a+r+X $start_dir/$path"); > > > > > > > > # Call zip command to compress all files in the current directory > > > > my $ret = system( "zip -q -9 -r $start_dir/$filename *"); > > > > chdir($start_dir); > > > > rmtree("$start_dir/data/"); > > > > > > > > print "Zipped module data files are in the ZIP archive $filename\n"; > > > > > > > > return $ret; > > > > } > > > > > > > > #main part > > > > create_config("data/mods.d/", "mak.conf"); > > > > write_module("stilleZeit.Kommentare.txt"); > > > > zip_module("data", "mak.zip"); > > > > create_config(".", "mak.conf"); > > > > > > _______________________________________________ > > > sword-devel mailing list > > > [EMAIL PROTECTED] > > > http://www.crosswire.org/mailman/listinfo/sword-devel > > > > -- > > Joachim Ansorg > > www.bibletime.info > > www.ansorgs.de > > _______________________________________________ > > sword-devel mailing list > > [EMAIL PROTECTED] > > http://www.crosswire.org/mailman/listinfo/sword-devel > > _______________________________________________ > sword-devel mailing list > [EMAIL PROTECTED] > http://www.crosswire.org/mailman/listinfo/sword-devel -- Joachim Ansorg www.bibletime.info www.ansorgs.de
#!/usr/bin/perl use Sword; #Use the Sword bindings for Perl use Encode; use File::Path; use Cwd; use strict; # Parameters: # 1. The modules # 2. The key as english string # 3. The data as string sub writeData { my $mod = shift; my $key = shift; my $data = shift; # We have to parse the key to be able to write a range to the module # The first entry is written using the data, ther others are written as links my $vk = Sword::VerseKey->new(); $vk->setLocale("de"); my $list = $vk->ParseVerseList($key, "Genesis 1:1", 1); # "1" to parse ranges! for (my $i = 0; $i < $list->Count(); $i++) { my $sw_key= $list->GetElement($i); if (my $rangeKey = $sw_key->toVerseKey()) { # write the data to the first key and link the others to this first one my $k = $rangeKey->LowerBound(); print "\tWriting to " . $k->getText() . "\n"; $mod->SetKey($k); $mod->write($data); $k->next(); # go up until we reach UpperBound and link each entry to the LowerBound while(($k->compare($rangeKey->UpperBound()) == -1)) { #as long as $k is before UpperBound $mod->SetKey($k); $mod->writeLink($rangeKey->LowerBound()); print "\t\t" . $k->getText() . ": linking to ". $sw_key->getText() . "\n"; $k->next(); } #we reached the last entry #$mod->writeLink($rangeKey->LowerBound()); print "\t\t" . $k->getText() . ": linking to ". $sw_key->getText() . "\n"; } else { print "\tWriting single key to " . $sw_key->getText() . "\n"; $mod->SetKey($sw_key); $mod->write($data); } } #print out the list }; sub convert_key { my $key = shift; $key =~ s/,/:/g; $key =~ s/(\d)\./$1. /; if ($key =~ /[^0-9]$/) { die "Invalid key $key" }; return $key; }; sub format_content { my $key = shift; my $date = shift; my $data = shift; # Format the data in the following way: # Datum: $date # Stelle: <scripRef passage="$englishKey">$key</scripRef> # <BR> # $data #Fix existing scripRefs # 1. Remove newlines within scripRef tags $data =~ s/<scripRef[\n\s]?(.+?)\n(.+?)>/<scripRef $1 $2>/gi; # 2. Remove version=".+?" parts $data =~ s|<scripRef (.+?)version=".+?"(.+?)>|<scripRef $1 $2>|gis; # 3. Beautify scripRefs, e.g. remove trailing spaces $data =~ s|<scripRef (.+?)\s+>|<scripRef $1>|gis; my $ret = '<FONT color="#800000"><B>Datum:</B> ' . $date . '</FONT><BR>'; my $vk = Sword::VerseKey->new(); $vk->setLocale("de"); $vk->setText($key); #$vk->setLocale("en"); my $rangeText = undef; my $list = $vk->ParseVerseList($key, "Genesis 1:1", 1); # "1" to parse ranges! for (my $i = 0; $i < $list->Count(); $i++) { my $sw_key= $list->GetElement($i); if (my $rangeKey = $sw_key->toVerseKey()) { $rangeKey->setLocale("en"); # write the data to the first key and link the others to this first one if( $rangeKey->LowerBound()->compare($rangeKey->UpperBound()) == -1 ) { #as long as $k is before UpperBound $rangeText .= $rangeKey->LowerBound()->getText() . "-" . $rangeKey->UpperBound()->getText() . ";"; } } else { $vk->setLocale("de"); $vk->setText($sw_key->getText()); $vk->setLocale("en"); $rangeText .= $vk->getText(); } } $ret .= '<FONT color="#800000"><B>Stelle:</B> ' . '<scripRef passage="' . $rangeText .'">' . $key . '</scripRef></FONT>'; $ret .= '<BR><P align="justify">' . $data . '</P>'; #Finally change all possible characters into UTF-8 so it will work on any platform Encode::from_to($ret, "iso-8859-15", "utf-8"); return $ret; }; # This function created the module configuration file for the MAK module sub create_config { my $path = shift; my $filename = shift; mkpath("$path"); open(OUT, "> $path/$filename"); print OUT <<'EOF'; [MAK] DataPath=./modules/comments/rawcom/mak/ ModDrv=RawCom SourceType=ThML Encoding=UTF-8 Lang=de MinimumVersion=1.5.2 Version=1.0 History_1.0=2002-11-24 -- Major update. Many new comments, updated format, changed encoding to UTF-8, fixed existing scripRefs History_0.9=2000-07-29 -- First official version -- ThML-Tags for scripture ref SwordVersionDate=2002-11-24 Description=Matthias Ansorgs Kommentar About=Matthias Ansorgs Kommentar zur Bibel\par\ Der Kommentar wurde von Matthias Ansorg geschrieben.\par\ Kontakt: [EMAIL PROTECTED] TextSource=Matthias Ansorg,[EMAIL PROTECTED] LCSH=Bible--Commentaries, German. DistributionLicense=Public Domain EOF close(OUT); }; sub write_module { Sword::LocaleMgr::getSystemLocaleMgr()->setDefaultLocaleName("de"); my $file = shift; open(IN, $file) || die "Can't open file $file\n"; my $key = undef; my $date = undef; my $comment = undef; #Create the directories where the module should be created mkpath("data/modules/comments/rawcom/mak"); #LocaleMgr()->setDefaultLocaleName("de"); #Sword::zCom::createModule("data/modules/comments/rawcom/mak",4) || die "Couldn't create the zCom module!"; Sword::RawCom::createModule("data/modules/comments/rawcom/mak") || die "Couldn't create the zCom module!"; #my $compressor = Sword::LZSSCompress->new(); #my $mod = Sword::zCom->new("data/modules/comments/rawcom/mak", 0, 0, 4, $compressor ); #blocktype = 4, compressor type is LZSSCompression my $mod = Sword::RawCom->new("data/modules/comments/rawcom/mak"); $mod->setSkipConsecutiveLinks(0); while (<IN>) { if (/^Text:\s?(.+?)\n/) { #The start if a new entry was found if ($key && $date && $comment) { #write the found comment to disk $key = convert_key($key); print "Found: " . $key. "\n"; my $data = format_content($key, $date, $comment); writeData($mod, $key, $data); }; $key = $1; $date = undef; $comment = undef; } elsif (/^Datum:\s?(.+?)\n/) { $date = $1; } else { $comment .= $_; }; }; #write the last entry into the module if ($key && $date && $comment) { #write the found comment to disk $key = convert_key($key); print "Found: " . $key. "\n"; my $data = format_content($key, $date, $comment); writeData($mod, $key, $data); }; close(IN); }; sub zip_module { my $path = shift; my $filename = shift; my $start_dir = getcwd(); unlink("$filename"); chdir("$path"); system("chmod -R a+r+X $start_dir/$path"); # Call zip command to compress all files in the current directory my $ret = system( "zip -q -9 -r $start_dir/$filename *"); chdir($start_dir); rmtree("$start_dir/data/"); print "Zipped module data files are in the ZIP archive $filename\n"; return $ret; } #main part create_config("data/mods.d/", "mak.conf"); write_module("stilleZeit.Kommentare.txt"); zip_module("data", "mak.zip"); create_config(".", "mak.conf");
Text: Lukas 12,2-3 Datum: 19.10.1998 Das Gericht wird einst alle Verfehlungen der Menschen hervorholen und bloßstellen. Doch was den Gläubigen durch Jesus vergeben ist, wird nicht mehr hervorgeholt werden, denn diese Anklageschrift ist zerrissen. Darum müssen Christen das kommende Gericht nicht fürchten. »Freunde« gebraucht der HERR hier als Anrede für SEINE Jünger, denn an dies sind die Verse 1-12 gerichtet (Lk.12,1). Joh.15,14: "Ihr seid meine Freunde, wenn ihr alles tut, was irgend ich euch geboten habe." Das Gegenteil eines Freundes Jesu wird in Jakobus 4,4 definiert: "Wer nun irgend ein Freund der Welt sein will, stellt sich als Feind Gottes dar." Text: Lukas 12,4 Datum: 19.10.1998 Der HERR zeigt, dass sich Seele und Leib im Tod trennen. Vgl. auch 1.Mo.35,18. Es ist ein Befehl des HERRN, dass wir Menschen nicht fürchten sollen - demnach ist Menschenfurcht Ungehorsam gegenüber IHM. Text: Lukas 12,5 Datum: 19.10.1998 Der HERR will nicht, dass wir die Hölle und das Gericht fürchten, sondern dass wir Ehrfurcht vor Gott haben, der die Gewalt hat zu richten. Solche Furcht vor dem HERRN bildet »der Erkenntnis Anfang« (Spr.1,7). Aus dieser Ehrfurcht resultiert eine heilige Scheu davor, Gott zu betrüben, der uns so sehr liebt. Text: Lukas 12,6-7 Datum: 19.10.1998 Phil.4,6: "In allem lasst durch Gebet und Flehen mit Danksagung eure Anliegen vor Gott kundwerden." Auch unsere geringsten Anliegen sind vor Gott nicht zu gering, sondern ER ist so groß, dass ER selbst auf jeden einzelnen Sperling achtgibt. Text: Lukas 12,10 Datum: 19.10.1998 Die Lästerung gegen den Geist ist keine Lästerrede, sondern das Verleugnen des Glaubens, das Abweisen der Überführung durch den Heiligen Geist, dass Jesus der Christus ist. Wer aber nicht glaubt, kann nicht wiedergeboren werden. Text: Lukas 12,11-12 Datum: 19.10.1998 Wenn man sich vor Obrigkeit für seinen Glauben verantworten muss, wird man die rechte Rede vom Heiligen Geist bekommen und soll nicht selbst nach Worten suchen. Ein Beispiel hierfür sind Petrus und Johannes vor dem Hohen Rat (Apg.4,8). Dagegen beziehen sich diese Worte nicht auf die Wortverkündigung.