typia 3.7.0-dev.20230310 → 3.7.0-dev.20230331

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/README.md +16 -45
  2. package/lib/IRandomGenerator.d.ts +2 -1
  3. package/lib/executable/TypiaSetupWizard.js +12 -2
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/factories/MetadataCollection.d.ts +9 -1
  6. package/lib/factories/MetadataCollection.js +75 -2
  7. package/lib/factories/MetadataCollection.js.map +1 -1
  8. package/lib/factories/MetadataTagFactory.js +151 -132
  9. package/lib/factories/MetadataTagFactory.js.map +1 -1
  10. package/lib/factories/TypeFactory.js +1 -1
  11. package/lib/factories/TypeFactory.js.map +1 -1
  12. package/lib/factories/TypiaFileFactory.js +61 -54
  13. package/lib/factories/TypiaFileFactory.js.map +1 -1
  14. package/lib/functional/$dictionary.d.ts +1 -0
  15. package/lib/functional/$dictionary.js +14 -0
  16. package/lib/functional/$dictionary.js.map +1 -0
  17. package/lib/functional/$is_custom.d.ts +2 -0
  18. package/lib/functional/$is_custom.js +12 -0
  19. package/lib/functional/$is_custom.js.map +1 -0
  20. package/lib/functional/$is_date.d.ts +1 -0
  21. package/lib/functional/$is_date.js +9 -0
  22. package/lib/functional/$is_date.js.map +1 -0
  23. package/lib/functional/$is_datetime.d.ts +1 -0
  24. package/lib/functional/$is_datetime.js +8 -0
  25. package/lib/functional/$is_datetime.js.map +1 -0
  26. package/lib/functional/Namespace.js +6 -0
  27. package/lib/functional/Namespace.js.map +1 -1
  28. package/lib/metadata/IMetadataTag.d.ts +30 -38
  29. package/lib/metadata/Metadata.js +2 -2
  30. package/lib/metadata/Metadata.js.map +1 -1
  31. package/lib/module.d.ts +25 -2
  32. package/lib/module.js +12 -5
  33. package/lib/module.js.map +1 -1
  34. package/lib/programmers/CheckerProgrammer.d.ts +2 -2
  35. package/lib/programmers/CheckerProgrammer.js +22 -22
  36. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  37. package/lib/programmers/CloneProgrammer.js +2 -2
  38. package/lib/programmers/CloneProgrammer.js.map +1 -1
  39. package/lib/programmers/FeatureProgrammer.d.ts +3 -2
  40. package/lib/programmers/FeatureProgrammer.js +5 -5
  41. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  42. package/lib/programmers/IsProgrammer.d.ts +1 -1
  43. package/lib/programmers/IsProgrammer.js +2 -2
  44. package/lib/programmers/IsProgrammer.js.map +1 -1
  45. package/lib/programmers/PruneProgrammer.js +2 -2
  46. package/lib/programmers/PruneProgrammer.js.map +1 -1
  47. package/lib/programmers/RandomProgrammer.js +1 -2
  48. package/lib/programmers/RandomProgrammer.js.map +1 -1
  49. package/lib/programmers/StringifyProgrammer.js +6 -6
  50. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  51. package/lib/programmers/helpers/UnionExplorer.d.ts +7 -7
  52. package/lib/programmers/helpers/UnionExplorer.js +6 -6
  53. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  54. package/lib/programmers/internal/application_object.js +11 -11
  55. package/lib/programmers/internal/application_object.js.map +1 -1
  56. package/lib/programmers/internal/application_schema.js +3 -5
  57. package/lib/programmers/internal/application_schema.js.map +1 -1
  58. package/lib/programmers/internal/application_string.js +8 -5
  59. package/lib/programmers/internal/application_string.js.map +1 -1
  60. package/lib/programmers/internal/check_array.js +36 -7
  61. package/lib/programmers/internal/check_array.js.map +1 -1
  62. package/lib/programmers/internal/check_bigint.d.ts +3 -1
  63. package/lib/programmers/internal/check_bigint.js +90 -61
  64. package/lib/programmers/internal/check_bigint.js.map +1 -1
  65. package/lib/programmers/internal/check_custom.d.ts +4 -0
  66. package/lib/programmers/internal/check_custom.js +30 -0
  67. package/lib/programmers/internal/check_custom.js.map +1 -0
  68. package/lib/programmers/internal/check_number.js +104 -75
  69. package/lib/programmers/internal/check_number.js.map +1 -1
  70. package/lib/programmers/internal/check_string.js +4 -3
  71. package/lib/programmers/internal/check_string.js.map +1 -1
  72. package/lib/programmers/internal/check_union_array_like.d.ts +2 -2
  73. package/lib/programmers/internal/check_union_array_like.js +4 -4
  74. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  75. package/lib/programmers/internal/check_union_tuple.js +2 -2
  76. package/lib/programmers/internal/check_union_tuple.js.map +1 -1
  77. package/lib/programmers/internal/feature_object_entries.js +1 -1
  78. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  79. package/lib/transformers/CallExpressionTransformer.js +1 -3
  80. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  81. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +3 -1
  82. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  83. package/lib/transformers/features/miscellaneous/CreateRandomGenerator.js +1 -1
  84. package/lib/transformers/features/miscellaneous/CreateRandomGenerator.js.map +1 -1
  85. package/lib/transformers/features/miscellaneous/RandomTransformer.js +1 -1
  86. package/lib/transformers/features/miscellaneous/RandomTransformer.js.map +1 -1
  87. package/lib/transformers/internal/GenericTransformer.js +2 -2
  88. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  89. package/lib/typings/Customizable.d.ts +7 -0
  90. package/lib/{messages/IProtocolMap.js → typings/Customizable.js} +1 -1
  91. package/lib/typings/Customizable.js.map +1 -0
  92. package/lib/utils/RandomGenerator.js +8 -2
  93. package/lib/utils/RandomGenerator.js.map +1 -1
  94. package/package.json +10 -9
  95. package/src/IRandomGenerator.ts +2 -1
  96. package/src/executable/TypiaSetupWizard.ts +16 -6
  97. package/src/factories/MetadataCollection.ts +41 -2
  98. package/src/factories/MetadataTagFactory.ts +186 -149
  99. package/src/factories/TypeFactory.ts +1 -1
  100. package/src/factories/TypiaFileFactory.ts +10 -7
  101. package/src/functional/$dictionary.ts +17 -0
  102. package/src/functional/$is_custom.ts +14 -0
  103. package/src/functional/$is_date.ts +4 -0
  104. package/src/functional/$is_datetime.ts +3 -0
  105. package/src/functional/Namespace.ts +6 -0
  106. package/src/metadata/IMetadataTag.ts +46 -70
  107. package/src/metadata/Metadata.ts +3 -6
  108. package/src/module.ts +39 -10
  109. package/src/programmers/CheckerProgrammer.ts +44 -14
  110. package/src/programmers/CloneProgrammer.ts +2 -0
  111. package/src/programmers/FeatureProgrammer.ts +12 -5
  112. package/src/programmers/IsProgrammer.ts +2 -1
  113. package/src/programmers/PruneProgrammer.ts +2 -0
  114. package/src/programmers/RandomProgrammer.ts +1 -4
  115. package/src/programmers/StringifyProgrammer.ts +6 -0
  116. package/src/programmers/helpers/UnionExplorer.ts +7 -0
  117. package/src/programmers/internal/application_object.ts +5 -5
  118. package/src/programmers/internal/application_schema.ts +3 -7
  119. package/src/programmers/internal/application_string.ts +6 -2
  120. package/src/programmers/internal/check_array.ts +19 -10
  121. package/src/programmers/internal/check_bigint.ts +77 -57
  122. package/src/programmers/internal/check_custom.ts +32 -0
  123. package/src/programmers/internal/check_number.ts +16 -6
  124. package/src/programmers/internal/check_string.ts +8 -2
  125. package/src/programmers/internal/check_union_array_like.ts +5 -0
  126. package/src/programmers/internal/check_union_tuple.ts +2 -0
  127. package/src/programmers/internal/feature_object_entries.ts +1 -0
  128. package/src/transformers/CallExpressionTransformer.ts +9 -16
  129. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +3 -1
  130. package/src/transformers/features/miscellaneous/CreateRandomGenerator.ts +1 -1
  131. package/src/transformers/features/miscellaneous/RandomTransformer.ts +1 -1
  132. package/src/transformers/internal/GenericTransformer.ts +2 -2
  133. package/src/typings/Customizable.ts +7 -0
  134. package/src/utils/RandomGenerator.ts +8 -2
  135. package/lib/factories/ProtocolFactory.d.ts +0 -8
  136. package/lib/factories/ProtocolFactory.js +0 -112
  137. package/lib/factories/ProtocolFactory.js.map +0 -1
  138. package/lib/factories/internal/protocols/ProtocolMetadataUtil.d.ts +0 -16
  139. package/lib/factories/internal/protocols/ProtocolMetadataUtil.js +0 -156
  140. package/lib/factories/internal/protocols/ProtocolMetadataUtil.js.map +0 -1
  141. package/lib/factories/internal/protocols/emplace_protocol_object.d.ts +0 -3
  142. package/lib/factories/internal/protocols/emplace_protocol_object.js +0 -47
  143. package/lib/factories/internal/protocols/emplace_protocol_object.js.map +0 -1
  144. package/lib/factories/internal/protocols/emplace_protocol_property.d.ts +0 -4
  145. package/lib/factories/internal/protocols/emplace_protocol_property.js +0 -20
  146. package/lib/factories/internal/protocols/emplace_protocol_property.js.map +0 -1
  147. package/lib/factories/internal/protocols/iterate_protocol_atomic.d.ts +0 -3
  148. package/lib/factories/internal/protocols/iterate_protocol_atomic.js +0 -69
  149. package/lib/factories/internal/protocols/iterate_protocol_atomic.js.map +0 -1
  150. package/lib/factories/internal/protocols/iterate_protocol_constant.d.ts +0 -2
  151. package/lib/factories/internal/protocols/iterate_protocol_constant.js +0 -30
  152. package/lib/factories/internal/protocols/iterate_protocol_constant.js.map +0 -1
  153. package/lib/factories/internal/protocols/iterate_protocol_main.d.ts +0 -3
  154. package/lib/factories/internal/protocols/iterate_protocol_main.js +0 -17
  155. package/lib/factories/internal/protocols/iterate_protocol_main.js.map +0 -1
  156. package/lib/factories/internal/protocols/iterate_protocol_map.d.ts +0 -4
  157. package/lib/factories/internal/protocols/iterate_protocol_map.js +0 -75
  158. package/lib/factories/internal/protocols/iterate_protocol_map.js.map +0 -1
  159. package/lib/factories/internal/protocols/iterate_protocol_metadata.d.ts +0 -5
  160. package/lib/factories/internal/protocols/iterate_protocol_metadata.js +0 -190
  161. package/lib/factories/internal/protocols/iterate_protocol_metadata.js.map +0 -1
  162. package/lib/factories/internal/protocols/iterate_protocol_native.d.ts +0 -2
  163. package/lib/factories/internal/protocols/iterate_protocol_native.js +0 -33
  164. package/lib/factories/internal/protocols/iterate_protocol_native.js.map +0 -1
  165. package/lib/factories/internal/protocols/iterate_protocol_never.d.ts +0 -1
  166. package/lib/factories/internal/protocols/iterate_protocol_never.js +0 -6
  167. package/lib/factories/internal/protocols/iterate_protocol_never.js.map +0 -1
  168. package/lib/factories/internal/protocols/iterate_protocol_object.d.ts +0 -4
  169. package/lib/factories/internal/protocols/iterate_protocol_object.js +0 -157
  170. package/lib/factories/internal/protocols/iterate_protocol_object.js.map +0 -1
  171. package/lib/factories/internal/protocols/iterate_protocol_repeated.d.ts +0 -5
  172. package/lib/factories/internal/protocols/iterate_protocol_repeated.js +0 -25
  173. package/lib/factories/internal/protocols/iterate_protocol_repeated.js.map +0 -1
  174. package/lib/factories/internal/protocols/iterate_protocol_tuple.d.ts +0 -3
  175. package/lib/factories/internal/protocols/iterate_protocol_tuple.js +0 -46
  176. package/lib/factories/internal/protocols/iterate_protocol_tuple.js.map +0 -1
  177. package/lib/functional/$proto_bytes.d.ts +0 -2
  178. package/lib/functional/$proto_bytes.js +0 -37
  179. package/lib/functional/$proto_bytes.js.map +0 -1
  180. package/lib/functional/$proto_field.d.ts +0 -10
  181. package/lib/functional/$proto_field.js +0 -42
  182. package/lib/functional/$proto_field.js.map +0 -1
  183. package/lib/functional/$proto_float.d.ts +0 -4
  184. package/lib/functional/$proto_float.js +0 -28
  185. package/lib/functional/$proto_float.js.map +0 -1
  186. package/lib/functional/$proto_i32.d.ts +0 -2
  187. package/lib/functional/$proto_i32.js +0 -23
  188. package/lib/functional/$proto_i32.js.map +0 -1
  189. package/lib/functional/$proto_i64.d.ts +0 -2
  190. package/lib/functional/$proto_i64.js +0 -31
  191. package/lib/functional/$proto_i64.js.map +0 -1
  192. package/lib/functional/$proto_size.d.ts +0 -6
  193. package/lib/functional/$proto_size.js +0 -76
  194. package/lib/functional/$proto_size.js.map +0 -1
  195. package/lib/functional/$proto_string.d.ts +0 -2
  196. package/lib/functional/$proto_string.js +0 -34
  197. package/lib/functional/$proto_string.js.map +0 -1
  198. package/lib/functional/$varint.d.ts +0 -6
  199. package/lib/functional/$varint.js +0 -99
  200. package/lib/functional/$varint.js.map +0 -1
  201. package/lib/functional/$zigzag.d.ts +0 -4
  202. package/lib/functional/$zigzag.js +0 -34
  203. package/lib/functional/$zigzag.js.map +0 -1
  204. package/lib/messages/IProtocolMap.d.ts +0 -5
  205. package/lib/messages/IProtocolMap.js.map +0 -1
  206. package/lib/messages/IProtocolMessage.d.ts +0 -5
  207. package/lib/messages/IProtocolMessage.js +0 -3
  208. package/lib/messages/IProtocolMessage.js.map +0 -1
  209. package/lib/messages/IProtocolProperty.d.ts +0 -12
  210. package/lib/messages/IProtocolProperty.js +0 -3
  211. package/lib/messages/IProtocolProperty.js.map +0 -1
  212. package/lib/programmers/MessageProgrammer.d.ts +0 -5
  213. package/lib/programmers/MessageProgrammer.js +0 -141
  214. package/lib/programmers/MessageProgrammer.js.map +0 -1
  215. package/lib/transformers/features/protocols/MessageTransformer.d.ts +0 -5
  216. package/lib/transformers/features/protocols/MessageTransformer.js +0 -17
  217. package/lib/transformers/features/protocols/MessageTransformer.js.map +0 -1
  218. package/lib/utils/NameEncoder.d.ts +0 -4
  219. package/lib/utils/NameEncoder.js +0 -89
  220. package/lib/utils/NameEncoder.js.map +0 -1
  221. package/src/factories/ProtocolFactory.ts +0 -79
  222. package/src/factories/internal/protocols/ProtocolMetadataUtil.ts +0 -163
  223. package/src/factories/internal/protocols/emplace_protocol_object.ts +0 -25
  224. package/src/factories/internal/protocols/emplace_protocol_property.ts +0 -12
  225. package/src/factories/internal/protocols/iterate_protocol_atomic.ts +0 -34
  226. package/src/factories/internal/protocols/iterate_protocol_constant.ts +0 -27
  227. package/src/factories/internal/protocols/iterate_protocol_main.ts +0 -19
  228. package/src/factories/internal/protocols/iterate_protocol_map.ts +0 -58
  229. package/src/factories/internal/protocols/iterate_protocol_metadata.ts +0 -96
  230. package/src/factories/internal/protocols/iterate_protocol_native.ts +0 -34
  231. package/src/factories/internal/protocols/iterate_protocol_never.ts +0 -1
  232. package/src/factories/internal/protocols/iterate_protocol_object.ts +0 -110
  233. package/src/factories/internal/protocols/iterate_protocol_repeated.ts +0 -34
  234. package/src/factories/internal/protocols/iterate_protocol_tuple.ts +0 -29
  235. package/src/functional/$proto_bytes.ts +0 -25
  236. package/src/functional/$proto_field.ts +0 -30
  237. package/src/functional/$proto_float.ts +0 -37
  238. package/src/functional/$proto_i32.ts +0 -29
  239. package/src/functional/$proto_i64.ts +0 -37
  240. package/src/functional/$proto_size.ts +0 -82
  241. package/src/functional/$proto_string.ts +0 -24
  242. package/src/functional/$varint.ts +0 -130
  243. package/src/functional/$zigzag.ts +0 -39
  244. package/src/messages/IProtocolMap.ts +0 -5
  245. package/src/messages/IProtocolMessage.ts +0 -6
  246. package/src/messages/IProtocolProperty.ts +0 -13
  247. package/src/programmers/MessageProgrammer.ts +0 -126
  248. package/src/transformers/features/protocols/MessageTransformer.ts +0 -32
  249. package/src/utils/NameEncoder.ts +0 -32
