From a6c8a76694489d9ba81554fd19fd85d755eeead2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Mon, 2 Mar 2015 10:40:55 -0800 Subject: [PATCH] Replace regex usage with basic string manipulation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apparently we can’t rely on the existence of yet. Fixes #919. --- src/mbgl/util/mapbox.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/mbgl/util/mapbox.cpp b/src/mbgl/util/mapbox.cpp index 3e8bbc030..f89ed6c00 100644 --- a/src/mbgl/util/mapbox.cpp +++ b/src/mbgl/util/mapbox.cpp @@ -1,7 +1,6 @@ #include #include -#include namespace mbgl { namespace util { @@ -44,8 +43,23 @@ std::string normalizeTileURL(const std::string& url, const std::string& sourceUR if (sourceURL.empty() || sourceURL.compare(0, mapbox.length(), mapbox) != 0) return url; - static std::regex extension_re("\\.((?:png|jpg)\\d*)(?=$|\\?)"); - return std::regex_replace(url, extension_re, std::string("{ratio}.$1")); + std::string::size_type queryIdx = url.rfind("?"); + // Trim off the right end but never touch anything before the extension dot. + std::string urlSansParams((queryIdx == std::string::npos) ? url : url.substr(0, queryIdx)); + + while (!urlSansParams.empty() && isdigit(urlSansParams.back())) + urlSansParams.pop_back(); + + std::string::size_type extensionIdx = urlSansParams.length() - 4; + if (extensionIdx <= 0) + return url; + std::string extension = urlSansParams.substr(extensionIdx); + if (extension.compare(".png") != 0 && extension.compare(".jpg") != 0) + return url; + + std::string normalizedURL(url); + normalizedURL.insert(extensionIdx, "{ratio}"); + return normalizedURL; } }