Compare commits

...
30 Commits
Author SHA1 Message Date
Paul Baumgart 4458884048 Fallback to wget if curl isn't installed. 2011-01-19 20:28:49 -08:00
Paul Baumgart 7245fb99a6 Check to make sure SSL is working in tusk and advise on how to fix it otherwise. 2011-01-19 20:27:16 -08:00
Paul BaumgartandPaul Baumgart 5d27661354 Update check_build_environment in bootstrap
Newer versions of OpenJDK can handle running Narwhal.
It seems the problem is fixed in versions of OpenJDK 6 >= b18.
This commit checks for a sufficiently recent version of
OpenJDK and only prints an error/exits if the OpenJDK
version is older than 6b18.
2011-01-19 20:26:28 -08:00
Francisco Ryan Tolmasky I b33b2df778 Merge branch 'master' of github.com:280north/cappuccino 2011-01-19 19:30:46 -08:00
Francisco Ryan Tolmasky I d2f27408a5 Additional fix for archived CPPopUpButtons, and backwards compatibility support for old archives/cibs.
Reviewed by me.
2011-01-19 19:29:39 -08:00
Randall Luecke 66a87c472b Remove old resources from the old CPTabView. 2011-01-19 11:15:31 -05:00
Francisco Ryan Tolmasky I 688aed72cb Fix for CPPopUpButton's encoded prior to CPResponder/menu change.
Reviewed by me.
2011-01-18 23:09:43 -08:00
Francisco Ryan Tolmasky I 6310733881 Fix for menu bar color being reset (+ [CPMenu initialize] didn't check the class).
Reviewed by me.
2011-01-18 13:59:57 -08:00
Francisco Ryan Tolmasky I 3fe505b8e5 Merge branch 'master' of github.com:280north/cappuccino 2011-01-18 13:26:14 -08:00
Francisco Ryan Tolmasky I 00915083d4 Quick fix for initWithCapacity: not working on CPMutableArray.
Reviewed by me.
2011-01-18 13:25:43 -08:00
Klaas Pieter Annema 4e1ecbef72 Merge branch 'CPTextField-InterpretKeyEvents' of https://github.com/luuse/cappuccino into luuse-CPTextField-InterpretKeyEvents
Conflicts:
	AppKit/CPSearchField.j
	AppKit/CPTextField.j
2011-01-18 10:07:16 +01:00
Klaas Pieter Annema e4f6214005 Merge branch 'imports' of https://github.com/stevegeek/cappuccino into stevegeek-imports 2011-01-18 09:52:40 +01:00
Klaas Pieter Annema ed98a44116 detect sort descriptors when table column is added 2011-01-18 09:29:29 +01:00
Klaas Pieter Annema 50d36e76ac reverse set sort descriptors in CPTableView 2011-01-18 09:29:28 +01:00
Randall Luecke 818bf475f2 New gradient color to match aristo better. 2011-01-17 23:30:29 -05:00
Randall Luecke 47afb96c4c Drawing fixes for the tableview gradient. 2011-01-17 23:30:04 -05:00
Randall Luecke 467dc3c2d5 OutlineView docs. 2011-01-17 20:13:54 -05:00
Randall Luecke 7e3079add6 Magic enable to outlineview variable item height 2011-01-17 20:07:15 -05:00
Stephen Ierodiaconou 37323b811c Merge branch 'master' of git://github.com/280north/cappuccino into imports
Conflicts:
	Foundation/CPDecimalNumber.j
	Foundation/CPPredicate/CPComparisonPredicate.j
	Foundation/CPPredicate/CPCompoundPredicate.j
	Foundation/CPPredicate/CPExpression.j
	Foundation/CPPredicate/CPExpression_aggregate.j
	Foundation/CPPredicate/CPExpression_constant.j
	Foundation/CPPredicate/CPExpression_function.j
	Foundation/CPPredicate/CPExpression_keypath.j
	Foundation/CPPredicate/CPExpression_self.j
	Foundation/CPPredicate/CPExpression_set.j
	Foundation/CPPredicate/CPExpression_subquery.j
	Foundation/CPPredicate/CPExpression_variable.j
	Foundation/CPPredicate/CPPredicate.j
2011-01-16 10:03:42 +02:00
Stephen Ierodiaconou 494f615aaa Merge branch 'master' into imports
Conflicts:
	Foundation/CPScanner.j
2011-01-15 09:11:46 +02:00
Stephen Ierodiaconou 76b5682234 Missing imports in CPSet+KVO 2010-12-26 10:29:46 +02:00
Stephen Ierodiaconou 4aa4f1a62a Some more missing imports 2010-12-26 01:47:26 +02:00
Stephen Ierodiaconou 7ae14e9eb5 CPCharacterSet lint and fixes 2010-12-26 01:34:43 +02:00
Stephen Ierodiaconou bfe03a8874 CPJSONPConnection Missing imports and self check 2010-12-26 01:34:43 +02:00
Stephen Ierodiaconou 66b6b44f86 CPPredicate lint, import fixes, and some bug fixes 2010-12-26 01:34:43 +02:00
Stephen Ierodiaconou b70018bd80 Import fixes and lint 2010-12-26 01:34:37 +02:00
Andreas Falk a302fdfb8f CPTextField should not bother with handling tab to go to the next key
view, CPWindow does that for us.
2010-11-15 19:44:02 +01:00
Andreas bb9e1a830d Add cancelOperation action to clear text when pressing ESC 2010-11-13 15:21:37 +01:00
Andreas 9b7f8ec31e Add -insertTabIgnoringFieldEditor: and -insertNewlineIgnoringFieldEditor: 2010-11-13 15:16:25 +01:00
Andreas 17b40fcb9d Adapt CPTextField to use interpretKeyEvents and actions instead of directly reading from keyDown 2010-11-13 15:14:09 +01:00
75 changed files with 674 additions and 486 deletions
+4 -2
View File
@@ -753,8 +753,10 @@ var __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey";
if (_sendsActionOnEndEditing)
[aCoder encodeBool:_sendsActionOnEndEditing forKey:CPControlSendsActionOnEndEditingKey];
if (_value !== nil)
[aCoder encodeObject:_value forKey:CPControlValueKey];
var objectValue = [self objectValue];
if (objectValue !== nil)
[aCoder encodeObject:objectValue forKey:CPControlValueKey];
if (_target !== nil)
[aCoder encodeConditionalObject:_target forKey:CPControlTargetKey];
+3
View File
@@ -80,6 +80,9 @@ var _CPMenuBarVisible = NO,
+ (void)initialize
{
if (self !== CPMenu)
return;
[[self class] setMenuBarAttributes:[CPDictionary dictionary]];
}
-1
View File
@@ -34,7 +34,6 @@ var _CPMenuItemSelectionColor = nil,
BOOL _isDirty;
BOOL _showsStateColumn;
CPImageView _stateView;
_CPImageAndTextView _imageAndTextView;
CPView _submenuView;
}
+8 -2
View File
@@ -757,6 +757,12 @@ var CPOutlineViewCoalesceSelectionNotificationStateOff = 0,
Implement this to indicate whether a given item should be rendered using the group item style.
Return YES if the item is a group item, otherwise NO.
Variable Item Heights
- (int)outlineView:(CPOutlineView)outlineView heightOfRowByItem:(id)anItem;
Implement this method to get custom heights of rows based on the item.
This delegate method will be passed your 'item' object and expects you to return an integer height.
NOTE: this should only be implemented if rows will be different heights, if you want to set a height for ALL of your rows see -setRowHeight:
@param aDelegate - the delegate object you wish to set for the reciever.
<pre>
*/
@@ -1718,13 +1724,13 @@ var _loadItemInfoForItem = function(/*CPOutlineView*/ anOutlineView, /*id*/ anIt
return NO;
}
/*- (float)tableView:(CPTableView)theTableView heightOfRow:(int)theRow
- (float)tableView:(CPTableView)theTableView heightOfRow:(int)theRow
{
if ((_outlineView._implementedOutlineViewDelegateMethods & CPOutlineViewDelegate_outlineView_heightOfRowByItem_))
return [_outlineView._outlineViewDelegate outlineView:_outlineView heightOfRowByItem:[_outlineView itemAtRow:theRow]];
return [theTableView rowHeight];
}*/
}
- (void)tableView:(CPTableView)aTableView willDisplayView:(id)aView forTableColumn:(CPTableColumn)aTableColumn row:(int)aRowIndex
{
+52 -45
View File
@@ -47,6 +47,11 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
return "popup-button";
}
+ (CPSet)keyPathsForValuesAffectingSelectedIndex
{
return [CPSet setWithObject:@"objectValue"];
}
+ (CPSet)keyPathsForValuesAffectingSelectedTag
{
return [CPSet setWithObject:@"selectedIndex"];
@@ -64,7 +69,8 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
if (self)
{
_selectedIndex = CPNotFound;
[self selectItemAtIndex:CPNotFound];
_preferredEdge = CPMaxYEdge;
[self setValue:CPImageLeft forThemeAttribute:@"image-position"];
@@ -238,15 +244,6 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
return _selectedIndex;
}
// For us, CPNumber is toll-free bridged to Number, so just return the selected index.
/*!
Returns the selected item's index. If no item is selected, it returns CPNotFound.
*/
- (id)objectValue
{
return _selectedIndex;
}
/*!
@ignore
*/
@@ -277,26 +274,48 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
Selects the item at the specified index
@param anIndex the index of the item to select
*/
- (void)selectItemAtIndex:(int)anIndex
- (void)selectItemAtIndex:(CPUInteger)anIndex
{
anIndex = +anIndex;
[self setObjectValue:anIndex];
}
if (_selectedIndex === anIndex)
- (void)setSelectedIndex:(CPUInteger)anIndex
{
[self setObjectValue:anIndex];
}
- (CPUInteger)selectedIndex
{
return [self objectValue];
}
/*!
Selects the item at the specified index
@param anIndex the index of the item to select
*/
- (void)setObjectValue:(int)anIndex
{
var indexOfSelectedItem = [self objectValue];
anIndex = parseInt(+anIndex, 10);
if (indexOfSelectedItem === anIndex)
return;
[self willChangeValueForKey:@"selectedIndex"];
if (_selectedIndex >= 0 && ![self pullsDown])
if (indexOfSelectedItem >= 0 && ![self pullsDown])
[[self selectedItem] setState:CPOffState];
_selectedIndex = anIndex;
if (_selectedIndex >= 0 && ![self pullsDown])
if (indexOfSelectedItem >= 0 && ![self pullsDown])
[[self selectedItem] setState:CPOnState];
[self synchronizeTitleAndSelectedItem];
}
[self didChangeValueForKey:@"selectedIndex"];
- (id)objectValue
{
return _selectedIndex;
}
/*!
@@ -317,15 +336,6 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
[self selectItemAtIndex:[self indexOfItemWithTitle:aTitle]];
}
/*!
Sets the object for the selected item. If no item is selected, then this method has no effect.
@param the object set for the selected item
*/
- (void)setObjectValue:(id)aValue
{
[self selectItemAtIndex:[aValue intValue]];
}
// Getting Menu Items
/*!
@@ -608,7 +618,7 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
{
[self _firstItemDidChange];
_selectedIndex = -2;
[self selectItemAtIndex:CPNotFound];
[self selectItemAtIndex:MIN([newItems count] - 1, indexOfSelectedItem)];
}
@@ -762,8 +772,8 @@ CPPopUpButtonStatePullsDown = CPThemeState("pulls-down");
@end
var CPPopUpButtonSelectedIndexKey = @"CPPopUpButtonSelectedIndexKey",
CPPopUpButtonPullsDownKey = @"CPPopUpButtonPullsDownKey";
var DEPRECATED_CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey",
DEPRECATED_CPPopUpButtonSelectedIndexKey = @"CPPopUpButtonSelectedIndexKey";
@implementation CPPopUpButton (CPCoding)
/*!
@@ -779,15 +789,24 @@ var CPPopUpButtonSelectedIndexKey = @"CPPopUpButtonSelectedIndexKey",
if (self)
{
// Nothing is currently selected
_selectedIndex = CPNotFound;
// FIXME: (or not?) _title is nulled in - [CPButton initWithCoder:],
// so we need to do this again.
[self synchronizeTitleAndSelectedItem];
[self selectItemAtIndex:[aCoder decodeObjectForKey:CPPopUpButtonSelectedIndexKey]];
// FIXME: Remove deprecation leniency for 1.0
if ([aCoder containsValueForKey:DEPRECATED_CPPopUpButtonMenuKey])
{
CPLog.warn(self + " was encoded with an older version of Cappuccino. Please nib2cib the original nib again or open and re-save in Atlas.");
[self setMenu:[aCoder decodeObjectForKey:DEPRECATED_CPPopUpButtonMenuKey]];
[self setObjectValue:[aCoder decodeObjectForKey:DEPRECATED_CPPopUpButtonSelectedIndexKey]];
}
var options = CPKeyValueObservingOptionNew |
CPKeyValueObservingOptionOld;/* |
CPKeyValueObservingOptionInitial;
*/
[self addObserver:self forKeyPath:@"menu.items" options:options context:nil];
[self addObserver:self forKeyPath:@"_firstItem.changeCount" options:options context:nil];
[self addObserver:self forKeyPath:@"selectedItem.changeCount" options:options context:nil];
@@ -796,16 +815,4 @@ var CPPopUpButtonSelectedIndexKey = @"CPPopUpButtonSelectedIndexKey",
return self;
}
/*!
Encodes the data of the pop-up button into a coder
@param aCoder the coder to which the data
will be written
*/
- (void)encodeWithCoder:(CPCoder)aCoder
{
[super encodeWithCoder:aCoder];
[aCoder encodeInt:_selectedIndex forKey:CPPopUpButtonSelectedIndexKey];
}
@end
+3 -3
View File
@@ -181,7 +181,7 @@ var RECENT_SEARCH_PREFIX = @" ";
[_cancelButton setFrame:[self cancelButtonRectForBounds:[self bounds]]];
[_cancelButton setAutoresizingMask:CPViewMinXMargin];
[_cancelButton setTarget:self];
[_cancelButton setAction:@selector(_searchFieldCancel:)];
[_cancelButton setAction:@selector(cancelOperation:)];
[self _updateCancelButtonVisibility];
[self addSubview:_cancelButton];
}
@@ -209,7 +209,7 @@ var RECENT_SEARCH_PREFIX = @" ";
[button setAlternateImage:CPSearchFieldCancelPressedImage];
[button setAutoresizingMask:CPViewMinXMargin];
[button setTarget:self];
[button setAction:@selector(_searchFieldCancel:)];
[button setAction:@selector(cancelOperation:)];
}
// Custom Layout
@@ -677,7 +677,7 @@ var RECENT_SEARCH_PREFIX = @" ";
[_partialStringTimer invalidate];
}
- (void)_searchFieldCancel:(id)sender
- (void)cancelOperation:(id)sender
{
[self setObjectValue:@""];
[self _sendPartialString];
+19 -5
View File
@@ -870,6 +870,17 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
else
_dirtyTableColumnRangeIndex = MIN(NUMBER_OF_COLUMNS() - 1, _dirtyTableColumnRangeIndex);
if ([[self sortDescriptors] count] > 0)
{
var mainSortDescriptor = [[self sortDescriptors] objectAtIndex:0];
if (aTableColumn === [self _tableColumnForSortDescriptor:mainSortDescriptor])
{
var image = [mainSortDescriptor ascending] ? [self _tableHeaderSortImage] : [self _tableHeaderReverseSortImage];
[self setIndicatorImage:image inTableColumn:aTableColumn];
}
}
[self tile];
[self setNeedsLayout];
}
@@ -2873,7 +2884,7 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
/*!
Sets the table view's CPSortDescriptors objects in an array.
@param sortDescriptors an array of sort descritors.
@param sortDescriptors an array of sort descriptors.
*/
- (void)setSortDescriptors:(CPArray)sortDescriptors
{
@@ -2910,6 +2921,9 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
[self setIndicatorImage:image inTableColumn:newColumn];
[self _sendDataSourceSortDescriptorsDidChange:oldSortDescriptors];
var binderClass = [[self class] _binderClassForBinding:@"sortDescriptors"];
[[binderClass getBinding:@"sortDescriptors" forObject:self] reverseSetValueFor:@"sortDescriptors"];
}
/*!
@@ -3593,15 +3607,15 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5;
CGContextClosePath(context);
CGContextBeginPath(context);
CGContextMoveToPoint(context, minX, minY);
CGContextAddLineToPoint(context, maxX, minY);
CGContextMoveToPoint(context, minX, minY + .5);
CGContextAddLineToPoint(context, maxX, minY + .5);
CGContextClosePath(context);
CGContextSetStrokeColor(context, (shouldUseGroupGradient) ? topGroupLineColor : topLineColor);
CGContextStrokePath(context);
CGContextBeginPath(context);
CGContextMoveToPoint(context, minX, maxY);
CGContextAddLineToPoint(context, maxX, maxY - 1);
CGContextMoveToPoint(context, minX, maxY - .5);
CGContextAddLineToPoint(context, maxX, maxY - .5);
CGContextClosePath(context);
CGContextSetStrokeColor(context, (shouldUseGroupGradient) ? bottomGroupLineColor : bottomLineColor);
CGContextStrokePath(context);
+75 -18
View File
@@ -703,30 +703,87 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder");
- (void)keyDown:(CPEvent)anEvent
{
var characters = [anEvent characters];
// Treat \r and \n the same. See issue #710.
if (characters === CPNewlineCharacter || characters === CPCarriageReturnCharacter)
{
// selectText: has a side effect - it can change first responder of the window
// we have to prevent such behaviour inside this method because target should be able to change first responder after receiving action.
[self selectText:nil];
if ([anEvent _couldBeKeyEquivalent] && [self performKeyEquivalent:anEvent])
return;
if (_isEditing)
{
_isEditing = NO;
[self textDidEndEditing:[CPNotification notificationWithName:CPControlTextDidEndEditingNotification object:self userInfo:nil]];
}
// CPTextField uses an HTML input element to take the input so we need to
// propagate the dom event so the element is updated. This has to be done
// before interpretKeyEvents: though so individual commands have a chance
// to override this (escape to clear the text in a search field for example).
[[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
[self sendAction:[self action] to:[self target]];
[[[self window] platformWindow] _propagateCurrentDOMEvent:NO];
}
else
[[[self window] platformWindow] _propagateCurrentDOMEvent:YES];
[self interpretKeyEvents:[anEvent]];
[[CPRunLoop currentRunLoop] limitDateForMode:CPDefaultRunLoopMode];
}
/*!
Invoke the action specified by aSelector on the current responder.
This is implemented by CPResponder and by default it passes any unrecignized
actions on to the next responder but text fields appearently aren't supposed
to do that according to this documentation by Apple:
http://developer.apple.com/mac/library/documentation/cocoa/reference/NSTextInputClient_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSTextInputClient/doCommandBySelector:
*/
- (void)doCommandBySelector:(SEL)aSelector
{
if ([self respondsToSelector:aSelector])
[self performSelector:aSelector];
}
- (void)insertNewline:(id)sender
{
if (_isEditing)
{
_isEditing = NO;
[self textDidEndEditing:[CPNotification notificationWithName:CPControlTextDidEndEditingNotification object:self userInfo:nil]];
}
[self sendAction:[self action] to:[self target]];
[self selectText:nil];
[[[self window] platformWindow] _propagateCurrentDOMEvent:NO];
}
- (void)insertNewlineIgnoringFieldEditor:(id)sender
{
var oldValue = [self stringValue];
[self _inputElement].value += CPNewlineCharacter;
[self _setStringValue:[self _inputElement].value];
if (oldValue !== [self stringValue])
{
if (!_isEditing)
{
_isEditing = YES;
[self textDidBeginEditing:[CPNotification notificationWithName:CPControlTextDidBeginEditingNotification object:self userInfo:nil]];
}
[self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]];
}
}
- (void)insertTabIgnoringFieldEditor:(id)sender
{
var oldValue = [self stringValue];
[self _inputElement].value += CPTabCharacter;
[self _setStringValue:[self _inputElement].value];
if (oldValue !== [self stringValue])
{
if (!_isEditing)
{
_isEditing = YES;
[self textDidBeginEditing:[CPNotification notificationWithName:CPControlTextDidBeginEditingNotification object:self userInfo:nil]];
}
[self textDidChange:[CPNotification notificationWithName:CPControlTextDidChangeNotification object:self userInfo:nil]];
}
}
- (void)textDidBlur:(CPNotification)note
{
// this looks to prevent false propagation of notifications for other objects
Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 B

+3 -3
View File
@@ -1448,9 +1448,9 @@ var themedButtonValues = nil,
alternatingRowColors = [[CPColor whiteColor], [CPColor colorWithRed:245.0 / 255.0 green:249.0 / 255.0 blue:252.0 / 255.0 alpha:1.0]],
gridColor = [CPColor colorWithHexString:@"dce0e2"],
selectionColor = [CPColor colorWithHexString:@"5f83b9"],
sourceListSelectionColor = [CPDictionary dictionaryWithObjects: [CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), [89.0 / 255.0, 153.0 / 255.0, 209.0 / 255.0,1.0, 33.0 / 255.0, 94.0 / 255.0, 208.0 / 255.0,1.0], [0,1], 2),
[CPColor colorWithCalibratedRed:(61.0 / 255.0) green:(123.0 / 255.0) blue:(218.0 / 255.0) alpha:1.0],
[CPColor colorWithCalibratedRed:(31.0 / 255.0) green:(92.0 / 255.0) blue:(207.0 / 255.0) alpha:1.0]
sourceListSelectionColor = [CPDictionary dictionaryWithObjects: [CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), [98.0 / 255.0, 143.0 / 210.0, 209.0 / 255.0, 1.0, 46.0 / 255.0, 88.0 / 176.0, 208.0 / 255.0,1.0], [0,1], 2),
[CPColor colorWithCalibratedRed:81.0/255.0 green:127.0/255.0 blue:200.0/255.0 alpha:1.0],
[CPColor colorWithCalibratedRed:34.0/255.0 green:63.0/255.0 blue:123.0/255.0 alpha:1.0]
]
forKeys: [CPSourceListGradient, CPSourceListTopLineColor, CPSourceListBottomLineColor]],
+6
View File
@@ -175,6 +175,12 @@ var concat = Array.prototype.concat,
FORWARD_TO_CONCRETE_CLASS();
}
// FIXME: This should be defined in CPMutableArray, not here.
- (id)initWithCapacity:(unsigned)aCapacity
{
FORWARD_TO_CONCRETE_CLASS();
}
// Querying an array
/*!
Returns \c YES if the array contains \c anObject. Otherwise, it returns \c NO.
+2 -2
View File
@@ -29,10 +29,10 @@
Initializes an array able to store at least \c aCapacity items. Because CPArray
is backed by JavaScript arrays, this method ends up simply returning a regular array.
*/
- (id)initWithCapacity:(unsigned)aCapacity
/*- (id)initWithCapacity:(unsigned)aCapacity
{
return self;
}
}*/
// Adding and replacing objects
/*!
+5
View File
@@ -102,6 +102,11 @@ var concat = Array.prototype.concat,
return array;
}
- (id)initWithCapacity:(CPUInteger)aCapacity
{
return self;
}
- (BOOL)count
{
return self.length;
+2 -1
View File
@@ -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
+2 -3
View File
@@ -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
View File
@@ -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)])
{
-1
View File
@@ -23,7 +23,6 @@
@import "CPException.j"
@import "CPObject.j"
/*!
@class CPCoder
@ingroup foundation
+1 -1
View File
@@ -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
-1
View File
@@ -23,7 +23,6 @@
@import "CPObject.j"
@import "CPString.j"
/*!
@class CPData
@ingroup foundation
+1 -1
View File
@@ -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));
+1 -1
View File
@@ -23,9 +23,9 @@
@import "CPArray.j"
@import "CPEnumerator.j"
@import "CPException.j"
@import "CPNull.j"
@import "CPObject.j"
/* @ignore */
@implementation _CPDictionaryValueEnumerator : CPEnumerator
{
-1
View File
@@ -22,7 +22,6 @@
@import "CPObject.j"
/*!
@class CPEnumerator
@ingroup foundation
+10 -9
View File
@@ -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)
-5
View File
@@ -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.
+5 -4
View File
@@ -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 = [];
}
+22 -3
View File
@@ -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
{
+1 -1
View File
@@ -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 }
-2
View File
@@ -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
-1
View File
@@ -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
+12 -8
View File
@@ -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;
}
+1 -1
View File
@@ -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";
+7 -11
View File
@@ -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)
-1
View File
@@ -28,7 +28,6 @@
@import "CPString.j"
@import "CPValue.j"
var CPArchiverReplacementClassNames = nil;
var _CPKeyedArchiverDidEncodeObjectSelector = 1,
+2 -2
View File
@@ -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,
-1
View File
@@ -23,7 +23,6 @@
@import "CPException.j"
@import "CPObject.j"
/*!
@class CPNotification
@ingroup foundation
-1
View File
@@ -26,7 +26,6 @@
@import "CPNotification.j"
@import "CPNull.j"
var CPNotificationDefaultCenter = nil;
/*!
-1
View File
@@ -22,7 +22,6 @@
@import "CPObject.j"
var CPNullSharedNull = nil;
/*!
-1
View File
@@ -23,7 +23,6 @@
@import "CPObject.j"
@import "CPObjJRuntime.j"
var CPNumberUIDs = new CFMutableDictionary();
/*!
-2
View File
@@ -61,8 +61,6 @@ CPLog(@"Got some class: %@", inst);
@todo document KVC usage.
*/
@implementation CPObject
{
Class isa;
+9 -7
View File
@@ -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;
+5 -1
View File
@@ -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;
+152 -168
View File
@@ -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)
+42 -38
View File
@@ -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;
}
}
+12 -11
View File
@@ -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;
}
+23 -20
View File
@@ -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
{
+3 -2
View File
@@ -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;
}
+20 -14
View File
@@ -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)
+16 -11
View File
@@ -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;
}
+15 -12
View File
@@ -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
{
-1
View File
@@ -22,7 +22,6 @@
@import "CPObject.j"
CPPropertyListUnknownFormat = 0;
CPPropertyListOpenStepFormat = kCFPropertyListOpenStepFormat;
CPPropertyListXMLFormat_v1_0 = kCFPropertyListXMLFormat_v1_0;
+1 -1
View File
@@ -22,9 +22,9 @@
@import "CPException.j"
@import "CPInvocation.j"
@import "CPObject.j"
@import "CPString.j"
@implementation CPProxy
{
}
+1
View File
@@ -21,6 +21,7 @@
*/
@import "CPArray.j"
@import "CPDate.j"
@import "CPObject.j"
@import "CPString.j"
+17 -8
View File
@@ -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
+2
View File
@@ -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)
+1
View File
@@ -25,6 +25,7 @@
@import "CPObjJRuntime.j"
@import "CPRange.j"
@import "CPSortDescriptor.j"
@import "CPURL.j"
@import "CPValue.j"
/*!
@@ -24,6 +24,7 @@
rootItem = nil;
[theWindow setFullBridge:YES];
}
- (void)connection:(CPURLConnection)connection didReceiveData:(CPString)dataString
@@ -76,4 +77,17 @@
return [theItem objectForKey:"Name"];
}
- (int)outlineView:(CPOutlineView)anOutlineView heightOfRowByItem:(id)anItem
{
if (!anItem.customHeight)
anItem.customHeight = 20 + RAND() * 190;
// strings wont save the property
if (!anItem.customHeight)
return 30;
return anItem.customHeight;
}
@end
@@ -13,6 +13,9 @@ CPLogRegister(CPLogConsole);
CustomOutlineViewDragType = @"CustomOutlineViewDragType";
var rowHeights = [ ];
@implementation Menu : CPObject
{
Menu _menu @accessors(property=menu);
@@ -191,6 +194,7 @@ CustomOutlineViewDragType = @"CustomOutlineViewDragType";
[_outlineView registerForDraggedTypes:[CustomOutlineViewDragType]];
[_outlineView setDataSource:self];
[_outlineView setDelegate:self];
[_outlineView setAllowsMultipleSelection:YES];
[_outlineView expandItem:nil expandChildren:YES];
// [_outlineView setRowHeight:50.0];
@@ -296,4 +300,12 @@ CustomOutlineViewDragType = @"CustomOutlineViewDragType";
return YES;
}
- (int)outlineView:(CPOutlineView)outlineView heightOfRowByItem:(id)anItem
{
if (!anItem.customHeight)
anItem.customHeight = 20 + RAND() * 190;
return anItem.customHeight;
}
@end
+8 -5
View File
@@ -35,10 +35,6 @@
_menu = [cell menu];
// make sure it's not null/undefined
//FIXME push this check to CPPopUpButton?
_selectedIndex = [cell selectedIndex] || 0;
[self setPullsDown:[cell pullsDown]];
_preferredEdge = [cell preferredEdge];
}
@@ -88,4 +84,11 @@
return self;
}
@end
// - [NSPopUpButton objectValue] is overridden to return the selected index.
- (CPUInteger)objectValue
{
return selectedIndex;
}
@end
+22 -10
View File
@@ -79,19 +79,20 @@ function check_and_exit () {
}
function check_build_environment () {
# make sure user is running HotSpot JVM
java -version 2>&1 | grep HotSpot &> /dev/null
if [ ! "$?" = "0" ]; then
java_ver=`java -version 2>&1 | egrep "(Client|Server)"`
if [ "$java_ver" = "" ]; then
java_ver="your JVM"
# make sure user is running the Sun JVM or OpenJDK >= 6b18
java_version=$(java -version 2>&1)
echo $java_version | grep OpenJDK > /dev/null
if [ "$?" = "0" ]; then # OpenJDK: make sure >= 6b18
openjdk_version=$(echo $java_version | egrep -o '[0-9]b[0-9]+')
if [ $(echo $openjdk_version | tr -d 'b') -lt 618 ]; then
echo "Error: Narwhal is not compatible with your version of OpenJDK: $openjdk_version."
echo "Please upgrade to OpenJDK >= 6b18 or switch to the Sun JVM. Then re-run bootstrap.sh."
exit 1
fi
echo "Error: Narwhal is not compatible with $java_ver. Please switch to the Sun (HotSpot) JVM and re-run bootstrap.sh."
exit 1
fi
# make sure other dependencies are installed and on the $PATH
OTHER_DEPS=(gcc unzip curl)
OTHER_DEPS=(gcc unzip)
for dep in ${OTHER_DEPS[@]}; do
which "$dep" &> /dev/null
@@ -232,7 +233,7 @@ if [ "$install_narwhal" ]; then
zip_ball="http://github.com/$github_path/zipball/$github_ref"
echo "Downloading Narwhal from \"$zip_ball\"..."
curl -L -o "$tmp_zip" "$zip_ball"
$(which curl &> /dev/null && echo curl -L -o || echo wget --no-check-certificate -O) "$tmp_zip" "$zip_ball"
check_and_exit
echo "Installing Narwhal..."
@@ -269,6 +270,17 @@ fi
# if [ ! "$install_capp" ] && prompt; then
# install_capp="yes"
# fi
# Make sure tusk can access GitHub's HTTPS URLs.
NARWHAL_ENGINE=rhino js -e "javax.net.ssl.SSLContext.getDefault()" &> /dev/null
if [ ! "$?" = "0" ]; then
echo "Installing packages from GitHub requires SSL support in Java."
if [ "$(uname)" = "Linux" ]; then
echo "Try installing the libbcprov-java package, if it exists for your Linux distro."
fi
exit 1
fi
extra_packages=""
if [ "$install_capp" ]; then
extra_packages="objective-j cappuccino"