MCPcopy Create free account
hub / github.com/Predelnik/DSpellCheck / match_special_char

Function match_special_char

src/common/Utility.cpp:83–151  ·  view source on GitHub ↗

This function is more or less transferred from gcc source

Source from the content-addressed store, hash-verified

81
82// This function is more or less transferred from gcc source
83bool match_special_char(wchar_t *dest, const wchar_t *&source) {
84 wchar_t c;
85
86 bool m = true;
87 auto assign = [dest](wchar_t c) {
88 if (dest != nullptr)
89 *dest = c;
90 };
91
92 switch (c = *(source++)) {
93 case L'a':
94 assign(L'\a');
95 break;
96 case L'b':
97 assign(L'\b');
98 break;
99 case L't':
100 assign(L'\t');
101 break;
102 case L'f':
103 assign(L'\f');
104 break;
105 case L'n':
106 assign(L'\n');
107 break;
108 case L'r':
109 assign(L'\r');
110 break;
111 case L'v':
112 assign(L'\v');
113 break;
114 case L'\\':
115 assign(L'\\');
116 break;
117 case L'0':
118 assign(L'\0');
119 break;
120
121 case L'x':
122 case L'u':
123 case L'U': {
124 /* Hexadecimal form of wide characters. */
125 int len = (c == L'x' ? 2 : (c == L'u' ? 4 : 8));
126 wchar_t n = 0;
127#ifndef UNICODE
128 len = 2;
129#endif
130 for (int i = 0; i < len; i++) {
131 wchar_t buf[2] = {L'\0', L'\0'};
132
133 c = *(source++);
134 if (c > UCHAR_MAX || !((L'0' <= c && c <= L'9') || (L'a' <= c && c <= L'f') || (L'A' <= c && c <= L'F')))
135 return false;
136
137 buf[0] = c;
138 n = n << 4;
139 n += static_cast<wchar_t>(wcstol(buf, nullptr, 16));
140 }

Callers 1

do_parse_stringFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected