mirror of
https://github.com/ralsina/tartrazine.git
synced 2025-06-07 20:20:26 -03:00
95 lines
2.2 KiB
C
95 lines
2.2 KiB
C
#include "onigmo.h"
|
|
|
|
regex_t *onigwrap_create(char *pattern, int len, int ignoreCase, int multiline, int dotall)
|
|
{
|
|
regex_t *reg;
|
|
|
|
OnigErrorInfo einfo;
|
|
|
|
OnigOptionType onigOptions = ONIG_OPTION_DEFAULT;
|
|
|
|
if (ignoreCase == 1)
|
|
onigOptions |= ONIG_OPTION_IGNORECASE;
|
|
|
|
if (multiline == 1)
|
|
onigOptions |= ONIG_OPTION_NEGATE_SINGLELINE;
|
|
|
|
if (dotall == 1)
|
|
onigOptions |= ONIG_OPTION_DOTALL;
|
|
|
|
OnigUChar *stringStart = (OnigUChar*) pattern;
|
|
OnigUChar *stringEnd = (OnigUChar*) pattern + len;
|
|
int res = onig_new(®, stringStart, stringEnd, onigOptions, ONIG_ENCODING_UTF8, ONIG_SYNTAX_PYTHON, &einfo);
|
|
|
|
return reg;
|
|
}
|
|
|
|
void onigwrap_region_free(OnigRegion *region)
|
|
{
|
|
onig_region_free(region, 1);
|
|
}
|
|
|
|
void onigwrap_free(regex_t *reg)
|
|
{
|
|
onig_free(reg);
|
|
}
|
|
|
|
int onigwrap_index_in(regex_t *reg, char *charPtr, int offset, int length)
|
|
{
|
|
OnigUChar *stringStart = (OnigUChar*) charPtr;
|
|
OnigUChar *stringEnd = (OnigUChar*) (charPtr + length);
|
|
OnigUChar *stringOffset = (OnigUChar*) (charPtr + offset);
|
|
OnigUChar *stringRange = (OnigUChar*) stringEnd;
|
|
|
|
OnigRegion *region = onig_region_new();
|
|
int result = onig_search(reg, stringStart, stringEnd, stringOffset, stringRange, region, ONIG_OPTION_NONE);
|
|
onig_region_free(region, 1);
|
|
|
|
if (result >= 0)
|
|
return result >> 1;
|
|
if (result == ONIG_MISMATCH)
|
|
return -1;
|
|
return -2;
|
|
}
|
|
|
|
OnigRegion *onigwrap_search(regex_t *reg, char *charPtr, int offset, int length)
|
|
{
|
|
OnigUChar *stringStart = (OnigUChar*) charPtr;
|
|
OnigUChar *stringEnd = (OnigUChar*) (charPtr + length);
|
|
OnigUChar *stringOffset = (OnigUChar*) (charPtr + offset);
|
|
OnigUChar *stringRange = (OnigUChar*) stringEnd;
|
|
|
|
OnigRegion *region = onig_region_new();
|
|
|
|
int result = onig_search(reg, stringStart, stringEnd, stringOffset, stringRange, region, ONIG_OPTION_NONE);
|
|
return region;
|
|
}
|
|
|
|
int onigwrap_num_regs(OnigRegion *region)
|
|
{
|
|
return region->num_regs;
|
|
}
|
|
|
|
int onigwrap_pos(OnigRegion *region, int nth)
|
|
{
|
|
if (nth < region->num_regs)
|
|
{
|
|
int result = region->beg[nth];
|
|
if (result < 0)
|
|
return -1;
|
|
return result;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
int onigwrap_len(OnigRegion *region, int nth)
|
|
{
|
|
if (nth < region->num_regs)
|
|
{
|
|
int result = region->end[nth] - region->beg[nth];
|
|
return result;
|
|
}
|
|
return -1;
|
|
}
|
|
|