mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-27 20:57:40 +00:00
Merge branch 'imports' of https://github.com/stevegeek/cappuccino into stevegeek-imports
This commit is contained in:
@@ -20,12 +20,13 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPRange.j"
|
||||
@import "CPString.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPAttributedString
|
||||
@ingroup foundation
|
||||
|
||||
@@ -21,12 +21,11 @@
|
||||
*/
|
||||
|
||||
@import "CPDictionary.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPNotification.j"
|
||||
@import "CPNotificationCenter.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
CPBundleDidLoadNotification = "CPBundleDidLoadNotification";
|
||||
CPBundleDidLoadNotification = @"CPBundleDidLoadNotification";
|
||||
|
||||
/*!
|
||||
@class CPBundle
|
||||
|
||||
+30
-18
@@ -19,8 +19,11 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import <Foundation/CPObject.j>
|
||||
@import <Foundation/CPString.j>
|
||||
@import "CPArray.j"
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPString.j"
|
||||
@import "CPURL.j"
|
||||
|
||||
// CPCharacterSet is a class cluster. Concrete implementations
|
||||
// follow after the main abstract class.
|
||||
@@ -48,7 +51,9 @@ var _builtInCharacterSets = {};
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
_inverted = NO;
|
||||
|
||||
if (self)
|
||||
_inverted = NO;
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -144,11 +149,11 @@ var _builtInCharacterSets = {};
|
||||
var cs = _builtInCharacterSets[csname];
|
||||
if (cs == nil)
|
||||
{
|
||||
var i,
|
||||
var i = 0,
|
||||
ranges = [CPArray array],
|
||||
rangeArray = eval(csname);
|
||||
|
||||
for (i = 0; i < rangeArray.length; i+= 2)
|
||||
for (; i < rangeArray.length; i+= 2)
|
||||
{
|
||||
var loc = rangeArray[i],
|
||||
length = rangeArray[i + 1],
|
||||
@@ -185,7 +190,9 @@ var _builtInCharacterSets = {};
|
||||
// Creates a range character set with multiple ranges.
|
||||
- (id)initWithRanges:(CPArray)ranges
|
||||
{
|
||||
if (self = [super init])
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_ranges = ranges;
|
||||
}
|
||||
@@ -226,7 +233,7 @@ var _builtInCharacterSets = {};
|
||||
{
|
||||
// the highest Unicode plane we reach.
|
||||
// (There are 65536 code points in each plane.)
|
||||
var maxPlane = Math.floor((range.start + range.length - 1) / 65536); // should iterate _ranges
|
||||
var maxPlane = Math.floor((range.start + range.length - 1) / 65536); // FIXME: should iterate _ranges
|
||||
|
||||
return (plane <= maxPlane);
|
||||
}
|
||||
@@ -238,9 +245,9 @@ var _builtInCharacterSets = {};
|
||||
|
||||
- (void)addCharactersInString:(CPString)aString // Needs _inverted support
|
||||
{
|
||||
var i;
|
||||
var i = 0;
|
||||
|
||||
for (i = 0; i < aString.length; i++)
|
||||
for (; i < aString.length; i++)
|
||||
{
|
||||
var code = aString.charCodeAt(i),
|
||||
range = CPMakeRange(code,1);
|
||||
@@ -260,7 +267,9 @@ var _builtInCharacterSets = {};
|
||||
|
||||
- (id)initWithString:(CPString)s
|
||||
{
|
||||
if (self = [super init])
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_string = s;
|
||||
}
|
||||
@@ -307,8 +316,10 @@ var _builtInCharacterSets = {};
|
||||
|
||||
- (void)addCharactersInRange:(CPRange)aRange // Needs _inverted support
|
||||
{
|
||||
var i;
|
||||
for (i = aRange.location; i < aRange.location + aRange.length; i++)
|
||||
var i = aRange.location,
|
||||
count = aRange.location + aRange.length;
|
||||
|
||||
for (; i < count; i++)
|
||||
{
|
||||
var s = String.fromCharCode(i);
|
||||
|
||||
@@ -319,9 +330,9 @@ var _builtInCharacterSets = {};
|
||||
|
||||
- (void)addCharactersInString:(CPString)aString // Needs _inverted support
|
||||
{
|
||||
var i;
|
||||
var i = 0;
|
||||
|
||||
for (i = 0; i < aString.length; i++)
|
||||
for (; i < aString.length; i++)
|
||||
{
|
||||
var s = aString.charAt(i);
|
||||
|
||||
@@ -332,8 +343,8 @@ var _builtInCharacterSets = {};
|
||||
|
||||
@end
|
||||
|
||||
_CPCharacterSetTrimAtBeginning = 1 << 1;
|
||||
_CPCharacterSetTrimAtEnd = 1 << 2;
|
||||
_CPCharacterSetTrimAtBeginning = 1 << 1;
|
||||
_CPCharacterSetTrimAtEnd = 1 << 2;
|
||||
|
||||
@implementation CPString (CPCharacterSetAdditions)
|
||||
|
||||
@@ -356,9 +367,10 @@ _CPCharacterSetTrimAtEnd = 1 << 2;
|
||||
reason:"componentsSeparatedByCharactersInSet: the separator can't be 'nil'"];
|
||||
|
||||
var components = [CPMutableArray array],
|
||||
componentRange = CPMakeRange(0, 0);
|
||||
componentRange = CPMakeRange(0, 0),
|
||||
i = 0;
|
||||
|
||||
for (var i = 0; i < self.length; i++)
|
||||
for (; i < self.length; i++)
|
||||
{
|
||||
if ([separator characterIsMember:self.charAt(i)])
|
||||
{
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPCoder
|
||||
@ingroup foundation
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPObject.j"
|
||||
@import "CPSet.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPCountedSet
|
||||
@ingroup foundation
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
@import "CPObject.j"
|
||||
@import "CPString.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPData
|
||||
@ingroup foundation
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
|
||||
@import "CPObject.j"
|
||||
@import "CPString.j"
|
||||
|
||||
@import "CPException.j"
|
||||
|
||||
var CPDateReferenceDate = new Date(Date.UTC(2001, 1, 1, 0, 0, 0, 0));
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
@import "CPArray.j"
|
||||
@import "CPEnumerator.j"
|
||||
@import "CPException.j"
|
||||
@import "CPNull.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
/* @ignore */
|
||||
@implementation _CPDictionaryValueEnumerator : CPEnumerator
|
||||
{
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPEnumerator
|
||||
@ingroup foundation
|
||||
|
||||
@@ -24,11 +24,10 @@
|
||||
@import "CPObject.j"
|
||||
@import "CPString.j"
|
||||
|
||||
|
||||
CPInvalidArgumentException = "CPInvalidArgumentException";
|
||||
CPUnsupportedMethodException = "CPUnsupportedMethodException";
|
||||
CPRangeException = "CPRangeException";
|
||||
CPInternalInconsistencyException = "CPInternalInconsistencyException";
|
||||
CPInvalidArgumentException = @"CPInvalidArgumentException";
|
||||
CPUnsupportedMethodException = @"CPUnsupportedMethodException";
|
||||
CPRangeException = @"CPRangeException";
|
||||
CPInternalInconsistencyException = @"CPInternalInconsistencyException";
|
||||
|
||||
/*!
|
||||
@class CPException
|
||||
@@ -90,7 +89,9 @@ if (input == nil)
|
||||
*/
|
||||
- (id)initWithName:(CPString)aName reason:(CPString)aReason userInfo:(CPDictionary)aUserInfo
|
||||
{
|
||||
if (self = [super init])
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
name = aName;
|
||||
message = aReason;
|
||||
@@ -162,9 +163,9 @@ if (input == nil)
|
||||
|
||||
@end
|
||||
|
||||
var CPExceptionNameKey = "CPExceptionNameKey",
|
||||
CPExceptionReasonKey = "CPExceptionReasonKey",
|
||||
CPExceptionUserInfoKey = "CPExceptionUserInfoKey";
|
||||
var CPExceptionNameKey = @"CPExceptionNameKey",
|
||||
CPExceptionReasonKey = @"CPExceptionReasonKey",
|
||||
CPExceptionUserInfoKey = @"CPExceptionUserInfoKey";
|
||||
|
||||
@implementation CPException (CPCoding)
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
@implementation CPFormatter : CPObject
|
||||
|
||||
/*!
|
||||
@@ -57,13 +56,11 @@
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
/*- (CPAttributedString)attributedStringForObjectValue:(id)anObject withDefaultAttributes:(CPDictionary)attributes
|
||||
{
|
||||
|
||||
}*/
|
||||
|
||||
|
||||
/*!
|
||||
The default implementation of this method invokes stringForObjectValue:.
|
||||
|
||||
@@ -80,7 +77,6 @@
|
||||
return [self stringForObjectValue:anObject];
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
The default implementation of this method raises an exception.
|
||||
|
||||
@@ -102,7 +98,6 @@
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Returns a Boolean value that indicates whether a partial string is valid.
|
||||
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import <Foundation/CPObject.j>
|
||||
@import "CPArray.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPOperation.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPFunctionOperation
|
||||
@brief Represents an operation using a JavaScript function that can be run in an CPOperationQueue
|
||||
@@ -32,7 +32,6 @@
|
||||
CPArray _functions;
|
||||
}
|
||||
|
||||
|
||||
- (void)main
|
||||
{
|
||||
if (_functions && [_functions count] > 0)
|
||||
@@ -50,7 +49,9 @@
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (self = [super init])
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_functions = [];
|
||||
}
|
||||
|
||||
@@ -1,10 +1,29 @@
|
||||
/*
|
||||
* CPIndexPath.j
|
||||
* Foundation
|
||||
*
|
||||
* Copyright 2008, 280 North, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPObject.j"
|
||||
@import "CPArray.j"
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPRange.j"
|
||||
@import "CPSortDescriptor.j"
|
||||
@import "CPException.j"
|
||||
|
||||
|
||||
@implementation CPIndexPath : CPObject
|
||||
{
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPRange.j"
|
||||
|
||||
|
||||
#define _CPMaxRange(aRange) ((aRange).location + (aRange).length)
|
||||
#define _CPMakeRange(aLocation, aLength) { location:(aLocation), length:aLength }
|
||||
#define _CPMakeRangeCopy(aRange) { location:(aRange).location, length:(aRange).length }
|
||||
|
||||
@@ -20,10 +20,8 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPInvocation
|
||||
@ingroup foundation
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
@import "CPObject.j"
|
||||
@import "CPOperation.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPInvocationOperation
|
||||
@brief Represents an operation using an invocation that can be run in an CPOperationQueue
|
||||
|
||||
@@ -20,8 +20,9 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
@import "CPRunLoop.j"
|
||||
|
||||
CPJSONPConnectionCallbacks = {};
|
||||
|
||||
@@ -68,16 +69,19 @@ CPJSONPCallbackReplacementString = @"${JSONP_CALLBACK}";
|
||||
{
|
||||
self = [super init];
|
||||
|
||||
_request = aRequest;
|
||||
_delegate = aDelegate;
|
||||
if (self)
|
||||
{
|
||||
_request = aRequest;
|
||||
_delegate = aDelegate;
|
||||
|
||||
_callbackParameter = aString;
|
||||
_callbackParameter = aString;
|
||||
|
||||
if (!_callbackParameter && [[_request URL] absoluteString].indexOf(CPJSONPCallbackReplacementString) < 0)
|
||||
[CPException raise:CPInvalidArgumentException reason:@"JSONP source specified without callback parameter or CPJSONPCallbackReplacementString in URL."];
|
||||
if (!_callbackParameter && [[_request URL] absoluteString].indexOf(CPJSONPCallbackReplacementString) < 0)
|
||||
[CPException raise:CPInvalidArgumentException reason:@"JSONP source specified without callback parameter or CPJSONPCallbackReplacementString in URL."];
|
||||
|
||||
if (shouldStartImmediately)
|
||||
[self start];
|
||||
if (shouldStartImmediately)
|
||||
[self start];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPException.j"
|
||||
@import "CPNull.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPSet.j"
|
||||
|
||||
|
||||
CPUndefinedKeyException = @"CPUndefinedKeyException";
|
||||
CPTargetObjectUserInfoKey = @"CPTargetObjectUserInfoKey";
|
||||
CPUnknownUserInfoKey = @"CPUnknownUserInfoKey";
|
||||
|
||||
@@ -209,20 +209,16 @@ var _changeKindForSetMutationKind = function(mutationKind)
|
||||
{
|
||||
switch (mutationKind)
|
||||
{
|
||||
case CPKeyValueUnionSetMutation:
|
||||
return CPKeyValueChangeInsertion;
|
||||
case CPKeyValueMinusSetMutation:
|
||||
return CPKeyValueChangeRemoval;
|
||||
case CPKeyValueIntersectSetMutation:
|
||||
return CPKeyValueChangeRemoval;
|
||||
case CPKeyValueSetSetMutation:
|
||||
return CPKeyValueChangeReplacement;
|
||||
case CPKeyValueUnionSetMutation: return CPKeyValueChangeInsertion;
|
||||
case CPKeyValueMinusSetMutation: return CPKeyValueChangeRemoval;
|
||||
case CPKeyValueIntersectSetMutation: return CPKeyValueChangeRemoval;
|
||||
case CPKeyValueSetSetMutation: return CPKeyValueChangeReplacement;
|
||||
}
|
||||
}
|
||||
|
||||
var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld,
|
||||
DependentKeysKey = "$KVODEPENDENT",
|
||||
KVOProxyKey = "$KVOPROXY";
|
||||
var kvoNewAndOld = CPKeyValueObservingOptionNew | CPKeyValueObservingOptionOld,
|
||||
DependentKeysKey = "$KVODEPENDENT",
|
||||
KVOProxyKey = "$KVOPROXY";
|
||||
|
||||
//rule of thumb: _ methods are called on the real proxy object, others are called on the "fake" proxy object (aka the real object)
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
@import "CPString.j"
|
||||
@import "CPValue.j"
|
||||
|
||||
|
||||
var CPArchiverReplacementClassNames = nil;
|
||||
|
||||
var _CPKeyedArchiverDidEncodeObjectSelector = 1,
|
||||
|
||||
@@ -21,15 +21,15 @@
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPCoder.j"
|
||||
@import "CPData.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPCoder.j"
|
||||
@import "CPException.j"
|
||||
@import "CPKeyedArchiver.j"
|
||||
@import "CPNull.j"
|
||||
@import "CPNumber.j"
|
||||
@import "CPString.j"
|
||||
|
||||
|
||||
CPInvalidUnarchiveOperationException = @"CPInvalidUnarchiveOperationException";
|
||||
|
||||
var _CPKeyedUnarchiverCannotDecodeObjectOfClassNameOriginalClassesSelector = 1 << 0,
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
/*!
|
||||
@class CPNotification
|
||||
@ingroup foundation
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
@import "CPNotification.j"
|
||||
@import "CPNull.j"
|
||||
|
||||
|
||||
var CPNotificationDefaultCenter = nil;
|
||||
|
||||
/*!
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
var CPNullSharedNull = nil;
|
||||
|
||||
/*!
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
@import "CPObject.j"
|
||||
@import "CPObjJRuntime.j"
|
||||
|
||||
|
||||
var CPNumberUIDs = new CFMutableDictionary();
|
||||
|
||||
/*!
|
||||
|
||||
@@ -61,8 +61,6 @@ CPLog(@"Got some class: %@", inst);
|
||||
|
||||
@todo document KVC usage.
|
||||
*/
|
||||
|
||||
|
||||
@implementation CPObject
|
||||
{
|
||||
Class isa;
|
||||
|
||||
@@ -19,43 +19,43 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPObject.j"
|
||||
@import "CPArray.j"
|
||||
@import "CPObject.j"
|
||||
|
||||
/*!
|
||||
Operations receive very low priority for execution.
|
||||
@global
|
||||
@group CPOperationQueuePriority
|
||||
*/
|
||||
CPOperationQueuePriorityVeryLow = -8;
|
||||
CPOperationQueuePriorityVeryLow = -8;
|
||||
|
||||
/*!
|
||||
Operations receive low priority for execution.
|
||||
@global
|
||||
@group CPOperationQueuePriority
|
||||
*/
|
||||
CPOperationQueuePriorityLow = -4;
|
||||
CPOperationQueuePriorityLow = -4;
|
||||
|
||||
/*!
|
||||
Operations receive normal priority for execution.
|
||||
@global
|
||||
@group CPOperationQueuePriority
|
||||
*/
|
||||
CPOperationQueuePriorityNormal = 0;
|
||||
CPOperationQueuePriorityNormal = 0;
|
||||
|
||||
/*!
|
||||
Operations receive high priority for execution.
|
||||
@global
|
||||
@group CPOperationQueuePriority
|
||||
*/
|
||||
CPOperationQueuePriorityHigh = 4;
|
||||
CPOperationQueuePriorityHigh = 4;
|
||||
|
||||
/*!
|
||||
Operations receive very high priority for execution.
|
||||
@global
|
||||
@group CPOperationQueuePriority
|
||||
*/
|
||||
CPOperationQueuePriorityVeryHigh = 8;
|
||||
CPOperationQueuePriorityVeryHigh = 8;
|
||||
|
||||
|
||||
/*!
|
||||
@@ -83,7 +83,9 @@ CPOperationQueuePriorityVeryHigh = 8;
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (self = [super init])
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_cancelled = NO;
|
||||
_executing = NO;
|
||||
|
||||
@@ -19,10 +19,12 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPFunctionOperation.j"
|
||||
@import "CPInvocationOperation.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPOperation.j"
|
||||
@import "CPString.j"
|
||||
@import "CPTimer.j"
|
||||
|
||||
// the global queue (mainQueue)
|
||||
@@ -42,7 +44,9 @@ var cpOperationMainQueue = nil;
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (self = [super init])
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_operations = [[CPArray alloc] init];
|
||||
_suspended = NO;
|
||||
|
||||
@@ -23,18 +23,18 @@
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPNull.j"
|
||||
@import "CPString.j"
|
||||
@import "CPEnumerator.j"
|
||||
@import "CPPredicate.j"
|
||||
@import "CPExpression.j"
|
||||
@import "CPNull.j"
|
||||
@import "CPPredicate.j"
|
||||
@import "CPString.j"
|
||||
|
||||
/*!
|
||||
A predicate to directly compare the left and right hand sides.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPDirectPredicateModifier = 0;
|
||||
CPDirectPredicateModifier = 0;
|
||||
/*!
|
||||
A predicate to compare all entries in the destination of a to-many relationship.
|
||||
|
||||
@@ -42,7 +42,7 @@ CPDirectPredicateModifier = 0;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPAllPredicateModifier = 1;
|
||||
CPAllPredicateModifier = 1;
|
||||
/*!
|
||||
A predicate to match with any entry in the destination of a to-many relationship.
|
||||
|
||||
@@ -50,28 +50,28 @@ CPAllPredicateModifier = 1;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPAnyPredicateModifier = 2;
|
||||
CPAnyPredicateModifier = 2;
|
||||
|
||||
/*!
|
||||
A case-insensitive predicate.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPCaseInsensitivePredicateOption = 1;
|
||||
CPCaseInsensitivePredicateOption = 1;
|
||||
/*!
|
||||
A diacritic-insensitive predicate.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPDiacriticInsensitivePredicateOption = 2;
|
||||
CPDiacriticInsensitiveSearch = 128;
|
||||
CPDiacriticInsensitivePredicateOption = 2;
|
||||
CPDiacriticInsensitiveSearch = 128;
|
||||
|
||||
/*!
|
||||
A less-than predicate.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPLessThanPredicateOperatorType = 0;
|
||||
CPLessThanPredicateOperatorType = 0;
|
||||
/*!
|
||||
A less-than-or-equal-to predicate.
|
||||
@global
|
||||
@@ -83,7 +83,7 @@ CPLessThanOrEqualToPredicateOperatorType = 1;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPGreaterThanPredicateOperatorType = 2;
|
||||
CPGreaterThanPredicateOperatorType = 2;
|
||||
/*!
|
||||
A greater-than-or-equal-to predicate.
|
||||
@global
|
||||
@@ -95,37 +95,37 @@ CPGreaterThanOrEqualToPredicateOperatorType = 3;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPEqualToPredicateOperatorType = 4;
|
||||
CPEqualToPredicateOperatorType = 4;
|
||||
/*!
|
||||
A not-equal-to predicate.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPNotEqualToPredicateOperatorType = 5;
|
||||
CPNotEqualToPredicateOperatorType = 5;
|
||||
/*!
|
||||
A full regular expression matching predicate.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPMatchesPredicateOperatorType = 6;
|
||||
CPMatchesPredicateOperatorType = 6;
|
||||
/*!
|
||||
A simple subset of the matches predicate, similar in behavior to SQL LIKE.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPLikePredicateOperatorType = 7;
|
||||
CPLikePredicateOperatorType = 7;
|
||||
/*!
|
||||
A begins-with predicate.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPBeginsWithPredicateOperatorType = 8;
|
||||
CPBeginsWithPredicateOperatorType = 8;
|
||||
/*!
|
||||
An ends-with predicate.
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPEndsWithPredicateOperatorType = 9;
|
||||
CPEndsWithPredicateOperatorType = 9;
|
||||
/*!
|
||||
A predicate to determine if the left hand side is in the right hand side.
|
||||
|
||||
@@ -133,7 +133,7 @@ CPEndsWithPredicateOperatorType = 9;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPInPredicateOperatorType = 10;
|
||||
CPInPredicateOperatorType = 10;
|
||||
/*!
|
||||
Predicate that uses a custom selector that takes a single argument and returns a BOOL value.
|
||||
|
||||
@@ -141,7 +141,7 @@ CPInPredicateOperatorType = 10;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPCustomSelectorPredicateOperatorType = 11;
|
||||
CPCustomSelectorPredicateOperatorType = 11;
|
||||
/*!
|
||||
A predicate to determine if the left hand side contains the right hand side.
|
||||
|
||||
@@ -149,7 +149,7 @@ CPCustomSelectorPredicateOperatorType = 11;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPContainsPredicateOperatorType = 99;
|
||||
CPContainsPredicateOperatorType = 99;
|
||||
/*!
|
||||
A predicate to determine if the right hand side lies between bounds specified by the left hand side.
|
||||
|
||||
@@ -157,7 +157,7 @@ CPContainsPredicateOperatorType = 99;
|
||||
@global
|
||||
@class CPComparisonPredicate
|
||||
*/
|
||||
CPBetweenPredicateOperatorType = 100;
|
||||
CPBetweenPredicateOperatorType = 100;
|
||||
|
||||
var CPComparisonPredicateModifier,
|
||||
CPPredicateOperatorType;
|
||||
@@ -216,12 +216,17 @@ var CPComparisonPredicateModifier,
|
||||
*/
|
||||
- (id)initWithLeftExpression:(CPExpression)left rightExpression:(CPExpression)right customSelector:(SEL)selector
|
||||
{
|
||||
_left = left;
|
||||
_right = right;
|
||||
_modifier = CPDirectPredicateModifier;
|
||||
_type = CPCustomSelectorPredicateOperatorType;
|
||||
_options = 0;
|
||||
_customSelector = selector;
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_left = left;
|
||||
_right = right;
|
||||
_modifier = CPDirectPredicateModifier;
|
||||
_type = CPCustomSelectorPredicateOperatorType;
|
||||
_options = 0;
|
||||
_customSelector = selector;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -237,18 +242,23 @@ var CPComparisonPredicateModifier,
|
||||
*/
|
||||
- (id)initWithLeftExpression:(CPExpression)left rightExpression:(CPExpression)right modifier:(CPComparisonPredicateModifier)modifier type:(CPPredicateOperatorType)type options:(unsigned)options
|
||||
{
|
||||
_left = left;
|
||||
_right = right;
|
||||
_modifier = modifier;
|
||||
_type = type;
|
||||
_options = (type != CPMatchesPredicateOperatorType &&
|
||||
type != CPLikePredicateOperatorType &&
|
||||
type != CPBeginsWithPredicateOperatorType &&
|
||||
type != CPEndsWithPredicateOperatorType &&
|
||||
type != CPInPredicateOperatorType &&
|
||||
type != CPContainsPredicateOperatorType) ? 0 : options;
|
||||
self = [super init];
|
||||
|
||||
_customSelector = NULL;
|
||||
if (self)
|
||||
{
|
||||
_left = left;
|
||||
_right = right;
|
||||
_modifier = modifier;
|
||||
_type = type;
|
||||
_options = (type != CPMatchesPredicateOperatorType &&
|
||||
type != CPLikePredicateOperatorType &&
|
||||
type != CPBeginsWithPredicateOperatorType &&
|
||||
type != CPEndsWithPredicateOperatorType &&
|
||||
type != CPInPredicateOperatorType &&
|
||||
type != CPContainsPredicateOperatorType) ? 0 : options;
|
||||
|
||||
_customSelector = NULL;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -315,81 +325,63 @@ var CPComparisonPredicateModifier,
|
||||
|
||||
switch (_modifier)
|
||||
{
|
||||
case CPDirectPredicateModifier:
|
||||
modifier = "";
|
||||
break;
|
||||
case CPAllPredicateModifier:
|
||||
modifier = "ALL ";
|
||||
break;
|
||||
case CPAnyPredicateModifier:
|
||||
modifier = "ANY ";
|
||||
break;
|
||||
default:
|
||||
modifier = "";
|
||||
break;
|
||||
case CPDirectPredicateModifier: modifier = "";
|
||||
break;
|
||||
case CPAllPredicateModifier: modifier = "ALL ";
|
||||
break;
|
||||
case CPAnyPredicateModifier: modifier = "ANY ";
|
||||
break;
|
||||
|
||||
default: modifier = "";
|
||||
break;
|
||||
}
|
||||
|
||||
var options;
|
||||
|
||||
switch (_options)
|
||||
{
|
||||
case CPCaseInsensitivePredicateOption:
|
||||
options = "[c]";
|
||||
break;
|
||||
case CPDiacriticInsensitivePredicateOption:
|
||||
options = "[d]";
|
||||
break;
|
||||
case CPCaseInsensitivePredicateOption: options = "[c]";
|
||||
break;
|
||||
case CPDiacriticInsensitivePredicateOption: options = "[d]";
|
||||
break;
|
||||
case CPCaseInsensitivePredicateOption | CPDiacriticInsensitivePredicateOption:
|
||||
options = "[cd]";
|
||||
break;
|
||||
default:
|
||||
options = "";
|
||||
break;
|
||||
options = "[cd]";
|
||||
break;
|
||||
|
||||
default: options = "";
|
||||
break;
|
||||
}
|
||||
|
||||
var operator;
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
case CPLessThanPredicateOperatorType:
|
||||
operator = "<";
|
||||
break;
|
||||
case CPLessThanOrEqualToPredicateOperatorType:
|
||||
operator = "<=";
|
||||
break;
|
||||
case CPGreaterThanPredicateOperatorType:
|
||||
operator = ">";
|
||||
break;
|
||||
case CPGreaterThanOrEqualToPredicateOperatorType:
|
||||
operator = ">=";
|
||||
break;
|
||||
case CPEqualToPredicateOperatorType:
|
||||
operator = "==";
|
||||
break;
|
||||
case CPNotEqualToPredicateOperatorType:
|
||||
operator = "!=";
|
||||
break;
|
||||
case CPMatchesPredicateOperatorType:
|
||||
operator = "MATCHES";
|
||||
break;
|
||||
case CPLikePredicateOperatorType:
|
||||
operator = "LIKE";
|
||||
break;
|
||||
case CPBeginsWithPredicateOperatorType:
|
||||
operator = "BEGINSWITH";
|
||||
break;
|
||||
case CPEndsWithPredicateOperatorType:
|
||||
operator = "ENDSWITH";
|
||||
break;
|
||||
case CPInPredicateOperatorType:
|
||||
operator = "IN";
|
||||
break;
|
||||
case CPContainsPredicateOperatorType:
|
||||
operator = "CONTAINS";
|
||||
break;
|
||||
case CPCustomSelectorPredicateOperatorType:
|
||||
operator = CPStringFromSelector(_customSelector);
|
||||
break;
|
||||
case CPLessThanPredicateOperatorType: operator = "<";
|
||||
break;
|
||||
case CPLessThanOrEqualToPredicateOperatorType: operator = "<=";
|
||||
break;
|
||||
case CPGreaterThanPredicateOperatorType: operator = ">";
|
||||
break;
|
||||
case CPGreaterThanOrEqualToPredicateOperatorType: operator = ">=";
|
||||
break;
|
||||
case CPEqualToPredicateOperatorType: operator = "==";
|
||||
break;
|
||||
case CPNotEqualToPredicateOperatorType: operator = "!=";
|
||||
break;
|
||||
case CPMatchesPredicateOperatorType: operator = "MATCHES";
|
||||
break;
|
||||
case CPLikePredicateOperatorType: operator = "LIKE";
|
||||
break;
|
||||
case CPBeginsWithPredicateOperatorType: operator = "BEGINSWITH";
|
||||
break;
|
||||
case CPEndsWithPredicateOperatorType: operator = "ENDSWITH";
|
||||
break;
|
||||
case CPInPredicateOperatorType: operator = "IN";
|
||||
break;
|
||||
case CPContainsPredicateOperatorType: operator = "CONTAINS";
|
||||
break;
|
||||
case CPCustomSelectorPredicateOperatorType: operator = CPStringFromSelector(_customSelector);
|
||||
break;
|
||||
}
|
||||
|
||||
return [CPString stringWithFormat:@"%s%s %s%s %s",modifier,[_left description],operator,options,[_right description]];
|
||||
@@ -422,76 +414,66 @@ var CPComparisonPredicateModifier,
|
||||
// left and right should be casted first [CAST()] following 10.5 rules.
|
||||
switch (_type)
|
||||
{
|
||||
case CPLessThanPredicateOperatorType:
|
||||
return ([lhs compare:rhs] == CPOrderedAscending);
|
||||
case CPLessThanOrEqualToPredicateOperatorType:
|
||||
return ([lhs compare:rhs] != CPOrderedDescending);
|
||||
case CPGreaterThanPredicateOperatorType:
|
||||
return ([lhs compare:rhs] == CPOrderedDescending);
|
||||
case CPGreaterThanOrEqualToPredicateOperatorType:
|
||||
return ([lhs compare:rhs] != CPOrderedAscending);
|
||||
case CPEqualToPredicateOperatorType:
|
||||
return [lhs isEqual:rhs];
|
||||
case CPNotEqualToPredicateOperatorType:
|
||||
return (![lhs isEqual:rhs]);
|
||||
case CPMatchesPredicateOperatorType:
|
||||
var commut = (_options & CPCaseInsensitivePredicateOption) ? "gi":"g";
|
||||
if (_options & CPDiacriticInsensitivePredicateOption)
|
||||
{
|
||||
lhs = lhs.stripDiacritics();
|
||||
rhs = rhs.stripDiacritics();
|
||||
}
|
||||
case CPLessThanPredicateOperatorType: return ([lhs compare:rhs] == CPOrderedAscending);
|
||||
case CPLessThanOrEqualToPredicateOperatorType: return ([lhs compare:rhs] != CPOrderedDescending);
|
||||
case CPGreaterThanPredicateOperatorType: return ([lhs compare:rhs] == CPOrderedDescending);
|
||||
case CPGreaterThanOrEqualToPredicateOperatorType: return ([lhs compare:rhs] != CPOrderedAscending);
|
||||
case CPEqualToPredicateOperatorType: return [lhs isEqual:rhs];
|
||||
case CPNotEqualToPredicateOperatorType: return (![lhs isEqual:rhs]);
|
||||
|
||||
return (new RegExp(rhs,commut)).test(lhs);
|
||||
case CPLikePredicateOperatorType:
|
||||
if (_options & CPDiacriticInsensitivePredicateOption)
|
||||
{
|
||||
lhs = lhs.stripDiacritics();
|
||||
rhs = rhs.stripDiacritics();
|
||||
}
|
||||
var commut = (_options & CPCaseInsensitivePredicateOption) ? "gi":"g",
|
||||
reg = new RegExp(rhs.escapeForRegExp(),commut);
|
||||
return reg.test(lhs);
|
||||
case CPBeginsWithPredicateOperatorType:
|
||||
var range = CPMakeRange(0,[rhs length]);
|
||||
if (_options & CPCaseInsensitivePredicateOption) string_compare_options |= CPCaseInsensitiveSearch;
|
||||
if (_options & CPDiacriticInsensitivePredicateOption) string_compare_options |= CPDiacriticInsensitiveSearch;
|
||||
case CPMatchesPredicateOperatorType: var commut = (_options & CPCaseInsensitivePredicateOption) ? "gi":"g";
|
||||
if (_options & CPDiacriticInsensitivePredicateOption)
|
||||
{
|
||||
lhs = lhs.stripDiacritics();
|
||||
rhs = rhs.stripDiacritics();
|
||||
}
|
||||
return (new RegExp(rhs,commut)).test(lhs);
|
||||
|
||||
return ([lhs compare:rhs options:string_compare_options range:range] == CPOrderedSame);
|
||||
case CPEndsWithPredicateOperatorType:
|
||||
var range = CPMakeRange([lhs length] - [rhs length],[rhs length]);
|
||||
if (_options & CPCaseInsensitivePredicateOption) string_compare_options |= CPCaseInsensitiveSearch;
|
||||
if (_options & CPDiacriticInsensitivePredicateOption) string_compare_options |= CPDiacriticInsensitiveSearch;
|
||||
case CPLikePredicateOperatorType: if (_options & CPDiacriticInsensitivePredicateOption)
|
||||
{
|
||||
lhs = lhs.stripDiacritics();
|
||||
rhs = rhs.stripDiacritics();
|
||||
}
|
||||
var commut = (_options & CPCaseInsensitivePredicateOption) ? "gi":"g",
|
||||
reg = new RegExp(rhs.escapeForRegExp(),commut);
|
||||
return reg.test(lhs);
|
||||
|
||||
return ([lhs compare:rhs options:string_compare_options range:range] == CPOrderedSame);
|
||||
case CPCustomSelectorPredicateOperatorType:
|
||||
return [lhs performSelector:_customSelector withObject:rhs];
|
||||
case CPInPredicateOperatorType:
|
||||
var a = lhs; // swap
|
||||
lhs = rhs;
|
||||
rhs = a;
|
||||
case CPContainsPredicateOperatorType:
|
||||
if (![lhs isKindOfClass:[CPString class]])
|
||||
{
|
||||
if (![lhs respondsToSelector: @selector(objectEnumerator)])
|
||||
[CPException raise:CPInvalidArgumentException reason:@"The left/right hand side for a CONTAINS/IN operator must be a collection or a string"];
|
||||
case CPBeginsWithPredicateOperatorType: var range = CPMakeRange(0,[rhs length]);
|
||||
if (_options & CPCaseInsensitivePredicateOption) string_compare_options |= CPCaseInsensitiveSearch;
|
||||
if (_options & CPDiacriticInsensitivePredicateOption) string_compare_options |= CPDiacriticInsensitiveSearch;
|
||||
return ([lhs compare:rhs options:string_compare_options range:range] == CPOrderedSame);
|
||||
|
||||
return [lhs containsObject:rhs];
|
||||
}
|
||||
case CPEndsWithPredicateOperatorType: var range = CPMakeRange([lhs length] - [rhs length],[rhs length]);
|
||||
if (_options & CPCaseInsensitivePredicateOption) string_compare_options |= CPCaseInsensitiveSearch;
|
||||
if (_options & CPDiacriticInsensitivePredicateOption) string_compare_options |= CPDiacriticInsensitiveSearch;
|
||||
return ([lhs compare:rhs options:string_compare_options range:range] == CPOrderedSame);
|
||||
|
||||
if (_options & CPCaseInsensitivePredicateOption)
|
||||
string_compare_options |= CPCaseInsensitiveSearch;
|
||||
if (_options & CPDiacriticInsensitivePredicateOption)
|
||||
string_compare_options |= CPDiacriticInsensitiveSearch;
|
||||
case CPCustomSelectorPredicateOperatorType: return [lhs performSelector:_customSelector withObject:rhs];
|
||||
|
||||
return ([lhs rangeOfString:rhs options:string_compare_options].location != CPNotFound);
|
||||
case CPBetweenPredicateOperatorType:
|
||||
if ([rhs count] < 2)
|
||||
[CPException raise:CPInvalidArgumentException reason:@"The right hand side for a BETWEEN operator must contain 2 objects"];
|
||||
case CPInPredicateOperatorType: var a = lhs; // swap
|
||||
lhs = rhs;
|
||||
rhs = a;
|
||||
case CPContainsPredicateOperatorType: if (![lhs isKindOfClass:[CPString class]])
|
||||
{
|
||||
if (![lhs respondsToSelector: @selector(objectEnumerator)])
|
||||
[CPException raise:CPInvalidArgumentException reason:@"The left/right hand side for a CONTAINS/IN operator must be a collection or a string"];
|
||||
|
||||
return ([lhs compare:rhs[0]] == CPOrderedDescending && [lhs compare:rhs[1]] == CPOrderedAscending);
|
||||
default:
|
||||
return NO;
|
||||
return [lhs containsObject:rhs];
|
||||
}
|
||||
|
||||
if (_options & CPCaseInsensitivePredicateOption)
|
||||
string_compare_options |= CPCaseInsensitiveSearch;
|
||||
if (_options & CPDiacriticInsensitivePredicateOption)
|
||||
string_compare_options |= CPDiacriticInsensitiveSearch;
|
||||
|
||||
return ([lhs rangeOfString:rhs options:string_compare_options].location != CPNotFound);
|
||||
|
||||
case CPBetweenPredicateOperatorType: if ([rhs count] < 2)
|
||||
[CPException raise:CPInvalidArgumentException reason:@"The right hand side for a BETWEEN operator must contain 2 objects"];
|
||||
|
||||
return ([lhs compare:rhs[0]] == CPOrderedDescending && [lhs compare:rhs[1]] == CPOrderedAscending);
|
||||
|
||||
default: return NO;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -564,8 +546,10 @@ var source = ['*','?','(',')','{','}','.','+','|','/','$','^'],
|
||||
|
||||
String.prototype.escapeForRegExp = function()
|
||||
{
|
||||
var foundChar = false;
|
||||
for (var i = 0; i < source.length; ++i)
|
||||
var foundChar = false,
|
||||
i = 0;
|
||||
|
||||
for (; i < source.length; ++i)
|
||||
{
|
||||
if (this.indexOf(source[i]) !== -1)
|
||||
{
|
||||
@@ -577,9 +561,9 @@ String.prototype.escapeForRegExp = function()
|
||||
if (!foundChar)
|
||||
return this;
|
||||
|
||||
var result = "",
|
||||
sourceIndex;
|
||||
for (var i = 0; i < this.length; ++i)
|
||||
var result = "";
|
||||
|
||||
for (i = 0; i < this.length; ++i)
|
||||
{
|
||||
var sourceIndex = source.indexOf(this.charAt(i));
|
||||
if (sourceIndex !== -1)
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPPredicate.j"
|
||||
|
||||
/*!
|
||||
@@ -68,8 +69,13 @@ var CPCompoundPredicateType;
|
||||
*/
|
||||
- (id)initWithType:(CPCompoundPredicateType)type subpredicates:(CPArray)predicates
|
||||
{
|
||||
_type = type;
|
||||
_predicates = predicates;
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_type = type;
|
||||
_predicates = predicates;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -126,10 +132,10 @@ var CPCompoundPredicateType;
|
||||
- (CPPredicate)predicateWithSubstitutionVariables:(CPDictionary)variables
|
||||
{
|
||||
var subp = [CPArray array],
|
||||
count = [subp count];
|
||||
i;
|
||||
count = [subp count],
|
||||
i = 0;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
{
|
||||
var p = [subp objectAtIndex:i],
|
||||
sp = [p predicateWithSubstitutionVariables:variables];
|
||||
@@ -145,12 +151,12 @@ var CPCompoundPredicateType;
|
||||
var result = "",
|
||||
args = [CPArray array],
|
||||
count = [_predicates count],
|
||||
i;
|
||||
i = 0;
|
||||
|
||||
if (count == 0)
|
||||
return @"TRUPREDICATE";
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
{
|
||||
var subpredicate = [_predicates objectAtIndex:i],
|
||||
precedence = [subpredicate predicateFormat];
|
||||
@@ -164,21 +170,20 @@ var CPCompoundPredicateType;
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
case CPNotPredicateType:
|
||||
result += "NOT %s" + [args objectAtIndex:0];
|
||||
break;
|
||||
case CPAndPredicateType:
|
||||
result += [args objectAtIndex:0];
|
||||
var count = [args count];
|
||||
for (var j = 1; j < count; j++)
|
||||
result += " AND " + [args objectAtIndex:j];
|
||||
break;
|
||||
case CPOrPredicateType:
|
||||
result += [args objectAtIndex:0];
|
||||
var count = [args count];
|
||||
for (var j = 1; j < count; j++)
|
||||
result += " OR " + [args objectAtIndex:j];
|
||||
break;
|
||||
case CPNotPredicateType: result += "NOT %s" + [args objectAtIndex:0];
|
||||
break;
|
||||
|
||||
case CPAndPredicateType: result += [args objectAtIndex:0];
|
||||
var count = [args count];
|
||||
for (var j = 1; j < count; j++)
|
||||
result += " AND " + [args objectAtIndex:j];
|
||||
break;
|
||||
|
||||
case CPOrPredicateType: result += [args objectAtIndex:0];
|
||||
var count = [args count];
|
||||
for (var j = 1; j < count; j++)
|
||||
result += " OR " + [args objectAtIndex:j];
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -193,31 +198,30 @@ var CPCompoundPredicateType;
|
||||
{
|
||||
var result = NO,
|
||||
count = [_predicates count],
|
||||
i;
|
||||
i = 0;
|
||||
|
||||
if (count == 0)
|
||||
return YES;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
{
|
||||
var predicate = [_predicates objectAtIndex:i];
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
case CPNotPredicateType:
|
||||
return ![predicate evaluateWithObject:object substitutionVariables:variables];
|
||||
case CPAndPredicateType:
|
||||
if (i == 0)
|
||||
result = [predicate evaluateWithObject:object substitutionVariables:variables];
|
||||
else
|
||||
result = result && [predicate evaluateWithObject:object substitutionVariables:variables];
|
||||
if (!result)
|
||||
return NO;
|
||||
break;
|
||||
case CPOrPredicateType:
|
||||
if ([predicate evaluateWithObject:object substitutionVariables:variables])
|
||||
return YES;
|
||||
break;
|
||||
case CPNotPredicateType: return ![predicate evaluateWithObject:object substitutionVariables:variables];
|
||||
|
||||
case CPAndPredicateType: if (i == 0)
|
||||
result = [predicate evaluateWithObject:object substitutionVariables:variables];
|
||||
else
|
||||
result = result && [predicate evaluateWithObject:object substitutionVariables:variables];
|
||||
if (!result)
|
||||
return NO;
|
||||
break;
|
||||
|
||||
case CPOrPredicateType: if ([predicate evaluateWithObject:object substitutionVariables:variables])
|
||||
return YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,15 +19,16 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPString.j"
|
||||
@import "CPArray.j"
|
||||
@import "CPKeyValueCoding.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPKeyValueCoding.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPString.j"
|
||||
|
||||
/*!
|
||||
An expression that always returns the same value.
|
||||
*/
|
||||
CPConstantValueExpressionType = 0;
|
||||
CPConstantValueExpressionType = 0;
|
||||
/*!
|
||||
An expression that always returns the parameter object itself.
|
||||
*/
|
||||
@@ -35,35 +36,35 @@ CPEvaluatedObjectExpressionType = 1;
|
||||
/*!
|
||||
An expression that always returns whatever value is associated with the key specified by ‘variable’ in the bindings dictionary.
|
||||
*/
|
||||
CPVariableExpressionType = 2;
|
||||
CPVariableExpressionType = 2;
|
||||
/*!
|
||||
An expression that returns something that can be used as a key path.
|
||||
*/
|
||||
CPKeyPathExpressionType = 3;
|
||||
CPKeyPathExpressionType = 3;
|
||||
/*!
|
||||
An expression that returns the result of evaluating a function.
|
||||
*/
|
||||
CPFunctionExpressionType = 4;
|
||||
CPFunctionExpressionType = 4;
|
||||
/*!
|
||||
An expression that defines an aggregate of CPExpression objects.
|
||||
*/
|
||||
CPAggregateExpressionType = 5;
|
||||
CPAggregateExpressionType = 5;
|
||||
/*!
|
||||
An expression that filters a collection using a subpredicate.
|
||||
*/
|
||||
CPSubqueryExpressionType = 6;
|
||||
CPSubqueryExpressionType = 6;
|
||||
/*!
|
||||
An expression that creates a union of the results of two nested expressions.
|
||||
*/
|
||||
CPUnionSetExpressionType = 7;
|
||||
CPUnionSetExpressionType = 7;
|
||||
/*!
|
||||
An expression that creates an intersection of the results of two nested expressions.
|
||||
*/
|
||||
CPIntersectSetExpressionType = 8;
|
||||
CPIntersectSetExpressionType = 8;
|
||||
/*!
|
||||
An expression that combines two nested expression results by set subtraction.
|
||||
*/
|
||||
CPMinusSetExpressionType = 9;
|
||||
CPMinusSetExpressionType = 9;
|
||||
|
||||
/*!
|
||||
@ingroup foundation
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPExpression.j"
|
||||
@import "CPArray.j"
|
||||
@import "CPExpression.j"
|
||||
@import "CPString.j"
|
||||
|
||||
@implementation CPExpression_aggregate : CPExpression
|
||||
@@ -30,8 +30,10 @@
|
||||
|
||||
- (id)initWithAggregate:(CPArray)collection
|
||||
{
|
||||
[super initWithExpressionType:CPAggregateExpressionType];
|
||||
_aggregate = collection;
|
||||
self = [super initWithExpressionType:CPAggregateExpressionType];
|
||||
|
||||
if (self)
|
||||
_aggregate = collection;
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -68,11 +70,11 @@
|
||||
|
||||
- (CPString)description
|
||||
{
|
||||
var i,
|
||||
var i = 0,
|
||||
count = [_aggregate count],
|
||||
result = "{";
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
result = result + [CPString stringWithFormat:@"%s%s", [[_aggregate objectAtIndex:i] description], (i + 1 < count) ? @", " : @""];
|
||||
|
||||
result = result + "}";
|
||||
@@ -84,9 +86,9 @@
|
||||
{
|
||||
var subst_array = [CPArray array],
|
||||
count = [_aggregate count],
|
||||
i;
|
||||
i = 0;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
[subst_array addObject:[[_aggregate objectAtIndex:i] _expressionWithSubstitutionVariables:variables]];
|
||||
|
||||
return [CPExpression expressionForAggregate:subst_array];
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPExpression.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPExpression.j"
|
||||
|
||||
@implementation CPExpression_constant : CPExpression
|
||||
{
|
||||
@@ -32,8 +32,10 @@
|
||||
|
||||
- (id)initWithValue:(id)value
|
||||
{
|
||||
[super initWithExpressionType:CPConstantValueExpressionType];
|
||||
_value = value;
|
||||
self = [super initWithExpressionType:CPConstantValueExpressionType];
|
||||
|
||||
if (self)
|
||||
_value = value;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -19,11 +19,12 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPDate.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPException.j"
|
||||
@import "CPExpression.j"
|
||||
@import "CPString.j"
|
||||
@import "CPArray.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPDate.j"
|
||||
|
||||
@implementation CPExpression_function : CPExpression
|
||||
{
|
||||
@@ -51,16 +52,18 @@
|
||||
|
||||
- (id)initWithTarget:(CPExpression)operand selector:(SEL)aSelector arguments:(CPArray)parameters type:(int)type
|
||||
{
|
||||
[super initWithExpressionType:type];
|
||||
|
||||
// Cocoa doc: "This method throws an exception immediately if the selector is unknown"
|
||||
// but operand's value (the target) may be resolved only at runtime.
|
||||
_selector = aSelector;
|
||||
_operand = operand;
|
||||
_arguments = parameters;
|
||||
_argc = [parameters count];
|
||||
_maxargs = [[CPStringFromSelector(_selector) componentsSeparatedByString:@":"] count] - 1;
|
||||
self = [super initWithExpressionType:type];
|
||||
|
||||
if (self)
|
||||
{
|
||||
// Cocoa doc: "This method throws an exception immediately if the selector is unknown"
|
||||
// but operand's value (the target) may be resolved only at runtime.
|
||||
_selector = aSelector;
|
||||
_operand = operand;
|
||||
_arguments = parameters;
|
||||
_argc = [parameters count];
|
||||
_maxargs = [[CPStringFromSelector(_selector) componentsSeparatedByString:@":"] count] - 1;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -99,9 +102,9 @@
|
||||
{
|
||||
var target = [_operand expressionValueWithObject:object context:context],
|
||||
objj_args = [target, _selector],
|
||||
i;
|
||||
i = 0;
|
||||
|
||||
for (i = 0; i < _argc; i++)
|
||||
for (; i < _argc; i++)
|
||||
{
|
||||
var arg = [_arguments[i] expressionValueWithObject:object context:context];
|
||||
objj_args.push(arg);
|
||||
@@ -140,9 +143,10 @@
|
||||
- (CPExpression)_expressionWithSubstitutionVariables:(CPDictionary)variables
|
||||
{
|
||||
var operand = [[self operand] _expressionWithSubstitutionVariables:variables],
|
||||
args = [CPArray array];
|
||||
args = [CPArray array],
|
||||
i = 0;
|
||||
|
||||
for (var i = 0; i < _argc; i++)
|
||||
for (; i < _argc; i++)
|
||||
[args addObject:[_arguments[i] _expressionWithSubstitutionVariables:variables]];
|
||||
|
||||
return [CPExpression expressionForFunction:operand selectorName:[self _function] arguments:args];
|
||||
@@ -150,9 +154,9 @@
|
||||
|
||||
@end
|
||||
|
||||
var CPSelectorNameKey = @"CPSelectorName",
|
||||
CPArgumentsKey = @"CPArguments",
|
||||
CPOperandKey = @"CPOperand",
|
||||
var CPSelectorNameKey = @"CPSelectorName",
|
||||
CPArgumentsKey = @"CPArguments",
|
||||
CPOperandKey = @"CPOperand",
|
||||
CPExpressionTypeKey = @"CPExpressionType";
|
||||
|
||||
@implementation CPExpression_function (CPCoding)
|
||||
@@ -304,4 +308,3 @@ var CPSelectorNameKey = @"CPSelectorName",
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
|
||||
@import "CPExpression.j"
|
||||
@import "CPExpression_function.j"
|
||||
@import "CPString.j"
|
||||
@import "CPKeyValueCoding.j"
|
||||
@import "CPString.j"
|
||||
|
||||
@implementation CPExpression_keypath : CPExpression_function
|
||||
{
|
||||
|
||||
@@ -19,11 +19,12 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPDictionary.j"
|
||||
@import "CPExpression.j"
|
||||
@import "CPString.j"
|
||||
@import "CPDictionary.j"
|
||||
|
||||
var evaluatedObject = nil;
|
||||
|
||||
@implementation CPExpression_self : CPExpression
|
||||
{
|
||||
}
|
||||
@@ -38,7 +39,7 @@ var evaluatedObject = nil;
|
||||
|
||||
- (id)init
|
||||
{
|
||||
[super initWithExpressionType:CPEvaluatedObjectExpressionType];
|
||||
self = [super initWithExpressionType:CPEvaluatedObjectExpressionType];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,9 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPException.j"
|
||||
@import "CPExpression.j"
|
||||
@import "CPSet.j"
|
||||
|
||||
@implementation CPExpression_set : CPExpression
|
||||
{
|
||||
@@ -29,9 +31,13 @@
|
||||
|
||||
- (id)initWithType:(int)type left:(CPExpression)left right:(CPExpression)right
|
||||
{
|
||||
[super initWithExpressionType:type];
|
||||
_left = left;
|
||||
_right = right;
|
||||
self = [super initWithExpressionType:type];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_left = left;
|
||||
_right = right;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
@@ -65,11 +71,11 @@
|
||||
switch (_type)
|
||||
{
|
||||
case CPIntersectSetExpressionType : [result intersectSet:right];
|
||||
break;
|
||||
break;
|
||||
case CPUnionSetExpressionType : [result unionSet:right];
|
||||
break;
|
||||
break;
|
||||
case CPMinusSetExpressionType : [result minusSet:right];
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
@@ -98,11 +104,11 @@
|
||||
switch (_type)
|
||||
{
|
||||
case CPIntersectSetExpressionType : desc = @" INTERSECT ";
|
||||
break;
|
||||
case CPUnionSetExpressionType : desc = @" UNION ";
|
||||
break;
|
||||
case CPMinusSetExpressionType : desc = @" MINUS ";
|
||||
break;
|
||||
break;
|
||||
case CPUnionSetExpressionType : desc = @" UNION ";
|
||||
break;
|
||||
case CPMinusSetExpressionType : desc = @" MINUS ";
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
@@ -111,9 +117,9 @@
|
||||
|
||||
@end
|
||||
|
||||
var CPLeftExpressionKey = @"CPLeftExpression",
|
||||
CPRightExpressionKey = @"CPRightExpression",
|
||||
CPExpressionType = @"CPExpressionType";
|
||||
var CPLeftExpressionKey = @"CPLeftExpression",
|
||||
CPRightExpressionKey = @"CPRightExpression",
|
||||
CPExpressionType = @"CPExpressionType";
|
||||
|
||||
@implementation CPExpression_set (CPCoding)
|
||||
|
||||
|
||||
@@ -19,7 +19,10 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPExpression.j"
|
||||
@import "CPPredicate.j"
|
||||
|
||||
@implementation CPExpression_subquery : CPExpression
|
||||
{
|
||||
@@ -36,12 +39,14 @@
|
||||
|
||||
- (id)initWithExpression:(CPExpression)collection usingIteratorExpression:(CPExpression)variableExpression predicate:(CPPredicate)subpredicate
|
||||
{
|
||||
[super initWithExpressionType:CPSubqueryExpressionType];
|
||||
|
||||
_subpredicate = subpredicate;
|
||||
_collection = collection;
|
||||
_variableExpression = variableExpression;
|
||||
self = [super initWithExpressionType:CPSubqueryExpressionType];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_subpredicate = subpredicate;
|
||||
_collection = collection;
|
||||
_variableExpression = variableExpression;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -50,10 +55,10 @@
|
||||
var collection = [_collection expressionValueWithObject:object context:context],
|
||||
count = [collection count],
|
||||
result = [CPArray array],
|
||||
bindings = [CPDictionary dictionaryWithObject:[CPExpression expressionForEvaluatedObject] forKey:[self variable]],
|
||||
i = 0;
|
||||
|
||||
bindings = [CPDictionary dictionaryWithObject:[CPExpression expressionForEvaluatedObject] forKey:[self variable]];
|
||||
|
||||
for (var i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
{
|
||||
var item = [collection objectAtIndex:i];
|
||||
if ([_subpredicate evaluateWithObject:item substitutionVariables:bindings])
|
||||
@@ -110,9 +115,9 @@
|
||||
}
|
||||
@end
|
||||
|
||||
var CPExpressionKey = @"CPExpression",
|
||||
CPSubpredicateKey = @"CPSubpredicate",
|
||||
CPVariableKey = @"CPVariable";
|
||||
var CPExpressionKey = @"CPExpression",
|
||||
CPSubpredicateKey = @"CPSubpredicate",
|
||||
CPVariableKey = @"CPVariable";
|
||||
|
||||
@implementation CPExpression_subquery (CPCoding)
|
||||
|
||||
|
||||
@@ -22,9 +22,10 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPDictionary.j"
|
||||
@import "CPException.j"
|
||||
@import "CPExpression.j"
|
||||
@import "CPString.j"
|
||||
@import "CPDictionary.j"
|
||||
|
||||
@implementation CPExpression_variable : CPExpression
|
||||
{
|
||||
@@ -33,9 +34,12 @@
|
||||
|
||||
- (id)initWithVariable:(CPString)variable
|
||||
{
|
||||
[super initWithExpressionType:CPVariableExpressionType];
|
||||
_variable = [variable copy];
|
||||
self = [super initWithExpressionType:CPVariableExpressionType];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_variable = [variable copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,13 @@
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPSet.j"
|
||||
@import "CPException.j"
|
||||
@import "CPNull.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPScanner.j"
|
||||
@import "CPSet.j"
|
||||
@import "CPValue.j"
|
||||
@import "CPCharacterSet.j"
|
||||
|
||||
/*!
|
||||
@ingroup foundation
|
||||
@@ -187,9 +190,9 @@
|
||||
{
|
||||
var count = [self count],
|
||||
result = [CPArray array],
|
||||
i;
|
||||
i = 0;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
{
|
||||
var object = self[i];
|
||||
if ([predicate evaluateWithObject:object])
|
||||
@@ -218,9 +221,9 @@
|
||||
{
|
||||
var count = [self count],
|
||||
result = [CPSet set],
|
||||
i;
|
||||
i = 0;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
for (; i < count; i++)
|
||||
{
|
||||
var object = [self objectAtIndex:i];
|
||||
|
||||
@@ -263,8 +266,9 @@ function(newValue)\
|
||||
|
||||
- (id)initWithString:(CPString)format args:(CPArray)args
|
||||
{
|
||||
self = [super initWithString:format];
|
||||
if (self != nil)
|
||||
self = [super initWithString:format]
|
||||
|
||||
if (self)
|
||||
{
|
||||
_args = [args objectEnumerator];
|
||||
}
|
||||
@@ -278,8 +282,7 @@ function(newValue)\
|
||||
|
||||
- (BOOL)scanPredicateKeyword:(CPString)key
|
||||
{
|
||||
var loc = [self scanLocation],
|
||||
c;
|
||||
var loc = [self scanLocation];
|
||||
|
||||
[self setCaseSensitive:NO];
|
||||
if (![self scanString:key intoString:NULL])
|
||||
@@ -288,7 +291,7 @@ function(newValue)\
|
||||
if ([self isAtEnd])
|
||||
return YES;
|
||||
|
||||
c = [[self string] characterAtIndex:[self scanLocation]];
|
||||
var c = [[self string] characterAtIndex:[self scanLocation]];
|
||||
if (![[CPCharacterSet alphanumericCharacterSet] characterIsMember:c])
|
||||
return YES;
|
||||
|
||||
@@ -308,7 +311,7 @@ function(newValue)\
|
||||
}
|
||||
catch(error)
|
||||
{
|
||||
CPLogConsole(@"Unable to parse predicate '"+[self string]+"' with " + error);
|
||||
CPLogConsole(@"Unable to parse predicate '" + [self string] + "' with " + error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
|
||||
@import "CPObject.j"
|
||||
|
||||
|
||||
CPPropertyListUnknownFormat = 0;
|
||||
CPPropertyListOpenStepFormat = kCFPropertyListOpenStepFormat;
|
||||
CPPropertyListXMLFormat_v1_0 = kCFPropertyListXMLFormat_v1_0;
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
|
||||
@import "CPException.j"
|
||||
@import "CPInvocation.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPString.j"
|
||||
|
||||
|
||||
@implementation CPProxy
|
||||
{
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
@import "CPArray.j"
|
||||
@import "CPDate.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPString.j"
|
||||
|
||||
|
||||
+17
-8
@@ -20,7 +20,9 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import <Foundation/CPCharacterSet.j>
|
||||
@import "CPCharacterSet.j"
|
||||
@import "CPDictionary.j"
|
||||
@import "CPString.j"
|
||||
|
||||
@implementation CPScanner : CPObject
|
||||
{
|
||||
@@ -276,6 +278,7 @@
|
||||
var current = [self scanLocation],
|
||||
str = [self string],
|
||||
captured = nil;
|
||||
|
||||
while (current < str.length)
|
||||
{
|
||||
var currentStr = str.substr(current, s.length);
|
||||
@@ -307,16 +310,18 @@
|
||||
- (float)scanFloat
|
||||
{
|
||||
[self _movePastCharactersToBeSkipped];
|
||||
var str = [self string], current = [self scanLocation];
|
||||
var str = [self string],
|
||||
current = [self scanLocation];
|
||||
|
||||
if ([self isAtEnd])
|
||||
return 0;
|
||||
|
||||
var s = str.substring(current, str.length),
|
||||
f = parseFloat(s); // wont work with non . decimal separator !!
|
||||
|
||||
if (f)
|
||||
{
|
||||
var pos,
|
||||
var pos = current,
|
||||
foundDash = NO;
|
||||
/*
|
||||
var decimalSeparatorString;
|
||||
@@ -329,7 +334,7 @@
|
||||
*/
|
||||
var separatorCode = 45;
|
||||
|
||||
for (pos = current; pos < current + str.length; pos++)
|
||||
for (; pos < current + str.length; pos++)
|
||||
{
|
||||
var charCode = str.charCodeAt(pos);
|
||||
if (charCode == separatorCode)
|
||||
@@ -352,17 +357,21 @@
|
||||
- (int)scanInt
|
||||
{
|
||||
[self _movePastCharactersToBeSkipped];
|
||||
var str = [self string], current = [self scanLocation];
|
||||
var str = [self string],
|
||||
current = [self scanLocation];
|
||||
|
||||
if ([self isAtEnd])
|
||||
return 0;
|
||||
|
||||
var s = str.substring(current, str.length),
|
||||
i = parseInt(s);
|
||||
|
||||
if (i)
|
||||
{
|
||||
var pos,
|
||||
var pos = current,
|
||||
foundDash = NO;
|
||||
for (pos = current; pos < current + str.length; pos++)
|
||||
|
||||
for (; pos < current + str.length; pos++)
|
||||
{
|
||||
var charCode = str.charCodeAt(pos);
|
||||
if (charCode == 46)
|
||||
@@ -406,4 +415,4 @@
|
||||
return [super description] + " {" + CPStringFromClass([self class]) + ", state = '" + ([self string].substr(0, _scanLocation) + "{{ SCAN LOCATION ->}}" + [self string].substr(_scanLocation)) + "'; }";
|
||||
}
|
||||
|
||||
@end
|
||||
@end
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
@import "CPException.j"
|
||||
@import "CPObject.j"
|
||||
@import "CPSet.j"
|
||||
|
||||
@implementation CPObject (CPSetKVO)
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
@import "CPObjJRuntime.j"
|
||||
@import "CPRange.j"
|
||||
@import "CPSortDescriptor.j"
|
||||
@import "CPURL.j"
|
||||
@import "CPValue.j"
|
||||
|
||||
/*!
|
||||
|
||||
Reference in New Issue
Block a user