You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					49 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					49 lines
				
				1.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								function stringifyNode(node, custom) {
							 | 
						||
| 
								 | 
							
								  var type = node.type;
							 | 
						||
| 
								 | 
							
								  var value = node.value;
							 | 
						||
| 
								 | 
							
								  var buf;
							 | 
						||
| 
								 | 
							
								  var customResult;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (custom && (customResult = custom(node)) !== undefined) {
							 | 
						||
| 
								 | 
							
								    return customResult;
							 | 
						||
| 
								 | 
							
								  } else if (type === "word" || type === "space") {
							 | 
						||
| 
								 | 
							
								    return value;
							 | 
						||
| 
								 | 
							
								  } else if (type === "string") {
							 | 
						||
| 
								 | 
							
								    buf = node.quote || "";
							 | 
						||
| 
								 | 
							
								    return buf + value + (node.unclosed ? "" : buf);
							 | 
						||
| 
								 | 
							
								  } else if (type === "comment") {
							 | 
						||
| 
								 | 
							
								    return "/*" + value + (node.unclosed ? "" : "*/");
							 | 
						||
| 
								 | 
							
								  } else if (type === "div") {
							 | 
						||
| 
								 | 
							
								    return (node.before || "") + value + (node.after || "");
							 | 
						||
| 
								 | 
							
								  } else if (Array.isArray(node.nodes)) {
							 | 
						||
| 
								 | 
							
								    buf = stringify(node.nodes, custom);
							 | 
						||
| 
								 | 
							
								    if (type !== "function") {
							 | 
						||
| 
								 | 
							
								      return buf;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return (
							 | 
						||
| 
								 | 
							
								      value +
							 | 
						||
| 
								 | 
							
								      "(" +
							 | 
						||
| 
								 | 
							
								      (node.before || "") +
							 | 
						||
| 
								 | 
							
								      buf +
							 | 
						||
| 
								 | 
							
								      (node.after || "") +
							 | 
						||
| 
								 | 
							
								      (node.unclosed ? "" : ")")
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function stringify(nodes, custom) {
							 | 
						||
| 
								 | 
							
								  var result, i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (Array.isArray(nodes)) {
							 | 
						||
| 
								 | 
							
								    result = "";
							 | 
						||
| 
								 | 
							
								    for (i = nodes.length - 1; ~i; i -= 1) {
							 | 
						||
| 
								 | 
							
								      result = stringifyNode(nodes[i], custom) + result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return result;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return stringifyNode(nodes, custom);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = stringify;
							 |