1 /* -*- Mode: C; indent-tabs-mode:nil; c-basic-offset: 8-*- */ 2 3 /* libcroco - Library for parsing and applying CSS 4 * Copyright (C) 2006-2019 Free Software Foundation, Inc. 5 * 6 * This file is not part of the GNU gettext program, but is used with 7 * GNU gettext. 8 * 9 * The original copyright notice is as follows: 10 */ 11 12 /* 13 * This file is part of The Croco Library 14 * 15 * Copyright (C) 2003-2004 Dodji Seketeli. All Rights Reserved. 16 * 17 * This program is free software; you can redistribute it and/or 18 * modify it under the terms of version 2.1 of the GNU Lesser General Public 19 * License as published by the Free Software Foundation. 20 * 21 * This program is distributed in the hope that it will be useful, 22 * but WITHOUT ANY WARRANTY; without even the implied warranty of 23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 24 * GNU General Public License for more details. 25 * 26 * You should have received a copy of the GNU Lesser General Public License 27 * along with this program; if not, write to the Free Software 28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 29 * USA 30 * 31 * Author: Dodji Seketeli 32 */ 33 34 #include <stdio.h> 35 #include <glib.h> 36 #include "cr-utils.h" 37 #include "cr-rgb.h" 38 #include "cr-num.h" 39 #include "cr-string.h" 40 41 #ifndef __CR_TERM_H__ 42 #define __CR_TERM_H__ 43 44 G_BEGIN_DECLS 45 46 /** 47 *@file 48 *Declaration of the #CRTem class. 49 */ 50 51 enum CRTermType 52 { 53 TERM_NO_TYPE = 0, 54 TERM_NUMBER, 55 TERM_FUNCTION, 56 TERM_STRING, 57 TERM_IDENT, 58 TERM_URI, 59 TERM_RGB, 60 TERM_UNICODERANGE, 61 TERM_HASH 62 } ; 63 64 65 enum UnaryOperator 66 { 67 NO_UNARY_UOP = 0, 68 PLUS_UOP, 69 MINUS_UOP, 70 EMPTY_UNARY_UOP 71 } ; 72 73 enum Operator 74 { 75 NO_OP = 0, 76 DIVIDE, 77 COMMA 78 } ; 79 80 struct _CRTerm ; 81 typedef struct _CRTerm CRTerm ; 82 83 /** 84 *An abstraction of a css2 term as 85 *defined in the CSS2 spec in appendix D.1: 86 *term ::= 87 *[ NUMBER S* | PERCENTAGE S* | LENGTH S* | EMS S* | EXS S* 88 *| ANGLE S* | TIME S* | FREQ S* | function ] 89 * | STRING S* | IDENT S* | URI S* | RGB S* 90 *| UNICODERANGE S* | hexcolor 91 */ 92 struct _CRTerm 93 { 94 /** 95 *The type of the term. 96 */ 97 enum CRTermType type ; 98 99 /** 100 *The unary operator associated to 101 *the current term. 102 */ 103 enum UnaryOperator unary_op ; 104 105 /** 106 *The operator associated to the current term. 107 */ 108 enum Operator the_operator ; 109 110 111 /** 112 *The content of the term. 113 *Depending of the type of the term, 114 *this holds either a number, a percentage ... 115 */ 116 union 117 { 118 CRNum *num ; 119 CRString * str ; 120 CRRgb * rgb ; 121 } content ; 122 123 /** 124 *If the term is of type UNICODERANGE, 125 *this field holds the upper bound of the range. 126 *if the term is of type FUNCTION, this holds 127 *an instance of CRTerm that represents 128 * the expression which is the argument of the function. 129 */ 130 union 131 { 132 CRTerm *func_param ; 133 } ext_content ; 134 135 /** 136 *A spare pointer, just in case. 137 *Can be used by the application. 138 */ 139 gpointer app_data ; 140 141 glong ref_count ; 142 143 /** 144 *A pointer to the next term, 145 *just in case this term is part of 146 *an expression. 147 */ 148 CRTerm *next ; 149 150 /** 151 *A pointer to the previous 152 *term. 153 */ 154 CRTerm *prev ; 155 CRParsingLocation location ; 156 } ; 157 158 CRTerm * cr_term_parse_expression_from_buf (const guchar *a_buf, 159 enum CREncoding a_encoding) ; 160 CRTerm * cr_term_new (void) ; 161 162 enum CRStatus cr_term_set_number (CRTerm *a_this, CRNum *a_num) ; 163 164 enum CRStatus cr_term_set_function (CRTerm *a_this, 165 CRString *a_func_name, 166 CRTerm *a_func_param) ; 167 168 enum CRStatus cr_term_set_string (CRTerm *a_this, CRString *a_str) ; 169 170 enum CRStatus cr_term_set_ident (CRTerm *a_this, CRString *a_str) ; 171 172 enum CRStatus cr_term_set_uri (CRTerm *a_this, CRString *a_str) ; 173 174 enum CRStatus cr_term_set_rgb (CRTerm *a_this, CRRgb *a_rgb) ; 175 176 enum CRStatus cr_term_set_hash (CRTerm *a_this, CRString *a_str) ; 177 178 CRTerm * cr_term_append_term (CRTerm *a_this, CRTerm *a_new_term) ; 179 180 CRTerm * cr_term_prepend_term (CRTerm *a_this, CRTerm *a_new_term) ; 181 182 guchar * cr_term_to_string (CRTerm const *a_this) ; 183 184 guchar * cr_term_one_to_string (CRTerm const * a_this) ; 185 186 void cr_term_dump (CRTerm const *a_this, FILE *a_fp) ; 187 188 int cr_term_nr_values (CRTerm const *a_this) ; 189 190 CRTerm * cr_term_get_from_list (CRTerm *a_this, int itemnr) ; 191 192 void cr_term_ref (CRTerm *a_this) ; 193 194 gboolean cr_term_unref (CRTerm *a_this) ; 195 196 void cr_term_destroy (CRTerm * a_term) ; 197 198 G_END_DECLS 199 200 #endif /*__CR_TERM_H__*/ 201