Skip to content
This repository was archived by the owner on May 20, 2024. It is now read-only.

Commit 6c3d397

Browse files
authored
Improve lower/uppercast functions, add support of specific Ukraininan and Belarusian letters (#21)
1 parent fdc8636 commit 6c3d397

File tree

1 file changed

+69
-31
lines changed

1 file changed

+69
-31
lines changed

src/hook/hooks.cpp

Lines changed: 69 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -346,40 +346,59 @@ namespace Hooks {
346346
s -= (char)97;
347347
s += (char)65;
348348
}
349-
// cyrillic capitalize
349+
// cyrillic cp1251 capitalize
350350
if (s >= (char)224 && s <= (char)255) {
351351
s -= char(224);
352352
s += char(192);
353353
}
354-
// cyrillic ё
355-
if (s == (char)184) {
356-
s = (char)168;
354+
355+
switch (s) {
356+
// cyrillic cp1251 non-range capitalize
357+
case (char)0xB8: // ё -> Ё
358+
s = (char)0xA8;
359+
break;
360+
case (char)0xBA: // є -> Є
361+
s = (char)0xAA;
362+
break;
363+
case (char)0xBF: // ї -> Ї
364+
s = (char)0xAF;
365+
break;
366+
case (char)0xB3: // і -> І
367+
s = (char)0xB2;
368+
break;
369+
case (char)0xB4: // ґ -> Ґ
370+
s = (char)0xA5;
371+
break;
372+
case (char)0xA2: // ў -> Ў
373+
s = (char)0xA1;
374+
break;
357375
}
358376

359377
if (fix) {
378+
// cp437 capitalize latin characters with diacritics
360379
switch (s) {
361-
case (char)129:
380+
case (char)129: // ü -> Ü
362381
s = (char)154;
363382
break;
364-
case (char)164:
383+
case (char)164: // ñ -> Ñ
365384
s = (char)165;
366385
break;
367-
case (char)132:
386+
case (char)132: // ä -> Ä
368387
s = (char)142;
369388
break;
370-
case (char)134:
389+
case (char)134: // å -> Å
371390
s = (char)143;
372391
break;
373-
case (char)130:
392+
case (char)130: // é -> É
374393
s = (char)144;
375394
break;
376-
case (char)148:
395+
case (char)148: // ö -> Ö
377396
s = (char)153;
378397
break;
379-
case (char)135:
398+
case (char)135: // ç -> Ç
380399
s = (char)128;
381400
break;
382-
case (char)145:
401+
case (char)145: // æ -> Æ
383402
s = (char)146;
384403
break;
385404
}
@@ -393,40 +412,59 @@ namespace Hooks {
393412
s -= (char)65;
394413
s += (char)97;
395414
}
396-
// cyrillic lowercast
415+
// cyrillic cp1251 lowercast
397416
if (s >= (char)192 && s <= (char)223) {
398417
s -= (char)192;
399418
s += (char)224;
400419
}
401-
// cyrillic ё
402-
if (s == (char)168) {
403-
s = (char)184;
420+
421+
switch (s) {
422+
// cyrillic cp1251 non-range lowercast
423+
case (char)0xA8: // Ё -> ё
424+
s = (char)0xB8;
425+
break;
426+
case (char)0xAA: // Є -> є
427+
s = (char)0xBA;
428+
break;
429+
case (char)0xAF: // Ї -> ї
430+
s = (char)0xBF;
431+
break;
432+
case (char)0xB2: // І -> і
433+
s = (char)0xB3;
434+
break;
435+
case (char)0xA5: // Ґ -> ґ
436+
s = (char)0xB4;
437+
break;
438+
case (char)0xA1: // Ў -> ў
439+
s = (char)0xA2;
440+
break;
404441
}
405442

406443
if (fix) {
444+
// cp437 lowercast latin characters with diacritics
407445
switch (s) {
408-
case (char)154:
446+
case (char)154: // Ü -> ü
409447
s = (char)129;
410448
break;
411-
case (char)165:
449+
case (char)165: // Ñ -> ñ
412450
s = (char)164;
413451
break;
414-
case (char)142:
452+
case (char)142: // Ä -> ä
415453
s = (char)132;
416454
break;
417-
case (char)143:
455+
case (char)143: // Å -> å
418456
s = (char)134;
419457
break;
420-
case (char)144:
458+
case (char)144: // É -> é
421459
s = (char)130;
422460
break;
423-
case (char)153:
461+
case (char)153: // Ö -> ö
424462
s = (char)148;
425463
break;
426-
case (char)128:
464+
case (char)128: // Ç -> ç
427465
s = (char)135;
428466
break;
429-
case (char)146:
467+
case (char)146: // Æ -> æ
430468
s = (char)145;
431469
break;
432470
}
@@ -538,14 +576,14 @@ namespace Hooks {
538576
case (char)151:
539577
case (char)154:
540578
case (char)163:
541-
str[s] = 'u';
579+
str[s] = 'u'; // üûùÜú -> u
542580
break;
543581
case (char)152:
544-
str[s] = 'y';
582+
str[s] = 'y'; // ÿ -> y
545583
break;
546584
case (char)164:
547585
case (char)165:
548-
str[s] = 'n';
586+
str[s] = 'n'; // ñÑ -> n
549587
break;
550588
case (char)131:
551589
case (char)132:
@@ -556,7 +594,7 @@ namespace Hooks {
556594
case (char)145:
557595
case (char)146:
558596
case (char)160:
559-
str[s] = 'a';
597+
str[s] = 'a'; // âäàåÄÅæÆá -> a
560598
break;
561599
case (char)130:
562600
case (char)136:
@@ -569,18 +607,18 @@ namespace Hooks {
569607
case (char)140:
570608
case (char)141:
571609
case (char)161:
572-
str[s] = 'i';
610+
str[s] = 'i'; // ïîìí -> i
573611
break;
574612
case (char)147:
575613
case (char)148:
576614
case (char)149:
577615
case (char)153:
578616
case (char)162:
579-
str[s] = 'o';
617+
str[s] = 'o'; // ôöòÖó -> o
580618
break;
581619
case (char)128:
582620
case (char)135:
583-
str[s] = 'c';
621+
str[s] = 'c'; // Çç -> c
584622
break;
585623
}
586624
}

0 commit comments

Comments
 (0)