{"version":3,"sources":["../../../packages/tools/gulp-svg-code/svg-code-convert.ts"],"names":[],"mappings":"AAIA,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAC,aAAa,CAQ9B;IACE,OAAO,CAAC,MAAM,CAAC,cAAc,CAE/B;IACE,OAAO,CAAC,MAAM,CAAC,cAAc,CAK/B;IACE,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAgB;IAEhC,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAEM,YAAY,IAAI,IAAI;IAKpB,QAAQ,CAAC,UAAU,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ/E,OAAO,CAAC,OAAO;IAkEf,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,MAAM;CAQjB","file":"svg-code-convert.d.ts","sourcesContent":["/* eslint-disable unused-imports/no-unused-vars */\r\ndeclare function escape(data: string): string;\r\ndeclare function unescape(data: string): string;\r\n\r\nexport class SvgCodeConverter {\r\n    private static openContentTs =\r\n`/* eslint:disable */\r\n/**\r\n * @file Source code generated by gulp-svg-code.\r\n * @version 1.0\r\n */\r\nexport module Svg {\r\n    'use strict'\r\n`;\r\n    private static closeContentTs =\r\n`}\r\n`;\r\n    private static openContentCss =\r\n`/**\r\n * @file Source code generated by gulp-svg-code.\r\n * @version 1.0\r\n */\r\n`;\r\n    private outputCss: string[] = [];\r\n    private outputTs: string[] = [];\r\n\r\n    public get contentCss(): string {\r\n        return this.outputCss.join('');\r\n    }\r\n\r\n    public get contentTs(): string {\r\n        return this.outputTs.join('');\r\n    }\r\n\r\n    public contentReset(): void {\r\n        this.outputCss = [];\r\n        this.outputTs = [];\r\n    }\r\n\r\n    public generate(collection: { [index: string]: any }, pathPrefix: string): void {\r\n        const root = this.createStructure(collection, pathPrefix);\r\n        this.outputCss.push(SvgCodeConverter.openContentCss);\r\n        this.outputTs.push(SvgCodeConverter.openContentTs);\r\n        this.addData(root, []);\r\n        this.outputTs.push(SvgCodeConverter.closeContentTs);\r\n    }\r\n\r\n    private addData(current: any, segments: string[]): void {\r\n        const ignores = [ '<?xml', '<!-- Generator:', '<!DOCTYPE' ];\r\n        const nested: any[] = [];\r\n        const keys = Object.keys(current);\r\n        for (const key of keys) {\r\n            const content = current[key];\r\n            segments.push(key);\r\n\r\n            if (typeof content === 'object') {\r\n                const segs = segments.slice(0);\r\n                nested.push({ content, segs });\r\n            } else if (typeof content === 'string') {\r\n                const cssName = '.svg-' + segments.join('--');\r\n                this.outputCss.push(cssName + ' {\\r\\n');\r\n                this.outputCss.push(this.indent(1) + 'background-image: url(\"data:image/svg+xml;');\r\n\r\n                this.outputTs.push(this.indent(segments.length) + 'export const ' + key + ' = \\'');\r\n\r\n                const lines = content.split('\\r');\r\n                let svg = '';\r\n                lines.forEach((value, index, array) => {\r\n                    value = value.replace('\\n', '');\r\n                    if (value && value.length > 1) {\r\n                        let skip = false;\r\n                        for (const item of ignores) {\r\n                            if (value.indexOf(item) >= 0) {\r\n                                skip = true;\r\n                                break;\r\n                            }\r\n                        }\r\n\r\n                        if (!skip) {\r\n                            svg += value;\r\n                            // this.outputCss.push(value);\r\n                            this.outputTs.push(value);\r\n                        }\r\n                    }\r\n                });\r\n\r\n                svg = this.replaceAll(svg, '\"', '\\'');\r\n                svg = this.replaceAll(svg, '%', '%25');\r\n                svg = this.replaceAll(svg, '#', '%23');\r\n                svg = this.replaceAll(svg, '{', '%7B');\r\n                svg = this.replaceAll(svg, '}', '%7D');\r\n                svg = this.replaceAll(svg, '<', '%3C');\r\n                svg = this.replaceAll(svg, '>', '%3E');\r\n                this.outputCss.push('charset=utf8,' + svg);\r\n\r\n                this.outputCss.push('\");\\r\\n');\r\n                this.outputCss.push('}\\r\\n');\r\n                this.outputCss.push('\\r\\n');\r\n\r\n                this.outputTs.push('\\';\\r\\n');\r\n            }\r\n\r\n            segments.pop();\r\n        }\r\n\r\n        for (let index = 0; index < nested.length; index++) {\r\n            const { content, segs } = nested[index];\r\n            this.outputTs.push(this.indent(segs.length) + 'export module ' + segs[segs.length - 1] + ' {\\r\\n');\r\n            this.addData(nested[index].content, nested[index].segs);\r\n            this.outputTs.push(this.indent(segs.length) + '}\\r\\n');\r\n        }\r\n    }\r\n\r\n    private createStructure(collection: { [index: string]: any }, pathPrefix: string): any {\r\n        const root = {};\r\n        const keys = Object.keys(collection).sort((left, right) => left.toLowerCase().localeCompare(right.toLowerCase()));\r\n        for (const key of keys) {\r\n            let shortName = key.substring(0, key.length - '.svg'.length);\r\n            shortName = this.replaceAll(shortName.substring(pathPrefix.length + 1), '-', '_').toLowerCase();\r\n            const segments = shortName.split('\\\\');\r\n            let current = root;\r\n            for (let index = 0; index < segments.length - 1; index++) {\r\n                const segment = segments[index];\r\n                if (current.hasOwnProperty(segment)) {\r\n                    current = current[segment];\r\n                } else {\r\n                    current[segment] = {};\r\n                    current = current[segment];\r\n                }\r\n            }\r\n\r\n            current[segments[segments.length - 1]] = collection[key];\r\n        }\r\n\r\n        return root;\r\n    }\r\n\r\n    private regexEscape(str: string): string {\r\n        return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\r\n    }\r\n\r\n    private replaceAll(input: string, searchValue: string, replaceValue: string): string {\r\n        return input.replace(new RegExp(this.regexEscape(searchValue), 'g'), replaceValue);\r\n    }\r\n\r\n    private indent(count: number): string {\r\n        let pad = '';\r\n        for (let i = 0; i < count; i++) {\r\n            pad += '    ';\r\n        }\r\n\r\n        return pad;\r\n    }\r\n}\r\n"]}