Merge branch 'filters' into render
This commit is contained in:
		
						commit
						f16c3a4fa1
					
				
							
								
								
									
										13
									
								
								js/test_cases/filters/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								js/test_cases/filters/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| HTML Escaping | ||||
| ------------- | ||||
| 
 | ||||
| Dust automatically applies the `|h` filter to html escape unless `|s` is applied to disable automatic html escaping. It seems that if you manually specify `|h` and `|s` in the same filter, then it still html escapes, so my theory on the logic is: | ||||
| 
 | ||||
| Iterate over all filters   | ||||
| If `|s` is not present append `|h`, otherwise, leave filters as-in   | ||||
| During render, `|s` does nothing, so we can just remove it on the dust side to prevent confusion.   | ||||
| 
 | ||||
| Quoting | ||||
| ------- | ||||
| 
 | ||||
| Oddly enough, `boolean|j|js` gets no quotes (meaning `boolean|j` remains a boolean) but `boolean|h|js` does get quotes (meaning that `boolean|h` becomes a string) | ||||
							
								
								
									
										15
									
								
								js/test_cases/filters/input1.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								js/test_cases/filters/input1.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| { | ||||
|   "string": "{\"foo\": \"bar\"}", | ||||
|   "integer": 4, | ||||
|   "float": 7.4, | ||||
|   "boolean": true, | ||||
|   "null": null, | ||||
|   "array": [ | ||||
|     "foo", | ||||
|     "bar" | ||||
|   ], | ||||
|   "object": { | ||||
|     "foo": "bar" | ||||
|   }, | ||||
|   "special_characters": "<>xx\b&\"'\t\f\n\r\\!@#$%^&*()[]{}<>,./?:;_-+=`" | ||||
| } | ||||
							
								
								
									
										40
									
								
								js/test_cases/filters/main.dust
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								js/test_cases/filters/main.dust
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | ||||
| Special characters: {special_characters}{~n} | ||||
| Special characters html escaping disabled: {special_characters|s}{~n} | ||||
| Special characters html escaping disabled and enabled: {special_characters|s|h}{~n} | ||||
| Special characters html escaping enabled and disabled: {special_characters|h|s}{~n} | ||||
| Special characters html escaped once: {special_characters|h}{~n} | ||||
| Special characters html escaped twice: {special_characters|h|h}{~n} | ||||
| 
 | ||||
| 
 | ||||
| Object string parsed: {string|jp}{~n} | ||||
| Object string parsed and stringified: {string|jp|js}{~n} | ||||
| Object string stringified and parsed: {string|js|jp}{~n} | ||||
| 
 | ||||
| Array: {array}{~n} | ||||
| Array stringified: {array|js}{~n} | ||||
| Array stringified and parsed: {array|js|jp}{~n} | ||||
| 
 | ||||
| Object: {object}{~n} | ||||
| Object html escaped: {object|h}{~n} | ||||
| Object html escaping disabled: {object|s}{~n} | ||||
| Object stringified: {object|js}{~n} | ||||
| Object stringified and parsed: {object|js|jp}{~n} | ||||
| Object stringified, html escaping disabled, parsed, stringified, and html escaped: {object|js|s|jp|js|h}{~n} | ||||
| 
 | ||||
| Special characters: {special_characters}{~n} | ||||
| Special characters html escaping disabled and javascript escaped: {special_characters|s|j}{~n} | ||||
| Special characters javascript escaped and html escaping disabled: {special_characters|j|s}{~n} | ||||
| Special characters javascript escaped once: {special_characters|j}{~n} | ||||
| Special characters javascript escaped twice: {special_characters|j|j}{~n} | ||||
| 
 | ||||
| Special characters: {special_characters}{~n} | ||||
| Special characters html escaping disabled and encodeURI: {special_characters|s|u}{~n} | ||||
| Special characters encodeURI and html escaping disabled: {special_characters|u|s}{~n} | ||||
| Special characters encodeURI once: {special_characters|u}{~n} | ||||
| Special characters encodeURI twice: {special_characters|u|u}{~n} | ||||
| 
 | ||||
