#90 pronunciation
This commit is contained in:
parent
8cfe62b02a
commit
af4024aedf
|
@ -7,16 +7,54 @@
|
|||
<small v-if="link">
|
||||
(<nuxt-link :to="'/' + pronoun.canonicalName">{{ pronoun.canonicalName }}</nuxt-link>)
|
||||
</small>
|
||||
<a v-if="config.pronunciation.enabled && pronounce && pronoun.pronounceable && example.pronounce(pronoun)"
|
||||
:href="pronunciationLink"
|
||||
@click.prevent="pronounce">
|
||||
<Icon v="volume"/>
|
||||
</a>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { pronouns } from "~/src/data";
|
||||
|
||||
export default {
|
||||
props: {
|
||||
example: { required: true },
|
||||
pronoun: { required: true },
|
||||
counter: { default: 0 },
|
||||
link: { type: Boolean },
|
||||
pronunciation: { type: Boolean },
|
||||
},
|
||||
methods: {
|
||||
pronounce() {
|
||||
const sound = new Audio(this.pronunciationLink);
|
||||
sound.play();
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
pronounBase() {
|
||||
const name = this.pronoun.name();
|
||||
for (let key in pronouns) {
|
||||
if (!pronouns.hasOwnProperty(key)) { continue; }
|
||||
if (key === name) {
|
||||
return key;
|
||||
}
|
||||
for (let alias of pronouns[key].aliases) {
|
||||
if (alias === name) {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
pronounToString() {
|
||||
return this.pronounBase && pronouns[this.pronounBase].equals(this.pronoun) ? this.pronounBase : this.pronoun.toString();
|
||||
},
|
||||
pronunciationLink() {
|
||||
return `/api/pronounce/${this.pronounToString}?example=${encodeURIComponent(this.example.toString())}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
<template>
|
||||
<span>
|
||||
{{prepend}}{{ pronoun.getMorpheme(morpheme, counter) }}{{append}}
|
||||
<span v-if="config.pronunciation.enabled && pronoun.pronounceable && pronoun.getPronunciation(morpheme, counter)" class="text-muted">
|
||||
/{{prependPr}}{{pronoun.getPronunciation(morpheme, counter)}}{{appendPr}}/
|
||||
</span>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
pronoun: { required: true },
|
||||
morpheme: { required: true },
|
||||
counter: { default: 0 },
|
||||
|
||||
prepend: { default: '' },
|
||||
prependPr: { default: '' },
|
||||
append: { default: '' },
|
||||
appendPr: { default: '' },
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -36,6 +36,12 @@ pronouns:
|
|||
template: 'Open one of the examples and simply replace the emoji in the URL with your own.'
|
||||
others: 'Other pronouns'
|
||||
|
||||
pronunciation:
|
||||
enabled: true
|
||||
language: 'en-GB'
|
||||
voice: 'Emma'
|
||||
engine: 'neural'
|
||||
|
||||
sources:
|
||||
enabled: true
|
||||
route: 'sources'
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<section>
|
||||
<h2 class="h4">
|
||||
<Icon v="spell-check"/>
|
||||
Odmiana:
|
||||
<T>pronouns.grammarTable</T>:
|
||||
</h2>
|
||||
|
||||
<div class="table-responsive">
|
||||
|
@ -18,11 +18,11 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_subject', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_object', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('possessive_determiner', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('possessive_pronoun', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('reflexive', counter) }}</td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_subject" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_object" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="possessive_determiner" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="possessive_pronoun" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="reflexive" :counter="counter"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -31,7 +31,9 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import Morpheme from "../../../components/Morpheme";
|
||||
export default {
|
||||
components: {Morpheme},
|
||||
props: {
|
||||
selectedPronoun: { required: true },
|
||||
counter: { required: true },
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
key description normative pronoun_subject pronoun_object possessive_determiner possessive_pronoun reflexive plural pluralHonorific history sources
|
||||
he,he/him Masculine TRUE he him his his himself FALSE FALSE
|
||||
she,she/her Feminine TRUE she her her hers herself FALSE FALSE
|
||||
they,they/them Singular “they” TRUE they them their theirs themselves TRUE TRUE Singular “they” has been used in English to describe an unspecified person since the late 1300s (it's even older than singular “you”!). Nowadays, it's the most popular choice among people who prefer gender neutral forms. It starts being {https://www.merriam-webster.com/words-at-play/singular-nonbinary-they=accepted by dictionaries} too.
|
||||
it,it/its Personal “it” TRUE it it its its itself FALSE FALSE Although “it” is normally used for objects, not people, some actually do like being called that way. If someone wants you to call it “it”, it's not offensive – it's actually respectful.
|
||||
one,one/one's Specific “one” TRUE one one one's one's oneself FALSE FALSE “One” is used in formal English when talking about a general or a hypothetical person. Recently people started using “one” also as their personal pronoun.
|
||||
e,e/em Neopronoun “e” FALSE e em es ems emself FALSE FALSE First created in 1890 by James Rogers based on {/he=he} and {/them=them} pronoun sets. Since then multiple versions were created, differing in declension and capitalisation.
|
||||
ae,ae/aer Neopronoun “ae” / “æ” FALSE ae aer aer aers aerself FALSE FALSE Created by David Lindsay for a 1920 novel <em>A Voyage to Arcturus</em>, where it's used by an alien, third-sex species.
|
||||
thon,thon/thons Neopronoun “thon” FALSE thon thon thons thon's thonself FALSE FALSE Created by Charles Crozat Converse in 1858, thon/thons/thonself is one of the first known examples of creating a gender neutral pronoun. “Thon” is a contraction of “that one”.
|
||||
co,co/cos Neopronoun “co” FALSE co co cos co's coself FALSE FALSE Created by Mary Orovan in 1970, derived from the Indo-European _*ko_.
|
||||
ve,ve/ver Neopronoun “ve” FALSE ve ver vis vers verself FALSE FALSE Used eg. by Greg Egan in <em>Distress</em> (1995) and <em>Diaspora</em> (1998), and by Keri Hulme in <em>The Bone People</em> (1984).
|
||||
vi,vi/vir Neopronoun “vi” FALSE vi vir vis virs virself FALSE FALSE Used eg. by Greg Egan in <em>Distress</em> (1995) and <em>Diaspora</em> (1998), and by Keri Hulme in <em>The Bone People</em> (1984).
|
||||
xe,xe/xem Neopronoun “xe” FALSE xe xem xyr xyrs xyrself FALSE FALSE Coined by Don Rickter in an issue of <em>Unitarian Universalist</em> in 1973.
|
||||
ey,ey/em Elverson pronouns FALSE ey em eir eirs emselves TRUE TRUE Coined by Christine M. Elverson in 1975 for a contest to create an alternative to the singular {/they=they}. Those forms are created by dropping “th” from “they”.
|
||||
per,per/per Person pronouns FALSE per per per pers perself FALSE FALSE Coined by John Clark in an issue of the <em>Newsletter of the American Anthropological Association</em> in 1972, derived from the word “person”.
|
||||
hu,hu/hum Humanist pronouns FALSE hu hum hus hus huself FALSE FALSE Coined by Sasha Newborn in 1982, based on the word “human”.
|
||||
e/em/eir Spivak pronouns FALSE e em eir eirs emself FALSE FALSE Coined by Michael Spivak in 1990 for his manual <em>The Joy of TeX</em> to avoid gendering people in the examples.
|
||||
ze,ze/zir Neopronoun “ze” FALSE ze zir zir zirs zirself FALSE FALSE Based on the German plural 3rd person pronoun <em>sie</em>.
|
||||
fae,fae/faer Neopronoun “fae” FALSE fae faer faer faers faerself FALSE FALSE Created in 2014 by Tumblr user shadaras.
|
||||
key description normative pronoun_subject pronoun_object possessive_determiner possessive_pronoun reflexive plural pluralHonorific pronounceable history sources
|
||||
he,he/him Masculine TRUE he him his his himself FALSE FALSE TRUE
|
||||
she,she/her Feminine TRUE she her her hers herself FALSE FALSE TRUE
|
||||
they,they/them Singular “they” TRUE they them their theirs themselves TRUE TRUE TRUE Singular “they” has been used in English to describe an unspecified person since the late 1300s (it's even older than singular “you”!). Nowadays, it's the most popular choice among people who prefer gender neutral forms. It starts being {https://www.merriam-webster.com/words-at-play/singular-nonbinary-they=accepted by dictionaries} too.
|
||||
it,it/its Personal “it” TRUE it it its its itself FALSE FALSE TRUE Although “it” is normally used for objects, not people, some actually do like being called that way. If someone wants you to call it “it”, it's not offensive – it's actually respectful.
|
||||
one,one/one's Specific “one” TRUE one one one's one's oneself FALSE FALSE TRUE “One” is used in formal English when talking about a general or a hypothetical person. Recently people started using “one” also as their personal pronoun.
|
||||
e,e/em Neopronoun “e” FALSE e|i em|ɛm es|iz ems|ɛmz emself|ɛmsɛlf FALSE FALSE TRUE First created in 1890 by James Rogers based on {/he=he} and {/them=them} pronoun sets. Since then multiple versions were created, differing in declension and capitalisation.
|
||||
ae,æ,ae/aer,æ/ær Neopronoun “ae” / “æ” FALSE ae|ei aer|ɛɹ aer|ɛɹ aers|ɛɹz aerself|ɛɹsɛlf FALSE FALSE TRUE Created by David Lindsay for a 1920 novel <em>A Voyage to Arcturus</em>, where it's used by an alien, third-sex species.
|
||||
thon,thon/thons Neopronoun “thon” FALSE thon|ðɑn thon|ðɑn thons|ðɑnz thon's|ðɑnz thonself|ðɑnsɛlf FALSE TRUE FALSE Created by Charles Crozat Converse in 1858, thon/thons/thonself is one of the first known examples of creating a gender neutral pronoun. “Thon” is a contraction of “that one”.
|
||||
co,co/cos Neopronoun “co” FALSE co|ko co|ko cos|koz co's|koz coself|kosɛlf FALSE FALSE TRUE Created by Mary Orovan in 1970, derived from the Indo-European _*ko_.
|
||||
ve,ve/ver Neopronoun “ve” FALSE ve|vi ver|vəɹ vis|viz vers|vəɹz verself|vəɹsɛlf FALSE FALSE TRUE Used eg. by Greg Egan in <em>Distress</em> (1995) and <em>Diaspora</em> (1998), and by Keri Hulme in <em>The Bone People</em> (1984).
|
||||
vi,vi/vir Neopronoun “vi” FALSE vi|vi vir|viɹ vis|viz virs|viɹz virself|viɹsɛlf FALSE FALSE TRUE Used eg. by Greg Egan in <em>Distress</em> (1995) and <em>Diaspora</em> (1998), and by Keri Hulme in <em>The Bone People</em> (1984).
|
||||
xe,xe/xem Neopronoun “xe” FALSE xe|zi xem|zɛm xyr|ziɹ xyrs|ziɹz xyrself|zɛmsɛlf FALSE FALSE TRUE Coined by Don Rickter in an issue of <em>Unitarian Universalist</em> in 1973.
|
||||
ey,ey/em Elverson pronouns FALSE ey|eɪ em|ɛm eir|ɛɹ eirs|ɛɹz emselves|ɛmsɛlf TRUE TRUE TRUE Coined by Christine M. Elverson in 1975 for a contest to create an alternative to the singular {/they=they}. Those forms are created by dropping “th” from “they”.
|
||||
per,per/per Person pronouns FALSE per|pəɹ per|pəɹ per|pəɹ pers|pəɹz perself|pəɹsɛlf FALSE FALSE TRUE Coined by John Clark in an issue of the <em>Newsletter of the American Anthropological Association</em> in 1972, derived from the word “person”.
|
||||
hu,hu/hum Humanist pronouns FALSE hu|hju hum|hjum hus|hjuz hus|hjuz huself|hjusɛlf FALSE FALSE TRUE Coined by Sasha Newborn in 1982, based on the word “human”.
|
||||
e/em/eir Spivak pronouns FALSE e|i em|ɛm eir|ɛɹ eirs|ɛɹz emself|ɛmsɛlf FALSE FALSE TRUE Coined by Michael Spivak in 1990 for his manual <em>The Joy of TeX</em> to avoid gendering people in the examples.
|
||||
ze,ze/zir Neopronoun “ze” FALSE ze|zi zir|zəɹ zir|zəɹ zirs|zəɹz zirself|zəɹsɛlf FALSE FALSE TRUE Based on the German plural 3rd person pronoun <em>sie</em>.
|
||||
fae,fæ,fae/faer,fæ/fær Neopronoun “fae” FALSE fae|feɪ faer|fɛɹ faer|fɛɹ faers|fɛɹz faerself|fɛɹsɛlf FALSE FALSE TRUE Created in 2014 by Tumblr user shadaras.
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -38,6 +38,7 @@ home:
|
|||
header2: 'Generate a link'
|
||||
base: 'Based on'
|
||||
alt: 'You can also enter interchangeable forms in each field separately, eg. <code>him&her</code> = „him” or „her”.'
|
||||
pronunciation: 'You can also specify the pronunciation after a pipe character, using IPA, eg. <code>faerself|fɛɹsɛlf</code> = „faerself” pronounced as /fɛɹsɛlf/.'
|
||||
whatisit: 'What''s the deal with pronouns?'
|
||||
|
||||
pronouns:
|
||||
|
@ -58,6 +59,7 @@ pronouns:
|
|||
others: 'Other forms'
|
||||
othersRaw: 'other'
|
||||
or: 'or'
|
||||
grammarTable: 'Table'
|
||||
|
||||
sources:
|
||||
header: 'Sources'
|
||||
|
|
|
@ -16,6 +16,12 @@ pronouns:
|
|||
null: false
|
||||
others: 'Inne formy'
|
||||
|
||||
pronunciation:
|
||||
enabled: true
|
||||
language: 'pl-PL'
|
||||
voice: 'Ewa'
|
||||
engine: 'standard'
|
||||
|
||||
sources:
|
||||
enabled: true
|
||||
route: 'korpus'
|
||||
|
|
|
@ -19,13 +19,12 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_n', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_g', counter) }} / {{
|
||||
selectedPronoun.getMorpheme('pronoun_g_acc', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_d', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_a', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_i', counter) }}</td>
|
||||
<td>{{ selectedPronoun.getMorpheme('pronoun_l', counter) }}</td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_n" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_g" :counter="counter"/> / <Morpheme :pronoun="selectedPronoun" morpheme="pronoun_g_acc" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_d" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_a" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_i" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_l" :counter="counter"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -43,10 +42,22 @@
|
|||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>-{{ selectedPronoun.getMorpheme('verb_middle_inter', counter) }}{{selectedPronoun.isPlural(counter) ? 'śmy' : 'm'}}</td>
|
||||
<td>-{{ selectedPronoun.getMorpheme('verb_middle_inter', counter) }}{{selectedPronoun.isPlural(counter) ? 'ście' : 'ś'}}</td>
|
||||
<td>-{{ selectedPronoun.getMorpheme('verb_end_about', counter) }}</td>
|
||||
<td>-{{ selectedPronoun.getMorpheme('adjective_n', counter) }}</td>
|
||||
<td>
|
||||
<Morpheme :pronoun="selectedPronoun" morpheme="verb_middle_inter" :counter="counter"
|
||||
prepend="–"
|
||||
:append="selectedPronoun.isPlural(counter) ? 'śmy' : 'm'"
|
||||
:appendPr="selectedPronoun.isPlural(counter) ? 'ɕmɨ' : 'm'"
|
||||
/>
|
||||
</td>
|
||||
<td>
|
||||
<Morpheme :pronoun="selectedPronoun" morpheme="verb_middle_inter" :counter="counter"
|
||||
prepend="–"
|
||||
:append="selectedPronoun.isPlural(counter) ? 'ście' : 'ś'"
|
||||
:appendPr="selectedPronoun.isPlural(counter) ? 'ɕʨ̑ɛ' : 'ɕ'"
|
||||
/>
|
||||
</td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="verb_end_about" :counter="counter" prepend="–"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="adjective_n" :counter="counter" prepend="–"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
key description normative pronoun_n pronoun_g pronoun_g_acc pronoun_d pronoun_a pronoun_i pronoun_l pronoun_all adjective_n adjective_ll adjective_middle verb_end_inter verb_end_about verb_middle_inter verb_middle_about verb_nasal verb_go verb_o honorific plural pluralHonorific history sources
|
||||
on,on/jego Rodzaj męski TRUE on jego niego mu go nim nim y e e ą szedł ó pan FALSE FALSE natGeo,genderqueer,confirmatio,perfekcyjna,silaNizsza,lewaReka,zapachKosmosu
|
||||
ona,ona/jej Rodzaj żeński TRUE ona jej niej jej ją nią niej a a a a a ę szł o pani FALSE FALSE margotWywiad,margot,zabSpraw,zabMiecz,smoczaPerla,zapachKosmosu
|
||||
ono/jego,ono Rodzaj nijaki TRUE ono jego niego mu je nim nim e o o o o ę szł o pań FALSE FALSE "Formy „byłom”, „zrobiłoś”, itp. są {https://rjp.pan.pl/index.php?option=com_content&view=article&id=317:byom-byo&catid=44&Itemid=208=wg RJP} poprawne gramatycznie.@Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom,starTrek,kazmierczak2,milo,hen,fakty,milo2,vulva,kacenCallender,confirmatio,niepelnia,dozywocie,lichoNiebozatko,lichoAniol,lichoLato,silaNizsza,siewca,smoczaPerla,maska,ekonomiaNiesam,rzekaBogow,fluff,doBlyskPod,siedemKapit,zaczytana,listopadBez,gszes,ofiara,uratowacKotka,nieUmrzećNijakie,nordea,zabieranieMiejscaNeutr,zabieranieGłosu
|
||||
ono/jej Rodzaj nijaki z formami żeńskimi zamiast męskich FALSE ono jej niej jej je nią niej e o o o o ę szł o pań FALSE FALSE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
ono/jejgo Rodzaj nijaki z formami łączonymi FALSE ono jejgo niejgo jejmu jejgo niąnim niejnim e o o o o ę szł o pań FALSE FALSE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
ono/jeno Rodzaj nijaki z elementami dukaizmów FALSE ono jeno nieno nu no niemu niem e o u o o ę szł o pań FALSE FALSE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
ono/jenu Rodzaj nijaki z dukaizmami zamiast form męskich FALSE ono jenu nienu wu nu num num e o o o o ę szł o pań FALSE FALSE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
onu,onu/jenu Rodzaj postpłciowy, dukaizmy FALSE onu jenu nienu wu nu num num u u u u u ę szł o panu FALSE FALSE "Formy te zostały stworzone przez {https://pl.wikipedia.org/wiki/Jacek_Dukaj=Jacka Dukaja} do książki {https://pl.wikipedia.org/wiki/Perfekcyjna_niedoskonałość=„Perfekcyjna niedoskonałość”}. Używają jej tam istoty post-ludzkie (phoebe), które nie mają określonej płci. Od nazwiska autora te formy gramatyczne są nazywane „dukaizmami”.@Odmiana dukaizmów w liczbie mnogiej dostępna jest {/ony=tutaj}.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}." queerZaimki,bogiperson,oTryptyku,loe,opowiadaniaOrg,samounicestwienie,lightBring,liniaOporu,liniaOporuMix,perfekcyjna,zapachKosmosu,smoczeDzieko,interwencja,nieUmrzećDukaizmy,apocalypseEnby,opydo,trzyWiersze,fantastyczneLesbijki,bugsnax
|
||||
onu/jejo Dukaizmy z łączonymi formami męskimi i żeńskimi FALSE onu jejo jejo jeju jegą nimą nimej u u u u u ę szł o panu FALSE FALSE "Formy te wymyśliłu Len Król.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}."
|
||||
oni,oni/ich Formy męskoosobowe liczby mnogiej TRUE oni ich nich im ich nimi nich cy i l e li li eli eli ęli szli o państwo TRUE TRUE Druga osoba liczby mnogiej może być w normatywnej polszczyźnie używana jako wyraz szacunku (zob. {https://pl.wikipedia.org/wiki/Per_wy=„Per wy”}, {http://www.dialektologia.uw.edu.pl/index.php?l1=leksykon&lid=653=„Pluralis maiestaticus”}) degrassi,madagarskar,boika,komiksKlamstwo,starTrekAntyradio,ciekawszaWersja,skrzydla,obcaByla,nawrockaBiogram,odzyskiwanieA,cyborgizacja
|
||||
one,one/ich Formy niemęskoosobowe liczby mnogiej TRUE one ich nich im je nimi nich tkie e ł o ły ły ały ały ęły szły o państwo TRUE TRUE oneDay,archPowt,protestPoezja
|
||||
oni/e,oni/e/ich Formy liczby mnogiej z ukośnikiem TRUE oni/e ich nich im ich/je nimi nich cy/tkie "" li/łe eni/one li/ły li/ły eli/ały eli/ały ęli/eły szli/szły o państwo TRUE TRUE loveGoes
|
||||
ona/ich Nijakie formy mnogie z zaimkiem „ona” FALSE ona ich nich im je nimi nich tkie e ł o ło ły ało ały ęło szło o państwo TRUE TRUE Zaimek „ona” zapożyczony z języka chorwackiego, gdzie jest nienacechowaną płciowo formą liczby mnogiej. Dość zresztą intuicyjny w polszczyźnie: jak <em>to okno → te okna</em>, tak to <em>ono → te ona</em>).@Odmiana rodzaju nijakiego w liczbie pojedynczej dostępna jest {/ono=tutaj}.
|
||||
ony,ony/ich Formy mnogie dukaizmów z zaimkiem „ony” FALSE ony ich nich im ny nimi nich tki e ł o łu ły ału ały ęłu szłu o państwo TRUE TRUE "Zaimek „ony” to po czesku liczba mnoga dla rodzaju żeńskiego i męskonieżywotnego.@Formy czasowników z „u” zostały stworzone przez {https://pl.wikipedia.org/wiki/Jacek_Dukaj=Jacka Dukaja} do książki {https://pl.wikipedia.org/wiki/Perfekcyjna_niedoskonałość=„Perfekcyjna niedoskonałość”}. Używają jej tam istoty post-ludzkie (phoebe), które nie mają określonej płci. Od nazwiska autora te formy gramatyczne są nazywane „dukaizmami”.@Odmiana dukaizmów w liczbie pojedynczej dostępna jest {/onu=tutaj}.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}." liniaOporuPlural
|
||||
onie,onie/ich Neologiczne formy mnogie z zaimkiem „onie” FALSE onie ich nich im je niemi nich tkie e ł o łe ły ałe ałe ęłe szłe o państwo TRUE TRUE
|
||||
onæ,onæ/jæ Formy z „ae” lub ligaturą „æ” FALSE onæ jæ næ jæ jæ næm næm æ æ æ æ æ ą szł o panæ FALSE FALSE nieOnaNieOn
|
||||
on/a,on/a/jego/jej Formy z ukośnikiem TRUE on/a jego/jej niego/niej mu/jej go/ją nim/ą nim/ej y/a /a /a e/a e/a ą szł o pan/i FALSE FALSE polskieStonewall,swietaWojna,bex,8yoDragQueen,loveGoes2,fantasyAward,plagaMieczy
|
||||
onx,onx/jex Formy z iksem FALSE onx jex nix jex jex nix nix x x x x x ę szł o panx FALSE FALSE reyDomurat
|
||||
on_,on_/je_ Formy z podkreślnikiem FALSE on_ je_ ni_ je_ je_ ni_ ni_ _ _ _ _ _ _ sz_ł _ pan_ FALSE FALSE kazmierczak3,janelleMonae,angielskieImie,monstra,luBart2,teczuj,zabieranieMiejscaPodkr
|
||||
on*,on*/je* Formy z gwiazdką FALSE on* je* ni* je* je* ni* ni* * * * * * * sz*ł * pan* FALSE FALSE mnwInsta
|
||||
onø,onø/jeø Formy z samogłoską nosową FALSE onø jenø nienø nø nø nøm nøm ø ø ø ø ø ę szł o panø FALSE FALSE "Formy te używają samogłoski nosowej {https://pl.wikipedia.org/wiki/ø=„ø”}, która występowała w pisowni polszczyzny od XII do XV wieku, i została zastąpiona przez „ą” i „ę”. Miała zatem zastosowanie dosyć zbliżone do obecnego w powyższych formach."
|
||||
vono,vono/vego Rodzaj nijaki z neozaimkami vono/vego FALSE vono vego viego vu vo vim vim e o o o o ę szł o pań FALSE FALSE Forma została stworzona przez tłumacza Pawła Wieczorka dla oddania stworzonych przez Grega Egana form ve/vir. stanWyczerpania
|
||||
ne,ne/nego Dukaizmy z neozaimkami ne/nego FALSE ne nego nia nemu ne nym nym u u u u u u szł o panu FALSE FALSE "Formy stworzone przez {http://transpomoc.pl/viewtopic.php?p=49434&highlight=#49434=Freję Draco} na bazie dukaizmów.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}." interwencja
|
||||
ony/jegy Neozaimki ony/jegy FALSE ony jegy nien nu gy niemy niem y y y y o ą szł ó pany FALSE FALSE "Formy stworzone przez {https://twitter.com/doblinka/status/1310940748309766145=@doblinka}."
|
||||
ono/eno Neozaimki ono/eno FALSE ono eno eno ne no em em u o u o o ę szł o pan FALSE FALSE "Formy stworzone przez {https://twitter.com/NicoBillie/status/1312894040061497346=@NicoBillie}."
|
||||
key description normative pronoun_n pronoun_g pronoun_g_acc pronoun_d pronoun_a pronoun_i pronoun_l pronoun_all adjective_n adjective_ll adjective_middle verb_end_inter verb_end_about verb_middle_inter verb_middle_about verb_nasal verb_go verb_o honorific plural pluralHonorific pronounceable history sources
|
||||
on,on/jego Rodzaj męski TRUE on jego niego mu go nim nim y e e ą szedł ó pan FALSE FALSE TRUE natGeo,genderqueer,confirmatio,perfekcyjna,silaNizsza,lewaReka,zapachKosmosu
|
||||
ona,ona/jej Rodzaj żeński TRUE ona jej niej jej ją nią niej a a a a a ę szł o pani FALSE FALSE TRUE margotWywiad,margot,zabSpraw,zabMiecz,smoczaPerla,zapachKosmosu
|
||||
ono/jego,ono Rodzaj nijaki TRUE ono jego niego mu je nim nim e o o o o ę szł o pań FALSE FALSE TRUE "Formy „byłom”, „zrobiłoś”, itp. są {https://rjp.pan.pl/index.php?option=com_content&view=article&id=317:byom-byo&catid=44&Itemid=208=wg RJP} poprawne gramatycznie.@Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom,starTrek,kazmierczak2,milo,hen,fakty,milo2,vulva,kacenCallender,confirmatio,niepelnia,dozywocie,lichoNiebozatko,lichoAniol,lichoLato,silaNizsza,siewca,smoczaPerla,maska,ekonomiaNiesam,rzekaBogow,fluff,doBlyskPod,siedemKapit,zaczytana,listopadBez,gszes,ofiara,uratowacKotka,nieUmrzećNijakie,nordea,zabieranieMiejscaNeutr,zabieranieGłosu
|
||||
ono/jej Rodzaj nijaki z formami żeńskimi zamiast męskich FALSE ono jej niej jej je nią niej e o o o o ę szł o pań FALSE FALSE TRUE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
ono/jejgo Rodzaj nijaki z formami łączonymi FALSE ono jejgo niejgo jejmu jejgo niąnim niejnim e o o o o ę szł o pań FALSE FALSE TRUE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
ono/jeno Rodzaj nijaki z elementami dukaizmów FALSE ono jeno nieno nu no niemu niem e o u o o ę szł o pań FALSE FALSE TRUE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
ono/jenu Rodzaj nijaki z dukaizmami zamiast form męskich FALSE ono jenu nienu wu nu num num e o o o o ę szł o pań FALSE FALSE TRUE Normatywna odmiana rodzaju nijakiego w liczbie mnogiej dostępna jest {/one=tutaj}, a neologiczna {/ona/ich=tutaj}.@"Rzeczowniki zgodne rodzajowo z rodzajem nijakim to {/słownik#neutratywy=neutratywy}." rjpBylom
|
||||
onu,onu/jenu Rodzaj postpłciowy, dukaizmy FALSE onu jenu nienu wu nu num num u u u u u ę szł o panu FALSE FALSE TRUE "Formy te zostały stworzone przez {https://pl.wikipedia.org/wiki/Jacek_Dukaj=Jacka Dukaja} do książki {https://pl.wikipedia.org/wiki/Perfekcyjna_niedoskonałość=„Perfekcyjna niedoskonałość”}. Używają jej tam istoty post-ludzkie (phoebe), które nie mają określonej płci. Od nazwiska autora te formy gramatyczne są nazywane „dukaizmami”.@Odmiana dukaizmów w liczbie mnogiej dostępna jest {/ony=tutaj}.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}." queerZaimki,bogiperson,oTryptyku,loe,opowiadaniaOrg,samounicestwienie,lightBring,liniaOporu,liniaOporuMix,perfekcyjna,zapachKosmosu,smoczeDzieko,interwencja,nieUmrzećDukaizmy,apocalypseEnby,opydo,trzyWiersze,fantastyczneLesbijki,bugsnax
|
||||
onu/jejo Dukaizmy z łączonymi formami męskimi i żeńskimi FALSE onu jejo jejo jeju jegą nimą nimej u u u u u ę szł o panu FALSE FALSE TRUE "Formy te wymyśliłu Len Król.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}."
|
||||
oni,oni/ich Formy męskoosobowe liczby mnogiej TRUE oni ich nich im ich nimi nich cy i l e li li eli eli ęli szli o państwo TRUE TRUE TRUE Druga osoba liczby mnogiej może być w normatywnej polszczyźnie używana jako wyraz szacunku (zob. {https://pl.wikipedia.org/wiki/Per_wy=„Per wy”}, {http://www.dialektologia.uw.edu.pl/index.php?l1=leksykon&lid=653=„Pluralis maiestaticus”}) degrassi,madagarskar,boika,komiksKlamstwo,starTrekAntyradio,ciekawszaWersja,skrzydla,obcaByla,nawrockaBiogram,odzyskiwanieA,cyborgizacja
|
||||
one,one/ich Formy niemęskoosobowe liczby mnogiej TRUE one ich nich im je nimi nich tkie e ł o ły ły ały ały ęły szły o państwo TRUE TRUE TRUE oneDay,archPowt,protestPoezja
|
||||
oni/e,oni/e/ich Formy liczby mnogiej z ukośnikiem TRUE oni/e ich nich im ich/je nimi nich cy/tkie "" li/łe eni/one li/ły li/ły eli/ały eli/ały ęli/eły szli/szły o państwo TRUE TRUE FALSE loveGoes
|
||||
ona/ich Nijakie formy mnogie z zaimkiem „ona” FALSE ona ich nich im je nimi nich tkie e ł o ło ły ało ały ęło szło o państwo TRUE TRUE TRUE Zaimek „ona” zapożyczony z języka chorwackiego, gdzie jest nienacechowaną płciowo formą liczby mnogiej. Dość zresztą intuicyjny w polszczyźnie: jak <em>to okno → te okna</em>, tak to <em>ono → te ona</em>).@Odmiana rodzaju nijakiego w liczbie pojedynczej dostępna jest {/ono=tutaj}.
|
||||
ony,ony/ich Formy mnogie dukaizmów z zaimkiem „ony” FALSE ony ich nich im ny nimi nich tki e ł o łu ły ału ały ęłu szłu o państwo TRUE TRUE TRUE "Zaimek „ony” to po czesku liczba mnoga dla rodzaju żeńskiego i męskonieżywotnego.@Formy czasowników z „u” zostały stworzone przez {https://pl.wikipedia.org/wiki/Jacek_Dukaj=Jacka Dukaja} do książki {https://pl.wikipedia.org/wiki/Perfekcyjna_niedoskonałość=„Perfekcyjna niedoskonałość”}. Używają jej tam istoty post-ludzkie (phoebe), które nie mają określonej płci. Od nazwiska autora te formy gramatyczne są nazywane „dukaizmami”.@Odmiana dukaizmów w liczbie pojedynczej dostępna jest {/onu=tutaj}.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}." liniaOporuPlural
|
||||
onie,onie/ich Neologiczne formy mnogie z zaimkiem „onie” FALSE onie ich nich im je niemi nich tkie e ł o łe ły ałe ałe ęłe szłe o państwo TRUE TRUE TRUE
|
||||
onæ,onæ/jæ Formy z „ae” lub ligaturą „æ” FALSE onæ|ˈɔ̃næ̯ jæ|jæ̯ næ|ɲæ̯ jæ|jæ̯ jæ|jæ̯ næm|ɲæm næm|ɲæm æ|æ̯ æ|æ̯ æ|æ̯ æ|æ̯ æ|æ̯ ą szł o panæ|panæ̯ FALSE FALSE TRUE nieOnaNieOn
|
||||
on/a,on/a/jego/jej Formy z ukośnikiem TRUE on/a jego/jej niego/niej mu/jej go/ją nim/ą nim/ej y/a /a /a e/a e/a ą szł o pan/i FALSE FALSE FALSE polskieStonewall,swietaWojna,bex,8yoDragQueen,loveGoes2,fantasyAward,plagaMieczy
|
||||
onx,onx/jex Formy z iksem FALSE onx jex nix jex jex nix nix x x x x x ę szł o panx FALSE FALSE FALSE reyDomurat
|
||||
on_,on_/je_ Formy z podkreślnikiem FALSE on_ je_ ni_ je_ je_ ni_ ni_ _ _ _ _ _ _ sz_ł _ pan_ FALSE FALSE FALSE kazmierczak3,janelleMonae,angielskieImie,monstra,luBart2,teczuj,zabieranieMiejscaPodkr
|
||||
on*,on*/je* Formy z gwiazdką FALSE on* je* ni* je* je* ni* ni* * * * * * * sz*ł * pan* FALSE FALSE FALSE mnwInsta
|
||||
onø,onø/jenø Formy z samogłoską nosową FALSE onø|ˈɔ̃nø jenø|jɛ̃nø nienø|ɲɛnø nø|nø nø|nø nøm|nøm nøm|nøm ø|ø ø|ø ø|ø ø|ø ø|ø ę szł o panø|panø FALSE FALSE TRUE "Formy te używają samogłoski nosowej {https://pl.wikipedia.org/wiki/ø=„ø”}, która występowała w pisowni polszczyzny od XII do XV wieku, i została zastąpiona przez „ą” i „ę”. Miała zatem zastosowanie dosyć zbliżone do obecnego w powyższych formach."
|
||||
vono,vono/vego Rodzaj nijaki z neozaimkami vono/vego FALSE vono vego viego vu vo vim vim e o o o o ę szł o pań FALSE FALSE TRUE Forma została stworzona przez tłumacza Pawła Wieczorka dla oddania stworzonych przez Grega Egana form ve/vir. stanWyczerpania
|
||||
ne,ne/nego Dukaizmy z neozaimkami ne/nego FALSE ne nego nia nemu ne nym nym u u u u u u szł o panu FALSE FALSE TRUE "Formy stworzone przez {http://transpomoc.pl/viewtopic.php?p=49434&highlight=#49434=Freję Draco} na bazie dukaizmów.@Rzeczowniki zgodne z rodzajem postpłciowym to {/słownik#dukatywy=dukatywy}." interwencja
|
||||
ony/jegy Neozaimki ony/jegy FALSE ony jegy nien nu gy niemy niem y y y y o ą szł ó pany FALSE FALSE TRUE "Formy stworzone przez {https://twitter.com/doblinka/status/1310940748309766145=@doblinka}."
|
||||
ono/eno Neozaimki ono/eno FALSE ono eno eno ne no em em u o u o o ę szł o pan FALSE FALSE TRUE "Formy stworzone przez {https://twitter.com/NicoBillie/status/1312894040061497346=@NicoBillie}."
|
||||
|
|
Can't render this file because it contains an unexpected character in line 5 and column 253.
|
|
@ -50,6 +50,7 @@ home:
|
|||
header2: 'Wygeneruj link'
|
||||
base: 'Na podstawie'
|
||||
alt: 'Możesz tu również wpisać formy wymienne w każdym polu z osobna, np. <code>jego&jej</code> = „jego” lub „jej”.'
|
||||
pronunciation: 'Możesz tu również podać wymowę używając pionowej kreski i IPA, np. <code>onø|ˈɔ̃nø</code> = „onø” z wymową /ˈɔ̃nø/.'
|
||||
whatisit: 'O co chodzi w tej stronie?'
|
||||
|
||||
pronouns:
|
||||
|
@ -70,6 +71,7 @@ pronouns:
|
|||
others: 'Inne formy'
|
||||
othersRaw: 'inne'
|
||||
or: 'lub'
|
||||
grammarTable: 'Odmiana'
|
||||
|
||||
sources:
|
||||
header: 'Teksty kultury'
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
"@nuxtjs/axios": "^5.12.0",
|
||||
"@nuxtjs/pwa": "^3.0.0-beta.20",
|
||||
"@nuxtjs/redirect-module": "^0.3.1",
|
||||
"aws-sdk": "^2.799.0",
|
||||
"body-parser": "^1.19.0",
|
||||
"canvas": "^2.6.1",
|
||||
"cookie-parser": "^1.4.5",
|
||||
|
@ -28,6 +29,7 @@
|
|||
"mailer": "^0.6.7",
|
||||
"markdown-loader": "^6.0.0",
|
||||
"nuxt": "^2.14.7",
|
||||
"sha1": "^1.1.1",
|
||||
"sql-template-strings": "^2.2.2",
|
||||
"sqlite": "^4.0.12",
|
||||
"sqlite3": "^5.0.0",
|
||||
|
|
|
@ -148,7 +148,7 @@
|
|||
<input v-if="part.variable" v-model="selectedPronoun.morphemes[part.str]"
|
||||
:class="['form-control form-input p-0', {'active': selectedMorpheme === part.str}]"
|
||||
:size="selectedPronoun.morphemes[part.str] ? selectedPronoun.morphemes[part.str].length : 0"
|
||||
maxlength="12"
|
||||
maxlength="24"
|
||||
@focus="selectedMorpheme = part.str"
|
||||
@blur="selectedMorpheme = ''"
|
||||
/>
|
||||
|
@ -171,6 +171,10 @@
|
|||
<Icon v="info-circle"/>
|
||||
<T>home.generator.alt</T>
|
||||
</p>
|
||||
<p class="small" v-if="config.pronunciation.enabled">
|
||||
<Icon v="info-circle"/>
|
||||
<T>home.generator.pronunciation</T>
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-footer" v-if="link">
|
||||
<LinkInput :link="link"/>
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
|
||||
<ul>
|
||||
<li v-for="example in examples" class="my-1">
|
||||
<Example :example="example" :pronoun="selectedPronoun" :counter="counter"/>
|
||||
<Example :example="example" :pronoun="selectedPronoun" :counter="counter" pronunciation/>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
export default {
|
||||
region: process.env.AWS_REGION,
|
||||
credentials: {
|
||||
accessKeyId: process.env.AWS_KEY,
|
||||
secretAccessKey: process.env.AWS_SECRET,
|
||||
},
|
||||
params: {
|
||||
Bucket: process.env.AWS_S3_BUCKET,
|
||||
},
|
||||
};
|
|
@ -8,6 +8,8 @@ import router from "./routes/user";
|
|||
import { loadSuml } from './loader';
|
||||
import {buildLocaleList} from "../src/helpers";
|
||||
|
||||
global.config = loadSuml('config');
|
||||
|
||||
const app = express()
|
||||
|
||||
app.use(express.json());
|
||||
|
@ -21,7 +23,7 @@ app.use(session({
|
|||
}));
|
||||
|
||||
app.use(async function (req, res, next) {
|
||||
req.config = loadSuml('config');
|
||||
req.config = global.config;
|
||||
req.locales = buildLocaleList();
|
||||
req.rawUser = authenticate(req);
|
||||
req.user = req.rawUser && req.rawUser.authenticated ? req.rawUser : null;
|
||||
|
@ -41,6 +43,7 @@ app.use(require('./routes/admin').default);
|
|||
app.use(require('./routes/pronouns').default);
|
||||
app.use(require('./routes/sources').default);
|
||||
app.use(require('./routes/nouns').default);
|
||||
app.use(require('./routes/pronounce').default);
|
||||
|
||||
export default {
|
||||
path: '/api',
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
import { Router } from 'express';
|
||||
import { loadTsv } from '../loader';
|
||||
import {buildPronoun, parsePronouns} from "../../src/buildPronoun";
|
||||
import {Example} from "../../src/classes";
|
||||
import sha1 from 'sha1';
|
||||
|
||||
import awsConfig from '../aws';
|
||||
import Polly from 'aws-sdk/clients/polly';
|
||||
import S3 from 'aws-sdk/clients/s3';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/pronounce/:pronoun*', async (req, res) => {
|
||||
const pronounString = req.params.pronoun + req.params[0];
|
||||
const pronoun = buildPronoun(
|
||||
parsePronouns(loadTsv('pronouns/pronouns')),
|
||||
pronounString,
|
||||
);
|
||||
|
||||
if (!pronoun || !req.query.example) {
|
||||
return res.status(404).json({error: 'Not found'});
|
||||
}
|
||||
|
||||
let [singular, plural, isHonorific] = req.query.example.split('|');
|
||||
const example = new Example(
|
||||
Example.parse(singular),
|
||||
Example.parse(plural || singular),
|
||||
!!isHonorific,
|
||||
)
|
||||
|
||||
const text = example.pronounce(pronoun);
|
||||
|
||||
if (!text || text.length > 256) {
|
||||
return res.status(404).json({error: 'Not found'});
|
||||
}
|
||||
|
||||
const s3 = new S3(awsConfig);
|
||||
const polly = new Polly(awsConfig);
|
||||
|
||||
const key = `pronunciation/${req.config.locale}/${pronounString}/${sha1(text)}.mp3`;
|
||||
|
||||
try {
|
||||
const s3getResponse = await s3.getObject({Key: key}).promise();
|
||||
return res.set('content-type', s3getResponse.ContentType).send(s3getResponse.Body);
|
||||
} catch {
|
||||
const pollyResponse = await polly.synthesizeSpeech({
|
||||
TextType: 'ssml',
|
||||
Text: text,
|
||||
OutputFormat: 'mp3',
|
||||
LanguageCode: req.config.pronunciation.language,
|
||||
VoiceId: req.config.pronunciation.voice,
|
||||
Engine: req.config.pronunciation.engine,
|
||||
}).promise();
|
||||
|
||||
const s3putResponse = await s3.putObject({
|
||||
Key: key,
|
||||
Body: pollyResponse.AudioStream,
|
||||
ContentType: pollyResponse.ContentType,
|
||||
}).promise();
|
||||
|
||||
return res.set('content-type', pollyResponse.ContentType).send(pollyResponse.AudioStream);
|
||||
}
|
||||
});
|
||||
|
||||
export default router;
|
|
@ -75,6 +75,7 @@ export const parsePronouns = (pronounsRaw) => {
|
|||
t.sources ? t.sources.split(',') : [],
|
||||
aliases.slice(1),
|
||||
t.history,
|
||||
t.pronounceable,
|
||||
)
|
||||
];
|
||||
}
|
||||
|
@ -93,10 +94,11 @@ export const buildPronounFromTemplate = (key, template) => {
|
|||
}
|
||||
}
|
||||
}, template.morphemes),
|
||||
template.plural || false,
|
||||
template.pluralHonorific || false,
|
||||
[template.plural || false],
|
||||
[template.pluralHonorific || false],
|
||||
template.sources || [],
|
||||
template.aliases || [],
|
||||
template.history || null,
|
||||
false,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import {buildDict, buildList, capitalise} from "./helpers";
|
||||
import MORPHEMES from '../data/pronouns/morphemes';
|
||||
|
||||
const config = process.env.CONFIG || global.config;
|
||||
|
||||
export class ExamplePart {
|
||||
constructor(variable, str) {
|
||||
this.variable = variable;
|
||||
|
@ -43,6 +45,44 @@ export class Example {
|
|||
return part.variable ? pronoun.getMorpheme(part.str) : part.str;
|
||||
}).join(''));
|
||||
}
|
||||
|
||||
pronounce(pronoun) {
|
||||
const plural = this.isHonorific ? pronoun.pluralHonorific[0] : pronoun.plural[0];
|
||||
|
||||
let interchangable = false;
|
||||
|
||||
const buildPronunciation = m => {
|
||||
if (pronoun.isInterchangable(m)) {
|
||||
interchangable = true;
|
||||
}
|
||||
const pronunciation = pronoun.getPronunciation(m);
|
||||
const morpheme = pronoun.getMorpheme(m);
|
||||
|
||||
return pronunciation
|
||||
? `<phoneme alphabet="ipa" ph="${pronunciation}">${morpheme}</phoneme>`
|
||||
: morpheme;
|
||||
}
|
||||
|
||||
const ssml = '<speak>' + this[plural ? 'pluralParts' : 'singularParts'].map(part => {
|
||||
return part.variable
|
||||
? buildPronunciation(part.str)
|
||||
: part.str;
|
||||
}).join('') + '</speak>';
|
||||
|
||||
if (interchangable) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return ssml;
|
||||
}
|
||||
|
||||
toString() {
|
||||
return this.singularParts.map(part => part.variable ? '{' + part.str + '}' : part.str).join('')
|
||||
+ '|'
|
||||
+ this.pluralParts.map(part => part.variable ? '{' + part.str + '}' : part.str).join('')
|
||||
+ '|'
|
||||
+ (this.isHonorific ? '1' : '0');
|
||||
}
|
||||
}
|
||||
|
||||
function clone(mainObject) {
|
||||
|
@ -111,16 +151,24 @@ const escape = s => {
|
|||
}
|
||||
|
||||
export class Pronoun {
|
||||
constructor (canonicalName, description, normative, morphemes, plural, pluralHonorific, sources = [], aliases = [], history = null) {
|
||||
constructor (canonicalName, description, normative, morphemes, plural, pluralHonorific, sources = [], aliases = [], history = null, pronounceable = true) {
|
||||
this.canonicalName = canonicalName;
|
||||
this.description = description;
|
||||
this.normative = normative;
|
||||
this.morphemes = morphemes
|
||||
this.morphemes = {}
|
||||
this.pronunciations = {}
|
||||
for (let m in morphemes) {
|
||||
if (!morphemes.hasOwnProperty(m)) { continue; }
|
||||
const [morpheme, pronunciation] = morphemes[m] ? morphemes[m].split('|') : [null, null];
|
||||
this.morphemes[m] = morpheme;
|
||||
this.pronunciations[m] = pronunciation;
|
||||
}
|
||||
this.plural = plural;
|
||||
this.pluralHonorific = pluralHonorific;
|
||||
this.sources = sources;
|
||||
this.aliases = aliases;
|
||||
this.history = history;
|
||||
this.pronounceable = pronounceable;
|
||||
}
|
||||
|
||||
pronoun() {
|
||||
|
@ -145,7 +193,7 @@ export class Pronoun {
|
|||
}
|
||||
|
||||
clone() {
|
||||
return new Pronoun(this.canonicalName, this.description, this.normative, clone(this.morphemes), [...this.plural], [...this.pluralHonorific]);
|
||||
return new Pronoun(this.canonicalName, this.description, this.normative, clone(this.morphemes), [...this.plural], [...this.pluralHonorific], this.pronounceable);
|
||||
}
|
||||
|
||||
equals(other) {
|
||||
|
@ -165,6 +213,7 @@ export class Pronoun {
|
|||
}, this, other),
|
||||
[...this.plural, ...other.plural],
|
||||
[...this.pluralHonorific, ...other.pluralHonorific],
|
||||
false,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -186,6 +235,20 @@ export class Pronoun {
|
|||
return capital ? capitalise(result) : result;
|
||||
}
|
||||
|
||||
getPronunciation(morpheme, counter = 0) {
|
||||
if (!this.pronunciations[morpheme]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const options = this.pronunciations[morpheme].split('&');
|
||||
|
||||
return options[counter % options.length];
|
||||
}
|
||||
|
||||
isInterchangable(morpheme) {
|
||||
return (this.morphemes[morpheme.replace(/^'/, '')] || '').includes('&');
|
||||
}
|
||||
|
||||
isPlural(counter = 0) {
|
||||
return this.plural[counter % this.plural.length]
|
||||
}
|
||||
|
@ -196,9 +259,14 @@ export class Pronoun {
|
|||
|
||||
toArray() {
|
||||
const elements = Object.values(this.morphemes).map(s => escape(s));
|
||||
if (process.env.CONFIG.pronouns.plurals) {
|
||||
Object.values(this.pronunciations).forEach((p, i) => {
|
||||
if (p) {
|
||||
elements[i] += '|' + escape(p);
|
||||
}
|
||||
});
|
||||
if (config.pronouns.plurals) {
|
||||
elements.push(this.plural.map(p => p ? 1 : 0).join(''));
|
||||
if (process.env.CONFIG.pronouns.honorifics) {
|
||||
if (config.pronouns.honorifics) {
|
||||
elements.push(this.pluralHonorific.map(p => p ? 1 : 0).join(''));
|
||||
}
|
||||
}
|
||||
|
@ -213,12 +281,12 @@ export class Pronoun {
|
|||
static from(data) {
|
||||
let extraFields = 1; // description
|
||||
|
||||
if (process.env.CONFIG.pronouns.plurals) {
|
||||
if (config.pronouns.plurals) {
|
||||
extraFields += 1;
|
||||
if (![0, 1].includes(parseInt(data[MORPHEMES.length]))) {
|
||||
return null;
|
||||
}
|
||||
if (process.env.CONFIG.pronouns.honorifics) {
|
||||
if (config.pronouns.honorifics) {
|
||||
extraFields += 1;
|
||||
if (![0, 1].includes(parseInt(data[MORPHEMES.length + 1]))) {
|
||||
return null;
|
||||
|
@ -233,7 +301,7 @@ export class Pronoun {
|
|||
if (data.length !== MORPHEMES.length + extraFields
|
||||
|| data[0].length === 0
|
||||
|| data[data.length - 1].length > 48
|
||||
|| data.slice(1, data.length - extraFields).filter(s => s.length > 12).length
|
||||
|| data.slice(1, data.length - extraFields).filter(s => s.length > 24).length
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
@ -250,6 +318,7 @@ export class Pronoun {
|
|||
m,
|
||||
data[MORPHEMES.length].split('').map(p => parseInt(p) === 1),
|
||||
data[MORPHEMES.length + 1].split('').map(p => parseInt(p) === 1),
|
||||
false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -289,7 +358,7 @@ export class PronounLibrary {
|
|||
}
|
||||
|
||||
yield [
|
||||
new PronounGroup(process.env.CONFIG.pronouns.others, pronounsLeft),
|
||||
new PronounGroup(config.pronouns.others, pronounsLeft),
|
||||
buildList(function* () {
|
||||
for (let t of pronounsLeft) {
|
||||
if (!filter || filter(that.pronouns[t])) {
|
||||
|
|
80
yarn.lock
80
yarn.lock
|
@ -2005,6 +2005,21 @@ avris-daemonise@^0.0.2:
|
|||
fs "^0.0.1-security"
|
||||
yargs "^12.0.1"
|
||||
|
||||
aws-sdk@^2.799.0:
|
||||
version "2.799.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.799.0.tgz#8b1a64c1a9f8ccf5794eb07bdd8051e4cb6adcfd"
|
||||
integrity sha512-NYAoiNU+bJXhlJsC0rFqrmD5t5ho7/VxldmziP6HLPYHfOCI9Uvk6UVjfPmhLWPm0mHnIxhsHqmsNGyjhHNYmw==
|
||||
dependencies:
|
||||
buffer "4.9.2"
|
||||
events "1.1.1"
|
||||
ieee754 "1.1.13"
|
||||
jmespath "0.15.0"
|
||||
querystring "0.2.0"
|
||||
sax "1.2.1"
|
||||
url "0.10.3"
|
||||
uuid "3.3.2"
|
||||
xml2js "0.4.19"
|
||||
|
||||
aws-sign2@~0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
||||
|
@ -2298,7 +2313,7 @@ buffer-xor@^1.0.3:
|
|||
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
|
||||
integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
|
||||
|
||||
buffer@^4.3.0:
|
||||
buffer@4.9.2, buffer@^4.3.0:
|
||||
version "4.9.2"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
|
||||
integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
|
||||
|
@ -2517,6 +2532,11 @@ chardet@^0.7.0:
|
|||
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
||||
|
||||
"charenc@>= 0.0.1":
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
|
||||
integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
|
||||
|
||||
check-types@^8.0.3:
|
||||
version "8.0.3"
|
||||
resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
|
||||
|
@ -3015,6 +3035,11 @@ cross-spawn@^7.0.0:
|
|||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
"crypt@>= 0.0.1":
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
|
||||
integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
|
||||
|
||||
crypto-browserify@^3.11.0:
|
||||
version "3.12.0"
|
||||
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
|
||||
|
@ -3748,6 +3773,11 @@ eventemitter3@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
|
||||
integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
|
||||
|
||||
events@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
|
||||
integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
|
||||
|
||||
events@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
|
||||
|
@ -4695,7 +4725,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
|
|||
dependencies:
|
||||
postcss "^7.0.14"
|
||||
|
||||
ieee754@^1.1.13, ieee754@^1.1.4:
|
||||
ieee754@1.1.13, ieee754@^1.1.13, ieee754@^1.1.4:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
||||
integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
|
||||
|
@ -5155,6 +5185,11 @@ jiti@^0.1.11:
|
|||
resolved "https://registry.yarnpkg.com/jiti/-/jiti-0.1.11.tgz#8b27b92e4c0866b3c8c91945c55a99a1db17a782"
|
||||
integrity sha512-zSPegl+ageMLSYcq1uAZa6V56pX2GbNl/eU3Or7PFHu10a2YhLAXj5fnHJGd6cHZTalSR8zXGH8WmyuyufMhLA==
|
||||
|
||||
jmespath@0.15.0:
|
||||
version "0.15.0"
|
||||
resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217"
|
||||
integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=
|
||||
|
||||
js-base64@^3.5.2:
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.5.2.tgz#3cc800e4f10812b55fb5ec53e7cabaef35dc6d3c"
|
||||
|
@ -7807,7 +7842,12 @@ sass@^1.26.10:
|
|||
dependencies:
|
||||
chokidar ">=2.0.0 <4.0.0"
|
||||
|
||||
sax@^1.2.4, sax@~1.2.4:
|
||||
sax@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
|
||||
integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o=
|
||||
|
||||
sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
|
@ -7957,6 +7997,14 @@ sha.js@^2.4.0, sha.js@^2.4.8:
|
|||
inherits "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
sha1@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848"
|
||||
integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=
|
||||
dependencies:
|
||||
charenc ">= 0.0.1"
|
||||
crypt ">= 0.0.1"
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
|
@ -8813,6 +8861,14 @@ url-loader@^2.3.0:
|
|||
mime "^2.4.4"
|
||||
schema-utils "^2.5.0"
|
||||
|
||||
url@0.10.3:
|
||||
version "0.10.3"
|
||||
resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64"
|
||||
integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=
|
||||
dependencies:
|
||||
punycode "1.3.2"
|
||||
querystring "0.2.0"
|
||||
|
||||
url@^0.11.0:
|
||||
version "0.11.0"
|
||||
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
|
||||
|
@ -8885,6 +8941,11 @@ utils-merge@1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
|
||||
|
||||
uuid@3.3.2:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
|
||||
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
|
||||
|
||||
uuid@^3.3.2, uuid@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
|
@ -9251,6 +9312,19 @@ ws@^6.0.0:
|
|||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
xml2js@0.4.19:
|
||||
version "0.4.19"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
|
||||
integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
|
||||
dependencies:
|
||||
sax ">=0.6.0"
|
||||
xmlbuilder "~9.0.1"
|
||||
|
||||
xmlbuilder@~9.0.1:
|
||||
version "9.0.7"
|
||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
|
||||
integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
|
||||
|
||||
xtend@^4.0.0, xtend@~4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
|
|
Reference in New Issue