UNPKG

avalon-loader

Version:

A single-file webpack loader for avalon.js

45 lines (41 loc) 1.16 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ var Parser = require( 'fastparse' ); var processMatch = function ( match, strUntilValue, name, value, index ) { if ( !this.isRelevantTagAttr( this.currentTag, name ) ) { return; } this.results.push( { start: index + strUntilValue.length, length: value.length, value: value } ); }; var parser = new Parser( { outside: { '<!--.*?-->': true, '<![CDATA[.*?]]>': true, '<[!\\?].*?>': true, '<\/[^>]+>': true, '<([a-zA-Z\\-:]+)\\s*': function ( match, tagName ) { this.currentTag = tagName; return 'inside'; } }, inside: { '\\s+': true, // eat up whitespace '>': 'outside', // end of attributes '(([0-9a-zA-Z\\-:\.]+)\\s*=\\s*")([^"]*)"': processMatch, '(([0-9a-zA-Z\\-:\.]+)\\s*=\\s*\')([^\']*)\'': processMatch, '(([0-9a-zA-Z\\-:\.]+)\\s*=\\s*)([^\\s>]+)': processMatch } } ); module.exports = function parse( html, isRelevantTagAttr ) { return parser.parse( 'outside', html, { currentTag: null, results: [], isRelevantTagAttr: isRelevantTagAttr } ).results; };