mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-23 04:34:15 -04:00
Merge branch 'naski' into 'main'
Naski Closes #301 See merge request PronounsPage/PronounsPage!555
This commit is contained in:
commit
df53bf04f5
@ -27,6 +27,8 @@ AWS_SECRET=
|
||||
AWS_S3_BUCKET=
|
||||
AWS_CLOUDFRONT_ID=
|
||||
|
||||
NARAKEET_API_KEY=
|
||||
|
||||
TURNSTILE_SITEKEY=1x00000000000000000000AA
|
||||
TURNSTILE_SECRET=1x0000000000000000000000000000000AA
|
||||
|
||||
@ -55,3 +57,5 @@ DISCORD_CLIENT_SECRET=
|
||||
DISCORD_REDIRECT_URI=http://localhost:3000/api/discord/oauth2
|
||||
|
||||
SHOPIFY_STOREFRONT_TOKEN=
|
||||
|
||||
NARAKEET_API_KEY=
|
||||
|
@ -13,6 +13,7 @@ const store = useMainStore();
|
||||
const spellings: Record<string, Record<string, string>> = {
|
||||
zh: { traditional: '繁體', simplified: '简体' },
|
||||
tok: { latin: 'sitelen Lasina', sitelen: 'sitelen\xa0pona' },
|
||||
hbs: { latin: 'latinica', cyrillic: 'ћирилица' },
|
||||
};
|
||||
|
||||
const relatedLocales: Record<string, Record<string, string>> = {
|
||||
|
@ -2,6 +2,7 @@ import futurus from 'avris-futurus';
|
||||
import { useCookie } from 'nuxt/app';
|
||||
import zhConverter from 'zh_cn_zh_tw';
|
||||
|
||||
import { hbsLatinToCyrillic } from '../locale/hbs/script.ts';
|
||||
import { longtimeCookieSetting } from '../src/cookieSettings.ts';
|
||||
import { escapeHtml } from '../src/helpers.ts';
|
||||
import { useMainStore } from '../store/index.ts';
|
||||
@ -50,6 +51,10 @@ export default () => {
|
||||
return `<span class="sitelen">${str}</span>`;
|
||||
}
|
||||
|
||||
if (config.locale === 'hbs' && store.spelling === 'cyrillic') {
|
||||
return hbsLatinToCyrillic(str);
|
||||
}
|
||||
|
||||
return str;
|
||||
},
|
||||
convertName(name: string): string {
|
||||
|
@ -372,10 +372,17 @@ interface PronunciationConfig {
|
||||
ipa?: boolean;
|
||||
voices: Record<string, PronunciationVoiceConfig>;
|
||||
}
|
||||
|
||||
export type PronunciationVoiceConfig = AwsPollyPronunciationVoiceConfig | NarakeetPronunciationVoiceConfig;
|
||||
|
||||
/**
|
||||
* @see https://docs.aws.amazon.com/polly/latest/dg/voicelist.html
|
||||
*/
|
||||
interface PronunciationVoiceConfig {
|
||||
export interface AwsPollyPronunciationVoiceConfig {
|
||||
/**
|
||||
* text-to-speech provider (aws_polly is the default, if not specified)
|
||||
*/
|
||||
provider?: 'aws_polly';
|
||||
/**
|
||||
* language code
|
||||
*/
|
||||
@ -385,9 +392,23 @@ interface PronunciationVoiceConfig {
|
||||
*/
|
||||
voice: VoiceId;
|
||||
/**
|
||||
* voice engine
|
||||
* voice engine (default: 'standard')
|
||||
*/
|
||||
engine: Engine;
|
||||
engine?: Engine;
|
||||
}
|
||||
export interface NarakeetPronunciationVoiceConfig {
|
||||
/**
|
||||
* text-to-speech provider
|
||||
*/
|
||||
provider: 'narakeet';
|
||||
/**
|
||||
* language code
|
||||
*/
|
||||
language: string;
|
||||
/**
|
||||
* voice name
|
||||
*/
|
||||
voice: string;
|
||||
}
|
||||
|
||||
interface SourcesConfig {
|
||||
|
0
locale/hbs/blog/.gitkeep
Normal file
0
locale/hbs/blog/.gitkeep
Normal file
2
locale/hbs/calendar/events.ts
Normal file
2
locale/hbs/calendar/events.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export default [
|
||||
];
|
259
locale/hbs/config.suml
Normal file
259
locale/hbs/config.suml
Normal file
@ -0,0 +1,259 @@
|
||||
locale: 'hbs'
|
||||
|
||||
header: true
|
||||
|
||||
pronouns:
|
||||
enabled: true
|
||||
route: 'pronouns'
|
||||
default: 'he'
|
||||
any: 'any'
|
||||
plurals: true
|
||||
honorifics: false
|
||||
generator:
|
||||
enabled: true
|
||||
slashes: true
|
||||
multiple:
|
||||
name: 'Interchangeable forms'
|
||||
description: >
|
||||
Many nonbinary people use more than one form interchangeably
|
||||
and are fine with being called either of them.
|
||||
Some like when others alternate between those forms when talking about them.
|
||||
examples: ['he&she', 'he&they', 'she&they']
|
||||
null:
|
||||
routes: ['avoiding', 'no-pronouns', 'null', 'pronounless', 'nullpronominal', 'nameself']
|
||||
morphemes:
|
||||
pronoun_subject: '#'
|
||||
pronoun_object: '#'
|
||||
possessive_determiner: '#''s'
|
||||
possessive_pronoun: '#''s'
|
||||
reflexive: '#self'
|
||||
examples: [':Andrea', ':S']
|
||||
ideas:
|
||||
-
|
||||
header: 'Use names or initials instead of pronouns'
|
||||
normative: true
|
||||
examples:
|
||||
- ['I talked to him yesterday', 'I talked to {/:Sky=Sky} yesterday']
|
||||
- ['She is really beautiful', '{/:Soph=Soph} is really beautiful']
|
||||
-
|
||||
- 'Her graduation starts soon'
|
||||
- '{/:J=J}''s graduation starts soon'
|
||||
-
|
||||
header: 'Passive voice'
|
||||
normative: true
|
||||
examples:
|
||||
- ['He answered the phone', 'The phone was answered']
|
||||
-
|
||||
- 'Wen takes good care of her cat'
|
||||
- 'Wen''s cat is well cared for'
|
||||
-
|
||||
header: 'Rephrasing the sentence (circumlocution)'
|
||||
normative: true
|
||||
examples:
|
||||
- ['Lior did it all by himself', 'Lior did it all without any help']
|
||||
- ['Gael talks in his sleep', 'Gael talks while sleeping']
|
||||
-
|
||||
header: 'Replacing a pronoun with a descriptive noun or phrase'
|
||||
normative: true
|
||||
examples:
|
||||
- ['She landed the plane safely', 'The pilot landed the plane safely']
|
||||
- ['This is Lea, she is into painting', 'This is Lea. My friend is into painting']
|
||||
- ['She argues that…', 'The person who started this discussion argues that…']
|
||||
-
|
||||
header: 'Dropping pronouns'
|
||||
normative: true
|
||||
examples:
|
||||
- ['Did you buy Tex her gift?', 'Did you buy Tex a gift?']
|
||||
- ['Yes, I bought it for her. I will give it to her tomorrow.', 'Yes, I bought it. I will give it tomorrow.']
|
||||
emoji:
|
||||
description: 'Emojiself pronouns'
|
||||
history: '{https://lgbta.wikia.org/wiki/Emojiself_Pronouns=Emojiself} pronouns are intended for online communication and not supposed to be pronounced.'
|
||||
morphemes:
|
||||
pronoun_subject: '#'
|
||||
pronoun_object: '#'
|
||||
possessive_determiner: '#''s'
|
||||
possessive_pronoun: '#''s'
|
||||
reflexive: '#self'
|
||||
examples: ['💫', '💙']
|
||||
mirror:
|
||||
route: 'mirror'
|
||||
name: 'Mirror pronouns / Mirrorpronominal'
|
||||
description: >
|
||||
A person who uses mirror pronouns wants to be referred to with the same pronouns as the person talking.
|
||||
example:
|
||||
- 'Person A uses mirror pronouns.'
|
||||
- 'Person B uses {/she=she/her}, so when she talks about person A, she uses “she/her” to refer to her.'
|
||||
- 'Person C uses {/ze=ze/hir} interchangeably with {/fae=fæ/fær}, so when ze talks about person A, fea uses either ze/hir or fæ/fær to refer to fær.'
|
||||
others: 'Other pronouns'
|
||||
|
||||
pronunciation:
|
||||
enabled: true
|
||||
voices:
|
||||
BOS:
|
||||
language: 'bos'
|
||||
voice: 'suada'
|
||||
provider: 'narakeet'
|
||||
HRV:
|
||||
language: 'hrv'
|
||||
voice: 'jasna'
|
||||
provider: 'narakeet'
|
||||
SRP:
|
||||
language: 'srp'
|
||||
voice: 'milica-latin'
|
||||
provider: 'narakeet'
|
||||
|
||||
sources:
|
||||
enabled: true
|
||||
route: 'sources'
|
||||
submit: true
|
||||
mergePronouns: {}
|
||||
extraTypes: ['avoiding', 'nounself']
|
||||
|
||||
nouns:
|
||||
enabled: true
|
||||
route: 'dictionary'
|
||||
collapsable: false
|
||||
plurals: true
|
||||
pluralsRequired: false
|
||||
categories: []
|
||||
declension: false
|
||||
submit: true
|
||||
templates:
|
||||
enabled: false
|
||||
|
||||
community:
|
||||
route: 'terminology'
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
published: true
|
||||
categories:
|
||||
-
|
||||
key: 'sexual orientation'
|
||||
text: 'sexual orientation'
|
||||
-
|
||||
key: 'romantic orientation'
|
||||
text: 'romantic orientation'
|
||||
-
|
||||
key: 'tertiary orientation'
|
||||
text: 'tertiary orientation'
|
||||
-
|
||||
key: 'gender'
|
||||
text: 'gender'
|
||||
-
|
||||
key: 'gender expression'
|
||||
text: 'gender expression'
|
||||
-
|
||||
key: 'relationship model'
|
||||
text: 'relationship model'
|
||||
-
|
||||
key: 'language'
|
||||
text: 'language'
|
||||
-
|
||||
key: 'attraction'
|
||||
text: 'attraction'
|
||||
-
|
||||
key: 'politics'
|
||||
text: 'politics'
|
||||
-
|
||||
key: 'prejudice'
|
||||
text: 'prejudice'
|
||||
route: 'terminology'
|
||||
|
||||
names:
|
||||
enabled: false
|
||||
|
||||
people:
|
||||
enabled: false
|
||||
|
||||
# optional, but would be nice to have
|
||||
english:
|
||||
enabled: true
|
||||
route: 'english'
|
||||
pronounGroups:
|
||||
-
|
||||
name: 'Normative forms'
|
||||
description:
|
||||
- >
|
||||
Because of the limitations of <language> grammar, or simply because they just prefer it that way,
|
||||
many nonbinary people decide to simply use “he” ({/on=„on”}) or “she” ({/ona=„ona”})
|
||||
– either the same as their gender assigned at birth or the opposite.
|
||||
That doesn't make them any less nonbinary! Pronouns ≠ gender.
|
||||
table: { on: 'Masculine', ona: 'Feminine' }
|
||||
|
||||
faq:
|
||||
enabled: true
|
||||
route: 'faq'
|
||||
|
||||
links:
|
||||
enabled: true
|
||||
split: false
|
||||
route: 'links'
|
||||
blogRoute: 'blog'
|
||||
links:
|
||||
-
|
||||
icon: 'globe-europe'
|
||||
url: 'https://web.archive.org/web/20220928213020/http://pronoun.is/'
|
||||
headline: 'Pronoun.is'
|
||||
extra: '– inspiration for this website.'
|
||||
academic: {}
|
||||
mediaGuests: []
|
||||
mediaMentions: []
|
||||
recommended: []
|
||||
blog: false
|
||||
zine:
|
||||
enabled: false
|
||||
|
||||
contact:
|
||||
enabled: true
|
||||
route: 'contact'
|
||||
team:
|
||||
enabled: true
|
||||
route: 'team'
|
||||
|
||||
workshops:
|
||||
enabled: false
|
||||
route: 'workshops'
|
||||
email: 'workshops@pronouns.page'
|
||||
|
||||
support:
|
||||
enabled: true
|
||||
|
||||
user:
|
||||
enabled: true
|
||||
route: 'account'
|
||||
termsRoute: 'terms'
|
||||
privacyRoute: 'privacy'
|
||||
|
||||
profile:
|
||||
enabled: true
|
||||
editorEnabled: true
|
||||
defaultWords:
|
||||
-
|
||||
header: 'Honorifics'
|
||||
values: ['[no honorific]', 'mx.', 'mr.', 'ms.', 'sir', 'ma"am', 'madam', 'sai', 'mir', 'shazam', 'zam', 'comrade']
|
||||
-
|
||||
header: 'Person and family descriptions'
|
||||
values: ['person', 'man', 'woman', 'lady', 'dude', 'enby', 'boy', 'girl', 'buddy', 'pal', 'bro', 'sis', 'sib']
|
||||
-
|
||||
header: 'Compliments'
|
||||
values: ['pretty', 'handsome', 'cute', 'hot', 'sexy']
|
||||
-
|
||||
header: 'Relationship descriptions'
|
||||
values: ['friend', 'partner', 'boyfriend', 'girlfriend', 'enbyfriend', 'joyfriend', 'husband', 'wife', 'kissmate', 'darling', 'beloved', 'boo']
|
||||
flags:
|
||||
defaultPronoun: 'they'
|
||||
|
||||
calendar:
|
||||
enabled: true
|
||||
route: 'calendar'
|
||||
|
||||
census:
|
||||
enabled: false
|
||||
|
||||
redirects: []
|
||||
|
||||
api: ~
|
0
locale/hbs/docs/.gitkeep
Normal file
0
locale/hbs/docs/.gitkeep
Normal file
187
locale/hbs/img/logo/logo-full-path.svg
Normal file
187
locale/hbs/img/logo/logo-full-path.svg
Normal file
@ -0,0 +1,187 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 720 320"
|
||||
version="1.1"
|
||||
id="svg40"
|
||||
sodipodi:docname="logo-full-path.svg"
|
||||
width="720"
|
||||
height="320"
|
||||
inkscape:version="1.0.1 (c497b03c, 2020-09-10)">
|
||||
<metadata
|
||||
id="metadata46">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs44" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="926"
|
||||
id="namedview42"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.98476907"
|
||||
inkscape:cx="274.18328"
|
||||
inkscape:cy="195.29274"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg40"
|
||||
inkscape:document-rotation="0" />
|
||||
<path
|
||||
d="m 32.08576,34.885076 c -3.318775,0 -6.034135,2.71536 -6.034135,6.034135 v 44.250318 c 0,3.318773 2.71536,6.034134 6.034135,6.034134 h 4.022755 c 3.318774,0 6.034135,-2.715361 6.034135,-6.034134 V 62.340191 L 64.267809,84.465349 48.629541,100.10362 c -2.36337,2.36337 -2.36337,6.18499 0,8.54835 l 2.865821,2.86582 c 2.363369,2.36337 6.184987,2.36337 8.548357,0 l 15.638269,-15.638262 9.65815,9.658152 c -17.130414,13.21751 -27.812606,31.90486 -27.812606,52.6268 0,16.60127 6.935909,31.80728 18.438286,44.04898 -5.193498,13.74138 -15.998259,25.39065 -16.17254,25.53017 -2.300474,2.44135 -2.92831,5.99875 -1.603799,9.06789 1.324519,3.06914 4.322234,5.05693 7.66838,5.05693 21.436247,0 38.341231,-8.96342 48.484231,-16.14799 7.70101,2.41798 15.84799,4.04327 24.34671,4.68176 v 17.68893 h -26.14792 c -3.31877,0 -6.03413,2.71536 -6.03413,6.03414 v 4.02275 c 0,3.31877 2.71536,6.03413 6.03413,6.03413 h 26.14792 v 22.12517 c 0,3.31877 2.71535,6.03412 6.03412,6.03412 h 4.02276 c 3.31878,0 6.03414,-2.71535 6.03414,-6.03412 v -22.12517 h 26.14791 c 3.31878,0 6.03414,-2.71536 6.03414,-6.03413 v -4.02275 c 0,-3.31878 -2.71536,-6.03414 -6.03414,-6.03414 h -26.14791 v -17.67813 c 45.52537,-3.29724 81.2084,-34.37431 81.2084,-72.24854 0,-20.73264 -10.6932,-39.42874 -27.83912,-52.64743 l 43.17686,-43.176859 v 22.829338 c 0,3.318773 2.71537,6.034134 6.03414,6.034134 h 4.02276 c 3.31878,0 6.03413,-2.715361 6.03413,-6.034134 V 40.919211 c 0,-3.318775 -2.71535,-6.034135 -6.03413,-6.034135 h -44.25032 c -3.31878,0 -6.03414,2.71536 -6.03414,6.034135 v 4.022755 c 0,3.318774 2.71536,6.034135 6.03414,6.034135 h 22.82934 l -45.74706,45.747065 c -13.74594,-7.03126 -30.01462,-11.101862 -47.45695,-11.101862 -17.45555,0 -33.73583,4.076486 -47.48835,11.117576 L 86.99599,84.465349 102.63426,68.827082 c 2.36337,-2.36337 2.36337,-6.184988 0,-8.548357 l -2.865823,-2.866803 c -2.36337,-2.36337 -6.184988,-2.36337 -8.548357,0 L 75.631899,73.10126 53.50674,50.976101 h 22.829339 c 3.318773,0 6.034133,-2.715361 6.034133,-6.034135 v -4.022755 c 0,-3.318775 -2.71536,-6.034135 -6.034133,-6.034135 z m 114.61319,66.914664 c 40.01218,0 72.57265,25.93882 72.57265,57.78783 0,31.84901 -32.56047,57.78783 -72.57265,57.78783 -9.1688,0 -18.24001,-1.41159 -26.95521,-4.20249 l -4.92434,-1.57629 -4.21231,3.02099 c -7.45165,5.35194 -18.95302,11.5904 -33.240769,13.00226 3.887818,-4.95794 9.65449,-13.26536 13.218329,-22.85291 l 2.301102,-6.1402 -4.439177,-4.79372 C 79.0834,183.78584 74.126312,171.93317 74.126312,159.58757 c 0,-31.84902 32.560448,-57.78783 72.572638,-57.78783 z"
|
||||
id="path38"
|
||||
style="stroke-width:0.502844" />
|
||||
<g
|
||||
aria-label="Neutral
|
||||
Language
|
||||
Council"
|
||||
id="text72"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:64px;line-height:1.1;font-family:'Quicksand Light';-inkscape-font-specification:'Quicksand Light, Bold';fill:#000000;fill-opacity:1;stroke:none">
|
||||
<path
|
||||
d="m 332.25382,48.009578 q 1.536,0 2.496,1.024 0.96,1.024 0.96,2.56 v 37.312 q 0,1.664 -1.152,2.816 -1.088,1.088 -2.752,1.088 -0.832,0 -1.728,-0.256 -0.832,-0.32 -1.28,-0.832 l -25.152,-31.936 1.664,-1.024 v 30.464 q 0,1.536 -1.024,2.56 -0.96,1.024 -2.56,1.024 -1.536,0 -2.496,-1.024 -0.96,-1.024 -0.96,-2.56 v -37.312 q 0,-1.664 1.088,-2.752 1.152,-1.152 2.816,-1.152 0.896,0 1.856,0.384 0.96,0.32 1.408,1.024 l 24.384,31.104 -1.088,0.768 v -29.696 q 0,-1.536 0.96,-2.56 0.96,-1.024 2.56,-1.024 z"
|
||||
id="path206" />
|
||||
<path
|
||||
d="m 360.75782,93.449578 q -5.44,0 -9.472,-2.24 -3.968,-2.304 -6.144,-6.208 -2.112,-3.904 -2.112,-8.832 0,-5.76 2.304,-9.792 2.368,-4.096 6.144,-6.272 3.776,-2.176 8,-2.176 3.264,0 6.144,1.344 2.944,1.344 5.184,3.712 2.24,2.304 3.52,5.376 1.344,3.072 1.344,6.528 -0.064,1.536 -1.216,2.496 -1.152,0.96 -2.688,0.96 h -24.448 l -1.92,-6.4 h 23.488 l -1.408,1.28 v -1.728 q -0.128,-1.856 -1.344,-3.328 -1.152,-1.472 -2.944,-2.304 -1.728,-0.896 -3.712,-0.896 -1.92,0 -3.584,0.512 -1.664,0.512 -2.88,1.728 -1.216,1.216 -1.92,3.264 -0.704,2.048 -0.704,5.184 0,3.456 1.408,5.888 1.472,2.368 3.712,3.648 2.304,1.216 4.864,1.216 2.368,0 3.776,-0.384 1.408,-0.384 2.24,-0.896 0.896,-0.576 1.6,-0.96 1.152,-0.576 2.176,-0.576 1.408,0 2.304,0.96 0.96,0.96 0.96,2.24 0,1.728 -1.792,3.136 -1.664,1.408 -4.672,2.496 -3.008,1.024 -6.208,1.024 z"
|
||||
id="path208" />
|
||||
<path
|
||||
d="m 407.78782,58.569578 q 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 16.256 q 0,6.784 -3.776,10.752 -3.776,3.968 -10.88,3.968 -7.104,0 -10.88,-3.968 -3.712,-3.968 -3.712,-10.752 v -16.256 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 16.256 q 0,3.904 1.728,5.824 1.728,1.856 5.184,1.856 3.52,0 5.248,-1.856 1.728,-1.92 1.728,-5.824 v -16.256 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 z"
|
||||
id="path210" />
|
||||
<path
|
||||
d="m 420.38882,59.209578 h 15.168 q 1.536,0 2.56,1.024 1.024,1.024 1.024,2.56 0,1.472 -1.024,2.496 -1.024,0.96 -2.56,0.96 h -15.168 q -1.536,0 -2.56,-1.024 -1.024,-1.024 -1.024,-2.56 0,-1.472 1.024,-2.432 1.024,-1.024 2.56,-1.024 z m 6.848,-8 q 1.664,0 2.688,1.152 1.088,1.088 1.088,2.752 v 28.48 q 0,0.896 0.32,1.472 0.384,0.576 0.96,0.832 0.64,0.256 1.344,0.256 0.768,0 1.408,-0.256 0.64,-0.32 1.472,-0.32 0.896,0 1.6,0.832 0.768,0.832 0.768,2.304 0,1.792 -1.984,2.944 -1.92,1.152 -4.16,1.152 -1.344,0 -3.008,-0.192 -1.6,-0.256 -3.072,-1.088 -1.408,-0.896 -2.368,-2.688 -0.96,-1.792 -0.96,-4.928 v -28.8 q 0,-1.664 1.088,-2.752 1.152,-1.152 2.816,-1.152 z"
|
||||
id="path212" />
|
||||
<path
|
||||
d="m 449.96982,92.809578 q -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -26.432 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 6.016 l -0.448,-4.288 q 0.704,-1.536 1.792,-2.688 1.152,-1.216 2.56,-1.984 1.408,-0.832 3.008,-1.216 1.6,-0.384 3.2,-0.384 1.92,0 3.2,1.088 1.344,1.088 1.344,2.56 0,2.112 -1.088,3.072 -1.088,0.896 -2.368,0.896 -1.216,0 -2.24,-0.448 -0.96,-0.448 -2.24,-0.448 -1.152,0 -2.368,0.576 -1.152,0.512 -2.176,1.664 -0.96,1.152 -1.6,2.88 -0.576,1.664 -0.576,3.968 v 15.168 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 z"
|
||||
id="path214" />
|
||||
<path
|
||||
d="m 501.16182,57.929578 q 1.664,0 2.752,1.088 1.088,1.088 1.088,2.816 v 27.072 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -3.136 l 1.408,0.576 q 0,0.832 -0.896,2.048 -0.896,1.152 -2.432,2.304 -1.536,1.152 -3.648,1.984 -2.048,0.768 -4.48,0.768 -4.416,0 -8,-2.24 -3.584,-2.304 -5.696,-6.272 -2.048,-4.032 -2.048,-9.216 0,-5.248 2.048,-9.216 2.112,-4.032 5.632,-6.272 3.52,-2.304 7.808,-2.304 2.752,0 5.056,0.832 2.304,0.832 3.968,2.112 1.728,1.28 2.624,2.624 0.96,1.28 0.96,2.176 l -2.304,0.832 v -4.672 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 z m -12.928,28.48 q 2.816,0 4.928,-1.408 2.112,-1.408 3.264,-3.84 1.216,-2.432 1.216,-5.44 0,-3.072 -1.216,-5.504 -1.152,-2.432 -3.264,-3.84 -2.112,-1.408 -4.928,-1.408 -2.752,0 -4.864,1.408 -2.112,1.408 -3.328,3.84 -1.152,2.432 -1.152,5.504 0,3.008 1.152,5.44 1.216,2.432 3.328,3.84 2.112,1.408 4.864,1.408 z"
|
||||
id="path216" />
|
||||
<path
|
||||
d="m 521.69982,88.905578 q 0,1.664 -1.152,2.816 -1.088,1.088 -2.752,1.088 -1.6,0 -2.688,-1.088 -1.088,-1.152 -1.088,-2.816 v -39.552 q 0,-1.664 1.088,-2.752 1.152,-1.152 2.816,-1.152 1.664,0 2.688,1.152 1.088,1.088 1.088,2.752 z"
|
||||
id="path218" />
|
||||
<path
|
||||
d="m 322.97382,155.72158 q 1.664,0 2.752,1.088 1.152,1.024 1.152,2.688 0,1.6 -1.152,2.688 -1.088,1.024 -2.752,1.024 h -20.8 q -1.664,0 -2.816,-1.088 -1.088,-1.152 -1.088,-2.816 v -36.992 q 0,-1.664 1.152,-2.752 1.152,-1.152 2.944,-1.152 1.536,0 2.688,1.152 1.216,1.088 1.216,2.752 v 34.496 l -1.408,-1.088 z"
|
||||
id="path220" />
|
||||
<path
|
||||
d="m 361.66182,128.32958 q 1.664,0 2.752,1.088 1.088,1.088 1.088,2.816 v 27.072 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -3.136 l 1.408,0.576 q 0,0.832 -0.896,2.048 -0.896,1.152 -2.432,2.304 -1.536,1.152 -3.648,1.984 -2.048,0.768 -4.48,0.768 -4.416,0 -8,-2.24 -3.584,-2.304 -5.696,-6.272 -2.048,-4.032 -2.048,-9.216 0,-5.248 2.048,-9.216 2.112,-4.032 5.632,-6.272 3.52,-2.304 7.808,-2.304 2.752,0 5.056,0.832 2.304,0.832 3.968,2.112 1.728,1.28 2.624,2.624 0.96,1.28 0.96,2.176 l -2.304,0.832 v -4.672 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 z m -12.928,28.48 q 2.816,0 4.928,-1.408 2.112,-1.408 3.264,-3.84 1.216,-2.432 1.216,-5.44 0,-3.072 -1.216,-5.504 -1.152,-2.432 -3.264,-3.84 -2.112,-1.408 -4.928,-1.408 -2.752,0 -4.864,1.408 -2.112,1.408 -3.328,3.84 -1.152,2.432 -1.152,5.504 0,3.008 1.152,5.44 1.216,2.432 3.328,3.84 2.112,1.408 4.864,1.408 z"
|
||||
id="path222" />
|
||||
<path
|
||||
d="m 392.18382,128.32958 q 4.736,0 7.168,1.984 2.496,1.984 3.392,5.312 0.96,3.264 0.96,7.296 v 16.384 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -16.384 q 0,-2.112 -0.576,-3.776 -0.512,-1.728 -1.92,-2.752 -1.408,-1.024 -4.032,-1.024 -2.56,0 -4.352,1.024 -1.728,1.024 -2.688,2.752 -0.896,1.664 -0.896,3.776 v 16.384 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -26.432 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 2.752 l -0.96,-0.192 q 0.576,-1.088 1.664,-2.304 1.088,-1.28 2.56,-2.368 1.472,-1.088 3.328,-1.728 1.856,-0.704 4.032,-0.704 z"
|
||||
id="path224" />
|
||||
<path
|
||||
d="m 426.21282,128.32958 q 2.688,0 4.928,0.832 2.24,0.832 3.84,2.112 1.664,1.28 2.56,2.624 0.96,1.28 0.96,2.176 l -1.664,0.832 v -4.672 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.088 1.088,1.088 1.088,2.816 v 28.48 q 0,5.568 -2.432,8.896 -2.368,3.392 -6.272,4.864 -3.904,1.536 -8.384,1.536 -1.28,0 -3.328,-0.32 -2.048,-0.32 -3.904,-0.768 -1.856,-0.448 -2.816,-0.832 -1.92,-0.832 -2.688,-2.112 -0.704,-1.216 -0.256,-2.624 0.576,-1.856 1.856,-2.56 1.28,-0.64 2.688,-0.128 0.64,0.192 2.112,0.768 1.472,0.576 3.2,1.024 1.792,0.512 3.136,0.512 4.8,0 7.104,-1.92 2.304,-1.92 2.304,-5.312 v -5.568 l 0.768,0.576 q 0,0.832 -0.896,2.048 -0.832,1.152 -2.368,2.304 -1.472,1.152 -3.52,1.984 -2.048,0.768 -4.352,0.768 -4.544,0 -8.192,-2.24 -3.648,-2.304 -5.76,-6.272 -2.112,-4.032 -2.112,-9.216 0,-5.248 2.112,-9.216 2.112,-4.032 5.696,-6.272 3.584,-2.304 8,-2.304 z m 1.216,7.04 q -2.88,0 -5.056,1.408 -2.176,1.408 -3.392,3.84 -1.216,2.432 -1.216,5.504 0,3.008 1.216,5.44 1.216,2.432 3.392,3.84 2.176,1.408 5.056,1.408 2.944,0 5.12,-1.408 2.176,-1.408 3.392,-3.84 1.216,-2.432 1.216,-5.44 0,-3.072 -1.216,-5.504 -1.216,-2.432 -3.392,-3.84 -2.176,-1.408 -5.12,-1.408 z"
|
||||
id="path226" />
|
||||
<path
|
||||
d="m 477.78782,128.96958 q 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 16.256 q 0,6.784 -3.776,10.752 -3.776,3.968 -10.88,3.968 -7.104,0 -10.88,-3.968 -3.712,-3.968 -3.712,-10.752 v -16.256 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 16.256 q 0,3.904 1.728,5.824 1.728,1.856 5.184,1.856 3.52,0 5.248,-1.856 1.728,-1.92 1.728,-5.824 v -16.256 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 z"
|
||||
id="path228" />
|
||||
<path
|
||||
d="m 518.03682,128.32958 q 1.664,0 2.752,1.088 1.088,1.088 1.088,2.816 v 27.072 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -3.136 l 1.408,0.576 q 0,0.832 -0.896,2.048 -0.896,1.152 -2.432,2.304 -1.536,1.152 -3.648,1.984 -2.048,0.768 -4.48,0.768 -4.416,0 -8,-2.24 -3.584,-2.304 -5.696,-6.272 -2.048,-4.032 -2.048,-9.216 0,-5.248 2.048,-9.216 2.112,-4.032 5.632,-6.272 3.52,-2.304 7.808,-2.304 2.752,0 5.056,0.832 2.304,0.832 3.968,2.112 1.728,1.28 2.624,2.624 0.96,1.28 0.96,2.176 l -2.304,0.832 v -4.672 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 z m -12.928,28.48 q 2.816,0 4.928,-1.408 2.112,-1.408 3.264,-3.84 1.216,-2.432 1.216,-5.44 0,-3.072 -1.216,-5.504 -1.152,-2.432 -3.264,-3.84 -2.112,-1.408 -4.928,-1.408 -2.752,0 -4.864,1.408 -2.112,1.408 -3.328,3.84 -1.152,2.432 -1.152,5.504 0,3.008 1.152,5.44 1.216,2.432 3.328,3.84 2.112,1.408 4.864,1.408 z"
|
||||
id="path230" />
|
||||
<path
|
||||
d="m 544.46282,128.32958 q 2.688,0 4.928,0.832 2.24,0.832 3.84,2.112 1.664,1.28 2.56,2.624 0.96,1.28 0.96,2.176 l -1.664,0.832 v -4.672 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.088 1.088,1.088 1.088,2.816 v 28.48 q 0,5.568 -2.432,8.896 -2.368,3.392 -6.272,4.864 -3.904,1.536 -8.384,1.536 -1.28,0 -3.328,-0.32 -2.048,-0.32 -3.904,-0.768 -1.856,-0.448 -2.816,-0.832 -1.92,-0.832 -2.688,-2.112 -0.704,-1.216 -0.256,-2.624 0.576,-1.856 1.856,-2.56 1.28,-0.64 2.688,-0.128 0.64,0.192 2.112,0.768 1.472,0.576 3.2,1.024 1.792,0.512 3.136,0.512 4.8,0 7.104,-1.92 2.304,-1.92 2.304,-5.312 v -5.568 l 0.768,0.576 q 0,0.832 -0.896,2.048 -0.832,1.152 -2.368,2.304 -1.472,1.152 -3.52,1.984 -2.048,0.768 -4.352,0.768 -4.544,0 -8.192,-2.24 -3.648,-2.304 -5.76,-6.272 -2.112,-4.032 -2.112,-9.216 0,-5.248 2.112,-9.216 2.112,-4.032 5.696,-6.272 3.584,-2.304 8,-2.304 z m 1.216,7.04 q -2.88,0 -5.056,1.408 -2.176,1.408 -3.392,3.84 -1.216,2.432 -1.216,5.504 0,3.008 1.216,5.44 1.216,2.432 3.392,3.84 2.176,1.408 5.056,1.408 2.944,0 5.12,-1.408 2.176,-1.408 3.392,-3.84 1.216,-2.432 1.216,-5.44 0,-3.072 -1.216,-5.504 -1.216,-2.432 -3.392,-3.84 -2.176,-1.408 -5.12,-1.408 z"
|
||||
id="path232" />
|
||||
<path
|
||||
d="m 586.00782,163.84958 q -5.44,0 -9.472,-2.24 -3.968,-2.304 -6.144,-6.208 -2.112,-3.904 -2.112,-8.832 0,-5.76 2.304,-9.792 2.368,-4.096 6.144,-6.272 3.776,-2.176 8,-2.176 3.264,0 6.144,1.344 2.944,1.344 5.184,3.712 2.24,2.304 3.52,5.376 1.344,3.072 1.344,6.528 -0.064,1.536 -1.216,2.496 -1.152,0.96 -2.688,0.96 h -24.448 l -1.92,-6.4 h 23.488 l -1.408,1.28 v -1.728 q -0.128,-1.856 -1.344,-3.328 -1.152,-1.472 -2.944,-2.304 -1.728,-0.896 -3.712,-0.896 -1.92,0 -3.584,0.512 -1.664,0.512 -2.88,1.728 -1.216,1.216 -1.92,3.264 -0.704,2.048 -0.704,5.184 0,3.456 1.408,5.888 1.472,2.368 3.712,3.648 2.304,1.216 4.864,1.216 2.368,0 3.776,-0.384 1.408,-0.384 2.24,-0.896 0.896,-0.576 1.6,-0.96 1.152,-0.576 2.176,-0.576 1.408,0 2.304,0.96 0.96,0.96 0.96,2.24 0,1.728 -1.792,3.136 -1.664,1.408 -4.672,2.496 -3.008,1.024 -6.208,1.024 z"
|
||||
id="path234" />
|
||||
<path
|
||||
d="m 329.62982,190.98558 q 1.664,0.832 1.92,2.624 0.32,1.792 -0.896,3.264 -0.832,1.152 -2.176,1.28 -1.28,0.128 -2.624,-0.512 -1.536,-0.704 -3.264,-1.088 -1.664,-0.384 -3.52,-0.384 -3.456,0 -6.208,1.088 -2.688,1.088 -4.608,3.136 -1.92,1.984 -2.944,4.736 -0.96,2.752 -0.96,6.08 0,3.904 1.088,6.784 1.152,2.88 3.136,4.8 1.984,1.92 4.672,2.88 2.688,0.896 5.824,0.896 1.728,0 3.456,-0.32 1.728,-0.32 3.328,-1.152 1.344,-0.64 2.624,-0.448 1.344,0.192 2.24,1.344 1.28,1.6 0.896,3.328 -0.32,1.664 -1.92,2.432 -1.664,0.832 -3.456,1.408 -1.728,0.512 -3.52,0.768 -1.792,0.32 -3.648,0.32 -4.608,0 -8.768,-1.472 -4.096,-1.472 -7.36,-4.352 -3.2,-2.88 -5.056,-7.168 -1.856,-4.352 -1.856,-10.048 0,-4.928 1.664,-9.088 1.728,-4.16 4.8,-7.168 3.136,-3.072 7.36,-4.736 4.224,-1.728 9.216,-1.728 2.816,0 5.504,0.64 2.688,0.64 5.056,1.856 z"
|
||||
id="path236" />
|
||||
<path
|
||||
d="m 370.97082,216.52158 q 0,5.248 -2.368,9.28 -2.304,3.968 -6.272,6.208 -3.904,2.24 -8.768,2.24 -4.864,0 -8.832,-2.24 -3.904,-2.24 -6.272,-6.208 -2.304,-4.032 -2.304,-9.28 0,-5.248 2.304,-9.216 2.368,-4.032 6.272,-6.272 3.968,-2.304 8.832,-2.304 4.864,0 8.768,2.304 3.968,2.24 6.272,6.272 2.368,3.968 2.368,9.216 z m -7.68,0 q 0,-3.264 -1.344,-5.632 -1.28,-2.432 -3.52,-3.776 -2.176,-1.344 -4.864,-1.344 -2.688,0 -4.928,1.344 -2.176,1.344 -3.52,3.776 -1.28,2.368 -1.28,5.632 0,3.2 1.28,5.632 1.344,2.368 3.52,3.712 2.24,1.344 4.928,1.344 2.688,0 4.864,-1.344 2.24,-1.344 3.52,-3.712 1.344,-2.432 1.344,-5.632 z"
|
||||
id="path238" />
|
||||
<path
|
||||
d="m 403.03782,199.36958 q 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 16.256 q 0,6.784 -3.776,10.752 -3.776,3.968 -10.88,3.968 -7.104,0 -10.88,-3.968 -3.712,-3.968 -3.712,-10.752 v -16.256 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 16.256 q 0,3.904 1.728,5.824 1.728,1.856 5.184,1.856 3.52,0 5.248,-1.856 1.728,-1.92 1.728,-5.824 v -16.256 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 z"
|
||||
id="path240" />
|
||||
<path
|
||||
d="m 433.55882,198.72958 q 4.736,0 7.168,1.984 2.496,1.984 3.392,5.312 0.96,3.264 0.96,7.296 v 16.384 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -16.384 q 0,-2.112 -0.576,-3.776 -0.512,-1.728 -1.92,-2.752 -1.408,-1.024 -4.032,-1.024 -2.56,0 -4.352,1.024 -1.728,1.024 -2.688,2.752 -0.896,1.664 -0.896,3.776 v 16.384 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -26.432 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 v 2.752 l -0.96,-0.192 q 0.576,-1.088 1.664,-2.304 1.088,-1.28 2.56,-2.368 1.472,-1.088 3.328,-1.728 1.856,-0.704 4.032,-0.704 z"
|
||||
id="path242" />
|
||||
<path
|
||||
d="m 468.61182,198.72958 q 3.648,0 6.336,0.768 2.752,0.768 4.224,2.176 1.536,1.344 1.536,3.264 0,1.28 -0.768,2.432 -0.768,1.088 -2.24,1.088 -1.024,0 -1.728,-0.256 -0.64,-0.32 -1.152,-0.768 -0.512,-0.448 -1.216,-0.832 -0.64,-0.384 -1.984,-0.576 -1.28,-0.256 -1.92,-0.256 -3.264,0 -5.568,1.408 -2.24,1.408 -3.456,3.84 -1.216,2.368 -1.216,5.504 0,3.072 1.216,5.504 1.28,2.368 3.456,3.776 2.24,1.408 5.12,1.408 1.6,0 2.752,-0.192 1.152,-0.192 1.92,-0.576 0.896,-0.512 1.6,-1.088 0.704,-0.576 2.112,-0.576 1.664,0 2.56,1.088 0.896,1.024 0.896,2.56 0,1.6 -1.792,2.944 -1.792,1.28 -4.736,2.112 -2.88,0.768 -6.272,0.768 -5.056,0 -8.768,-2.304 -3.712,-2.368 -5.76,-6.4 -1.984,-4.032 -1.984,-9.024 0,-5.248 2.112,-9.216 2.176,-4.032 5.952,-6.272 3.84,-2.304 8.768,-2.304 z"
|
||||
id="path244" />
|
||||
<path
|
||||
d="m 493.86182,229.70558 q 0,1.664 -1.088,2.816 -1.088,1.088 -2.752,1.088 -1.664,0 -2.752,-1.088 -1.088,-1.152 -1.088,-2.816 v -26.432 q 0,-1.664 1.088,-2.752 1.088,-1.152 2.752,-1.152 1.664,0 2.752,1.152 1.088,1.088 1.088,2.752 z m -3.904,-34.496 q -2.176,0 -3.072,-0.704 -0.896,-0.704 -0.896,-2.496 v -1.216 q 0,-1.856 0.96,-2.496 1.024,-0.704 3.072,-0.704 2.24,0 3.136,0.704 0.896,0.704 0.896,2.496 v 1.216 q 0,1.856 -0.96,2.56 -0.96,0.64 -3.136,0.64 z"
|
||||
id="path246" />
|
||||
<path
|
||||
d="m 510.07482,229.70558 q 0,1.664 -1.152,2.816 -1.088,1.088 -2.752,1.088 -1.6,0 -2.688,-1.088 -1.088,-1.152 -1.088,-2.816 v -39.552 q 0,-1.664 1.088,-2.752 1.152,-1.152 2.816,-1.152 1.664,0 2.688,1.152 1.088,1.088 1.088,2.752 z"
|
||||
id="path248" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="305.65543"
|
||||
y="111.70132"
|
||||
id="text78"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan76"
|
||||
x="305.65543"
|
||||
y="111.70132" /></text>
|
||||
<g
|
||||
aria-label="Pronouns.page"
|
||||
id="text84"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Quicksand Light';-inkscape-font-specification:'Quicksand Light, ';fill:#000000;fill-opacity:1;stroke:none">
|
||||
<path
|
||||
d="m 374.9306,253.83569 q 2.24,0 3.96,1.04 1.72,1 2.72,2.8 1,1.8 1,4.12 0,2.32 -1,4.2 -1,1.84 -2.72,2.92 -1.72,1.08 -3.96,1.08 h -8.48 l 0.2,-0.4 v 11.04 q 0,0.48 -0.36,0.84 -0.36,0.36 -0.84,0.36 -0.56,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -25.6 q 0,-0.48 0.36,-0.84 0.36,-0.36 0.84,-0.36 z m 0,13.84 q 1.56,0 2.72,-0.76 1.16,-0.8 1.8,-2.12 0.68,-1.36 0.68,-3 0,-1.64 -0.68,-2.88 -0.64,-1.28 -1.8,-2 -1.16,-0.72 -2.72,-0.72 h -8.48 l 0.2,-0.36 v 12.08 l -0.24,-0.24 z"
|
||||
id="path251" />
|
||||
<path
|
||||
d="m 388.67873,281.83569 q -0.56,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -17.92 q 0,-0.48 0.32,-0.84 0.36,-0.36 0.88,-0.36 0.52,0 0.84,0.36 0.36,0.36 0.36,0.84 v 6 l -0.6,0.12 q 0.12,-1.4 0.68,-2.76 0.6,-1.4 1.6,-2.56 1,-1.16 2.36,-1.88 1.4,-0.72 3.12,-0.72 0.72,0 1.4,0.32 0.68,0.28 0.68,0.96 0,0.6 -0.32,0.92 -0.32,0.32 -0.76,0.32 -0.36,0 -0.8,-0.2 -0.4,-0.2 -1.08,-0.2 -1.12,0 -2.24,0.68 -1.12,0.64 -2.04,1.76 -0.92,1.12 -1.48,2.52 -0.52,1.36 -0.52,2.76 v 9.88 q 0,0.48 -0.36,0.84 -0.36,0.36 -0.84,0.36 z"
|
||||
id="path253" />
|
||||
<path
|
||||
d="m 421.04998,271.59569 q 0,3.04 -1.32,5.48 -1.32,2.4 -3.6,3.8 -2.28,1.36 -5.2,1.36 -2.84,0 -5.16,-1.36 -2.28,-1.4 -3.64,-3.8 -1.32,-2.44 -1.32,-5.48 0,-3.08 1.32,-5.48 1.36,-2.4 3.64,-3.8 2.32,-1.4 5.16,-1.4 2.92,0 5.2,1.4 2.28,1.4 3.6,3.8 1.32,2.4 1.32,5.48 z m -2.4,0 q 0,-2.44 -1,-4.32 -1,-1.92 -2.76,-3 -1.72,-1.12 -3.96,-1.12 -2.16,0 -3.92,1.12 -1.76,1.08 -2.8,3 -1,1.88 -1,4.32 0,2.44 1,4.32 1.04,1.88 2.8,3 1.76,1.08 3.92,1.08 2.24,0 3.96,-1.08 1.76,-1.12 2.76,-3 1,-1.88 1,-4.32 z"
|
||||
id="path255" />
|
||||
<path
|
||||
d="m 435.7906,260.91569 q 2.64,0 4.2,1.08 1.6,1.04 2.28,2.88 0.72,1.8 0.72,4 v 11.76 q 0,0.48 -0.36,0.84 -0.36,0.36 -0.84,0.36 -0.56,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -11.64 q 0,-1.6 -0.52,-2.92 -0.52,-1.32 -1.72,-2.12 -1.16,-0.8 -3.08,-0.8 -1.72,0 -3.28,0.8 -1.52,0.8 -2.48,2.12 -0.96,1.32 -0.96,2.92 v 11.64 q 0,0.48 -0.36,0.84 -0.36,0.36 -0.84,0.36 -0.56,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -17.92 q 0,-0.48 0.32,-0.84 0.36,-0.36 0.88,-0.36 0.52,0 0.84,0.36 0.36,0.36 0.36,0.84 v 3.36 l -0.92,1.44 q 0.08,-1.28 0.8,-2.44 0.76,-1.2 1.92,-2.12 1.16,-0.96 2.56,-1.48 1.44,-0.56 2.88,-0.56 z"
|
||||
id="path257" />
|
||||
<path
|
||||
d="m 468.3156,271.59569 q 0,3.04 -1.32,5.48 -1.32,2.4 -3.6,3.8 -2.28,1.36 -5.2,1.36 -2.84,0 -5.16,-1.36 -2.28,-1.4 -3.64,-3.8 -1.32,-2.44 -1.32,-5.48 0,-3.08 1.32,-5.48 1.36,-2.4 3.64,-3.8 2.32,-1.4 5.16,-1.4 2.92,0 5.2,1.4 2.28,1.4 3.6,3.8 1.32,2.4 1.32,5.48 z m -2.4,0 q 0,-2.44 -1,-4.32 -1,-1.92 -2.76,-3 -1.72,-1.12 -3.96,-1.12 -2.16,0 -3.92,1.12 -1.76,1.08 -2.8,3 -1,1.88 -1,4.32 0,2.44 1,4.32 1.04,1.88 2.8,3 1.76,1.08 3.92,1.08 2.24,0 3.96,-1.08 1.76,-1.12 2.76,-3 1,-1.88 1,-4.32 z"
|
||||
id="path259" />
|
||||
<path
|
||||
d="m 488.69623,261.51569 q 0.52,0 0.84,0.36 0.36,0.36 0.36,0.84 v 11.28 q 0,3.96 -2.24,6.04 -2.24,2.08 -6.04,2.08 -3.76,0 -6,-2.08 -2.2,-2.08 -2.2,-6.04 v -11.28 q 0,-0.48 0.32,-0.84 0.36,-0.36 0.88,-0.36 0.52,0 0.84,0.36 0.36,0.36 0.36,0.84 v 11.28 q 0,2.88 1.52,4.4 1.56,1.48 4.28,1.48 2.76,0 4.32,-1.48 1.56,-1.52 1.56,-4.4 v -11.28 q 0,-0.48 0.32,-0.84 0.32,-0.36 0.88,-0.36 z"
|
||||
id="path261" />
|
||||
<path
|
||||
d="m 505.7906,260.91569 q 2.64,0 4.2,1.08 1.6,1.04 2.28,2.88 0.72,1.8 0.72,4 v 11.76 q 0,0.48 -0.36,0.84 -0.36,0.36 -0.84,0.36 -0.56,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -11.64 q 0,-1.6 -0.52,-2.92 -0.52,-1.32 -1.72,-2.12 -1.16,-0.8 -3.08,-0.8 -1.72,0 -3.28,0.8 -1.52,0.8 -2.48,2.12 -0.96,1.32 -0.96,2.92 v 11.64 q 0,0.48 -0.36,0.84 -0.36,0.36 -0.84,0.36 -0.56,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -17.92 q 0,-0.48 0.32,-0.84 0.36,-0.36 0.88,-0.36 0.52,0 0.84,0.36 0.36,0.36 0.36,0.84 v 3.36 l -0.92,1.44 q 0.08,-1.28 0.8,-2.44 0.76,-1.2 1.92,-2.12 1.16,-0.96 2.56,-1.48 1.44,-0.56 2.88,-0.56 z"
|
||||
id="path263" />
|
||||
<path
|
||||
d="m 518.1156,278.59569 q -0.32,-0.48 -0.32,-0.92 0.04,-0.48 0.52,-0.76 0.32,-0.28 0.72,-0.24 0.44,0.04 0.8,0.4 1.08,1.4 2.6,2.28 1.56,0.84 3.68,0.84 1.12,0 2.2,-0.36 1.12,-0.4 1.84,-1.16 0.72,-0.8 0.72,-2 0,-1.24 -0.72,-2 -0.72,-0.76 -1.88,-1.2 -1.12,-0.44 -2.4,-0.76 -1.36,-0.36 -2.64,-0.8 -1.28,-0.48 -2.28,-1.16 -0.96,-0.72 -1.56,-1.72 -0.6,-1 -0.6,-2.44 0,-1.68 0.92,-2.96 0.92,-1.28 2.48,-2 1.6,-0.72 3.6,-0.72 1,0 2.16,0.28 1.16,0.24 2.28,0.84 1.12,0.6 2,1.64 0.36,0.36 0.36,0.84 0,0.44 -0.4,0.8 -0.32,0.24 -0.76,0.24 -0.4,0 -0.68,-0.32 -0.96,-1.08 -2.28,-1.64 -1.32,-0.56 -2.84,-0.56 -1.16,0 -2.2,0.4 -1,0.36 -1.68,1.12 -0.68,0.76 -0.68,2 0.08,1.16 0.8,1.88 0.76,0.72 1.96,1.2 1.24,0.48 2.76,0.88 1.28,0.32 2.44,0.76 1.2,0.44 2.08,1.12 0.92,0.64 1.44,1.64 0.56,1 0.56,2.52 0,1.76 -1,3.04 -0.96,1.28 -2.6,1.96 -1.64,0.68 -3.64,0.68 -2.16,0 -4.2,-0.84 -2,-0.84 -3.56,-2.8 z"
|
||||
id="path265" />
|
||||
<path
|
||||
d="m 538.3456,281.83569 q -0.68,0 -1.04,-0.44 -0.36,-0.44 -0.36,-1.12 v -0.84 q 0,-0.72 0.36,-1.12 0.36,-0.4 1.04,-0.4 h 0.28 q 0.68,0 1.04,0.4 0.36,0.4 0.36,1.12 v 0.84 q 0,0.68 -0.36,1.12 -0.36,0.44 -1.04,0.44 z"
|
||||
id="path267" />
|
||||
<path
|
||||
d="m 555.01123,261.23569 q 2.72,0 4.8,1.36 2.12,1.32 3.36,3.68 1.24,2.32 1.24,5.36 0,3.04 -1.24,5.4 -1.24,2.36 -3.36,3.72 -2.12,1.36 -4.76,1.36 -1.4,0 -2.68,-0.4 -1.24,-0.44 -2.28,-1.16 -1.04,-0.72 -1.84,-1.68 -0.8,-1 -1.28,-2.16 l 0.72,-0.52 v 12.44 q 0,0.48 -0.36,0.84 -0.32,0.36 -0.84,0.36 -0.52,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -26.08 q 0,-0.52 0.32,-0.88 0.32,-0.36 0.88,-0.36 0.52,0 0.84,0.36 0.36,0.36 0.36,0.88 v 4.32 l -0.56,-0.32 q 0.4,-1.24 1.16,-2.2 0.8,-1 1.84,-1.68 1.04,-0.72 2.28,-1.08 1.24,-0.36 2.6,-0.36 z m -0.2,2.24 q -2.16,0 -3.8,1.08 -1.64,1.04 -2.6,2.88 -0.92,1.8 -0.92,4.2 0,2.36 0.92,4.24 0.96,1.88 2.6,2.96 1.64,1.04 3.8,1.04 2.12,0 3.72,-1.04 1.64,-1.08 2.6,-2.96 0.96,-1.88 0.96,-4.24 0,-2.36 -0.96,-4.2 -0.96,-1.84 -2.6,-2.88 -1.6,-1.08 -3.72,-1.08 z"
|
||||
id="path269" />
|
||||
<path
|
||||
d="m 586.26998,261.39569 q 0.52,0 0.84,0.36 0.36,0.36 0.36,0.88 v 18 q 0,0.48 -0.36,0.84 -0.36,0.36 -0.84,0.36 -0.52,0 -0.88,-0.36 -0.32,-0.36 -0.32,-0.84 v -4.76 l 0.68,-0.32 q 0,1.12 -0.64,2.28 -0.6,1.16 -1.68,2.16 -1.08,1 -2.56,1.64 -1.44,0.6 -3.12,0.6 -2.72,0 -4.88,-1.4 -2.12,-1.4 -3.36,-3.84 -1.2,-2.44 -1.2,-5.48 0,-3.12 1.24,-5.48 1.24,-2.4 3.36,-3.76 2.12,-1.36 4.8,-1.36 1.72,0 3.2,0.6 1.52,0.6 2.64,1.64 1.12,1.04 1.72,2.4 0.64,1.32 0.64,2.76 l -0.84,-0.6 v -5.08 q 0,-0.52 0.32,-0.88 0.36,-0.36 0.88,-0.36 z m -8.32,18.6 q 2.12,0 3.76,-1.08 1.64,-1.12 2.56,-3.04 0.96,-1.96 0.96,-4.36 0,-2.36 -0.96,-4.24 -0.92,-1.88 -2.56,-3 -1.64,-1.12 -3.76,-1.12 -2.08,0 -3.76,1.08 -1.64,1.08 -2.6,2.96 -0.92,1.88 -0.92,4.32 0,2.4 0.92,4.36 0.96,1.92 2.6,3.04 1.64,1.08 3.76,1.08 z"
|
||||
id="path271" />
|
||||
<path
|
||||
d="m 602.24873,260.91569 q 1.8,0 3.32,0.64 1.52,0.6 2.64,1.6 1.16,0.96 1.8,2.08 0.64,1.08 0.64,2.08 l -0.68,-0.96 v -3.72 q 0,-0.52 0.32,-0.88 0.36,-0.36 0.88,-0.36 0.56,0 0.88,0.36 0.32,0.36 0.32,0.88 v 17.32 q 0,3.2 -1.32,5.4 -1.32,2.2 -3.6,3.32 -2.24,1.16 -5.12,1.16 -1.4,0 -2.96,-0.36 -1.52,-0.36 -2.64,-0.92 -1.08,-0.56 -1.2,-1.16 -0.32,-0.36 -0.32,-0.72 0.04,-0.32 0.36,-0.56 0.4,-0.28 0.84,-0.08 0.44,0.24 1.32,0.6 0.4,0.12 1.08,0.36 0.68,0.24 1.6,0.4 0.96,0.2 2,0.2 3.6,0 5.56,-2.08 2,-2.04 2,-5.4 v -3.84 l 0.44,0.12 q -0.36,1.44 -1.2,2.52 -0.8,1.08 -1.92,1.84 -1.12,0.72 -2.44,1.08 -1.28,0.4 -2.56,0.4 -2.76,0 -4.96,-1.4 -2.2,-1.4 -3.52,-3.8 -1.28,-2.4 -1.28,-5.48 0,-3.04 1.28,-5.44 1.32,-2.44 3.48,-3.8 2.2,-1.4 4.96,-1.4 z m 0.28,2.24 q -2.2,0 -3.96,1.12 -1.72,1.08 -2.72,3 -0.96,1.88 -0.96,4.28 0,2.4 0.96,4.32 1,1.92 2.72,3.04 1.76,1.08 3.96,1.08 2.2,0 3.92,-1.08 1.72,-1.08 2.72,-2.96 1,-1.92 1,-4.4 0,-2.48 -1,-4.36 -1,-1.92 -2.72,-2.96 -1.72,-1.08 -3.92,-1.08 z"
|
||||
id="path273" />
|
||||
<path
|
||||
d="m 627.10935,282.23569 q -3.08,0 -5.44,-1.32 -2.36,-1.32 -3.68,-3.68 -1.32,-2.36 -1.32,-5.52 0,-3.4 1.32,-5.8 1.36,-2.4 3.48,-3.68 2.16,-1.32 4.56,-1.32 1.76,0 3.4,0.64 1.68,0.6 2.96,1.84 1.32,1.2 2.08,2.96 0.8,1.76 0.88,4.08 -0.04,0.48 -0.4,0.84 -0.36,0.32 -0.84,0.32 h -16.04 l -0.48,-2.16 h 15.76 l -0.52,0.48 v -0.8 q -0.16,-1.88 -1.2,-3.2 -1.04,-1.32 -2.52,-2 -1.48,-0.68 -3.08,-0.68 -1.2,0 -2.48,0.48 -1.24,0.48 -2.28,1.52 -1,1 -1.64,2.6 -0.64,1.56 -0.64,3.72 0,2.36 0.96,4.28 0.96,1.92 2.76,3.04 1.84,1.12 4.36,1.12 1.4,0 2.52,-0.4 1.12,-0.4 1.96,-1.04 0.84,-0.68 1.4,-1.4 0.44,-0.36 0.88,-0.36 0.4,0 0.68,0.32 0.32,0.32 0.32,0.72 0,0.48 -0.4,0.84 -1.2,1.44 -3.12,2.52 -1.92,1.04 -4.2,1.04 z"
|
||||
id="path275" />
|
||||
</g>
|
||||
<path
|
||||
d="m 330.31106,256.30617 c 0.12028,-0.21383 0.0187,-0.38757 -0.22631,-0.38757 l -4.2945,0.002 c -0.24502,0 -0.54795,0.17285 -0.67179,0.38402 l -10.5224,17.79898 c -1.46833,2.419 -3.51757,2.95358 -5.48662,2.7148 -3.38035,-0.40984 -5.19795,-2.89121 -5.19795,-6.19584 0,-3.31887 2.70055,-6.01941 6.01943,-6.01941 h 6.6823 c 0.24502,0 0.54528,-0.17374 0.66646,-0.38669 l 2.4083,-4.2054 c 0.12206,-0.21294 0.0205,-0.38668 -0.22453,-0.38668 h -9.53343 c -6.06396,0 -10.99818,4.93333 -10.99818,10.99818 0,2.93042 1.14491,6.09071 3.22711,8.15599 2.05192,2.03497 4.79344,2.78072 7.7194,2.84131 1.65186,0.0187 6.18871,-0.0187 8.31546,-3.80268 2.38158,-4.23836 12.11725,-21.51167 12.11725,-21.51167 z m 15.62947,6.24485 c -2.05192,-2.035 -4.79344,-2.78075 -7.7194,-2.84133 -1.65187,-0.0187 -6.18871,0.0187 -8.31546,3.80268 -2.38069,4.23658 -12.11726,21.5099 -12.11726,21.5099 -0.12027,0.21384 -0.0187,0.38757 0.22631,0.38757 l 4.2945,-0.002 c 0.24502,0 0.54796,-0.17285 0.6718,-0.38401 l 10.5224,-17.79899 c 1.46832,-2.41899 3.51757,-2.95358 5.48662,-2.71479 3.38035,0.40984 5.19794,2.89121 5.19794,6.19583 0,3.31887 -2.70055,6.01941 -6.01942,6.01941 h -6.6823 c -0.24502,0 -0.54528,0.17375 -0.66646,0.38669 l -2.4083,4.2054 c -0.12206,0.21294 -0.0204,0.38668 0.22453,0.38668 h 9.53342 c 6.06397,0 10.99819,-4.93333 10.99819,-10.99818 0,-2.92864 -1.14492,-6.08892 -3.22711,-8.1542 z"
|
||||
id="path977"
|
||||
style="stroke-width:0.0890978" />
|
||||
</svg>
|
After Width: | Height: | Size: 30 KiB |
98
locale/hbs/img/logo/logo-full-text.svg
Normal file
98
locale/hbs/img/logo/logo-full-text.svg
Normal file
@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="0 0 720 320"
|
||||
version="1.1"
|
||||
id="svg40"
|
||||
sodipodi:docname="logo-full.svg"
|
||||
width="720"
|
||||
height="320"
|
||||
inkscape:version="1.0.1 (c497b03c, 2020-09-10)">
|
||||
<metadata
|
||||
id="metadata46">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs44" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="942"
|
||||
id="namedview42"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.98476907"
|
||||
inkscape:cx="274.18328"
|
||||
inkscape:cy="195.29274"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg40"
|
||||
inkscape:document-rotation="0" />
|
||||
<path
|
||||
d="m 32.08576,34.885076 c -3.318775,0 -6.034135,2.71536 -6.034135,6.034135 v 44.250318 c 0,3.318773 2.71536,6.034134 6.034135,6.034134 h 4.022755 c 3.318774,0 6.034135,-2.715361 6.034135,-6.034134 V 62.340191 L 64.267809,84.465349 48.629541,100.10362 c -2.36337,2.36337 -2.36337,6.18499 0,8.54835 l 2.865821,2.86582 c 2.363369,2.36337 6.184987,2.36337 8.548357,0 l 15.638269,-15.638262 9.65815,9.658152 c -17.130414,13.21751 -27.812606,31.90486 -27.812606,52.6268 0,16.60127 6.935909,31.80728 18.438286,44.04898 -5.193498,13.74138 -15.998259,25.39065 -16.17254,25.53017 -2.300474,2.44135 -2.92831,5.99875 -1.603799,9.06789 1.324519,3.06914 4.322234,5.05693 7.66838,5.05693 21.436247,0 38.341231,-8.96342 48.484231,-16.14799 7.70101,2.41798 15.84799,4.04327 24.34671,4.68176 v 17.68893 h -26.14792 c -3.31877,0 -6.03413,2.71536 -6.03413,6.03414 v 4.02275 c 0,3.31877 2.71536,6.03413 6.03413,6.03413 h 26.14792 v 22.12517 c 0,3.31877 2.71535,6.03412 6.03412,6.03412 h 4.02276 c 3.31878,0 6.03414,-2.71535 6.03414,-6.03412 v -22.12517 h 26.14791 c 3.31878,0 6.03414,-2.71536 6.03414,-6.03413 v -4.02275 c 0,-3.31878 -2.71536,-6.03414 -6.03414,-6.03414 h -26.14791 v -17.67813 c 45.52537,-3.29724 81.2084,-34.37431 81.2084,-72.24854 0,-20.73264 -10.6932,-39.42874 -27.83912,-52.64743 l 43.17686,-43.176859 v 22.829338 c 0,3.318773 2.71537,6.034134 6.03414,6.034134 h 4.02276 c 3.31878,0 6.03413,-2.715361 6.03413,-6.034134 V 40.919211 c 0,-3.318775 -2.71535,-6.034135 -6.03413,-6.034135 h -44.25032 c -3.31878,0 -6.03414,2.71536 -6.03414,6.034135 v 4.022755 c 0,3.318774 2.71536,6.034135 6.03414,6.034135 h 22.82934 l -45.74706,45.747065 c -13.74594,-7.03126 -30.01462,-11.101862 -47.45695,-11.101862 -17.45555,0 -33.73583,4.076486 -47.48835,11.117576 L 86.99599,84.465349 102.63426,68.827082 c 2.36337,-2.36337 2.36337,-6.184988 0,-8.548357 l -2.865823,-2.866803 c -2.36337,-2.36337 -6.184988,-2.36337 -8.548357,0 L 75.631899,73.10126 53.50674,50.976101 h 22.829339 c 3.318773,0 6.034133,-2.715361 6.034133,-6.034135 v -4.022755 c 0,-3.318775 -2.71536,-6.034135 -6.034133,-6.034135 z m 114.61319,66.914664 c 40.01218,0 72.57265,25.93882 72.57265,57.78783 0,31.84901 -32.56047,57.78783 -72.57265,57.78783 -9.1688,0 -18.24001,-1.41159 -26.95521,-4.20249 l -4.92434,-1.57629 -4.21231,3.02099 c -7.45165,5.35194 -18.95302,11.5904 -33.240769,13.00226 3.887818,-4.95794 9.65449,-13.26536 13.218329,-22.85291 l 2.301102,-6.1402 -4.439177,-4.79372 C 79.0834,183.78584 74.126312,171.93317 74.126312,159.58757 c 0,-31.84902 32.560448,-57.78783 72.572638,-57.78783 z"
|
||||
id="path38"
|
||||
style="stroke-width:0.502844" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:64px;line-height:1.1;font-family:'Quicksand Light';-inkscape-font-specification:'Quicksand Light, Bold';fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="293.46982"
|
||||
y="92.809578"
|
||||
id="text72"><tspan
|
||||
sodipodi:role="line"
|
||||
x="293.46982"
|
||||
y="92.809578"
|
||||
id="tspan80">Neutral</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="293.46982"
|
||||
y="163.20958"
|
||||
id="tspan108">Language</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="293.46982"
|
||||
y="233.60959"
|
||||
id="tspan110">Council</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="305.65543"
|
||||
y="111.70132"
|
||||
id="text78"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan76"
|
||||
x="305.65543"
|
||||
y="111.70132" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Quicksand Light';-inkscape-font-specification:'Quicksand Light, ';fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="360.4906"
|
||||
y="281.83569"
|
||||
id="text84"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan82"
|
||||
x="360.4906"
|
||||
y="281.83569">Pronouns.page</tspan></text>
|
||||
<path
|
||||
d="m 330.31106,256.30617 c 0.12028,-0.21383 0.0187,-0.38757 -0.22631,-0.38757 l -4.2945,0.002 c -0.24502,0 -0.54795,0.17285 -0.67179,0.38402 l -10.5224,17.79898 c -1.46833,2.419 -3.51757,2.95358 -5.48662,2.7148 -3.38035,-0.40984 -5.19795,-2.89121 -5.19795,-6.19584 0,-3.31887 2.70055,-6.01941 6.01943,-6.01941 h 6.6823 c 0.24502,0 0.54528,-0.17374 0.66646,-0.38669 l 2.4083,-4.2054 c 0.12206,-0.21294 0.0205,-0.38668 -0.22453,-0.38668 h -9.53343 c -6.06396,0 -10.99818,4.93333 -10.99818,10.99818 0,2.93042 1.14491,6.09071 3.22711,8.15599 2.05192,2.03497 4.79344,2.78072 7.7194,2.84131 1.65186,0.0187 6.18871,-0.0187 8.31546,-3.80268 2.38158,-4.23836 12.11725,-21.51167 12.11725,-21.51167 z m 15.62947,6.24485 c -2.05192,-2.035 -4.79344,-2.78075 -7.7194,-2.84133 -1.65187,-0.0187 -6.18871,0.0187 -8.31546,3.80268 -2.38069,4.23658 -12.11726,21.5099 -12.11726,21.5099 -0.12027,0.21384 -0.0187,0.38757 0.22631,0.38757 l 4.2945,-0.002 c 0.24502,0 0.54796,-0.17285 0.6718,-0.38401 l 10.5224,-17.79899 c 1.46832,-2.41899 3.51757,-2.95358 5.48662,-2.71479 3.38035,0.40984 5.19794,2.89121 5.19794,6.19583 0,3.31887 -2.70055,6.01941 -6.01942,6.01941 h -6.6823 c -0.24502,0 -0.54528,0.17375 -0.66646,0.38669 l -2.4083,4.2054 c -0.12206,0.21294 -0.0204,0.38668 0.22453,0.38668 h 9.53342 c 6.06397,0 10.99819,-4.93333 10.99819,-10.99818 0,-2.92864 -1.14492,-6.08892 -3.22711,-8.1542 z"
|
||||
id="path977"
|
||||
style="stroke-width:0.0890978" />
|
||||
</svg>
|
After Width: | Height: | Size: 6.9 KiB |
BIN
locale/hbs/img/logo/logo-full.png
Normal file
BIN
locale/hbs/img/logo/logo-full.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
1
locale/hbs/names/nameCount.js
Normal file
1
locale/hbs/names/nameCount.js
Normal file
@ -0,0 +1 @@
|
||||
export default {};
|
1
locale/hbs/names/namedays.json
Normal file
1
locale/hbs/names/namedays.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
6
locale/hbs/nouns/NounsExtra.vue
Normal file
6
locale/hbs/nouns/NounsExtra.vue
Normal file
@ -0,0 +1,6 @@
|
||||
<template>
|
||||
<div>
|
||||
<Separator icon="book-open" />
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
1
locale/hbs/nouns/abbr.tsv
Normal file
1
locale/hbs/nouns/abbr.tsv
Normal file
@ -0,0 +1 @@
|
||||
abbreviation meaning
|
|
1
locale/hbs/nouns/cases.js
Normal file
1
locale/hbs/nouns/cases.js
Normal file
@ -0,0 +1 @@
|
||||
export default {};
|
0
locale/hbs/nouns/nounDeclension.tsv
Normal file
0
locale/hbs/nouns/nounDeclension.tsv
Normal file
|
1
locale/hbs/nouns/nounTemplates.tsv
Normal file
1
locale/hbs/nouns/nounTemplates.tsv
Normal file
@ -0,0 +1 @@
|
||||
masc fem neutr mascPl femPl neutrPl
|
|
1
locale/hbs/people/people.tsv
Normal file
1
locale/hbs/people/people.tsv
Normal file
@ -0,0 +1 @@
|
||||
name description pronouns sources
|
|
3
locale/hbs/pronouns/EnglishTable.vue
Normal file
3
locale/hbs/pronouns/EnglishTable.vue
Normal file
@ -0,0 +1,3 @@
|
||||
<template>
|
||||
<div></div>
|
||||
</template>
|
40
locale/hbs/pronouns/GrammarTables.vue
Normal file
40
locale/hbs/pronouns/GrammarTables.vue
Normal file
@ -0,0 +1,40 @@
|
||||
<template>
|
||||
<section>
|
||||
<h2 class="h4">
|
||||
<Icon v="spell-check" />
|
||||
<T>pronouns.grammarTable</T><T>quotation.colon</T>
|
||||
</h2>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Subject</th>
|
||||
<th>Object</th>
|
||||
<th>Possessive determiner</th>
|
||||
<th>Possessive pronoun</th>
|
||||
<th>Reflexive</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><MorphemeWithPronunciation :pronoun="selectedPronoun" morpheme="pronoun_subject" :counter="counter" /></td>
|
||||
<td><MorphemeWithPronunciation :pronoun="selectedPronoun" morpheme="pronoun_object" :counter="counter" /></td>
|
||||
<td><MorphemeWithPronunciation :pronoun="selectedPronoun" morpheme="possessive_determiner" :counter="counter" /></td>
|
||||
<td><MorphemeWithPronunciation :pronoun="selectedPronoun" morpheme="possessive_pronoun" :counter="counter" /></td>
|
||||
<td><MorphemeWithPronunciation :pronoun="selectedPronoun" morpheme="reflexive" :counter="counter" /></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
selectedPronoun: { required: true },
|
||||
counter: { required: true },
|
||||
},
|
||||
};
|
||||
</script>
|
6
locale/hbs/pronouns/Suggested.vue
Normal file
6
locale/hbs/pronouns/Suggested.vue
Normal file
@ -0,0 +1,6 @@
|
||||
<template>
|
||||
<h2>
|
||||
<Icon v="tags" />
|
||||
<T>home.pronouns</T>
|
||||
</h2>
|
||||
</template>
|
5
locale/hbs/pronouns/examples.tsv
Normal file
5
locale/hbs/pronouns/examples.tsv
Normal file
@ -0,0 +1,5 @@
|
||||
singular plural
|
||||
Mislim {pronoun_subject} da je jako draga. Mislim da je jako draga (placeholder)
|
||||
Pitala sam je mogu li posuditi njezinu olovku.
|
||||
Rekla mi je da je kuća njezina.
|
||||
Rekla je da bi to radije sama učinila.
|
Can't render this file because it has a wrong number of fields in line 3.
|
7
locale/hbs/pronouns/morphemes.ts
Normal file
7
locale/hbs/pronouns/morphemes.ts
Normal file
@ -0,0 +1,7 @@
|
||||
export default [
|
||||
'pronoun_subject',
|
||||
'pronoun_object',
|
||||
'possessive_determiner',
|
||||
'possessive_pronoun',
|
||||
'reflexive',
|
||||
] as const;
|
5
locale/hbs/pronouns/pronounGroups.tsv
Normal file
5
locale/hbs/pronouns/pronounGroups.tsv
Normal file
@ -0,0 +1,5 @@
|
||||
key name pronouns description
|
||||
normative Binary forms she,he It's worth mentioning that pronouns ≠ gender. One can still be nonbinary while using pronouns that are congruent with (or opposite to) their gender assigned at birth.
|
||||
normative-ish Normative-ish forms they,they/them/themself,it,one Those pronouns have been in common use in normative English already, but recently they got a slightly different new usage: describing a single, specific person. If you want to link to plural “they”, use {/they,!5,Plural%20“they”=this link}.
|
||||
neopronouns Popular neopronouns ae,ey,fae,xe,ze,ze/zir Unlike the other pronouns, which are officially recognised as “grammatically correct”, albeit used in a different meaning than we're used to, neopronouns are novel. Not being included in dictionaries doesn't make them any worse, though!
|
||||
neopronouns Other neopronouns co,e,e/em/es,hu,ne,ne/nir,per,s/he,thon,ve,vi,vi/vim,zhe These neopronouns are less often used than their more popular counterparts, but it doesn't make them any worse (and some of them are historically notable). Some neopronouns' names are derived from the names of their creators. If your pronoun is not on the list, use the generator below!
|
|
26
locale/hbs/pronouns/pronouns.tsv
Normal file
26
locale/hbs/pronouns/pronouns.tsv
Normal file
@ -0,0 +1,26 @@
|
||||
key description normative pronoun_subject pronoun_object possessive_determiner possessive_pronoun reflexive plural pluralHonorific pronounceable history thirdForm smallForm sourcesInfo
|
||||
he,he/him Normative “he/him” TRUE he him his his himself FALSE FALSE TRUE
|
||||
she,she/her Normative “she/her” 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 is also common to use {/they/them/themself=“themself”} as a reflexive form. reflexive This list of sources includes both the version with {/they=“themselves”} and {/they/them/themselves=“themself”}, as well as those that don't happen to use reflexive.
|
||||
they/them/themself Singular “they” TRUE they them their theirs themself 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 is also common to use {/they=“themselves”} as a reflexive form. reflexive This list of sources includes both the version with {/they=“themselves”} and {/they/them/themselves=“themself”}, as well as those that don't happen to use reflexive.
|
||||
it,it/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. But remember that it/its pronouns have a history of transphobic use, so only with people who explicitly wish it.
|
||||
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.
|
||||
ae,æ,ae/aer,æ/ær Neopronoun “ae” / “æ” FALSE ae|eɪ 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.
|
||||
co,co/cos Neopronoun “co/cos” FALSE co|ko co|ko cos|koz co's|koz coself|koˈsɛlf FALSE FALSE TRUE Created by Mary Orovan in 1970, derived from the Indo-European <em>*ko</em>.
|
||||
e,e/em/eir Spivak pronouns FALSE e|i em|ɛm eir|ɛɹ eirs|ɛɹz emself|ɛmˈsɛ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. possessive_determiner
|
||||
e/em/es Neopronoun “e/em/es” FALSE e|i em|ɛm es|iz ems|ɛmz emself|ɛmˈsɛ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. possessive_determiner
|
||||
ey,ey/em Elverson pronouns FALSE ey|eɪ em|ɛm eir|ɛɹ eirs|ɛɹz emself|ɛmˈsɛlf FALSE FALSE TRUE {https://web.archive.org/web/20211130005355/https://research.cristanwilliams.com/2012/02/24/1975-transgender-cross-gender/=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”.
|
||||
fae,fæ,fae/faer,fæ/fær Neopronoun “fae/faer” FALSE fae|feɪ faer|fɛɹ faer|fɛɹ faers|fɛɹz faerself|fɛɹˈsɛlf FALSE FALSE TRUE Created in 2014 by Tumblr user shadaras.
|
||||
hu,hu/hum Humanist pronouns FALSE hu|hju hum|hjum hus|hjuz hus|hjuz huself|hjuˈsɛlf FALSE FALSE TRUE Coined by Sasha Newborn in 1982, based on the word “human”.
|
||||
ne,ne/nem Neopronoun “ne/nem” FALSE ne|ni nem|nəm nir|nəɹ nirs|nəɹz nemself|nəmˈsɛlf FALSE FALSE TRUE
|
||||
ne/nir Neopronoun “ne/nir” FALSE ne|ni nir|nəɹ nir|nəɹ nirs|nəɹz nirself|nəɹˈsɛlf FALSE FALSE TRUE
|
||||
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”.
|
||||
s/he,s/he/hir Neopronoun “s/he” FALSE s/he|shi hir|hɪɹ hir|hɪɹ hirs|hɪɹz hirself|hɪɹˈsɛlf FALSE FALSE TRUE
|
||||
thon,thon/thons Neopronoun “thon” FALSE thon|ðɑn thon|ðɑn thons|ðɑnz thon's|ðɑnz thonself|ðɑnˈsɛlf FALSE FALSE TRUE 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”.
|
||||
ve,ve/ver Neopronoun “ve/ver” 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/vir” FALSE vi|vi vir|viɹ vis|viz virs|viɹz virself|viɹˈsɛlf FALSE FALSE TRUE
|
||||
vi/vim Neopronoun “vi/vim” FALSE vi|vi vim|vɪm vis|vɪs vims|vɪms vimself|vɪmˈsɛlf FALSE FALSE TRUE
|
||||
xe,xe/xem Neopronoun “xe/xem” FALSE xe|zi xem|zɛm xyr|ziɹ xyrs|ziɹz xemself|zɛmˈsɛlf FALSE FALSE TRUE Coined by Don Rickter in an issue of <em>Unitarian Universalist</em> in 1973.
|
||||
ze,ze/hir Neopronoun “ze/hir” FALSE ze|zi hir|hɪɹ hir|hɪɹ hirs|hɪɹz hirself|hɪɹˈsɛlf FALSE FALSE TRUE
|
||||
ze/zir Neopronoun “ze/zir” 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>.
|
||||
zhe,zhe/zher Neopronoun “zhe/zher” FALSE zhe|ʒi zher|ʒəɹ zher|ʒəɹ zhers|ʒəɹz zherself|ʒəɹˈsɛlf FALSE FALSE TRUE
|
Can't render this file because it has a wrong number of fields in line 2.
|
94
locale/hbs/script.ts
Normal file
94
locale/hbs/script.ts
Normal file
@ -0,0 +1,94 @@
|
||||
/* eslint-disable */
|
||||
const HBS_LATIN_TO_CYRILLIC: Record<string, string> = {
|
||||
'A': 'А',
|
||||
'a': 'а',
|
||||
'B': 'Б',
|
||||
'b': 'б',
|
||||
'C': 'Ц',
|
||||
'c': 'ц',
|
||||
'Č': 'Ч',
|
||||
'č': 'ч',
|
||||
'Ć': 'Ћ',
|
||||
'ć': 'ћ',
|
||||
'D': 'Д',
|
||||
'd': 'д',
|
||||
'Dž': 'Џ',
|
||||
'dž': 'џ',
|
||||
'Đ': 'Ђ',
|
||||
'đ': 'ђ',
|
||||
'E': 'Е',
|
||||
'e': 'е',
|
||||
'F': 'Ф',
|
||||
'f': 'ф',
|
||||
'G': 'Г',
|
||||
'g': 'г',
|
||||
'H': 'Х',
|
||||
'h': 'х',
|
||||
'I': 'И',
|
||||
'i': 'и',
|
||||
'J': 'Ј',
|
||||
'j': 'ј',
|
||||
'K': 'К',
|
||||
'k': 'к',
|
||||
'L': 'Л',
|
||||
'l': 'л',
|
||||
'Lj': 'Љ',
|
||||
'lj': 'љ',
|
||||
'M': 'М',
|
||||
'm': 'м',
|
||||
'N': 'Н',
|
||||
'n': 'н',
|
||||
'Nj': 'Њ',
|
||||
'nj': 'њ',
|
||||
'O': 'О',
|
||||
'o': 'о',
|
||||
'P': 'П',
|
||||
'p': 'п',
|
||||
'R': 'Р',
|
||||
'r': 'р',
|
||||
'S': 'С',
|
||||
's': 'с',
|
||||
'Š': 'Ш',
|
||||
'š': 'ш',
|
||||
'T': 'Т',
|
||||
't': 'т',
|
||||
'U': 'У',
|
||||
'u': 'у',
|
||||
'V': 'В',
|
||||
'v': 'в',
|
||||
'Z': 'З',
|
||||
'z': 'з',
|
||||
'Ž': 'Ж',
|
||||
'ž': 'ж',
|
||||
};
|
||||
/* eslint-enable */
|
||||
|
||||
export const hbsLatinToCyrillic = (str: string): string => {
|
||||
let result = '';
|
||||
let i = 0;
|
||||
|
||||
str = str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
||||
|
||||
while (i < str.length) {
|
||||
if (i + 1 < str.length) {
|
||||
// check for digraphs
|
||||
const digraph = str.substring(i, i + 2);
|
||||
if (HBS_LATIN_TO_CYRILLIC.hasOwnProperty(digraph)) {
|
||||
result += HBS_LATIN_TO_CYRILLIC[digraph];
|
||||
i += 2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
const char = str[i];
|
||||
if (HBS_LATIN_TO_CYRILLIC.hasOwnProperty(char)) {
|
||||
result += HBS_LATIN_TO_CYRILLIC[char];
|
||||
} else {
|
||||
result += char;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
2
locale/hbs/translations.suml
Normal file
2
locale/hbs/translations.suml
Normal file
@ -0,0 +1,2 @@
|
||||
title: 'Pronouns.page'
|
||||
domain: 'hbs.pronouns.page'
|
2
locale/hbs/variables.scss
Normal file
2
locale/hbs/variables.scss
Normal file
@ -0,0 +1,2 @@
|
||||
$fontHeadings: 'Quicksand';
|
||||
$fontText: 'Nunito';
|
@ -67,6 +67,7 @@ export default [
|
||||
new LocaleDescription('he', 'heb', 'עברית', 'Hebrew', 'https://he.pronouns.page', false, 'ע', 'semitic'), // // not entirely sure about the languange family
|
||||
new LocaleDescription('it', 'ita', 'Italiano', 'Italian', 'https://it.pronouns.page', false, 'à', 'romance'),
|
||||
new LocaleDescription('lad','lno', 'Ladino', 'Ladin', 'https://lad.pronouns.page', true, 'ny', 'romance', 'Djudezmo'),
|
||||
new LocaleDescription('hbs','hbs', 'Naški', 'BCMS', 'https://hbs.pronouns.page', false, 'ć', 'slavic', 'BCMS'), // Bosanski-Hrvatski-Crnogorski-Српски
|
||||
new LocaleDescription('nl', 'dut', 'Nederlands', 'Dutch', 'https://nl.pronouns.page', true, 'ij', 'germanic'),
|
||||
new LocaleDescription('nb', 'nor', 'Norsk', 'Norwegian', 'https://nb.pronouns.page', true, 'æ', 'germanic', 'Bokmål'), // å might be better, but it's used for swedish
|
||||
new LocaleDescription('nn', 'nor', 'Norsk', 'Norwegian', 'https://nn.pronouns.page', true, 'æ', 'germanic', 'Nynorsk'),
|
||||
|
@ -63,6 +63,30 @@ const { data: featuredPosts } = useAsyncData('featured-posts', async () => {
|
||||
<OAuthError />
|
||||
<AdPlaceholder :phkey="['header', null]" />
|
||||
<template v-if="$te('home.welcome')">
|
||||
<section v-if="config.locale === 'hbs'">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h2><Spelling text="Bosanski" /></h2>
|
||||
<p><Spelling text="Sva ljudska bića rađaju se slobodna i jednaka u dostojanstvu i pravima. Ona su obdarena razumom i sviješću i trebaju jedno prema drugome postupati u duhu bratstva." /></p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2><Spelling text="Hrvatski" /></h2>
|
||||
<p><Spelling text="Sva ljudska bića rađaju se slobodna i jednaka u dostojanstvu i pravima. Obdarená su razumom i savješću te jedna prema drugima trebaju postupati u duhu bratstva" />"</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2><Spelling text="Srpski" /></h2>
|
||||
<p><Spelling text="Sva ljudska bića rađaju se slobodna i jednaka u dostojanstvu i pravima. Obdarena su razumom i svešću i treba da postupaju jedna prema drugima u duhu bratstva." /></p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2><Spelling text="Crnogorski" /></h2>
|
||||
<p><Spelling text="Sva ljudska bića rađaju se slobodna i jednaka u dostojanstvu i pravima. Obdarena su razumom i sviješću i treba da postupaju jedno prema drugome u duhu bratstva." /></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert alert-warning">
|
||||
TODO: Clean up this temporary section. <Icon v="arrow-circle-up" />
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>
|
||||
<T>home.welcome</T>
|
||||
|
@ -5,11 +5,70 @@ import { Router } from 'express';
|
||||
import { Base64 } from 'js-base64';
|
||||
import sha1 from 'sha1';
|
||||
|
||||
import { convertPronunciationStringToSsml, handleErrorAsync } from '../../src/helpers.ts';
|
||||
import type { PronunciationVoiceConfig, AwsPollyPronunciationVoiceConfig, NarakeetPronunciationVoiceConfig } from '../../locale/config.ts';
|
||||
import { convertPronunciationStringToSsml, convertPronunciationStringToNarakeetFormat, handleErrorAsync } from '../../src/helpers.ts';
|
||||
import { awsConfig, awsParams } from '../aws.ts';
|
||||
|
||||
const router = Router();
|
||||
|
||||
type ProviderKey = 'aws_polly' | 'narakeet';
|
||||
interface Provider {
|
||||
tokenised(text: string): string;
|
||||
generate(textTokenised: string, voice: PronunciationVoiceConfig): Promise<[Uint8Array, string]>;
|
||||
}
|
||||
|
||||
const providers: Record<ProviderKey, Provider> = {
|
||||
aws_polly: {
|
||||
tokenised(text: string): string {
|
||||
return convertPronunciationStringToSsml(text);
|
||||
},
|
||||
async generate(textTokenised: string, voice: AwsPollyPronunciationVoiceConfig): Promise<[Uint8Array, string]> {
|
||||
const polly = new Polly(awsConfig) as NodeJsClient<Polly>;
|
||||
|
||||
const pollyResponse = await polly.synthesizeSpeech({
|
||||
TextType: 'ssml',
|
||||
Text: textTokenised,
|
||||
OutputFormat: 'mp3',
|
||||
LanguageCode: voice.language,
|
||||
VoiceId: voice.voice,
|
||||
Engine: voice.engine || 'standard',
|
||||
});
|
||||
|
||||
return [
|
||||
await pollyResponse.AudioStream!.transformToByteArray(),
|
||||
pollyResponse.ContentType!,
|
||||
];
|
||||
},
|
||||
},
|
||||
narakeet: {
|
||||
tokenised(text: string): string {
|
||||
return convertPronunciationStringToNarakeetFormat(text);
|
||||
},
|
||||
async generate(textTokenised: string, voice: NarakeetPronunciationVoiceConfig): Promise<[Uint8Array, string]> {
|
||||
const url = `https://api.narakeet.com/text-to-speech/m4a?voice=${voice.voice}`;
|
||||
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'accept': 'application/octet-stream',
|
||||
'x-api-key': process.env.NARAKEET_API_KEY!,
|
||||
'content-type': 'text/plain',
|
||||
},
|
||||
body: textTokenised,
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
return [
|
||||
new Uint8Array(await response.arrayBuffer()),
|
||||
response.headers.get('content-type')!,
|
||||
];
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
router.get('/pronounce/:voice/:pronunciation', handleErrorAsync(async (req, res) => {
|
||||
const text = Base64.decode(req.params.pronunciation);
|
||||
|
||||
@ -17,16 +76,16 @@ router.get('/pronounce/:voice/:pronunciation', handleErrorAsync(async (req, res)
|
||||
return res.status(404).json({ error: 'Not found' });
|
||||
}
|
||||
|
||||
const voice = global.config.pronunciation?.voices?.[req.params.voice];
|
||||
const voice: PronunciationVoiceConfig | undefined = global.config.pronunciation?.voices?.[req.params.voice];
|
||||
if (!voice) {
|
||||
return res.status(404).json({ error: 'Not found' });
|
||||
}
|
||||
|
||||
const s3 = new S3(awsConfig) as NodeJsClient<S3>;
|
||||
const polly = new Polly(awsConfig) as NodeJsClient<Polly>;
|
||||
|
||||
const ssml = convertPronunciationStringToSsml(text);
|
||||
const key = `pronunciation/${global.config.locale}-${req.params.voice}/${sha1(ssml)}.mp3`;
|
||||
const provider = providers[(voice.provider || 'aws_polly') as ProviderKey];
|
||||
const tokenised = provider.tokenised(text);
|
||||
const key = `pronunciation/${global.config.locale}-${req.params.voice}/${sha1(tokenised)}.mp3`;
|
||||
|
||||
try {
|
||||
const s3Response = await s3.getObject({ Key: key, ...awsParams });
|
||||
@ -36,23 +95,17 @@ router.get('/pronounce/:voice/:pronunciation', handleErrorAsync(async (req, res)
|
||||
if (!(error instanceof NoSuchKey)) {
|
||||
throw error;
|
||||
}
|
||||
const pollyResponse = await polly.synthesizeSpeech({
|
||||
TextType: 'ssml',
|
||||
Text: ssml,
|
||||
OutputFormat: 'mp3',
|
||||
LanguageCode: voice.language,
|
||||
VoiceId: voice.voice,
|
||||
Engine: voice.engine,
|
||||
});
|
||||
const buffer = await pollyResponse.AudioStream!.transformToByteArray();
|
||||
|
||||
const [buffer, contentType] = await provider.generate(tokenised, voice);
|
||||
|
||||
await s3.putObject({
|
||||
Key: key,
|
||||
Body: buffer,
|
||||
ContentType: pollyResponse.ContentType,
|
||||
ContentType: contentType,
|
||||
...awsParams,
|
||||
});
|
||||
|
||||
res.set('content-type', pollyResponse.ContentType);
|
||||
res.set('content-type', contentType);
|
||||
res.write(buffer);
|
||||
return res.end();
|
||||
}
|
||||
|
@ -359,6 +359,44 @@ export const convertPronunciationStringToSsml = (pronunciationString: string): s
|
||||
return `<speak>${ssml}</speak>`;
|
||||
};
|
||||
|
||||
export const convertPronunciationStringToNarakeetFormat = (pronunciationString: string): string => {
|
||||
const escapedString = escapeHtml(pronunciationString);
|
||||
let output = '';
|
||||
let escape = false;
|
||||
let currentPhonemes = null;
|
||||
for (const character of escapedString) {
|
||||
if (escape) {
|
||||
if (currentPhonemes === null) {
|
||||
output += character;
|
||||
} else {
|
||||
currentPhonemes += character;
|
||||
}
|
||||
escape = false;
|
||||
} else {
|
||||
if (character === '\\') {
|
||||
escape = true;
|
||||
} else if (character == '/') {
|
||||
if (currentPhonemes === null) {
|
||||
currentPhonemes = '';
|
||||
} else {
|
||||
output += `[${currentPhonemes}]{ipa}`;
|
||||
currentPhonemes = null;
|
||||
}
|
||||
} else {
|
||||
if (currentPhonemes === null) {
|
||||
output += character;
|
||||
} else {
|
||||
currentPhonemes += character;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (currentPhonemes !== null) {
|
||||
output += `/${currentPhonemes}`;
|
||||
}
|
||||
return output;
|
||||
};
|
||||
|
||||
export class ImmutableArray<T> extends Array<T> {
|
||||
override map<U>(callbackFn: (value: T, index: number, array: T[]) => U): ImmutableArray<U> {
|
||||
return super.map(callbackFn) as ImmutableArray<U>;
|
||||
|
@ -4,6 +4,7 @@ import {
|
||||
escapeControlSymbols,
|
||||
unescapeControlSymbols,
|
||||
convertPronunciationStringToSsml,
|
||||
convertPronunciationStringToNarakeetFormat,
|
||||
escapePronunciationString,
|
||||
} from '../src/helpers.ts';
|
||||
|
||||
@ -53,7 +54,7 @@ describe('when unescaping control symbols', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('when escaping pronunciation', () => {
|
||||
describe('when escaping pronunciation to SSML', () => {
|
||||
test.each([
|
||||
{
|
||||
description: 'slashes get escaped',
|
||||
@ -106,3 +107,40 @@ describe('when converting pronunciation', () => {
|
||||
expect(convertPronunciationStringToSsml(pronunciationString)).toBe(ssml);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when converting pronunciation to Narakeet format', () => {
|
||||
test.each([
|
||||
{
|
||||
description: 'simple text is passed as-is',
|
||||
pronunciationString: 'text',
|
||||
narakeet: 'text',
|
||||
},
|
||||
{
|
||||
description: 'slashes describe IPA phonemes',
|
||||
pronunciationString: '/ðeɪ/',
|
||||
narakeet: '[ðeɪ]{ipa}',
|
||||
},
|
||||
{
|
||||
description: 'simple text and slashes can be combined',
|
||||
pronunciationString: '/ðeɪ/ are',
|
||||
narakeet: '[ðeɪ]{ipa} are',
|
||||
},
|
||||
{
|
||||
description: 'slashes can be escaped at front',
|
||||
pronunciationString: String.raw`w\/o, n/A`,
|
||||
narakeet: 'w/o, n/A',
|
||||
},
|
||||
{
|
||||
description: 'slashes can be escaped at back',
|
||||
pronunciationString: String.raw`w/o, n\/A`,
|
||||
narakeet: 'w/o, n/A',
|
||||
},
|
||||
{
|
||||
description: 'provided HTML is escaped',
|
||||
pronunciationString: '<break time="1s"/>',
|
||||
narakeet: '<break time="1s"/>',
|
||||
},
|
||||
])('$description', ({ pronunciationString, narakeet }) => {
|
||||
expect(convertPronunciationStringToNarakeetFormat(pronunciationString)).toBe(narakeet);
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user