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