123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- from __future__ import absolute_import
- # Copyright (c) 2010-2019 openpyxl
- from openpyxl.descriptors import (
- Alias,
- Sequence,
- Integer
- )
- from openpyxl.descriptors.serialisable import Serialisable
- from openpyxl.descriptors.nested import (
- NestedValue,
- NestedBool,
- NestedNoneSet,
- NestedMinMax,
- NestedString,
- NestedInteger,
- NestedFloat,
- )
- from .colors import ColorDescriptor, Color, BLACK
- from openpyxl.compat import safe_string
- from openpyxl.xml.functions import Element, SubElement
- from openpyxl.xml.constants import SHEET_MAIN_NS
- def _no_value(tagname, value, namespace=None):
- if value:
- return Element(tagname, val=safe_string(value))
- class Font(Serialisable):
- """Font options used in styles."""
- UNDERLINE_DOUBLE = 'double'
- UNDERLINE_DOUBLE_ACCOUNTING = 'doubleAccounting'
- UNDERLINE_SINGLE = 'single'
- UNDERLINE_SINGLE_ACCOUNTING = 'singleAccounting'
- name = NestedString(allow_none=True)
- charset = NestedInteger(allow_none=True)
- family = NestedMinMax(min=0, max=14, allow_none=True)
- sz = NestedFloat(allow_none=True)
- size = Alias("sz")
- b = NestedBool(to_tree=_no_value)
- bold = Alias("b")
- i = NestedBool(to_tree=_no_value)
- italic = Alias("i")
- strike = NestedBool(allow_none=True)
- strikethrough = Alias("strike")
- outline = NestedBool(allow_none=True)
- shadow = NestedBool(allow_none=True)
- condense = NestedBool(allow_none=True)
- extend = NestedBool(allow_none=True)
- u = NestedNoneSet(values=('single', 'double', 'singleAccounting',
- 'doubleAccounting'))
- underline = Alias("u")
- vertAlign = NestedNoneSet(values=('superscript', 'subscript', 'baseline'))
- color = ColorDescriptor(allow_none=True)
- scheme = NestedNoneSet(values=("major", "minor"))
- tagname = "font"
- __elements__ = ('name', 'charset', 'family', 'b', 'i', 'strike', 'outline',
- 'shadow', 'condense', 'color', 'extend', 'sz', 'u', 'vertAlign',
- 'scheme')
- def __init__(self, name=None, sz=None, b=None, i=None, charset=None,
- u=None, strike=None, color=None, scheme=None, family=None, size=None,
- bold=None, italic=None, strikethrough=None, underline=None,
- vertAlign=None, outline=None, shadow=None, condense=None,
- extend=None):
- self.name = name
- self.family = family
- if size is not None:
- sz = size
- self.sz = sz
- if bold is not None:
- b = bold
- self.b = b
- if italic is not None:
- i = italic
- self.i = i
- if underline is not None:
- u = underline
- self.u = u
- if strikethrough is not None:
- strike = strikethrough
- self.strike = strike
- self.color = color
- self.vertAlign = vertAlign
- self.charset = charset
- self.outline = outline
- self.shadow = shadow
- self.condense = condense
- self.extend = extend
- self.scheme = scheme
- @classmethod
- def from_tree(cls, node):
- """
- Set default value for underline if child element is present
- """
- underline = node.find("{%s}u" % SHEET_MAIN_NS)
- if underline is not None and underline.get('val') is None:
- underline.set("val", "single")
- return super(Font, cls).from_tree(node)
- DEFAULT_FONT = Font(name="Calibri", sz=11, family=2, b=False, i=False,
- color=Color(theme=1), scheme="minor")
|