88 lines
2.3 KiB
C++
88 lines
2.3 KiB
C++
// Filename: pal_string_utils.cxx
|
|
// Created by: drose (30Nov00)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
//
|
|
// All use of this software is subject to the terms of the revised BSD
|
|
// license. You should have received a copy of this license along
|
|
// with this source code in a file named "LICENSE."
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#include "pal_string_utils.h"
|
|
|
|
#include "pnmFileType.h"
|
|
#include "pnmFileTypeRegistry.h"
|
|
|
|
|
|
// Extracts the first word of the string into param, and the remainder
|
|
// of the line into value.
|
|
void
|
|
extract_param_value(const string &str, string ¶m, string &value) {
|
|
size_t i = 0;
|
|
|
|
// First, skip all whitespace at the beginning.
|
|
while (i < str.length() && isspace(str[i])) {
|
|
i++;
|
|
}
|
|
|
|
size_t start = i;
|
|
|
|
// Now skip to the end of the whitespace.
|
|
while (i < str.length() && !isspace(str[i])) {
|
|
i++;
|
|
}
|
|
|
|
size_t end = i;
|
|
|
|
param = str.substr(start, end - start);
|
|
|
|
// Skip a little bit further to the start of the value.
|
|
while (i < str.length() && isspace(str[i])) {
|
|
i++;
|
|
}
|
|
value = trim_right(str.substr(i));
|
|
}
|
|
|
|
|
|
bool
|
|
parse_image_type_request(const string &word, PNMFileType *&color_type,
|
|
PNMFileType *&alpha_type) {
|
|
PNMFileTypeRegistry *registry = PNMFileTypeRegistry::get_global_ptr();
|
|
color_type = (PNMFileType *)NULL;
|
|
alpha_type = (PNMFileType *)NULL;
|
|
|
|
string color_name = word;
|
|
string alpha_name;
|
|
size_t comma = word.find(',');
|
|
if (comma != string::npos) {
|
|
// If we have a comma in the image_type, it's two types: a color
|
|
// type and an alpha type.
|
|
color_name = word.substr(0, comma);
|
|
alpha_name = word.substr(comma + 1);
|
|
}
|
|
|
|
if (!color_name.empty()) {
|
|
color_type = registry->get_type_from_extension(color_name);
|
|
if (color_type == (PNMFileType *)NULL) {
|
|
nout << "Image file type '" << color_name << "' is unknown.\n";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (!alpha_name.empty()) {
|
|
alpha_type = registry->get_type_from_extension(alpha_name);
|
|
if (alpha_type == (PNMFileType *)NULL) {
|
|
nout << "Image file type '" << alpha_name << "' is unknown.\n";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|