blob: 9fd903fd2b6779207912fb2cc7df4e4d320e000f [file] [log] [blame]
Don Newton379ae252019-04-01 12:17:06 -04001// Copyright (C) MongoDB, Inc. 2017-present.
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may
4// not use this file except in compliance with the License. You may obtain
5// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6//
7// Based on github.com/golang/go by The Go Authors
8// See THIRD-PARTY-NOTICES for original license terms.
9
10package bsoncore
11
12import "unicode/utf8"
13
14// safeSet holds the value true if the ASCII character with the given array
15// position can be represented inside a JSON string without any further
16// escaping.
17//
18// All values are true except for the ASCII control characters (0-31), the
19// double quote ("), and the backslash character ("\").
20var safeSet = [utf8.RuneSelf]bool{
21 ' ': true,
22 '!': true,
23 '"': false,
24 '#': true,
25 '$': true,
26 '%': true,
27 '&': true,
28 '\'': true,
29 '(': true,
30 ')': true,
31 '*': true,
32 '+': true,
33 ',': true,
34 '-': true,
35 '.': true,
36 '/': true,
37 '0': true,
38 '1': true,
39 '2': true,
40 '3': true,
41 '4': true,
42 '5': true,
43 '6': true,
44 '7': true,
45 '8': true,
46 '9': true,
47 ':': true,
48 ';': true,
49 '<': true,
50 '=': true,
51 '>': true,
52 '?': true,
53 '@': true,
54 'A': true,
55 'B': true,
56 'C': true,
57 'D': true,
58 'E': true,
59 'F': true,
60 'G': true,
61 'H': true,
62 'I': true,
63 'J': true,
64 'K': true,
65 'L': true,
66 'M': true,
67 'N': true,
68 'O': true,
69 'P': true,
70 'Q': true,
71 'R': true,
72 'S': true,
73 'T': true,
74 'U': true,
75 'V': true,
76 'W': true,
77 'X': true,
78 'Y': true,
79 'Z': true,
80 '[': true,
81 '\\': false,
82 ']': true,
83 '^': true,
84 '_': true,
85 '`': true,
86 'a': true,
87 'b': true,
88 'c': true,
89 'd': true,
90 'e': true,
91 'f': true,
92 'g': true,
93 'h': true,
94 'i': true,
95 'j': true,
96 'k': true,
97 'l': true,
98 'm': true,
99 'n': true,
100 'o': true,
101 'p': true,
102 'q': true,
103 'r': true,
104 's': true,
105 't': true,
106 'u': true,
107 'v': true,
108 'w': true,
109 'x': true,
110 'y': true,
111 'z': true,
112 '{': true,
113 '|': true,
114 '}': true,
115 '~': true,
116 '\u007f': true,
117}
118
119// htmlSafeSet holds the value true if the ASCII character with the given
120// array position can be safely represented inside a JSON string, embedded
121// inside of HTML <script> tags, without any additional escaping.
122//
123// All values are true except for the ASCII control characters (0-31), the
124// double quote ("), the backslash character ("\"), HTML opening and closing
125// tags ("<" and ">"), and the ampersand ("&").
126var htmlSafeSet = [utf8.RuneSelf]bool{
127 ' ': true,
128 '!': true,
129 '"': false,
130 '#': true,
131 '$': true,
132 '%': true,
133 '&': false,
134 '\'': true,
135 '(': true,
136 ')': true,
137 '*': true,
138 '+': true,
139 ',': true,
140 '-': true,
141 '.': true,
142 '/': true,
143 '0': true,
144 '1': true,
145 '2': true,
146 '3': true,
147 '4': true,
148 '5': true,
149 '6': true,
150 '7': true,
151 '8': true,
152 '9': true,
153 ':': true,
154 ';': true,
155 '<': false,
156 '=': true,
157 '>': false,
158 '?': true,
159 '@': true,
160 'A': true,
161 'B': true,
162 'C': true,
163 'D': true,
164 'E': true,
165 'F': true,
166 'G': true,
167 'H': true,
168 'I': true,
169 'J': true,
170 'K': true,
171 'L': true,
172 'M': true,
173 'N': true,
174 'O': true,
175 'P': true,
176 'Q': true,
177 'R': true,
178 'S': true,
179 'T': true,
180 'U': true,
181 'V': true,
182 'W': true,
183 'X': true,
184 'Y': true,
185 'Z': true,
186 '[': true,
187 '\\': false,
188 ']': true,
189 '^': true,
190 '_': true,
191 '`': true,
192 'a': true,
193 'b': true,
194 'c': true,
195 'd': true,
196 'e': true,
197 'f': true,
198 'g': true,
199 'h': true,
200 'i': true,
201 'j': true,
202 'k': true,
203 'l': true,
204 'm': true,
205 'n': true,
206 'o': true,
207 'p': true,
208 'q': true,
209 'r': true,
210 's': true,
211 't': true,
212 'u': true,
213 'v': true,
214 'w': true,
215 'x': true,
216 'y': true,
217 'z': true,
218 '{': true,
219 '|': true,
220 '}': true,
221 '~': true,
222 '\u007f': true,
223}