debian-weasyprint/weasyprint/css/properties.py

340 lines
9.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
weasyprint.css.properties
-------------------------
Various data about known properties.
:copyright: Copyright 2011-2019 Simon Sapin and contributors, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
import collections
from tinycss2.color3 import parse_color
Dimension = collections.namedtuple('Dimension', ['value', 'unit'])
# See http://www.w3.org/TR/CSS21/propidx.html
INITIAL_VALUES = {
'bottom': 'auto',
'caption_side': 'top',
'clear': 'none',
'clip': (), # computed value for 'auto'
'color': parse_color('black'), # chosen by the user agent
# Means 'none', but allow `display: list-item` to increment the
# list-item counter. If we ever have a way for authors to query
# computed values (JavaScript?), this value should serialize to 'none'.
'counter_increment': 'auto',
'counter_reset': (), # parsed value for 'none'
# 'counter_set': (), # parsed value for 'none'
'direction': 'ltr',
'display': 'inline',
'empty_cells': 'show',
'float': 'none',
'height': 'auto',
'left': 'auto',
'line_height': 'normal',
'list_style_image': ('none', None),
'list_style_position': 'outside',
'list_style_type': 'disc',
'margin_top': Dimension(0, 'px'),
'margin_right': Dimension(0, 'px'),
'margin_bottom': Dimension(0, 'px'),
'margin_left': Dimension(0, 'px'),
'max_height': Dimension(float('inf'), 'px'), # parsed value for 'none'
'max_width': Dimension(float('inf'), 'px'),
'padding_top': Dimension(0, 'px'),
'padding_right': Dimension(0, 'px'),
'padding_bottom': Dimension(0, 'px'),
'padding_left': Dimension(0, 'px'),
'position': 'static',
'right': 'auto',
'table_layout': 'auto',
'top': 'auto',
'unicode_bidi': 'normal',
'vertical_align': 'baseline',
'visibility': 'visible',
'width': 'auto',
'z_index': 'auto',
# Backgrounds and Borders 3 (CR): https://www.w3.org/TR/css3-background/
'background_attachment': ('scroll',),
'background_clip': ('border-box',),
'background_color': parse_color('transparent'),
'background_image': (('none', None),),
'background_origin': ('padding-box',),
'background_position': (('left', Dimension(0, '%'),
'top', Dimension(0, '%')),),
'background_repeat': (('repeat', 'repeat'),),
'background_size': (('auto', 'auto'),),
'border_bottom_color': 'currentColor',
'border_bottom_left_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
'border_bottom_right_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
'border_bottom_style': 'none',
'border_bottom_width': 3,
'border_collapse': 'separate',
'border_left_color': 'currentColor',
'border_left_style': 'none',
'border_left_width': 3,
'border_right_color': 'currentColor',
'border_right_style': 'none',
'border_right_width': 3,
'border_spacing': (0, 0),
'border_top_color': 'currentColor',
'border_top_left_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
'border_top_right_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
'border_top_style': 'none',
'border_top_width': 3, # computed value for 'medium'
# Color 3 (REC): https://www.w3.org/TR/css3-color/
'opacity': 1,
# Multi-column Layout (WD): https://www.w3.org/TR/css-multicol-1/
'column_width': 'auto',
'column_count': 'auto',
'column_gap': Dimension(1, 'em'),
'column_rule_color': 'currentColor',
'column_rule_style': 'none',
'column_rule_width': 'medium',
'column_fill': 'balance',
'column_span': 'none',
# Fonts 3 (REC): https://www.w3.org/TR/css-fonts-3/
'font_family': ('serif',), # depends on user agent
'font_feature_settings': 'normal',
'font_kerning': 'auto',
'font_language_override': 'normal',
'font_size': 16, # actually medium, but we define medium from this
'font_stretch': 'normal',
'font_style': 'normal',
'font_variant': 'normal',
'font_variant_alternates': 'normal',
'font_variant_caps': 'normal',
'font_variant_east_asian': 'normal',
'font_variant_ligatures': 'normal',
'font_variant_numeric': 'normal',
'font_variant_position': 'normal',
'font_weight': 400,
# Fragmentation 3/4 (CR/WD): https://www.w3.org/TR/css-break-4/
'box_decoration_break': 'slice',
'break_after': 'auto',
'break_before': 'auto',
'break_inside': 'auto',
'margin_break': 'auto',
'orphans': 2,
'widows': 2,
# Generated Content 3 (WD): https://www.w3.org/TR/css-content-3/
'bookmark_label': (('content', 'text'),),
'bookmark_level': 'none',
'bookmark_state': 'open',
'content': 'normal',
'quotes': list('“”‘’'), # chosen by the user agent
'string_set': 'none',
# Images 3/4 (CR/WD): https://www.w3.org/TR/css4-images/
'image_resolution': 1, # dppx
'image_rendering': 'auto',
# https://drafts.csswg.org/css-images-3/
'object_fit': 'fill',
'object_position': (('left', Dimension(50, '%'),
'top', Dimension(50, '%')),),
# Paged Media 3 (WD): https://www.w3.org/TR/css-page-3/
'size': None, # set to A4 in computed_values
'page': 'auto',
'bleed_left': 'auto',
'bleed_right': 'auto',
'bleed_top': 'auto',
'bleed_bottom': 'auto',
'marks': (), # computed value for 'none'
# Text 3/4 (WD/WD): https://www.w3.org/TR/css-text-4/
'hyphenate_character': '', # computed value chosen by the user agent
'hyphenate_limit_chars': (5, 2, 2),
'hyphenate_limit_zone': Dimension(0, 'px'),
'hyphens': 'manual',
'letter_spacing': 'normal',
'tab_size': 8,
'text_align': '-weasy-start',
'text_indent': Dimension(0, 'px'),
'text_transform': 'none',
'white_space': 'normal',
'word_spacing': 0, # computed value for 'normal'
# Transforms 1 (CR): https://www.w3.org/TR/css-transforms-1/
'transform_origin': (Dimension(50, '%'), Dimension(50, '%')),
'transform': (), # computed value for 'none'
# User Interface 3 (REC): https://www.w3.org/TR/css-ui-3/
'box_sizing': 'content-box',
'outline_color': 'currentColor', # invert is not supported
'outline_style': 'none',
'outline_width': 3, # computed value for 'medium'
'overflow_wrap': 'normal',
# Flexible Box Layout Module 1 (CR): https://www.w3.org/TR/css-flexbox-1/
'align_content': 'stretch',
'align_items': 'stretch',
'align_self': 'auto',
'flex_basis': 'auto',
'flex_direction': 'row',
'flex_grow': 0,
'flex_shrink': 1,
'flex_wrap': 'nowrap',
'justify_content': 'flex-start',
'min_height': 'auto',
'min_width': 'auto',
'order': 0,
# Text Decoration Module 3 (CR): https://www.w3.org/TR/css-text-decor-3/
'text_decoration_line': 'none',
'text_decoration_color': 'currentColor',
'text_decoration_style': 'solid',
# Overflow Module 3 (WD): https://www.w3.org/TR/css-overflow-3/
'overflow': 'visible',
'text_overflow': 'clip',
# Proprietary
'anchor': None, # computed value of 'none'
'link': None, # computed value of 'none'
'lang': None, # computed value of 'none'
# Internal, to implement the "static position" for absolute boxes.
'_weasy_specified_display': 'inline',
}
KNOWN_PROPERTIES = set(name.replace('_', '-') for name in INITIAL_VALUES)
# Do not list shorthand properties here as we handle them before inheritance.
#
# text_decoration is not a really inherited, see
# http://www.w3.org/TR/CSS2/text.html#propdef-text-decoration
#
# link: click events normally bubble up to link ancestors
# See http://lists.w3.org/Archives/Public/www-style/2012Jun/0315.html
INHERITED = {
'border_collapse',
'border_spacing',
'caption_side',
'color',
'direction',
'empty_cells',
'font_family',
'font_feature_settings',
'font_kerning',
'font_language_override',
'font_size',
'font_style',
'font_stretch',
'font_variant',
'font_variant_alternates',
'font_variant_caps',
'font_variant_east_asian',
'font_variant_ligatures',
'font_variant_numeric',
'font_variant_position',
'font_weight',
'hyphens',
'hyphenate_character',
'hyphenate_limit_chars',
'hyphenate_limit_zone',
'image_rendering',
'image_resolution',
'lang',
'letter_spacing',
'line_height',
'link',
'list_style_image',
'list_style_position',
'list_style_type',
'orphans',
'overflow_wrap',
'quotes',
'tab_size',
'text_align',
'text_decoration_line',
'text_decoration_color',
'text_decoration_style',
'text_indent',
'text_transform',
'visibility',
'white_space',
'widows',
'word_spacing',
}
# Inherited but not applicable to print:
# azimuth
# cursor
# elevation
# pitch_range
# pitch
# richness
# speak_header
# speak_numeral
# speak_punctuation
# speak
# speech_rate
# stress
# voice_family
# volume
# http://www.w3.org/TR/CSS21/tables.html#model
# See also http://lists.w3.org/Archives/Public/www-style/2012Jun/0066.html
# Only non-inherited properties need to be included here.
TABLE_WRAPPER_BOX_PROPERTIES = {
'bottom',
'break_after',
'break_before',
'break_inside',
'clear',
'counter_increment',
'counter_reset',
'float',
'left',
'margin_top',
'margin_bottom',
'margin_left',
'margin_right',
'opacity',
'overflow',
'position',
'right',
'top',
'transform',
'transform_origin',
'vertical_align',
'z_index',
}
# Properties that have an initial value that is not always the same when
# computed.
INITIAL_NOT_COMPUTED = {
'display',
'column_gap',
'bleed_top',
'bleed_left',
'bleed_bottom',
'bleed_right',
'outline_width',
'outline_color',
'column_rule_width',
'column_rule_color',
'border_top_width',
'border_left_width',
'border_bottom_width',
'border_right_width',
'border_top_color',
'border_left_color',
'border_bottom_color',
'border_right_color',
}