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

Reply via email to