export function getCustomFormatMetadata()

in src/formattingService/formattingService.ts [863:917]


    export function getCustomFormatMetadata(format: string, calculatePrecision?: boolean, calculateScale?: boolean, calculatePartsPerScale?: boolean): NumericFormatMetadata {
        if (_lastCustomFormatMeta !== undefined && format === _lastCustomFormatMeta.format) {
            return _lastCustomFormatMeta;
        }

        let literals: string[] = [];
        let escaped = formattingEncoder.preserveLiterals(format, literals);

        let result: NumericFormatMetadata = {
            format: format,
            hasLiterals: literals.length !== 0,
            hasE: false,
            hasCommas: false,
            hasDots: false,
            hasPercent: false,
            hasPermile: false,
            precision: undefined,
            scale: undefined,
            partsPerScale: undefined,
        };

        for (let i = 0, length = escaped.length; i < length; i++) {
            let c = escaped.charAt(i);
            switch (c) {
                case "e":
                case "E":
                    result.hasE = true;
                    break;
                case ",":
                    result.hasCommas = true;
                    break;
                case ".":
                    result.hasDots = true;
                    break;
                case "%":
                    result.hasPercent = true;
                    break;
                case "\u2030":  // ‰
                    result.hasPermile = true;
                    break;
            }
        }

        // Use positive format for calculating these values
        let formatComponents = getComponents(format);

        if (calculatePrecision)
            result.precision = getCustomFormatPrecision(formatComponents.positive, result);
        if (calculatePartsPerScale)
            result.partsPerScale = getCustomFormatPartsPerScale(formatComponents.positive, result);
        if (calculateScale)
            result.scale = getCustomFormatScale(formatComponents.positive, result);

        return result;
    }