scratchpad
Jenda
<p>for [runrig]</p>
<code>
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\(([^\)]+)\)//) {
</code>
<p>
for [MidLifeXis]: save the following into a file with .reg extension and doubleclick.
<code>
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\""
</code>
<p>
for [runrig]:
<code>
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>
</code>
for [ambrus]:
<code>
$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";
</code>
<h3>XML::Rules examples</h3>
<code>
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 please!
</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}\nDescription: $desc\n\n";
},
],
);
$parser->parsestring($xml);
</code>
<code>
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 content as the value
phones => sub {delete $_[1]->{_content}; %{$_[1]}},
# remove the text content and pass along the type => content from the child nodes
person => sub { # lets print the values, all the data is readily 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 remember what it contained
},
]
);
$parser->parsestring($xml);
</code>
Have to look at [id://287366] and test the speed to the benchmarks there.</p>
<h3>The Czech declination models</h3>
<table border=1>
<tr><th colspan="8">MASCULINE</th></tr>
<tr><td></td><td></td><td>hard anim</td><td>hard unanim</td><td>soft anim</td><td>soft unanim</td><td colspan="2">rare</td></tr>
<tr><td>1</td><td>kdo/co:</td><td>pán</td><td>hrad</td><td>muž</td><td>stroj</td><td>předseda</td><td>soudce</td></tr>
<tr><td>2</td><td>bez koho/čeho:</td><td>pána</td><td>hradu</td><td>muže</td><td>stroje</td><td>předsedy</td><td>soudce</td></tr>
<tr><td>3</td><td>ke komu/čemu:</td><td>pánovi</td><td>hradu</td><td>muži</td><td>stroji</td><td>předsedovi</td><td>soudci</td></tr>
<tr><td>4</td><td>vidím koho/co:</td><td>pána</td><td>hrad</td><td>muže</td><td>stroj</td><td>předsedu</td><td>soudce</td></tr>
<tr><td>5</td><td>voláme:</td><td>pane</td><td>hrade</td><td>muži</td><td>stroji</td><td>předsedo</td><td>soudče/soudce</td></tr>
<tr><td>6</td><td>o kom/čem:</td><td>pánu</td><td>hradu</td><td>muži</td><td>stroji</td><td>předsedovi</td><td>soudci</td></tr>
<tr><td>7</td><td>s kým/čím:</td><td>pánem</td><td>hradem</td><td>mužem</td><td>strojem</td><td>předsedou</td><td>soudcem</td></tr>
<tr><th colspan="8">plural</th></tr>
<tr><td>1</td><td>kdo/co:</td><td>pánové</td><td>hrady</td><td>muži</td><td>stroje</td><td>předsedové</td><td>soudci</td></tr>
<tr><td>2</td><td>bez koho/čeho:</td><td>pánů</td><td>hradů</td><td>mužů</td><td>strojů</td><td>předsedů</td><td>soudců</td></tr>
<tr><td>3</td><td>ke komu/čemu:</td><td>pánům</td><td>hradům</td><td>mužům</td><td>strojům</td><td>předsedům</td><td>soudcům</td></tr>
<tr><td>4</td><td>vidím koho/co:</td><td>pány</td><td>hrady</td><td>muže</td><td>stroje</td><td>předsedy</td><td>soudce</td></tr>
<tr><td>5</td><td>voláme:</td><td>páni</td><td>hrady</td><td>muži</td><td>stroje</td><td>předsedové</td><td>soudci</td></tr>
<tr><td>6</td><td>o kom/čem:</td><td>pánech</td><td>hradech</td><td>mužích</td><td>strojích</td><td>předsedech</td><td>soudcích</td></tr>
<tr><td>7</td><td>s kým/čím:</td><td>pány</td><td>hrady</td><td>muži</td><td>stroji</td><td>předsedy</td><td>soudci</td></tr>
</table>
<br>
<table border=1>
<tr><th colspan="6">FEMININE</th></tr>
<tr><td>1</td><td>kdo/co:</td><td>žena</td><td>růže</td><td>píseň</td><td>kost</td></tr>
<tr><td>2</td><td>bez koho/čeho:</td><td>ženy</td><td>růže</td><td>písně</td><td>kosti</td></tr>
<tr><td>3</td><td>ke komu/čemu:</td><td>ženě</td><td>růži</td><td>písni</td><td>kosti</td></tr>
<tr><td>4</td><td>vidím koho/co:</td><td>ženu</td><td>růži</td><td>píseň</td><td>kost</td></tr>
<tr><td>5</td><td>voláme:</td><td>ženo</td><td>růže</td><td>písni</td><td>kosti</td></tr>
<tr><td>6</td><td>o kom/čem:</td><td>ženě</td><td>růži</td><td>písni</td><td>kosti</td></tr>
<tr><td>7</td><td>s kým/čím:</td><td>ženou</td><td>růží</td><td>písní</td><td>kostí</td></tr>
<tr><th colspan="6">plural</th></tr>
<tr><td>1</td><td>kdo/co:</td><td>ženy</td><td>růže</td><td>písně</td><td>kosti</td></tr>
<tr><td>2</td><td>bez koho/čeho:</td><td>žen</td><td>růží</td><td>písní</td><td>kostí</td></tr>
<tr><td>3</td><td>ke komu/čemu:</td><td>ženám</td><td>růžím</td><td>písním</td><td>kostem</td></tr>
<tr><td>4</td><td>vidím koho/co:</td><td>ženy</td><td>růže</td><td>písně</td><td>kosti</td></tr>
<tr><td>5</td><td>voláme:</td><td>ženy</td><td>růže</td><td>písně</td><td>kosti</td></tr>
<tr><td>6</td><td>o kom/čem:</td><td>ženách</td><td>růžích</td><td>písních</td><td>kostech</td></tr>
<tr><td>7</td><td>s kým/čím:</td><td>ženami</td><td>růžemi</td><td>písněmi</td><td>kostmi</td></tr>
</table>
<br>
<table border=1>
<tr><th colspan="6">NEUTRAL</th></tr>
<tr><td>1</td><td>kdo/co:</td><td>město</td><td>moře</td><td>kuře</td><td>stavení</td></tr>
<tr><td>2</td><td>bez koho/čeho:</td><td>města</td><td>moře</td><td>kuřete</td><td>stavení</td></tr>
<tr><td>3</td><td>ke komu/čemu:</td><td>městu</td><td>moři</td><td>kuřeti</td><td>stavení</td></tr>
<tr><td>4</td><td>vidím koho/co:</td><td>město</td><td>moře</td><td>kuře</td><td>stavení</td></tr>
<tr><td>5</td><td>voláme:</td><td>město</td><td>moře</td><td>kuře</td><td>stavení</td></tr>
<tr><td>6</td><td>o kom/čem:</td><td>městu/městě</td><td>moři</td><td>kuřeti</td><td>stavení</td></tr>
<tr><td>7</td><td>s kým/čím:</td><td>městem</td><td>mořem</td><td>kuřetem</td><td>stavením</td></tr>
<tr><th colspan="6">plural</th></tr>
<tr><td>1</td><td>kdo/co:</td><td>města</td><td>moře</td><td>kuřata</td><td>stavení</td></tr>
<tr><td>2</td><td>bez koho/čeho:</td><td>měst</td><td>moří</td><td>kuřat</td><td>stavení</td></tr>
<tr><td>3</td><td>ke komu/čemu:</td><td>městům</td><td>mořím</td><td>kuřatům</td><td>stavením</td></tr>
<tr><td>4</td><td>vidím koho/co:</td><td>města</td><td>moře</td><td>kuřata</td><td>stavení</td></tr>
<tr><td>5</td><td>voláme:</td><td>města</td><td>moře</td><td>kuřata</td><td>stavení</td></tr>
<tr><td>6</td><td>o kom/čem:</td><td>městech</td><td>mořích</td><td>kuřatech</td><td>staveních</td></tr>
<tr><td>7</td><td>s kým/čím:</td><td>městy</td><td>moři</td><td>kuřaty</td><td>staveními</td></tr>
</table>