Skip to content

Instantly share code, notes, and snippets.

@vendethiel
Last active February 21, 2024 10:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vendethiel/ee3d04a3de36a245812ca3818fb4ce5e to your computer and use it in GitHub Desktop.
Save vendethiel/ee3d04a3de36a245812ca3818fb4ce5e to your computer and use it in GitHub Desktop.
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>&nbsp;</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