def _font_files(args, inline): args = List.from_maybe_starargs(args) n = 0 params = [[], []] for arg in args: if isinstance(arg, List): if len(arg) == 2: if n % 2 == 1: params[1].append(None) n += 1 params[0].append(arg[0]) params[1].append(arg[1]) n += 2 else: for arg2 in arg: params[n % 2].append(arg2) n += 1 else: params[n % 2].append(arg) n += 1 len0 = len(params[0]) len1 = len(params[1]) if len1 < len0: params[1] += [None] * (len0 - len1) elif len0 < len1: params[0] += [None] * (len1 - len0) fonts = [] for font, format in zip(params[0], params[1]): if format: fonts.append('%s format("%s")' % (_font_url(font, inline=inline), String.unquoted(format).value)) else: fonts.append(_font_url(font, inline=inline)) return List(fonts)
def grad_color_stops(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join([ 'color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops ]) return String.unquoted(ret)
def _font_files(args, inline): args = List.from_maybe_starargs(args) n = 0 params = [[], []] for arg in args: if isinstance(arg, List): if len(arg) == 2: if n % 2 == 1: params[1].append(None) n += 1 params[0].append(arg[0]) params[1].append(arg[1]) n += 2 else: for arg2 in arg: params[n % 2].append(arg2) n += 1 else: params[n % 2].append(arg) n += 1 len0 = len(params[0]) len1 = len(params[1]) if len1 < len0: params[1] += [None] * (len0 - len1) elif len0 < len1: params[0] += [None] * (len1 - len0) fonts = [] for font, format in zip(params[0], params[1]): if format: fonts.append( '%s format("%s")' % (_font_url(font, inline=inline), StringValue(format).value)) else: fonts.append(_font_url(font, inline=inline)) return List(fonts)
def quote(*args): arg = List.from_maybe_starargs(args).maybe() if isinstance(arg, String): return String(arg.value, quotes='"') else: return String(arg.render(), quotes='"')
def unquote(*args): arg = List.from_maybe_starargs(args).maybe() if isinstance(arg, StringValue): return StringValue(arg.value, quotes=None) else: return StringValue(arg.render(), quotes=None)
def unquote(*args): arg = List.from_maybe_starargs(args).maybe() if isinstance(arg, StringValue): return StringValue(arg.value, quotes=None) else: return StringValue(arg.render(), quotes=None)
def quote(*args): arg = List.from_maybe_starargs(args).maybe() if isinstance(arg, String): return String(arg.value, quotes='"') else: return String(arg.render(), quotes='"')
def linear_gradient(*args): args = List.from_maybe_starargs(args) position_and_angle = _get_gradient_position_and_angle(args) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to linear-gradient function') color_stops = __color_stops(False, *color_stops) args = [ position(position_and_angle) if position_and_angle is not None else None, ] args.extend(_render_standard_color_stops(color_stops)) to__s = 'linear-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' ret = String.unquoted(to__s) def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + to__s) ret.to__moz = to__moz def to__pie(): return String.unquoted('-pie-' + to__s) ret.to__pie = to__pie def to__ms(): return String.unquoted('-ms-' + to__s) ret.to__ms = to__ms def to__o(): return String.unquoted('-o-' + to__s) ret.to__o = to__o def to__webkit(): return String.unquoted('-webkit-' + to__s) ret.to__webkit = to__webkit def to__owg(): args = [ 'linear', position(position_and_angle or None), opposite_position(position_and_angle or None), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return linear_svg_gradient(color_stops, position_and_angle or 'top') ret.to__svg = to__svg return ret
def linear_gradient(*args): args = List.from_maybe_starargs(args) position_and_angle = _get_gradient_position_and_angle(args) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to linear-gradient function') color_stops = __color_stops(False, *color_stops) args = [ position(position_and_angle) if position_and_angle is not None else None, ] args.extend(_render_standard_color_stops(color_stops)) to__s = 'linear-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' ret = String.unquoted(to__s) def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + to__s) ret.to__moz = to__moz def to__pie(): return String.unquoted('-pie-' + to__s) ret.to__pie = to__pie def to__ms(): return String.unquoted('-ms-' + to__s) ret.to__ms = to__ms def to__o(): return String.unquoted('-o-' + to__s) ret.to__o = to__o def to__webkit(): return String.unquoted('-webkit-' + to__s) ret.to__webkit = to__webkit def to__owg(): args = [ 'linear', position(position_and_angle or None), opposite_position(position_and_angle or None), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return linear_svg_gradient(color_stops, position_and_angle or 'top') ret.to__svg = to__svg return ret
def first_value_of(*args): if len(args) == 1 and isinstance(args[0], String): first = args[0].value.split()[0] return type(args[0])(first) args = List.from_maybe_starargs(args) if len(args): return args[0] else: return Null()
def reject(lst, *values): """Removes the given values from the list""" lst = List.from_maybe(lst) values = frozenset(List.from_maybe_starargs(values)) ret = [] for item in lst: if item not in values: ret.append(item) return List(ret, use_comma=lst.use_comma)
def reject(lst, *values): """Removes the given values from the list""" lst = List.from_maybe(lst) values = frozenset(List.from_maybe_starargs(values)) ret = [] for item in lst: if item not in values: ret.append(item) return List(ret, use_comma=lst.use_comma)
def first_value_of(*args): if len(args) == 1 and isinstance(args[0], String): first = args[0].value.split()[0] return type(args[0])(first) args = List.from_maybe_starargs(args) if len(args): return args[0] else: return Null()
def radial_gradient(*args): args = List.from_maybe_starargs(args) position_and_angle = _get_gradient_position_and_angle(args) shape_and_size = _get_gradient_shape_and_size(args) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to radial-gradient function') color_stops = __color_stops(False, *color_stops) args = [ position(position_and_angle) if position_and_angle is not None else None, shape_and_size if shape_and_size is not None else None, ] args.extend(_render_standard_color_stops(color_stops)) to__s = 'radial-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' ret = String.unquoted(to__s) def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + to__s) ret.to__moz = to__moz def to__pie(): log.warn("PIE does not support radial-gradient.") return String.unquoted('-pie-radial-gradient(unsupported)') ret.to__pie = to__pie def to__webkit(): return String.unquoted('-webkit-' + to__s) ret.to__webkit = to__webkit def to__owg(): args = [ 'radial', grad_point(position_and_angle) if position_and_angle is not None else 'center', '0', grad_point(position_and_angle) if position_and_angle is not None else 'center', __grad_end_position(True, color_stops), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return radial_svg_gradient(color_stops, position_and_angle or 'center') ret.to__svg = to__svg return ret
def radial_gradient(*args): args = List.from_maybe_starargs(args) position_and_angle = _get_gradient_position_and_angle(args) shape_and_size = _get_gradient_shape_and_size(args) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to radial-gradient function') color_stops = __color_stops(False, *color_stops) args = [ position(position_and_angle) if position_and_angle is not None else None, shape_and_size if shape_and_size is not None else None, ] args.extend(_render_standard_color_stops(color_stops)) to__s = 'radial-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' ret = String.unquoted(to__s) def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + to__s) ret.to__moz = to__moz def to__pie(): log.warn("PIE does not support radial-gradient.") return String.unquoted('-pie-radial-gradient(unsupported)') ret.to__pie = to__pie def to__webkit(): return String.unquoted('-webkit-' + to__s) ret.to__webkit = to__webkit def to__owg(): args = [ 'radial', grad_point(position_and_angle) if position_and_angle is not None else 'center', '0', grad_point(position_and_angle) if position_and_angle is not None else 'center', __grad_end_position(True, color_stops), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return radial_svg_gradient(color_stops, position_and_angle or 'center') ret.to__svg = to__svg return ret
def linear_svg_gradient(*args): args = List.from_maybe_starargs(args) color_stops = args start = None if isinstance(args[-1], (StringValue, NumberValue, six.string_types)): start = args[-1] color_stops = args[:-1] color_stops = __color_stops(False, *color_stops) x1, y1 = zip(*grad_point(start).items())[1] x2, y2 = zip(*grad_point(opposite_position(start)).items())[1] svg = _linear_svg(color_stops, x1, y1, x2, y2) url = 'data:' + 'image/svg+xml' + ';base64,' + base64.b64encode(svg) inline = 'url("%s")' % escape(url) return StringValue(inline)
def linear_svg_gradient(*args): args = List.from_maybe_starargs(args) color_stops = args start = None if isinstance(args[-1], (String, Number)): start = args[-1] color_stops = args[:-1] color_stops = __color_stops(False, *color_stops) x1, y1 = grad_point(start) x2, y2 = grad_point(opposite_position(start)) svg = _linear_svg(color_stops, x1, y1, x2, y2) url = 'data:' + 'image/svg+xml' + ';base64,' + base64.b64encode(svg) inline = 'url("%s")' % escape(url) return String.unquoted(inline)
def radial_svg_gradient(*args): args = List.from_maybe_starargs(args) color_stops = args center = None if isinstance(args[-1], (String, Number, six.string_types)): center = args[-1] color_stops = args[:-1] color_stops = __color_stops(False, *color_stops) cx, cy = zip(*grad_point(center).items())[1] r = __grad_end_position(True, color_stops) svg = __radial_svg(color_stops, cx, cy, r) url = 'data:' + 'image/svg+xml' + ';base64,' + base64.b64encode(svg) inline = 'url("%s")' % escape(url) return String.unquoted(inline)
def linear_svg_gradient(*args): args = List.from_maybe_starargs(args) color_stops = args start = None if isinstance(args[-1], (String, Number, six.string_types)): start = args[-1] color_stops = args[:-1] color_stops = __color_stops(False, *color_stops) x1, y1 = zip(*grad_point(start).items())[1] x2, y2 = zip(*grad_point(opposite_position(start)).items())[1] svg = _linear_svg(color_stops, x1, y1, x2, y2) url = 'data:' + 'image/svg+xml' + ';base64,' + base64.b64encode(svg) inline = 'url("%s")' % escape(url) return String.unquoted(inline)
def radial_svg_gradient(*args): args = List.from_maybe_starargs(args) color_stops = args center = None if isinstance(args[-1], (String, Number)): center = args[-1] color_stops = args[:-1] color_stops = __color_stops(False, *color_stops) cx, cy = grad_point(center) r = __grad_end_position(True, color_stops) svg = __radial_svg(color_stops, cx, cy, r) url = 'data:' + 'image/svg+xml' + ';base64,' + base64.b64encode(svg) inline = 'url("%s")' % escape(url) return String.unquoted(inline)
def radial_gradient(*args): args = List.from_maybe_starargs(args) try: # Do a rough check for standard syntax first -- `shape at position` at_position = list(args[0]).index(String('at')) except (IndexError, ValueError): shape_and_size = _get_gradient_shape_and_size(args) position_and_angle = _get_gradient_position_and_angle(args) else: shape_and_size = List.maybe_new(args[0][:at_position]) position_and_angle = List.maybe_new(args[0][at_position + 1:]) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to radial-gradient function') color_stops = __color_stops(False, *color_stops) if position_and_angle: rendered_position = position(position_and_angle) else: rendered_position = None rendered_color_stops = _render_standard_color_stops(color_stops) args = [] if shape_and_size and rendered_position: args.append(List([shape_and_size, String.unquoted('at'), rendered_position], use_comma=False)) elif rendered_position: args.append(rendered_position) elif shape_and_size: args.append(shape_and_size) args.extend(rendered_color_stops) legacy_args = [] if rendered_position: legacy_args.append(rendered_position) if shape_and_size: legacy_args.append(shape_and_size) legacy_args.extend(rendered_color_stops) ret = String.unquoted( 'radial-gradient(' + ', '.join(a.render() for a in args) + ')') legacy_ret = 'radial-gradient(' + ', '.join(a.render() for a in legacy_args) + ')' def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + legacy_ret) ret.to__moz = to__moz def to__pie(): log.warn("PIE does not support radial-gradient.") return String.unquoted('-pie-radial-gradient(unsupported)') ret.to__pie = to__pie def to__webkit(): return String.unquoted('-webkit-' + legacy_ret) ret.to__webkit = to__webkit def to__owg(): args = [ 'radial', grad_point(*position_and_angle) if position_and_angle is not None else 'center', '0', grad_point(*position_and_angle) if position_and_angle is not None else 'center', __grad_end_position(True, color_stops), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return radial_svg_gradient(*(list(color_stops) + list(position_and_angle or [String('center')]))) ret.to__svg = to__svg return ret
def color_stops_in_percentages(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['%s %s' % (c.render(), s.render()) for s, c in color_stops]) return String.unquoted(ret)
def grad_color_stops(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join( ['color-stop(%s, %s)' % (to_str(s), c) for s, c in color_stops]) return StringValue(ret)
def color_stops(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(False, *args) ret = ', '.join(['%s %s' % (c, to_str(s)) for s, c in color_stops]) return String.unquoted(ret)
def dash_compass_list(*args): return List.from_maybe_starargs(args)
def grad_color_stops(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops]) return String.unquoted(ret)
def color_stops_in_percentages(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['%s %s' % (c.render(), s.render()) for s, c in color_stops]) return String.unquoted(ret)
def grad_color_stops(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['color-stop(%s, %s)' % (to_str(s), c) for s, c in color_stops]) return StringValue(ret)
def prefixed(prefix, *args): to_fnct_str = 'to_' + to_str(prefix).replace('-', '_') for arg in List.from_maybe_starargs(args): if hasattr(arg, to_fnct_str): return Boolean(True) return Boolean(False)
def dash_compass_list(*args): return List.from_maybe_starargs(args)
def color_stops_in_percentages(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['%s %s' % (c, to_str(s)) for s, c in color_stops]) return StringValue(ret)
def radial_gradient(*args): args = List.from_maybe_starargs(args) try: # Do a rough check for standard syntax first -- `shape at position` at_position = list(args[0]).index(String('at')) except (IndexError, ValueError): shape_and_size = _get_gradient_shape_and_size(args) position_and_angle = _get_gradient_position_and_angle(args) else: shape_and_size = List.maybe_new(args[0][:at_position]) position_and_angle = List.maybe_new(args[0][at_position + 1:]) color_stops = _get_gradient_color_stops(args) if color_stops is None: raise Exception('No color stops provided to radial-gradient function') color_stops = __color_stops(False, *color_stops) if position_and_angle: rendered_position = position(position_and_angle) else: rendered_position = None rendered_color_stops = _render_standard_color_stops(color_stops) args = [] if shape_and_size and rendered_position: args.append(List([shape_and_size, String.unquoted('at'), rendered_position], use_comma=False)) elif rendered_position: args.append(rendered_position) elif shape_and_size: args.append(shape_and_size) args.extend(rendered_color_stops) legacy_args = [] if rendered_position: legacy_args.append(rendered_position) if shape_and_size: legacy_args.append(shape_and_size) legacy_args.extend(rendered_color_stops) ret = String.unquoted( 'radial-gradient(' + ', '.join(a.render() for a in args) + ')') legacy_ret = 'radial-gradient(' + ', '.join(a.render() for a in legacy_args) + ')' def to__css2(): return String.unquoted('') ret.to__css2 = to__css2 def to__moz(): return String.unquoted('-moz-' + legacy_ret) ret.to__moz = to__moz def to__pie(): log.warn("PIE does not support radial-gradient.") return String.unquoted('-pie-radial-gradient(unsupported)') ret.to__pie = to__pie def to__webkit(): return String.unquoted('-webkit-' + legacy_ret) ret.to__webkit = to__webkit def to__owg(): args = [ 'radial', grad_point(*position_and_angle) if position_and_angle is not None else 'center', '0', grad_point(*position_and_angle) if position_and_angle is not None else 'center', __grad_end_position(True, color_stops), ] args.extend('color-stop(%s, %s)' % (s.render(), c.render()) for s, c in color_stops) ret = '-webkit-gradient(' + ', '.join(to_str(a) for a in args or [] if a is not None) + ')' return String.unquoted(ret) ret.to__owg = to__owg def to__svg(): return radial_svg_gradient(*(list(color_stops) + list(position_and_angle or [String('center')]))) ret.to__svg = to__svg return ret
def color_stops_in_percentages(*args): args = List.from_maybe_starargs(args) color_stops = __color_stops(True, *args) ret = ', '.join(['%s %s' % (c, to_str(s)) for s, c in color_stops]) return StringValue(ret)
def prefixed(prefix, *args): to_fnct_str = 'to_' + to_str(prefix).replace('-', '_') for arg in List.from_maybe_starargs(args): if hasattr(arg, to_fnct_str): return Boolean(True) return Boolean(False)