| 1231 | } |
| 1232 | |
| 1233 | ConstConfigRcPtr Config::CreateFromBuiltinConfig(const char * configName) |
| 1234 | { |
| 1235 | std::string builtinConfigName = configName; |
| 1236 | |
| 1237 | // Normalize the input to the URI format. |
| 1238 | if (!StringUtils::StartsWith(builtinConfigName, OCIO_BUILTIN_URI_PREFIX)) |
| 1239 | { |
| 1240 | builtinConfigName = std::string(OCIO_BUILTIN_URI_PREFIX) + builtinConfigName; |
| 1241 | } |
| 1242 | |
| 1243 | // Resolve the URI if needed. |
| 1244 | const std::string uri = ResolveConfigPath(builtinConfigName.c_str()); |
| 1245 | |
| 1246 | // Check if the config path starts with ocio:// |
| 1247 | static const std::regex uriPattern(R"(ocio:\/\/([^\s]+))"); |
| 1248 | std::smatch match; |
| 1249 | if (std::regex_search(uri, match, uriPattern)) |
| 1250 | { |
| 1251 | // Store config path without the "ocio://" prefix, if present. |
| 1252 | builtinConfigName = match.str(1).c_str(); |
| 1253 | } |
| 1254 | |
| 1255 | ConstConfigRcPtr builtinConfig; |
| 1256 | const BuiltinConfigRegistry & reg = BuiltinConfigRegistry::Get(); |
| 1257 | |
| 1258 | // getBuiltinConfigByName will throw if config name not found. |
| 1259 | const char * builtinConfigStr = reg.getBuiltinConfigByName(builtinConfigName.c_str()); |
| 1260 | std::istringstream iss; |
| 1261 | iss.str(builtinConfigStr); |
| 1262 | builtinConfig = Config::CreateFromStream(iss); |
| 1263 | |
| 1264 | return builtinConfig; |
| 1265 | } |
| 1266 | |
| 1267 | /////////////////////////////////////////////////////////////////////////// |
| 1268 | |