| 68 | |
| 69 | |
| 70 | static size_t ParseFormatString(const char * format, char * out, size_t out_len) |
| 71 | { |
| 72 | ETerminalColour tc = TC_DEFAULT; |
| 73 | |
| 74 | const char * p = format; |
| 75 | char * o = out; |
| 76 | |
| 77 | size_t len = 0; |
| 78 | while (*p) |
| 79 | { |
| 80 | if (*p == '[') |
| 81 | { |
| 82 | ++p; |
| 83 | |
| 84 | tc = GetTerminalColour( *p ); |
| 85 | const char * str = GetTerminalColourString(tc); |
| 86 | size_t str_len = strlen(str); |
| 87 | |
| 88 | len += str_len; |
| 89 | if (o) |
| 90 | { |
| 91 | strcpy(o, str); |
| 92 | o += str_len; |
| 93 | } |
| 94 | } |
| 95 | else if (*p == ']') |
| 96 | { |
| 97 | tc = TC_DEFAULT; |
| 98 | const char * str = GetTerminalColourString(tc); |
| 99 | size_t str_len = strlen(str); |
| 100 | len += str_len; |
| 101 | if (o) |
| 102 | { |
| 103 | strcpy(o, str); |
| 104 | o += str_len; |
| 105 | } |
| 106 | } |
| 107 | else |
| 108 | { |
| 109 | ++len; |
| 110 | if (o) |
| 111 | { |
| 112 | *o = *p; |
| 113 | ++o; |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | ++p; |
| 118 | } |
| 119 | |
| 120 | if (tc != TC_DEFAULT) |
| 121 | { |
| 122 | tc = TC_DEFAULT; |
| 123 | const char * str = GetTerminalColourString(tc); |
| 124 | size_t str_len = strlen(str); |
| 125 | len += str_len; |
| 126 | if (o) |
| 127 | { |
no test coverage detected