Repository URL to install this package:
|
Version:
0.8.10 ▾
|
# encoding: utf-8
"""
Step implementations for font-related features.
"""
from __future__ import (
absolute_import, division, print_function, unicode_literals
)
from behave import given, then, when
from docx import Document
from docx.dml.color import ColorFormat
from docx.enum.dml import MSO_COLOR_TYPE, MSO_THEME_COLOR
from docx.enum.text import WD_COLOR_INDEX, WD_UNDERLINE
from docx.shared import RGBColor
from helpers import test_docx
# given ===================================================
@given('a font')
def given_a_font(context):
document = Document(test_docx('txt-font-props'))
context.font = document.paragraphs[0].runs[0].font
@given('a font having {color} highlighting')
def given_a_font_having_color_highlighting(context, color):
paragraph_index = {
'no': 0,
'yellow': 1,
'bright green': 2,
}[color]
document = Document(test_docx('txt-font-highlight-color'))
context.font = document.paragraphs[paragraph_index].runs[0].font
@given('a font having {type} color')
def given_a_font_having_type_color(context, type):
run_idx = ['no', 'auto', 'an RGB', 'a theme'].index(type)
document = Document(test_docx('fnt-color'))
context.font = document.paragraphs[0].runs[run_idx].font
@given('a font having typeface name {name}')
def given_a_font_having_typeface_name(context, name):
document = Document(test_docx('txt-font-props'))
style_name = {
'not specified': 'Normal',
'Avenir Black': 'Having Typeface',
}[name]
context.font = document.styles[style_name].font
@given('a font having {underline_type} underline')
def given_a_font_having_type_underline(context, underline_type):
style_name = {
'inherited': 'Normal',
'no': 'None Underlined',
'single': 'Underlined',
'double': 'Double Underlined',
}[underline_type]
document = Document(test_docx('txt-font-props'))
context.font = document.styles[style_name].font
@given('a font having {vertAlign_state} vertical alignment')
def given_a_font_having_vertAlign_state(context, vertAlign_state):
style_name = {
'inherited': 'Normal',
'subscript': 'Subscript',
'superscript': 'Superscript',
}[vertAlign_state]
document = Document(test_docx('txt-font-props'))
context.font = document.styles[style_name].font
@given('a font of size {size}')
def given_a_font_of_size(context, size):
document = Document(test_docx('txt-font-props'))
style_name = {
'unspecified': 'Normal',
'14 pt': 'Having Typeface',
'18 pt': 'Large Size',
}[size]
context.font = document.styles[style_name].font
# when ====================================================
@when('I assign {value} to font.color.rgb')
def when_I_assign_value_to_font_color_rgb(context, value):
font = context.font
new_value = None if value == 'None' else RGBColor.from_string(value)
font.color.rgb = new_value
@when('I assign {value} to font.color.theme_color')
def when_I_assign_value_to_font_color_theme_color(context, value):
font = context.font
new_value = None if value == 'None' else getattr(MSO_THEME_COLOR, value)
font.color.theme_color = new_value
@when('I assign {value} to font.highlight_color')
def when_I_assign_value_to_font_highlight_color(context, value):
font = context.font
expected_value = (
None if value == 'None' else getattr(WD_COLOR_INDEX, value)
)
font.highlight_color = expected_value
@when('I assign {value} to font.name')
def when_I_assign_value_to_font_name(context, value):
font = context.font
value = None if value == 'None' else value
font.name = value
@when('I assign {value} to font.size')
def when_I_assign_value_str_to_font_size(context, value):
value = None if value == 'None' else int(value)
font = context.font
font.size = value
@when('I assign {value} to font.underline')
def when_I_assign_value_to_font_underline(context, value):
new_value = {
'True': True,
'False': False,
'None': None,
'WD_UNDERLINE.SINGLE': WD_UNDERLINE.SINGLE,
'WD_UNDERLINE.DOUBLE': WD_UNDERLINE.DOUBLE,
}[value]
font = context.font
font.underline = new_value
@when('I assign {value} to font.{sub_super}script')
def when_I_assign_value_to_font_sub_super(context, value, sub_super):
font = context.font
name = {
'sub': 'subscript',
'super': 'superscript',
}[sub_super]
new_value = {
'None': None,
'True': True,
'False': False,
}[value]
setattr(font, name, new_value)
# then =====================================================
@then('font.color is a ColorFormat object')
def then_font_color_is_a_ColorFormat_object(context):
font = context.font
assert isinstance(font.color, ColorFormat)
@then('font.color.rgb is {value}')
def then_font_color_rgb_is_value(context, value):
font = context.font
expected_value = None if value == 'None' else RGBColor.from_string(value)
assert font.color.rgb == expected_value
@then('font.color.theme_color is {value}')
def then_font_color_theme_color_is_value(context, value):
font = context.font
expected_value = (
None if value == 'None' else getattr(MSO_THEME_COLOR, value)
)
assert font.color.theme_color == expected_value
@then('font.color.type is {value}')
def then_font_color_type_is_value(context, value):
font = context.font
expected_value = (
None if value == 'None' else getattr(MSO_COLOR_TYPE, value)
)
assert font.color.type == expected_value
@then('font.highlight_color is {value}')
def then_font_highlight_color_is_value(context, value):
font = context.font
expected_value = (
None if value == 'None' else getattr(WD_COLOR_INDEX, value)
)
assert font.highlight_color == expected_value
@then('font.name is {value}')
def then_font_name_is_value(context, value):
font = context.font
value = None if value == 'None' else value
assert font.name == value
@then('font.size is {value}')
def then_font_size_is_value(context, value):
value = None if value == 'None' else int(value)
font = context.font
assert font.size == value
@then('font.underline is {value}')
def then_font_underline_is_value(context, value):
expected_value = {
'None': None,
'True': True,
'False': False,
'WD_UNDERLINE.DOUBLE': WD_UNDERLINE.DOUBLE,
}[value]
font = context.font
assert font.underline == expected_value
@then('font.{sub_super}script is {value}')
def then_font_sub_super_is_value(context, sub_super, value):
name = {
'sub': 'subscript',
'super': 'superscript',
}[sub_super]
expected_value = {
'None': None,
'True': True,
'False': False,
}[value]
font = context.font
actual_value = getattr(font, name)
assert actual_value == expected_value