add:  tqp = qparts.shift(); }else if(tqp.oper == "~"){ prefix = "/following-sibling::"; tqp = qparts.shift(); }else if(tqp.oper == "+"){     prefix = "/following-sibling::"; postfix = "[position()=1]"; 
context: 	var buildPath = function(query){		var xpath = ".";		var qparts = getQueryParts(d.trim(query));		while(qparts.length){			var tqp = qparts.shift();			var prefix;			// FIXME: need to add support for ~ and +			if(tqp.oper == ">"){				prefix = "/";				// prefix = "/child::node()";				tqp = qparts.shift();			}else{				prefix = "//";				// prefix = "/descendant::node()"			}			// get the tag name (if any)			xpath += prefix + tqp.tag;						// check to see if it's got an id. Needs to come first in xpath.			if(tqp.id){				xpath += "[@id='"+tqp.id+"'][1]";			}			d.forEach(tqp.classes, function(cn){				var cnl = cn.length;				var padding = " ";				if(cn.charAt(cnl-1) == "*"){					padding = ""; cn = cn.substr(0, cnl-1);				}				xpath += 					"[contains(concat(' ',@class,' '), ' "+					cn + padding + "')]";			});			handleAttrs(xPathAttrs, tqp, 				function(condition){						return "[@"+condition+"]";				},				function(matcher){					xpath += matcher;				}			);			// FIXME: need to implement pseudo-class checks!!		};		return xpath;	};
meta: 4497	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/4497/20818d78af35454de0cfeffad05a9251a618bede/query.js/buggy/_base/query.js