1
1
mirror of https://github.com/Kozea/WeasyPrint.git synced 2024-10-04 16:07:57 +03:00
WeasyPrint/weasyprint/css/properties.py
Guillaume Ayoub f78eb3763e Use the <content-list> defined in GCPM for string-set and bookmark-label
In this content-list, here are the possibilities:
- string: implemented
- counter/counters: not implemented, but easily possible
- content: implemented (but what's exactly the "string value of an element"?)
- attr: not implemented (I don't know how to do this)
2015-04-30 21:54:19 +02:00

290 lines
8.1 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.

# coding: utf8
"""
weasyprint.css.properties
-------------------------
Various data about known properties.
: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 = {
'background_attachment': ['scroll'],
'background_color': COLOR_KEYWORDS['transparent'],
'background_image': [('none', None)],
'background_position': [('left', Dimension(0, '%'),
'top', Dimension(0, '%'))],
'background_repeat': [('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',
'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',
'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
'font_size': 16, # Actually medium, but we define medium from this.
'font_stretch': 'normal', # css3-fonts
'font_style': 'normal',
'font_variant': 'normal',
'font_weight': 400,
'height': 'auto',
'left': 'auto',
'letter_spacing': 'normal',
'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'),
'min_height': Dimension(0, 'px'),
'min_width': Dimension(0, 'px'),
'orphans': 2,
'outline_color': 'currentColor', # 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',
# http://dev.w3.org/csswg/css-gcpm/#named-strings
'string_set': 'none',
'table_layout': 'auto',
# Taken from CSS3 Text.
# The only other supported value form CSS3 is -weasy-end.
'text_align': '-weasy-start',
'text_decoration': 'none',
'text_indent': Dimension(0, 'px'),
'text_transform': 'none',
'top': 'auto',
'unicode_bidi': 'normal',
'vertical_align': 'baseline',
'visibility': 'visible',
'white_space': 'normal',
'widows': 2,
'width': 'auto',
'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',
'overflow_wrap': 'normal',
# CSS3 Backgrounds and Borders: http://www.w3.org/TR/css3-background/
'border_top_left_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
'border_top_right_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
'border_bottom_left_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
'border_bottom_right_radius': (Dimension(0, 'px'), Dimension(0, 'px')),
# CSS3 Color: http://www.w3.org/TR/css3-color/#transparency
'opacity': 1,
# CSS3 2D Transforms: http://www.w3.org/TR/css3-2d-transforms
'transform_origin': (Dimension(50, '%'), Dimension(50, '%')),
'transform': (), # empty sequence: computed value for 'none'
# Taken from SVG:
# http://www.w3.org/TR/SVG/painting.html#ImageRenderingProperty
'image_rendering': 'auto',
# http://www.w3.org/TR/css3-images/#the-image-resolution
'image_resolution': 1, # dppx
# Proprietary
'anchor': None, # computed value of 'none'
'link': None, # computed value of 'none'
'lang': None, # computed value of 'none'
# CSS3 Generated Content for Paged Media
# http://dev.w3.org/csswg/css3-gcpm/
'bookmark_label': [('content', 'text')],
'bookmark_level': 'none',
# CSS4 Text
# http://dev.w3.org/csswg/css4-text/#hyphenation
'hyphens': 'manual',
'hyphenate_character': '',
'hyphenate_limit_chars': (5, 2, 2),
'hyphenate_limit_zone': Dimension(0, 'px'),
# 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
font_size
font_style
font_stretch
font_variant
font_weight
letter_spacing
line_height
list_style_image
list_style_position
list_style_type
orphans
overflow_wrap
quotes
text_align
text_decoration
text_indent
text_transform
visibility
white_space
widows
word_spacing
hyphens
hyphenate_character
hyphenate_limit_chars
hyphenate_limit_zone
image_rendering
image_resolution
lang
link
""".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('''
position
float
margin_top
margin_bottom
margin_left
margin_right
top
bottom
left
right
clear
counter_increment
counter_reset
opacity
page_break_before
page_break_after
page_break_inside
transform
transform_origin
vertical_align
z_index
'''.split())