Jelajahi Sumber

Feat: border

viest 5 tahun lalu
induk
melakukan
174c378d0c
2 mengubah file dengan 77 tambahan dan 0 penghapusan
  1. 39 0
      kernel/format.c
  2. 38 0
      tests/format_border.phpt

+ 39 - 0
kernel/format.c

@@ -83,6 +83,10 @@ 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()
+
+ZEND_BEGIN_ARG_INFO_EX(format_border_arginfo, 0, 0, 1)
+                ZEND_ARG_INFO(0, style)
+ZEND_END_ARG_INFO()
 /* }}} */
 
 /** {{{ \Vtiful\Kernel\Format::__construct()
@@ -295,6 +299,26 @@ PHP_METHOD(vtiful_format, wrap)
 }
 /* }}} */
 
+/** {{{ \Vtiful\Kernel\Format::toResource()
+ */
+PHP_METHOD(vtiful_format, border)
+{
+    zend_long style;
+
+    ZEND_PARSE_PARAMETERS_START(1, 1)
+            Z_PARAM_LONG(style)
+    ZEND_PARSE_PARAMETERS_END();
+
+    ZVAL_COPY(return_value, getThis());
+
+    format_object *obj = Z_FORMAT_P(getThis());
+
+    if (obj->ptr.format) {
+        format_set_border(obj->ptr.format, style);
+    }
+}
+/* }}} */
+
 /** {{{ \Vtiful\Kernel\Format::toResource()
  */
 PHP_METHOD(vtiful_format, toResource)
@@ -313,6 +337,7 @@ zend_function_entry format_methods[] = {
         PHP_ME(vtiful_format, wrap,          NULL,                      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, border,        format_border_arginfo,     ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_format, align,         format_align_arginfo,      ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_format, number,        format_number_arginfo,     ZEND_ACC_PUBLIC)
         PHP_ME(vtiful_format, fontColor,     format_color_arginfo,      ZEND_ACC_PUBLIC)
@@ -393,6 +418,20 @@ VTIFUL_STARTUP_FUNCTION(format) {
     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)
 
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_THIN",                 LXW_BORDER_THIN)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_MEDIUM",               LXW_BORDER_MEDIUM)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_DASHED",               LXW_BORDER_DASHED)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_DOTTED",               LXW_BORDER_DOTTED)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_THICK",                LXW_BORDER_THICK)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_DOUBLE",               LXW_BORDER_DOUBLE)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_HAIR",                 LXW_BORDER_HAIR)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_MEDIUM_DASHED",        LXW_BORDER_MEDIUM_DASHED)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_DASH_DOT",             LXW_BORDER_DASH_DOT)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_MEDIUM_DASH_DOT",      LXW_BORDER_MEDIUM_DASH_DOT)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_DASH_DOT_DOT",         LXW_BORDER_DASH_DOT_DOT)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_MEDIUM_DASH_DOT_DOT",  LXW_BORDER_MEDIUM_DASH_DOT_DOT)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "BORDER_SLANT_DASH_DOT",       LXW_BORDER_SLANT_DASH_DOT)
+
     return SUCCESS;
 }
 /* }}} */

+ 38 - 0
tests/format_border.phpt

@@ -0,0 +1,38 @@
+--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();
+
+$data = [
+    ['viest1', 21, 100, "A"],
+    ['viest2', 20, 80, "B"],
+    ['viest3', 22, 70, "C"],
+];
+
+$format = new \Vtiful\Kernel\Format($fileHandle);
+
+$borderStyle = $format
+    ->border(\Vtiful\Kernel\Format::BORDER_THIN)
+    ->toResource();
+
+$filePath = $fileObject->header(['name', 'age', 'score', 'level'])
+    ->data($data)
+    ->setRow('A1', 20, $borderStyle)
+    ->output();
+
+var_dump($filePath);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial.xlsx');
+?>
+--EXPECT--
+string(21) "./tests/tutorial.xlsx"