Add: meta-parser
This commit is contained in:
		
							parent
							
								
									a4df641b96
								
							
						
					
					
						commit
						7d75dd8754
					
				
							
								
								
									
										46
									
								
								js/meta-parser.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								js/meta-parser.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | ||||||
|  | /* global usercssMeta colorConverter */ | ||||||
|  | 'use strict'; | ||||||
|  | 
 | ||||||
|  | // eslint-disable-next-line no-var
 | ||||||
|  | var metaParser = (() => { | ||||||
|  |   const parser = usercssMeta.createParser({ | ||||||
|  |     validateVar: { | ||||||
|  |       select: state => { | ||||||
|  |         if (state.value !== null && state.varResult.options.every(o => o.name !== state.value)) { | ||||||
|  |           throw new Error('select value mismatch'); | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       color: state => { | ||||||
|  |         if (state.value !== null) { | ||||||
|  |           colorConverter.format(colorConverter.parse(state.value), 'rgb'); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  |   return {parse, nullifyInvalidVars}; | ||||||
|  | 
 | ||||||
|  |   function parse(text, indexOffset) { | ||||||
|  |     try { | ||||||
|  |       return parser.parse(text); | ||||||
|  |     } catch (err) { | ||||||
|  |       if (typeof err.index === 'number') { | ||||||
|  |         err.index += indexOffset; | ||||||
|  |       } | ||||||
|  |       throw err; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   function nullifyInvalidVars(vars) { | ||||||
|  |     for (const va of Object.values(vars)) { | ||||||
|  |       if (va.value === null) { | ||||||
|  |         continue; | ||||||
|  |       } | ||||||
|  |       try { | ||||||
|  |         parser.validateVar(va); | ||||||
|  |       } catch (err) { | ||||||
|  |         va.value = null; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     return vars; | ||||||
|  |   } | ||||||
|  | })(); | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user