parserlib: container query
This commit is contained in:
		
							parent
							
								
									31177f1017
								
							
						
					
					
						commit
						484ff24950
					
				|  | @ -213,6 +213,9 @@ self.parserlib = (() => { | ||||||
|     'columns': 1, |     'columns': 1, | ||||||
|     'contain': 'none | strict | content | [ size || layout || style || paint ]', |     'contain': 'none | strict | content | [ size || layout || style || paint ]', | ||||||
|     'contain-intrinsic-size': 'none | <length>{1,2}', |     'contain-intrinsic-size': 'none | <length>{1,2}', | ||||||
|  |     'container': '<container-name> [ / <container-type> ]?', | ||||||
|  |     'container-name': '<container-name>', | ||||||
|  |     'container-type': '<container-type>', | ||||||
|     'content': 'normal | none | <content-list> [ / <string> ]?', |     'content': 'normal | none | <content-list> [ / <string> ]?', | ||||||
|     'content-visibility': 'visible | auto | hidden', |     'content-visibility': 'visible | auto | hidden', | ||||||
|     'counter-increment': '<counter>', |     'counter-increment': '<counter>', | ||||||
|  | @ -880,6 +883,8 @@ self.parserlib = (() => { | ||||||
|     '<clip-path>': '<basic-shape> || <geometry-box>', |     '<clip-path>': '<basic-shape> || <geometry-box>', | ||||||
|     '<color>': '<hex-color> | <named-color> | rgb( <rgb-color> ) | rgba( <rgb-color> ) | ' + |     '<color>': '<hex-color> | <named-color> | rgb( <rgb-color> ) | rgba( <rgb-color> ) | ' + | ||||||
|       'hsl( <hsl-color> ) | hsla( <hsl-color> ) | hwb( <hwb-color> )', |       'hsl( <hsl-color> ) | hsla( <hsl-color> ) | hwb( <hwb-color> )', | ||||||
|  |     '<container-name>': 'none | <custom-ident>+', | ||||||
|  |     '<container-type>': 'normal || [ size | inline-size ]', | ||||||
|     '<content-list>': |     '<content-list>': | ||||||
|       '[ <string> | <image> | <attr> | ' + |       '[ <string> | <image> | <attr> | ' + | ||||||
|       'content( text | before | after | first-letter | marker ) | ' + |       'content( text | before | after | first-letter | marker ) | ' + | ||||||
|  | @ -1238,6 +1243,7 @@ self.parserlib = (() => { | ||||||
|     STRING: {}, |     STRING: {}, | ||||||
|     // at-keywords
 |     // at-keywords
 | ||||||
|     CHARSET_SYM: {text: '@charset'}, |     CHARSET_SYM: {text: '@charset'}, | ||||||
|  |     CONTAINER_SYM: {text: '@container'}, | ||||||
|     DOCUMENT_SYM: {text: ['@document', '@-moz-document']}, |     DOCUMENT_SYM: {text: ['@document', '@-moz-document']}, | ||||||
|     FONT_FACE_SYM: {text: '@font-face'}, |     FONT_FACE_SYM: {text: '@font-face'}, | ||||||
|     FONT_PALETTE_VALUES_SYM: {text: '@font-palette-values'}, |     FONT_PALETTE_VALUES_SYM: {text: '@font-palette-values'}, | ||||||
|  | @ -3618,6 +3624,26 @@ self.parserlib = (() => { | ||||||
|       this._ws(); |       this._ws(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     _container(start) { | ||||||
|  |       this._ws(); | ||||||
|  |       const stream = this._tokenStream; | ||||||
|  |       const next = stream.get(true).value; | ||||||
|  |       let name; | ||||||
|  |       if (/^(\(|not)$/i.test(next)) { | ||||||
|  |         stream.unget(); | ||||||
|  |       } else { | ||||||
|  |         name = next; | ||||||
|  |         stream.mustMatch(Tokens.S); | ||||||
|  |       } | ||||||
|  |       // TODO: write a proper condition parser
 | ||||||
|  |       const condition = stream.readDeclValue({omitComments: true, stopOn: ';{}'}); | ||||||
|  |       stream.mustMatch(Tokens.LBRACE); | ||||||
|  |       this.fire({type: 'startcontainer', name, condition}, start); | ||||||
|  |       this._rulesetBlock(start); | ||||||
|  |       this.fire('endcontainer'); | ||||||
|  |       this._ws(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     _supports(start) { |     _supports(start) { | ||||||
|       const stream = this._tokenStream; |       const stream = this._tokenStream; | ||||||
|       this._ws(); |       this._ws(); | ||||||
|  | @ -4586,11 +4612,13 @@ self.parserlib = (() => { | ||||||
|   Object.assign(Parser.prototype, TYPES); |   Object.assign(Parser.prototype, TYPES); | ||||||
|   Parser.prototype._readWhitespace = Parser.prototype._ws; |   Parser.prototype._readWhitespace = Parser.prototype._ws; | ||||||
| 
 | 
 | ||||||
|  |   ParserRoute[Tokens.CONTAINER_SYM] = // we don't allow @document inside @container
 | ||||||
|   ParserRoute[Tokens.DOCUMENT_SYM] = |   ParserRoute[Tokens.DOCUMENT_SYM] = | ||||||
|   ParserRoute[Tokens.LAYER_SYM] = |   ParserRoute[Tokens.LAYER_SYM] = | ||||||
|   ParserRoute[Tokens.MEDIA_SYM] = |   ParserRoute[Tokens.MEDIA_SYM] = | ||||||
|   ParserRoute[Tokens.SUPPORTS_SYM] = { |   ParserRoute[Tokens.SUPPORTS_SYM] = { | ||||||
|     [Tokens.DOCUMENT_SYM]: Parser.prototype._documentMisplaced, |     [Tokens.DOCUMENT_SYM]: Parser.prototype._documentMisplaced, | ||||||
|  |     [Tokens.CONTAINER_SYM]: Parser.prototype._container, | ||||||
|     [Tokens.FONT_FACE_SYM]: Parser.prototype._fontFace, |     [Tokens.FONT_FACE_SYM]: Parser.prototype._fontFace, | ||||||
|     [Tokens.FONT_PALETTE_VALUES_SYM]: Parser.prototype._fontPaletteValues, |     [Tokens.FONT_PALETTE_VALUES_SYM]: Parser.prototype._fontPaletteValues, | ||||||
|     [Tokens.KEYFRAMES_SYM]: Parser.prototype._keyframes, |     [Tokens.KEYFRAMES_SYM]: Parser.prototype._keyframes, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user