From fd5ccee08973a2a5ada67e87c8d76b8086cd6ec5 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 15 Aug 2018 16:06:24 +0100 Subject: WIP: Layout node stuff. Not a lot here. --- src/Makefile | 2 +- src/node.c | 25 +++++++++++++++++++++++++ src/node.h | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/node.c create mode 100644 src/node.h diff --git a/src/Makefile b/src/Makefile index 7a6251d..b02f0b9 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,6 +6,6 @@ # Released under the ISC License (see COPYING file) # Sources -DIR_SOURCES := layout.c +DIR_SOURCES := layout.c node.c include $(NSBUILD)/Makefile.subdir diff --git a/src/node.c b/src/node.c new file mode 100644 index 0000000..233e6c4 --- /dev/null +++ b/src/node.c @@ -0,0 +1,25 @@ +/* + * This file is part of LibNSLayout + * Licensed under the ISC License, http://opensource.org/licenses/ISC + * Copyright 2015 Michael Drake + */ + +/** \file src/node.c + * Layout node handling + */ + +#include +#include + +#include "libnslayout/nslayout.h" + +#include "layout.h" +#include "util/util.h" +#include "util/dom-str.h" + + +/** + * The layout node object. + */ +struct nsl_node { +}; diff --git a/src/node.h b/src/node.h new file mode 100644 index 0000000..b21352a --- /dev/null +++ b/src/node.h @@ -0,0 +1,61 @@ +/* + * This file is part of LibNSLayout + * Licensed under the ISC License, http://opensource.org/licenses/ISC + * Copyright 2015 Michael Drake + */ + +/** \file src/node.h + * Layout node handling + */ + +#ifndef nsl_node_h_ +#define nsl_node_h_ + +typedef struct nsl_node nsl_node; + +/** Layout node types */ +enum nsl_node { + NSL_NODE_INLINE = 1, + NSL_NODE_BLOCK = ( 1 << 1), + NSL_NODE_FLEX = ( 2 << 1), + NSL_NODE_GRID = ( 3 << 1), + NSL_NODE_TABLE = ( 4 << 1), + NSL_NODE_TABLE_CAP = ( 5 << 1), + NSL_NODE_TABLE_COL_GROUP = ( 6 << 1), + NSL_NODE_TABLE_ROW_GROUP = ( 7 << 1), + NSL_NODE_TABLE_CELL = ( 8 << 1), + NSL_NODE_TABLE_COL = ( 9 << 1), + NSL_NODE_TABLE_ROW = (10 << 1), + NSL_NODE_INLINE_BLOCK = NSL_NODE_INLINE | NSL_NODE_BLOCK, + NSL_NODE_INLINE_FLEX = NSL_NODE_INLINE | NSL_NODE_FLEX, + NSL_NODE_INLINE_GRID = NSL_NODE_INLINE | NSL_NODE_GRID, + NSL_NODE_INLINE_TABLE = NSL_NODE_INLINE | NSL_NODE_TABLE, +}; + +/** + * Test whether a layout node participates in inline flow. + * + * \param[in] node Node to test. + * \return true if node participates in inline flow, false otherwise. + */ +static inline bool nsl_node_is_inline(struct nsl_node *node) +{ + return node->type & NSL_NODE_INLINE; +} + +/** + * Test whether a layout node participates in block flow. + * + * \param[in] node Node to test. + * \return true if node participates in block flow, false otherwise. + */ +static inline bool nsl_node_is_block(struct nsl_node *node) +{ + return !nsl_node_is_inline(node); +} + +nsl_error nsl__node_create(nsl_node **node_out); + +void nsl__node_destroy(nsl_node *node_out); + +#endif -- cgit v1.2.3