Revision: 18167
http://bibdesk.svn.sourceforge.net/bibdesk/?rev=18167&view=rev
Author: hofman
Date: 2011-10-08 22:12:07 +0000 (Sat, 08 Oct 2011)
Log Message:
-----------
use hex string for rich text format specifiers as the name should be case
insensitive
Modified Paths:
--------------
trunk/bibdesk/NSAttributedString_BDSKExtensions.m
trunk/bibdesk/NSData_BDSKExtensions.h
trunk/bibdesk/NSData_BDSKExtensions.m
Modified: trunk/bibdesk/NSAttributedString_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSAttributedString_BDSKExtensions.m 2011-10-08 17:30:37 UTC
(rev 18166)
+++ trunk/bibdesk/NSAttributedString_BDSKExtensions.m 2011-10-08 22:12:07 UTC
(rev 18167)
@@ -228,7 +228,7 @@
#pragma mark Scripting support
- (NSString *)scriptingName {
- return [[self RTFFromRange:NSMakeRange(0, [self length])
documentAttributes:nil] base64String];
+ return [[self RTFFromRange:NSMakeRange(0, [self length])
documentAttributes:nil] hexString];
}
- (NSTextStorage *)scriptingRichText {
@@ -280,7 +280,7 @@
@implementation NSApplication (BDSKRichTextFormat)
- (NSAttributedString *)valueInRichTextFormatWithName:(NSString *)name {
- NSData *data = [[[NSData alloc] initWithBase64String:name] autorelease];
+ NSData *data = [[[NSData alloc] initWithHexString:name] autorelease];
return data ? [[[NSAttributedString alloc] initWithData:data
options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]
autorelease] : nil;
}
Modified: trunk/bibdesk/NSData_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSData_BDSKExtensions.h 2011-10-08 17:30:37 UTC (rev
18166)
+++ trunk/bibdesk/NSData_BDSKExtensions.h 2011-10-08 22:12:07 UTC (rev
18167)
@@ -61,6 +61,9 @@
- (id)initWithBase64String:(NSString *)base64String;
- (NSString *)base64String;
+- (id)initWithHexString:(NSString *)hexString;
+- (NSString *)hexString;
+
- (BOOL)mightBeCompressed;
- (NSData *)compressedData;
- (NSData *)decompressedData;
Modified: trunk/bibdesk/NSData_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSData_BDSKExtensions.m 2011-10-08 17:30:37 UTC (rev
18166)
+++ trunk/bibdesk/NSData_BDSKExtensions.m 2011-10-08 22:12:07 UTC (rev
18167)
@@ -133,8 +133,8 @@
// Mapping from 6 bit pattern to ASCII character.
static unsigned char base64EncodeTable[65] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-// Definition for "masked-out" areas of the base64DecodeTable mapping
-#define xx 65
+// Definition for "masked-out" areas of the base64DecodeTable and
hexDecodeTable mapping
+#define xx 0xFF
// Mapping from ASCII character to 6 bit pattern.
static unsigned char base64DecodeTable[256] =
@@ -255,6 +255,86 @@
return result;
}
+// Mapping from 4 bit pattern to ASCII character.
+static unsigned char hexEncodeTable[17] = "0123456789ABCDEF";
+
+// 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, 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,
+};
+
+- (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 / 2;
+ unsigned char *outputBuffer = (unsigned char *)malloc(outputBufferSize);
+
+ size_t i = 0, j = 0;
+ while (i < length) {
+ // Accumulate 2 valid characters (ignore everything else)
+ unsigned char accumulated[2];
+ size_t accumulateIndex = 0;
+ while (i < length) {
+ unsigned char decode = hexDecodeTable[inputBuffer[i++]];
+ if (decode != xx) {
+ accumulated[accumulateIndex] = decode;
+ accumulateIndex++;
+
+ if (accumulateIndex == 2)
+ break;
+ }
+ }
+
+ // Store the 8 bits from each of the 2 characters as 1 byte
+ outputBuffer[j++] = (accumulated[0] << 4) | (accumulated[1]);
+ }
+
+ NSData *result = [self initWithBytes:outputBuffer length:j];
+
+ free(outputBuffer);
+
+ return result;
+}
+
+- (NSString *)hexString {
+ size_t length = [self length];
+ const unsigned char *inputBuffer = (const unsigned char *)[self bytes];
+ char *outputBuffer = (char *)malloc(length * 2);
+ 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)];
+ }
+
+ NSString *result = [[[NSString alloc] initWithBytes:outputBuffer length:j
encoding:NSASCIIStringEncoding] autorelease];
+
+ free(outputBuffer);
+
+ return result;
+}
+
// gzip compression/decompression from sample code on CocoaDev
http://www.cocoadev.com/index.pl?NSDataCategory
- (BOOL)mightBeCompressed
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2dcopy2
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit