Browse Source

set background format

viest 6 years ago
parent
commit
ae85049241
2 changed files with 114 additions and 14 deletions
  1. 77 14
      kernel/format.c
  2. 37 0
      tests/format_background.phpt

+ 77 - 14
kernel/format.c

@@ -74,6 +74,11 @@ ZEND_END_ARG_INFO()
 ZEND_BEGIN_ARG_INFO_EX(format_number_arginfo, 0, 0, 1)
                 ZEND_ARG_INFO(0, format)
 ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(format_background_arginfo, 0, 0, 2)
+                ZEND_ARG_INFO(0, pattern)
+                ZEND_ARG_INFO(0, color)
+ZEND_END_ARG_INFO()
 /* }}} */
 
 /** {{{ \Vtiful\Kernel\Format::__construct()
@@ -106,7 +111,10 @@ PHP_METHOD(vtiful_format, bold)
     ZVAL_COPY(return_value, getThis());
 
     format_object *obj = Z_FORMAT_P(getThis());
-    format_set_bold(obj->ptr.format);
+
+    if (obj->ptr.format) {
+        format_set_bold(obj->ptr.format);
+    }
 }
 /* }}} */
 
@@ -117,7 +125,10 @@ PHP_METHOD(vtiful_format, italic)
     ZVAL_COPY(return_value, getThis());
 
     format_object *obj = Z_FORMAT_P(getThis());
-    format_set_italic(obj->ptr.format);
+
+    if (obj->ptr.format) {
+        format_set_italic(obj->ptr.format);
+    }
 }
 /* }}} */
 
@@ -134,7 +145,10 @@ PHP_METHOD(vtiful_format, underline)
     ZVAL_COPY(return_value, getThis());
 
     format_object *obj = Z_FORMAT_P(getThis());
-    format_set_underline(obj->ptr.format, style);
+
+    if (obj->ptr.format) {
+        format_set_underline(obj->ptr.format, style);
+    }
 }
 /* }}} */
 
@@ -160,7 +174,9 @@ PHP_METHOD(vtiful_format, align)
             zend_throw_exception(vtiful_exception_ce, "Format exception, please view the manual", 150);
         }
 
-        format_set_align(obj->ptr.format, Z_LVAL_P(arg));
+        if (obj->ptr.format) {
+            format_set_align(obj->ptr.format, Z_LVAL_P(arg));
+        }
     }
 }
 /* }}} */
@@ -179,7 +195,9 @@ PHP_METHOD(vtiful_format, color)
 
     format_object *obj = Z_FORMAT_P(getThis());
 
-    format_set_font_color(obj->ptr.format, color);
+    if (obj->ptr.format) {
+        format_set_font_color(obj->ptr.format, color);
+    }
 }
 /* }}} */
 
@@ -197,7 +215,31 @@ PHP_METHOD(vtiful_format, number)
 
     format_object *obj = Z_FORMAT_P(getThis());
 
-    format_set_num_format(obj->ptr.format, ZSTR_VAL(format));
+    if (obj->ptr.format) {
+        format_set_num_format(obj->ptr.format, ZSTR_VAL(format));
+    }
+}
+/* }}} */
+
+/** {{{ \Vtiful\Kernel\Format::background(int $pattern, int $color)
+ */
+PHP_METHOD(vtiful_format, background)
+{
+    zend_long pattern, color;
+
+    ZEND_PARSE_PARAMETERS_START(2, 2)
+            Z_PARAM_LONG(pattern)
+            Z_PARAM_LONG(color)
+    ZEND_PARSE_PARAMETERS_END();
+
+    ZVAL_COPY(return_value, getThis());
+
+    format_object *obj = Z_FORMAT_P(getThis());
+
+    if (obj->ptr.format) {
+        format_set_pattern(obj->ptr.format, pattern);
+        format_set_bg_color(obj->ptr.format, color);
+    }
 }
 /* }}} */
 
