#!/usr/bin/perl # genSort my $Rev = '$Revision: 1.1 $'; use strict; use Number::Spell; my ($low, $high) = (0, 10); if (@ARGV == 0) { } elsif (@ARGV == 1) { $high = &readNum($ARGV[0]); } elsif (@ARGV == 2) { $low = &readNum($ARGV[0]); $high = &readNum($ARGV[1]); } else { die &usage(); } print "# \$Id\$ # Generated by $Rev \@prefix r: . \@prefix srt: . \@prefix air: . \@prefix xsd: . "; foreach my $i ($low .. $high) { my $dupeStr = ''; print &genSort($i, ''), " .\n\n"; if ($i % 7 == 1) { print &genSort($i, 'B'), " .\n\n"; } if ($i % 14 == 1) { print &genSort($i, 'C'), " .\n\n"; } } sub usage { return "usage: genSort [[lower] upper]\n"; } sub readNum { my ($str) = @_; if ($str !~ m/^\-?\d+$/) { die "\"$str\" isn't an integer\n".&usage(); } return $str; } my $Type = 0; sub genSort { my ($int, $dupeStr) = @_; my ($NULL, $BNODE, $URI, $PLAIN, $LANG, $STR, $INT, $FLOAT) = (0..99); my ($MIN, $MAX) = ($NULL, $FLOAT); my %Renderers = ($NULL => sub {""}, $BNODE => sub {"_:$_[1]"}, $URI => sub {"srt:h$_[2]"}, $PLAIN => sub {"\"$_[0]\""}, $LANG => sub {"\"$_[0]\"\@EN"}, $STR => sub {"\"$_[0]\"^^xsd:string"}, $INT => sub {"\"$_[0]\"^^xsd:integer"}, $FLOAT => sub {"\"$_[0]\"^^xsd:float"}, ); my $localName = $int < 0 ? 'm'.-$int : 'p'.$int; my $str = &spell_number($int); if ($str =~ s/ negative$//) { $str = "minus $str"; } $str =~ s/ /_/g; my $type = $Type++; if ($Type > $MAX) { $Type = $MIN; } my $hetStr = &{$Renderers{$type}}($int, $str, $localName); if ($hetStr) { $hetStr = " ;\n srt:het1 $hetStr"; } return "srt:${str}${dupeStr} srt:str1 \"str ${int}\" ; srt:str2 \"${int}\" ; srt:int1 \"${int}\"^^xsd:integer ; srt:bNode1 _:${localName} ; srt:bNode2 _:${str}${dupeStr} ; srt:uri1 srt:${localName} ; srt:uri2 srt:${str}$hetStr"; }