| 942 | } |
| 943 | |
| 944 | txString fxStringifyUnicodeEscape(txString string, txInteger character, txInteger separator) |
| 945 | { |
| 946 | const char* digits = (separator == '%') ? gxHexUpper : gxHexLower; |
| 947 | txU1* p = (txU1*)string; |
| 948 | txInteger surrogate; |
| 949 | if (character > 0xFFFF) { |
| 950 | character -= 0x10000; |
| 951 | surrogate = 0xDC00 | (character & 0x3FF); |
| 952 | character = 0xD800 | (character >> 10); |
| 953 | } |
| 954 | else |
| 955 | surrogate = 0; |
| 956 | *p++ = c_read8(digits + ((character & 0x0000F000) >> 12)); |
| 957 | *p++ = c_read8(digits + ((character & 0x00000F00) >> 8)); |
| 958 | *p++ = c_read8(digits + ((character & 0x000000F0) >> 4)); |
| 959 | *p++ = c_read8(digits + (character & 0x0000000F)); |
| 960 | if (surrogate) { |
| 961 | *p++ = separator; |
| 962 | *p++ = 'u'; |
| 963 | *p++ = c_read8(digits + ((surrogate & 0x0000F000) >> 12)); |
| 964 | *p++ = c_read8(digits + ((surrogate & 0x00000F00) >> 8)); |
| 965 | *p++ = c_read8(digits + ((surrogate & 0x000000F0) >> 4)); |
| 966 | *p++ = c_read8(digits + (surrogate & 0x0000000F)); |
| 967 | } |
| 968 | return (txString)p; |
| 969 | } |
| 970 | |
| 971 | int fxUTF8Compare(txString p1, txString p2) |
| 972 | { |
no outgoing calls
no test coverage detected