Jelajahi Sumber

Feat(FormatAlign): add align format

viest 6 tahun lalu
induk
melakukan
53fcb95fd0
2 mengubah file dengan 100 tambahan dan 6 penghapusan
  1. 62 6
      kernel/format.c
  2. 38 0
      tests/format_align.phpt

+ 62 - 6
kernel/format.c

@@ -15,12 +15,17 @@
 #endif
 
 #include "include.h"
+#include "ext/standard/php_var.h"
 
 zend_class_entry *vtiful_format_ce;
 
 /* {{{ ARG_INFO
  */
-ZEND_BEGIN_ARG_INFO_EX(format_style_arginfo, 0, 0, 1)
+ZEND_BEGIN_ARG_INFO_EX(format_bold_arginfo, 0, 0, 1)
+                ZEND_ARG_INFO(0, handle)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(format_italic_arginfo, 0, 0, 1)
                 ZEND_ARG_INFO(0, handle)
 ZEND_END_ARG_INFO()
 
@@ -28,6 +33,11 @@ ZEND_BEGIN_ARG_INFO_EX(format_underline_arginfo, 0, 0, 2)
                 ZEND_ARG_INFO(0, handle)
                 ZEND_ARG_INFO(0, style)
 ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(format_align_arginfo, 0, 0, 2)
+                ZEND_ARG_INFO(0, handle)
+                ZEND_ARG_INFO(0, style)
+ZEND_END_ARG_INFO()
 /* }}} */
 
 /** {{{ \Vtiful\Kernel\Format::bold()
@@ -95,13 +105,46 @@ PHP_METHOD(vtiful_format, underline)
 }
 /* }}} */
 
+/** {{{ \Vtiful\Kernel\Format::align()
+ */
+PHP_METHOD(vtiful_format, align)
+{
+    zval *handle = NULL, *args = NULL;
+    int argc, i;
+
+    lxw_format *align_format;
+    xls_resource_t *xls_res;
+
+    ZEND_PARSE_PARAMETERS_START(2, -1)
+            Z_PARAM_RESOURCE(handle)
+            Z_PARAM_VARIADIC('+', args, argc)
+    ZEND_PARSE_PARAMETERS_END();
+
+    xls_res = zval_get_resource(handle);
+    align_format = workbook_add_format(xls_res->workbook);
+
+    for (i = 0; i < argc; ++i) {
+        zval *arg = args + i;
+
+        if (Z_TYPE_P(arg) != IS_LONG) {
+            zend_throw_exception(vtiful_exception_ce, "Format exception, please view the manual", 150);
+        }
+
+        format_set_align(align_format, Z_LVAL_P(arg));
+    }
+
+    RETURN_RES(zend_register_resource(align_format, le_xls_writer));
+}
+/* }}} */
+
 
 /** {{{ xls_methods
 */
 zend_function_entry format_methods[] = {
-        PHP_ME(vtiful_format, bold,      format_style_arginfo, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
-        PHP_ME(vtiful_format, italic,    format_style_arginfo, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
-        PHP_ME(vtiful_format, underline, format_style_arginfo, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+        PHP_ME(vtiful_format, bold,      format_bold_arginfo,      ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+        PHP_ME(vtiful_format, italic,    format_italic_arginfo,    ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+        PHP_ME(vtiful_format, underline, format_underline_arginfo, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
+        PHP_ME(vtiful_format, align,     format_align_arginfo,     ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
         PHP_FE_END
 };
 /* }}} */
@@ -115,11 +158,24 @@ VTIFUL_STARTUP_FUNCTION(format) {
 
     vtiful_format_ce = zend_register_internal_class(&ce);
 
-    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "UNDERLINE_SINGLE", LXW_UNDERLINE_SINGLE)
-    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "UNDERLINE_DOUBLE ", LXW_UNDERLINE_DOUBLE)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "UNDERLINE_SINGLE",            LXW_UNDERLINE_SINGLE)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "UNDERLINE_DOUBLE ",           LXW_UNDERLINE_DOUBLE)
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "UNDERLINE_SINGLE_ACCOUNTING", LXW_UNDERLINE_SINGLE_ACCOUNTING)
     REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "UNDERLINE_DOUBLE_ACCOUNTING", LXW_UNDERLINE_DOUBLE_ACCOUNTING)
 
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_LEFT",                 LXW_ALIGN_LEFT)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_CENTER",               LXW_ALIGN_CENTER)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_RIGHT",                LXW_ALIGN_RIGHT)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_FILL",                 LXW_ALIGN_FILL)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_JUSTIFY",              LXW_ALIGN_JUSTIFY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_CENTER_ACROSS",        LXW_ALIGN_CENTER_ACROSS)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_DISTRIBUTED",          LXW_ALIGN_DISTRIBUTED)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_VERTICAL_TOP",         LXW_ALIGN_VERTICAL_TOP)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_VERTICAL_BOTTOM",      LXW_ALIGN_VERTICAL_BOTTOM)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_VERTICAL_CENTER",      LXW_ALIGN_VERTICAL_CENTER)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_VERTICAL_JUSTIFY",     LXW_ALIGN_VERTICAL_JUSTIFY)
+    REGISTER_CLASS_CONST_LONG(vtiful_format_ce, "FORMAT_ALIGN_VERTICAL_DISTRIBUTED", LXW_ALIGN_VERTICAL_DISTRIBUTED)
+
     return SUCCESS;
 }
 /* }}} */

+ 38 - 0
tests/format_align.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();
+
+$alignStyle = \Vtiful\Kernel\Format::align(
+    $fileHandle,
+    \Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER,
+    \Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_CENTER
+);
+
+$filePath = $fileObject->header(['name', 'age'])
+    ->data([
+        ['viest', 21],
+        ['wjx',   21]
+    ])
+    ->setRow('A1', 50, $alignStyle)
+    ->setRow('A2:A3', 50, $alignStyle)
+    ->output();
+
+var_dump($filePath);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/tutorial.xlsx');
+?>
+--EXPECT--
+string(21) "./tests/tutorial.xlsx"