Esempio n. 1
0
static int do_onig_search_internal (Onig_Type *o, OnigOptionType option, UChar *str, UChar *str_end, int start_pos, int end_pos)
{
   UChar *start, *range;
   int status;

   onig_region_clear (o->region);

   start = str + start_pos;
   range = str + end_pos;
   /* fwd search: (start <= search string < range)
    * bkw search: (range <= search string <= start)
    */
   if ((start < str) || (start > str_end)
       || (range < str) || (range > str_end))
     {
	SLang_verror (SL_InvalidParm_Error, "Invalid string offsets");
	return -1;
     }
   status = onig_search (o->re, str, str_end, start, range, o->region, option);

   if (status >= 0)
     return status;

   if (status == ONIG_MISMATCH)
     return -1;

   throw_onig_error (status, NULL);
   return -2;
}
Esempio n. 2
0
static unstr_t* create_date_query(const nich_t *nich, size_t res_no, const unstr_t *data)
{
	OnigRegion *region = onig_region_new();
	unstr_t *strtmp = 0;
	unstr_t *query = 0;
	UChar *start;
	UChar *end;
	UChar *range;
	int ret = -1;
	int i = 0;

	end = (UChar *)(data->data + unstr_strlen(data));
	start = (UChar *)(data->data);
	range = end;

	ret = onig_search(nich->reg, (UChar *)data->data, end, start, range, region, ONIG_OPTION_NONE);
	if(ret >= 0){
		strtmp = unstr_init_memory(8);
		query = unstr_sprintf(NULL, "(%d,%$,%d,'", nich->board_no, nich->thread, res_no);
		for(i = 1; i < region->num_regs; i++){
			unstr_substr_char(strtmp, data->data + region->beg[i], region->end[i] - region->beg[i]);
			unstr_strcat(query, strtmp);
		}
		unstr_strcat_char(query, "')");
	}
	onig_region_clear(region);
	onig_region_free(region, 1);
	unstr_free(strtmp);
	return query;
}
Esempio n. 3
0
static int findmatch_exec (TUserdata *ud, TArgExec *argE) {
  const char *end = argE->text + argE->textlen;
  onig_region_clear(ud->region);
  return onig_search (ud->reg, (CUC)argE->text, (CUC)end,
                      (CUC)argE->text + argE->startoffset, (CUC)end,
                      ud->region, argE->eflags);
}
cell AMX_NATIVE_CALL pawn_regex_exsearch(AMX* amx, cell* params)
{
	const char *string = NULL;
	cell* addr[2] = {NULL, NULL};
	amx_GetAddr(amx, params[3], &addr[0]);
    amx_GetAddr(amx, params[4], &addr[1]);
	amx_StrParam(amx, params[1], string);
	if(string)
	{
		int id=(int)params[2];
		if(id>=0 && id<TotalExpressions)
		{
			int r=NULL;
			UChar* str = (UChar* )string;
			onig_region_clear(rexpression[id].zreg);
			r = onig_search(rexpression[id].RegExpr, str, str+strlen(string), str, str+strlen(string), rexpression[id].zreg, ONIG_OPTION_NONE);
			if(r>=0)
			{
				*addr[0]=r;
				*addr[1]=rexpression[id].zreg->end[rexpression[id].zreg->num_regs-1]-1;
			}
			else if(r==ONIG_MISMATCH)
			{
				*addr[0]=-1;
				*addr[1]=-1;
			}
			else
			{
				UChar s[ONIG_MAX_ERROR_MESSAGE_LEN];
				onig_error_code_to_str(s, r);
				logprintf("[REGEX ERROR]: %s\n", s);
				return -1;
			}
			return 1;
		}
		logprintf("[REGEX ERROR]: Call regex_exsearch with undefined parameter at index %d", id);
		return -1;
	}
    return -1337;
}
cell AMX_NATIVE_CALL pawn_regex_exreplace(AMX* amx, cell* params)
{
	const char *string = NULL, *replace = NULL;
	cell* addr = NULL;
	amx_GetAddr(amx, params[1], &addr);
	amx_StrParam(amx, params[1], string);
	amx_StrParam(amx, params[3], replace);
	if(string)
	{
		int id=(int)params[2];
		if(id>=0 && id<TotalExpressions)
		{
			int r=NULL;
			UChar* str = (UChar* )string;
			onig_region_clear(rexpression[id].zreg);
			r = onig_search(rexpression[id].RegExpr, str, str+strlen(string), str, str+strlen(string), rexpression[id].zreg, ONIG_OPTION_NONE);
			if(r>=0)
			{
				std::string asd = std::string(string);
				asd.replace(asd.begin()+r, asd.begin()+rexpression[id].zreg->end[rexpression[id].zreg->num_regs-1], replace);
				amx_SetString(addr, asd.c_str(), 0, 0, params[1]);
			}
			else if(r<ONIG_MISMATCH)
			{
				UChar s[ONIG_MAX_ERROR_MESSAGE_LEN];
				onig_error_code_to_str(s, r);
				logprintf("[REGEX ERROR]: %s\n", s);
				return -1;
			}
			return r;
		}
		logprintf("[REGEX ERROR]: Call regex_exreplace with undefined parameter at index %d", id);
		return -1;
	}
    return -1337;
}
Esempio n. 6
0
static int gsub_exec (TOnig *ud, TArgExec *argE, int st) {
  const char *end = argE->text + argE->textlen;
  onig_region_clear(ud->region);
  return onig_search (ud->reg, (CUC)argE->text, (CUC)end, (CUC)argE->text + st,
    (CUC)end, ud->region, argE->eflags);
}