vsc-material-theme/.gulp/tasks/icons-accents.ts

129 lines
4.3 KiB
TypeScript
Raw Normal View History

2017-06-12 19:49:50 +02:00
import * as fs from 'fs';
import * as gulp from 'gulp';
import * as gutil from 'gulp-util';
import * as path from 'path';
import { MESSAGE_GENERATED, MESSAGE_ICON_ACCENTS_ERROR } from "../consts/log";
import { CHARSET } from "../../extensions/consts/files";
import { IDefaults } from "../../extensions/interfaces/idefaults";
2017-06-12 19:49:50 +02:00
import { IThemeIconsAccents } from "../interfaces/itheme-icons-accents";
import PATHS from '../../extensions/consts/paths'
2017-06-12 19:49:50 +02:00
// import { IPackageJSON } from "../../extensions/interfaces/ipackage.json";
// import { writePackageJSON } from "../helpers/contribute-icon-theme";
2017-06-12 19:49:50 +02:00
const BASE_ICON_THEME_PATH: string = path.join(process.cwd(), PATHS.THEMES, './Material-Theme-Icons.json');
const DEFAULTS: IDefaults = require('../../extensions/defaults.json');
// const PACKAGE_JSON: IPackageJSON = require('../../package.json');
2017-06-12 19:49:50 +02:00
// const PACKAGE_JSON_ICON_THEME: IPackageJSONThemeIcons = {
// id: "material-theme-icons",
// label: "Material Theme Icons",
// path: "./themes/Material-Theme-Icons.json"
// }
2017-06-12 19:49:50 +02:00
/**
* Normalizes icon path
* @param {string} iconPath
* @returns {string}
*/
function normalizeIconPath(iconPath: string): string {
return path.join(process.cwd(), PATHS.ICONS, iconPath);
}
/**
* Replaces a file name with the accented filename
* @param {string} name
* @param {string} accentName
* @returns {string}
*/
function replaceNameWithAccent(name: string, accentName: string): string {
return name.replace('.svg', `.accent.${ accentName }.svg`);
}
/**
* Replaces a SVG colour
*
* @param {string} filecontent
* @param {string} colour
* @returns {string}
*/
export function replaceSVGColour(filecontent: string, colour: string): string {
return filecontent.replace(new RegExp('.st0\{fill:#([a-zA-Z0-9]{6})\}|path fill="#([a-zA-Z0-9]{6})"'), ($0, $1, $2) => {
colour = colour.replace('#', '');
if (!$2) {
return $0.replace($1, colour);
} else {
return $0.replace($2, colour);
}
});
2017-06-12 19:49:50 +02:00
}
/**
* Replaces white spaces in accents' names
* @param {string} input
* @returns {string}
*/
function replaceWhiteSpaces(input: string): string {
return input.replace(/\s+/g, '-');
}
/**
* Writes a new svg file
* @param {string} fromFile
* @param {string} toFile
* @param {string} accentColour
*/
function writeSVGIcon(fromFile: string, toFile: string, accent: string): void {
let fileContent: string = fs.readFileSync(normalizeIconPath(fromFile), CHARSET);
let content: string = replaceSVGColour(fileContent, DEFAULTS.accents[accent]);
2017-06-12 19:49:50 +02:00
toFile = normalizeIconPath(toFile);
fs.writeFileSync(toFile, content);
}
// Exports task to index.ts
export default gulp.task('build:icons.accents', cb => {
let basetheme: IThemeIconsAccents;
// PACKAGE_JSON.contributes.iconThemes = [ PACKAGE_JSON_ICON_THEME ];
2017-06-12 19:49:50 +02:00
try {
basetheme = require(BASE_ICON_THEME_PATH);
Object.keys(DEFAULTS.accents).forEach(key => {
2017-06-12 19:49:50 +02:00
let iconName = replaceWhiteSpaces(key);
let themecopy: IThemeIconsAccents = JSON.parse(JSON.stringify(basetheme));
let themePath: string = path.join(PATHS.THEMES, `./Material-Theme-Icons-${ key }.json`);
// let id: string = `${ PACKAGE_JSON_ICON_THEME.id }-${ key.replace(/\s+/g, '-').toLowerCase() }`;
// let label: string = `${ PACKAGE_JSON_ICON_THEME.label } - ${ key } accent`;
// let themepathJSON: string = `./${ themePath }`;
2017-06-12 19:49:50 +02:00
themecopy.iconDefinitions._folder_open.iconPath = replaceNameWithAccent(basetheme.iconDefinitions._folder_open.iconPath, iconName);
themecopy.iconDefinitions._folder_open_build.iconPath = replaceNameWithAccent(basetheme.iconDefinitions._folder_open_build.iconPath, iconName);
writeSVGIcon(basetheme.iconDefinitions._folder_open.iconPath, themecopy.iconDefinitions._folder_open.iconPath, key);
writeSVGIcon(basetheme.iconDefinitions._folder_open_build.iconPath, themecopy.iconDefinitions._folder_open_build.iconPath, key);
2017-06-12 19:49:50 +02:00
// fs.writeFileSync(themePath, JSON.stringify(themecopy));
2017-06-12 19:49:50 +02:00
// addContributeIconTheme(id, label, themepathJSON, PACKAGE_JSON);
2017-06-12 19:49:50 +02:00
gutil.log(gutil.colors.green(MESSAGE_GENERATED, themePath));
});
// writePackageJSON(PACKAGE_JSON);
2017-06-12 19:49:50 +02:00
} catch (error) {
// http://ragefaces.memesoftware.com/faces/large/misc-le-fu-l.png
gutil.log(gutil.colors.red(MESSAGE_ICON_ACCENTS_ERROR));
cb(error);
return;
}
cb();
});