/* Cataract - Static web photo gallery generator * Copyright (C) 2009 Tomas Bzatek * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __CGG__REPLACE_TABLE_H__ #define __CGG__REPLACE_TABLE_H__ #include G_BEGIN_DECLS typedef struct ReplaceTable ReplaceTable; /* * registered function callback, arguments passed as strings */ typedef char * (*ReplaceTableFunction) (gchar **args, gpointer user_data); ReplaceTable * replace_table_new (); void replace_table_free (ReplaceTable *table); /* * replace_table_add_key: add tag/value pair to replace * * tag, value will be referenced inside * */ void replace_table_add_key (ReplaceTable *table, const gchar *tag, const gchar *value); void replace_table_add_key_int (ReplaceTable *table, const gchar *tag, gint value); void replace_table_add_key_printf (ReplaceTable *table, const gchar *tag, const gchar *format, ...) G_GNUC_PRINTF (3, 4); /* * replace_table_set_defines: set a hash table to be used for defines lookup * */ void replace_table_set_defines (ReplaceTable *table, GHashTable *defines); /* * replace_table_register_function: register a method callback for specified function name * */ void replace_table_register_function (ReplaceTable *table, const gchar *function_name, ReplaceTableFunction callback, gpointer user_data); /* * replace_table_process: process buffer and replace all tags filled in the replace table * * - reallocates source buffer * */ void replace_table_process (gchar **buffer, ReplaceTable *table); /* * adjust_tags_normal: adjust string for normal HTML use * adjust_tags_parameter: adjust string for use as tag parameter value * - both funtions return newly allocated string */ void adjust_tags_normal (gchar **str); void adjust_tags_parameter (gchar **str); /* * get_next_token: retrieves first token ( or $(TOKEN)) in the string * - returns newly allocated token name, caller is responsible for freeing * - start and end are positions of token in the source string 's' * - tag_parameter indicates where the token stands - as a tag itself ( ) * or as a parameter value of some tag ( $(TOKEN) ) * */ gchar * get_next_token (const gchar *s, gchar **start, gchar **end, gboolean *tag_parameter); /* * extract_token_arg: retrieves token argument "xxx(value)" * - returns newly allocated string, caller is responsible for freeing * */ gchar * extract_token_arg (const gchar *str); /* * token_has_prefix: returns TRUE if 'prefix' matches the token syntax (i.e. "prefix (") with unlimited number of spaces before the opening bracket * */ gboolean token_has_prefix (const gchar *token, const gchar *prefix); /* * parse_function: returns name of the function or NULL if token is invalid. Parsed arguments are stored in *args. * - in case an exclamation mark is present before the function name, the *negation argument is set to TRUE * */ gchar * parse_function (const char *token, gchar ***args, gboolean *negation); G_END_DECLS #endif /* __CGG__REPLACE_TABLE_H__ */