Revision: 4195
http://skim-app.svn.sourceforge.net/skim-app/?rev=4195&view=rev
Author: hofman
Date: 2008-07-12 04:06:04 -0700 (Sat, 12 Jul 2008)
Log Message:
-----------
Wrap pdfsync records in a custom data type rather than mutable dictionary.
Modified Paths:
--------------
trunk/SKPDFSynchronizer.h
trunk/SKPDFSynchronizer.m
trunk/Skim.xcodeproj/project.pbxproj
Added Paths:
-----------
trunk/SKPDFSyncRecord.h
trunk/SKPDFSyncRecord.m
Added: trunk/SKPDFSyncRecord.h
===================================================================
--- trunk/SKPDFSyncRecord.h (rev 0)
+++ trunk/SKPDFSyncRecord.h 2008-07-12 11:06:04 UTC (rev 4195)
@@ -0,0 +1,70 @@
+//
+// SKPDFSyncRecord.h
+// Skim
+//
+// Created by Christiaan Hofman on 7/12/08.
+/*
+ This software is Copyright (c) 2008
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+
[EMAIL PROTECTED] SKPDFSyncRecord : NSObject {
+ int recordIndex;
+ int pageIndex;
+ NSPoint point;
+ NSString *file;
+ int line;
+}
+
+- (id)initWithRecordIndex:(int)aRecordIndex;
+
+- (int)recordIndex;
+- (void)setRecordIndex:(int)newRecordIndex;
+
+- (int)pageIndex;
+- (void)setPageIndex:(int)newPageIndex;
+
+- (NSPoint)point;
+- (void)setPoint:(NSPoint)newPoint;
+
+- (float)x;
+- (float)y;
+
+- (NSString *)file;
+- (void)setFile:(NSString *)newFile;
+
+- (int)line;
+- (void)setLine:(int)newLine;
+
[EMAIL PROTECTED]
Added: trunk/SKPDFSyncRecord.m
===================================================================
--- trunk/SKPDFSyncRecord.m (rev 0)
+++ trunk/SKPDFSyncRecord.m 2008-07-12 11:06:04 UTC (rev 4195)
@@ -0,0 +1,115 @@
+//
+// SKPDFSyncRecord.m
+// Skim
+//
+// Created by Christiaan Hofman on 7/12/08.
+/*
+ This software is Copyright (c) 2008
+ Christiaan Hofman. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SKPDFSyncRecord.h"
+
+
[EMAIL PROTECTED] SKPDFSyncRecord
+
+- (id)initWithRecordIndex:(int)aRecordIndex {
+ if (self = [super init]) {
+ recordIndex = aRecordIndex;
+ pageIndex = NSNotFound;
+ point = NSZeroPoint;
+ file = nil;
+ line = -1;
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [file release];
+ [super dealloc];
+}
+
+- (int)recordIndex {
+ return recordIndex;
+}
+
+- (void)setRecordIndex:(int)newRecordIndex {
+ if (recordIndex != newRecordIndex) {
+ recordIndex = newRecordIndex;
+ }
+}
+
+- (int)pageIndex {
+ return pageIndex;
+}
+
+- (void)setPageIndex:(int)newPageIndex {
+ if (pageIndex != newPageIndex) {
+ pageIndex = newPageIndex;
+ }
+}
+
+- (NSPoint)point {
+ return point;
+}
+
+- (void)setPoint:(NSPoint)newPoint {
+ point = newPoint;
+}
+
+- (float)x {
+ return point.x;
+}
+
+- (float)y {
+ return point.y;
+}
+
+- (NSString *)file {
+ return file;
+}
+
+- (void)setFile:(NSString *)newFile {
+ if (file != newFile) {
+ [file release];
+ file = [newFile retain];
+ }
+}
+
+- (int)line {
+ return line;
+}
+
+- (void)setLine:(int)newLine {
+ line = newLine;
+}
+
[EMAIL PROTECTED]
Modified: trunk/SKPDFSynchronizer.h
===================================================================
--- trunk/SKPDFSynchronizer.h 2008-07-12 10:04:22 UTC (rev 4194)
+++ trunk/SKPDFSynchronizer.h 2008-07-12 11:06:04 UTC (rev 4195)
@@ -86,9 +86,3 @@
- (void)synchronizer:(SKPDFSynchronizer *)synchronizer foundLine:(int)line
inFile:(NSString *)file;
- (void)synchronizer:(SKPDFSynchronizer *)synchronizer
foundLocation:(NSPoint)point atPageIndex:(unsigned int)pageIndex;
@end
-
-
[EMAIL PROTECTED] NSMutableDictionary (SKExtensions)
-- (void)setIntValue:(int)value forKey:(id)key;
-- (void)setFloatValue:(float)value forKey:(id)key;
[EMAIL PROTECTED]
Modified: trunk/SKPDFSynchronizer.m
===================================================================
--- trunk/SKPDFSynchronizer.m 2008-07-12 10:04:22 UTC (rev 4194)
+++ trunk/SKPDFSynchronizer.m 2008-07-12 11:06:04 UTC (rev 4195)
@@ -37,6 +37,7 @@
*/
#import "SKPDFSynchronizer.h"
+#import "SKPDFSyncRecord.h"
#import "NSCharacterSet_SKExtensions.h"
#import "NSScanner_SKExtensions.h"
#import <Carbon/Carbon.h>
@@ -46,12 +47,6 @@
#define SYNC_TO_PDF(coord) ((float)coord / 65536.0)
#define PDF_TO_SYNC(coord) (int)(coord * 65536.0)
-static NSString *SKPDFSynchronizerRecordIndexKey = @"recordIndex";
-static NSString *SKPDFSynchronizerPageKey = @"page";
-static NSString *SKPDFSynchronizerXKey = @"x";
-static NSString *SKPDFSynchronizerYKey = @"y";
-static NSString *SKPDFSynchronizerFileKey = @"file";
-static NSString *SKPDFSynchronizerLineKey = @"line";
static NSString *SKPDFSynchronizerTexExtension = @"tex";
static NSString *SKPDFSynchronizerPdfsyncExtension = @"pdfsync";
@@ -63,11 +58,11 @@
return file;
}
-static NSMutableDictionary *SKRecordForRecordIndex(NSMutableDictionary
*records, int recordIndex) {
+static SKPDFSyncRecord *SKRecordForRecordIndex(NSMutableDictionary *records,
int recordIndex) {
NSNumber *recordNumber = [[NSNumber alloc] initWithInt:recordIndex];
- NSMutableDictionary *record = [records objectForKey:recordNumber];
+ SKPDFSyncRecord *record = [records objectForKey:recordNumber];
if (record == nil) {
- record = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:recordNumber, SKPDFSynchronizerRecordIndexKey, nil];
+ record = [[SKPDFSyncRecord alloc] initWithRecordIndex:recordIndex];
[records setObject:record forKey:recordNumber];
[record release];
}
@@ -353,7 +348,7 @@
NSString *file;
int recordIndex, line, pageIndex;
float x, y;
- NSMutableDictionary *record;
+ SKPDFSyncRecord *record;
NSMutableArray *array;
unichar ch;
NSScanner *sc = [[NSScanner alloc] initWithString:pdfsyncString];
@@ -382,8 +377,8 @@
// we ignore the column
[sc scanInt:NULL];
record = SKRecordForRecordIndex(records,
recordIndex);
- [record setObject:file
forKey:SKPDFSynchronizerFileKey];
- [record setIntValue:line
forKey:SKPDFSynchronizerLineKey];
+ [record setFile:file];
+ [record setLine:line];
[[lines objectForKey:file] addObject:record];
}
} else if (ch == 'p') {
@@ -391,9 +386,8 @@
[sc scanString:@"*" intoString:NULL] || [sc
scanString:@"+" intoString:NULL];
if ([sc scanInt:&recordIndex] && [sc scanFloat:&x] &&
[sc scanFloat:&y]) {
record = SKRecordForRecordIndex(records,
recordIndex);
- [record setIntValue:[pages count] - 1
forKey:SKPDFSynchronizerPageKey];
- [record setFloatValue:SYNC_TO_PDF(x) + pdfOffset.x
forKey:SKPDFSynchronizerXKey];
- [record setFloatValue:SYNC_TO_PDF(y) + pdfOffset.y
forKey:SKPDFSynchronizerYKey];
+ [record setPageIndex:[pages count] - 1];
+ [record setPoint:NSMakePoint(SYNC_TO_PDF(x) +
pdfOffset.x, SYNC_TO_PDF(y) + pdfOffset.y)];
[[pages lastObject] addObject:record];
}
} else if (ch == 's') {
@@ -427,9 +421,9 @@
[sc scanCharactersFromSet:[NSCharacterSet
newlineCharacterSet] intoString:NULL];
}
- NSSortDescriptor *lineSortDescriptor = [[[NSSortDescriptor
alloc] initWithKey:SKPDFSynchronizerLineKey ascending:YES] autorelease];
- NSSortDescriptor *xSortDescriptor = [[[NSSortDescriptor alloc]
initWithKey:SKPDFSynchronizerXKey ascending:YES] autorelease];
- NSSortDescriptor *ySortDescriptor = [[[NSSortDescriptor alloc]
initWithKey:SKPDFSynchronizerYKey ascending:NO] autorelease];
+ NSSortDescriptor *lineSortDescriptor = [[[NSSortDescriptor
alloc] initWithKey:@"line" ascending:YES] autorelease];
+ NSSortDescriptor *xSortDescriptor = [[[NSSortDescriptor alloc]
initWithKey:@"x" ascending:YES] autorelease];
+ NSSortDescriptor *ySortDescriptor = [[[NSSortDescriptor alloc]
initWithKey:@"y" ascending:NO] autorelease];
[[lines allValues]
makeObjectsPerformSelector:@selector(sortUsingDescriptors:)
withObject:[NSArray
arrayWithObjects:lineSortDescriptor, nil]];
@@ -493,29 +487,28 @@
BOOL rv = NO;
if (pageIndex < [pages count]) {
- NSDictionary *record = nil;
- NSDictionary *beforeRecord = nil;
- NSDictionary *afterRecord = nil;
+ SKPDFSyncRecord *record = nil;
+ SKPDFSyncRecord *beforeRecord = nil;
+ SKPDFSyncRecord *afterRecord = nil;
NSMutableDictionary *atRecords = [NSMutableDictionary dictionary];
NSEnumerator *recordEnum = [[pages objectAtIndex:pageIndex]
objectEnumerator];
while (record = [recordEnum nextObject]) {
- if ([record objectForKey:SKPDFSynchronizerLineKey] == nil)
+ if ([record line] == -1)
continue;
- float x = [[record objectForKey:SKPDFSynchronizerXKey] floatValue];
- float y = [[record objectForKey:SKPDFSynchronizerYKey] floatValue];
- if (y > NSMaxY(rect)) {
+ NSPoint p = [record point];
+ if (p.y > NSMaxY(rect)) {
beforeRecord = record;
- } else if (y < NSMinY(rect)) {
+ } else if (p.y < NSMinY(rect)) {
afterRecord = record;
break;
- } else if (x < NSMinX(rect)) {
+ } else if (p.x < NSMinX(rect)) {
beforeRecord = record;
- } else if (x > NSMaxX(rect)) {
+ } else if (p.x > NSMaxX(rect)) {
afterRecord = record;
break;
} else {
- [atRecords setObject:record forKey:[NSNumber
numberWithFloat:fabsf(x - point.x)]];
+ [atRecords setObject:record forKey:[NSNumber
numberWithFloat:fabsf(p.x - point.x)]];
}
}
@@ -524,17 +517,15 @@
NSNumber *nearest = [[[atRecords allKeys]
sortedArrayUsingSelector:@selector(compare:)] objectAtIndex:0];
record = [atRecords objectForKey:nearest];
} else if (beforeRecord && afterRecord) {
- float beforeX = [[beforeRecord objectForKey:SKPDFSynchronizerXKey]
floatValue];
- float beforeY = [[beforeRecord objectForKey:SKPDFSynchronizerYKey]
floatValue];
- float afterX = [[afterRecord objectForKey:SKPDFSynchronizerXKey]
floatValue];
- float afterY = [[afterRecord objectForKey:SKPDFSynchronizerYKey]
floatValue];
- if (beforeY - point.y < point.y - afterY)
+ NSPoint beforePoint = [beforeRecord point];
+ NSPoint afterPoint = [afterRecord point];
+ if (beforePoint.y - point.y < point.y - afterPoint.y)
record = beforeRecord;
- else if (beforeY - point.y > point.y - afterY)
+ else if (beforePoint.y - point.y > point.y - afterPoint.y)
record = afterRecord;
- else if (beforeX - point.x < point.x - afterX)
+ else if (beforePoint.x - point.x < point.x - afterPoint.x)
record = beforeRecord;
- else if (beforeX - point.x > point.x - afterX)
+ else if (beforePoint.x - point.x > point.x - afterPoint.x)
record = afterRecord;
else
record = beforeRecord;
@@ -545,8 +536,8 @@
}
if (record) {
- *line = [[record objectForKey:SKPDFSynchronizerLineKey] intValue];
- *file = [record objectForKey:SKPDFSynchronizerFileKey];
+ *line = [record line];
+ *file = [record file];
rv = YES;
}
}
@@ -557,16 +548,16 @@
BOOL rv = NO;
if ([lines objectForKey:file]) {
- NSDictionary *record = nil;
- NSDictionary *beforeRecord = nil;
- NSDictionary *afterRecord = nil;
- NSDictionary *atRecord = nil;
+ SKPDFSyncRecord *record = nil;
+ SKPDFSyncRecord *beforeRecord = nil;
+ SKPDFSyncRecord *afterRecord = nil;
+ SKPDFSyncRecord *atRecord = nil;
NSEnumerator *recordEnum = [[lines objectForKey:file]
objectEnumerator];
while (record = [recordEnum nextObject]) {
- if ([record objectForKey:SKPDFSynchronizerPageKey] == nil)
+ if ([record pageIndex] == NSNotFound)
continue;
- int l = [[record objectForKey:SKPDFSynchronizerLineKey] intValue];
+ int l = [record line];
if (l < line) {
beforeRecord = record;
} else if (l > line) {
@@ -581,8 +572,8 @@
if (atRecord) {
record = atRecord;
} else if (beforeRecord && afterRecord) {
- int beforeLine = [[beforeRecord
objectForKey:SKPDFSynchronizerLineKey] intValue];
- int afterLine = [[afterRecord
objectForKey:SKPDFSynchronizerLineKey] intValue];
+ int beforeLine = [beforeRecord line];
+ int afterLine = [afterRecord line];
if (beforeLine - line > line - afterLine)
record = afterRecord;
else
@@ -594,8 +585,8 @@
}
if (record) {
- *pageIndex = [[record objectForKey:SKPDFSynchronizerPageKey]
unsignedIntValue];
- *point = NSMakePoint([[record objectForKey:SKPDFSynchronizerXKey]
floatValue], [[record objectForKey:SKPDFSynchronizerYKey] floatValue]);
+ *pageIndex = [record pageIndex];
+ *point = [record point];
rv = YES;
}
}
@@ -668,21 +659,3 @@
}
@end
-
-#pragma mark -
-
[EMAIL PROTECTED] NSMutableDictionary (SKExtensions)
-
-- (void)setIntValue:(int)value forKey:(id)key {
- NSNumber *number = [[NSNumber alloc] initWithInt:value];
- [self setValue:number forKey:key];
- [number release];
-}
-
-- (void)setFloatValue:(float)value forKey:(id)key {
- NSNumber *number = [[NSNumber alloc] initWithFloat:value];
- [self setValue:number forKey:key];
- [number release];
-}
-
[EMAIL PROTECTED]
Modified: trunk/Skim.xcodeproj/project.pbxproj
===================================================================
--- trunk/Skim.xcodeproj/project.pbxproj 2008-07-12 10:04:22 UTC (rev
4194)
+++ trunk/Skim.xcodeproj/project.pbxproj 2008-07-12 11:06:04 UTC (rev
4195)
@@ -80,6 +80,7 @@
CE327A460C11BF6700DB4BEB /* NoteTypeSheet.nib in Resources */ =
{isa = PBXBuildFile; fileRef = CE327A440C11BF6700DB4BEB /* NoteTypeSheet.nib
*/; };
CE3364310E2761E9005F99E6 /* synctex_parser.c in Sources */ =
{isa = PBXBuildFile; fileRef = CE33639F0E26E120005F99E6 /* synctex_parser.c */;
};
CE3364320E2761EF005F99E6 /* libz.dylib in Frameworks */ = {isa
= PBXBuildFile; fileRef = CE3363CD0E26E378005F99E6 /* libz.dylib */; };
+ CE3366DF0E28BCFA005F99E6 /* SKPDFSyncRecord.m in Sources */ =
{isa = PBXBuildFile; fileRef = CE3366DE0E28BCFA005F99E6 /* SKPDFSyncRecord.m
*/; };
CE3400AC0E0034DF00A7FFE6 /* NSMenu_SKExtensions.m in Sources */
= {isa = PBXBuildFile; fileRef = CE3400AB0E0034DF00A7FFE6 /*
NSMenu_SKExtensions.m */; };
CE3401E00E01378A00A7FFE6 /* NSAttributedString_SKExtensions.m
in Sources */ = {isa = PBXBuildFile; fileRef = CE3401DF0E01378A00A7FFE6 /*
NSAttributedString_SKExtensions.m */; };
CE3401E60E01388700A7FFE6 /* NSNumber_SKExtensions.m in Sources
*/ = {isa = PBXBuildFile; fileRef = CE3401E50E01388700A7FFE6 /*
NSNumber_SKExtensions.m */; };
@@ -500,6 +501,8 @@
CE33639F0E26E120005F99E6 /* synctex_parser.c */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name =
synctex_parser.c; path = vendorsrc/jeromelaurens/synctex_parser.c; sourceTree =
"<group>"; };
CE3363A00E26E120005F99E6 /* synctex_parser.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name =
synctex_parser.h; path = vendorsrc/jeromelaurens/synctex_parser.h; sourceTree =
"<group>"; };
CE3363CD0E26E378005F99E6 /* libz.dylib */ = {isa =
PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name =
libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
+ CE3366DD0E28BCFA005F99E6 /* SKPDFSyncRecord.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
SKPDFSyncRecord.h; sourceTree = "<group>"; };
+ CE3366DE0E28BCFA005F99E6 /* SKPDFSyncRecord.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= SKPDFSyncRecord.m; sourceTree = "<group>"; };
CE3400AA0E0034DF00A7FFE6 /* NSMenu_SKExtensions.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
NSMenu_SKExtensions.h; sourceTree = "<group>"; };
CE3400AB0E0034DF00A7FFE6 /* NSMenu_SKExtensions.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= NSMenu_SKExtensions.m; sourceTree = "<group>"; };
CE3401DE0E01378A00A7FFE6 /* NSAttributedString_SKExtensions.h
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.h; path = NSAttributedString_SKExtensions.h; sourceTree =
"<group>"; };
@@ -1346,6 +1349,8 @@
CE8978CC0CBFC70B00EA2D98 /* SKTag.m */,
CEE54DEF0DA2EF0E0037169F /*
SKPDFAnnotationTemporary.h */,
CEE54DF00DA2EF0E0037169F /*
SKPDFAnnotationTemporary.m */,
+ CE3366DD0E28BCFA005F99E6 /* SKPDFSyncRecord.h
*/,
+ CE3366DE0E28BCFA005F99E6 /* SKPDFSyncRecord.m
*/,
);
name = Data;
sourceTree = "<group>";
@@ -2103,6 +2108,7 @@
CE665A140E1BF43700D0704D /*
SKBookmarkOutlineView.m in Sources */,
CEC3AD240E23EC0300F40B0B /*
PDFAnnotationLink_SKExtensions.m in Sources */,
CE3364310E2761E9005F99E6 /* synctex_parser.c in
Sources */,
+ CE3366DF0E28BCFA005F99E6 /* SKPDFSyncRecord.m
in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit