#235 [pl][nouns] generator dukatywów
This commit is contained in:
parent
cfc5473f79
commit
1bd173b8a8
|
@ -165,3 +165,42 @@ form[disabled] {
|
|||
.inverted {
|
||||
filter: invert(1);
|
||||
}
|
||||
|
||||
.list-singular {
|
||||
padding-inline-start: 0;
|
||||
list-style: none;
|
||||
li {
|
||||
white-space: nowrap;
|
||||
a:not([href='#']) {
|
||||
display: none;
|
||||
}
|
||||
&:hover a:not([href='#']) {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
>li:before {
|
||||
content: "⋅";
|
||||
display: inline-block;
|
||||
width: $fa-fw-width;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.list-plural {
|
||||
padding-inline-start: 0;
|
||||
list-style: none;
|
||||
li {
|
||||
white-space: nowrap;
|
||||
a:not([href='#']) {
|
||||
display: none;
|
||||
}
|
||||
&:hover a:not([href='#']) {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
>li:before {
|
||||
content: "⁖";
|
||||
display: inline-block;
|
||||
width: $fa-fw-width;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,6 +68,11 @@
|
|||
return templates[0];
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
template() {
|
||||
this.declensionTemplate = this.template || this.findTemplate();
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
|
|
|
@ -307,45 +307,6 @@
|
|||
<style lang="scss">
|
||||
@import "assets/variables";
|
||||
|
||||
.list-singular {
|
||||
padding-inline-start: 0;
|
||||
list-style: none;
|
||||
li {
|
||||
white-space: nowrap;
|
||||
a:not([href='#']) {
|
||||
display: none;
|
||||
}
|
||||
&:hover a:not([href='#']) {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
>li:before {
|
||||
content: "⋅";
|
||||
display: inline-block;
|
||||
width: $fa-fw-width;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.list-plural {
|
||||
padding-inline-start: 0;
|
||||
list-style: none;
|
||||
li {
|
||||
white-space: nowrap;
|
||||
a:not([href='#']) {
|
||||
display: none;
|
||||
}
|
||||
&:hover a:not([href='#']) {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
>li:before {
|
||||
content: "⁖";
|
||||
display: inline-block;
|
||||
width: $fa-fw-width;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
tr {
|
||||
.hover-show {
|
||||
opacity: 0;
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
masc fem neutr mascPl femPl neutrPl
|
||||
b bka bu bi bki by
|
||||
fob fobka fobu fobowie/fobi fobki foby
|
||||
wiec wczyni wcu wcy wczynie wcy
|
||||
ec czyni cu cy czynie cy
|
||||
niec ńczyni ńcu ńcy ńczynie ńcy
|
||||
ca czyni cu cy czynie cy
|
||||
och ocha ochu ochy ochy ochy
|
||||
ch szka chu chy szki chy
|
||||
cz czka czu cze czki czy
|
||||
cz czka czu cze czki czy
|
||||
d dka du dowie dki dy
|
||||
da dka du dzi dki dy
|
||||
graf grafka grafu grafowie grafki grafy
|
||||
f fka fu fowie fki fy
|
||||
g żka gu dzy/gowie żki gi
|
||||
log lożka logu lodzy/logowie lożki logi
|
||||
j jka ju jowie jki i
|
||||
j jka ju je jki i
|
||||
czyk ka ku czycy ki ki
|
||||
tek tka tku tkowie tki tki
|
||||
ik iczka iku icy iczki iki
|
||||
ik iczka/ica iku icy iczki/ice iki
|
||||
ńczyk nka nku ńczycy nki nki
|
||||
yk yczka yku ycy yczki yki
|
||||
ik ica iku icy ice iki
|
||||
ek ka ku kowie ki ki
|
||||
ak aczka aku acy aczki aki
|
||||
ek kini ku kowie kinie ki
|
||||
uk uczka uku ucy uczki yki
|
||||
ok oczka oku oki oczki oki
|
||||
fil filka filu file filki fili
|
||||
ciel cielka cielu ciele cielki cieli
|
||||
l lka lu le lki li
|
||||
ł łka łu łowie łki ły
|
||||
m mka mu mowie mki my
|
||||
n nka nu ni nki ny
|
||||
n nka nu ni nki ny
|
||||
nin nka nku nie nki nki
|
||||
p pka pu pi pki py
|
||||
ar arka aru arzy arki ary
|
||||
ar arki aru arowie arki ary
|
||||
er erka eru erzy erki ery
|
||||
or orka oru orzy orki ory
|
||||
ur urka uru urzy urki yry
|
||||
er erka/era eru erzy erki/ery ery
|
||||
ir irka iru irowie irki iry
|
||||
ór orka oru ory orki ory
|
||||
tra trka/tra tru trzy trki/try try
|
||||
arz arka aru arze arki ary
|
||||
arz ara aru arze ary ary
|
||||
mistrz mistrzyni mistrzu mistrzowie mistrzynie mistrzy
|
||||
erz erka eru erze erki ery
|
||||
s ska su sy ski sy
|
||||
s ska su si ski sy
|
||||
sz szka szu sze szki szy
|
||||
ś sia siu sie sie si
|
||||
nt ntka ntu nci ntki nty
|
||||
t tka tu ci tki ty
|
||||
sta stka stu ści stki sty
|
||||
ta tka tu ci tki ty
|
||||
w wka wu wi wki wy
|
||||
ły ła łu li łe ły
|
||||
ny na nu ni ne ny
|
||||
wy wa wu wi we wy
|
||||
czy cza czu czy/czowie cze czy
|
||||
cy ca cu cy ce cy
|
||||
z zka zu zowie zki zy
|
|
|
@ -61,12 +61,12 @@
|
|||
<td>
|
||||
<ul class="list-singular">
|
||||
<li v-for="w in noun.neutr">
|
||||
<Declension :word="w" :template="dukajDeclension"/>
|
||||
<Declension :word="w" :template="noun.declension"/>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="list-plural">
|
||||
<li v-for="w in noun.neutrPl">
|
||||
<Declension :word="w" plural :singularOptions="noun.neutr" :template="dukajDeclension"/>
|
||||
<Declension :word="w" plural :singularOptions="noun.neutr" :template="noun.declension"/>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
|
@ -94,6 +94,78 @@
|
|||
</div>
|
||||
</details>
|
||||
|
||||
<details open class="border mb-3">
|
||||
<summary class="bg-light p-3">
|
||||
<h4 class="h5 d-inline">Generator</h4>
|
||||
</summary>
|
||||
<div class="border-top p-3">
|
||||
<p>
|
||||
Końcówki dukatywów są tak regularne, że zamiast pełnego słownika
|
||||
powinien wystarczyć nawet automatyczny generator.
|
||||
</p>
|
||||
<p>
|
||||
Wpisz poniżej dowolny rzeczownik określający osobę,
|
||||
<strong>w rodzaju męskim liczby pojedynczej</strong>:
|
||||
</p>
|
||||
<div class="form-group">
|
||||
<input v-model="generatorWord" class="form-control" placeholder="Wpisz rzeczownik w rodzaju męskim liczby pojedynczej"/>
|
||||
</div>
|
||||
<table v-if="generatorResult" class="table table-fixed-3">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-nowrap">
|
||||
<Icon v="mars"/>
|
||||
<T>nouns.masculine</T>
|
||||
</th>
|
||||
<th class="text-nowrap">
|
||||
<Icon v="venus"/>
|
||||
<T>nouns.feminine</T>
|
||||
</th>
|
||||
<th class="text-nowrap">
|
||||
<Icon v="neuter"/>
|
||||
<T>nouns.dukajNouns.label</T>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<ul class="list-singular">
|
||||
<li v-for="w in generatorResult.masc">{{ w }}</li>
|
||||
</ul>
|
||||
<ul class="list-plural">
|
||||
<li v-for="w in generatorResult.mascPl">{{ w }}</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<ul class="list-singular">
|
||||
<li v-for="w in generatorResult.fem">{{ w }}</li>
|
||||
</ul>
|
||||
<ul class="list-plural">
|
||||
<li v-for="w in generatorResult.femPl">{{ w }}</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<ul class="list-singular">
|
||||
<li v-for="w in generatorResult.neutr">
|
||||
<Declension :word="w" :template="generatorResult.declension"/>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="list-plural">
|
||||
<li v-for="w in generatorResult.neutrPl">
|
||||
<Declension :word="w" :template="generatorResult.declension" plural/>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div v-else class="alert alert-warning">
|
||||
<p class="mb-0">Niestety, podane słowo nie pasuje do żadnego naszego szablonu</p>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<section v-if="sources && Object.keys(sources).length">
|
||||
<Literature :sources="sources"/>
|
||||
</section>
|
||||
|
@ -104,6 +176,16 @@
|
|||
import {Noun, NounDeclension, SourceLibrary} from "../../../src/classes";
|
||||
import {head} from "../../../src/helpers";
|
||||
import NounsNav from "./NounsNav";
|
||||
import templates from './dukatywy.tsv';
|
||||
|
||||
const dukajDeclension = new NounDeclension({
|
||||
M: 'u', D: 'u', C: 'u', B: 'u', N: 'um', Msc: 'um', W: 'u',
|
||||
M_pl: 'y', D_pl: 'ych', C_pl: 'ym', B_pl: 'ych', N_pl: 'ymi', Msc_pl: 'ych', W_pl: 'y',
|
||||
});
|
||||
const dukajAdjectiveDeclension = new NounDeclension({
|
||||
M: 'u', D: 'enu', C: 'ewu', B: 'enu', N: 'um', Msc: 'um', W: 'u',
|
||||
M_pl: 'y', D_pl: 'ych', C_pl: 'ym', B_pl: 'ych', N_pl: 'ymi', Msc_pl: 'ych', W_pl: 'y',
|
||||
});
|
||||
|
||||
export default {
|
||||
components: { NounsNav },
|
||||
|
@ -114,27 +196,35 @@
|
|||
id: 'astronauta',
|
||||
masc: 'astronauta', fem: 'astronautka', neutr: 'astronautu',
|
||||
mascPl: 'astronauci', femPl: 'astronautki', neutrPl: 'astronauty',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun({
|
||||
id: 'Europejczyk',
|
||||
masc: 'Europejczyk', fem: 'Europejka', neutr: 'Europejku',
|
||||
mascPl: 'Europejczycy', femPl: 'Europejki', neutrPl: 'Europejki',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun({
|
||||
id: 'przyjaciel',
|
||||
masc: 'przyjaciel', fem: 'przyjaciółka', neutr: 'przyjaciołu',
|
||||
mascPl: 'przyjaciele', femPl: 'przyjaciółki', neutrPl: 'przyjacioły',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun({
|
||||
id: 'twórca',
|
||||
masc: 'twórca', fem: 'twórczyni', neutr: 'twórcu',
|
||||
mascPl: 'twórcy', femPl: 'twórczynie', neutrPl: 'twórcy',
|
||||
declension: dukajDeclension,
|
||||
}),
|
||||
new Noun({
|
||||
id: 'radny',
|
||||
masc: 'radny', fem: 'radna', neutr: 'radnu',
|
||||
mascPl: 'radni', femPl: 'radne', neutrPl: 'radny',
|
||||
declension: dukajAdjectiveDeclension,
|
||||
}),
|
||||
],
|
||||
dukajDeclension: new NounDeclension({
|
||||
M: 'u', D: 'u', C: 'u', B: 'u', N: 'um', Msc: 'um', W: 'u',
|
||||
M_pl: 'y', D_pl: 'ych', C_pl: 'ym', B_pl: 'ych', N_pl: 'ymi', Msc_pl: 'ych', W_pl: 'y',
|
||||
}),
|
||||
dukajDeclension,
|
||||
dukajAdjectiveDeclension,
|
||||
dukajExtendedDeclension: new NounDeclension({
|
||||
M: 'tenu kosmicznu twórcu',
|
||||
D: 'tenu kosmicznenu twórcu',
|
||||
|
@ -153,6 +243,8 @@
|
|||
W_pl: 'wy kosmiczny twórcy',
|
||||
}),
|
||||
sources: undefined,
|
||||
templates,
|
||||
generatorWord: 'fotograf',
|
||||
}
|
||||
},
|
||||
async mounted() {
|
||||
|
@ -160,6 +252,48 @@
|
|||
'': new SourceLibrary(await this.$axios.$get(`/sources?pronoun=dukatywy`)).getForPronoun('dukatywy'),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
template() {
|
||||
let longestMatch = 0;
|
||||
let matchingTemplates = [];
|
||||
for (let t of templates) {
|
||||
if (!this.generatorWord.endsWith(t.masc)) {
|
||||
continue;
|
||||
}
|
||||
if (t.masc.length > longestMatch) {
|
||||
longestMatch = t.masc.length;
|
||||
matchingTemplates = [t];
|
||||
} else if (t.masc.length === longestMatch) {
|
||||
matchingTemplates.push(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (!matchingTemplates.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return matchingTemplates[0];
|
||||
},
|
||||
generatorResult() {
|
||||
if (!this.template) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const root = this.generatorWord.substring(0, this.generatorWord.length - this.template.masc.length);
|
||||
|
||||
const result = {id: null};
|
||||
for (let k in this.template) {
|
||||
if (!this.template.hasOwnProperty(k)) { continue; }
|
||||
result[k] = this.template[k].split('/').map(ending => root + ending).join(' / ');
|
||||
}
|
||||
|
||||
result.declension = this.generatorWord.endsWith('y') || this.generatorWord.endsWith('i')
|
||||
? dukajAdjectiveDeclension
|
||||
: dukajDeclension;
|
||||
|
||||
return new Noun(result);
|
||||
}
|
||||
},
|
||||
head() {
|
||||
return head({
|
||||
title: this.$t('nouns.dukajNouns.header'),
|
||||
|
|
|
@ -566,7 +566,7 @@ export class PronounLibrary {
|
|||
}
|
||||
|
||||
export class Noun {
|
||||
constructor({id, masc, fem, neutr, mascPl, femPl, neutrPl, sources = null, sourcesData = [], approved = true, base_id = null, author = null}) {
|
||||
constructor({id, masc, fem, neutr, mascPl, femPl, neutrPl, sources = null, sourcesData = [], approved = true, base_id = null, author = null, declension = null}) {
|
||||
this.id = id;
|
||||
this.masc = masc.split('|');
|
||||
this.fem = fem.split('|');
|
||||
|
@ -579,6 +579,7 @@ export class Noun {
|
|||
this.approved = !!approved;
|
||||
this.base = base_id;
|
||||
this.author = author;
|
||||
this.declension = declension;
|
||||
}
|
||||
|
||||
matches(filter) {
|
||||
|
|
Reference in New Issue