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