@@ -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