[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Sc-devel] regexp support revisited :)
On Monday 26 November 2007, Florian Schmidt wrote:
> On Monday 26 November 2007, Florian Schmidt wrote:
> > On Monday 26 November 2007, Jan Trutzschler wrote:
> > > ok, i checked it in ...
> > > could someone please try to update recompile and see if this works:
> > >
> > > "foobar".findRegexp("o*bar");
> > >
> > > "32424 334 /**aaaaaa*/".findRegexp("/\\*\\*a*\\*/");
> > >
> > > "foobar".findRegexp("(o*)(bar)");
> > >
> > > "aaaabaaa".findAllRegexp("a+");
> >
> > I don't see the change here yet.. Is anonymous svn lagging on SF?
>
> Oh i do see it. As you said you moved it to another file..
Funny btw: This mailinglist seems to remove the CC addresses. Or did i do it
by myself? I don't think so. I have a habit of hitting "reply all" on ML
posts...
Anyways, looking at your code i have a few comments/questions:
[1] I don't yet quite understand the linking issues that forced you to move
the code to a seperate file. Mind to explain? Maybe we can work it out..
[2] Since the presence of libicu is not a question of "Mac OS X or no Mac OS
X" but rather simply whether libicu is installed we should probably simply
add a test for libicu in the SConstruct. If this test fails we could fallback
to the libc version (this means we have to define an preprocessor macro e.g.
HAVE_ICU which can then be used in the code to conditionally include the one
or the other version). I'm not too familiar with scons, so i wouldn't know
where to test for the lib and how to define the preprocessor macro. Any hints
anyone?
[3] It seems you have taken over a quirk from my libc implementation which was
kinda forced on me by the way the libc regex matching API is designed. In the
libc regex API you must perallocate an array for the different group matches
and pass that on to the regexec function along with the size of this array.
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t
pmatch[], int eflags);
This was the factor which forced me to define this MAX_NUM_OF_MATCHES macro
which was just to have a well visible place to tune this API imposed limit
(There would have been a way around it by shifting through the input string
manually always using a MAX_NUM_OF_MATCHES == 1 but i was too lazy at the
time. I was kinda awaiting a roar of outrage about my laziness). It seems to
me the ICU API does not show such a design (i only briefly looked over it)..
Looking at the ICU API it seems we could simply do a single while loop which
consecutively fetches the next match, resizes the output array accordingly
and stores the result in it..
Do you agree/disagree on this? Or do i miss something? If so, just shout at
me ;)
Regards,
Flo
--
Palimm Palimm!
http://tapas.affenbande.org