Last active
February 21, 2024 10:59
-
-
Save vendethiel/ee3d04a3de36a245812ca3818fb4ce5e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use v6; | |
# todo parse table somehow | |
say '<meta charset="UTF-8"><style>.elem { background-color: red; }</style>'; | |
# Hard (d, h, ch, k, n, r, t) | |
# Soft (č, ř, š, ž, c, j, ď, ť, ň) | |
my @headers = << | |
'Masculine Animate (Hard)' | |
'Masculine Inanimate (Hard)' | |
'Masculine Animate (Soft)' | |
'Masculine Inanimate (Soft)' | |
'Masculine -a' | |
'Masculine -e' | |
'Feminine Hard' | |
'Feminine Soft' | |
'Feminine -a' | |
'Feminine -e' | |
'Neuter -o' | |
'Neuter -í' | |
'Neuter -ě' | |
'Neuter -e' | |
>>; | |
my @masculine-animate-hard = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative pán "páni or pánové" >>, | |
<< Genitive pána pánů >>, | |
<< Dative pánovi pánům >>, | |
<< Accusative pána pány >>, | |
<< Vocative páne "páni or pánové" >>, | |
<< Locative pánovi pánech >>, | |
<< Instrumental pánem pány >>, | |
]; | |
my @masculine-inanimate-hard = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative hrad hrady >>, | |
<< Genitive hradu hradů >>, | |
<< Dative hradu hradům >>, | |
<< Accusative hrad hrady >>, | |
<< Vocative hrade hrady >>, | |
<< Locative hradu hradech >>, | |
<< Instrumental hradem hrady >>, | |
]; | |
my @masculine-animate-soft = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative muž muži >>, | |
<< Genitive muže mužů >>, | |
<< Dative muži mužům >>, | |
<< Accusative muže muže >>, | |
<< Vocative muži muži >>, | |
<< Locative muži mužich >>, | |
<< Instrumental mužem muži >>, | |
]; | |
my @masculine-inanimate-soft = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative stroj stroje >>, | |
<< Genitive stroje strojů >>, | |
<< Dative stroji strojům >>, | |
<< Accusative stroj stroje >>, | |
<< Vocative stroji stroje >>, | |
<< Locative stroji strojích >>, | |
<< Instrumental strojem stroji >>, | |
]; | |
my @masculine-vowel-a = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative předseda předsedové >>, | |
<< Genitive předsedy předsedů >>, | |
<< Dative předsedovi předsedům >>, | |
<< Accusative předsedu předsedy >>, | |
<< Vocative předsedo předsedové >>, | |
<< Locative předsedovi předsedech >>, | |
<< Instrumental předsedou předsedy >>, | |
]; | |
my @masculine-vowel-e = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative soudce soudci >>, | |
<< Genitive soudce soudců >>, | |
<< Dative soudci soudcům >>, | |
<< Accusative soudce soudce >>, | |
<< Vocative soudce soudci >>, | |
<< Locative soudci soudcích >>, | |
<< Instrumental soudcem soudci >>, | |
]; | |
my @feminine-hard = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative kost kosti >>, | |
<< Genitive kosti kostí >>, | |
<< Dative kosti kostem >>, | |
<< Accusative kost kosti >>, | |
<< Vocative kosti kosti >>, | |
<< Locative kosti kostech >>, | |
<< Instrumental kosti kostmi >>, | |
]; | |
my @feminine-soft = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative píseň písně >>, | |
<< Genitive písně písní >>, | |
<< Dative písni písním >>, | |
<< Accusative píseň písně >>, | |
<< Vocative písni písně >>, | |
<< Locative písni písních >>, | |
<< Instrumental písní písněmi >>, | |
]; | |
my @feminine-vowel-a = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative žena ženy >>, | |
<< Genitive ženy žen >>, | |
<< Dative ženě ženám >>, | |
<< Accusative ženu ženy >>, | |
<< Vocative ženo ženy >>, | |
<< Locative ženě ženách >>, | |
<< Instrumental ženou ženami >>, | |
]; | |
my @feminine-vowel-e = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative růže růže >>, | |
<< Genitive růže růží >>, | |
<< Dative růži růžím >>, | |
<< Accusative růži růže >>, | |
<< Vocative růže růže >>, | |
<< Locative růži růžích >>, | |
<< Instrumental růži růžemi >>, | |
]; | |
my @neuter-o = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative město města >>, | |
<< Genitive města měst >>, | |
<< Dative městu městům >>, | |
<< Accusative město města >>, | |
<< Vocative město města >>, | |
<< Locative městě městech >>, | |
<< Instrumental městem městy >>, | |
]; | |
my @neuter-í = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative stavení stavení >>, | |
<< Genitive stavení stavení >>, | |
<< Dative stavení stavením >>, | |
<< Accusative stavení stavení >>, | |
<< Vocative stavení stavení >>, | |
<< Locative stavení staveních >>, | |
<< Instrumental stavením staveními >>, | |
]; | |
my @neuter-ě = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative kuře kuřata >>, | |
<< Genitive kuřete kuřat >>, | |
<< Dative kuřeti kuřatům >>, | |
<< Accusative kuře kuřata >>, | |
<< Vocative kuře kuřata >>, | |
<< Locative kuřeti kuřatech >>, | |
<< Instrumental kuřetem kuřaty >>, | |
]; | |
my @neuter-e = [ | |
<< / "Sng" "Pl" >>, | |
<< Nominative moře moře >>, | |
<< Genitive moře moří >>, | |
<< Dative moři mořím >>, | |
<< Accusative moře moře >>, | |
<< Vocative moře moře >>, | |
<< Locative moři mořích >>, | |
<< Instrumental mořem moři >>, | |
]; | |
my $with-neighbors = False; | |
my $keep-top = True; | |
for ( | |
@masculine-animate-hard, | |
@masculine-inanimate-hard, | |
@masculine-animate-soft, | |
@masculine-vowel-a, | |
@masculine-vowel-e, | |
@feminine-hard, | |
@feminine-soft, | |
@feminine-vowel-a, | |
@feminine-vowel-e, | |
@neuter-o, | |
@neuter-í, | |
@neuter-ě, | |
@neuter-e, | |
) -> @data { | |
my $header = @headers[$++]; | |
say $header; | |
my @lines = @data[*;0][1..*]; # ??? @data[1..*;0]; TODO update perl6 | |
my @columns = @data[0;*][1..*]; | |
my $longest = @data.map({ |$_ }).max(*.chars); | |
my $placeholder = '?' x $longest.chars; | |
sub gen-table($i, $j, :$with-neighbors, :$keep-top) { | |
my $table = join '', do gather { | |
take '<table border=1>'; | |
for @data.kv -> $i2, @r { | |
take '<tr>'; | |
for @r.kv -> $j2, $txt { | |
if $i2 == 0 && $j2 == 0 { | |
take "<th>{$header}</th>"; | |
} elsif $i2 == 0 || $j2 == 0 { | |
take "<th>{$txt}</th>"; | |
} elsif $i == $i2 && $j == $j2 { | |
take "<td class='placeholder'>{$placeholder}</td>"; | |
} elsif $keep-top && $j == $j2 && $i2 == 1 { | |
take "<td>{$txt}</td>"; | |
} elsif $with-neighbors && abs($i - $i2) <= 1 && abs($j - $j2) <= 1 { | |
take "<td>{$txt}</td>"; | |
} else { | |
take '<td> </td>'; | |
} | |
} | |
take '</tr>'; | |
} | |
take '</table>'; | |
} | |
($table, $table.subst($placeholder, @data[$i][$j])) | |
} | |
my @elems = do gather { | |
for @lines.kv -> $i, $line { | |
for @columns.kv -> $j, $column { | |
my $elem = @data[$i + 1; $j + 1]; | |
my ($front, $back) = gen-table($i + 1, $j + 1, :$with-neighbors, :$keep-top); | |
#say $front, $back;exit; | |
take $line, $column, $elem, $front, $back; | |
} | |
} | |
} | |
say @lines; | |
say @columns; | |
say join '', @elems[*;3,4]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment