Completed
Pull Request — master (#40)
by
unknown
01:14
created

German::getExtensions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace TheIconic\NameParser\Language;
4
5
use TheIconic\NameParser\LanguageInterface;
6
7
/**
8
 * The only structured definition of name parts and their allowed values
9
 * I could found on the web are according to HL7 (health level 7) standard
10
 * @see https://simplifier.net/guide/LeitfadenBasisDE/PatientimVersichertenstammdatenmanagementVSDM
11
 *
12
 * Names in Germany could be structured like this:
13
 * "[SALUTATION] [TITLES] [FIRSTNAME] [MIDDLENAMES] [EXTENSION] [LASTNAME_PREFIX] [LASTNAME], [SUFFIX]"
14
 *        1          n         1            n            1              1             1          n
15
 * @see https://wiki.hl7.de/index.php?title=bp:Personennamen
16
 *
17
 * Example:
18
 * "Herr Prof. Dr. med. Dr. rer. nat. Fritz Julius Karl Freiherr von und zu Rathenburg vor der Isar, MdB"
19
 * Where LASTNAME (FAMILYNAME/SURNAME) is "Rathenburg vor der Isar"
20
 * It is rather difficult to parse this name correctly, because "vor der" in this case
21
 * is part of the LASTNAME, but can also be a defined LASTNAME PREFIX!
22
 *
23
 * Derived from the standard for sorting (DIN 5007-2),
24
 * the name can also be written in this way (listings):
25
 * "Rathenburg vor der Isar, Fritz Julius Karl Freiherr von und zu"
26
 */
27
28
 class German implements LanguageInterface
29
{
30
    const SUFFIXES = [
31
        '1.' => '1.',
32
        '2.' => '2.',
33
        '3.' => '3.',
34
        '4.' => '4.',
35
        '5.' => '5.',
36
        'i' => 'I',
37
        'ii' => 'II',
38
        'iii' => 'III',
39
        'iv' => 'IV',
40
        'v' => 'V',
41
        'jr.' => 'Jr.',
42
        'junior' => 'Junior',
43
        'senior' => 'Senior',
44
        'sr.' => 'Sr.',
45
        'der ältere' => 'der Ältere',
46
        'd. ä.' => 'd. Ä.',
47
        'd.ä.' => 'd.Ä.',
48
        'der jüngere' => 'der Jüngere',
49
        'd. j.' => 'd. J.',
50
        'd.j.' => 'd.J.',
51
    ];
52
53
    const SALUTATIONS = [
54
        'herr' => 'Herr',
55
        'hr' => 'Herr',
56
        'frau' => 'Frau',
57
        'fr' => 'Frau',
58
    ];
59
60
    /**
61
      * the following list is according to HL7 (Health Level 7) standard
62
      * @see https://www.vdek.com/vertragspartner/arbeitgeber/deuev/_jcr_content/par/download_8/file.res/Anlage_07_Vers.pdf
63
      */
64
    const LASTNAME_PREFIXES = [
65
        'a' => 'a',
66
        'aan de' => 'aan de',
67
        'aan den' => 'aan den',
68
        'al' => 'al',
69
        'am' => 'am',
70
        'an' => 'an',
71
        'an der' => 'an der',
72
        'auf' => 'auf',
73
        'auf dem' => 'auf dem',
74
        'auf der' => 'auf der',
75
        'auf m' => 'auf m',
76
        'aufm' => 'aufm',
77
        'auff m' => 'auff m',
78
        'aus' => 'aus',
79
        'aus dem' => 'aus dem',
80
        'aus den' => 'aus den',
81
        'aus der' => 'aus der',
82
        'b' => 'b',
83
        'be' => 'be',
84
        'bei' => 'bei',
85
        'bei der' => 'bei der',
86
        'beim' => 'beim',
87
        'ben' => 'ben',
88
        'bey' => 'bey',
89
        'bey der' => 'bey der',
90
        'che' => 'che',
91
        'cid' => 'cid',
92
        'd' => 'd',
93
        'd.' => 'd.',
94
        "d'" => "d'",
95
        'da' => 'da',
96
        'da costa' => 'da costa',
97
        'da las' => 'da las',
98
        'da silva' => 'da silva',
99
        'dal' => 'dal',
100
        'dall' => 'dall',
101
        "dall'" => "dall'",
102
        'dalla' => 'dalla',
103
        'dalle' => 'dalle',
104
        'dallo' => 'dallo',
105
        'das' => 'das',
106
        'de' => 'de',
107
        'degli' => 'degli',
108
        'dei' => 'dei',
109
        'den' => 'den',
110
        "de l '" => "de l '",
111
        'de la' => 'de la',
112
        'de las' => 'de las',
113
        'de le' => 'de le',
114
        'de los' => 'de los',
115
        'del' => 'del',
116
        'del coz' => 'del coz',
117
        'deli' => 'deli',
118
        'dell' => 'dell',
119
        "dell'" => "dell'",
120
        'della' => 'della',
121
        'delle' => 'delle',
122
        'delli' => 'delli',
123
        'dello' => 'dello',
124
        'der' => 'der',
125
        'des' => 'des',
126
        'di' => 'di',
127
        'dit' => 'dit',
128
        'do' => 'do',
129
        'do ceu' => 'do ceu',
130
        'don' => 'don',
131
        'don le' => 'don le',
132
        'dos' => 'dos',
133
        'dos santos' => 'dos santos',
134
        'du' => 'du',
135
        'dy' => 'dy',
136
        'el' => 'el',
137
        'g' => 'g',
138
        'gen' => 'gen',
139
        'gil' => 'gil',
140
        'gli' => 'gli',
141
        'grosse' => 'grosse',
142
        'groãÿe' => 'große',
143
        'i' => 'i',
144
        'im' => 'im',
145
        'in' => 'in',
146
        'in de' => 'in de',
147
        'in den' => 'in den',
148
        'in der' => 'in der',
149
        'in het' => 'in het',
150
        "in't" => "in't",
151
        'kl' => 'kl',
152
        'kleine' => 'kleine',
153
        'l' => 'l',
154
        'l.' => 'l.',
155
        "l'" => "l'",
156
        'la' => 'la',
157
        'le' => 'le',
158
        'lee' => 'lee',
159
        'li' => 'li',
160
        'lo' => 'lo',
161
        'm' => 'm',
162
        'mc' => 'mc',
163
        'mac' => 'mac',
164
        'n' => 'n',
165
        'o' => 'o',
166
        "o'" => "o'",
167
        'op' => 'op',
168
        'op de' => 'op de',
169
        'op den' => 'op den',
170
        'op gen' => 'op gen',
171
        'op het' => 'op het',
172
        'op te' => 'op te',
173
        'op ten' => 'op ten',
174
        'oude' => 'oude',
175
        'pla' => 'pla',
176
        'pro' => 'pro',
177
        's' => 's',
178
        'st.' => 'st.',
179
        't' => 't',
180
        'te' => 'te',
181
        'ten' => 'ten',
182
        'ter' => 'ter',
183
        'thi' => 'thi',
184
        'tho' => 'tho',
185
        'thom' => 'thom',
186
        'thor' => 'thor',
187
        'thum' => 'thum',
188
        'to' => 'to',
189
        'tom' => 'tom',
190
        'tor' => 'tor',
191
        'tu' => 'tu',
192
        'tum' => 'tum',
193
        'unten' => 'unten',
194
        'unter' => 'unter',
195
        'unterm' => 'unterm',
196
        'v.' => 'v.',
197
        'v. d.' => 'v. d.',
198
        'v. dem' => 'v. dem',
199
        'v. den' => 'v. den',
200
        'v. der' => 'v. der',
201
        'v.d.' => 'v.d.',
202
        'v.dem' => 'v.dem',
203
        'v.den' => 'v.den',
204
        'v.der' => 'v.der',
205
        'van' => 'van',
206
        'van de' => 'van de',
207
        'van dem' => 'van dem',
208
        'van den' => 'van den',
209
        'van der' => 'van der',
210
        'vande' => 'vande',
211
        'vandem' => 'vandem',
212
        'vanden' => 'vanden',
213
        'vander' => 'vander',
214
        'van gen' => 'van gen',
215
        'van het' => 'van het',
216
        'van t' => 'van t',
217
        'ven' => 'ven',
218
        'ven der' => 'ven der',
219
        'ver' => 'ver',
220
        'vo' => 'vo',
221
        'vom' => 'vom',
222
        'vom und zu' => 'vom und zu',
223
        'von' => 'von',
224
        'von und zu' => 'von und zu',
225
        'von und zu der' => 'von und zu der',
226
        'von und zur' => 'von und zur',
227
        'von de' => 'von de',
228
        'von dem' => 'von dem',
229
        'von den' => 'von den',
230
        'von der' => 'von der',
231
        'von la' => 'von la',
232
        'von zu' => 'von zu',
233
        'von zum' => 'von zum',
234
        'von zur' => 'von zur',
235
        'vonde' => 'vonde',
236
        'vonden' => 'vonden',
237
        'vondem' => 'vondem',
238
        'vonder' => 'vonder',
239
        'von einem' => 'von einem',
240
        'von mast' => 'von mast',
241
        'vor' => 'vor',
242
        'vor dem' => 'vor dem',
243
        'vor den' => 'vor den',
244
        'vor der' => 'vor der',
245
        'vorm' => 'vorm',
246
        'vorn' => 'vorn',
247
        'y' => 'y',
248
        'y del' => 'y del',
249
        'zu' => 'zu',
250
        'zum' => 'zum',
251
        'zur' => 'zur',
252
    ];
253
254
    /**
255
      * the following list is according to HL7 (Health Level 7) standard
256
      * @see https://www.vdek.com/vertragspartner/arbeitgeber/deuev/_jcr_content/par/download_8/file.res/Anlage_07_Vers.pdf
257
      */
258
    const EXTENSIONS = [                            // nobility predicate (Adelsprädikate)
259
        'bar' => 'Bar',
260
        'baron' => 'Baron',
261
        'baroness' => 'Baroness',
262
        'baronesse' => 'Baronesse',
263
        'baronin' => 'Baronin',
264
        'brand' => 'Brand',
265
        'burggraf' => 'Burggraf',
266
        'burggräfin' => 'Burggräfin',
267
        'condesa' => 'Condesa',
268
        'earl' => 'Earl',
269
        'edle' => 'Edle',
270
        'edler' => 'Edler',
271
        'erbgraf' => 'Erbgraf',
272
        'erbgräfin' => 'Erbgräfin',
273
        'erbprinz' => 'Erbprinz',
274
        'erbprinzessin' => 'Erbprinzessin',
275
        'ffr' => 'Ffr',
276
        'freifr' => 'Freifr',
277
        'freifräulein' => 'Freifräulein',
278
        'freifrau' => 'Freifrau',
279
        'freih' => 'Freih',
280
        'freiherr' => 'Freiherr',
281
        'freiin' => 'Freiin',
282
        'frf' => 'Frf',
283
        'frf.' => 'Frf.',
284
        'frfr' => 'Frfr',
285
        'frfr.' => 'Frfr.',
286
        'frh' => 'Frh',
287
        'frh.' => 'Frh.',
288
        'frhr' => 'Frhr',
289
        'frhr.' => 'Frhr.',
290
        'fst' => 'Fst',
291
        'fst.' => 'Fst.',
292
        'fstn' => 'Fstn',
293
        'fstn.' => 'Fstn.',
294
        'fürst' => 'Fürst',
295
        'fürstin' => 'Fürstin',
296
        'gr' => 'Gr',
297
        'graf' => 'Graf',
298
        'gräfin' => 'Gräfin',
299
        'grf' => 'Grf',
300
        'grfn' => 'Grfn',
301
        'grossherzog' => 'Grossherzog',
302
        'großherzog' => 'Großherzog',
303
        'grossherzogin' => 'Grossherzogin',
304
        'großherzogin' => 'Großherzogin',
305
        'herzog' => 'Herzog',
306
        'herzogin' => 'Herzogin',
307
        'jhr' => 'Jhr',
308
        'jhr.' => 'Jhr.',
309
        'jonkheer' => 'Jonkheer',
310
        'junker' => 'Junker',
311
        'landgraf' => 'Landgraf',
312
        'landgräfin' => 'Landgräfin',
313
        'markgraf' => 'Markgraf',
314
        'markgräfin' => 'Markgräfin',
315
        'marques' => 'Marques',
316
        'marquis' => 'Marquis',
317
        'marschall' => 'Marschall',
318
        'ostoja' => 'Ostoja',
319
        'prinz' => 'Prinz',
320
        'prinzessin' => 'Prinzessin',
321
        'przin' => 'Przin',
322
        'rabe' => 'Rabe',
323
        'reichsgraf' => 'Reichsgraf',
324
        'reichsgräfin' => 'Reichsgräfin',
325
        'ritter' => 'Ritter',
326
        'rr' => 'Rr',
327
        'truchsess' => 'Truchsess',
328
        'truchseß' => 'Truchseß',
329
    ];
330
331
    /**
332
     * the following list contains the academic titles for doctor degrees
333
     * from DACH (Germany, Austria, Swiss)
334
     * @see https://de.wikipedia.org/wiki/Doktor
335
     */
336
    const TITLES_DR = [
337
        'ddr.' => 'DDr.',
338
        'dr.' => 'Dr.',
339
        'dr. e. h.' => 'Dr. E. h.',
340
        'dr.e.h.' => 'Dr.E.h.',
341
        'dr. ph' => 'Dr. PH',
342
        'dr.ph' => 'Dr.PH',
343
        'dr. sportwiss.' => 'Dr. Sportwiss.',
344
        'dr.sportwiss.' => 'Dr.Sportwiss.',
345
        'dr. agr.' => 'Dr. agr.',
346
        'dr.agr.' => 'Dr.agr.',
347
        'dr. biol.' => 'Dr. biol.',
348
        'dr.biol.' => 'Dr.biol.',
349
        'dr. cult.' => 'Dr. cult.',
350
        'dr.cult.' => 'Dr.cult.',
351
        'dr. des.' => 'Dr. des.',
352
        'dr.des.' => 'Dr.des.',
353
        'dr. diac.' => 'Dr. diac.',
354
        'dr.diac.' => 'Dr.diac.',
355
        'dr. disc. pol.' => 'Dr. disc. pol.',
356
        'dr.disc.pol.' => 'Dr.disc.pol.',
357
        'dr. e. h.' => 'Dr. e. h.',
358
        'dr.e.h.' => 'Dr.e.h.',
359
        'dr. eh.' => 'Dr. eh.',
360
        'dr.eh.' => 'Dr.eh.',
361
        'dr. h. c.' => 'Dr. h. c.',
362
        'dr.h.c.' => 'Dr.h.c.',
363
        'dr. h. c. mult.' => 'Dr. h. c. mult.',
364
        'dr.h.c.mult.' => 'Dr.h.c.mult.',
365
        'dr. habil.' => 'Dr. habil.',
366
        'dr.habil.' => 'Dr.habil.',
367
        'dr. iur.' => 'Dr. iur.',
368
        'dr.iur.' => 'Dr.iur.',
369
        'dr. iur. can.' => 'Dr. iur. can.',
370
        'dr.iur.can.' => 'Dr.iur.can.',
371
        'dr. iur. et rer. pol.' => 'Dr. iur. et rer. pol.',
372
        'dr.iur.etrer.pol.' => 'Dr.iur.etrer.pol.',
373
        'dr. iur. utr.' => 'Dr. iur. utr.',
374
        'dr.iur.utr.' => 'Dr.iur.utr.',
375
        'dr. math.' => 'Dr. math.',
376
        'dr.math.' => 'Dr.math.',
377
        'dr. med.' => 'Dr. med.',
378
        'dr.med.' => 'Dr.med.',
379
        'dr. med. dent.' => 'Dr. med. dent.',
380
        'dr.med.dent.' => 'Dr.med.dent.',
381
        'dr. med. dent. sci.' => 'Dr. med. dent. sci.',
382
        'dr.med.dent.sci.' => 'Dr.med.dent.sci.',
383
        'dr. med. sci.' => 'Dr. med. sci.',
384
        'dr.med.sci.' => 'Dr.med.sci.',
385
        'dr. med. univ.' => 'Dr. med. univ.',
386
        'dr.med.univ.' => 'Dr.med.univ.',
387
        'dr. med. univ. et scient. med.' => 'Dr. med. univ. et scient. med.',
388
        'dr.med.univ.etscient.med.' => 'Dr.med.univ.etscient.med.',
389
        'dr. med. vet.' => 'Dr. med. vet.',
390
        'dr.med.vet.' => 'Dr.med.vet.',
391
        'dr. mont.' => 'Dr. mont.',
392
        'dr.mont.' => 'Dr.mont.',
393
        'dr. mult.' => 'Dr. mult.',
394
        'dr.mult.' => 'Dr.mult.',
395
        'dr. nat. med.' => 'Dr. nat. med.',
396
        'dr.nat.med.' => 'Dr.nat.med.',
397
        'dr. nat. oec.' => 'Dr. nat. oec.',
398
        'dr.nat.oec.' => 'Dr.nat.oec.',
399
        'dr. nat. techn.' => 'Dr. nat. techn.',
400
        'dr.nat.techn.' => 'Dr.nat.techn.',
401
        'dr. oec.' => 'Dr. oec.',
402
        'dr.oec.' => 'Dr.oec.',
403
        'dr. oec. hsg' => 'Dr. oec. HSG',
404
        'dr.oec.hsg' => 'Dr.oec.HSG',
405
        'dr. oec. publ.' => 'Dr. oec. publ.',
406
        'dr.oec.publ.' => 'Dr.oec.publ.',
407
        'dr. oec. troph.' => 'Dr. oec. troph.',
408
        'dr.oec.troph.' => 'Dr.oec.troph.',
409
        'dr. paed.' => 'Dr. paed.',
410
        'dr.paed.' => 'Dr.paed.',
411
        'dr. pharm.' => 'Dr. pharm.',
412
        'dr.pharm.' => 'Dr.pharm.',
413
        'dr. phil.' => 'Dr. phil.',
414
        'dr.phil.' => 'Dr.phil.',
415
        'dr. phil. fac. theol.' => 'Dr. phil. fac. theol.',
416
        'dr.phil.fac.theol.' => 'Dr.phil.fac.theol.',
417
        'dr. phil. in art.' => 'Dr. phil. in art.',
418
        'dr.phil.inart.' => 'Dr.phil.inart.',
419
        'dr. phil. nat.' => 'Dr. phil. nat.',
420
        'dr.phil.nat.' => 'Dr.phil.nat.',
421
        'dr. rer. agr.' => 'Dr. rer. agr.',
422
        'dr.rer.agr.' => 'Dr.rer.agr.',
423
        'dr. rer. biol. hum.' => 'Dr. rer. biol. hum.',
424
        'dr.rer.biol.hum.' => 'Dr.rer.biol.hum.',
425
        'dr. rer. biol. vet.' => 'Dr. rer. biol. vet.',
426
        'dr.rer.biol.vet.' => 'Dr.rer.biol.vet.',
427
        'dr. rer. cam.' => 'Dr. rer. cam.',
428
        'dr.rer.cam.' => 'Dr.rer.cam.',
429
        'dr. rer. comm.' => 'Dr. rer. comm.',
430
        'dr.rer.comm.' => 'Dr.rer.comm.',
431
        'dr. rer. cult.' => 'Dr. rer. cult.',
432
        'dr.rer.cult.' => 'Dr.rer.cult.',
433
        'dr. rer. cur.' => 'Dr. rer. cur.',
434
        'dr.rer.cur.' => 'Dr.rer.cur.',
435
        'dr. rer. forest.' => 'Dr. rer. forest.',
436
        'dr.rer.forest.' => 'Dr.rer.forest.',
437
        'dr. rer. hort.' => 'Dr. rer. hort.',
438
        'dr.rer.hort.' => 'Dr.rer.hort.',
439
        'dr. rer. hum.' => 'Dr. rer. hum.',
440
        'dr.rer.hum.' => 'Dr.rer.hum.',
441
        'dr. rer. med.' => 'Dr. rer. med.',
442
        'dr.rer.med.' => 'Dr.rer.med.',
443
        'dr. rer. medic.' => 'Dr. rer. medic.',
444
        'dr.rer.medic.' => 'Dr.rer.medic.',
445
        'dr. rer. merc.' => 'Dr. rer. merc.',
446
        'dr.rer.merc.' => 'Dr.rer.merc.',
447
        'dr. rer. mil.' => 'Dr. rer. mil.',
448
        'dr.rer.mil.' => 'Dr.rer.mil.',
449
        'dr. rer. mont.' => 'Dr. rer. mont.',
450
        'dr.rer.mont.' => 'Dr.rer.mont.',
451
        'dr. rer. nat.' => 'Dr. rer. nat.',
452
        'dr.rer.nat.' => 'Dr.rer.nat.',
453
        'dr. rer. oec.' => 'Dr. rer. oec.',
454
        'dr.rer.oec.' => 'Dr.rer.oec.',
455
        'dr. rer. physiol.' => 'Dr. rer. physiol.',
456
        'dr.rer.physiol.' => 'Dr.rer.physiol.',
457
        'dr. rer. pol.' => 'Dr. rer. pol.',
458
        'dr.rer.pol.' => 'Dr.rer.pol.',
459
        'dr. rer. publ.' => 'Dr. rer. publ.',
460
        'dr.rer.publ.' => 'Dr.rer.publ.',
461
        'dr. rer. publ. hsg' => 'Dr. rer. publ. HSG',
462
        'dr.rer.publ.hsg' => 'Dr.rer.publ.HSG',
463
        'dr. rer. rel.' => 'Dr. rer. rel.',
464
        'dr.rer.rel.' => 'Dr.rer.rel.',
465
        'dr. rer. sec.' => 'Dr. rer. sec.',
466
        'dr.rer.sec.' => 'Dr.rer.sec.',
467
        'dr. rer. silv.' => 'Dr. rer. silv.',
468
        'dr.rer.silv.' => 'Dr.rer.silv.',
469
        'dr. rer. soc.' => 'Dr. rer. soc.',
470
        'dr.rer.soc.' => 'Dr.rer.soc.',
471
        'dr. rer. soc. oec.' => 'Dr. rer. soc. oec.',
472
        'dr.rer.soc.oec.' => 'Dr.rer.soc.oec.',
473
        'dr. rer. tech.' => 'Dr. rer. tech.',
474
        'dr.rer.tech.' => 'Dr.rer.tech.',
475
        'dr. sc.' => 'Dr. sc.',
476
        'dr.sc.' => 'Dr.sc.',
477
        'dr. sc. eth zürich' => 'Dr. sc. ETH Zürich',
478
        'dr.sc.eth zürich' => 'Dr.sc.ETH Zürich',
479
        'dr. sc. agr.' => 'Dr. sc. agr.',
480
        'dr.sc.agr.' => 'Dr.sc.agr.',
481
        'dr. sc. hum.' => 'Dr. sc. hum.',
482
        'dr.sc.hum.' => 'Dr.sc.hum.',
483
        'dr. sc. inf.' => 'Dr. sc. inf.',
484
        'dr.sc.inf.' => 'Dr.sc.inf.',
485
        'dr. sc. inf. biomed.' => 'Dr. sc. inf. biomed.',
486
        'dr.sc.inf.biomed.' => 'Dr.sc.inf.biomed.',
487
        'dr. sc. inf. med.' => 'Dr. sc. inf. med.',
488
        'dr.sc.inf.med.' => 'Dr.sc.inf.med.',
489
        'dr. sc. math.' => 'Dr. sc. math.',
490
        'dr.sc.math.' => 'Dr.sc.math.',
491
        'dr. sc. med.' => 'Dr. sc. med.',
492
        'dr.sc.med.' => 'Dr.sc.med.',
493
        'dr. sc. mus.' => 'Dr. sc. mus.',
494
        'dr.sc.mus.' => 'Dr.sc.mus.',
495
        'dr. sc. nat.' => 'Dr. sc. nat.',
496
        'dr.sc.nat.' => 'Dr.sc.nat.',
497
        'dr. sc. oec.' => 'Dr. sc. oec.',
498
        'dr.sc.oec.' => 'Dr.sc.oec.',
499
        'dr. sc. pol.' => 'Dr. sc. pol.',
500
        'dr.sc.pol.' => 'Dr.sc.pol.',
501
        'dr. sc. rel.' => 'Dr. sc. rel.',
502
        'dr.sc.rel.' => 'Dr.sc.rel.',
503
        'dr. sc. soc.' => 'Dr. sc. soc.',
504
        'dr.sc.soc.' => 'Dr.sc.soc.',
505
        'dr. sc. techn.' => 'Dr. sc. techn.',
506
        'dr.sc.techn.' => 'Dr.sc.techn.',
507
        'dr. scient. med' => 'Dr. scient. med',
508
        'dr.scient.med' => 'Dr.scient.med',
509
        'dr. techn.' => 'Dr. techn.',
510
        'dr.techn.' => 'Dr.techn.',
511
        'dr. theol.' => 'Dr. theol.',
512
        'dr.theol.' => 'Dr.theol.',
513
        'dr. troph.' => 'Dr. troph.',
514
        'dr.troph.' => 'Dr.troph.',
515
        'dr.-ing.' => 'Dr.-Ing.',
516
        'ph. d.' => 'Ph. D.',
517
        'ph.d.' => 'Ph.D.',
518
    ];
519
520
    /**
521
     * the following list contains the academaic titles mainly for professors
522
     * from DACH (Germany, Austria, Swiss), which are often used in names as titles
523
     * @see https://de.wikipedia.org/wiki/Professor
524
     * this list is kept separate from TITLES to better maintain both
525
     */
526
    const OFFICIAL_TITLES = [
527
        'ao. univ.-prof.' => 'ao. Univ.-Prof.',
528
        'ao.univ.-prof.' => 'ao.Univ.-Prof.',
529
        'apl. prof.' => 'apl. Prof.',
530
        'apl.prof.' => 'apl.Prof.',
531
        'ass.-prof.' => 'Ass.-Prof.',
532
        'assoz. prof.' => 'assoz. Prof.',
533
        'assoz.prof.' => 'assoz.Prof.',
534
        'hon.-prof.' => 'Hon.-Prof.',
535
        'jun.-prof.' => 'Jun.-Prof.',
536
        'o. univ.-prof.' => 'o. Univ.-Prof.',
537
        'o.univ.-prof.' => 'o.Univ.-Prof.',
538
        'o.ö. prof.' => 'o.ö. Prof.',
539
        'o.ö.prof.' => 'o.ö.Prof.',
540
        'pd' => 'PD',
541
        'priv.-doz.' => 'Priv.-Doz.',
542
        'prof. em.' => 'Prof. em.',
543
        'prof. emer.' => 'Prof. emer.',
544
        'prof. h. c.' => 'Prof. h. c.',
545
        'prof. hon.' => 'Prof. hon.',
546
        'prof. i. k.' => 'Prof. i. K.',
547
        'prof.' => 'Prof.',
548
        'prof.em.' => 'Prof.em.',
549
        'prof.emer.' => 'Prof.emer.',
550
        'prof.h.c.' => 'Prof.h.c.',
551
        'prof.hon.' => 'Prof.hon.',
552
        'prof.i.k.' => 'Prof.i.K.',
553
        'professor' => 'Professor',
554
        'professorin' => 'Professorin',
555
        'tit. prof.' => 'Tit. Prof.',
556
        'tit.prof.' => 'Tit.Prof.',
557
        'univ.-prof.' => 'Univ.-Prof.',
558
    ];
559
560
    const JOB_TITLES = [
561
        'dipl.-ing.' => 'Dipl.-Ing.',
562
        'ra' => 'RA',
563
    ];
564
565
    const COMPANIES = [
566
        ' - ' => ' - ',
567
        '& co.' => '& Co.',
568
        '&' => '&',
569
        '+' => '+',
570
        'ag & co. kg' => 'AG & Co. KG',
571
        'ag & co. kgaa' => 'AG & Co. KGaA',
572
        'ag' => 'AG',
573
        'agentur' => 'Agentur',
574
        'aktien' => 'Aktien',
575
        'apotheke' => 'Apotheke',
576
        'bank' => 'Bank',
577
        'bkk' => 'BKK',
578
        'büro' => 'büro',
579
        'centrum' => 'Centrum',
580
        'dienst' => 'Dienst',
581
        'direct' => 'Direct',
582
        'direkt' => 'Direkt',
583
        'e. g.' => 'e. G.',
584
        'e. k.' => 'e. K.',
585
        'e. kfm' => 'e. Kfm',
586
        'e. kfr' => 'e. Kfr',
587
        'e.g.' => 'e.G.',
588
        'e.k.' => 'e.K.',
589
        'e.v.' => 'e.V.',
590
        'eg' => 'eG',
591
        'eingetragene kauffrau' => 'eingetragene Kauffrau',
592
        'eingetragener kaufmann' => 'eingetragener Kaufmann',
593
        'elektro' => 'Elektro',
594
        'finanz' => 'Finanz',
595
        'friseur' => 'Friseur',
596
        'frisier' => 'Frisier',
597
        'gbr' => 'GbR',
598
        'gen.' => 'Gen.',
599
        'genossenschaft' => 'Genossenschaft',
600
        'ges. m. b. h.' => 'Ges. m. b. H.',
601
        'ges.' => 'Ges.',
602
        'ges.m.b.h.' => 'Ges.m.b.H.',
603
        'gesellschaft' => 'Gesellschaft',
604
        'ggmbh' => 'gGmbH',
605
        'gmbh & co. kg' => 'GmbH & Co. KG',
606
        'gmbh & co. kgaa' => 'GmbH & Co. KGaA',
607
        'gmbh & co. ohg' => 'GmbH & Co. OHG',
608
        'gmbh' => 'GmbH',
609
        'gymnasium' => 'Gymnasium',
610
        'hotel' => 'Hotel',
611
        'i. g.' => 'i. G.',
612
        'i.g.' => 'i.G.',
613
        'kg' => 'KG',
614
        'kgaa' => 'KGaA',
615
        'krankenhaus' => 'Krankenhaus',
616
        'krankenkasse' => 'Krankenkasse',
617
        'llc & co. kg' => 'LLC & Co. KG',
618
        'mbh' => 'mbH',
619
        'ohg' => 'OHG',
620
        'polizei' => 'Polizei',
621
        'praxis' => 'Praxis',
622
        'restaurant' => 'Restaurant',
623
        'salon' => 'salon',
624
        'schule' => 'Schule',
625
        ' se' => ' SE',
626
        'service' => 'Service',
627
        'steuer' => 'Steuer',
628
        'stiftung' => 'Stiftung',
629
        'technik' => 'Technik',
630
        'theater' => 'Theater',
631
        'ug (haftungsbeschränkt)' => 'UG (haftungsbeschränkt)',
632
        'und co. kg' => 'und Co. KG',
633
        'und co.' => 'und Co.',
634
        'universität' => 'Universität',
635
        'unternehmergesellschaft (haftungsbeschränkt)' => 'Unternehmergesellschaft (haftungsbeschränkt)',
636
        'verband' => 'Verband',
637
        'verein' => 'Verein',
638
        'versicherung' => 'Versicherung',
639
        'verwaltung' => 'Verwaltung',
640
        'vvag' => 'VVaG',
641
        'zentrum' => 'Zentrum',
642
    ];
643
644
    public function getSuffixes(): array
645
    {
646
        return self::SUFFIXES;
647
    }
648
649
    public function getSalutations(): array
650
    {
651
        return self::SALUTATIONS;
652
    }
653
654
    public function getLastnamePrefixes(): array
655
    {
656
        return self::LASTNAME_PREFIXES;
657
    }
658
659
    public function getExtensions(): array
660
    {
661
        return self::EXTENSIONS;
662
    }
663
664
    public function getTitles(): array
665
    {
666
        return array_merge(self::TITLES_DR, self::OFFICIAL_TITLES, self::JOB_TITLES);
667
    }
668
669
    public function getCompanies(): array
670
    {
671
        return self::COMPANIES;
672
    }
673
}
674