Auto status change to "Under Review"
| @@ -1,52 +1,52 | |||||
| 1 | using Implab; |
|
1 | using Implab; | |
| 2 | using Implab.Formats; |
|
2 | using Implab.Formats; | |
| 3 | using System; |
|
3 | using System; | |
| 4 | using System.Collections.Generic; |
|
4 | using System.Collections.Generic; | |
| 5 | using System.Diagnostics; |
|
5 | using System.Diagnostics; | |
| 6 | using System.Linq; |
|
6 | using System.Linq; | |
| 7 | using System.Text; |
|
7 | using System.Text; | |
| 8 | using System.Threading.Tasks; |
|
8 | using System.Threading.Tasks; | |
| 9 |
|
9 | |||
| 10 | namespace Implab.Formats.JSON { |
|
10 | namespace Implab.Formats.JSON { | |
| 11 | /// <summary> |
|
11 | /// <summary> | |
| 12 | /// ΠΠ»Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ JSON |
|
12 | /// ΠΠ»Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ JSON | |
| 13 | /// </summary> |
|
13 | /// </summary> | |
| 14 | static class StringTranslator { |
|
14 | static class StringTranslator { | |
| 15 | static readonly char[] _escMap; |
|
15 | static readonly char[] _escMap; | |
| 16 | static readonly int[] _hexMap; |
|
16 | static readonly int[] _hexMap; | |
| 17 |
|
17 | |||
| 18 | static StringTranslator() { |
|
18 | static StringTranslator() { | |
| 19 | var chars = new char[] { 'b', 'f', 't', 'r', 'n', '\\', '/' }; |
|
19 | var chars = new char[] { 'b', 'f', 't', 'r', 'n', '\\', '/', '"' }; | |
| 20 | var vals = new char[] { '\b', '\f', '\t', '\r', '\n', '\\', '/' }; |
|
20 | var vals = new char[] { '\b', '\f', '\t', '\r', '\n', '\\', '/', '"' }; | |
| 21 |
|
21 | |||
| 22 | _escMap = new char[chars.Max() + 1]; |
|
22 | _escMap = new char[chars.Max() + 1]; | |
| 23 |
|
23 | |||
| 24 | for (int i = 0; i < chars.Length; i++) |
|
24 | for (int i = 0; i < chars.Length; i++) | |
| 25 | _escMap[chars[i]] = vals[i]; |
|
25 | _escMap[chars[i]] = vals[i]; | |
| 26 |
|
26 | |||
| 27 | var hexs = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F' }; |
|
27 | var hexs = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F' }; | |
| 28 | var ints = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 10, 11, 12, 13, 14, 15 }; |
|
28 | var ints = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 10, 11, 12, 13, 14, 15 }; | |
| 29 |
|
29 | |||
| 30 | _hexMap = new int[hexs.Max() + 1]; |
|
30 | _hexMap = new int[hexs.Max() + 1]; | |
| 31 |
|
31 | |||
| 32 | for (int i = 0; i < hexs.Length; i++) |
|
32 | for (int i = 0; i < hexs.Length; i++) | |
| 33 | _hexMap[hexs[i]] = ints[i]; |
|
33 | _hexMap[hexs[i]] = ints[i]; | |
| 34 |
|
34 | |||
| 35 | } |
|
35 | } | |
| 36 |
|
36 | |||
| 37 | internal static char TranslateEscapedChar(char symbol) { |
|
37 | internal static char TranslateEscapedChar(char symbol) { | |
| 38 | return _escMap[symbol]; |
|
38 | return _escMap[symbol]; | |
| 39 | } |
|
39 | } | |
| 40 |
|
40 | |||
| 41 | internal static char TranslateHexUnicode(char[] symbols, int offset) { |
|
41 | internal static char TranslateHexUnicode(char[] symbols, int offset) { | |
| 42 | Debug.Assert(symbols != null); |
|
42 | Debug.Assert(symbols != null); | |
| 43 | Debug.Assert(symbols.Length - offset >= 4); |
|
43 | Debug.Assert(symbols.Length - offset >= 4); | |
| 44 |
|
44 | |||
| 45 | int value = (_hexMap[symbols[offset]] << 12) |
|
45 | int value = (_hexMap[symbols[offset]] << 12) | |
| 46 | | (_hexMap[symbols[offset + 1]] << 8) |
|
46 | | (_hexMap[symbols[offset + 1]] << 8) | |
| 47 | | (_hexMap[symbols[offset + 2]] << 4) |
|
47 | | (_hexMap[symbols[offset + 2]] << 4) | |
| 48 | | (_hexMap[symbols[offset + 3]]); |
|
48 | | (_hexMap[symbols[offset + 3]]); | |
| 49 | return (char)value; |
|
49 | return (char)value; | |
| 50 | } |
|
50 | } | |
| 51 | } |
|
51 | } | |
| 52 | } |
|
52 | } | |
General Comments 3
ok, latest stable version should be in default
You need to be logged in to leave comments.
Login now
