1
1
mirror of https://github.com/Kozea/WeasyPrint.git synced 2024-10-05 08:27:22 +03:00
WeasyPrint/weasyprint/css/properties.py

311 lines
8.7 KiB
Python
Raw Normal View History

# coding: utf-8
"""
weasyprint.css.properties
-------------------------
Various data about known properties.
2014-01-10 18:27:02 +04:00
:copyright: Copyright 2011-2014 Simon Sapin and contributors, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
from __future__ import division, unicode_literals
import collections
from tinycss.color3 import COLOR_KEYWORDS
Dimension = collections.namedtuple('Dimension', ['value', 'unit'])
# See http://www.w3.org/TR/CSS21/propidx.html
INITIAL_VALUES = {
'bottom': 'auto',
'caption_side': 'top',
'clear': 'none',
2016-08-24 17:57:00 +03:00
'clip': (), # computed value for 'auto'
'color': COLOR_KEYWORDS['black'], # chosen by the user agent
'content': 'normal',
# 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'
2014-04-27 15:29:55 +04:00
# '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'),
2016-08-24 17:57:00 +03:00
'max_height': Dimension(float('inf'), 'px'), # parsed value for 'none'
'max_width': Dimension(float('inf'), 'px'),
'min_height': Dimension(0, 'px'),
'min_width': Dimension(0, 'px'),
'overflow': 'visible',
'padding_top': Dimension(0, 'px'),
'padding_right': Dimension(0, 'px'),
'padding_bottom': Dimension(0, 'px'),
'padding_left': Dimension(0, 'px'),
2016-08-24 17:57:00 +03:00
'quotes': list('“”‘’'), # chosen by the user agent
'position': 'static',
'right': 'auto',
'table_layout': 'auto',
'text_decoration': 'none',
'top': 'auto',
'unicode_bidi': 'normal',
2011-11-23 21:23:33 +04:00
'vertical_align': 'baseline',
'visibility': 'visible',
'width': 'auto',
'z_index': 'auto',
2016-08-24 17:57:00 +03:00
# Backgrounds and Borders 3: https://www.w3.org/TR/css3-background/
'background_attachment': ['scroll'],
'background_clip': ['border-box'],
'background_color': COLOR_KEYWORDS['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')),
2016-08-24 17:57:00 +03:00
'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'
2016-08-24 17:57:00 +03:00
# Color 3: https://www.w3.org/TR/css3-color/
2012-02-07 21:26:23 +04:00
'opacity': 1,
2016-08-26 16:13:20 +03:00
# Multi-column Layout: https://www.w3.org/TR/css3-multicol/
'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',
2016-08-24 17:57:00 +03:00
# Fonts 3: https://www.w3.org/TR/css-fonts-3/
'font_family': ['serif'], # depends on user agent
2016-09-12 01:23:52 +03:00
'font_feature_settings': (), # computed value for 'none'
'font_kerning': 'auto',
2016-08-24 17:57:00 +03:00
'font_size': 16, # actually medium, but we define medium from this
'font_stretch': 'normal',
'font_style': 'normal',
'font_variant': 'normal',
2016-09-12 01:23:52 +03:00
'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',
2016-08-24 17:57:00 +03:00
'font_weight': 400,
2016-08-24 17:57:00 +03:00
# Fragmentation 3: https://www.w3.org/TR/css-break-3/
2016-08-30 14:35:23 +03:00
'break_after': 'auto',
'break_before': 'auto',
'break_inside': 'auto',
2016-08-24 17:57:00 +03:00
'orphans': 2,
'widows': 2,
2016-08-24 17:57:00 +03:00
# Generated Content for Paged Media: https://www.w3.org/TR/css-gcpm-3/
'bookmark_label': [('content', 'text')],
'bookmark_level': 'none',
2016-08-24 17:57:00 +03:00
'string_set': 'none',
2016-08-24 17:57:00 +03:00
# Images 3/4: https://www.w3.org/TR/css4-images/
'image_resolution': 1, # dppx
'image_rendering': 'auto',
2016-08-20 21:11:03 +03:00
2016-08-24 17:57:00 +03:00
# Paged Media 3: https://www.w3.org/TR/css3-page/
'size': None, # XXX set to A4 in computed_values
# Text 3/4: https://www.w3.org/TR/css-text-4/
'hyphenate_character': '', # computed value chosen by the user agent
2013-03-02 07:41:32 +04:00
'hyphenate_limit_chars': (5, 2, 2),
2013-03-02 06:42:36 +04:00
'hyphenate_limit_zone': Dimension(0, 'px'),
2016-08-24 17:57:00 +03:00
'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: https://www.w3.org/TR/css-transforms-1/
'transform_origin': (Dimension(50, '%'), Dimension(50, '%')),
'transform': (), # computed value for 'none'
# User Interface 3: 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',
# Proprietary
'anchor': None, # computed value of 'none'
'link': None, # computed value of 'none'
'lang': None, # computed value of 'none'
2012-12-09 01:50:08 +04:00
# Internal, to implement the "static position" for absolute boxes.
'_weasy_specified_display': 'inline',
}
KNOWN_PROPERTIES = set(name.replace('_', '-') for name in INITIAL_VALUES)
# Not applicable to the print media
NOT_PRINT_MEDIA = set([
# Aural media:
'azimuth',
'cue',
'cue-after',
'cue-before',
'cursor',
'elevation',
'pause',
'pause-after',
'pause-before',
'pitch-range',
'pitch',
'play-during',
'richness',
'speak-header',
'speak-numeral',
'speak-punctuation',
'speak',
'speech-rate',
'stress',
'voice-family',
'volume',
# outlines are not just for interactive but any visual media in css3-ui
])
# 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 = set("""
border_collapse
border_spacing
caption_side
color
direction
empty_cells
font_family
2016-09-12 01:23:52 +03:00
font_feature_settings
font_kerning
font_size
font_style
font_stretch
font_variant
2016-09-12 01:23:52 +03:00
font_variant_alternates
font_variant_caps
font_variant_east_asian
font_variant_ligatures
font_variant_numeric
font_variant_position
font_weight
2016-08-24 17:57:00 +03:00
hyphens
hyphenate_character
hyphenate_limit_chars
hyphenate_limit_zone
image_rendering
image_resolution
lang
letter_spacing
line_height
2016-08-24 17:57:00 +03:00
link
list_style_image
list_style_position
list_style_type
orphans
overflow_wrap
quotes
2016-08-20 21:11:03 +03:00
tab_size
text_align
text_decoration
text_indent
text_transform
visibility
white_space
widows
word_spacing
""".split())
# 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 = set('''
2016-08-24 17:57:00 +03:00
bottom
2016-08-30 14:35:23 +03:00
break_after
break_before
break_inside
2016-08-24 17:57:00 +03:00
clear
counter_increment
counter_reset
float
2016-08-24 17:57:00 +03:00
left
margin_top
margin_bottom
margin_left
margin_right
opacity
2016-08-24 17:57:00 +03:00
position
right
top
transform
transform_origin
vertical_align
2012-05-11 18:07:14 +04:00
z_index
'''.split())