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

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