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

247 lines
6.7 KiB
Python
Raw Normal View History

# coding: utf8
"""
weasyprint.css.properties
-------------------------
Various data about known properties.
:copyright: Copyright 2011-2012 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 = {
'background_attachment': 'scroll',
'background_color': COLOR_KEYWORDS['transparent'],
'background_image': 'none',
'background_position': (Dimension(0, '%'), Dimension(0, '%')),
'background_repeat': 'repeat',
'background_clip': 'border-box', # CSS3
'background_origin': 'padding-box', # CSS3
'background_size': ('auto', 'auto'), # CSS3
'border_collapse': 'separate',
# http://www.w3.org/TR/css3-color/#currentcolor
'border_top_color': 'currentColor',
'border_right_color': 'currentColor',
'border_bottom_color': 'currentColor',
'border_left_color': 'currentColor',
'border_spacing': (0, 0),
'border_top_style': 'none',
'border_right_style': 'none',
'border_bottom_style': 'none',
'border_left_style': 'none',
2011-12-16 20:53:11 +04:00
'border_top_width': 3, # Computed value for 'medium'
'border_right_width': 3,
'border_bottom_width': 3,
'border_left_width': 3,
'bottom': 'auto',
'caption_side': 'top',
'clear': 'none',
2012-02-07 21:06:59 +04:00
'clip': (), # empty collection, 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'
# 'counter_set': [], # parsed value for 'none'
'direction': 'ltr',
'display': 'inline',
'empty_cells': 'show',
'float': 'none',
'font_family': ['serif'], # depends on user agent
2011-12-16 18:18:47 +04:00
'font_size': 16, # Actually medium, but we define medium from this.
'font_style': 'normal',
'font_variant': 'normal',
2011-12-16 18:18:47 +04:00
'font_weight': 400,
'height': 'auto',
'left': 'auto',
'letter_spacing': 'normal',
'line_height': 'normal',
'list_style_image': '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'),
'min_height': Dimension(0, 'px'),
'min_width': Dimension(0, 'px'),
'orphans': 2,
'outline_color': 'invert', # or currentColor if invert is not supported
'outline_style': 'none',
'outline_width': 3, # Computed value for 'medium'
'overflow': 'visible',
'padding_top': Dimension(0, 'px'),
'padding_right': Dimension(0, 'px'),
'padding_bottom': Dimension(0, 'px'),
'padding_left': Dimension(0, 'px'),
'page_break_after': 'auto',
'page_break_before': 'auto',
'page_break_inside': 'auto',
'quotes': list('“”‘’'), # depends on user agent
'position': 'static',
'right': 'auto',
'table_layout': 'auto',
'text_align': '-weasy-start', # Taken from CSS3 Text.
# The only other supported value form CSS3 is -weasy-end.
'text_decoration': 'none',
'text_indent': Dimension(0, 'px'),
'text_transform': 'none',
'top': 'auto',
'unicode_bidi': 'normal',
2011-11-23 21:23:33 +04:00
'vertical_align': 'baseline',
'visibility': 'visible',
'white_space': 'normal',
'widows': 2,
'width': 'auto',
2012-02-01 19:13:47 +04:00
'word_spacing': 0, # computed value for 'normal'
'z_index': 'auto',
# CSS3 Paged Media: http://www.w3.org/TR/css3-page/#page-size
'size': None, # XXX set to A4 in computed_values
# CSS3 User Interface: http://www.w3.org/TR/css3-ui/#box-sizing
'box_sizing': 'content-box',
2012-02-07 21:26:23 +04:00
# CSS3 Color: http://www.w3.org/TR/css3-color/#transparency
'opacity': 1,
2012-02-08 18:44:03 +04:00
# CSS3 2D Transforms: http://www.w3.org/TR/css3-2d-transforms
'transform_origin': (Dimension(50, '%'), Dimension(50, '%')),
'transform': (), # empty sequence: computed value for 'none'
2012-02-08 18:44:03 +04:00
# Taken from SVG:
# http://www.w3.org/TR/SVG/painting.html#ImageRenderingProperty
'image_rendering': 'auto',
# Proprietary
'anchor': None, # computed value of 'none'
'link': None, # computed value of 'none'
# CSS3 Generated Content for Paged Media
# http://dev.w3.org/csswg/css3-gcpm/
'bookmark_label': ('keyword', 'none'), # computed value of 'none'
'bookmark_level': 'none',
# 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
INHERITED = set("""
border_collapse
border_spacing
caption_side
color
direction
empty_cells
font_family
font_size
font_style
font_variant
font_weight
letter_spacing
line_height
list_style_image
list_style_position
list_style_type
orphans
quotes
text_align
text_decoration
text_indent
text_transform
visibility
white_space
widows
word_spacing
2012-02-08 18:44:03 +04:00
image_rendering
""".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
TABLE_WRAPPER_BOX_PROPERTIES = set('''
position
float
margin_top
margin_bottom
margin_left
margin_right
top
bottom
left
right
2012-05-11 18:07:14 +04:00
z_index
'''.split())
BACKGROUND_INITIAL = dict(
(name, value) for name, value in INITIAL_VALUES.items()
if name.startswith('background'))