@@ -215,14 +257,15 @@ PHP_METHOD(vtiful_format, toResource)
 /** {{{ format_methods
 */
 zend_function_entry format_methods[] = {
-        PHP_ME(vtiful_format, __construct, format_construct_arginfo, ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, bold,        NULL,                     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, italic,      NULL,                     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, underline,   format_underline_arginfo, ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, align,       format_align_arginfo,     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, color,       format_color_arginfo,     ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, number,      format_number_arginfo,    ZEND_ACC_PUBLIC)
-        PHP_ME(vtiful_format, toResource,  NULL,                     ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, __construct, format_construct_arginfo,  ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, bold,        NULL,                      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, italic,      NULL,                      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, align,       format_align_arginfo,      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, color,       format_color_arginfo,      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, number,      format_number_arginfo,     ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, underline,   format_underline_arginfo,  ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, toResource,  NULL,                      ZEND_ACC_PUBLIC)
+        PHP_ME(vtiful_format, background,  format_background_arginfo, ZEND_ACC_PUBLIC)
         PHP_FE_END
 };
 /* }}} */
@@ -275,6 +318,26 @@ VTIFUL_STARTUP_FUNCTION(format) {
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "COLOR_WHITE",   LXW_COLOR_WHITE)
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "COLOR_YELLOW",  LXW_COLOR_YELLOW)
 
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_NONE",             LXW_PATTERN_NONE)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_SOLID",            LXW_PATTERN_SOLID)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_MEDIUM_GRAY",      LXW_PATTERN_MEDIUM_GRAY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_GRAY",        LXW_PATTERN_DARK_GRAY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_GRAY",       LXW_PATTERN_LIGHT_GRAY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_HORIZONTAL",  LXW_PATTERN_DARK_HORIZONTAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_VERTICAL",    LXW_PATTERN_DARK_VERTICAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_DOWN",        LXW_PATTERN_DARK_DOWN)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_UP",          LXW_PATTERN_DARK_UP)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_GRID",        LXW_PATTERN_DARK_GRID)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_DARK_TRELLIS",     LXW_PATTERN_DARK_TRELLIS)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_HORIZONTAL", LXW_PATTERN_LIGHT_HORIZONTAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_VERTICAL",   LXW_PATTERN_LIGHT_VERTICAL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_DOWN",       LXW_PATTERN_LIGHT_DOWN)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_UP",         LXW_PATTERN_LIGHT_UP)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_GRID",       LXW_PATTERN_LIGHT_GRID)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_LIGHT_TRELLIS",    LXW_PATTERN_LIGHT_TRELLIS)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_GRAY_125",         LXW_PATTERN_GRAY_125)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "PATTERN_GRAY_0625",        LXW_PATTERN_GRAY_0625)
+
     return SUCCESS;
 }
 /* }}} */

+ 37 - 0
tests/format_background.phpt

@@ -0,0 +1,37 @@
+--TEST--
+Check for vtiful presence
+--SKIPIF--
+<?php if (!extension_loaded("xlswriter")) print "skip"; ?>
+--FILE--
+<?php
+$config = [
+    'path' => './tests'
+];
+
+$fileObject = new \Vtiful\Kernel\Excel($config);
+$fileObject = $fileObject->fileName('tutorial.xlsx');
+
+$fileHandle = $fileObject->getHandle();
+
+$format = new \Vtiful\Kernel\Format($fileHandle);
+$style  = $format->background(
+	\Vtiful\Kernel\Format::PATTERN_LIGHT_UP,
+	\Vtiful\Kernel\Format::COLOR_RED
+)->toResource();
+
+$filePath = $fileObject->header(['name', 'age'])
+    ->data([
+        ['viest', 21],
+        ['wjx',   21]
+    ])
+    ->setRow('A1', 50, $style)
+    ->output();
+
+var_dump($filePath);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial.xlsx');
+?>
+--EXPECT--
+string(21) "./tests/tutorial.xlsx"