for runrig
line 1485
-- if ($rule =~ s/\s*\bonly\(([^\)]+)\)//) {
++ if ($rule =~ s/^((?:(?:no\s+)?content\s+)?by\s+(\S+))\s+only\(([^\)
+]+)\)$/$1/) {
++ my %only;
++ $only{$2} = undef;
++ @only{split /\s*,\s*/, $3} = ();
++ foreach (keys %$data) {
++ delete $data->{$_} unless exists $only{$_};
++ }
++ } elsif ($rule =~ s/\s*\bonly\(([^\)]+)\)//) {
for MidLifeXis: save the following into a file with .reg extension and doubleclick.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Folder\shell\CmdHere]
@="&Command Prompt Here"
[HKEY_CLASSES_ROOT\Folder\shell\CmdHere\Command]
@="C:\\WINNT\\system32\\cmd.exe /k cd \"%1\""
for runrig:
use strict;
use XML::Rules;
my $parser = XML::Rules->new(
rules => [
_default => 'content',
'other,
Author' => 'as array',
AuthorList => sub { return Authors => $_[1]->{Author} },
PubmedArticle => 'pass',
],
stripspaces => 7,
handlers => {
Start => sub {
my ( $Parser, $Element , %Attr) = @_; print "$Element\n";
# you can modify the elements of @_
for(my $i = 2;$i <= $#_; $i+=2) { $_[$i] = lc($_[$i]) };
#print "(@_)\n";
# and even add attributes
push @_, blah => 666;
},
Comment => sub {my ($Parser, $String) = @_; print "Found a comment
+: $String\n"},
}
);
my $data = $parser->parse( \*DATA);
use Data::Dumper;
print Dumper($data);
print "Authors:\n";
foreach my $author (@{$data->{Authors}}) {
print "$author->{ForeName} $author->{LastName}\n";
}
__DATA__
<PubmedArticle>
<!-- blah blah-->
<AuthorList CompleteYN="Y">
<Author ValidYN="Y">
<LastName>van Beilen</LastName>
<ForeName>J B</ForeName>
<Initials>JB</Initials>
</Author>
<Author ValidYN="Y">
<LastName>Penninga</LastName>
<ForeName>D</ForeName>
<Initials>D</Initials>
</Author>
<Author ValidYN="Y">
<LastName>Witholt</LastName>
<ForeName>B</ForeName>
<Initials>B</Initials>
</Author>
</AuthorList>
</PubmedArticle>
for ambrus:
$string = "xxabgi";
$_ = "abcghis";
print "Orig: \$string='$string'\t\$_='$_'\n";
$string =~ (0 ? y/a-c/d-f/ : y/g-i/j-l/);
print "Changed: \$string='$string'\t\$_='$_'\n";
print "\n";
$string = "xxabgi";
$_ = "abcghis";
print "Orig: \$string='$string'\t\$_='$_'\n";
$string =~ (1 ? y/a-c/d-f/ : y/g-i/j-l/);
print "Changed: \$string='$string'\t\$_='$_'\n";
XML::Rules examples
my $xml = <<'*END*';
<doc>
<book>
<name>Valka s mloky</name>
<author>Karel Capek</author>
<description>It's really <b>something</b> and I have to <u>underline
+ it</u>.</description>
</book>
<book>
<name>Predtucha</name>
<author>Pujmanova</author>
<description>It's really a <u>stupid</u> pointless book.
Confront <link id="12345">this one</link>. And don't read this one ple
+ase!
</description>
</book>
</doc>
*END*
my $parser = new XML::Rules (
rules => [
_default => 'content',
u => sub {my $str = $_[1]->{_content}; $str =~ tr/ /_/; return
+ '_'.$str.'_'},
b => sub {my $str = $_[1]->{_content}; return '*'.$str.'*'},
link => sub { qq{<a href="http://www.books.com/find_book.pl?id
+=$_[1]->{id}">$_->{_content}</a>} },
book => sub {
my $desc = $_[1]->{description};
$desc =~ s/\n/\n\t/g;
print "Book: $_[1]->{name}\nAuthor: $_[1]->{author}\nDescr
+iption: $desc\n\n";
},
],
);
$parser->parsestring($xml);
my $xml = <<'*END*';
<doc>
<person>
<fname>Jane</fname>
<lname>Luser</lname>
<email>JLuser@bogus.com</email>
<address>
<street>Washington st.</street>
<city>Old Creek</city>
<country>The US</country>
<bogus>bleargh</bogus>
</address>
<phones>
<phone type="home">123-456-7890</phone>
<phone type="office">663-486-7890</phone>
<phone type="fax">663-486-7000</phone>
</phones>
</person>
<person>
<fname>John</fname>
<lname>Other</lname>
<email>JOther@silly.com</email>
<address>
<street>Grant's st.</street>
<city>New Creek</city>
<country>Canada</country>
<bogus>sdrysdfgtyh degtrhy <foo>degtrhy werthy</foo>werthy drthyu</
+bogus>
</address>
<phones>
<phone type="office">663-486-7891</phone>
</phones>
</person>
</doc>
*END*
my $parser = new XML::Rules (
rules => [
_default => sub {$_[0] => $_[1]->{_content}},
'fname,lname' => sub {$_[0] => $_[1]->{_content}},
bogus => undef,
address => sub {address => "$_[1]->{street}, $_[1]->{city} ($_
+[1]->{country})"},
phone => sub {$_[1]->{type} => $_[1]->{_content}},
# let's use the "type" attribute as the key and the conten
+t as the value
phones => sub {delete $_[1]->{_content}; %{$_[1]}},
# remove the text content and pass along the type => conte
+nt from the child nodes
person => sub { # lets print the values, all the data is readi
+ly available in the attributes
print "$_[1]->{lname}, $_[1]->{fname} <$_[1]->{email}>\n";
print "Home phone: $_[1]->{home}\n" if $_[1]->{home};
print "Office phone: $_[1]->{office}\n" if $_[1]->{office}
+;
print "Fax: $_[1]->{fax}\n" if $_[1]->{fax};
print "$_[1]->{address}\n\n";
return; # the <person> tag is processed, no need to rememb
+er what it contained
},
]
);
$parser->parsestring($xml);
Have to look at xml parsers: do I need one? and test the speed to the benchmarks there.
The Czech declination models
MASCULINE |
| | hard anim | hard unanim | soft anim | soft unanim | rare |
1 | kdo/co: | pán | hrad | muž | stroj | předseda | soudce |
2 | bez koho/čeho: | pána | hradu | muže | stroje | předsedy | soudce |
3 | ke komu/čemu: | pánovi | hradu | muži | stroji | předsedovi | soudci |
4 | vidím koho/co: | pána | hrad | muže | stroj | předsedu | soudce |
5 | voláme: | pane | hrade | muži | stroji | předsedo | soudče/soudce |
6 | o kom/čem: | pánu | hradu | muži | stroji | předsedovi | soudci |
7 | s kým/čím: | pánem | hradem | mužem | strojem | předsedou | soudcem |
plural |
1 | kdo/co: | pánové | hrady | muži | stroje | předsedové | soudci |
2 | bez koho/čeho: | pánů | hradů | mužů | strojů | předsedů | soudců |
3 | ke komu/čemu: | pánům | hradům | mužům | strojům | předsedům | soudcům |
4 | vidím koho/co: | pány | hrady | muže | stroje | předsedy | soudce |
5 | voláme: | páni | hrady | muži | stroje | předsedové | soudci |
6 | o kom/čem: | pánech | hradech | mužích | strojích | předsedech | soudcích |
7 | s kým/čím: | pány | hrady | muži | stroji | předsedy | soudci |
FEMININE |
1 | kdo/co: | žena | růže | píseň | kost |
2 | bez koho/čeho: | ženy | růže | písně | kosti |
3 | ke komu/čemu: | ženě | růži | písni | kosti |
4 | vidím koho/co: | ženu | růži | píseň | kost |
5 | voláme: | ženo | růže | písni | kosti |
6 | o kom/čem: | ženě | růži | písni | kosti |
7 | s kým/čím: | ženou | růží | písní | kostí |
plural |
1 | kdo/co: | ženy | růže | písně | kosti |
2 | bez koho/čeho: | žen | růží | písní | kostí |
3 | ke komu/čemu: | ženám | růžím | písním | kostem |
4 | vidím koho/co: | ženy | růže | písně | kosti |
5 | voláme: | ženy | růže | písně | kosti |
6 | o kom/čem: | ženách | růžích | písních | kostech |
7 | s kým/čím: | ženami | růžemi | písněmi | kostmi |
NEUTRAL |
1 | kdo/co: | město | moře | kuře | stavení |
2 | bez koho/čeho: | města | moře | kuřete | stavení |
3 | ke komu/čemu: | městu | moři | kuřeti | stavení |
4 | vidím koho/co: | město | moře | kuře | stavení |
5 | voláme: | město | moře | kuře | stavení |
6 | o kom/čem: | městu/městě | moři | kuřeti | stavení |
7 | s kým/čím: | městem | mořem | kuřetem | stavením |
plural |
1 | kdo/co: | města | moře | kuřata | stavení |
2 | bez koho/čeho: | měst | moří | kuřat | stavení |
3 | ke komu/čemu: | městům | mořím | kuřatům | stavením |
4 | vidím koho/co: | města | moře | kuřata | stavení |
5 | voláme: | města | moře | kuřata | stavení |
6 | o kom/čem: | městech | mořích | kuřatech | staveních |
7 | s kým/čím: | městy | moři | kuřaty | staveními |
|