## ccss_node_t

ccss_node_t

## Functions

bool | (*ccss_node_is_a_f) ()
ccss_node_t * | (*ccss_node_get_container_f) ()
ccss_node_t * | (*ccss_node_get_base_style_f) ()
ptrdiff_t | (*ccss_node_get_instance_f) ()
const char * | (*ccss_node_get_id_f) ()
const char * | (*ccss_node_get_type_f) ()
const char * | (*ccss_node_get_class_f) ()
char * | (*ccss_node_get_attribute_f) ()
const char * | (*ccss_node_get_style_f) ()
bool | (*ccss_node_get_viewport_f) ()
void | (*ccss_node_release_f) ()
void | ccss_node_init ()

## Types and Values

typedef | ccss_node_t
| ccss_node_class_t

## Description

## Functions

### ccss_node_is_a_f ()

    bool
    (*ccss_node_is_a_f) (ccss_node_t *self,
                         char const *type_name);

Hook function to query whether a ccss_node_t is of a certain type.

#### Parameters

self | a ccss_node_t. |
type_name | name to match against, e.g. `div`. |

#### Returns

`TRUE` if matches.

### ccss_node_get_container_f ()

    ccss_node_t *
    (*ccss_node_get_container_f) (ccss_node_t const *self);

Hook function to query the container of a ccss_node_t.

#### Parameters

self | a ccss_node_t. |

#### Returns

newly allocated container node or `NULL`.

### ccss_node_get_base_style_f ()

    ccss_node_t *
    (*ccss_node_get_base_style_f) (ccss_node_t const *self);

Hook function to query the name of the style a ccss_node_t derives from.

#### Parameters

self | a ccss_node_t. |

#### Returns

base style or `NULL`. The returned value must be valid until it is released.

### ccss_node_get_instance_f ()

    ptrdiff_t
    (*ccss_node_get_instance_f) (ccss_node_t const *self);

Hook function to query for a unique numerical representation of a ccss_node_t.

#### Parameters

self | a ccss_node_t. |

#### Returns

unique numerical id or 0. If 0 is returned, node-based css style will not be considered.

### ccss_node_get_id_f ()

    const char *
    (*ccss_node_get_id_f) (ccss_node_t const *self);

Hook function to query the ID of a ccss_node_t.

#### Parameters

self | a ccss_node_t. |

#### Returns

node ID or `NULL`. The returned value must be valid until the current stylesheet query returns.

### ccss_node_get_type_f ()

    const char *
    (*ccss_node_get_type_f) (ccss_node_t const *self);

Hook function to query the type name of a ccss_node_t.

#### Parameters

self | a ccss_node_t. |

#### Returns

node type name or `NULL`. The returned value must be valid until the current stylesheet query returns.

### ccss_node_get_class_f ()

    const char *
    (*ccss_node_get_class_f) (ccss_node_t const *self);

Hook function to query the class name of a ccss_node_t.

#### Parameters

self | a ccss_node_t. |

#### Returns

node class name or `NULL`. The returned value must be valid until the current stylesheet query returns.

### ccss_node_get_attribute_f ()

    char *
    (*ccss_node_get_attribute_f) (ccss_node_t const *self,
                                  char const *name);

Hook function to query a ccss_node_t's attributes.

#### Parameters

self | a ccss_node_t. |
name | attribute name. |

#### Returns

attribute value or `NULL`. The returned value must be valid until the current stylesheet query returns.

### ccss_node_get_style_f ()

    const char *
    (*ccss_node_get_style_f) (ccss_node_t const *self,
                              unsigned int descriptor);

Hook function to query a ccss_node_t's inline CSS style.

See: `ccss_stylesheet_unload()`.

#### Parameters

self | a ccss_node_t. |
descriptor | handle to unload this style from the stylesheet later on. |

#### Returns

the node's CSS properties or `NULL`.

### ccss_node_get_viewport_f ()

    bool
    (*ccss_node_get_viewport_f) (ccss_node_t const *self,
                                 double *x,
                                 double *y,
                                 double *width,
                                 double *height);

Hook function to determine the position of a node in the viewport.

#### Parameters

self | a ccss_node_t. |
x | horizontal position. |
y | vertical position. |
width | width of viewport. |
height | height of viewport. |

#### Returns

`TRUE` if a valid viewport position has been assigned to the out parameters.

### ccss_node_release_f ()

    void
    (*ccss_node_release_f) (ccss_node_t *self);

Hook function to deallocate a ccss_node_t instance.

#### Parameters

self | a ccss_node_t. |

### ccss_node_init ()

    void
    ccss_node_init (ccss_node_t *self,
                    ccss_node_class_t *node_class);

Initializes `node_class` by filling unset functions with the default implementations and attaches it to `self` .

#### Parameters

self | a ccss_node_t embedding structure. |
node_class | a ccss_node_class_t vtable. |

## Types and Values

### ccss_node_t

    typedef struct ccss_node_ ccss_node_t;

Stack-allocatable struct representing a document node. Used for querying the ccss_stylesheet_t.

Memory management: Unless specified otherwise, objects of this kind are under the responsibility of the libccss consumer.

### ccss_node_class_t

    typedef struct {
    	ccss_node_is_a_f		is_a;
    	ccss_node_get_container_f get_container;
    	ccss_node_get_base_style_f get_base_style;
    	ccss_node_get_instance_f get_instance;
    	ccss_node_get_id_f		get_id;
    	ccss_node_get_type_f		get_type;
    	ccss_node_get_class_f		get_class;
    	ccss_node_get_pseudo_classes_f get_pseudo_classes;
    	ccss_node_get_attribute_f get_attribute;
    	ccss_node_get_style_f		get_style;
    	ccss_node_get_viewport_f get_viewport;
    	ccss_node_release_f		release;
    } ccss_node_class_t;

Dispatch table a CCSS consumer has to fill so the selection engine can retrieve information about the document the document.

The implemented dispatch table needs to be passed to ccss_node_init.

#### Members

ccss_node_is_a_f `is_a`; | a ccss_node_is_a_f. |
ccss_node_get_container_f `get_container`; | a ccss_node_get_container_f. |
ccss_node_get_base_style_f `get_base_style`; | a ccss_node_get_base_style_f. |
ccss_node_get_instance_f `get_instance`; | a ccss_node_get_instance_f. |
ccss_node_get_id_f `get_id`; | a ccss_node_get_id_f. |
ccss_node_get_type_f `get_type`; | a ccss_node_get_type_f. |
ccss_node_get_class_f `get_class`; | a ccss_node_get_class_f. |
ccss_node_get_pseudo_classes_f `get_pseudo_classes`; | a ccss_node_get_pseudo_classes_f. |
ccss_node_get_attribute_f `get_attribute`; | a ccss_node_get_attribute_f. |
ccss_node_get_style_f `get_style`; | a ccss_node_get_style_f. |
ccss_node_get_viewport_f `get_viewport`; | a ccss_node_get_viewport_f. |
ccss_node_release_f `release`; | a ccss_node_release_f. |