/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import { OperatingSystem } from "./platform.mjs";
import { URI } from "./uri.mjs";
export interface IPathLabelFormatting {
    /**
     * The OS the path label is from to produce a label
     * that matches OS expectations.
     */
    readonly os: OperatingSystem;
    /**
     * Whether to add a `~` when the path is in the
     * user home directory.
     *
     * Note: this only applies to Linux, macOS but not
     * Windows.
     */
    readonly tildify?: IUserHomeProvider;
    /**
     * Whether to convert to a relative path if the path
     * is within any of the opened workspace folders.
     */
    readonly relative?: IRelativePathProvider;
}
export interface IRelativePathProvider {
    /**
     * Whether to not add a prefix when in multi-root workspace.
     */
    readonly noPrefix?: boolean;
    getWorkspace(): {
        folders: {
            uri: URI;
            name?: string;
        }[];
    };
    getWorkspaceFolder(resource: URI): {
        uri: URI;
        name?: string;
    } | null;
}
export interface IUserHomeProvider {
    userHome: URI;
}
export declare function getPathLabel(resource: URI, formatting: IPathLabelFormatting): string;
export declare function normalizeDriveLetter(path: string, isWindowsOS?: boolean): string;
export declare function tildify(path: string, userHome: string, os?: OperatingSystem): string;
export declare function untildify(path: string, userHome: string): string;
export declare function shorten(paths: string[], pathSeparator?: string): string[];
export interface ISeparator {
    label: string;
}
/**
 * Helper to insert values for specific template variables into the string. E.g. "this $(is) a $(template)" can be
 * passed to this function together with an object that maps "is" and "template" to strings to have them replaced.
 * @param value string to which template is applied
 * @param values the values of the templates to use
 */
export declare function template(template: string, values?: {
    [key: string]: string | ISeparator | undefined | null;
}): string;
/**
 * Handles mnemonics for menu items. Depending on OS:
 * - Windows: Supported via & character (replace && with &)
 * -   Linux: Supported via & character (replace && with &)
 * -   macOS: Unsupported (replace && with empty string)
 */
export declare function mnemonicMenuLabel(label: string, forceDisableMnemonics?: boolean): string;
/**
 * Handles mnemonics for buttons. Depending on OS:
 * - Windows: Supported via & character (replace && with & and & with && for escaping)
 * -   Linux: Supported via _ character (replace && with _)
 * -   macOS: Unsupported (replace && with empty string)
 */
export declare function mnemonicButtonLabel(label: string, forceDisableMnemonics?: boolean): string;
export declare function unmnemonicLabel(label: string): string;
/**
 * Splits a path in name and parent path, supporting both '/' and '\'
 */
export declare function splitName(fullPath: string): {
    name: string;
    parentPath: string;
};
