Пример #1
0
    void get_basename(SkString* basename, const SkString& path) {
        if (path.size() == 0) {
            basename->reset();
            return;
        }

        size_t end = path.size() - 1;

        // Paths pointing to directories often have a trailing slash,
        // we remove it so the name is not empty
        if (is_path_seperator(path[end])) {
            if (end == 0) {
                basename->reset();
                return;
            }

            end -= 1;
        }

        size_t i = end;
        do {
            --i;
            if (is_path_seperator(path[i])) {
                  const char* basenameStart = path.c_str() + i + 1;
                  size_t basenameLength = end - i;
                  basename->set(basenameStart, basenameLength);
                  return;
            }
        } while (i > 0);

        basename->set(path.c_str(), end + 1);
    }
Пример #2
0
void get_parent_directory(Value* filename, Value* result)
{
    int end = string_length(filename);

    // Advance past trailing seperators.
    while (end > 0 && is_path_seperator(string_get(filename, end - 1)))
        end--;

    bool foundSep = false;

    while (end > 0) {
        while (end > 0 && is_path_seperator(string_get(filename, end - 1))) {
            foundSep = true;
            end--;
        }

        if (foundSep)
            break;

        end--;
    }

    if (end == 0) {
        if (is_absolute_path(filename))
            set_string(result, "/");
        else
            set_string(result, ".");
    } else
        string_slice(filename, 0, end, result);
}
Пример #3
0
void join_path(Value* left, Value* right)
{
    const char* leftStr = as_cstring(left);
    const char* rightStr = as_cstring(right);
    int left_len = (int) strlen(leftStr);
    int right_len = (int) strlen(leftStr);

    if (string_equals(left, "") || string_equals(left, ".")) {
        copy(right, left);
        return;
    }

    if (string_equals(right, ""))
        return;

    int seperatorCount = 0;
    if (left_len > 0 && is_path_seperator(leftStr[left_len-1]))
        seperatorCount++;

    if (right_len > 0 && is_path_seperator(rightStr[0]))
        seperatorCount++;

    if (seperatorCount == 2)
        string_resize(left, left_len - 1);
    else if (seperatorCount == 0)
        string_append(left, "/");

    string_append(left, right);
}
Пример #4
0
void get_just_filename_for_path(Value* path, Value* filenameOut)
{
    int start = string_length(path) - 1;
    while (start > 0 && !is_path_seperator(string_get(path, start - 1)))
        start--;

    string_slice(path, start, -1, filenameOut);
}