| Special characters: {special_characters}{~n} | ||||
| Special characters html escaping disabled and encodeURIComponent: {special_characters|s|uc}{~n} | ||||
| Special characters encodeURIComponent and html escaping disabled: {special_characters|uc|s}{~n} | ||||
| Special characters encodeURIComponent once: {special_characters|uc}{~n} | ||||
| Special characters encodeURIComponent twice: {special_characters|uc|uc}{~n} | ||||
							
								
								
									
										6
									
								
								js/test_cases/generated_filters/array.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								js/test_cases/generated_filters/array.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| { | ||||
|   "name": [ | ||||
|     "foo", | ||||
|     "bar" | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters/boolean.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters/boolean.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": true | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters/float.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters/float.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": 7.4 | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters/integer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters/integer.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": 4 | ||||
| } | ||||
							
								
								
									
										517
									
								
								js/test_cases/generated_filters/main.dust
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										517
									
								
								js/test_cases/generated_filters/main.dust
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,517 @@ | ||||
| Hello {name}!{~n} | ||||
| Hello {name|s}!{~n} | ||||
| Hello {name|h}!{~n} | ||||
| Hello {name|j}!{~n} | ||||
| Hello {name|u}!{~n} | ||||
| Hello {name|uc}!{~n} | ||||
| Hello {name|js}!{~n} | ||||
| Hello {name|s|h}!{~n} | ||||
| Hello {name|s|j}!{~n} | ||||
| Hello {name|s|u}!{~n} | ||||
| Hello {name|s|uc}!{~n} | ||||
| Hello {name|s|js}!{~n} | ||||
| Hello {name|h|s}!{~n} | ||||
| Hello {name|h|j}!{~n} | ||||
| Hello {name|h|u}!{~n} | ||||
| Hello {name|h|uc}!{~n} | ||||
| Hello {name|h|js}!{~n} | ||||
| Hello {name|j|s}!{~n} | ||||
| Hello {name|j|h}!{~n} | ||||
| Hello {name|j|u}!{~n} | ||||
| Hello {name|j|uc}!{~n} | ||||
| Hello {name|j|js}!{~n} | ||||
| Hello {name|u|s}!{~n} | ||||
| Hello {name|u|h}!{~n} | ||||
| Hello {name|u|j}!{~n} | ||||
| Hello {name|u|uc}!{~n} | ||||
| Hello {name|u|js}!{~n} | ||||
| Hello {name|uc|s}!{~n} | ||||
| Hello {name|uc|h}!{~n} | ||||
| Hello {name|uc|j}!{~n} | ||||
| Hello {name|uc|u}!{~n} | ||||
| Hello {name|uc|js}!{~n} | ||||
| Hello {name|js|s}!{~n} | ||||
| Hello {name|js|h}!{~n} | ||||
| Hello {name|js|j}!{~n} | ||||
| Hello {name|js|u}!{~n} | ||||
| Hello {name|js|uc}!{~n} | ||||
| Hello {name|s|h|j}!{~n} | ||||
| Hello {name|s|h|u}!{~n} | ||||
| Hello {name|s|h|uc}!{~n} | ||||
| Hello {name|s|h|js}!{~n} | ||||
| Hello {name|s|j|h}!{~n} | ||||
| Hello {name|s|j|u}!{~n} | ||||
| Hello {name|s|j|uc}!{~n} | ||||
| Hello {name|s|j|js}!{~n} | ||||
| Hello {name|s|u|h}!{~n} | ||||
| Hello {name|s|u|j}!{~n} | ||||
| Hello {name|s|u|uc}!{~n} | ||||
| Hello {name|s|u|js}!{~n} | ||||
| Hello {name|s|uc|h}!{~n} | ||||
| Hello {name|s|uc|j}!{~n} | ||||
| Hello {name|s|uc|u}!{~n} | ||||
| Hello {name|s|uc|js}!{~n} | ||||
| Hello {name|s|js|h}!{~n} | ||||
| Hello {name|s|js|j}!{~n} | ||||
| Hello {name|s|js|u}!{~n} | ||||
| Hello {name|s|js|uc}!{~n} | ||||
| Hello {name|h|s|j}!{~n} | ||||
| Hello {name|h|s|u}!{~n} | ||||
| Hello {name|h|s|uc}!{~n} | ||||
| Hello {name|h|s|js}!{~n} | ||||
| Hello {name|h|j|s}!{~n} | ||||
| Hello {name|h|j|u}!{~n} | ||||
| Hello {name|h|j|uc}!{~n} | ||||
| Hello {name|h|j|js}!{~n} | ||||
| Hello {name|h|u|s}!{~n} | ||||
| Hello {name|h|u|j}!{~n} | ||||
| Hello {name|h|u|uc}!{~n} | ||||
| Hello {name|h|u|js}!{~n} | ||||
| Hello {name|h|uc|s}!{~n} | ||||
| Hello {name|h|uc|j}!{~n} | ||||
| Hello {name|h|uc|u}!{~n} | ||||
| Hello {name|h|uc|js}!{~n} | ||||
| Hello {name|h|js|s}!{~n} | ||||
| Hello {name|h|js|j}!{~n} | ||||
| Hello {name|h|js|u}!{~n} | ||||
| Hello {name|h|js|uc}!{~n} | ||||
| Hello {name|j|s|h}!{~n} | ||||
| Hello {name|j|s|u}!{~n} | ||||
| Hello {name|j|s|uc}!{~n} | ||||
| Hello {name|j|s|js}!{~n} | ||||
| Hello {name|j|h|s}!{~n} | ||||
| Hello {name|j|h|u}!{~n} | ||||
| Hello {name|j|h|uc}!{~n} | ||||
| Hello {name|j|h|js}!{~n} | ||||
| Hello {name|j|u|s}!{~n} | ||||
| Hello {name|j|u|h}!{~n} | ||||
| Hello {name|j|u|uc}!{~n} | ||||
| Hello {name|j|u|js}!{~n} | ||||
| Hello {name|j|uc|s}!{~n} | ||||
| Hello {name|j|uc|h}!{~n} | ||||
| Hello {name|j|uc|u}!{~n} | ||||
| Hello {name|j|uc|js}!{~n} | ||||
| Hello {name|j|js|s}!{~n} | ||||
| Hello {name|j|js|h}!{~n} | ||||
| Hello {name|j|js|u}!{~n} | ||||
| Hello {name|j|js|uc}!{~n} | ||||
| Hello {name|u|s|h}!{~n} | ||||
| Hello {name|u|s|j}!{~n} | ||||
| Hello {name|u|s|uc}!{~n} | ||||
| Hello {name|u|s|js}!{~n} | ||||
| Hello {name|u|h|s}!{~n} | ||||
| Hello {name|u|h|j}!{~n} | ||||
| Hello {name|u|h|uc}!{~n} | ||||
| Hello {name|u|h|js}!{~n} | ||||
| Hello {name|u|j|s}!{~n} | ||||
| Hello {name|u|j|h}!{~n} | ||||
| Hello {name|u|j|uc}!{~n} | ||||
| Hello {name|u|j|js}!{~n} | ||||
| Hello {name|u|uc|s}!{~n} | ||||
| Hello {name|u|uc|h}!{~n} | ||||
| Hello {name|u|uc|j}!{~n} | ||||
| Hello {name|u|uc|js}!{~n} | ||||
| Hello {name|u|js|s}!{~n} | ||||
| Hello {name|u|js|h}!{~n} | ||||
| Hello {name|u|js|j}!{~n} | ||||
| Hello {name|u|js|uc}!{~n} | ||||
| Hello {name|uc|s|h}!{~n} | ||||
| Hello {name|uc|s|j}!{~n} | ||||
| Hello {name|uc|s|u}!{~n} | ||||
| Hello {name|uc|s|js}!{~n} | ||||
| Hello {name|uc|h|s}!{~n} | ||||
| Hello {name|uc|h|j}!{~n} | ||||
| Hello {name|uc|h|u}!{~n} | ||||
| Hello {name|uc|h|js}!{~n} | ||||
| Hello {name|uc|j|s}!{~n} | ||||
| Hello {name|uc|j|h}!{~n} | ||||
| Hello {name|uc|j|u}!{~n} | ||||
| Hello {name|uc|j|js}!{~n} | ||||
| Hello {name|uc|u|s}!{~n} | ||||
| Hello {name|uc|u|h}!{~n} | ||||
| Hello {name|uc|u|j}!{~n} | ||||
| Hello {name|uc|u|js}!{~n} | ||||
| Hello {name|uc|js|s}!{~n} | ||||
| Hello {name|uc|js|h}!{~n} | ||||
| Hello {name|uc|js|j}!{~n} | ||||
| Hello {name|uc|js|u}!{~n} | ||||
| Hello {name|js|s|h}!{~n} | ||||
| Hello {name|js|s|j}!{~n} | ||||
| Hello {name|js|s|u}!{~n} | ||||
| Hello {name|js|s|uc}!{~n} | ||||
| Hello {name|js|h|s}!{~n} | ||||
| Hello {name|js|h|j}!{~n} | ||||
| Hello {name|js|h|u}!{~n} | ||||
| Hello {name|js|h|uc}!{~n} | ||||
| Hello {name|js|j|s}!{~n} | ||||
| Hello {name|js|j|h}!{~n} | ||||
| Hello {name|js|j|u}!{~n} | ||||
| Hello {name|js|j|uc}!{~n} | ||||
| Hello {name|js|u|s}!{~n} | ||||
| Hello {name|js|u|h}!{~n} | ||||
| Hello {name|js|u|j}!{~n} | ||||
| Hello {name|js|u|uc}!{~n} | ||||
| Hello {name|js|uc|s}!{~n} | ||||
| Hello {name|js|uc|h}!{~n} | ||||
| Hello {name|js|uc|j}!{~n} | ||||
| Hello {name|js|uc|u}!{~n} | ||||
| Hello {name|s|h|j|u}!{~n} | ||||
| Hello {name|s|h|j|uc}!{~n} | ||||
| Hello {name|s|h|j|js}!{~n} | ||||
| Hello {name|s|h|u|j}!{~n} | ||||
| Hello {name|s|h|u|uc}!{~n} | ||||
| Hello {name|s|h|u|js}!{~n} | ||||
| Hello {name|s|h|uc|j}!{~n} | ||||
| Hello {name|s|h|uc|u}!{~n} | ||||
| Hello {name|s|h|uc|js}!{~n} | ||||
| Hello {name|s|h|js|j}!{~n} | ||||
| Hello {name|s|h|js|u}!{~n} | ||||
| Hello {name|s|h|js|uc}!{~n} | ||||
| Hello {name|s|j|h|u}!{~n} | ||||
| Hello {name|s|j|h|uc}!{~n} | ||||
| Hello {name|s|j|h|js}!{~n} | ||||
| Hello {name|s|j|u|h}!{~n} | ||||
| Hello {name|s|j|u|uc}!{~n} | ||||
| Hello {name|s|j|u|js}!{~n} | ||||
| Hello {name|s|j|uc|h}!{~n} | ||||
| Hello {name|s|j|uc|u}!{~n} | ||||
| Hello {name|s|j|uc|js}!{~n} | ||||
| Hello {name|s|j|js|h}!{~n} | ||||
| Hello {name|s|j|js|u}!{~n} | ||||
| Hello {name|s|j|js|uc}!{~n} | ||||
| Hello {name|s|u|h|j}!{~n} | ||||
| Hello {name|s|u|h|uc}!{~n} | ||||
| Hello {name|s|u|h|js}!{~n} | ||||
| Hello {name|s|u|j|h}!{~n} | ||||
| Hello {name|s|u|j|uc}!{~n} | ||||
| Hello {name|s|u|j|js}!{~n} | ||||
| Hello {name|s|u|uc|h}!{~n} | ||||
| Hello {name|s|u|uc|j}!{~n} | ||||
| Hello {name|s|u|uc|js}!{~n} | ||||
| Hello {name|s|u|js|h}!{~n} | ||||
| Hello {name|s|u|js|j}!{~n} | ||||
| Hello {name|s|u|js|uc}!{~n} | ||||
| Hello {name|s|uc|h|j}!{~n} | ||||
| Hello {name|s|uc|h|u}!{~n} | ||||
| Hello {name|s|uc|h|js}!{~n} | ||||
| Hello {name|s|uc|j|h}!{~n} | ||||
| Hello {name|s|uc|j|u}!{~n} | ||||
| Hello {name|s|uc|j|js}!{~n} | ||||
| Hello {name|s|uc|u|h}!{~n} | ||||
| Hello {name|s|uc|u|j}!{~n} | ||||
| Hello {name|s|uc|u|js}!{~n} | ||||
| Hello {name|s|uc|js|h}!{~n} | ||||
| Hello {name|s|uc|js|j}!{~n} | ||||
| Hello {name|s|uc|js|u}!{~n} | ||||
| Hello {name|s|js|h|j}!{~n} | ||||
| Hello {name|s|js|h|u}!{~n} | ||||
| Hello {name|s|js|h|uc}!{~n} | ||||
| Hello {name|s|js|j|h}!{~n} | ||||
| Hello {name|s|js|j|u}!{~n} | ||||
| Hello {name|s|js|j|uc}!{~n} | ||||
| Hello {name|s|js|u|h}!{~n} | ||||
| Hello {name|s|js|u|j}!{~n} | ||||
| Hello {name|s|js|u|uc}!{~n} | ||||
| Hello {name|s|js|uc|h}!{~n} | ||||
| Hello {name|s|js|uc|j}!{~n} | ||||
| Hello {name|s|js|uc|u}!{~n} | ||||
| Hello {name|h|s|j|u}!{~n} | ||||
| Hello {name|h|s|j|uc}!{~n} | ||||
| Hello {name|h|s|j|js}!{~n} | ||||
| Hello {name|h|s|u|j}!{~n} | ||||
| Hello {name|h|s|u|uc}!{~n} | ||||
| Hello {name|h|s|u|js}!{~n} | ||||
| Hello {name|h|s|uc|j}!{~n} | ||||
| Hello {name|h|s|uc|u}!{~n} | ||||
| Hello {name|h|s|uc|js}!{~n} | ||||
| Hello {name|h|s|js|j}!{~n} | ||||
| Hello {name|h|s|js|u}!{~n} | ||||
| Hello {name|h|s|js|uc}!{~n} | ||||
| Hello {name|h|j|s|u}!{~n} | ||||
| Hello {name|h|j|s|uc}!{~n} | ||||
| Hello {name|h|j|s|js}!{~n} | ||||
| Hello {name|h|j|u|s}!{~n} | ||||
| Hello {name|h|j|u|uc}!{~n} | ||||
| Hello {name|h|j|u|js}!{~n} | ||||
| Hello {name|h|j|uc|s}!{~n} | ||||
| Hello {name|h|j|uc|u}!{~n} | ||||
| Hello {name|h|j|uc|js}!{~n} | ||||
| Hello {name|h|j|js|s}!{~n} | ||||
| Hello {name|h|j|js|u}!{~n} | ||||
| Hello {name|h|j|js|uc}!{~n} | ||||
| Hello {name|h|u|s|j}!{~n} | ||||
| Hello {name|h|u|s|uc}!{~n} | ||||
| Hello {name|h|u|s|js}!{~n} | ||||
| Hello {name|h|u|j|s}!{~n} | ||||
| Hello {name|h|u|j|uc}!{~n} | ||||
| Hello {name|h|u|j|js}!{~n} | ||||
| Hello {name|h|u|uc|s}!{~n} | ||||
| Hello {name|h|u|uc|j}!{~n} | ||||
| Hello {name|h|u|uc|js}!{~n} | ||||
| Hello {name|h|u|js|s}!{~n} | ||||
| Hello {name|h|u|js|j}!{~n} | ||||
| Hello {name|h|u|js|uc}!{~n} | ||||
| Hello {name|h|uc|s|j}!{~n} | ||||
| Hello {name|h|uc|s|u}!{~n} | ||||
| Hello {name|h|uc|s|js}!{~n} | ||||
| Hello {name|h|uc|j|s}!{~n} | ||||
| Hello {name|h|uc|j|u}!{~n} | ||||
| Hello {name|h|uc|j|js}!{~n} | ||||
| Hello {name|h|uc|u|s}!{~n} | ||||
| Hello {name|h|uc|u|j}!{~n} | ||||
| Hello {name|h|uc|u|js}!{~n} | ||||
| Hello {name|h|uc|js|s}!{~n} | ||||
| Hello {name|h|uc|js|j}!{~n} | ||||
| Hello {name|h|uc|js|u}!{~n} | ||||
| Hello {name|h|js|s|j}!{~n} | ||||
| Hello {name|h|js|s|u}!{~n} | ||||
| Hello {name|h|js|s|uc}!{~n} | ||||
| Hello {name|h|js|j|s}!{~n} | ||||
| Hello {name|h|js|j|u}!{~n} | ||||
| Hello {name|h|js|j|uc}!{~n} | ||||
| Hello {name|h|js|u|s}!{~n} | ||||
| Hello {name|h|js|u|j}!{~n} | ||||
| Hello {name|h|js|u|uc}!{~n} | ||||
| Hello {name|h|js|uc|s}!{~n} | ||||
| Hello {name|h|js|uc|j}!{~n} | ||||
| Hello {name|h|js|uc|u}!{~n} | ||||
| Hello {name|j|s|h|u}!{~n} | ||||
| Hello {name|j|s|h|uc}!{~n} | ||||
| Hello {name|j|s|h|js}!{~n} | ||||
| Hello {name|j|s|u|h}!{~n} | ||||
| Hello {name|j|s|u|uc}!{~n} | ||||
| Hello {name|j|s|u|js}!{~n} | ||||
| Hello {name|j|s|uc|h}!{~n} | ||||
| Hello {name|j|s|uc|u}!{~n} | ||||
| Hello {name|j|s|uc|js}!{~n} | ||||
| Hello {name|j|s|js|h}!{~n} | ||||
| Hello {name|j|s|js|u}!{~n} | ||||
| Hello {name|j|s|js|uc}!{~n} | ||||
| Hello {name|j|h|s|u}!{~n} | ||||
| Hello {name|j|h|s|uc}!{~n} | ||||
| Hello {name|j|h|s|js}!{~n} | ||||
| Hello {name|j|h|u|s}!{~n} | ||||
| Hello {name|j|h|u|uc}!{~n} | ||||
| Hello {name|j|h|u|js}!{~n} | ||||
| Hello {name|j|h|uc|s}!{~n} | ||||
| Hello {name|j|h|uc|u}!{~n} | ||||
| Hello {name|j|h|uc|js}!{~n} | ||||
| Hello {name|j|h|js|s}!{~n} | ||||
| Hello {name|j|h|js|u}!{~n} | ||||
| Hello {name|j|h|js|uc}!{~n} | ||||
| Hello {name|j|u|s|h}!{~n} | ||||
| Hello {name|j|u|s|uc}!{~n} | ||||
| Hello {name|j|u|s|js}!{~n} | ||||
| Hello {name|j|u|h|s}!{~n} | ||||
| Hello {name|j|u|h|uc}!{~n} | ||||
| Hello {name|j|u|h|js}!{~n} | ||||
| Hello {name|j|u|uc|s}!{~n} | ||||
| Hello {name|j|u|uc|h}!{~n} | ||||
| Hello {name|j|u|uc|js}!{~n} | ||||
| Hello {name|j|u|js|s}!{~n} | ||||
| Hello {name|j|u|js|h}!{~n} | ||||
| Hello {name|j|u|js|uc}!{~n} | ||||
| Hello {name|j|uc|s|h}!{~n} | ||||
| Hello {name|j|uc|s|u}!{~n} | ||||
| Hello {name|j|uc|s|js}!{~n} | ||||
| Hello {name|j|uc|h|s}!{~n} | ||||
| Hello {name|j|uc|h|u}!{~n} | ||||
| Hello {name|j|uc|h|js}!{~n} | ||||
| Hello {name|j|uc|u|s}!{~n} | ||||
| Hello {name|j|uc|u|h}!{~n} | ||||
| Hello {name|j|uc|u|js}!{~n} | ||||
| Hello {name|j|uc|js|s}!{~n} | ||||
| Hello {name|j|uc|js|h}!{~n} | ||||
| Hello {name|j|uc|js|u}!{~n} | ||||
| Hello {name|j|js|s|h}!{~n} | ||||
| Hello {name|j|js|s|u}!{~n} | ||||
| Hello {name|j|js|s|uc}!{~n} | ||||
| Hello {name|j|js|h|s}!{~n} | ||||
| Hello {name|j|js|h|u}!{~n} | ||||
| Hello {name|j|js|h|uc}!{~n} | ||||
| Hello {name|j|js|u|s}!{~n} | ||||
| Hello {name|j|js|u|h}!{~n} | ||||
| Hello {name|j|js|u|uc}!{~n} | ||||
| Hello {name|j|js|uc|s}!{~n} | ||||
| Hello {name|j|js|uc|h}!{~n} | ||||
| Hello {name|j|js|uc|u}!{~n} | ||||
| Hello {name|u|s|h|j}!{~n} | ||||
| Hello {name|u|s|h|uc}!{~n} | ||||
| Hello {name|u|s|h|js}!{~n} | ||||
| Hello {name|u|s|j|h}!{~n} | ||||
| Hello {name|u|s|j|uc}!{~n} | ||||
| Hello {name|u|s|j|js}!{~n} | ||||
| Hello {name|u|s|uc|h}!{~n} | ||||
| Hello {name|u|s|uc|j}!{~n} | ||||
| Hello {name|u|s|uc|js}!{~n} | ||||
| Hello {name|u|s|js|h}!{~n} | ||||
| Hello {name|u|s|js|j}!{~n} | ||||
| Hello {name|u|s|js|uc}!{~n} | ||||
| Hello {name|u|h|s|j}!{~n} | ||||
| Hello {name|u|h|s|uc}!{~n} | ||||
| Hello {name|u|h|s|js}!{~n} | ||||
| Hello {name|u|h|j|s}!{~n} | ||||
| Hello {name|u|h|j|uc}!{~n} | ||||
| Hello {name|u|h|j|js}!{~n} | ||||
| Hello {name|u|h|uc|s}!{~n} | ||||
| Hello {name|u|h|uc|j}!{~n} | ||||
| Hello {name|u|h|uc|js}!{~n} | ||||
| Hello {name|u|h|js|s}!{~n} | ||||
| Hello {name|u|h|js|j}!{~n} | ||||
| Hello {name|u|h|js|uc}!{~n} | ||||
| Hello {name|u|j|s|h}!{~n} | ||||
| Hello {name|u|j|s|uc}!{~n} | ||||
| Hello {name|u|j|s|js}!{~n} | ||||
| Hello {name|u|j|h|s}!{~n} | ||||
| Hello {name|u|j|h|uc}!{~n} | ||||
| Hello {name|u|j|h|js}!{~n} | ||||
| Hello {name|u|j|uc|s}!{~n} | ||||
| Hello {name|u|j|uc|h}!{~n} | ||||
| Hello {name|u|j|uc|js}!{~n} | ||||
| Hello {name|u|j|js|s}!{~n} | ||||
| Hello {name|u|j|js|h}!{~n} | ||||
| Hello {name|u|j|js|uc}!{~n} | ||||
| Hello {name|u|uc|s|h}!{~n} | ||||
| Hello {name|u|uc|s|j}!{~n} | ||||
| Hello {name|u|uc|s|js}!{~n} | ||||
| Hello {name|u|uc|h|s}!{~n} | ||||
| Hello {name|u|uc|h|j}!{~n} | ||||
| Hello {name|u|uc|h|js}!{~n} | ||||
| Hello {name|u|uc|j|s}!{~n} | ||||
| Hello {name|u|uc|j|h}!{~n} | ||||
| Hello {name|u|uc|j|js}!{~n} | ||||
| Hello {name|u|uc|js|s}!{~n} | ||||
| Hello {name|u|uc|js|h}!{~n} | ||||
| Hello {name|u|uc|js|j}!{~n} | ||||
| Hello {name|u|js|s|h}!{~n} | ||||
| Hello {name|u|js|s|j}!{~n} | ||||
| Hello {name|u|js|s|uc}!{~n} | ||||
| Hello {name|u|js|h|s}!{~n} | ||||
| Hello {name|u|js|h|j}!{~n} | ||||
| Hello {name|u|js|h|uc}!{~n} | ||||
| Hello {name|u|js|j|s}!{~n} | ||||
| Hello {name|u|js|j|h}!{~n} | ||||
| Hello {name|u|js|j|uc}!{~n} | ||||
| Hello {name|u|js|uc|s}!{~n} | ||||
| Hello {name|u|js|uc|h}!{~n} | ||||
| Hello {name|u|js|uc|j}!{~n} | ||||
| Hello {name|uc|s|h|j}!{~n} | ||||
| Hello {name|uc|s|h|u}!{~n} | ||||
| Hello {name|uc|s|h|js}!{~n} | ||||
| Hello {name|uc|s|j|h}!{~n} | ||||
| Hello {name|uc|s|j|u}!{~n} | ||||
| Hello {name|uc|s|j|js}!{~n} | ||||
| Hello {name|uc|s|u|h}!{~n} | ||||
| Hello {name|uc|s|u|j}!{~n} | ||||
| Hello {name|uc|s|u|js}!{~n} | ||||
| Hello {name|uc|s|js|h}!{~n} | ||||
| Hello {name|uc|s|js|j}!{~n} | ||||
| Hello {name|uc|s|js|u}!{~n} | ||||
| Hello {name|uc|h|s|j}!{~n} | ||||
| Hello {name|uc|h|s|u}!{~n} | ||||
| Hello {name|uc|h|s|js}!{~n} | ||||
| Hello {name|uc|h|j|s}!{~n} | ||||
| Hello {name|uc|h|j|u}!{~n} | ||||
| Hello {name|uc|h|j|js}!{~n} | ||||
| Hello {name|uc|h|u|s}!{~n} | ||||
| Hello {name|uc|h|u|j}!{~n} | ||||
| Hello {name|uc|h|u|js}!{~n} | ||||
| Hello {name|uc|h|js|s}!{~n} | ||||
| Hello {name|uc|h|js|j}!{~n} | ||||
| Hello {name|uc|h|js|u}!{~n} | ||||
| Hello {name|uc|j|s|h}!{~n} | ||||
| Hello {name|uc|j|s|u}!{~n} | ||||
| Hello {name|uc|j|s|js}!{~n} | ||||
| Hello {name|uc|j|h|s}!{~n} | ||||
| Hello {name|uc|j|h|u}!{~n} | ||||
| Hello {name|uc|j|h|js}!{~n} | ||||
| Hello {name|uc|j|u|s}!{~n} | ||||
| Hello {name|uc|j|u|h}!{~n} | ||||
| Hello {name|uc|j|u|js}!{~n} | ||||
| Hello {name|uc|j|js|s}!{~n} | ||||
| Hello {name|uc|j|js|h}!{~n} | ||||
| Hello {name|uc|j|js|u}!{~n} | ||||
| Hello {name|uc|u|s|h}!{~n} | ||||
| Hello {name|uc|u|s|j}!{~n} | ||||
| Hello {name|uc|u|s|js}!{~n} | ||||
| Hello {name|uc|u|h|s}!{~n} | ||||
| Hello {name|uc|u|h|j}!{~n} | ||||
| Hello {name|uc|u|h|js}!{~n} | ||||
| Hello {name|uc|u|j|s}!{~n} | ||||
| Hello {name|uc|u|j|h}!{~n} | ||||
| Hello {name|uc|u|j|js}!{~n} | ||||
| Hello {name|uc|u|js|s}!{~n} | ||||
| Hello {name|uc|u|js|h}!{~n} | ||||
| Hello {name|uc|u|js|j}!{~n} | ||||
| Hello {name|uc|js|s|h}!{~n} | ||||
| Hello {name|uc|js|s|j}!{~n} | ||||
| Hello {name|uc|js|s|u}!{~n} | ||||
| Hello {name|uc|js|h|s}!{~n} | ||||
| Hello {name|uc|js|h|j}!{~n} | ||||
| Hello {name|uc|js|h|u}!{~n} | ||||
| Hello {name|uc|js|j|s}!{~n} | ||||
| Hello {name|uc|js|j|h}!{~n} | ||||
| Hello {name|uc|js|j|u}!{~n} | ||||
| Hello {name|uc|js|u|s}!{~n} | ||||
| Hello {name|uc|js|u|h}!{~n} | ||||
| Hello {name|uc|js|u|j}!{~n} | ||||
| Hello {name|js|s|h|j}!{~n} | ||||
| Hello {name|js|s|h|u}!{~n} | ||||
| Hello {name|js|s|h|uc}!{~n} | ||||
| Hello {name|js|s|j|h}!{~n} | ||||
| Hello {name|js|s|j|u}!{~n} | ||||
| Hello {name|js|s|j|uc}!{~n} | ||||
| Hello {name|js|s|u|h}!{~n} | ||||
| Hello {name|js|s|u|j}!{~n} | ||||
| Hello {name|js|s|u|uc}!{~n} | ||||
| Hello {name|js|s|uc|h}!{~n} | ||||
| Hello {name|js|s|uc|j}!{~n} | ||||
| Hello {name|js|s|uc|u}!{~n} | ||||
| Hello {name|js|h|s|j}!{~n} | ||||
| Hello {name|js|h|s|u}!{~n} | ||||
| Hello {name|js|h|s|uc}!{~n} | ||||
| Hello {name|js|h|j|s}!{~n} | ||||
| Hello {name|js|h|j|u}!{~n} | ||||
| Hello {name|js|h|j|uc}!{~n} | ||||
| Hello {name|js|h|u|s}!{~n} | ||||
| Hello {name|js|h|u|j}!{~n} | ||||
| Hello {name|js|h|u|uc}!{~n} | ||||
| Hello {name|js|h|uc|s}!{~n} | ||||
| Hello {name|js|h|uc|j}!{~n} | ||||
| Hello {name|js|h|uc|u}!{~n} | ||||
| Hello {name|js|j|s|h}!{~n} | ||||
| Hello {name|js|j|s|u}!{~n} | ||||
| Hello {name|js|j|s|uc}!{~n} | ||||
| Hello {name|js|j|h|s}!{~n} | ||||
| Hello {name|js|j|h|u}!{~n} | ||||
| Hello {name|js|j|h|uc}!{~n} | ||||
| Hello {name|js|j|u|s}!{~n} | ||||
| Hello {name|js|j|u|h}!{~n} | ||||
| Hello {name|js|j|u|uc}!{~n} | ||||
| Hello {name|js|j|uc|s}!{~n} | ||||
| Hello {name|js|j|uc|h}!{~n} | ||||
| Hello {name|js|j|uc|u}!{~n} | ||||
| Hello {name|js|u|s|h}!{~n} | ||||
| Hello {name|js|u|s|j}!{~n} | ||||
| Hello {name|js|u|s|uc}!{~n} | ||||
| Hello {name|js|u|h|s}!{~n} | ||||
| Hello {name|js|u|h|j}!{~n} | ||||
| Hello {name|js|u|h|uc}!{~n} | ||||
| Hello {name|js|u|j|s}!{~n} | ||||
| Hello {name|js|u|j|h}!{~n} | ||||
| Hello {name|js|u|j|uc}!{~n} | ||||
| Hello {name|js|u|uc|s}!{~n} | ||||
| Hello {name|js|u|uc|h}!{~n} | ||||
| Hello {name|js|u|uc|j}!{~n} | ||||
| Hello {name|js|uc|s|h}!{~n} | ||||
| Hello {name|js|uc|s|j}!{~n} | ||||
| Hello {name|js|uc|s|u}!{~n} | ||||
| Hello {name|js|uc|h|s}!{~n} | ||||
| Hello {name|js|uc|h|j}!{~n} | ||||
| Hello {name|js|uc|h|u}!{~n} | ||||
| Hello {name|js|uc|j|s}!{~n} | ||||
| Hello {name|js|uc|j|h}!{~n} | ||||
| Hello {name|js|uc|j|u}!{~n} | ||||
| Hello {name|js|uc|u|s}!{~n} | ||||
| Hello {name|js|uc|u|h}!{~n} | ||||
| Hello {name|js|uc|u|j}!{~n} | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters/null.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters/null.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": null | ||||
| } | ||||
							
								
								
									
										5
									
								
								js/test_cases/generated_filters/object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								js/test_cases/generated_filters/object.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| { | ||||
|   "name": { | ||||
|     "foo": "bar" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters/string.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters/string.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": "{\"foo\": \"bar\"}" | ||||
| } | ||||
							
								
								
									
										1
									
								
								js/test_cases/generated_filters_two/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								js/test_cases/generated_filters_two/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| I had to split the generated_filters test into two tests because dustjs is limited to 65536 characters of output (a shortcoming duster will not have). | ||||
							
								
								
									
										6
									
								
								js/test_cases/generated_filters_two/array.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								js/test_cases/generated_filters_two/array.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| { | ||||
|   "name": [ | ||||
|     "foo", | ||||
|     "bar" | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters_two/boolean.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters_two/boolean.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": true | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters_two/float.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters_two/float.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": 7.4 | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters_two/integer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters_two/integer.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": 4 | ||||
| } | ||||
							
								
								
									
										720
									
								
								js/test_cases/generated_filters_two/main.dust
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										720
									
								
								js/test_cases/generated_filters_two/main.dust
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,720 @@ | ||||
| Hello {name|s|h|j|u|uc}!{~n} | ||||
| Hello {name|s|h|j|u|js}!{~n} | ||||
| Hello {name|s|h|j|uc|u}!{~n} | ||||
| Hello {name|s|h|j|uc|js}!{~n} | ||||
| Hello {name|s|h|j|js|u}!{~n} | ||||
| Hello {name|s|h|j|js|uc}!{~n} | ||||
| Hello {name|s|h|u|j|uc}!{~n} | ||||
| Hello {name|s|h|u|j|js}!{~n} | ||||
| Hello {name|s|h|u|uc|j}!{~n} | ||||
| Hello {name|s|h|u|uc|js}!{~n} | ||||
| Hello {name|s|h|u|js|j}!{~n} | ||||
| Hello {name|s|h|u|js|uc}!{~n} | ||||
| Hello {name|s|h|uc|j|u}!{~n} | ||||
| Hello {name|s|h|uc|j|js}!{~n} | ||||
| Hello {name|s|h|uc|u|j}!{~n} | ||||
| Hello {name|s|h|uc|u|js}!{~n} | ||||
| Hello {name|s|h|uc|js|j}!{~n} | ||||
| Hello {name|s|h|uc|js|u}!{~n} | ||||
| Hello {name|s|h|js|j|u}!{~n} | ||||
| Hello {name|s|h|js|j|uc}!{~n} | ||||
| Hello {name|s|h|js|u|j}!{~n} | ||||
| Hello {name|s|h|js|u|uc}!{~n} | ||||
| Hello {name|s|h|js|uc|j}!{~n} | ||||
| Hello {name|s|h|js|uc|u}!{~n} | ||||
| Hello {name|s|j|h|u|uc}!{~n} | ||||
| Hello {name|s|j|h|u|js}!{~n} | ||||
| Hello {name|s|j|h|uc|u}!{~n} | ||||
| Hello {name|s|j|h|uc|js}!{~n} | ||||
| Hello {name|s|j|h|js|u}!{~n} | ||||
| Hello {name|s|j|h|js|uc}!{~n} | ||||
| Hello {name|s|j|u|h|uc}!{~n} | ||||
| Hello {name|s|j|u|h|js}!{~n} | ||||
| Hello {name|s|j|u|uc|h}!{~n} | ||||
| Hello {name|s|j|u|uc|js}!{~n} | ||||
| Hello {name|s|j|u|js|h}!{~n} | ||||
| Hello {name|s|j|u|js|uc}!{~n} | ||||
| Hello {name|s|j|uc|h|u}!{~n} | ||||
| Hello {name|s|j|uc|h|js}!{~n} | ||||
| Hello {name|s|j|uc|u|h}!{~n} | ||||
| Hello {name|s|j|uc|u|js}!{~n} | ||||
| Hello {name|s|j|uc|js|h}!{~n} | ||||
| Hello {name|s|j|uc|js|u}!{~n} | ||||
| Hello {name|s|j|js|h|u}!{~n} | ||||
| Hello {name|s|j|js|h|uc}!{~n} | ||||
| Hello {name|s|j|js|u|h}!{~n} | ||||
| Hello {name|s|j|js|u|uc}!{~n} | ||||
| Hello {name|s|j|js|uc|h}!{~n} | ||||
| Hello {name|s|j|js|uc|u}!{~n} | ||||
| Hello {name|s|u|h|j|uc}!{~n} | ||||
| Hello {name|s|u|h|j|js}!{~n} | ||||
| Hello {name|s|u|h|uc|j}!{~n} | ||||
| Hello {name|s|u|h|uc|js}!{~n} | ||||
| Hello {name|s|u|h|js|j}!{~n} | ||||
| Hello {name|s|u|h|js|uc}!{~n} | ||||
| Hello {name|s|u|j|h|uc}!{~n} | ||||
| Hello {name|s|u|j|h|js}!{~n} | ||||
| Hello {name|s|u|j|uc|h}!{~n} | ||||
| Hello {name|s|u|j|uc|js}!{~n} | ||||
| Hello {name|s|u|j|js|h}!{~n} | ||||
| Hello {name|s|u|j|js|uc}!{~n} | ||||
| Hello {name|s|u|uc|h|j}!{~n} | ||||
| Hello {name|s|u|uc|h|js}!{~n} | ||||
| Hello {name|s|u|uc|j|h}!{~n} | ||||
| Hello {name|s|u|uc|j|js}!{~n} | ||||
| Hello {name|s|u|uc|js|h}!{~n} | ||||
| Hello {name|s|u|uc|js|j}!{~n} | ||||
| Hello {name|s|u|js|h|j}!{~n} | ||||
| Hello {name|s|u|js|h|uc}!{~n} | ||||
| Hello {name|s|u|js|j|h}!{~n} | ||||
| Hello {name|s|u|js|j|uc}!{~n} | ||||
| Hello {name|s|u|js|uc|h}!{~n} | ||||
| Hello {name|s|u|js|uc|j}!{~n} | ||||
| Hello {name|s|uc|h|j|u}!{~n} | ||||
| Hello {name|s|uc|h|j|js}!{~n} | ||||
| Hello {name|s|uc|h|u|j}!{~n} | ||||
| Hello {name|s|uc|h|u|js}!{~n} | ||||
| Hello {name|s|uc|h|js|j}!{~n} | ||||
| Hello {name|s|uc|h|js|u}!{~n} | ||||
| Hello {name|s|uc|j|h|u}!{~n} | ||||
| Hello {name|s|uc|j|h|js}!{~n} | ||||
| Hello {name|s|uc|j|u|h}!{~n} | ||||
| Hello {name|s|uc|j|u|js}!{~n} | ||||
| Hello {name|s|uc|j|js|h}!{~n} | ||||
| Hello {name|s|uc|j|js|u}!{~n} | ||||
| Hello {name|s|uc|u|h|j}!{~n} | ||||
| Hello {name|s|uc|u|h|js}!{~n} | ||||
| Hello {name|s|uc|u|j|h}!{~n} | ||||
| Hello {name|s|uc|u|j|js}!{~n} | ||||
| Hello {name|s|uc|u|js|h}!{~n} | ||||
| Hello {name|s|uc|u|js|j}!{~n} | ||||
| Hello {name|s|uc|js|h|j}!{~n} | ||||
| Hello {name|s|uc|js|h|u}!{~n} | ||||
| Hello {name|s|uc|js|j|h}!{~n} | ||||
| Hello {name|s|uc|js|j|u}!{~n} | ||||
| Hello {name|s|uc|js|u|h}!{~n} | ||||
| Hello {name|s|uc|js|u|j}!{~n} | ||||
| Hello {name|s|js|h|j|u}!{~n} | ||||
| Hello {name|s|js|h|j|uc}!{~n} | ||||
| Hello {name|s|js|h|u|j}!{~n} | ||||
| Hello {name|s|js|h|u|uc}!{~n} | ||||
| Hello {name|s|js|h|uc|j}!{~n} | ||||
| Hello {name|s|js|h|uc|u}!{~n} | ||||
| Hello {name|s|js|j|h|u}!{~n} | ||||
| Hello {name|s|js|j|h|uc}!{~n} | ||||
| Hello {name|s|js|j|u|h}!{~n} | ||||
| Hello {name|s|js|j|u|uc}!{~n} | ||||
| Hello {name|s|js|j|uc|h}!{~n} | ||||
| Hello {name|s|js|j|uc|u}!{~n} | ||||
| Hello {name|s|js|u|h|j}!{~n} | ||||
| Hello {name|s|js|u|h|uc}!{~n} | ||||
| Hello {name|s|js|u|j|h}!{~n} | ||||
| Hello {name|s|js|u|j|uc}!{~n} | ||||
| Hello {name|s|js|u|uc|h}!{~n} | ||||
| Hello {name|s|js|u|uc|j}!{~n} | ||||
| Hello {name|s|js|uc|h|j}!{~n} | ||||
| Hello {name|s|js|uc|h|u}!{~n} | ||||
| Hello {name|s|js|uc|j|h}!{~n} | ||||
| Hello {name|s|js|uc|j|u}!{~n} | ||||
| Hello {name|s|js|uc|u|h}!{~n} | ||||
| Hello {name|s|js|uc|u|j}!{~n} | ||||
| Hello {name|h|s|j|u|uc}!{~n} | ||||
| Hello {name|h|s|j|u|js}!{~n} | ||||
| Hello {name|h|s|j|uc|u}!{~n} | ||||
| Hello {name|h|s|j|uc|js}!{~n} | ||||
| Hello {name|h|s|j|js|u}!{~n} | ||||
| Hello {name|h|s|j|js|uc}!{~n} | ||||
| Hello {name|h|s|u|j|uc}!{~n} | ||||
| Hello {name|h|s|u|j|js}!{~n} | ||||
| Hello {name|h|s|u|uc|j}!{~n} | ||||
| Hello {name|h|s|u|uc|js}!{~n} | ||||
| Hello {name|h|s|u|js|j}!{~n} | ||||
| Hello {name|h|s|u|js|uc}!{~n} | ||||
| Hello {name|h|s|uc|j|u}!{~n} | ||||
| Hello {name|h|s|uc|j|js}!{~n} | ||||
| Hello {name|h|s|uc|u|j}!{~n} | ||||
| Hello {name|h|s|uc|u|js}!{~n} | ||||
| Hello {name|h|s|uc|js|j}!{~n} | ||||
| Hello {name|h|s|uc|js|u}!{~n} | ||||
| Hello {name|h|s|js|j|u}!{~n} | ||||
| Hello {name|h|s|js|j|uc}!{~n} | ||||
| Hello {name|h|s|js|u|j}!{~n} | ||||
| Hello {name|h|s|js|u|uc}!{~n} | ||||
| Hello {name|h|s|js|uc|j}!{~n} | ||||
| Hello {name|h|s|js|uc|u}!{~n} | ||||
| Hello {name|h|j|s|u|uc}!{~n} | ||||
| Hello {name|h|j|s|u|js}!{~n} | ||||
| Hello {name|h|j|s|uc|u}!{~n} | ||||
| Hello {name|h|j|s|uc|js}!{~n} | ||||
| Hello {name|h|j|s|js|u}!{~n} | ||||
| Hello {name|h|j|s|js|uc}!{~n} | ||||
| Hello {name|h|j|u|s|uc}!{~n} | ||||
| Hello {name|h|j|u|s|js}!{~n} | ||||
| Hello {name|h|j|u|uc|s}!{~n} | ||||
| Hello {name|h|j|u|uc|js}!{~n} | ||||
| Hello {name|h|j|u|js|s}!{~n} | ||||
| Hello {name|h|j|u|js|uc}!{~n} | ||||
| Hello {name|h|j|uc|s|u}!{~n} | ||||
| Hello {name|h|j|uc|s|js}!{~n} | ||||
| Hello {name|h|j|uc|u|s}!{~n} | ||||
| Hello {name|h|j|uc|u|js}!{~n} | ||||
| Hello {name|h|j|uc|js|s}!{~n} | ||||
| Hello {name|h|j|uc|js|u}!{~n} | ||||
| Hello {name|h|j|js|s|u}!{~n} | ||||
| Hello {name|h|j|js|s|uc}!{~n} | ||||
| Hello {name|h|j|js|u|s}!{~n} | ||||
| Hello {name|h|j|js|u|uc}!{~n} | ||||
| Hello {name|h|j|js|uc|s}!{~n} | ||||
| Hello {name|h|j|js|uc|u}!{~n} | ||||
| Hello {name|h|u|s|j|uc}!{~n} | ||||
| Hello {name|h|u|s|j|js}!{~n} | ||||
| Hello {name|h|u|s|uc|j}!{~n} | ||||
| Hello {name|h|u|s|uc|js}!{~n} | ||||
| Hello {name|h|u|s|js|j}!{~n} | ||||
| Hello {name|h|u|s|js|uc}!{~n} | ||||
| Hello {name|h|u|j|s|uc}!{~n} | ||||
| Hello {name|h|u|j|s|js}!{~n} | ||||
| Hello {name|h|u|j|uc|s}!{~n} | ||||
| Hello {name|h|u|j|uc|js}!{~n} | ||||
| Hello {name|h|u|j|js|s}!{~n} | ||||
| Hello {name|h|u|j|js|uc}!{~n} | ||||
| Hello {name|h|u|uc|s|j}!{~n} | ||||
| Hello {name|h|u|uc|s|js}!{~n} | ||||
| Hello {name|h|u|uc|j|s}!{~n} | ||||
| Hello {name|h|u|uc|j|js}!{~n} | ||||
| Hello {name|h|u|uc|js|s}!{~n} | ||||
| Hello {name|h|u|uc|js|j}!{~n} | ||||
| Hello {name|h|u|js|s|j}!{~n} | ||||
| Hello {name|h|u|js|s|uc}!{~n} | ||||
| Hello {name|h|u|js|j|s}!{~n} | ||||
| Hello {name|h|u|js|j|uc}!{~n} | ||||
| Hello {name|h|u|js|uc|s}!{~n} | ||||
| Hello {name|h|u|js|uc|j}!{~n} | ||||
| Hello {name|h|uc|s|j|u}!{~n} | ||||
| Hello {name|h|uc|s|j|js}!{~n} | ||||
| Hello {name|h|uc|s|u|j}!{~n} | ||||
| Hello {name|h|uc|s|u|js}!{~n} | ||||
| Hello {name|h|uc|s|js|j}!{~n} | ||||
| Hello {name|h|uc|s|js|u}!{~n} | ||||
| Hello {name|h|uc|j|s|u}!{~n} | ||||
| Hello {name|h|uc|j|s|js}!{~n} | ||||
| Hello {name|h|uc|j|u|s}!{~n} | ||||
| Hello {name|h|uc|j|u|js}!{~n} | ||||
| Hello {name|h|uc|j|js|s}!{~n} | ||||
| Hello {name|h|uc|j|js|u}!{~n} | ||||
| Hello {name|h|uc|u|s|j}!{~n} | ||||
| Hello {name|h|uc|u|s|js}!{~n} | ||||
| Hello {name|h|uc|u|j|s}!{~n} | ||||
| Hello {name|h|uc|u|j|js}!{~n} | ||||
| Hello {name|h|uc|u|js|s}!{~n} | ||||
| Hello {name|h|uc|u|js|j}!{~n} | ||||
| Hello {name|h|uc|js|s|j}!{~n} | ||||
| Hello {name|h|uc|js|s|u}!{~n} | ||||
| Hello {name|h|uc|js|j|s}!{~n} | ||||
| Hello {name|h|uc|js|j|u}!{~n} | ||||
| Hello {name|h|uc|js|u|s}!{~n} | ||||
| Hello {name|h|uc|js|u|j}!{~n} | ||||
| Hello {name|h|js|s|j|u}!{~n} | ||||
| Hello {name|h|js|s|j|uc}!{~n} | ||||
| Hello {name|h|js|s|u|j}!{~n} | ||||
| Hello {name|h|js|s|u|uc}!{~n} | ||||
| Hello {name|h|js|s|uc|j}!{~n} | ||||
| Hello {name|h|js|s|uc|u}!{~n} | ||||
| Hello {name|h|js|j|s|u}!{~n} | ||||
| Hello {name|h|js|j|s|uc}!{~n} | ||||
| Hello {name|h|js|j|u|s}!{~n} | ||||
| Hello {name|h|js|j|u|uc}!{~n} | ||||
| Hello {name|h|js|j|uc|s}!{~n} | ||||
| Hello {name|h|js|j|uc|u}!{~n} | ||||
| Hello {name|h|js|u|s|j}!{~n} | ||||
| Hello {name|h|js|u|s|uc}!{~n} | ||||
| Hello {name|h|js|u|j|s}!{~n} | ||||
| Hello {name|h|js|u|j|uc}!{~n} | ||||
| Hello {name|h|js|u|uc|s}!{~n} | ||||
| Hello {name|h|js|u|uc|j}!{~n} | ||||
| Hello {name|h|js|uc|s|j}!{~n} | ||||
| Hello {name|h|js|uc|s|u}!{~n} | ||||
| Hello {name|h|js|uc|j|s}!{~n} | ||||
| Hello {name|h|js|uc|j|u}!{~n} | ||||
| Hello {name|h|js|uc|u|s}!{~n} | ||||
| Hello {name|h|js|uc|u|j}!{~n} | ||||
| Hello {name|j|s|h|u|uc}!{~n} | ||||
| Hello {name|j|s|h|u|js}!{~n} | ||||
| Hello {name|j|s|h|uc|u}!{~n} | ||||
| Hello {name|j|s|h|uc|js}!{~n} | ||||
| Hello {name|j|s|h|js|u}!{~n} | ||||
| Hello {name|j|s|h|js|uc}!{~n} | ||||
| Hello {name|j|s|u|h|uc}!{~n} | ||||
| Hello {name|j|s|u|h|js}!{~n} | ||||
| Hello {name|j|s|u|uc|h}!{~n} | ||||
| Hello {name|j|s|u|uc|js}!{~n} | ||||
| Hello {name|j|s|u|js|h}!{~n} | ||||
| Hello {name|j|s|u|js|uc}!{~n} | ||||
| Hello {name|j|s|uc|h|u}!{~n} | ||||
| Hello {name|j|s|uc|h|js}!{~n} | ||||
| Hello {name|j|s|uc|u|h}!{~n} | ||||
| Hello {name|j|s|uc|u|js}!{~n} | ||||
| Hello {name|j|s|uc|js|h}!{~n} | ||||
| Hello {name|j|s|uc|js|u}!{~n} | ||||
| Hello {name|j|s|js|h|u}!{~n} | ||||
| Hello {name|j|s|js|h|uc}!{~n} | ||||
| Hello {name|j|s|js|u|h}!{~n} | ||||
| Hello {name|j|s|js|u|uc}!{~n} | ||||
| Hello {name|j|s|js|uc|h}!{~n} | ||||
| Hello {name|j|s|js|uc|u}!{~n} | ||||
| Hello {name|j|h|s|u|uc}!{~n} | ||||
| Hello {name|j|h|s|u|js}!{~n} | ||||
| Hello {name|j|h|s|uc|u}!{~n} | ||||
| Hello {name|j|h|s|uc|js}!{~n} | ||||
| Hello {name|j|h|s|js|u}!{~n} | ||||
| Hello {name|j|h|s|js|uc}!{~n} | ||||
| Hello {name|j|h|u|s|uc}!{~n} | ||||
| Hello {name|j|h|u|s|js}!{~n} | ||||
| Hello {name|j|h|u|uc|s}!{~n} | ||||
| Hello {name|j|h|u|uc|js}!{~n} | ||||
| Hello {name|j|h|u|js|s}!{~n} | ||||
| Hello {name|j|h|u|js|uc}!{~n} | ||||
| Hello {name|j|h|uc|s|u}!{~n} | ||||
| Hello {name|j|h|uc|s|js}!{~n} | ||||
| Hello {name|j|h|uc|u|s}!{~n} | ||||
| Hello {name|j|h|uc|u|js}!{~n} | ||||
| Hello {name|j|h|uc|js|s}!{~n} | ||||
| Hello {name|j|h|uc|js|u}!{~n} | ||||
| Hello {name|j|h|js|s|u}!{~n} | ||||
| Hello {name|j|h|js|s|uc}!{~n} | ||||
| Hello {name|j|h|js|u|s}!{~n} | ||||
| Hello {name|j|h|js|u|uc}!{~n} | ||||
| Hello {name|j|h|js|uc|s}!{~n} | ||||
| Hello {name|j|h|js|uc|u}!{~n} | ||||
| Hello {name|j|u|s|h|uc}!{~n} | ||||
| Hello {name|j|u|s|h|js}!{~n} | ||||
| Hello {name|j|u|s|uc|h}!{~n} | ||||
| Hello {name|j|u|s|uc|js}!{~n} | ||||
| Hello {name|j|u|s|js|h}!{~n} | ||||
| Hello {name|j|u|s|js|uc}!{~n} | ||||
| Hello {name|j|u|h|s|uc}!{~n} | ||||
| Hello {name|j|u|h|s|js}!{~n} | ||||
| Hello {name|j|u|h|uc|s}!{~n} | ||||
| Hello {name|j|u|h|uc|js}!{~n} | ||||
| Hello {name|j|u|h|js|s}!{~n} | ||||
| Hello {name|j|u|h|js|uc}!{~n} | ||||
| Hello {name|j|u|uc|s|h}!{~n} | ||||
| Hello {name|j|u|uc|s|js}!{~n} | ||||
| Hello {name|j|u|uc|h|s}!{~n} | ||||
| Hello {name|j|u|uc|h|js}!{~n} | ||||
| Hello {name|j|u|uc|js|s}!{~n} | ||||
| Hello {name|j|u|uc|js|h}!{~n} | ||||
| Hello {name|j|u|js|s|h}!{~n} | ||||
| Hello {name|j|u|js|s|uc}!{~n} | ||||
| Hello {name|j|u|js|h|s}!{~n} | ||||
| Hello {name|j|u|js|h|uc}!{~n} | ||||
| Hello {name|j|u|js|uc|s}!{~n} | ||||
| Hello {name|j|u|js|uc|h}!{~n} | ||||
| Hello {name|j|uc|s|h|u}!{~n} | ||||
| Hello {name|j|uc|s|h|js}!{~n} | ||||
| Hello {name|j|uc|s|u|h}!{~n} | ||||
| Hello {name|j|uc|s|u|js}!{~n} | ||||
| Hello {name|j|uc|s|js|h}!{~n} | ||||
| Hello {name|j|uc|s|js|u}!{~n} | ||||
| Hello {name|j|uc|h|s|u}!{~n} | ||||
| Hello {name|j|uc|h|s|js}!{~n} | ||||
| Hello {name|j|uc|h|u|s}!{~n} | ||||
| Hello {name|j|uc|h|u|js}!{~n} | ||||
| Hello {name|j|uc|h|js|s}!{~n} | ||||
| Hello {name|j|uc|h|js|u}!{~n} | ||||
| Hello {name|j|uc|u|s|h}!{~n} | ||||
| Hello {name|j|uc|u|s|js}!{~n} | ||||
| Hello {name|j|uc|u|h|s}!{~n} | ||||
| Hello {name|j|uc|u|h|js}!{~n} | ||||
| Hello {name|j|uc|u|js|s}!{~n} | ||||
| Hello {name|j|uc|u|js|h}!{~n} | ||||
| Hello {name|j|uc|js|s|h}!{~n} | ||||
| Hello {name|j|uc|js|s|u}!{~n} | ||||
| Hello {name|j|uc|js|h|s}!{~n} | ||||
| Hello {name|j|uc|js|h|u}!{~n} | ||||
| Hello {name|j|uc|js|u|s}!{~n} | ||||
| Hello {name|j|uc|js|u|h}!{~n} | ||||
| Hello {name|j|js|s|h|u}!{~n} | ||||
| Hello {name|j|js|s|h|uc}!{~n} | ||||
| Hello {name|j|js|s|u|h}!{~n} | ||||
| Hello {name|j|js|s|u|uc}!{~n} | ||||
| Hello {name|j|js|s|uc|h}!{~n} | ||||
| Hello {name|j|js|s|uc|u}!{~n} | ||||
| Hello {name|j|js|h|s|u}!{~n} | ||||
| Hello {name|j|js|h|s|uc}!{~n} | ||||
| Hello {name|j|js|h|u|s}!{~n} | ||||
| Hello {name|j|js|h|u|uc}!{~n} | ||||
| Hello {name|j|js|h|uc|s}!{~n} | ||||
| Hello {name|j|js|h|uc|u}!{~n} | ||||
| Hello {name|j|js|u|s|h}!{~n} | ||||
| Hello {name|j|js|u|s|uc}!{~n} | ||||
| Hello {name|j|js|u|h|s}!{~n} | ||||
| Hello {name|j|js|u|h|uc}!{~n} | ||||
| Hello {name|j|js|u|uc|s}!{~n} | ||||
| Hello {name|j|js|u|uc|h}!{~n} | ||||
| Hello {name|j|js|uc|s|h}!{~n} | ||||
| Hello {name|j|js|uc|s|u}!{~n} | ||||
| Hello {name|j|js|uc|h|s}!{~n} | ||||
| Hello {name|j|js|uc|h|u}!{~n} | ||||
| Hello {name|j|js|uc|u|s}!{~n} | ||||
| Hello {name|j|js|uc|u|h}!{~n} | ||||
| Hello {name|u|s|h|j|uc}!{~n} | ||||
| Hello {name|u|s|h|j|js}!{~n} | ||||
| Hello {name|u|s|h|uc|j}!{~n} | ||||
| Hello {name|u|s|h|uc|js}!{~n} | ||||
| Hello {name|u|s|h|js|j}!{~n} | ||||
| Hello {name|u|s|h|js|uc}!{~n} | ||||
| Hello {name|u|s|j|h|uc}!{~n} | ||||
| Hello {name|u|s|j|h|js}!{~n} | ||||
| Hello {name|u|s|j|uc|h}!{~n} | ||||
| Hello {name|u|s|j|uc|js}!{~n} | ||||
| Hello {name|u|s|j|js|h}!{~n} | ||||
| Hello {name|u|s|j|js|uc}!{~n} | ||||
| Hello {name|u|s|uc|h|j}!{~n} | ||||
| Hello {name|u|s|uc|h|js}!{~n} | ||||
| Hello {name|u|s|uc|j|h}!{~n} | ||||
| Hello {name|u|s|uc|j|js}!{~n} | ||||
| Hello {name|u|s|uc|js|h}!{~n} | ||||
| Hello {name|u|s|uc|js|j}!{~n} | ||||
| Hello {name|u|s|js|h|j}!{~n} | ||||
| Hello {name|u|s|js|h|uc}!{~n} | ||||
| Hello {name|u|s|js|j|h}!{~n} | ||||
| Hello {name|u|s|js|j|uc}!{~n} | ||||
| Hello {name|u|s|js|uc|h}!{~n} | ||||
| Hello {name|u|s|js|uc|j}!{~n} | ||||
| Hello {name|u|h|s|j|uc}!{~n} | ||||
| Hello {name|u|h|s|j|js}!{~n} | ||||
| Hello {name|u|h|s|uc|j}!{~n} | ||||
| Hello {name|u|h|s|uc|js}!{~n} | ||||
| Hello {name|u|h|s|js|j}!{~n} | ||||
| Hello {name|u|h|s|js|uc}!{~n} | ||||
| Hello {name|u|h|j|s|uc}!{~n} | ||||
| Hello {name|u|h|j|s|js}!{~n} | ||||
| Hello {name|u|h|j|uc|s}!{~n} | ||||
| Hello {name|u|h|j|uc|js}!{~n} | ||||
| Hello {name|u|h|j|js|s}!{~n} | ||||
| Hello {name|u|h|j|js|uc}!{~n} | ||||
| Hello {name|u|h|uc|s|j}!{~n} | ||||
| Hello {name|u|h|uc|s|js}!{~n} | ||||
| Hello {name|u|h|uc|j|s}!{~n} | ||||
| Hello {name|u|h|uc|j|js}!{~n} | ||||
| Hello {name|u|h|uc|js|s}!{~n} | ||||
| Hello {name|u|h|uc|js|j}!{~n} | ||||
| Hello {name|u|h|js|s|j}!{~n} | ||||
| Hello {name|u|h|js|s|uc}!{~n} | ||||
| Hello {name|u|h|js|j|s}!{~n} | ||||
| Hello {name|u|h|js|j|uc}!{~n} | ||||
| Hello {name|u|h|js|uc|s}!{~n} | ||||
| Hello {name|u|h|js|uc|j}!{~n} | ||||
| Hello {name|u|j|s|h|uc}!{~n} | ||||
| Hello {name|u|j|s|h|js}!{~n} | ||||
| Hello {name|u|j|s|uc|h}!{~n} | ||||
| Hello {name|u|j|s|uc|js}!{~n} | ||||
| Hello {name|u|j|s|js|h}!{~n} | ||||
| Hello {name|u|j|s|js|uc}!{~n} | ||||
| Hello {name|u|j|h|s|uc}!{~n} | ||||
| Hello {name|u|j|h|s|js}!{~n} | ||||
| Hello {name|u|j|h|uc|s}!{~n} | ||||
| Hello {name|u|j|h|uc|js}!{~n} | ||||
| Hello {name|u|j|h|js|s}!{~n} | ||||
| Hello {name|u|j|h|js|uc}!{~n} | ||||
| Hello {name|u|j|uc|s|h}!{~n} | ||||
| Hello {name|u|j|uc|s|js}!{~n} | ||||
| Hello {name|u|j|uc|h|s}!{~n} | ||||
| Hello {name|u|j|uc|h|js}!{~n} | ||||
| Hello {name|u|j|uc|js|s}!{~n} | ||||
| Hello {name|u|j|uc|js|h}!{~n} | ||||
| Hello {name|u|j|js|s|h}!{~n} | ||||
| Hello {name|u|j|js|s|uc}!{~n} | ||||
| Hello {name|u|j|js|h|s}!{~n} | ||||
| Hello {name|u|j|js|h|uc}!{~n} | ||||
| Hello {name|u|j|js|uc|s}!{~n} | ||||
| Hello {name|u|j|js|uc|h}!{~n} | ||||
| Hello {name|u|uc|s|h|j}!{~n} | ||||
| Hello {name|u|uc|s|h|js}!{~n} | ||||
| Hello {name|u|uc|s|j|h}!{~n} | ||||
| Hello {name|u|uc|s|j|js}!{~n} | ||||
| Hello {name|u|uc|s|js|h}!{~n} | ||||
| Hello {name|u|uc|s|js|j}!{~n} | ||||
| Hello {name|u|uc|h|s|j}!{~n} | ||||
| Hello {name|u|uc|h|s|js}!{~n} | ||||
| Hello {name|u|uc|h|j|s}!{~n} | ||||
| Hello {name|u|uc|h|j|js}!{~n} | ||||
| Hello {name|u|uc|h|js|s}!{~n} | ||||
| Hello {name|u|uc|h|js|j}!{~n} | ||||
| Hello {name|u|uc|j|s|h}!{~n} | ||||
| Hello {name|u|uc|j|s|js}!{~n} | ||||
| Hello {name|u|uc|j|h|s}!{~n} | ||||
| Hello {name|u|uc|j|h|js}!{~n} | ||||
| Hello {name|u|uc|j|js|s}!{~n} | ||||
| Hello {name|u|uc|j|js|h}!{~n} | ||||
| Hello {name|u|uc|js|s|h}!{~n} | ||||
| Hello {name|u|uc|js|s|j}!{~n} | ||||
| Hello {name|u|uc|js|h|s}!{~n} | ||||
| Hello {name|u|uc|js|h|j}!{~n} | ||||
| Hello {name|u|uc|js|j|s}!{~n} | ||||
| Hello {name|u|uc|js|j|h}!{~n} | ||||
| Hello {name|u|js|s|h|j}!{~n} | ||||
| Hello {name|u|js|s|h|uc}!{~n} | ||||
| Hello {name|u|js|s|j|h}!{~n} | ||||
| Hello {name|u|js|s|j|uc}!{~n} | ||||
| Hello {name|u|js|s|uc|h}!{~n} | ||||
| Hello {name|u|js|s|uc|j}!{~n} | ||||
| Hello {name|u|js|h|s|j}!{~n} | ||||
| Hello {name|u|js|h|s|uc}!{~n} | ||||
| Hello {name|u|js|h|j|s}!{~n} | ||||
| Hello {name|u|js|h|j|uc}!{~n} | ||||
| Hello {name|u|js|h|uc|s}!{~n} | ||||
| Hello {name|u|js|h|uc|j}!{~n} | ||||
| Hello {name|u|js|j|s|h}!{~n} | ||||
| Hello {name|u|js|j|s|uc}!{~n} | ||||
| Hello {name|u|js|j|h|s}!{~n} | ||||
| Hello {name|u|js|j|h|uc}!{~n} | ||||
| Hello {name|u|js|j|uc|s}!{~n} | ||||
| Hello {name|u|js|j|uc|h}!{~n} | ||||
| Hello {name|u|js|uc|s|h}!{~n} | ||||
| Hello {name|u|js|uc|s|j}!{~n} | ||||
| Hello {name|u|js|uc|h|s}!{~n} | ||||
| Hello {name|u|js|uc|h|j}!{~n} | ||||
| Hello {name|u|js|uc|j|s}!{~n} | ||||
| Hello {name|u|js|uc|j|h}!{~n} | ||||
| Hello {name|uc|s|h|j|u}!{~n} | ||||
| Hello {name|uc|s|h|j|js}!{~n} | ||||
| Hello {name|uc|s|h|u|j}!{~n} | ||||
| Hello {name|uc|s|h|u|js}!{~n} | ||||
| Hello {name|uc|s|h|js|j}!{~n} | ||||
| Hello {name|uc|s|h|js|u}!{~n} | ||||
| Hello {name|uc|s|j|h|u}!{~n} | ||||
| Hello {name|uc|s|j|h|js}!{~n} | ||||
| Hello {name|uc|s|j|u|h}!{~n} | ||||
| Hello {name|uc|s|j|u|js}!{~n} | ||||
| Hello {name|uc|s|j|js|h}!{~n} | ||||
| Hello {name|uc|s|j|js|u}!{~n} | ||||
| Hello {name|uc|s|u|h|j}!{~n} | ||||
| Hello {name|uc|s|u|h|js}!{~n} | ||||
| Hello {name|uc|s|u|j|h}!{~n} | ||||
| Hello {name|uc|s|u|j|js}!{~n} | ||||
| Hello {name|uc|s|u|js|h}!{~n} | ||||
| Hello {name|uc|s|u|js|j}!{~n} | ||||
| Hello {name|uc|s|js|h|j}!{~n} | ||||
| Hello {name|uc|s|js|h|u}!{~n} | ||||
| Hello {name|uc|s|js|j|h}!{~n} | ||||
| Hello {name|uc|s|js|j|u}!{~n} | ||||
| Hello {name|uc|s|js|u|h}!{~n} | ||||
| Hello {name|uc|s|js|u|j}!{~n} | ||||
| Hello {name|uc|h|s|j|u}!{~n} | ||||
| Hello {name|uc|h|s|j|js}!{~n} | ||||
| Hello {name|uc|h|s|u|j}!{~n} | ||||
| Hello {name|uc|h|s|u|js}!{~n} | ||||
| Hello {name|uc|h|s|js|j}!{~n} | ||||
| Hello {name|uc|h|s|js|u}!{~n} | ||||
| Hello {name|uc|h|j|s|u}!{~n} | ||||
| Hello {name|uc|h|j|s|js}!{~n} | ||||
| Hello {name|uc|h|j|u|s}!{~n} | ||||
| Hello {name|uc|h|j|u|js}!{~n} | ||||
| Hello {name|uc|h|j|js|s}!{~n} | ||||
| Hello {name|uc|h|j|js|u}!{~n} | ||||
| Hello {name|uc|h|u|s|j}!{~n} | ||||
| Hello {name|uc|h|u|s|js}!{~n} | ||||
| Hello {name|uc|h|u|j|s}!{~n} | ||||
| Hello {name|uc|h|u|j|js}!{~n} | ||||
| Hello {name|uc|h|u|js|s}!{~n} | ||||
| Hello {name|uc|h|u|js|j}!{~n} | ||||
| Hello {name|uc|h|js|s|j}!{~n} | ||||
| Hello {name|uc|h|js|s|u}!{~n} | ||||
| Hello {name|uc|h|js|j|s}!{~n} | ||||
| Hello {name|uc|h|js|j|u}!{~n} | ||||
| Hello {name|uc|h|js|u|s}!{~n} | ||||
| Hello {name|uc|h|js|u|j}!{~n} | ||||
| Hello {name|uc|j|s|h|u}!{~n} | ||||
| Hello {name|uc|j|s|h|js}!{~n} | ||||
| Hello {name|uc|j|s|u|h}!{~n} | ||||
| Hello {name|uc|j|s|u|js}!{~n} | ||||
| Hello {name|uc|j|s|js|h}!{~n} | ||||
| Hello {name|uc|j|s|js|u}!{~n} | ||||
| Hello {name|uc|j|h|s|u}!{~n} | ||||
| Hello {name|uc|j|h|s|js}!{~n} | ||||
| Hello {name|uc|j|h|u|s}!{~n} | ||||
| Hello {name|uc|j|h|u|js}!{~n} | ||||
| Hello {name|uc|j|h|js|s}!{~n} | ||||
| Hello {name|uc|j|h|js|u}!{~n} | ||||
| Hello {name|uc|j|u|s|h}!{~n} | ||||
| Hello {name|uc|j|u|s|js}!{~n} | ||||
| Hello {name|uc|j|u|h|s}!{~n} | ||||
| Hello {name|uc|j|u|h|js}!{~n} | ||||
| Hello {name|uc|j|u|js|s}!{~n} | ||||
| Hello {name|uc|j|u|js|h}!{~n} | ||||
| Hello {name|uc|j|js|s|h}!{~n} | ||||
| Hello {name|uc|j|js|s|u}!{~n} | ||||
| Hello {name|uc|j|js|h|s}!{~n} | ||||
| Hello {name|uc|j|js|h|u}!{~n} | ||||
| Hello {name|uc|j|js|u|s}!{~n} | ||||
| Hello {name|uc|j|js|u|h}!{~n} | ||||
| Hello {name|uc|u|s|h|j}!{~n} | ||||
| Hello {name|uc|u|s|h|js}!{~n} | ||||
| Hello {name|uc|u|s|j|h}!{~n} | ||||
| Hello {name|uc|u|s|j|js}!{~n} | ||||
| Hello {name|uc|u|s|js|h}!{~n} | ||||
| Hello {name|uc|u|s|js|j}!{~n} | ||||
| Hello {name|uc|u|h|s|j}!{~n} | ||||
| Hello {name|uc|u|h|s|js}!{~n} | ||||
| Hello {name|uc|u|h|j|s}!{~n} | ||||
| Hello {name|uc|u|h|j|js}!{~n} | ||||
| Hello {name|uc|u|h|js|s}!{~n} | ||||
| Hello {name|uc|u|h|js|j}!{~n} | ||||
| Hello {name|uc|u|j|s|h}!{~n} | ||||
| Hello {name|uc|u|j|s|js}!{~n} | ||||
| Hello {name|uc|u|j|h|s}!{~n} | ||||
| Hello {name|uc|u|j|h|js}!{~n} | ||||
| Hello {name|uc|u|j|js|s}!{~n} | ||||
| Hello {name|uc|u|j|js|h}!{~n} | ||||
| Hello {name|uc|u|js|s|h}!{~n} | ||||
| Hello {name|uc|u|js|s|j}!{~n} | ||||
| Hello {name|uc|u|js|h|s}!{~n} | ||||
| Hello {name|uc|u|js|h|j}!{~n} | ||||
| Hello {name|uc|u|js|j|s}!{~n} | ||||
| Hello {name|uc|u|js|j|h}!{~n} | ||||
| Hello {name|uc|js|s|h|j}!{~n} | ||||
| Hello {name|uc|js|s|h|u}!{~n} | ||||
| Hello {name|uc|js|s|j|h}!{~n} | ||||
| Hello {name|uc|js|s|j|u}!{~n} | ||||
| Hello {name|uc|js|s|u|h}!{~n} | ||||
| Hello {name|uc|js|s|u|j}!{~n} | ||||
| Hello {name|uc|js|h|s|j}!{~n} | ||||
| Hello {name|uc|js|h|s|u}!{~n} | ||||
| Hello {name|uc|js|h|j|s}!{~n} | ||||
| Hello {name|uc|js|h|j|u}!{~n} | ||||
| Hello {name|uc|js|h|u|s}!{~n} | ||||
| Hello {name|uc|js|h|u|j}!{~n} | ||||
| Hello {name|uc|js|j|s|h}!{~n} | ||||
| Hello {name|uc|js|j|s|u}!{~n} | ||||
| Hello {name|uc|js|j|h|s}!{~n} | ||||
| Hello {name|uc|js|j|h|u}!{~n} | ||||
| Hello {name|uc|js|j|u|s}!{~n} | ||||
| Hello {name|uc|js|j|u|h}!{~n} | ||||
| Hello {name|uc|js|u|s|h}!{~n} | ||||
| Hello {name|uc|js|u|s|j}!{~n} | ||||
| Hello {name|uc|js|u|h|s}!{~n} | ||||
| Hello {name|uc|js|u|h|j}!{~n} | ||||
| Hello {name|uc|js|u|j|s}!{~n} | ||||
| Hello {name|uc|js|u|j|h}!{~n} | ||||
| Hello {name|js|s|h|j|u}!{~n} | ||||
| Hello {name|js|s|h|j|uc}!{~n} | ||||
| Hello {name|js|s|h|u|j}!{~n} | ||||
| Hello {name|js|s|h|u|uc}!{~n} | ||||
| Hello {name|js|s|h|uc|j}!{~n} | ||||
| Hello {name|js|s|h|uc|u}!{~n} | ||||
| Hello {name|js|s|j|h|u}!{~n} | ||||
| Hello {name|js|s|j|h|uc}!{~n} | ||||
| Hello {name|js|s|j|u|h}!{~n} | ||||
| Hello {name|js|s|j|u|uc}!{~n} | ||||
| Hello {name|js|s|j|uc|h}!{~n} | ||||
| Hello {name|js|s|j|uc|u}!{~n} | ||||
| Hello {name|js|s|u|h|j}!{~n} | ||||
| Hello {name|js|s|u|h|uc}!{~n} | ||||
| Hello {name|js|s|u|j|h}!{~n} | ||||
| Hello {name|js|s|u|j|uc}!{~n} | ||||
| Hello {name|js|s|u|uc|h}!{~n} | ||||
| Hello {name|js|s|u|uc|j}!{~n} | ||||
| Hello {name|js|s|uc|h|j}!{~n} | ||||
| Hello {name|js|s|uc|h|u}!{~n} | ||||
| Hello {name|js|s|uc|j|h}!{~n} | ||||
| Hello {name|js|s|uc|j|u}!{~n} | ||||
| Hello {name|js|s|uc|u|h}!{~n} | ||||
| Hello {name|js|s|uc|u|j}!{~n} | ||||
| Hello {name|js|h|s|j|u}!{~n} | ||||
| Hello {name|js|h|s|j|uc}!{~n} | ||||
| Hello {name|js|h|s|u|j}!{~n} | ||||
| Hello {name|js|h|s|u|uc}!{~n} | ||||
| Hello {name|js|h|s|uc|j}!{~n} | ||||
| Hello {name|js|h|s|uc|u}!{~n} | ||||
| Hello {name|js|h|j|s|u}!{~n} | ||||
| Hello {name|js|h|j|s|uc}!{~n} | ||||
| Hello {name|js|h|j|u|s}!{~n} | ||||
| Hello {name|js|h|j|u|uc}!{~n} | ||||
| Hello {name|js|h|j|uc|s}!{~n} | ||||
| Hello {name|js|h|j|uc|u}!{~n} | ||||
| Hello {name|js|h|u|s|j}!{~n} | ||||
| Hello {name|js|h|u|s|uc}!{~n} | ||||
| Hello {name|js|h|u|j|s}!{~n} | ||||
| Hello {name|js|h|u|j|uc}!{~n} | ||||
| Hello {name|js|h|u|uc|s}!{~n} | ||||
| Hello {name|js|h|u|uc|j}!{~n} | ||||
| Hello {name|js|h|uc|s|j}!{~n} | ||||
| Hello {name|js|h|uc|s|u}!{~n} | ||||
| Hello {name|js|h|uc|j|s}!{~n} | ||||
| Hello {name|js|h|uc|j|u}!{~n} | ||||
| Hello {name|js|h|uc|u|s}!{~n} | ||||
| Hello {name|js|h|uc|u|j}!{~n} | ||||
| Hello {name|js|j|s|h|u}!{~n} | ||||
| Hello {name|js|j|s|h|uc}!{~n} | ||||
| Hello {name|js|j|s|u|h}!{~n} | ||||
| Hello {name|js|j|s|u|uc}!{~n} | ||||
| Hello {name|js|j|s|uc|h}!{~n} | ||||
| Hello {name|js|j|s|uc|u}!{~n} | ||||
| Hello {name|js|j|h|s|u}!{~n} | ||||
| Hello {name|js|j|h|s|uc}!{~n} | ||||
| Hello {name|js|j|h|u|s}!{~n} | ||||
| Hello {name|js|j|h|u|uc}!{~n} | ||||
| Hello {name|js|j|h|uc|s}!{~n} | ||||
| Hello {name|js|j|h|uc|u}!{~n} | ||||
| Hello {name|js|j|u|s|h}!{~n} | ||||
| Hello {name|js|j|u|s|uc}!{~n} | ||||
| Hello {name|js|j|u|h|s}!{~n} | ||||
| Hello {name|js|j|u|h|uc}!{~n} | ||||
| Hello {name|js|j|u|uc|s}!{~n} | ||||
| Hello {name|js|j|u|uc|h}!{~n} | ||||
| Hello {name|js|j|uc|s|h}!{~n} | ||||
| Hello {name|js|j|uc|s|u}!{~n} | ||||
| Hello {name|js|j|uc|h|s}!{~n} | ||||
| Hello {name|js|j|uc|h|u}!{~n} | ||||
| Hello {name|js|j|uc|u|s}!{~n} | ||||
| Hello {name|js|j|uc|u|h}!{~n} | ||||
| Hello {name|js|u|s|h|j}!{~n} | ||||
| Hello {name|js|u|s|h|uc}!{~n} | ||||
| Hello {name|js|u|s|j|h}!{~n} | ||||
| Hello {name|js|u|s|j|uc}!{~n} | ||||
| Hello {name|js|u|s|uc|h}!{~n} | ||||
| Hello {name|js|u|s|uc|j}!{~n} | ||||
| Hello {name|js|u|h|s|j}!{~n} | ||||
| Hello {name|js|u|h|s|uc}!{~n} | ||||
| Hello {name|js|u|h|j|s}!{~n} | ||||
| Hello {name|js|u|h|j|uc}!{~n} | ||||
| Hello {name|js|u|h|uc|s}!{~n} | ||||
| Hello {name|js|u|h|uc|j}!{~n} | ||||
| Hello {name|js|u|j|s|h}!{~n} | ||||
| Hello {name|js|u|j|s|uc}!{~n} | ||||
| Hello {name|js|u|j|h|s}!{~n} | ||||
| Hello {name|js|u|j|h|uc}!{~n} | ||||
| Hello {name|js|u|j|uc|s}!{~n} | ||||
| Hello {name|js|u|j|uc|h}!{~n} | ||||
| Hello {name|js|u|uc|s|h}!{~n} | ||||
| Hello {name|js|u|uc|s|j}!{~n} | ||||
| Hello {name|js|u|uc|h|s}!{~n} | ||||
| Hello {name|js|u|uc|h|j}!{~n} | ||||
| Hello {name|js|u|uc|j|s}!{~n} | ||||
| Hello {name|js|u|uc|j|h}!{~n} | ||||
| Hello {name|js|uc|s|h|j}!{~n} | ||||
| Hello {name|js|uc|s|h|u}!{~n} | ||||
| Hello {name|js|uc|s|j|h}!{~n} | ||||
| Hello {name|js|uc|s|j|u}!{~n} | ||||
| Hello {name|js|uc|s|u|h}!{~n} | ||||
| Hello {name|js|uc|s|u|j}!{~n} | ||||
| Hello {name|js|uc|h|s|j}!{~n} | ||||
| Hello {name|js|uc|h|s|u}!{~n} | ||||
| Hello {name|js|uc|h|j|s}!{~n} | ||||
| Hello {name|js|uc|h|j|u}!{~n} | ||||
| Hello {name|js|uc|h|u|s}!{~n} | ||||
| Hello {name|js|uc|h|u|j}!{~n} | ||||
| Hello {name|js|uc|j|s|h}!{~n} | ||||
| Hello {name|js|uc|j|s|u}!{~n} | ||||
| Hello {name|js|uc|j|h|s}!{~n} | ||||
| Hello {name|js|uc|j|h|u}!{~n} | ||||
| Hello {name|js|uc|j|u|s}!{~n} | ||||
| Hello {name|js|uc|j|u|h}!{~n} | ||||
| Hello {name|js|uc|u|s|h}!{~n} | ||||
| Hello {name|js|uc|u|s|j}!{~n} | ||||
| Hello {name|js|uc|u|h|s}!{~n} | ||||
| Hello {name|js|uc|u|h|j}!{~n} | ||||
| Hello {name|js|uc|u|j|s}!{~n} | ||||
| Hello {name|js|uc|u|j|h}!{~n} | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters_two/null.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters_two/null.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": null | ||||
| } | ||||
							
								
								
									
										5
									
								
								js/test_cases/generated_filters_two/object.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								js/test_cases/generated_filters_two/object.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| { | ||||
|   "name": { | ||||
|     "foo": "bar" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										3
									
								
								js/test_cases/generated_filters_two/string.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								js/test_cases/generated_filters_two/string.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| { | ||||
|   "name": "{\"foo\": \"bar\"}" | ||||
| } | ||||
							
								
								
									
										174
									
								
								src/bin.rs
									
									
									
									
									
								
							
							
						
						
									
										174
									
								
								src/bin.rs
									
									
									
									
									
								
							| @ -73,11 +73,178 @@ fn read_context_from_stdin() -> serde_json::Value { | ||||
|     serde_json::from_str(&buffer).expect("Failed to parse json") | ||||
| } | ||||
| 
 | ||||
| fn html_escape(inp: &str) -> String { | ||||
|     // Adding 10% space from the original to avoid re-allocations by
 | ||||
|     // leaving room for escaped sequences.
 | ||||
|     let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); | ||||
|     inp.chars().for_each(|c| match c { | ||||
|         '<' => output.push_str("<"), | ||||
|         '>' => output.push_str(">"), | ||||
|         '"' => output.push_str("""), | ||||
|         '\'' => output.push_str("'"), | ||||
|         '&' => output.push_str("&"), | ||||
|         _ => output.push(c), | ||||
|     }); | ||||
|     output | ||||
| } | ||||
| 
 | ||||
| fn javascript_escape(inp: &str) -> String { | ||||
|     // Adding 10% space from the original to avoid re-allocations by
 | ||||
|     // leaving room for escaped sequences.
 | ||||
|     let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); | ||||
|     inp.chars().for_each(|c| match c { | ||||
|         '"' => output.push_str(r#"\""#), | ||||
|         '\'' => output.push_str(r#"\'"#), | ||||
|         '\t' => output.push_str(r#"\t"#), | ||||
|         '\x0C' => output.push_str(r#"\f"#), | ||||
|         '\n' => output.push_str(r#"\n"#), | ||||
|         '\r' => output.push_str(r#"\r"#), | ||||
|         '\\' => output.push_str(r#"\\"#), | ||||
|         '/' => output.push_str(r#"\/"#), | ||||
|         _ => output.push(c), | ||||
|     }); | ||||
|     output | ||||
| } | ||||
| 
 | ||||
| fn get_utf8_hex(inp: char) -> String { | ||||
|     let num_bytes = inp.len_utf8(); | ||||
|     let mut byte_buffer = [0; 4]; // UTF-8 supports up to 4 bytes per codepoint
 | ||||
|     let mut output = String::with_capacity(num_bytes * 2); | ||||
| 
 | ||||
|     inp.encode_utf8(&mut byte_buffer); | ||||
| 
 | ||||
|     for b in &byte_buffer[..num_bytes] { | ||||
|         output.push_str(&format!("{:02X}", b)); | ||||
|     } | ||||
| 
 | ||||
|     output | ||||
| } | ||||
| 
 | ||||
| fn encode_uri(inp: &str) -> String { | ||||
|     // Adding 10% space from the original to avoid re-allocations by
 | ||||
|     // leaving room for escaped sequences.
 | ||||
|     let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); | ||||
|     inp.chars().for_each(|c| match c { | ||||
|         '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a' | 'b' | 'c' | 'd' | 'e' | ||||
|         | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | ||||
|         | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | ||||
|         | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | ||||
|         | 'V' | 'W' | 'X' | 'Y' | 'Z' | ';' | ',' | '/' | '?' | ':' | '@' | '&' | '=' | '+' | ||||
|         | '$' | '-' | '_' | '.' | '!' | '~' | '*' | '\'' | '(' | ')' | '#' => output.push(c), | ||||
|         _ => { | ||||
|             output.push('%'); | ||||
|             output.push_str(&get_utf8_hex(c)); | ||||
|         } | ||||
|     }); | ||||
|     output | ||||
| } | ||||
| 
 | ||||
| fn encode_uri_component(inp: &str) -> String { | ||||
|     // Adding 10% space from the original to avoid re-allocations by
 | ||||
|     // leaving room for escaped sequences.
 | ||||
|     let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); | ||||
|     inp.chars().for_each(|c| match c { | ||||
|         '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a' | 'b' | 'c' | 'd' | 'e' | ||||
|         | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | ||||
|         | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | ||||
|         | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | ||||
|         | 'V' | 'W' | 'X' | 'Y' | 'Z' | '-' | '_' | '.' | '!' | '~' | '*' | '\'' | '(' | ')' => { | ||||
|             output.push(c) | ||||
|         } | ||||
|         _ => { | ||||
|             output.push('%'); | ||||
|             output.push_str(&get_utf8_hex(c)); | ||||
|         } | ||||
|     }); | ||||
|     output | ||||
| } | ||||
| 
 | ||||
| fn apply_filter( | ||||
|     json_value: &serde_json::Value, | ||||
|     filter: &Filter, | ||||
| ) -> Result<serde_json::Value, RenderError> { | ||||
|     match (json_value, filter) { | ||||
|         // Html escape filter
 | ||||
|         (serde_json::Value::String(string), Filter::HtmlEncode) => { | ||||
|             Ok(serde_json::Value::String(html_escape(string))) | ||||
|         } | ||||
|         (_, Filter::HtmlEncode) => Ok(serde_json::Value::String(html_escape( | ||||
|             &json_value.render(&Vec::new())?, | ||||
|         ))), | ||||
|         // Disable html escape filter
 | ||||
|         (_, Filter::DisableHtmlEncode) => panic!("The |s filter is automatically removed by the renderer since it is a no-op during rendering."), | ||||
|         // Parse JSON filter
 | ||||
|         (serde_json::Value::String(string), Filter::JsonParse) => { | ||||
|             serde_json::from_str(&string).or(Err(RenderError::InvalidJson(string.to_owned()))) | ||||
|         } | ||||
|         (_, Filter::JsonParse) => { | ||||
|             let rendered_value = json_value.render(&Vec::new())?; | ||||
|             serde_json::from_str(&rendered_value).or(Err(RenderError::InvalidJson(rendered_value))) | ||||
|         } | ||||
|         // Json Stringify filter
 | ||||
|         (_, Filter::JsonStringify) => { | ||||
|             Ok(serde_json::Value::String(json_value.to_string())) | ||||
|         } | ||||
|         // Javascript escape filter
 | ||||
|         (serde_json::Value::String(string), Filter::JavascriptStringEncode) => { | ||||
|             Ok(serde_json::Value::String(javascript_escape(string))) | ||||
|         } | ||||
|         (serde_json::Value::Bool(boolean), Filter::JavascriptStringEncode) => { | ||||
|             Ok(serde_json::Value::Bool(*boolean)) | ||||
|         } | ||||
|         (serde_json::Value::Number(number), Filter::JavascriptStringEncode) => { | ||||
|             Ok(serde_json::Value::Number(number.clone())) | ||||
|         } | ||||
|         (serde_json::Value::Array(arr), Filter::JavascriptStringEncode) => { | ||||
|             Ok(serde_json::Value::Array(arr.clone())) | ||||
|         } | ||||
|         (serde_json::Value::Object(obj), Filter::JavascriptStringEncode) => { | ||||
|             Ok(serde_json::Value::Object(obj.clone())) | ||||
|         } | ||||
|         (_, Filter::JavascriptStringEncode) => Ok(serde_json::Value::String(javascript_escape( | ||||
|             &json_value.render(&Vec::new())?, | ||||
|         ))), | ||||
|         // EncodeURI filter
 | ||||
|         (serde_json::Value::String(string), Filter::EncodeUri) => { | ||||
|             Ok(serde_json::Value::String(encode_uri(string))) | ||||
|         } | ||||
|         (_, Filter::EncodeUri) => Ok(serde_json::Value::String(encode_uri( | ||||
|             &json_value.render(&Vec::new())?, | ||||
|         ))), | ||||
|         // EncodeURIComponent filter
 | ||||
|         (serde_json::Value::String(string), Filter::EncodeUriComponent) => { | ||||
|             Ok(serde_json::Value::String(encode_uri_component(string))) | ||||
|         } | ||||
|         (_, Filter::EncodeUriComponent) => Ok(serde_json::Value::String(encode_uri_component( | ||||
|             &json_value.render(&Vec::new())?, | ||||
|         ))), | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn apply_filters( | ||||
|     json_value: &serde_json::Value, | ||||
|     filters: &[Filter], | ||||
| ) -> Result<serde_json::Value, RenderError> { | ||||
|     let mut final_value: serde_json::Value = apply_filter(json_value, &filters[0])?; | ||||
| 
 | ||||
|     for filter in &filters[1..] { | ||||
|         final_value = apply_filter(&final_value, filter)?; | ||||
|     } | ||||
| 
 | ||||
|     Ok(final_value) | ||||
| } | ||||
| 
 | ||||
| impl ContextElement for serde_json::Value {} | ||||
| 
 | ||||
| impl Renderable for serde_json::Value { | ||||
|     fn render(&self, _filters: &Vec<Filter>) -> Result<String, RenderError> { | ||||
|         match self { | ||||
|         let after_apply = if _filters.is_empty() { | ||||
|             None | ||||
|         } else { | ||||
|             Some(apply_filters(self, _filters)?) | ||||
|         }; | ||||
| 
 | ||||
|         match after_apply.as_ref().unwrap_or(self) { | ||||
|             serde_json::Value::Null => Ok("".to_owned()), | ||||
|             serde_json::Value::Bool(boolean) => Ok(boolean.to_string()), | ||||
|             serde_json::Value::Number(num) => Ok(num.to_string()), | ||||
| @ -395,4 +562,9 @@ mod tests { | ||||
|             Ok::<_, RenderError>("3,5,7,9".to_owned()) | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     #[test] | ||||
|     fn test_html_escape() { | ||||
|         assert_eq!(html_escape("<>&\"'"), "<>&"'".to_owned()) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -8,6 +8,7 @@ use std::fmt; | ||||
| pub enum RenderError { | ||||
|     Generic(String), | ||||
|     TemplateNotFound(String), | ||||
|     InvalidJson(String), | ||||
| } | ||||
| 
 | ||||
| #[derive(PartialEq)] | ||||
| @ -27,6 +28,11 @@ impl fmt::Display for RenderError { | ||||
|             RenderError::TemplateNotFound(name) => { | ||||
|                 write!(f, "No template named {} in context", name) | ||||
|             } | ||||
|             RenderError::InvalidJson(invalid_json) => write!( | ||||
|                 f, | ||||
|                 "Attempted to parse the following invalid JSON: {}", | ||||
|                 invalid_json | ||||
|             ), | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -38,6 +44,11 @@ impl fmt::Debug for RenderError { | ||||
|             RenderError::TemplateNotFound(name) => { | ||||
|                 write!(f, "No template named {} in context", name) | ||||
|             } | ||||
|             RenderError::InvalidJson(invalid_json) => write!( | ||||
|                 f, | ||||
|                 "Attempted to parse the following invalid JSON: {}", | ||||
|                 invalid_json | ||||
|             ), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -6,7 +6,7 @@ use crate::parser::PartialNameElement; | ||||
| use crate::parser::RValue; | ||||
| use crate::parser::Special; | ||||
| use crate::parser::Template; | ||||
| use crate::parser::TemplateElement; | ||||
| use crate::parser::{Filter, TemplateElement}; | ||||
| use crate::renderer::context_element::ContextElement; | ||||
| use crate::renderer::errors::CompileError; | ||||
| use crate::renderer::errors::RenderError; | ||||
| @ -15,7 +15,7 @@ use crate::renderer::inline_partial_tree::extract_inline_partials; | ||||
| use crate::renderer::inline_partial_tree::InlinePartialTreeElement; | ||||
| use crate::renderer::parameters_context::ParametersContext; | ||||
| use crate::renderer::walking::walk_path; | ||||
| use std::{cmp::Ordering, collections::HashMap}; | ||||
| use std::collections::HashMap; | ||||
| 
 | ||||
| #[derive(Clone, Debug)] | ||||
| pub struct CompiledTemplate<'a> { | ||||
| @ -153,7 +153,7 @@ impl<'a> DustRenderer<'a> { | ||||
|                         if loop_elements.is_empty() { | ||||
|                             return Ok("".to_owned()); | ||||
|                         } else { | ||||
|                             return final_val.render(&reference.filters); | ||||
|                             return final_val.render(&Self::preprocess_filters(&reference.filters)); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
| @ -500,6 +500,21 @@ impl<'a> DustRenderer<'a> { | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn preprocess_filters(filters: &Vec<Filter>) -> Vec<Filter> { | ||||
|         let mut final_filters: Vec<Filter> = filters | ||||
|             .into_iter() | ||||
|             .filter(|f| f != &&Filter::DisableHtmlEncode) | ||||
|             .map(|f| f.clone()) | ||||
|             .collect(); | ||||
| 
 | ||||
|         // If the user has not specified any escaping filter (|s or
 | ||||
|         // |h), automatically add an html escape filter
 | ||||
|         if !filters.iter().any(|f| f == &Filter::DisableHtmlEncode) { | ||||
|             final_filters.push(Filter::HtmlEncode); | ||||
|         } | ||||
|         final_filters | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| @ -510,6 +525,7 @@ mod tests { | ||||
|     use crate::renderer::context_element::Renderable; | ||||
|     use crate::renderer::context_element::Walkable; | ||||
|     use crate::renderer::CompareContextElement; | ||||
|     use std::cmp::Ordering; | ||||
| 
 | ||||
|     impl ContextElement for String {} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander