This is RegExp.m in view mode; [Download] [Up]
#import "RegExp.h"
#import <appkit/Application.h>
#import "regex.h"
#import "RegExpConstants.h"
/*
* Define the list of commands and functions this XModule implements
*/
const char *handlerList[] = {
"CHECKEXPRESSION",
"RE_VERSION",
NULL
};
static struct mach_header *loadHeader = NULL;
@implementation RegExp : XModule
- init
{
[super init];
// Do your stuff here...
return ( self );
}
- free
{
// Do your stuff here...
return ( [super free] );
}
// ---------------------------------------------------------------
// Standard XModule methods
// ---------------------------------------------------------------
+ (const char *)moduleName
{
return ( "RegularExpression" );
}
+ (const char **)xCmdsAndFcns
{
return ( handlerList );
}
- prepareToExecuteHandlers
{
// [self loadInterfaceData];
return ( self );
}
- executeHandler:(NXAtom)handlerName
{
if (!strcmp(handlerName, "CHECKEXPRESSION")) {
return ( [self checkExpression] );
} else if (!strcmp(handlerName, "RE_VERSION")) {
return ( [self re_version] );
} else return ( nil ); // handlerName not recognized!
}
// ---------------------------------------------------------------
// Useful methods for loading interface data
// ---------------------------------------------------------------
+ finishLoading:(struct mach_header *)header
{
loadHeader = header; // Save this for later use
return ( self );
}
- loadInterfaceData
{
//[NXApp loadNibSection:"MyXModule.nib" owner:self
// withNames:NO fromHeader:loadHeader] )
return ( self );
}
// XModule Methods
- checkExpression
{
int pCount = [self paramCount];
char *regExp;
char *aString;
const char *errStrPtr;
struct re_pattern_buffer exp;
struct re_registers regs;
int sResult;
char fastmap[256];
// If we don't have a regexp and string, then return with message
if ( pCount != 2 ) {
return ( [[self getEmptyContainer] setString:
"Usage: checkExpression(<aRegExp>, <string>)"] );
}
// Now we get the two string...
regExp = NXCopyStringBuffer([[self getParam:1] stringVal]);
aString = NXCopyStringBuffer([[self getParam:2] stringVal]);
// Initialize the expression.
exp.allocated = 0;
exp.buffer = 0;
exp.translate = NULL;
exp.fastmap = fastmap;
// Now set up the expression to be compiled, return if error.
errStrPtr = re_compile_pattern(regExp, strlen(regExp), &exp);
if ( errStrPtr ) {
return ( [[self getEmptyContainer] setString:errStrPtr] );
}
// No error, so go and check and see if string fits regExp
sResult = re_search(&exp, aString,
strlen(aString), 0, strlen(aString), ®s);
return ( [[self getEmptyContainer] setInt:sResult] );
}
- re_version
{
id version;
version = [[ self getEmptyContainer ] setString:"r" ];
[ version appendString:RE_RELEASE ];
[ version appendString:" v" ];
[ version appendString:RE_VERSION ];
[ version appendString:" " ];
[ version appendString:RE_RELTIME ];
[ version appendString:"\n" ];
[ version appendString:RE_COPYRIGHT ];
return ( version );
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.