Skip to content
This repository
tree: 68bb0b411c
Fetching contributors…

Cannot retrieve contributors at this time

file 108 lines (86 sloc) 3.913 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
// Copyright 2010 Todd Ditchendorf
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#import "PKJSDelimitState.h"
#import "PKJSUtils.h"
#import "PKJSTokenizerState.h"
#import <ParseKit/PKDelimitState.h>

#pragma mark -
#pragma mark Methods

static JSValueRef PKDelimitState_toString(JSContextRef ctx, JSObjectRef function, JSObjectRef this, size_t argc, const JSValueRef argv[], JSValueRef *ex) {
    PKPreconditionInstaceOf(PKDelimitState_class, "toString");
    return PKNSStringToJSValue(ctx, @"[object PKDelimitState]", ex);
}

static JSValueRef PKDelimitState_add(JSContextRef ctx, JSObjectRef function, JSObjectRef this, size_t argc, const JSValueRef argv[], JSValueRef *ex) {
    PKPreconditionInstaceOf(PKDelimitState_class, "add");
    PKPreconditionMethodArgc(4, "PKDelimitState.add");
    
    NSString *start = PKJSValueGetNSString(ctx, argv[0], ex);
    NSString *end = PKJSValueGetNSString(ctx, argv[1], ex);
    NSString *chars = PKJSValueGetNSString(ctx, argv[2], ex);
    BOOL invert = JSValueToBoolean(ctx, argv[3]);
    
    PKDelimitState *data = JSObjectGetPrivate(this);
    NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:chars];
    if (invert) {
        cs = [cs invertedSet];
    }
    [data addStartMarker:start endMarker:end allowedCharacterSet:cs];
    
    return JSValueMakeUndefined(ctx);
}

static JSValueRef PKDelimitState_remove(JSContextRef ctx, JSObjectRef function, JSObjectRef this, size_t argc, const JSValueRef argv[], JSValueRef *ex) {
    PKPreconditionInstaceOf(PKDelimitState_class, "remove");
    PKPreconditionMethodArgc(1, "PKDelimitState.remove");
    
    NSString *start = PKJSValueGetNSString(ctx, argv[0], ex);
    
    PKDelimitState *data = JSObjectGetPrivate(this);
    [data removeStartMarker:start];
    
    return JSValueMakeUndefined(ctx);
}

#pragma mark -
#pragma mark Properties

#pragma mark -
#pragma mark Initializer/Finalizer

static void PKDelimitState_initialize(JSContextRef ctx, JSObjectRef this) {
    
}

static void PKDelimitState_finalize(JSObjectRef this) {
    // released in PKTokenizerState_finalize
}

static JSStaticFunction PKDelimitState_staticFunctions[] = {
{ "toString", PKDelimitState_toString, kJSPropertyAttributeDontDelete },
{ "add", PKDelimitState_add, kJSPropertyAttributeDontDelete },
{ "remove", PKDelimitState_remove, kJSPropertyAttributeDontDelete },
{ 0, 0, 0 }
};

static JSStaticValue PKDelimitState_staticValues[] = {
{ 0, 0, 0, 0 }
};

#pragma mark -
#pragma mark Public

JSClassRef PKDelimitState_class(JSContextRef ctx) {
    static JSClassRef jsClass = NULL;
    if (!jsClass) {
        JSClassDefinition def = kJSClassDefinitionEmpty;
        def.parentClass = PKTokenizerState_class(ctx);
        def.staticFunctions = PKDelimitState_staticFunctions;
        def.staticValues = PKDelimitState_staticValues;
        def.initialize = PKDelimitState_initialize;
        def.finalize = PKDelimitState_finalize;
        jsClass = JSClassCreate(&def);
    }
    return jsClass;
}

JSObjectRef PKDelimitState_new(JSContextRef ctx, void *data) {
    return JSObjectMake(ctx, PKDelimitState_class(ctx), data);
}

JSObjectRef PKDelimitState_construct(JSContextRef ctx, JSObjectRef constructor, size_t argc, const JSValueRef argv[], JSValueRef *ex) {
    PKDelimitState *data = [[PKDelimitState alloc] init];
    return PKDelimitState_new(ctx, data);
}
Something went wrong with that request. Please try again.