UNPKG

code-theme-converter

Version:

Convert any vscode theme with ease!

723 lines (722 loc) 25.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const js2xmlparser_1 = require("js2xmlparser"); const ramda_1 = require("ramda"); const vscode_1 = require("../util/vscode"); const idea_1 = require("../types/idea"); const color_1 = require("../util/color"); function generateIdeaColorScheme(vscodeTheme, version) { const { name, colors, tokenColors, type } = vscodeTheme; const findEditorColorForFields = ramda_1.compose(color_1.removeHashFromHex, vscode_1.findEditorColor(colors)); const findTokenColorForFields = ramda_1.compose(color_1.removeHashFromHex, // @ts-ignore ramda_1.prop('foreground'), ramda_1.prop('settings'), vscode_1.findTokenColorForScope(tokenColors)); return { name, parentScheme: type == 'dark' ? 'Darcula' : '', metaInfo: { created: new Date().toISOString(), ide: 'idea', ideVersion: '2019.1.0.0' }, version, colors: { ADDED_LINES_COLOR: findEditorColorForFields([ 'editorGutter.addedBackground' ]), ANNOTATIONS_COLOR: findTokenColorForFields('variable.function'), CARET_COLOR: findEditorColorForFields([ 'editorCursor.background', 'editor.foreground' ]), CONSOLE_BACKGROUND_KEY: findEditorColorForFields([ 'panel.background', 'sideBar.background' ]), DELETED_LINES_COLOR: findEditorColorForFields([ 'editorGutter.deletedBackground' ]), DIFF_SEPARATORS_BACKGROUND: findEditorColorForFields([ 'panel.background' ]), DOCUMENTATION_COLOR: findTokenColorForFields('comment'), ERROR_HINT: findEditorColorForFields(['editorError.foreground']), FILESTATUS_ADDED: findEditorColorForFields([ 'gitDecoration.addedResourceForeground' ]), FILESTATUS_COPIED: findEditorColorForFields([ 'gitDecoration.modifiedResourceForeground' ]), FILESTATUS_DELETED: findEditorColorForFields([ 'gitDecoration.deletedResourceForeground' ]), FILESTATUS_IDEA_FILESTATUS_DELETED_FROM_FILE_SYSTEM: findEditorColorForFields(['gitDecoration.deletedResourceForeground']), FILESTATUS_IDEA_FILESTATUS_IGNORED: findEditorColorForFields([ 'gitDecoration.untrackedResourceForeground' ]), FILESTATUS_MERGED: findEditorColorForFields([ 'gitDecoration.modifiedResourceForeground' ]), FILESTATUS_MODIFIED: findEditorColorForFields([ 'gitDecoration.modifiedResourceForeground' ]), FILESTATUS_RENAMED: findEditorColorForFields([ 'gitDecoration.modifiedResourceForeground' ]), FILESTATUS_UNKNOWN: findEditorColorForFields([ 'gitDecoration.untrackedResourceForeground' ]), FILESTATUS_ADDEDOUTSIDE: findEditorColorForFields([ 'gitDecoration.addedResourceForeground' ]), FOLDED_TEXT_BORDER_COLOR: findEditorColorForFields([ 'sideBar.foreground' ]), GUTTER_BACKGROUND: findEditorColorForFields(['editorGutter.background']), INDENT_GUIDE: findEditorColorForFields(['editorIndentGuide.background']), INFORMATION_HINT: findEditorColorForFields([ 'editorOverviewRuler.infoForeground' ]), LINE_NUMBERS_COLOR: findEditorColorForFields([ 'editorLineNumber.foreground' ]), LINE_NUMBER_ON_CARET_ROW_COLOR: findEditorColorForFields([ 'editorLineNumber.foreground' ]), METHOD_SEPARATORS_COLOR: findEditorColorForFields(['editor.foreground']), MODIFIED_LINES_COLOR: findEditorColorForFields([ 'editorOverviewRuler.modifiedForeground' ]), NOTIFICATION_BACKGROUND: findEditorColorForFields([ 'notifications.background' ]), QUESTION_HINT: findEditorColorForFields([ 'editorOverviewRuler.infoForeground' ]), RECENT_LOCATIONS_SELECTION: findEditorColorForFields([ 'editorOverviewRuler.infoForeground' ]), RECURSIVE_CALL_ATTRIBUTES: findEditorColorForFields([ 'editorOverviewRuler.infoForeground' ]), RIGHT_MARGIN_COLOR: findEditorColorForFields([ 'editorOverviewRuler.infoForeground' ]), SELECTED_INDENT_GUIDE: findEditorColorForFields([ 'editor.lineHighlightBackground' ]), SELECTED_TEARLINE_COLOR: findEditorColorForFields([ 'editor.lineHighlightBackground' ]), SEPARATOR_BELOW_COLOR: findEditorColorForFields([ 'editorWhitespace.foreground' ]), SOFT_WRAP_SIGN_COLOR: findEditorColorForFields([ 'editorWhitespace.foreground' ]), TEARLINE_COLOR: findEditorColorForFields(['editor.foreground']), VCS_ANNOTATIONS_COLOR_1: findEditorColorForFields([ 'gitDecoration.addedResourceForgeround' ]), VCS_ANNOTATIONS_COLOR_2: findEditorColorForFields([ 'gitDecoration.modifiedResourceForeground' ]), VCS_ANNOTATIONS_COLOR_3: findEditorColorForFields([ 'gitDecoration.deletedResourceForeground' ]), VCS_ANNOTATIONS_COLOR_4: findEditorColorForFields([ 'gitDecoration.untrackedResourceForeground' ]), VCS_ANNOTATIONS_COLOR_5: findEditorColorForFields([ 'gitDecoration.conflictingResourceForeground' ]), VISUAL_INDENT_GUIDE: findEditorColorForFields([ 'editorWhitespace.foreground' ]), WHITESPACES_MODIFIED_LINES_COLOR: findEditorColorForFields([ 'gitDecoration.modifiedResourceForeground' ]), WHITESPACES: findEditorColorForFields(['editorWhitespace.foreground']) }, attributes: { ANNOTATION_ATTRIBUTE_NAME_ATTRIBUTES: { value: '' }, ANNOTATION_NAME_ATTRIBUTES: { attributes: { baseAttributes: idea_1.IdeaAttributeNames.DEFAULT_METADATA } }, BAD_CHARACTER: { value: [ { EFFECT_COLOR: findTokenColorForFields('markup.error') }, { EFFECT_TYPE: 2 } ] }, BOOKMARKS_ATTRIBUTES: { value: [{ ERROR_STRIPE_COLOR: findTokenColorForFields('invalid') }] }, BREADCRUMBS_CURRENT: { value: [ { FOREGROUND: findEditorColorForFields([ 'breadcrumb.activeSelectionForeground', 'editor.foreground' ]) } ] }, BREADCRUMBS_DEFAULT: { value: [ { FOREGROUND: findEditorColorForFields([ 'breadcrumb.foreground', 'editor.foreground' ]) } ] }, BREADCRUMBS_HOVERED: { value: [ { FOREGROUND: findEditorColorForFields([ 'breadcrumb.focusForeground', 'editor.foreground' ]) } ] }, BREADCRUMBS_INACTIVE: { value: [ { FOREGROUND: findEditorColorForFields([ 'breadcrumb.foreground', 'editor.foreground' ]) } ] }, BREAKPOINT_ATTRIBUTES: { value: [ { BACKGROUND: findTokenColorForFields('invalid') }, { ERROR_STRIPE_COLOR: 'ffffff' } ] }, CONSOLE_BLUE_BRIGHT_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiBrightBlue']) } ] }, CONSOLE_BLUE_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiBlue']) } ] }, CONSOLE_CYAN_BRIGHT_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiBrightCyan']) } ] }, CONSOLE_CYAN_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiCyan']) } ] }, CONSOLE_ERROR_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['editorError.foreground']) } ] }, CONSOLE_GREEN_BRIGHT_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiBrightGreen']) } ] }, CONSOLE_GREEN_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiGreen']) } ] }, CONSOLE_MAGENTA_BRIGHT_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiBrightMagenta']) } ] }, CONSOLE_MAGENTA_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiMagenta']) } ] }, CONSOLE_NORMAL_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.foreground']) } ] }, CONSOLE_RANGE_TO_EXECUTE: { value: [ { EFFECT_COLOR: findEditorColorForFields(['terminal.ansiGreen']) } ] }, CONSOLE_RED_BRIGHT_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiBrightRed']) } ] }, CONSOLE_RED_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiRed']) } ] }, CONSOLE_SYSTEM_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiYellow']) } ] }, CONSOLE_USER_INPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.foreground']) }, { FONT_TYPE: 2 } ] }, CONSOLE_YELLOW_BRIGHT_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiBrightYellow']) } ] }, CONSOLE_YELLOW_OUTPUT: { value: [ { FOREGROUND: findEditorColorForFields(['terminal.ansiYellow']) } ] }, 'CSS.COLOR': { value: [ { FOREGROUND: findTokenColorForFields('support.type.custom-property.name') } ] }, 'CSS.IMPORTANT': { attributes: { baseAttributes: idea_1.IdeaAttributeNames.DEFAULT_KEYWORD } }, 'CSS.KEYWORD': { value: [ { FOREGROUND: findTokenColorForFields('keyword.operator.word') } ] }, 'CSS.TAG_NAME': { value: [ { FOREGROUND: findTokenColorForFields('support.type.property-name') } ] }, 'CSS.URL': { attributes: { baseAttributes: idea_1.IdeaAttributeNames.HTML_ATTRIBUTE_VALUE } }, CTRL_CLICKABLE: { value: [ { FOREGROUND: findEditorColorForFields(['button.background']) }, { EFFECT_COLOR: findEditorColorForFields(['button.background']) }, { EFFECT_TYPE: 1 } ] }, CUSTOM_KEYWORD1_ATTRIBUTES: { value: [ { FOREGROUND: findTokenColorForFields('entity.other.attribute-name') } ] }, CUSTOM_KEYWORD2_ATTRIBUTES: { value: [ { FOREGROUND: findTokenColorForFields('entity.name.tag support.class.component') } ] }, CUSTOM_KEYWORD3_ATTRIBUTES: { value: [ { FOREGROUND: findTokenColorForFields('support.variable') } ] }, CUSTOM_KEYWORD4_ATTRIBUTES: { value: [ { FOREGROUND: findTokenColorForFields('support.constant') } ] }, CUSTOM_STRING_ATTRIBUTES: { attributes: { baseAttributes: idea_1.IdeaAttributeNames.DEFAULT_STRING } }, CUSTOM_VALID_STRING_ESCAPE_ATTRIBUTES: { attributes: { baseAttributes: idea_1.IdeaAttributeNames.DEFAULT_VALID_STRING_ESCAPE } }, DEBUGGER_INLINED_VALUES: { value: [ { FOREGROUND: findTokenColorForFields('comment') }, { FONT_TYPE: 2 } ] }, DEBUGGER_INLINED_VALUES_EXECUTION_LINE: { value: [ { FOREGROUND: findEditorColorForFields([ 'editor.lineHighlightBackground' ]) }, { FONT_TYPE: 2 } ] }, DEBUGGER_INLINED_VALUES_MODIFIED: { value: [ { FOREGROUND: findEditorColorForFields([ 'editorGutter.modifiedBackground' ]) }, { FONT_TYPE: 2 } ] }, DEFAULT_BLOCK_COMMENT: { value: [ { FOREGROUND: findTokenColorForFields('comment') } ] }, DEFAULT_CLASS_REFERENCE: { attributes: { baseAttributes: idea_1.IdeaAttributeNames.DEFAULT_IDENTIFIER } }, DEFAULT_COMMA: { value: [ { FOREGROUND: findTokenColorForFields('punctuation.definition') }, { FONT_TYPE: 1 } ] }, DEFAULT_CONSTANT: { value: [ { FOREGROUND: findTokenColorForFields('support.constant') } ] }, DEFAULT_DOC_COMMENT: { value: [ { FOREGROUND: findTokenColorForFields('comment') }, { FONT_TYPE: 2 } ] }, DEFAULT_DOC_COMMENT_TAG: { value: [ { FOREGROUND: findTokenColorForFields('entity.name.tag') }, { FONT_TYPE: 2 }, { EFFECT_COLOR: findEditorColorForFields([ 'entity.name.tag support.class.component' ]) }, { EFFECT_TYPE: 1 } ] }, DEFAULT_DOC_COMMENT_TAG_VALUE: { value: [ { FOREGROUND: findEditorColorForFields(['editor.foreground']) } ] }, DEFAULT_DOC_MARKUP: { value: [ { FOREGROUND: findTokenColorForFields('entity.name.tag') } ] }, DEFAULT_FUNCTION_CALL: { attributes: { baseAttributes: idea_1.IdeaAttributeNames.DEFAULT_IDENTIFIER } }, DEFAULT_FUNCTION_DECLARATION: { value: [ { FOREGROUND: findTokenColorForFields('support.function') } ] }, DEFAULT_IDENTIFIER: { value: [ { FOREGROUND: findTokenColorForFields('variable.language') }, { EFFECT_TYPE: 5 } ] }, DEFAULT_INSTANCE_FIELD: { value: [ { FOREGROUND: findTokenColorForFields('support.type.property-name') } ] }, DEFAULT_INVALID_STRING_ESCAPE: { value: [ { FOREGROUND: findTokenColorForFields('invalid') }, { EFFECT_COLOR: findTokenColorForFields('markup.error') }, { EFFECT_TYPE: 2 } ] }, DEFAULT_KEYWORD: { value: [ { FOREGROUND: findTokenColorForFields('keyword.operator.word') } ] }, DEFAULT_LINE_COMMENT: { value: [ { FOREGROUND: findTokenColorForFields('comment') } ] }, DEFAULT_METADATA: { value: [ { FOREGROUND: findTokenColorForFields('entity.other.attribute-name') } ] }, DEFAULT_NUMBER: { value: [ { FOREGROUND: findTokenColorForFields('constant.numeric') } ] }, DEFAULT_OPERATION_SIGN: { value: [ { FOREGROUND: findTokenColorForFields('keyword.operator') } ] }, DEFAULT_REASSIGNED_LOCAL_VARIABLE: { value: [ { FOREGROUND: findEditorColorForFields(['editor.foreground']) } ] }, DEFAULT_REASSIGNED_PARAMETER: { value: [ { FOREGROUND: findEditorColorForFields(['editor.foreground']) } ] }, DEFAULT_SEMICOLON: { value: [ { FOREGROUND: findTokenColorForFields('punctuation.definition') }, { FONT_TYPE: 1 } ] }, DEFAULT_STATIC_FIELD: { value: [ { FOREGROUND: findEditorColorForFields(['editor.foreground']) }, { FONT_TYPE: 2 } ] }, DEFAULT_STATIC_METHOD: { value: [ { FOREGROUND: findTokenColorForFields('support.function') }, { FONT_TYPE: 2 } ] }, DEFAULT_STRING: { value: [ { FOREGROUND: findTokenColorForFields('string') } ] }, DEFAULT_TEMPLATE_LANGUAGE_COLOR: { attributes: { baseAttributes: idea_1.IdeaAttributeNames.TEXT } }, DEFAULT_VALID_STRING_ESCAPE: { value: [ { FOREGROUND: findTokenColorForFields('string') } ] } } }; } function mapToXmlObject({ name, version, parentScheme, metaInfo, colors, attributes }) { return { '@': { name, version, parent_scheme: parentScheme }, metaInfo: { property: Object.keys(metaInfo).map(toXmlAttributeAndValue(metaInfo)) }, colors: { option: Object.keys(colors).map(toXmlAttributeAndValue(colors)) }, attributes: { option: Object.keys(attributes).map(key => { var _a; const attribute = attributes[key]; return Object.assign({ '@': Object.assign({ name: key }, attribute === null || attribute === void 0 ? void 0 : attribute.attributes) }, ((attribute === null || attribute === void 0 ? void 0 : attribute.value) != null ? { value: { option: typeof (attribute === null || attribute === void 0 ? void 0 : attribute.value) == 'string' ? { '@': { name: 'FOREGROUND', value: attribute.value } } : (_a = attribute === null || attribute === void 0 ? void 0 : attribute.value) === null || _a === void 0 ? void 0 : _a.map(convertPropertyToXml) } } : undefined)); }) } }; } const toXmlAttributeWithValue = (key, value) => { return { '@': { name: key, value } }; }; const headKey = ramda_1.compose(ramda_1.head, ramda_1.keys); const convertPropertyToXml = ramda_1.converge(toXmlAttributeWithValue, [ headKey, ramda_1.converge(ramda_1.prop, [headKey, ramda_1.identity]) ]); function toXmlAttributeAndValue(object) { return (key) => ({ '@': { name: key }, '#': object[key] }); } function convertToIdea(vscodeTheme, version) { return js2xmlparser_1.parse('scheme', mapToXmlObject(generateIdeaColorScheme(vscodeTheme, version))); } exports.convertToIdea = convertToIdea;