/******************************************************************************
 * $Id: regularexp.h,v 1.3 2007/01/13 22:36:24 gareuselesinge Exp $
 * This file is part of liberopops (http://liberopops.sf.net)                 *
 * This file is distributed under the terms of GNU GPL license.               *
 ******************************************************************************/


/******************************************************************************/
 /*!
  * \file   regularexp.h
  * \brief  Implements a layer for regex
  * \author Enrico Tassi <gareuselesinge@users.sourceforge.net>
  * \author Alessio Caprari <alessiofender@users.sourceforge.net>
  */
/******************************************************************************/

#ifndef REGULAREXP_H_
#define REGULAREXP_H_

#include <sys/types.h>
#include <regex.h>

/** @name I hate rm_so/eo name! */
//@{
#define begin rm_so
#define end   rm_eo
//@}

/**
 *  Searches for a regular expression in the given string.
 *  @param from the source string
 *  @param exp the regular expression
 *  @return a struct with a begin and end fields
 */
regmatch_t regfind(const char* from,const char* exp);

/**
 * Searches for a regular expression in the given string,
 * returning only the starting offset.
 * @return The start offset of the match
 * @see regfind()
 */
regoff_t regfind_start(const char* from, const char* exp);

/**
 * Searches for a regular expression in the given string,
 * returning only the ending offset.
 * @return The end offset of the match
 * @see regfind()
 */
regoff_t regfind_end(const char* from, const char* exp);

/**
 * Searches for a regular expression in the given string,
 * returning the number of occurrences. 
 * @param offset if we want to count "baab" and the last b
 *   must be used to form another match we can say to go back 
 *   offset characters after each match. so passing offset = 1
 *   "baabaab" counts 2 instead of 1.
 * @return the number of occurrences of exp in from
 * @see regfind()
 */
int regfind_count(const char* from, const char* exp, int offset);

#endif
