/*   Cataract - Static web photo gallery generator
 *   Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
 *
 *   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__GALLERY_UTILS_H__
#define __CGG__GALLERY_UTILS_H__

#include <glib.h>
#include <string.h>

G_BEGIN_DECLS


#define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '~')
#define IS_EQUAL_SIGN(ch) ((ch) == '=')
#define GET_EXT(s)  strrchr (s, '.')

/*
 *   str_replace: replace substring 'search' with a 'replace' string
 *                - multiple occurences of the string are replaced
 *                - reallocates the original string
 */
void str_replace (gchar **dst, const gchar *search, const gchar *replace);

/*
 *   copy_file: copy file from src to dst
 */
gboolean copy_file (const gchar *src, const gchar *dst);

/*
 *   make_string: make string of 'substr' substrings
 *                - returns newly allocated string
 */
gchar * make_string (const gchar *substr, int count);

/*
 *   fix_entities: replace all invalid & entities with &amp;
 *                 - returns newly allocated string
 */
void fix_entities (gchar **str);

/*
 *   remove_tags: remove all occurences of tags beginning with tag_begin and ending with tag_end
 *                - e.g.  remove_tags (&x, "<!--", "-->") will remove all comments
 *                - returns newly allocated string
 */
void remove_tags (gchar **str, const gchar *tag_begin, const gchar *tag_end);

/*
 *   count_dir_levels: returns number of path elements
 */
int count_dir_levels (const gchar *path);

/*
 *   extract_file_ext: returns pointer to filename extension
 */
const gchar * extract_file_ext (const gchar *filename);

/*
 *   log_error: prints an error and increments stats
 */
void log_error (const gchar *format, ...) G_GNUC_PRINTF (1, 2);

/*
 *   needs_update: returns TRUE if the destionation file needs updating, also when missing
 */
gboolean needs_update (const gchar *source, const gchar *dest);


G_END_DECLS

#endif /* __CGG__GALLERY_UTILS_H__ */
