|
|
- /*
- 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;
- };
|