#2 rozdzielenie liczby dla form grzecznościowych i dla pozostałych form

This commit is contained in:
Andrea Vos 2020-07-24 23:02:01 +02:00
parent 3a3828a4c2
commit 1601648caf
5 changed files with 67 additions and 44 deletions

View File

@ -2,7 +2,7 @@
<div v-if="sources.length"> <div v-if="sources.length">
<h2 class="h4"> <h2 class="h4">
<Icon v="books"/> <Icon v="books"/>
Przykłady z literatury i prasy: Przykłady z literatury, prasy, filmów i seriali:
</h2> </h2>
<LiteratureMenu/> <LiteratureMenu/>

View File

@ -33,6 +33,12 @@
<span v-else>{{part.str}}</span> <span v-else>{{part.str}}</span>
</span> </span>
</li> </li>
<li v-for="example in examplesHonorific" class="my-1">
<span v-for="part in example.parts[selectedTemplate.pluralHonorific]">
<strong v-if="part.variable">{{selectedTemplate.morphemes[part.str]}}</strong>
<span v-else>{{part.str}}</span>
</span>
</li>
</ul> </ul>
</section> </section>
@ -64,13 +70,14 @@
</template> </template>
<script> <script>
import { examples, templates } from "~/src/data"; import { examples, examplesHonorific, templates } from "~/src/data";
import { buildTemplate, getTemplate } from "../src/buildTemplate"; import { buildTemplate, getTemplate } from "../src/buildTemplate";
export default { export default {
data() { data() {
return { return {
examples: examples, examples: examples,
examplesHonorific: examplesHonorific,
templates: templates, templates: templates,
getTemplate: getTemplate, getTemplate: getTemplate,

View File

@ -66,26 +66,32 @@
<p> <p>
Przykłady użycia w zdaniu: Przykłady użycia w zdaniu:
</p> </p>
<ul> <template v-for="(typeExamples, isHonorific) in {0: examples, 1: examplesHonorific}">
<li v-for="example in examples"> <ul>
<span v-for="part in example.parts[selectedTemplate.plural]"> <li v-for="example in typeExamples">
<input v-if="part.variable" v-model="selectedTemplate.morphemes[part.str]" <span v-for="part in example.parts[bool(isHonorific) ? selectedTemplate.pluralHonorific : selectedTemplate.plural]">
:class="['form-control form-input p-0', {'active': selectedMorpheme === part.str}]" <input v-if="part.variable" v-model="selectedTemplate.morphemes[part.str]"
:size="selectedTemplate.morphemes[part.str] ? selectedTemplate.morphemes[part.str].length : 0" :class="['form-control form-input p-0', {'active': selectedMorpheme === part.str}]"
maxlength="7" :size="selectedTemplate.morphemes[part.str] ? selectedTemplate.morphemes[part.str].length : 0"
@focus="selectedMorpheme = part.str" maxlength="7"
@blur="selectedMorpheme = ''" @focus="selectedMorpheme = part.str"
/> @blur="selectedMorpheme = ''"
<span v-else>{{part.str}}</span> />
</span> <span v-else>{{part.str}}</span>
</li> </span>
</ul> </li>
<div class="my-3"> </ul>
<div class="custom-control custom-switch"> <div class="my-3">
<input type="checkbox" class="custom-control-input" id="plural" v-model="selectedTemplate.plural"> <div class="custom-control custom-switch" v-if="bool(isHonorific)">
<label class="custom-control-label" for="plural">Liczba mnoga</label> <input type="checkbox" class="custom-control-input" id="pluralHonorific" v-model="selectedTemplate.pluralHonorific">
<label class="custom-control-label" for="pluralHonorific">Liczba mnoga <Icon v="level-up"/></label>
</div>
<div class="custom-control custom-switch" v-else>
<input type="checkbox" class="custom-control-input" id="plural" v-model="selectedTemplate.plural">
<label class="custom-control-label" for="plural">Liczba mnoga <Icon v="level-up"/></label>
</div>
</div> </div>
</div> </template>
</div> </div>
<div class="card-footer" v-if="customise && link"> <div class="card-footer" v-if="customise && link">
<div class="input-group my-2"> <div class="input-group my-2">
@ -157,7 +163,7 @@
</template> </template>
<script> <script>
import { examples, templates } from "~/src/data"; import { examples, examplesHonorific, templates } from "~/src/data";
import Compressor from "../src/compressor"; import Compressor from "../src/compressor";
import ClipboardJS from 'clipboard'; import ClipboardJS from 'clipboard';
import { getTemplate } from "../src/buildTemplate"; import { getTemplate } from "../src/buildTemplate";
@ -166,6 +172,7 @@
data() { data() {
return { return {
examples: examples, examples: examples,
examplesHonorific: examplesHonorific,
templates: templates, templates: templates,
getTemplate: getTemplate, getTemplate: getTemplate,
@ -216,6 +223,9 @@
methods: { methods: {
focusLink() { focusLink() {
setTimeout(_ => this.$refs.link.select(), 100); setTimeout(_ => this.$refs.link.select(), 100);
},
bool(v) {
return !!parseInt(v);
} }
} }
} }

View File

@ -142,9 +142,10 @@ const escape = s => {
} }
export class Template { export class Template {
constructor (description, morphemes, plural, sources = [], aliases = [], history = null) { constructor (description, morphemes, plural, pluralHonorific, sources = [], aliases = [], history = null) {
this.description = description; this.description = description;
this.morphemes = morphemes this.morphemes = morphemes
this.pluralHonorific = pluralHonorific;
this.plural = plural; this.plural = plural;
this.sources = sources; this.sources = sources;
this.aliases = aliases; this.aliases = aliases;
@ -160,7 +161,7 @@ export class Template {
} }
clone() { clone() {
return new Template(this.description, clone(this.morphemes), this.plural); return new Template(this.description, clone(this.morphemes), this.plural, this.pluralHonorific);
} }
equals(other) { equals(other) {
@ -171,6 +172,7 @@ export class Template {
return [ return [
...Object.values(this.morphemes).map(s => escape(s)), ...Object.values(this.morphemes).map(s => escape(s)),
this.plural ? 1 : 0, this.plural ? 1 : 0,
this.pluralHonorific ? 1 : 0,
escape(this.description), escape(this.description),
]; ];
} }
@ -180,16 +182,16 @@ export class Template {
} }
static from(data) { static from(data) {
if (data.length === morphemes.length + 1) { if (data.length === morphemes.length + 2) {
data.push(''); data.push('');
} }
if (data.length !== morphemes.length + 2 if (data.length !== morphemes.length + 3
|| data[0].length === 0 || data[0].length === 0
|| data[data.length - 1].length > 48 || data[data.length - 1].length > 48
|| data[data.length - 2].length === 0
|| ![0, 1].includes(parseInt(data[morphemes.length])) || ![0, 1].includes(parseInt(data[morphemes.length]))
|| data.slice(1, data.length - 2).filter(s => s.length > 7).length || ![0, 1].includes(parseInt(data[morphemes.length + 1]))
|| data.slice(1, data.length - 3).filter(s => s.length > 7).length
) { ) {
return null; return null;
} }
@ -199,6 +201,6 @@ export class Template {
m[morphemes[parseInt(i)]] = data[parseInt(i)]; m[morphemes[parseInt(i)]] = data[parseInt(i)];
} }
return new Template(data[data.length - 1], m, parseInt(data[morphemes.length]) === 1) return new Template(data[data.length - 1], m, parseInt(data[morphemes.length]) === 1, parseInt(data[morphemes.length + 1]) === 1)
} }
} }

View File

@ -13,7 +13,11 @@ export const examples = [
Example.parse('Po{verb_go}{verb_middle}m z {pronoun_i} do szkoły.|Po{verb_go}śmy z {pronoun_i} do szkoły.'), Example.parse('Po{verb_go}{verb_middle}m z {pronoun_i} do szkoły.|Po{verb_go}śmy z {pronoun_i} do szkoły.'),
Example.parse('Rozmawialiśmy o {pronoun_l} ostatnio.'), Example.parse('Rozmawialiśmy o {pronoun_l} ostatnio.'),
Example.parse('Każd{adjective_n} z nich chciał{verb_end_about} czego innego.|Wszys{pronoun_all} z nich chci{verb_middle} czego innego.'), Example.parse('Każd{adjective_n} z nich chciał{verb_end_about} czego innego.|Wszys{pronoun_all} z nich chci{verb_middle} czego innego.'),
Example.parse('To miło, że nas {honorific} odwiedził{verb_end_about}.|To miło, że nas {honorific} odwiedzi{verb_end_about}.'), ];
export const examplesHonorific = [
Example.parse('To miło, że nas {honorific} odwiedza.|To miło, że nas {honorific} odwiedzają.'),
Example.parse('Czy będzie {honorific} kontynuować subskrypcję?|Czy będą {honorific} kontynuować subskrypcję?'),
]; ];
const zapachKosmosu = new Book( const zapachKosmosu = new Book(
@ -77,7 +81,7 @@ export const templates = {
'verb_go': 'szedł', 'verb_go': 'szedł',
'verb_o': 'ó', 'verb_o': 'ó',
'honorific': 'pan', 'honorific': 'pan',
}, false, [ }, false, false, [
confirmatio, confirmatio,
perfekcyjna, perfekcyjna,
silaNizsza, silaNizsza,
@ -103,7 +107,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pani', 'honorific': 'pani',
}, false, [ }, false, false, [
smoczaPerla, smoczaPerla,
zapachKosmosu, zapachKosmosu,
new Book('Ann Leckie', 'Zabójcza sprawiedliwość', 'tłum. Danuta Górska', 2015, [], 'postać niebinarna używająca form żeńskich'), new Book('Ann Leckie', 'Zabójcza sprawiedliwość', 'tłum. Danuta Górska', 2015, [], 'postać niebinarna używająca form żeńskich'),
@ -129,7 +133,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pań', 'honorific': 'pań',
}, false, [ }, false, false, [
new Article( new Article(
'Małgorzata Goślińska', 'Małgorzata Goślińska',
'Zrobimy z ciebie mężczyznę', 'Zrobimy z ciebie mężczyznę',
@ -259,7 +263,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pań', 'honorific': 'pań',
}, false, [], []), }, false, false, [], []),
'ono/jejgo': new Template('Rodzaj nijaki', { 'ono/jejgo': new Template('Rodzaj nijaki', {
'pronoun_n': 'ono', 'pronoun_n': 'ono',
'pronoun_g': 'jejgo', 'pronoun_g': 'jejgo',
@ -279,7 +283,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pań', 'honorific': 'pań',
}, false, [], []), }, false, false, [], []),
'ono/jeno': new Template('Neorodzaj gramatyczny, z elementami rodzaju nijakiego i dukaizmów', { 'ono/jeno': new Template('Neorodzaj gramatyczny, z elementami rodzaju nijakiego i dukaizmów', {
'pronoun_n': 'ono', 'pronoun_n': 'ono',
'pronoun_g': 'jeno', 'pronoun_g': 'jeno',
@ -299,7 +303,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pań', 'honorific': 'pań',
}, false, [], []), }, false, false, [], []),
'ono/jenu': new Template('Rodzaj nijaki z dukaizmami zamiast form męskich', { 'ono/jenu': new Template('Rodzaj nijaki z dukaizmami zamiast form męskich', {
'pronoun_n': 'ono', 'pronoun_n': 'ono',
'pronoun_g': 'jenu', 'pronoun_g': 'jenu',
@ -319,7 +323,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pań', 'honorific': 'pań',
}, false, [], []), }, false, false, [], []),
onu: new Template('Rodzaj postpłciowy, dukaizmy', { onu: new Template('Rodzaj postpłciowy, dukaizmy', {
'pronoun_n': 'onu', 'pronoun_n': 'onu',
'pronoun_g': 'jenu', 'pronoun_g': 'jenu',
@ -339,7 +343,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'panu', 'honorific': 'panu',
}, false, [ }, false, false, [
new Article( new Article(
'Rozmowa Ewy Tomaszewicz z Loë Fjorsigviss i Magdaleną Stonawską', 'Rozmowa Ewy Tomaszewicz z Loë Fjorsigviss i Magdaleną Stonawską',
'Tęcza w fandomie', 'Tęcza w fandomie',
@ -386,7 +390,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'panæ', 'honorific': 'panæ',
}, false, [], ['onæ/jæ']), }, false, false, [], ['onæ/jæ']),
oni: new Template('Formy męskoosobowe liczby mnogiej', { oni: new Template('Formy męskoosobowe liczby mnogiej', {
'pronoun_n': 'oni', 'pronoun_n': 'oni',
'pronoun_g': 'ich', 'pronoun_g': 'ich',
@ -406,7 +410,7 @@ export const templates = {
'verb_go': 'szli', 'verb_go': 'szli',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'państwo', 'honorific': 'państwo',
}, true, [ }, true, true, [
new Book('Karolina Fedyk', 'Skrzydła', '', 2019), new Book('Karolina Fedyk', 'Skrzydła', '', 2019),
new Book('Weronika Mamuna', 'Obca, która była', 'w: „Tęczowe i fantastyczne”', 2020), new Book('Weronika Mamuna', 'Obca, która była', 'w: „Tęczowe i fantastyczne”', 2020),
new Book('Agnieszka Żak', 'Dorastanie w czasach cyborgizacji', 'w: „Tęczowe i fantastyczne”', 2020), new Book('Agnieszka Żak', 'Dorastanie w czasach cyborgizacji', 'w: „Tęczowe i fantastyczne”', 2020),
@ -430,7 +434,7 @@ export const templates = {
'verb_go': 'szły', 'verb_go': 'szły',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'państwo', 'honorific': 'państwo',
}, true, [ }, true, true, [
new Book('Artur Nowrot', 'Smocze dziecko', 'w: „Tęczowe i fantastyczne”', 2020), new Book('Artur Nowrot', 'Smocze dziecko', 'w: „Tęczowe i fantastyczne”', 2020),
], ['one/ich']), ], ['one/ich']),
onx: new Template('Formy z iksem', { onx: new Template('Formy z iksem', {
@ -452,7 +456,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'panx', 'honorific': 'panx',
}, false, [], ['onx/jex']), }, false, false, [], ['onx/jex']),
on_: new Template('Formy z podkreślnikiem', { on_: new Template('Formy z podkreślnikiem', {
'pronoun_n': 'on_', 'pronoun_n': 'on_',
'pronoun_g': 'je_', 'pronoun_g': 'je_',
@ -472,7 +476,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pan_', 'honorific': 'pan_',
}, false, [ }, false, false, [
new Book('R.S. Benedict', 'Moje angielskie imię', 'w: „Nowa Fantastyka” 3/2019', 2019), new Book('R.S. Benedict', 'Moje angielskie imię', 'w: „Nowa Fantastyka” 3/2019', 2019),
], ['on_/je_']), ], ['on_/je_']),
onø: new Template('Formy z samogłoską nosową', { onø: new Template('Formy z samogłoską nosową', {
@ -514,7 +518,7 @@ export const templates = {
'verb_go': 'szł', 'verb_go': 'szł',
'verb_o': 'o', 'verb_o': 'o',
'honorific': 'pań', 'honorific': 'pań',
}, false, [ }, false, false, [
new Book( new Book(
'Greg Egan', 'Greg Egan',
'Stan wyczerpania', 'Stan wyczerpania',