]> gitweb.hhaalo.de Git - mv_none_space.git/commitdiff
refator replace wide char
authorBastian Dehn <hhaalo@arcor.de>
Fri, 27 Feb 2026 16:20:08 +0000 (17:20 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Fri, 27 Feb 2026 16:20:08 +0000 (17:20 +0100)
src/rename.c

index e017bc747142a422ab8cc765bbadc878b5608a2c..2dd57e92df57755ab57e5d252e144a24817b8dff 100644 (file)
@@ -3,6 +3,42 @@
 #include <string.h>
 #include "rename.h"
 
+void _replace_two_byte_wide_char(const char character, char* dest)
+{
+       switch (character) {
+       case WIDE_CHAR_a:
+               dest[0] = 'a';
+               dest[1] = 'e';
+               break;
+       case WIDE_CHAR_A:
+               dest[0] = 'A';
+               dest[1] = 'e';
+               break;
+       case WIDE_CHAR_o:
+               dest[0] = 'o';
+               dest[1] = 'e';
+               break;
+       case WIDE_CHAR_O:
+               dest[0] = 'O';
+               dest[1] = 'e';
+               break;
+       case WIDE_CHAR_u:
+               dest[0] = 'u';
+               dest[1] = 'e';
+               break;
+       case WIDE_CHAR_U:
+               dest[0] = 'U';
+               dest[1] = 'e';
+               break;
+       case WIDE_CHAR_SS:
+               dest[0] = 's';
+               dest[1] = 's';
+               break;
+       default:
+               break;
+       }
+}
+
 unsigned int wide_char_length(const char character)
 {
        unsigned int count = 0;
@@ -103,39 +139,20 @@ char* rename_string(const char* src)
        memset(dest, 0, STR_MAX_LENGTH);
        int dest_count = 0;
        size_t length = strlen(src);
+       unsigned int wide_char_len = 0;
        for (size_t i = 0; i < length; i++) {
-               if (src[i] == SPACE) {
-                       dest[dest_count++] = '_';
-               } else if (src[i] == WIDE_CHAR_PREFIX && src[i + 1] == WIDE_CHAR_a) {
-                       i++;
-                       dest[dest_count++] = 'a';
-                       dest[dest_count++] = 'e';
-               } else if (src[i] == WIDE_CHAR_PREFIX && src[i + 1] == WIDE_CHAR_A) {
-                       i++;
-                       dest[dest_count++] = 'A';
-                       dest[dest_count++] = 'e';
-               } else if (src[i] == WIDE_CHAR_PREFIX && src[i + 1] == WIDE_CHAR_o) {
-                       i++;
-                       dest[dest_count++] = 'o';
-                       dest[dest_count++] = 'e';
-               } else if (src[i] == WIDE_CHAR_PREFIX && src[i + 1] == WIDE_CHAR_O) {
-                       i++;
-                       dest[dest_count++] = 'O';
-                       dest[dest_count++] = 'e';
-               } else if (src[i] == WIDE_CHAR_PREFIX && src[i + 1] == WIDE_CHAR_u) {
-                       i++;
-                       dest[dest_count++] = 'u';
-                       dest[dest_count++] = 'e';
-               } else if (src[i] == WIDE_CHAR_PREFIX && src[i + 1] == WIDE_CHAR_U) {
-                       i++;
-                       dest[dest_count++] = 'U';
-                       dest[dest_count++] = 'e';
-               } else if (src[i] == WIDE_CHAR_PREFIX && src[i + 1] == WIDE_CHAR_SS) {
+               wide_char_len = wide_char_length(src[i]);
+               if (wide_char_len == 0) {
+                       if (src[i] == SPACE)
+                               dest[dest_count++] = '_';
+                       else
+                               dest[dest_count++] = src[i];
+               }
+
+               if (wide_char_len == 2) {
+                       _replace_two_byte_wide_char(src[i + 1], &dest[dest_count]);
+                       dest_count += 2;
                        i++;
-                       dest[dest_count++] = 's';
-                       dest[dest_count++] = 's';
-               } else {
-                       dest[dest_count++] = src[i];
                }
        }