@@ -1,126 +0,0 @@
1
- import ts from "typescript";
2
-
3
- import { MetadataCollection } from "../factories/MetadataCollection";
4
- import { ProtocolFactory } from "../factories/ProtocolFactory";
5
-
6
- import { Metadata } from "../metadata/Metadata";
7
-
8
- import { IProject } from "../transformers/IProject";
9
-
10
- import { Escaper } from "../utils/Escaper";
11
- import { MapUtil } from "../utils/MapUtil";
12
- import { NameEncoder } from "../utils/NameEncoder";
13
-
14
- import { IProtocolMap } from "../messages/IProtocolMap";
15
- import { IProtocolMessage } from "../messages/IProtocolMessage";
16
-
17
- export namespace MessageProgrammer {
18
- export const generate =
19
- ({ checker }: IProject) =>
20
- (type: ts.Type) => {
21
- // PARSE TARGET TYPE
22
- const collection: MetadataCollection = new MetadataCollection();
23
- const metadata: Metadata =
24
- ProtocolFactory.metadata(checker)(collection)(type);
25
-
26
- // CONVERT TO PROTOCOL MESSAGES
27
- const dict: Map<string, IProtocolMessage> = new Map();
28
- ProtocolFactory.generate(collection)(dict)(metadata);
29
-
30
- // STRINGIFY
31
- const hierarchies: Map<string, Hierarchy> = new Map();
32
- for (const msg of dict.values()) emplace(hierarchies)(msg);
33
-
34
- const content: string =
35
- `syntax = "proto3";\n\n` +
36
- [...hierarchies.values()]
37
- .map((hier) => stringify(hier))
38
- .join("\n\n");
39
-
40
- // RETURNS
41
- return ts.factory.createStringLiteral(content);
42
- };
43
-
44
- const stringify = (hierarchy: Hierarchy): string => {
45
- const { key, message, children } = hierarchy;
46
- let index: number = 1;
47
-
48
- const elements: string[] = [`message ${NameEncoder.encode(key)} {`];
49
- if (message !== null)
50
- elements.push(
51
- ...message.properties.map((property) => {
52
- const key: string =
53
- Escaper.variable(property.key) &&
54
- property.key.indexOf("$") === -1
55
- ? property.key
56
- : `v${index + 1}`;
57
- if (property.oneOf.length === 1)
58
- return [
59
- TAB,
60
- property.required ? "" : "optional ",
61
- property.repeated ? "repeated " : "",
62
- getTypeName(property.oneOf[0]!.type) + " ",
63
- key,
64
- " = ",
65
- `${index++};`,
66
- ].join("");
67
- return (
68
- `${TAB}oneof ${key} {\n` +
69
- property.oneOf
70
- .map(
71
- (o, i) =>
72
- `${TAB}${TAB}${getTypeName(
73
- o.type,
74
- )} ${key}_o${i} = ${index++};`,
75
- )
76
- .join("\n") +
77
- `\n${TAB}}`
78
- );
79
- }),
80
- );
81
- if (message !== null && children.size) elements.push("\n");
82
- if (children.size)
83
- elements.push(
84
- [...children.values()]
85
- .map((child) => stringify(child))
86
- .map((body) =>
87
- body
88
- .split("\n")
89
- .map((line) => `${TAB}${line}`)
90
- .join("\n"),
91
- )
92
- .join("\n\n"),
93
- );
94
- elements.push("}");
95
-
96
- return elements.join("\n");
97
- };
98
-
99
- const emplace =
100
- (dict: Map<string, Hierarchy>) => (message: IProtocolMessage) => {
101
- const accessors: string[] = message.name.split(".");
102
- accessors.forEach((access, i) => {
103
- const hierarchy: Hierarchy = MapUtil.take(dict, access, () => ({
104
- key: access,
105
- message: null!,
106
- children: new Map(),
107
- }));
108
- dict = hierarchy.children;
109
- if (i === accessors.length - 1) hierarchy.message = message;
110
- });
111
- };
112
-
113
- function getTypeName(type: string | IProtocolMap): string {
114
- return typeof type === "string"
115
- ? NameEncoder.encode(type)
116
- : `map<${type.key}, ${getTypeName(type.value)}>`;
117
- }
118
- }
119
-
120
- interface Hierarchy {
121
- key: string;
122
- message: IProtocolMessage | null;
123
- children: Map<string, Hierarchy>;
124
- }
125
-
126
- const TAB = " ".repeat(4);
@@ -1,32 +0,0 @@
1
- import ts from "typescript";
2
-
3
- import { MessageProgrammer } from "../../../programmers/MessageProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace MessageTransformer {
8
- export function transform(
9
- project: IProject,
10
- _modulo: ts.LeftHandSideExpression,
11
- expression: ts.CallExpression,
12
- ): ts.Expression {
13
- // CHECK GENERIC ARGUMENT EXISTENCE
14
- if (!expression.typeArguments || !expression.typeArguments[0])
15
- throw new Error(ErrorMessages.NOT_SPECIFIED);
16
-
17
- // GET TYPE INFO
18
- const type: ts.Type = project.checker.getTypeFromTypeNode(
19
- expression.typeArguments[0],
20
- );
21
- if (type.isTypeParameter())
22
- throw new Error(ErrorMessages.GENERIC_ARGUMENT);
23
-
24
- // DO TRANSFORM
25
- return MessageProgrammer.generate(project)(type);
26
- }
27
- }
28
-
29
- const enum ErrorMessages {
30
- NOT_SPECIFIED = "Error on typia.message(): generic argument is not specified.",
31
- GENERIC_ARGUMENT = "Error on typia.message(): non-specified generic argument.",
32
- }
@@ -1,32 +0,0 @@
1
- export namespace NameEncoder {
2
- export function encode(str: string): string {
3
- for (const [before, after] of REPLACERS)
4
- str = str.split(before).join(after);
5
- return str;
6
- }
7
-
8
- export function decode(str: string): string {
9
- for (const [before, after] of REPLACERS)
10
- if (after !== "") str = str.split(after).join(before);
11
- return str;
12
- }
13
- }
14
-
15
- const REPLACERS: [string, string][] = [
16
- ["$", "_dollar_"],
17
- ["&", "_and_"],
18
- ["|", "_or_"],
19
- ["{", "_blt_"],
20
- ["}", "_bgt_"],
21
- ["<", "_lt_"],
22
- [">", "_gt_"],
23
- ["(", "_lp_"],
24
- [")", "_rp_"],
25
- ["[", "_alt_"],
26
- ["]", "_agt_"],
27
- [",", "_comma_"],
28
- ["`", "_backquote_"],
29
- ["'", "_singlequote_"],
30
- ['"', "_doublequote_"],
31
- [" ", "_space_"],
32
- ];