Revision: 7137
http://skim-app.svn.sourceforge.net/skim-app/?rev=7137&view=rev
Author: hofman
Date: 2011-03-04 10:53:05 +0000 (Fri, 04 Mar 2011)
Log Message:
-----------
Use hex string for name of applescript rich text format, as the name is
supposed to be case insensitive, also consistent with raw data representation
Modified Paths:
--------------
trunk/NSData_SKExtensions.h
trunk/NSData_SKExtensions.m
trunk/SKRichTextFormat.m
Modified: trunk/NSData_SKExtensions.h
===================================================================
--- trunk/NSData_SKExtensions.h 2011-03-03 13:20:17 UTC (rev 7136)
+++ trunk/NSData_SKExtensions.h 2011-03-04 10:53:05 UTC (rev 7137)
@@ -56,8 +56,8 @@
- (NSString *)md5String;
- (NSString *)xmlString;
-- (id)initWithBase64String:(NSString *)base64String;
-- (NSString *)base64String;
+- (id)initWithHexString:(NSString *)hexString;
+- (NSString *)hexString;
+ (NSData *)dataWithPointAsQDPoint:(NSPoint)point;
+ (NSData *)dataWithRectAsQDRect:(NSRect)rect;
Modified: trunk/NSData_SKExtensions.m
===================================================================
--- trunk/NSData_SKExtensions.m 2011-03-03 13:20:17 UTC (rev 7136)
+++ trunk/NSData_SKExtensions.m 2011-03-04 10:53:05 UTC (rev 7137)
@@ -108,94 +108,58 @@
return NSMakeRange(NSNotFound, 0);
}
-- (NSString *)md5String {
- CC_MD5_CTX md5context;
- NSUInteger signatureLength = CC_MD5_DIGEST_LENGTH;
- unsigned char signature[signatureLength];
- NSUInteger blockSize = 4096;
- char buffer[blockSize];
- NSUInteger length = [self length];
- NSRange range = NSMakeRange(0, MIN(blockSize, length));
-
- CC_MD5_Init(&md5context);
- while (range.length > 0) {
- [self getBytes:buffer range:range];
- CC_MD5_Update(&md5context, (const void *)buffer,
(CC_LONG)range.length);
- range.location = NSMaxRange(range);
- range.length = MIN(blockSize, length - range.location);
- }
- CC_MD5_Final(signature, &md5context);
-
- NSMutableString *md5String = [NSMutableString
stringWithCapacity:signatureLength];
- NSUInteger i;
-
- for (i = 0; i < signatureLength; i++)
- [md5String appendFormat:@"%02x", signature[i]];
-
- return md5String;
-}
-
-// The following code is taken and modified from Matt Gallagher's code at
http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html
-
// Mapping from 6 bit pattern to ASCII character.
-static unsigned char base64EncodeTable[65] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static unsigned char hexEncodeTable[16] = "0123456789ABCDEF";
-// Definition for "masked-out" areas of the base64DecodeTable mapping
-#define xx 65
+// Definition for "masked-out" areas of the hexDecodeTable mapping
+#define xx 0xFF
-// Mapping from ASCII character to 6 bit pattern.
-static unsigned char base64DecodeTable[256] =
+// Mapping from ASCII character to 4 bit pattern.
+static unsigned char hexDecodeTable[256] =
{
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
- xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 62, xx, xx, xx, 63,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, xx, xx, xx, xx, xx, xx,
- xx, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, xx, xx, xx, xx, xx,
- xx, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, xx, xx, xx, xx, xx, xx,
+ xx, 10, 11, 12, 13, 14, 15, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
+ xx, 10, 11, 12, 13, 14, 15, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
+ xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
+ xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
+ xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
};
-// Fundamental sizes of the binary and base64 encode/decode units in bytes
-#define BINARY_UNIT_SIZE 3
-#define BASE64_UNIT_SIZE 4
-
-- (id)initWithBase64String:(NSString *)base64String {
- NSData *data = [base64String dataUsingEncoding:NSASCIIStringEncoding];
+- (id)initWithHexString:(NSString *)hexString {
+ NSData *data = [hexString dataUsingEncoding:NSASCIIStringEncoding];
size_t length = [data length];
const unsigned char *inputBuffer = (const unsigned char *)[data bytes];
- size_t outputBufferSize = (length / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE;
+ size_t outputBufferSize = length / 2;
unsigned char *outputBuffer = (unsigned char *)malloc(outputBufferSize);
size_t i = 0, j = 0;
while (i < length) {
- // Accumulate 4 valid characters (ignore everything else)
- unsigned char accumulated[BASE64_UNIT_SIZE];
+ // Accumulate 2 valid characters (ignore everything else)
+ unsigned char accumulated[2];
size_t accumulateIndex = 0;
while (i < length) {
- unsigned char decode =
base64DecodeTable[inputBuffer[i++]];
+ unsigned char decode = hexDecodeTable[inputBuffer[i++]];
if (decode != xx) {
accumulated[accumulateIndex] = decode;
accumulateIndex++;
- if (accumulateIndex == BASE64_UNIT_SIZE)
+ if (accumulateIndex == 2)
break;
}
}
- // Store the 6 bits from each of the 4 characters as 3 bytes
- outputBuffer[j] = (accumulated[0] << 2) | (accumulated[1] >> 4);
- outputBuffer[j + 1] = (accumulated[1] << 4) | (accumulated[2]
>> 2);
- outputBuffer[j + 2] = (accumulated[2] << 6) | accumulated[3];
- j += accumulateIndex - 1;
+ // Store the 4 bits from each of the 2 characters as 1 bytes
+ outputBuffer[j++] = (accumulated[0] << 4) | (accumulated[1]);
}
NSData *result = [self initWithBytes:outputBuffer length:j];
@@ -205,18 +169,80 @@
return result;
}
-- (NSString *)base64StringWithNewlines:(BOOL)encodeWithNewlines {
+- (NSString *)hexString {
size_t length = [self length];
const unsigned char *inputBuffer = (const unsigned char *)[self bytes];
+ char *outputBuffer = (char *)malloc(length * 2 + 1);
+ if (outputBuffer == NULL)
+ return nil;
+
+ size_t i = 0;
+ size_t j = 0;
+ for (i = 0; i < length; i++) {
+ outputBuffer[j++] = hexEncodeTable[(inputBuffer[i] & 0xF0) >>
4];
+ outputBuffer[j++] = hexEncodeTable[(inputBuffer[i] & 0x0F)];
+ }
+ outputBuffer[j] = 0;
+
+ NSString *result = [[[NSString alloc] initWithBytes:outputBuffer length:j
encoding:NSASCIIStringEncoding] autorelease];
+
+ free(outputBuffer);
+
+ return result;
+}
+
+- (NSString *)md5String {
+ CC_MD5_CTX md5context;
+ NSUInteger signatureLength = CC_MD5_DIGEST_LENGTH;
+ unsigned char signature[signatureLength];
+ unsigned char hexSignature[signatureLength * 2 + 1];
+ NSUInteger blockSize = 4096;
+ char buffer[blockSize];
+ NSUInteger length = [self length];
+ NSRange range = NSMakeRange(0, MIN(blockSize, length));
+
+ CC_MD5_Init(&md5context);
+ while (range.length > 0) {
+ [self getBytes:buffer range:range];
+ CC_MD5_Update(&md5context, (const void *)buffer,
(CC_LONG)range.length);
+ range.location = NSMaxRange(range);
+ range.length = MIN(blockSize, length - range.location);
+ }
+ CC_MD5_Final(signature, &md5context);
+
+ NSUInteger i, j = 0;
+
+ for (i = 0; i < signatureLength; i++) {
+ hexSignature[j++] = hexEncodeTable[(signature[i] & 0xF0) >> 4];
+ hexSignature[j++] = hexEncodeTable[(signature[i] & 0x0F)];
+ }
+ hexSignature[j] = 0;
+
+ return [[[NSString alloc] initWithBytes:hexSignature length:j
encoding:NSASCIIStringEncoding] autorelease];
+}
+
+#pragma mark Templating support
+
+// The following code is taken and modified from Matt Gallagher's code at
http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html
+
+// Mapping from 6 bit pattern to ASCII character.
+static unsigned char base64EncodeTable[65] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+- (NSString *)xmlString {
+ size_t length = [self length];
+ const unsigned char *inputBuffer = (const unsigned char *)[self bytes];
+
+ // Fundamental sizes of the binary and base64 encode/decode units in bytes
+ #define BINARY_UNIT_SIZE 3
+ #define BASE64_UNIT_SIZE 4
+
#define MAX_NUM_PADDING_CHARS 2
#define OUTPUT_LINE_LENGTH 64
#define INPUT_LINE_LENGTH ((OUTPUT_LINE_LENGTH / BASE64_UNIT_SIZE) *
BINARY_UNIT_SIZE)
// Byte accurate calculation of final buffer size
- size_t outputBufferSize = ((length / BINARY_UNIT_SIZE) + ((length %
BINARY_UNIT_SIZE) ? 1 : 0)) * BASE64_UNIT_SIZE;
- if (encodeWithNewlines)
- outputBufferSize += (outputBufferSize / OUTPUT_LINE_LENGTH);
+ size_t outputBufferSize = ((length / BINARY_UNIT_SIZE) + ((length %
BINARY_UNIT_SIZE) ? 1 : 0)) * BASE64_UNIT_SIZE + (outputBufferSize /
OUTPUT_LINE_LENGTH);
// Include space for a terminating zero
outputBufferSize += 1;
@@ -228,7 +254,7 @@
size_t i = 0;
size_t j = 0;
- const size_t lineLength = encodeWithNewlines ? INPUT_LINE_LENGTH : length;
+ const size_t lineLength = INPUT_LINE_LENGTH;
size_t lineEnd = lineLength;
while (true) {
@@ -273,16 +299,6 @@
return result;
}
-- (NSString *)base64String {
- return [self base64StringWithNewlines:NO];
-}
-
-#pragma mark Templating support
-
-- (NSString *)xmlString {
- return [self base64StringWithNewlines:YES];
-}
-
#pragma mark Scripting support
+ (NSData *)dataWithPointAsQDPoint:(NSPoint)point {
Modified: trunk/SKRichTextFormat.m
===================================================================
--- trunk/SKRichTextFormat.m 2011-03-03 13:20:17 UTC (rev 7136)
+++ trunk/SKRichTextFormat.m 2011-03-04 10:53:05 UTC (rev 7137)
@@ -66,7 +66,7 @@
}
- (id)initWithName:(NSString *)aName {
- NSData *aData = [[NSData alloc] initWithBase64String:aName];
+ NSData *aData = [[NSData alloc] initWithHexString:aName];
self = [self initWithData:aData];
[aData release];
return self;
@@ -83,7 +83,7 @@
}
- (NSString *)name {
- return [data base64String];
+ return [data hexString];
}
- (NSTextStorage *)richText {
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
What You Don't Know About Data Connectivity CAN Hurt You
This paper provides an overview of data connectivity, details
its effect on application quality, and explores various alternative
solutions. http://p.sf.net/sfu/progress-d2d
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit