def parseSizeEnumValues(cls, source, values, minValue =None, maxValue =None, noneValue =None, asInt =False): if source is None: return None source, bends = AttributeUtils.getValueAndBendCount(source) source = source.lower().replace(u' ', u'') if minValue is None: minValue = max(0.0, float(values[0]) - (float(values[1]) - float(values[0]))) if maxValue is None: maxValue = float(values[-1]) + (float(values[-1]) - float(values[-2])) if source in GeneralSizeEnum.xxsmall[1]: p = cls.bendValue( values[0], bends, minValue, values[1], asInt=asInt ) elif source in GeneralSizeEnum.xsmall[1]: p = cls.bendValue( values[1], bends, values[0], values[2], asInt=asInt ) elif source in GeneralSizeEnum.small[1]: p = cls.bendValue( values[2], bends, values[1], values[3], asInt=asInt ) elif source in GeneralSizeEnum.medium[1]: p = cls.bendValue( values[3], bends, values[2], values[4], asInt=asInt ) elif source in GeneralSizeEnum.large[1]: p = cls.bendValue( values[4], bends, values[3], values[5], asInt=asInt ) elif source in GeneralSizeEnum.xlarge[1]: p = cls.bendValue( values[5], bends, values[4], values[6], asInt=asInt ) elif source in GeneralSizeEnum.xxlarge[1]: p = cls.bendValue( values[6], bends, values[5], maxValue ) elif source in GeneralSizeEnum.none[1]: if bends > 0: p = cls.bendValue( minValue, bends, minValue, values[0]) else: p = noneValue elif source: p = UnitAttribute.createIfValid(source, unitType=(int if asInt else float)) else: p = None return p
def parseScale(cls, attrs, apply =False, overrides =None, extract =False, useSizeKeys =False, group =None): """Doc...""" if useSizeKeys: keys = TagAttributesEnum.SCALE + TagAttributesEnum.SIZE else: keys = TagAttributesEnum.SCALE size = attrs.get(keys, None, overrides) if size: size, bends = AttributeUtils.getValueAndBendCount(size) if size.isdigit(): size = unicode(size) + u'em' else: sizeUnit = UnitAttribute.createIfValid(size, defaultUnit='em') if sizeUnit: size = unicode(sizeUnit.valueAndUnit) attrs.styles.add('font-size', size) else: size = AttributeUtils.getAsTShirtEnum(size) if size == GeneralSizeEnum.xxsmall[0]: size = unicode(AttributeUtils.bendValue(0.6, bends, 0.2, 0.8)) + u'em' elif size == GeneralSizeEnum.xsmall[0]: size = unicode(AttributeUtils.bendValue(0.8, bends, 0.6, 1.0)) + u'em' elif size == GeneralSizeEnum.small[0]: size = unicode(AttributeUtils.bendValue(1.0, bends, 0.8, 1.2)) + u'em' elif size == GeneralSizeEnum.medium[0]: size = unicode(AttributeUtils.bendValue(1.2, bends, 1.0, 1.5)) + u'em' elif size == GeneralSizeEnum.large[0]: size = unicode(AttributeUtils.bendValue(1.5, bends, 1.2, 1.8)) + u'em' elif size == GeneralSizeEnum.xlarge[0]: size = unicode(AttributeUtils.bendValue(1.8, bends, 1.5, 2.2)) + u'em' elif size == GeneralSizeEnum.xxlarge[0]: size = unicode(AttributeUtils.bendValue(2.2, bends, 1.8, 3.0)) + u'em' else: size = None if size and apply: attrs.styles.add('font-size', size, group) if extract: attrs.remove(keys) return size
def parseBorder(cls, attrs, apply =False, overrides =None, extract =False, group =None, defaultColor =None): keys = TagAttributesEnum.BORDER borderColor = None borderSize = None borderStyle = None useBorder = attrs.getAsBool(keys, None, overrides, True) if useBorder is None: border = attrs.get(keys, None, overrides) if not border: useBorder = False else: useBorder = True if not isinstance(border, list): border = [border] for item in border: if borderSize is None: unitItem = UnitAttribute.createIfValid(item, 'px') if unitItem: borderSize = unitItem.valueAndUnit continue if borderStyle is None: found =False for lineType in Reflection.getReflectionList(LineTypesEnum): if item in lineType[1]: borderStyle = lineType[0] found = True break if found: continue if borderColor is None: color = attrs.convertToColorValue(item, None) if color: borderColor = color if extract: attrs.remove(keys) if not useBorder: return None if borderColor is None: if defaultColor is None: borderColor = attrs.backColors.borderColor.web elif isinstance(defaultColor, ColorValue): borderColor = defaultColor.web else: borderColor = defaultColor else: borderColor = borderColor.web border = u' '.join([ borderSize if borderSize else '1px', borderStyle if borderStyle else 'solid', borderColor ]) if apply: attrs.styles.add('border', border, group) return border