Revision: 2908
http://skim-app.svn.sourceforge.net/skim-app/?rev=2908&view=rev
Author: hofman
Date: 2007-09-12 07:21:48 -0700 (Wed, 12 Sep 2007)
Log Message:
-----------
Split file ID string into components.
Modified Paths:
--------------
trunk/SKDocument.m
Modified: trunk/SKDocument.m
===================================================================
--- trunk/SKDocument.m 2007-09-12 12:13:42 UTC (rev 2907)
+++ trunk/SKDocument.m 2007-09-12 14:21:48 UTC (rev 2908)
@@ -1291,7 +1291,7 @@
return data;
}
-- (NSString *)fileIDString; {
+- (NSArray *)fileIDStrings {
if (pdfData == nil)
return nil;
const char *EOFPattern = "%%EOF";
@@ -1299,13 +1299,16 @@
const char *IDPattern = "/ID";
const char *startArrayPattern = "[";
const char *endArrayPattern = "]";
+ const char *startStringPattern = "<";
+ const char *endStringPattern = ">";
unsigned patternLength = strlen(EOFPattern);
NSRange range = NSMakeRange([pdfData length] - 1024, 1024);
if (range.location < 0)
range = NSMakeRange(0, [pdfData length]);
unsigned EOFIndex = [pdfData indexOfBytes:EOFPattern length:patternLength
options:NSBackwardsSearch range:range];
- unsigned trailerIndex, IDIndex, startArrayIndex, endArrayIndex;
- NSData *fileIDData;
+ unsigned trailerIndex, IDIndex, startArrayIndex, endArrayIndex,
startStringIndex, endStringIndex;
+ NSData *firstIDData = nil;
+ NSData *secondIDData = nil;
if (EOFIndex != NSNotFound) {
range = NSMakeRange(EOFIndex - 2048, 2048);
@@ -1326,13 +1329,38 @@
patternLength = strlen(endArrayPattern);
endArrayIndex = [pdfData indexOfBytes:endArrayPattern
length:patternLength options:0 range:range];
if (endArrayIndex != NSNotFound) {
- fileIDData = [pdfData
subdataWithRange:NSMakeRange(startArrayIndex + 1, endArrayIndex -
startArrayIndex - 1)];
- return [[[NSString alloc] initWithData:fileIDData
encoding:NSISOLatin1StringEncoding] autorelease];
+ range = NSMakeRange(startArrayIndex + 1, endArrayIndex
- startArrayIndex - 1);
+ patternLength = strlen(startStringPattern);
+ startStringIndex = [pdfData
indexOfBytes:startStringPattern length:patternLength options:0 range:range];
+ if (startStringIndex != NSNotFound) {
+ range = NSMakeRange(startStringIndex +
patternLength, endArrayIndex - startStringIndex - patternLength);
+ patternLength = strlen(endStringPattern);
+ endStringIndex = [pdfData
indexOfBytes:endStringPattern length:patternLength options:0 range:range];
+ if (endStringIndex != NSNotFound) {
+ if (firstIDData = [pdfData
subdataWithRange:NSMakeRange(startStringIndex + 1, endStringIndex -
startStringIndex - 1)]) {
+ range = NSMakeRange(endStringIndex +
patternLength, endArrayIndex - endStringIndex - patternLength);
+ patternLength = strlen(startStringPattern);
+ startStringIndex = [pdfData
indexOfBytes:startStringPattern length:patternLength options:0 range:range];
+ if (startStringIndex != NSNotFound) {
+ range = NSMakeRange(startStringIndex +
patternLength, endArrayIndex - startStringIndex - patternLength);
+ patternLength =
strlen(endStringPattern);
+ endStringIndex = [pdfData
indexOfBytes:endStringPattern length:patternLength options:0 range:range];
+ if (endStringIndex != NSNotFound) {
+ secondIDData = [pdfData
subdataWithRange:NSMakeRange(startStringIndex + 1, endStringIndex -
startStringIndex - 1)];
+ }
+ }
+ }
+ }
+ }
}
}
}
}
}
+ if (secondIDData)
+ return [NSArray arrayWithObjects:
+ [[[NSString alloc] initWithData:firstIDData
encoding:NSISOLatin1StringEncoding] autorelease],
+ [[[NSString alloc] initWithData:secondIDData
encoding:NSISOLatin1StringEncoding] autorelease], nil];
return nil;
}
@@ -1347,15 +1375,15 @@
}
- (NSString *)notesFDFStringForFile:(NSString *)filename {
- NSString *fileIDString = [self fileIDString];
+ NSArray *fileIDStrings = [self fileIDStrings];
int i, count = [[self notes] count];
NSMutableString *string = [NSMutableString
stringWithFormat:@"%%FDF-1.2\n%%%C%C%C%C\n1 0 obj<</FDF<<", 0xe2, 0xe3, 0xcf,
0xd3];
[string appendString:@"/Annots["];
for (i = 0; i < count; i++)
[string appendFormat:@"%i 0 R ", i + 2];
[string appendFormat:@"]/F(%@)", filename ? [filename
stringByEscapingParenthesis] : @""];
- if (fileIDString)
- [string appendFormat:@"/[EMAIL PROTECTED]", fileIDString];
+ if (fileIDStrings)
+ [string appendFormat:@"/ID[<%@><%@>]", [fileIDStrings
objectAtIndex:0], [fileIDStrings objectAtIndex:1]];
[string appendString:@">>>>\nendobj\n"];
for (i = 0; i < count; i++)
[string appendFormat:@"%i 0 obj<<%@>>\nendobj\n", i + 2, [[[self
notes] objectAtIndex:i] fdfString]];
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit