Blame view

node_modules/css-selector-tokenizer/lib/stringifyValues.js 1.46 KB
ce4c83ff   wxy   初始提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  "use strict";
  
  var cssesc = require("cssesc");
  
  var stringify;
  
  function escape(str, stringType) {
  	return cssesc(str, {
  		quotes: stringType === "\"" ? "double" : "single"
  	});
  }
  
  function stringifyWithoutBeforeAfter(tree) {
  	switch(tree.type) {
  	case "values":
  		return tree.nodes.map(stringify).join(",");
  	case "value":
  		return tree.nodes.map(stringify).join("");
  	case "item":
  		return tree.name;
  	case "nested-item":
  		return tree.name + "(" + tree.nodes.map(stringify).join(",") + ")";
  	case "invalid":
  		return tree.value;
  	case "comment":
  		return "/*" + tree.content + "*/";
  	case "string":
  		switch(tree.stringType) {
  		case "'":
  			return "'" + escape(tree.value, "'") + "'";
  		case "\"":
  			return "\"" + escape(tree.value, "\"") + "\"";
  		}
  		/* istanbul ignore next */
  		throw new Error("Invalid stringType");
  	case "url":
  		var start = "url(" + (tree.innerSpacingBefore || "");
  		var end = (tree.innerSpacingAfter || "") + ")";
  		switch(tree.stringType) {
  		case "'":
  			return start + "'" + tree.url.replace(/(\\)/g, "\\$1").replace(/'/g, "\\'") + "'" + end;
  		case "\"":
  			return start + "\"" + tree.url.replace(/(\\)/g, "\\$1").replace(/"/g, "\\\"") + "\"" + end;
  		default:
  			return start + tree.url.replace(/("|'|\)|\\)/g, "\\$1") + end;
  		}
  	}
  }
  
  
  stringify = function stringify(tree) {
  	var str = stringifyWithoutBeforeAfter(tree);
  	if(tree.before) {
  		str = tree.before + str;
  	}
  	if(tree.after) {
  		str = str + tree.after;
  	}
  	return str;
  };
  
  module.exports = stringify;