import Color from 'color'; import { source } from 'common-tags'; import { colorSetToVariants } from '../color-set/index.js'; import type { Template } from './index.js'; const DESTINATION = '~/Library/Application Support/BBEdit/Color Schemes/'; const formatColor = (hex: string) => { const [r, g, b] = Color(hex) .rgb() .array() .map((c) => c / 255); return `rgba(${r}, ${g}, ${b}, 1.00)`; }; const template: Template = { name: 'BBEdit', render: async function* (colorSet) { const variants = colorSetToVariants(colorSet); for (const variant of variants) { const shade0 = formatColor(variant.colors.shade0); const shade1 = formatColor(variant.colors.shade1); const shade2 = formatColor(variant.colors.shade2); const shade3 = formatColor(variant.colors.shade3); const shade4 = formatColor(variant.colors.shade4); const shade5 = formatColor(variant.colors.shade5); const shade7 = formatColor(variant.colors.shade7); const accent0 = formatColor(variant.colors.accent0); const accent1 = formatColor(variant.colors.accent1); const accent2 = formatColor(variant.colors.accent2); const accent3 = formatColor(variant.colors.accent3); const accent4 = formatColor(variant.colors.accent4); const accent5 = formatColor(variant.colors.accent5); const accent6 = formatColor(variant.colors.accent6); const accent7 = formatColor(variant.colors.accent7); const document = source` BackgroundColor ${shade0} DifferenceHighlightColor ${accent2} InsertionPointLineHighlightColor ${shade1} InvisibleOthersColor ${accent7} InvisibleSpacesColor ${shade2} PrimaryHighlightColor ${shade1} SecondaryHighlightColor ${shade2} SpellingColor ${accent0} com.barebones.bblm.JavaScript.error ${accent0} com.barebones.bblm.JavaScript.regexp ${accent7} com.barebones.bblm.Pyth.decorator ${accent4} com.barebones.bblm.Pyth.triple-string ${accent3} com.barebones.bblm.TeX.math-string ${accent3} com.barebones.bblm.TeX.param-content ${accent5} com.barebones.bblm.TeX.verbatim ${accent2} com.barebones.bblm.code ${shade7} com.barebones.bblm.comment ${shade2} com.barebones.bblm.css.color-spec ${shade7} com.barebones.bblm.file-include ${accent6} com.barebones.bblm.grep.charclass ${accent5} com.barebones.bblm.grep.escape-sequence ${accent7} com.barebones.bblm.grep.metachar ${accent4} com.barebones.bblm.grep.metasequence ${accent3} com.barebones.bblm.grep.posix-name ${accent2} com.barebones.bblm.grep.repeat ${accent2} com.barebones.bblm.grep.repeat-data ${accent2} com.barebones.bblm.heredoc-string ${shade7} com.barebones.bblm.html.anchor ${accent5} com.barebones.bblm.html.attribute-name ${accent5} com.barebones.bblm.html.attribute-value ${accent3} com.barebones.bblm.html.image ${accent6} com.barebones.bblm.indexed-symbol ${accent2} com.barebones.bblm.keyword ${accent0} com.barebones.bblm.markdown.Emph ${accent1} com.barebones.bblm.markdown.HorizontalRule ${shade4} com.barebones.bblm.markdown.ImageAltText ${accent6} com.barebones.bblm.markdown.ImageId ${shade5} com.barebones.bblm.markdown.InlineCode ${accent0} com.barebones.bblm.markdown.InlineLinkText ${accent5} com.barebones.bblm.markdown.Keyword ${accent2} com.barebones.bblm.markdown.LinkDefId ${accent5} com.barebones.bblm.markdown.LinkDefTitle ${accent5} com.barebones.bblm.markdown.LinkDefUrl ${accent5} com.barebones.bblm.markdown.ListItemMarker ${accent5} com.barebones.bblm.markdown.Pre ${accent0} com.barebones.bblm.markdown.QuoteMarker ${accent7} com.barebones.bblm.markdown.QuotedContent ${shade7} com.barebones.bblm.number ${accent5} com.barebones.bblm.perl.generic-string ${accent3} com.barebones.bblm.perl.outer-pod ${accent7} com.barebones.bblm.perl.pre-generic-string ${accent3} com.barebones.bblm.predefined-symbol ${accent2} com.barebones.bblm.preprocessor ${accent2} com.barebones.bblm.ruby.regexp ${accent7} com.barebones.bblm.ruby.symbol ${accent2} com.barebones.bblm.sgml-cdata ${shade7} com.barebones.bblm.sgml-decl ${accent7} com.barebones.bblm.sgml-entity ${accent5} com.barebones.bblm.sgml-tag ${accent5} com.barebones.bblm.string ${accent3} com.barebones.bblm.variable ${accent7} com.barebones.bblm.verilog-hdl.comment-1 ${shade2} com.barebones.bblm.verilog-hdl.comment-2 ${shade3} com.barebones.bblm.verilog-hdl.comment-3 ${shade4} com.barebones.bblm.verilog-hdl.input-type ${accent4} com.barebones.bblm.verilog-hdl.output-type ${accent6} com.barebones.bblm.verilog-hdl.register-type ${accent2} com.barebones.bblm.verilog-hdl.wire-type ${accent1} com.barebones.bblm.vhdl.comment-1 ${shade2} com.barebones.bblm.vhdl.comment-2 ${shade3} com.barebones.bblm.vhdl.comment-3 ${shade4} com.barebones.bblm.xml-empty ${accent0} com.barebones.bblm.xml-pi ${accent0} `; yield { path: `${variant.title.human}.bbColorScheme`, content: document, }; } }, renderInstructions: (paths) => source` Copy (or symlink) the generated ${ paths.length === 1 ? 'file' : 'files' } to \`${DESTINATION}\`: \`\`\` ${paths.map((p) => `cp '${p}' '${DESTINATION}'`)} \`\`\` `, }; export default template;