Index: app/lib/attr.pm
===================================================================
--- app/lib/attr.pm	(revision 6b3be72395bfc594673b8184d6a7624e3800b47d)
+++ app/lib/attr.pm	(revision 6b3be72395bfc594673b8184d6a7624e3800b47d)
@@ -0,0 +1,133 @@
+package attr;
+
+use locale;
+use strict;
+
+use Data::Dumper;
+
+our $pos_re    = qr/(?:[[:upper:]]+)/;
+our $attr_re   = qr/(?:[[:upper:]]+)/;
+our $val_re    = qr/(?:[[:lower:][:digit:]+?!*-]|<[^>\n]+>)/;
+our $av_re     = qr/(?:$attr_re$val_re+)/;
+our $avlist_re = qr/(?:$av_re+)/;
+our $cat_re    = qr/(?:$pos_re(?:\/$avlist_re)?)/;
+
+sub match(\@\@)
+{
+    my ($cat1,$avs1)= @{shift @_};
+    my ($cat2,$avs2)= @{shift @_};
+
+    if($cat1 ne $cat2 && $cat1 ne '*' && $cat2 ne '*')
+    {
+	return 0; 
+    }
+    else
+    {
+      ATTR:for my $attr (keys %$avs1)
+      {
+	  if(exists $avs2->{$attr})
+	  {
+	      for my $val (keys %{$avs1->{$attr}})
+	      {
+		  next ATTR if $avs2->{$attr}->{$val};
+	      }
+	      return 0;
+	      last ATTR;
+	  }
+      }
+    }
+
+    return 1;
+}
+
+sub agree(\@\@$)
+{
+    my $val1 = $_[0]->[1]->{$_[2]};
+    my $val2 = $_[1]->[1]->{$_[2]};
+
+    return 1 if !$val1 || !$val2;
+
+    for my $v (keys %$val1)
+    {
+	return 1 if exists $val2->{$v};
+    }
+    return 0;
+}
+
+# funkcja parse
+# arg:     deskrypcja
+# warto¶æ: referencja do tablicy [<cat>, <avs>],
+#          gdzie <avs> jest referencja do hasza, zawierajacego pary
+#          atrybut=>hasz warto¶ci (pary warto¶æ=>1), czyli np.
+
+#         [
+#           'ADJ',
+#           {
+#             'KOLEDZY' => {
+#                            '<alojzy>' => 1,
+#                            '<karol>' => 1,
+#                            '<jan>' => 1
+#                          },
+#             'C' => {
+#                      'p' => 1,
+#                      'a' => 1,
+#                      'i' => 1
+#                    },
+#             'N' => {
+#                      'p' => 1
+#                    }
+#           }
+#         ];
+
+sub parse ($)
+{
+    my ($dstr)=@_;
+    my $avs={};
+    my ($cat,$attrlist) = split '/', $dstr;
+  ATTR:
+#    while( $attrlist =~ /([[:upper:]]+)((?:[[:lower:][:digit:]+?!*-]|<[^>\n]+>)+)/g )
+    while( $attrlist =~ /($attr_re)($val_re+)/g )
+    {
+	my ($attrstr,$valstr)=($1,$2);
+	my %vals;
+	while($valstr =~ /$val_re/g)
+	{
+	    my $val = $&;
+	    next ATTR if $val eq '*';
+	    $val =~ s/^<([[:lower:]])>$/$1/;
+	    $vals{$val}=1;
+	}
+	
+	$avs->{$attrstr} = \%vals; # dlaczego to dziala? %vals jest lokalne
+    }
+    [$cat, $avs];
+}
+
+# funkcja unparse
+# arg:     jak warto¶æ parse
+# warto¶æ: deskrypcja - napis
+
+sub unparse (\@)
+{
+    my ($cat,$avs)= @{shift @_};
+    my $dstr=$cat;
+    my @attrs = keys %$avs;
+    if(@attrs)
+    {
+	$dstr .= '/';
+	for my $attr ( sort @attrs )
+	{
+	    $dstr .= $attr . (join '', sort keys %{$avs->{$attr}});
+	}
+    }
+    $dstr;
+}
+
+
+sub canonize ($)
+{
+    unparse @{parse @_[0]} ;
+}
+
+
+1;
Index: app/lib/cats.dgc
===================================================================
--- app/lib/cats.dgc	(revision 0214596e4d70b25df913a24f19d50cb0f1b4a69f)
+++ 	(revision )
@@ -1,696 +1,0 @@
-ADJ/DcNpCaGp
-ADJ/DcNpCd
-ADJ/DcNpCgl
-ADJ/DcNpCi
-ADJ/DcNpCnavGaifn
-ADJ/DcNpCnvGp
-ADJ/DcNsCaGi
-ADJ/DcNsCaGpa
-ADJ/DcNsCaiGf
-ADJ/DcNsCavGf
-ADJ/DcNsCdGpain
-ADJ/DcNsCgdlGf
-ADJ/DcNsCgGpain
-ADJ/DcNsCilGpain
-ADJ/DcNsCnavGn
-ADJ/DcNsCnvGpai
-ADJ/DpNpCaGp
-ADJ/DpNpCd
-ADJ/DpNpCgl
-ADJ/DpNpCi
-ADJ/DpNpCnavGaifn
-ADJ/DpNpCnvGp
-ADJ/DpNsCaGi
-ADJ/DpNsCaGpa
-ADJ/DpNsCaiGf
-ADJ/DpNsCavGf
-ADJ/DpNsCdGpain
-ADJ/DpNsCgdlGf
-ADJ/DpNsCgGpain
-ADJ/DpNsCilGpain
-ADJ/DpNsCnavGn
-ADJ/DpNsCnvGpai
-ADJ/DsNpCaGp
-ADJ/DsNpCd
-ADJ/DsNpCgl
-ADJ/DsNpCi
-ADJ/DsNpCnavGaifn
-ADJ/DsNpCnvGp
-ADJ/DsNsCaGi
-ADJ/DsNsCaGpa
-ADJ/DsNsCaiGf
-ADJ/DsNsCavGf
-ADJ/DsNsCdGpain
-ADJ/DsNsCgdlGf
-ADJ/DsNsCgGpain
-ADJ/DsNsCilGpain
-ADJ/DsNsCnavGn
-ADJ/DsNsCnvGpai
-ADJNUM/NpCaGp
-ADJNUM/NpCd
-ADJNUM/NpCgl
-ADJNUM/NpCi
-ADJNUM/NpCnavGaifn
-ADJNUM/NpCnvGp
-ADJNUM/NsCaGi
-ADJNUM/NsCaGpa
-ADJNUM/NsCaiGf
-ADJNUM/NsCavGf
-ADJNUM/NsCdGpain
-ADJNUM/NsCgdlGf
-ADJNUM/NsCgGpain
-ADJNUM/NsCilGpain
-ADJNUM/NsCnavGn
-ADJNUM/NsCnvGpai
-ADJPAP/NpCaGp
-ADJPAP/NpCd
-ADJPAP/NpCgl
-ADJPAP/NpCi
-ADJPAP/NpCnavGaifn
-ADJPAP/NpCnvGp
-ADJPAP/NsCaGi
-ADJPAP/NsCaGpa
-ADJPAP/NsCaiGf
-ADJPAP/NsCavGf
-ADJPAP/NsCdGpain
-ADJPAP/NsCgdlGf
-ADJPAP/NsCgGpain
-ADJPAP/NsCilGpain
-ADJPAP/NsCnavGn
-ADJPAP/NsCnvGpai
-ADJPP/NpCaGp
-ADJPP/NpCd
-ADJPP/NpCgl
-ADJPP/NpCi
-ADJPP/NpCnavGaifn
-ADJPP/NpCnvGp
-ADJPP/NsCaGi
-ADJPP/NsCaGpa
-ADJPP/NsCaiGf
-ADJPP/NsCavGf
-ADJPP/NsCdGpain
-ADJPP/NsCgdlGf
-ADJPP/NsCgGpain
-ADJPP/NsCilGpain
-ADJPP/NsCnavGn
-ADJPP/NsCnvGpai
-ADJPRO/NpCaGp
-ADJPRO/NpCd
-ADJPRO/NpCgl
-ADJPRO/NpCi
-ADJPRO/NpCnavGaifn
-ADJPRO/NpCnvGp
-ADJPRO/NsCaGi
-ADJPRO/NsCaGpa
-ADJPRO/NsCaiGf
-ADJPRO/NsCavGf
-ADJPRO/NsCdGpain
-ADJPRO/NsCgdlGf
-ADJPRO/NsCgGpain
-ADJPRO/NsCilGpain
-ADJPRO/NsCnavGn
-ADJPRO/NsCnvGpai
-ADJPRO/ZdNpCaGp
-ADJPRO/ZdNpCd
-ADJPRO/ZdNpCgl
-ADJPRO/ZdNpCi
-ADJPRO/ZdNpCnavGaifn
-ADJPRO/ZdNpCnvGp
-ADJPRO/ZdNsCaGi
-ADJPRO/ZdNsCaGpa
-ADJPRO/ZdNsCaiGf
-ADJPRO/ZdNsCavGf
-ADJPRO/ZdNsCdGpain
-ADJPRO/ZdNsCgdlGf
-ADJPRO/ZdNsCgGpain
-ADJPRO/ZdNsCilGpain
-ADJPRO/ZdNsCnavGn
-ADJPRO/ZdNsCnvGpai
-ADJPRO/ZgNpCaGp
-ADJPRO/ZgNpCd
-ADJPRO/ZgNpCgl
-ADJPRO/ZgNpCi
-ADJPRO/ZgNpCnavGaifn
-ADJPRO/ZgNpCnvGp
-ADJPRO/ZgNsCaGi
-ADJPRO/ZgNsCaGpa
-ADJPRO/ZgNsCaiGf
-ADJPRO/ZgNsCavGf
-ADJPRO/ZgNsCdGpain
-ADJPRO/ZgNsCgdlGf
-ADJPRO/ZgNsCgGpain
-ADJPRO/ZgNsCilGpain
-ADJPRO/ZgNsCnavGn
-ADJPRO/ZgNsCnvGpai
-ADJPRO/ZiNpCaGp
-ADJPRO/ZiNpCd
-ADJPRO/ZiNpCgl
-ADJPRO/ZiNpCi
-ADJPRO/ZiNpCnavGaifn
-ADJPRO/ZiNpCnvGp
-ADJPRO/ZiNsCaGi
-ADJPRO/ZiNsCaGpa
-ADJPRO/ZiNsCaiGf
-ADJPRO/ZiNsCavGf
-ADJPRO/ZiNsCdGpain
-ADJPRO/ZiNsCgdlGf
-ADJPRO/ZiNsCgGpain
-ADJPRO/ZiNsCilGpain
-ADJPRO/ZiNsCnavGn
-ADJPRO/ZiNsCnvGpai
-ADJPRO/ZnNpCaGp
-ADJPRO/ZnNpCd
-ADJPRO/ZnNpCgl
-ADJPRO/ZnNpCi
-ADJPRO/ZnNpCnavGaifn
-ADJPRO/ZnNpCnvGp
-ADJPRO/ZnNsCaGi
-ADJPRO/ZnNsCaGpa
-ADJPRO/ZnNsCaiGf
-ADJPRO/ZnNsCavGf
-ADJPRO/ZnNsCdGpain
-ADJPRO/ZnNsCgdlGf
-ADJPRO/ZnNsCgGpain
-ADJPRO/ZnNsCilGpain
-ADJPRO/ZnNsCnavGn
-ADJPRO/ZnNsCnvGpai
-ADJPRO/ZqNpCaGp
-ADJPRO/ZqNpCd
-ADJPRO/ZqNpCgl
-ADJPRO/ZqNpCi
-ADJPRO/ZqNpCnavGaifn
-ADJPRO/ZqNpCnvGp
-ADJPRO/ZqNsCaGi
-ADJPRO/ZqNsCaGpa
-ADJPRO/ZqNsCaiGf
-ADJPRO/ZqNsCavGf
-ADJPRO/ZqNsCdGpain
-ADJPRO/ZqNsCgdlGf
-ADJPRO/ZqNsCgGpain
-ADJPRO/ZqNsCilGpain
-ADJPRO/ZqNsCnavGn
-ADJPRO/ZqNsCnvGpai
-ADJPRO/ZqrNpCaGp
-ADJPRO/ZqrNpCd
-ADJPRO/ZqrNpCgl
-ADJPRO/ZqrNpCi
-ADJPRO/ZqrNpCnavGaifn
-ADJPRO/ZqrNpCnvGp
-ADJPRO/ZqrNsCaGi
-ADJPRO/ZqrNsCaGpa
-ADJPRO/ZqrNsCaiGf
-ADJPRO/ZqrNsCavGf
-ADJPRO/ZqrNsCdGpain
-ADJPRO/ZqrNsCgdlGf
-ADJPRO/ZqrNsCgGpain
-ADJPRO/ZqrNsCilGpain
-ADJPRO/ZqrNsCnavGn
-ADJPRO/ZqrNsCnvGpai
-ADJPRO/ZsNpCaGp
-ADJPRO/ZsNpCd
-ADJPRO/ZsNpCgl
-ADJPRO/ZsNpCi
-ADJPRO/ZsNpCnavGaifn
-ADJPRO/ZsNpCnvGp
-ADJPRO/ZsNsCaGi
-ADJPRO/ZsNsCaGpa
-ADJPRO/ZsNsCaiGf
-ADJPRO/ZsNsCavGf
-ADJPRO/ZsNsCdGpain
-ADJPRO/ZsNsCgdlGf
-ADJPRO/ZsNsCgGpain
-ADJPRO/ZsNsCilGpain
-ADJPRO/ZsNsCnavGn
-ADJPRO/ZsNsCnvGpai
-ADJPRP/NpCaGp
-ADJPRP/NpCd
-ADJPRP/NpCgl
-ADJPRP/NpCi
-ADJPRP/NpCnavGaifn
-ADJPRP/NpCnvGp
-ADJPRP/NsCaGi
-ADJPRP/NsCaGpa
-ADJPRP/NsCaiGf
-ADJPRP/NsCavGf
-ADJPRP/NsCdGpain
-ADJPRP/NsCgdlGf
-ADJPRP/NsCgGpain
-ADJPRP/NsCilGpain
-ADJPRP/NsCnavGn
-ADJPRP/NsCnvGpai
-ADVANP
-ADV/Dc
-ADV/Dp
-ADV/Ds
-ADVNUM
-ADVPRO
-ADVPRO/Zd
-ADVPRO/Zi
-ADVPRO/Zn
-ADVPRO/Zq
-ADVPRO/Zqr
-ADVPRO/Zr
-ADVPRP
-APP
-BYC/Vb
-BYC/VpMcNpP1Gaifn
-BYC/VpMcNpP1Gp
-BYC/VpMcNpP2Gaifn
-BYC/VpMcNpP2Gp
-BYC/VpMcNpP3Gaifn
-BYC/VpMcNpP3Gp
-BYC/VpMcNsP1Gf
-BYC/VpMcNsP1Gpai
-BYC/VpMcNsP2Gf
-BYC/VpMcNsP2Gpai
-BYC/VpMcNsP3Gf
-BYC/VpMcNsP3Gn
-BYC/VpMcNsP3Gpai
-BYC/VpMdTaNpP1Gaifn
-BYC/VpMdTaNpP1Gp
-BYC/VpMdTaNpP2Gaifn
-BYC/VpMdTaNpP2Gp
-BYC/VpMdTaNpP3Gaifn
-BYC/VpMdTaNpP3Gp
-BYC/VpMdTaNsP1Gf
-BYC/VpMdTaNsP1Gpai
-BYC/VpMdTaNsP2Gf
-BYC/VpMdTaNsP2Gpai
-BYC/VpMdTaNsP3Gf
-BYC/VpMdTaNsP3Gn
-BYC/VpMdTaNsP3Gpai
-BYC/VpMdTrfNpP1
-BYC/VpMdTrfNpP2
-BYC/VpMdTrfNpP3
-BYC/VpMdTrfNsP1
-BYC/VpMdTrfNsP2
-BYC/VpMdTrfNsP3
-BYC/VpMiNpP1
-BYC/VpMiNpP2
-BYC/VpMiNsP2
-CONJ
-EXCL
-N/GaNpCa
-N/GaNpCd
-N/GaNpCg
-N/GaNpCi
-N/GaNpCl
-N/GaNpCn
-N/GaNpCv
-N/GaNsCa
-N/GaNsCd
-N/GaNsCg
-N/GaNsCi
-N/GaNsCl
-N/GaNsCn
-N/GaNsCv
-N/GfNpCa
-N/GfNpCd
-N/GfNpCg
-N/GfNpCi
-N/GfNpCl
-N/GfNpCn
-N/GfNpCv
-N/GfNsCa
-N/GfNsCd
-N/GfNsCg
-N/GfNsCi
-N/GfNsCl
-N/GfNsCn
-N/GfNsCv
-N/GiNpCa
-N/GiNpCd
-N/GiNpCg
-N/GiNpCi
-N/GiNpCl
-N/GiNpCn
-N/GiNpCv
-N/GiNsCa
-N/GiNsCd
-N/GiNsCg
-N/GiNsCi
-N/GiNsCl
-N/GiNsCn
-N/GiNsCv
-N/GnNpCa
-N/GnNpCd
-N/GnNpCg
-N/GnNpCi
-N/GnNpCl
-N/GnNpCn
-N/GnNpCv
-N/GnNsCa
-N/GnNsCd
-N/GnNsCg
-N/GnNsCi
-N/GnNsCl
-N/GnNsCn
-N/GnNsCv
-N/G?NpCa
-N/G*NpCa
-N/G?NpCd
-N/G*NpCd
-N/G?NpCg
-N/G*NpCg
-N/G?NpCi
-N/G*NpCi
-N/G?NpCl
-N/G*NpCl
-N/G?NpCn
-N/G*NpCn
-N/G?NpCv
-N/G*NpCv
-N/G?NsCa
-N/G?NsCd
-N/G?NsCg
-N/G?NsCi
-N/G?NsCl
-N/G?NsCn
-N/G?NsCv
-N/GpNpCa
-N/GpNpCd
-N/GpNpCg
-N/GpNpCi
-N/GpNpCl
-N/GpNpCn
-N/GpNpCv
-N/GpNsCa
-N/GpNsCd
-N/GpNsCg
-N/GpNsCi
-N/GpNsCl
-N/GpNsCn
-N/GpNsCv
-NPRO/ZdGnNsCa
-NPRO/ZdGnNsCd
-NPRO/ZdGnNsCg
-NPRO/ZdGnNsCi
-NPRO/ZdGnNsCl
-NPRO/ZdGnNsCn
-NPRO/ZgGnNsCa
-NPRO/ZgGnNsCd
-NPRO/ZgGnNsCg
-NPRO/ZgGnNsCi
-NPRO/ZgGnNsCl
-NPRO/ZgGnNsCn
-NPRO/ZgGpNpCa
-NPRO/ZgGpNpCd
-NPRO/ZgGpNpCg
-NPRO/ZgGpNpCi
-NPRO/ZgGpNpCl
-NPRO/ZgGpNpCn
-NPRO/ZiGnNsCa
-NPRO/ZiGnNsCd
-NPRO/ZiGnNsCg
-NPRO/ZiGnNsCi
-NPRO/ZiGnNsCl
-NPRO/ZiGnNsCn
-NPRO/ZiGpNsCa
-NPRO/ZiGpNsCd
-NPRO/ZiGpNsCg
-NPRO/ZiGpNsCi
-NPRO/ZiGpNsCl
-NPRO/ZiGpNsCn
-NPRO/ZnGnNsCa
-NPRO/ZnGnNsCd
-NPRO/ZnGnNsCg
-NPRO/ZnGnNsCi
-NPRO/ZnGnNsCl
-NPRO/ZnGnNsCn
-NPRO/ZnGpNsCa
-NPRO/ZnGpNsCd
-NPRO/ZnGpNsCg
-NPRO/ZnGpNsCi
-NPRO/ZnGpNsCl
-NPRO/ZnGpNsCn
-NPRO/ZpGaifnNpCa
-NPRO/ZpGaifnNpCd
-NPRO/ZpGaifnNpCg
-NPRO/ZpGaifnNpCi
-NPRO/ZpGaifnNpCl
-NPRO/ZpGaifnNpCn
-NPRO/ZpGfNsCa
-NPRO/ZpGfNsCd
-NPRO/ZpGfNsCg
-NPRO/ZpGfNsCi
-NPRO/ZpGfNsCl
-NPRO/ZpGfNsCn
-NPRO/ZpGnNsCa
-NPRO/ZpGnNsCd
-NPRO/ZpGnNsCg
-NPRO/ZpGnNsCi
-NPRO/ZpGnNsCl
-NPRO/ZpGnNsCn
-NPRO/ZpG*NpCa
-NPRO/ZpG*NpCd
-NPRO/ZpG*NpCg
-NPRO/ZpG*NpCi
-NPRO/ZpG*NpCl
-NPRO/ZpG*NpCn
-NPRO/ZpG*NsCa
-NPRO/ZpG*NsCd
-NPRO/ZpG*NsCg
-NPRO/ZpG*NsCi
-NPRO/ZpG*NsCl
-NPRO/ZpG*NsCn
-NPRO/ZpGpaiNsCa
-NPRO/ZpGpaiNsCd
-NPRO/ZpGpaiNsCg
-NPRO/ZpGpaiNsCi
-NPRO/ZpGpaiNsCl
-NPRO/ZpGpaiNsCn
-NPRO/ZpGpNpCa
-NPRO/ZpGpNpCd
-NPRO/ZpGpNpCg
-NPRO/ZpGpNpCi
-NPRO/ZpGpNpCl
-NPRO/ZpGpNpCn
-NPRO/ZqGnNsCa
-NPRO/ZqGnNsCd
-NPRO/ZqGnNsCg
-NPRO/ZqGnNsCi
-NPRO/ZqGnNsCl
-NPRO/ZqGnNsCn
-NPRO/ZqGpNsCa
-NPRO/ZqGpNsCd
-NPRO/ZqGpNsCg
-NPRO/ZqGpNsCi
-NPRO/ZqGpNsCl
-NPRO/ZqGpNsCn
-NPRO/ZqrGnNsCa
-NPRO/ZqrGnNsCd
-NPRO/ZqrGnNsCg
-NPRO/ZqrGnNsCi
-NPRO/ZqrGnNsCl
-NPRO/ZqrGnNsCn
-NPRO/ZqrGpNsCa
-NPRO/ZqrGpNsCd
-NPRO/ZqrGpNsCg
-NPRO/ZqrGpNsCi
-NPRO/ZqrGpNsCl
-NPRO/ZqrGpNsCn
-NPRO/ZxG*N*Ca
-NPRO/ZxG*N*Cd
-NPRO/ZxG*N*Cg
-NPRO/ZxG*N*Ci
-NPRO/ZxG*N*Cl
-NUMCOL/Ca
-NUMCOL/Cd
-NUMCOL/Cg
-NUMCOL/Ci
-NUMCOL/Cl
-NUMCOL/Cn
-NUMCRD/Ca
-NUMCRD/CaGaifn
-NUMCRD/CaGain
-NUMCRD/CaGf
-NUMCRD/CaGp
-NUMCRD/Cd
-NUMCRD/Cg
-NUMCRD/Ci
-NUMCRD/CiGf
-NUMCRD/CiGpain
-NUMCRD/Cl
-NUMCRD/Cn
-NUMCRD/CnGaifn
-NUMCRD/CnGain
-NUMCRD/CnGf
-NUMCRD/CnGp
-NUMCRD/ZiCaGaifn
-NUMCRD/ZiCaGain
-NUMCRD/ZiCaGf
-NUMCRD/ZiCaGp
-NUMCRD/ZiCd
-NUMCRD/ZiCg
-NUMCRD/ZiCi
-NUMCRD/ZiCiGf
-NUMCRD/ZiCiGpain
-NUMCRD/ZiCl
-NUMCRD/ZiCnGaifn
-NUMCRD/ZiCnGain
-NUMCRD/ZiCnGf
-NUMCRD/ZiCnGp
-NUMCRD/ZqiCaGaifn
-NUMCRD/ZqiCaGp
-NUMCRD/ZqiCd
-NUMCRD/ZqiCg
-NUMCRD/ZqiCi
-NUMCRD/ZqiCl
-NUMCRD/ZqiCnGaifn
-NUMCRD/ZqiCnGp
-NUMORD/NpCaGp
-NUMORD/NpCd
-NUMORD/NpCgl
-NUMORD/NpCi
-NUMORD/NpCnavGaifn
-NUMORD/NpCnvGp
-NUMORD/NsCaGi
-NUMORD/NsCaGpa
-NUMORD/NsCaiGf
-NUMORD/NsCavGf
-NUMORD/NsCdGpain
-NUMORD/NsCgdlGf
-NUMORD/NsCgGpain
-NUMORD/NsCilGpain
-NUMORD/NsCnavGn
-NUMORD/NsCnvGpai
-NUMPAR
-NUMPAR/Dc
-NUMPAR/Dp
-NUMPAR/Ds
-NUMPAR/Ns
-NUMPAR/NsGf
-NUMPAR/NsGpain
-NV/Ca
-NV/Cd
-NV/Cg
-NV/Ci
-NV/Cl
-NV/Cn
-ONO
-P
-PART
-P/Ca
-P/Cai
-P/Cal
-P/Cd
-P/Cg
-P/Cga
-P/Cgai
-P/Cgd
-P/Cgi
-P/Ci
-P/Cl
-PPRO/Zp
-V/AiVb
-V/AiViTa
-V/AiVpMcNpP1Gaifn
-V/AiVpMcNpP1Gp
-V/AiVpMcNpP2Gaifn
-V/AiVpMcNpP2Gp
-V/AiVpMcNpP3Gaifn
-V/AiVpMcNpP3Gp
-V/AiVpMcNsP1Gf
-V/AiVpMcNsP1Gpai
-V/AiVpMcNsP2Gf
-V/AiVpMcNsP2Gpai
-V/AiVpMcNsP3Gf
-V/AiVpMcNsP3Gn
-V/AiVpMcNsP3Gpai
-V/AiVpMdTaNpP1Gaifn
-V/AiVpMdTaNpP1Gp
-V/AiVpMdTaNpP2Gaifn
-V/AiVpMdTaNpP2Gp
-V/AiVpMdTaNpP3Gaifn
-V/AiVpMdTaNpP3Gp
-V/AiVpMdTaNsP1Gf
-V/AiVpMdTaNsP1Gpai
-V/AiVpMdTaNsP2Gf
-V/AiVpMdTaNsP2Gpai
-V/AiVpMdTaNsP3Gf
-V/AiVpMdTaNsP3Gn
-V/AiVpMdTaNsP3Gpai
-V/AiVpMdTrfNpP1
-V/AiVpMdTrfNpP2
-V/AiVpMdTrfNpP3
-V/AiVpMdTrfNsP1
-V/AiVpMdTrfNsP2
-V/AiVpMdTrfNsP3
-V/AiVpMiNpP1
-V/AiVpMiNpP2
-V/AiVpMiNsP2
-V/ApVb
-V/ApViTa
-V/ApVpMcNpP1Gaifn
-V/ApVpMcNpP1Gp
-V/ApVpMcNpP2Gaifn
-V/ApVpMcNpP2Gp
-V/ApVpMcNpP3Gaifn
-V/ApVpMcNpP3Gp
-V/ApVpMcNsP1Gf
-V/ApVpMcNsP1Gpai
-V/ApVpMcNsP2Gf
-V/ApVpMcNsP2Gpai
-V/ApVpMcNsP3Gf
-V/ApVpMcNsP3Gn
-V/ApVpMcNsP3Gpai
-V/ApVpMdTaNpP1Gaifn
-V/ApVpMdTaNpP1Gp
-V/ApVpMdTaNpP2Gaifn
-V/ApVpMdTaNpP2Gp
-V/ApVpMdTaNpP3Gaifn
-V/ApVpMdTaNpP3Gp
-V/ApVpMdTaNsP1Gf
-V/ApVpMdTaNsP1Gpai
-V/ApVpMdTaNsP2Gf
-V/ApVpMdTaNsP2Gpai
-V/ApVpMdTaNsP3Gf
-V/ApVpMdTaNsP3Gn
-V/ApVpMdTaNsP3Gpai
-V/ApVpMdTrfNpP1
-V/ApVpMdTrfNpP2
-V/ApVpMdTrfNpP3
-V/ApVpMdTrfNsP1
-V/ApVpMdTrfNsP2
-V/ApVpMdTrfNsP3
-V/ApVpMiNpP1
-V/ApVpMiNpP2
-V/ApVpMiNsP2
-V/GiVb
-V/GiViTa
-V/GiVpMcNpP1Gaifn
-V/GiVpMcNpP1Gp
-V/GiVpMcNpP2Gaifn
-V/GiVpMcNpP2Gp
-V/GiVpMcNpP3Gaifn
-V/GiVpMcNpP3Gp
-V/GiVpMcNsP1Gf
-V/GiVpMcNsP1Gpai
-V/GiVpMcNsP2Gf
-V/GiVpMcNsP2Gpai
-V/GiVpMcNsP3Gf
-V/GiVpMcNsP3Gn
-V/GiVpMcNsP3Gpai
-V/GiVpMdTaNpP1Gaifn
-V/GiVpMdTaNpP1Gp
-V/GiVpMdTaNpP2Gaifn
-V/GiVpMdTaNpP2Gp
-V/GiVpMdTaNpP3Gaifn
-V/GiVpMdTaNpP3Gp
-V/GiVpMdTaNsP1Gf
-V/GiVpMdTaNsP1Gpai
-V/GiVpMdTaNsP2Gf
-V/GiVpMdTaNsP2Gpai
-V/GiVpMdTaNsP3Gf
-V/GiVpMdTaNsP3Gn
-V/GiVpMdTaNsP3Gpai
-V/GiVpMdTrfNpP1
-V/GiVpMdTrfNpP2
-V/GiVpMdTrfNpP3
-V/GiVpMdTrfNsP1
-V/GiVpMdTrfNsP2
-V/GiVpMdTrfNsP3
-V/GiVpMiNpP1
-V/GiVpMiNpP2
-V/GiVpMiNsP2
-VNI
Index: app/lib/gram.dgc
===================================================================
--- app/lib/gram.dgc	(revision 14afb6e48875847a2fe21c189655f5cd73e5f1b1)
+++ 	(revision )
@@ -1,122 +1,0 @@
-#FLAG REL
-
-#UP REL 
-
-#ORDER * pcmpl
-#ORDER ..
-#ORDER subj .. * ..  cmpl
-#ORDER refl .. *
-#ORDER * refl
-
-#CONSTR	cmpl_g	 => ~cmpl_a
-#CONSTR	cmpl_inf => ~(cmpl_g|cmpl_d|cmpl_a|cmpl_p|cmpl_ze|cmpl_s)
-#CONSTR subj_pred => subj
-#constr cmpl_pred => cmpl
-
-
-
-#subj
-ROLE subj         # deklaracja roli (typ zaleznosci) podmiot
-AGR subj N        # zgodnosc podrzednika z nadrzednikiem co do liczby
-AGR subj G        # zgodnosc podrzednika z nadrzednikiem co do rodzaju
-GOV subj */Cn     # wymaganie by podrzednik byl w mianowniku
-
-# pary kategorii, jakie mozna polaczyc zaleznoscia typu podmiot
-
-#	nadrzednik		podrzednik
-LINK	V/VpP3,BYC/VpP3		N,NPRO		subj
-
-# (przecinek znaczy lub)
-
-ROLE cmpl_ga	# dopelnienie w bierniku/dopelniaczu
-ROLE cmpl_d     #             w celowniku
-ROLE cmpl_i     #             w narzedniku
-ROLE cmpl_inf   #             w bezokoliczniku
-ROLE cmpl_s     #             bedace zdaniem
-ROLE cmpl_ze    #             bedace zdaniem poprzedzonym 'ze'
-ROLE aux        
-ROLE mod
-ROLE prep
-ROLE pcmpl
-ROLE ccmpl
-ROLE poss
-ROLE restr
-ROLE part
-
-
-AGR aux N
-AGR aux G
-
-AGR mod N
-AGR mod C
-AGR mod G
-
-AGR pcmpl C
-
-GOV	cmpl_ga	*/Cga
-GOV	cmpl_d	*/Cd
-GOV	cmpl_i	*/Ci
-GOV	poss	*/Cg
-
-SGL subj
-SGL cmpl_ga
-SGL cmpl_d
-SGL cmpl_i
-SGL cmpl_inf
-SGL aux
-SGL pcmpl
-SGL ccmpl
-SGL poss
-SGL restr
-
-REQ	P	pcmpl
-REQ	CONJ	ccmpl
-
-RIGHT pcmpl
-RIGHT ccmpl
-RIGHT cmpl_ze
-RIGHT poss
-
-
-#cmpl_*
-LINK	V,ADVPRP,ADVANP,ADJPRP,ADJPAP,NV	N,NPRO			cmpl_ga
-LINK	V,ADVPRP,ADVANP,ADJPRP,ADJPAP,NV	N,NPRO			cmpl_d
-LINK	V,ADVPRP,ADVANP,ADJPRP,ADJPAP,NV	N,NPRO			cmpl_i
-LINK	V,ADVPRP,ADVANP,ADJPRP,ADJPAP,NV	V/Vb			cmpl_inf
-LINK	V,ADVPRP,ADVANP,ADJPRP,ADJPAP,NV	CONJ			cmpl_ze
-
-#aux
-#czas przyszly analityczny
-LINK	BYC/VpMdTf				V/AiVpP3,V/AiVb		aux
-#czas zaprzeszly(?)
-LINK	BYC/VpMc				V/VpP3			aux
-#BYC jako lacznik w (jest bialy, jest zaszlachtowany, jest pilotem)
-LINK	BYC					ADJPAP/Cn,ADJ/Cn,N/Ci	aux
-
-#mod
-
-LINK	V	ADV,ADVPRP,ADVANP,ADVPRO	mod
-LINK	N,NV	ADJ,ADJPAP,ADJPRP,ADJPRO	mod
-
-
-#prep
-LINK	N,V	P	prep
-
-#pcmpl
-LINK	P	N,NV	pcmpl
-
-
-#poss
-LINK	N	N,NV,NPRO	poss
-
-
-#ccmpl
-LINK	CONJ	V/Vp	ccmpl
-
-
-#restr
-LINK	ADJ	ADV	restr
-
-
-#part
-LINK	V	PART	part
Index: app/lib/seg.rb
===================================================================
--- app/lib/seg.rb	(revision 6b3be72395bfc594673b8184d6a7624e3800b47d)
+++ app/lib/seg.rb	(revision 6b3be72395bfc594673b8184d6a7624e3800b47d)
@@ -0,0 +1,31 @@
+
+class Seg
+  
+  def initialize(s="")
+    @line=s
+    self
+  end
+
+  def to_s
+    @line.chomp
+  end
+
+  def set(s)
+    @line=s
+    self
+  end
+
+  def field(key)
+    if key.class==Fixnum
+      @line.split[key-1]
+    elsif key.class==String
+      @line =~ /\s#{key}:(\S+)/; $1
+    end
+  end
+  alias [] field
+
+  def fields
+    @line.split
+  end
+
+end
Index: app/lib/weights.kor
===================================================================
--- app/lib/weights.kor	(revision a5fdde96132cd61c3f2e6d56c426c96b741427c8)
+++ 	(revision )
@@ -1,21 +1,0 @@
-%stdcor	1
-%xchg	1
-¿  rz 0.5
-ch h  0.5
-u  ó  0.5
-u  o  0.75
-om ¹  0.5
-om a  0.75
-en ê  0.5
-en ê  0.75
-a  ¹  0.25
-c  æ  0.25
-e  ê  0.25
-l  ³  0.25
-n  ñ  0.25
-o  ó  0.25
-s  ¶  0.25
-z  ¿  0.25
-z  Œ  0.25
-x  Œ  0.30
-
