mirror of
				https://github.com/MaskRay/ccls.git
				synced 2025-11-04 14:17:07 +00:00 
			
		
		
		
	
							parent
							
								
									16bf3158c5
								
							
						
					
					
						commit
						535c2c20a3
					
				@ -219,18 +219,33 @@ void lsDocumentUri::SetPath(const std::string& path) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // subset of reserved characters from the URI standard
 | 
					  // subset of reserved characters from the URI standard
 | 
				
			||||||
  // http://www.ecma-international.org/ecma-262/6.0/#sec-uri-syntax-and-semantics
 | 
					  // http://www.ecma-international.org/ecma-262/6.0/#sec-uri-syntax-and-semantics
 | 
				
			||||||
  raw_uri = ReplaceAll(raw_uri, " ", "%20");
 | 
					  std::string t;
 | 
				
			||||||
  raw_uri = ReplaceAll(raw_uri, "(", "%28");
 | 
					  t.reserve(8 + raw_uri.size());
 | 
				
			||||||
  raw_uri = ReplaceAll(raw_uri, ")", "%29");
 | 
					  // TODO: proper fix
 | 
				
			||||||
  raw_uri = ReplaceAll(raw_uri, "#", "%23");
 | 
					 | 
				
			||||||
  raw_uri = ReplaceAll(raw_uri, ",", "%2C");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TODO: proper fix
 | 
					 | 
				
			||||||
#if defined(_WIN32)
 | 
					#if defined(_WIN32)
 | 
				
			||||||
  raw_uri = "file:///" + raw_uri;
 | 
					  t += "file:///";
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
  raw_uri = "file://" + raw_uri;
 | 
					  t += "file://";
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // clang-format off
 | 
				
			||||||
 | 
					  for (char c : raw_uri)
 | 
				
			||||||
 | 
					    switch (c) {
 | 
				
			||||||
 | 
					    case ' ': t += "%20"; break;
 | 
				
			||||||
 | 
					    case '#': t += "%23"; break;
 | 
				
			||||||
 | 
					    case '$': t += "%24"; break;
 | 
				
			||||||
 | 
					    case '&': t += "%26"; break;
 | 
				
			||||||
 | 
					    case '(': t += "%28"; break;
 | 
				
			||||||
 | 
					    case ')': t += "%29"; break;
 | 
				
			||||||
 | 
					    case '+': t += "%2B"; break;
 | 
				
			||||||
 | 
					    case ',': t += "%2C"; break;
 | 
				
			||||||
 | 
					    case ';': t += "%3B"; break;
 | 
				
			||||||
 | 
					    case '?': t += "%3F"; break;
 | 
				
			||||||
 | 
					    case '@': t += "%40"; break;
 | 
				
			||||||
 | 
					    default: t += c; break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  // clang-format on
 | 
				
			||||||
 | 
					  raw_uri = std::move(t);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
std::string lsDocumentUri::GetPath() const {
 | 
					std::string lsDocumentUri::GetPath() const {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user