def setup_image_border(self): """Setup_image_border.""" ch_settings = sublime.load_settings('color_helper.sublime-settings') border_color = ch_settings.get('image_border_color') if border_color is not None: try: border_color = Color(border_color, filters=util.SRGB_SPACES) border_color.fit("srgb", in_place=True) except Exception: border_color = None if border_color is None: # Calculate border color for images border_color = Color(self.view.style()['background'], filters=util.SRGB_SPACES).convert("hsl") border_color.lightness = border_color.lightness + ( 30 if border_color.luminance() < 0.5 else -30) self.default_border = border_color.convert("srgb").to_string(**HEX) self.out_of_gamut = Color("transparent", filters=util.SRGB_SPACES).to_string(**HEX) self.out_of_gamut_border = Color( self.view.style().get('redish', "red"), filters=util.SRGB_SPACES).to_string(**HEX)
def color_formatter(src="", language="", class_name=None, md=""): """Formatter wrapper.""" from coloraide import Color try: result = src.strip() try: console, colors = execute(result) if len(colors) != 1 or len(colors[0]) != 1: raise ValueError('Need one color only') color = colors[0][0].color result = colors[0][0].string except Exception: color = Color(result.strip()) el = Etree.Element('span') stops = [] if not color.in_gamut(WEBSPACE): color.fit(WEBSPACE, in_place=True) attributes = {'class': "swatch out-of-gamut", "title": result} sub_el = Etree.SubElement(el, 'span', attributes) stops.append(color.convert(WEBSPACE).to_string(hex=True, alpha=False)) if color.alpha < 1.0: stops[-1] += ' 50%' stops.append(color.convert(WEBSPACE).to_string(hex=True) + ' 50%') else: attributes = {'class': "swatch", "title": result} sub_el = Etree.SubElement(el, 'span', attributes) stops.append(color.convert(WEBSPACE).to_string(hex=True, alpha=False)) if color.alpha < 1.0: stops[-1] += ' 50%' stops.append(color.convert(WEBSPACE).to_string(hex=True) + ' 50%') if not stops: stops.extend(['transparent'] * 2) if len(stops) == 1: stops.append(stops[0]) Etree.SubElement( sub_el, 'span', { "class": "swatch-color", "style": "--swatch-stops: {};".format(','.join(stops)) } ) el.append(md.inlinePatterns['backtick'].handle_code('css-color', result)) except Exception: import traceback print(traceback.format_exc()) el = md.inlinePatterns['backtick'].handle_code('text', src) return el
def preview(self, text): """Preview.""" style = self.get_html_style() try: colors = evaluate(text) html = "" for color in colors: srgb = Color(color).convert("srgb") preview_border = self.default_border message = "" color_string = "" if not srgb.in_gamut(): srgb.fit("srgb") message = '<br><em style="font-size: 0.9em;">* preview out of gamut</em>' color_string = "<strong>Gamut Mapped</strong>: {}<br>".format(srgb.to_string()) color_string += "<strong>Color</strong>: {}".format(color.to_string(**util.DEFAULT)) preview = srgb.to_string(**util.HEX_NA) preview_alpha = srgb.to_string(**util.HEX) preview_border = self.default_border height = self.height * 3 width = self.width * 3 check_size = self.check_size(height, scale=8) html += PREVIEW_IMG.format( mdpopups.color_box( [ preview, preview_alpha ], preview_border, border_size=1, height=height, width=width, check_size=check_size ), message, color_string ) if html: return sublime.Html(style + html) else: return sublime.Html(mdpopups.md2html(self.view, DEF_EDIT.format(style))) except Exception: return sublime.Html(mdpopups.md2html(self.view, DEF_EDIT.format(style)))
def preview(self, text): """Preview.""" style = self.get_html_style() try: color = self.color_mod_class(text.strip()) if color is not None: srgb = Color(color).convert("srgb") preview_border = self.default_border message = "" if not srgb.in_gamut(): srgb.fit("srgb") message = '<br><em style="font-size: 0.9em;">* preview out of gamut</em>' preview = srgb.to_string(**util.HEX_NA) preview_alpha = srgb.to_string(**util.HEX) preview_border = self.default_border height = self.height * 3 width = self.width * 3 check_size = self.check_size(height, scale=8) html = PREVIEW_IMG.format( mdpopups.color_box( [ preview, preview_alpha ], preview_border, border_size=1, height=height, width=width, check_size=check_size ), message, color.to_string(**util.DEFAULT) ) if html: return sublime.Html(style + html) else: return sublime.Html(mdpopups.md2html(self.view, DEF_COLORMOD.format(style))) except Exception: return sublime.Html(mdpopups.md2html(self.view, DEF_COLORMOD.format(style)))