Completed
Pull Request — master (#200)
by Hura
11:35
created

BorderHelper::serializeBorderPart()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 13
rs 9.4285
c 1
b 0
f 0
cc 3
eloc 10
nc 4
nop 1
1
<?php
2
3
namespace Box\Spout\Writer\ODS\Helper;
4
5
use Box\Spout\Writer\Style\BorderPart;
6
use Box\Spout\Writer\Style\Border;
7
8
/**
9
 * Class BorderHelper
10
 *
11
 * The fo:border, fo:border-top, fo:border-bottom, fo:border-left and fo:border-right attributes
12
 * specify border properties
13
 * http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1419780_253892949
14
 *
15
 * Example table-cell-properties
16
 *
17
 * <style:table-cell-properties
18
 * fo:border-bottom="0.74pt solid #ffc000" style:diagonal-bl-tr="none"
19
 * style:diagonal-tl-br="none" fo:border-left="none" fo:border-right="none"
20
 * style:rotation-align="none" fo:border-top="none"/>
21
 */
22
class BorderHelper
23
{
24
25
    /**
26
     * ODS border attributes
27
     *
28
     * @var array
29
     */
30
    public static $odsStyleMap = [
31
        Border::STYLE_SOLID.'%'.Border::WIDTH_THIN => '0.75pt solid',
32
        Border::STYLE_SOLID.'%'.Border::WIDTH_MEDIUM => '1.75pt solid',
33
        Border::STYLE_SOLID.'%'.Border::WIDTH_THICK => '2.5pt solid',
34
        Border::STYLE_DOTTED.'%'.Border::WIDTH_THIN => '0.75pt dotted',
35
        Border::STYLE_DOTTED.'%'.Border::WIDTH_MEDIUM => '1.75pt dotted',
36
        Border::STYLE_DOTTED.'%'.Border::WIDTH_THICK => '2.5pt dotted',
37
        Border::STYLE_DASHED.'%'.Border::WIDTH_THIN => '0.75pt dashed',
38
        Border::STYLE_DASHED.'%'.Border::WIDTH_MEDIUM => '1.75pt dashed',
39
        Border::STYLE_DASHED.'%'.Border::WIDTH_THICK => '2.5pt dashed',
40
        Border::STYLE_DOUBLE.'%'.Border::WIDTH_THIN => '0.75pt double',
41
        Border::STYLE_DOUBLE.'%'.Border::WIDTH_MEDIUM => '1.75pt double',
42
        Border::STYLE_DOUBLE.'%'.Border::WIDTH_THICK => '2.5pt double',
43
        Border::STYLE_NONE.'%'.Border::WIDTH_THIN => 'none',
44
        Border::STYLE_NONE.'%'.Border::WIDTH_MEDIUM => 'none',
45
        Border::STYLE_NONE.'%'.Border::WIDTH_THICK => 'none',
46
    ];
47
48
    /**
49
     * @param BorderPart $borderPart
50
     * @return string
51
     */
52
    public static function serializeBorderPart(BorderPart $borderPart)
53
    {
54
        $styleDef = $borderPart->getStyle() .'%' . $borderPart->getWidth();
55
        $borderStyle = self::$odsStyleMap[$styleDef];
56
        $colorEl = ($borderPart->getColor() && $borderPart->getStyle() !== Border::STYLE_NONE)
57
            ? '#' . $borderPart->getColor() : '';
58
        $partEl = sprintf(
59
            'fo:border-%s="%s"',
60
            $borderPart->getName(),
61
            $borderStyle . ' ' .$colorEl
62
        );
63
        return $partEl;
64
    }
65
}
66