Permalink
Browse files

first commit

  • Loading branch information...
0 parents commit dfdde767a3647f496cc99eb29e978bf24b0216f0 @ohsc committed Mar 2, 2012
Showing with 4,510 additions and 0 deletions.
  1. +11 −0 .gitignore
  2. +24 −0 LICENSE
  3. +42 −0 README.md
  4. +10 −0 SBJson/JSON.h
  5. +67 −0 SBJson/NSObject+SBJson.h
  6. +58 −0 SBJson/NSObject+SBJson.m
  7. +84 −0 SBJson/SBJson.h
  8. +107 −0 SBJson/SBJsonParser.h
  9. +104 −0 SBJson/SBJsonParser.m
  10. +167 −0 SBJson/SBJsonStreamParser.h
  11. +251 −0 SBJson/SBJsonStreamParser.m
  12. +40 −0 SBJson/SBJsonStreamParserAccumulator.h
  13. +51 −0 SBJson/SBJsonStreamParserAccumulator.m
  14. +148 −0 SBJson/SBJsonStreamParserAdapter.h
  15. +171 −0 SBJson/SBJsonStreamParserAdapter.m
  16. +81 −0 SBJson/SBJsonStreamParserState.h
  17. +347 −0 SBJson/SBJsonStreamParserState.m
  18. +194 −0 SBJson/SBJsonStreamWriter.h
  19. +375 −0 SBJson/SBJsonStreamWriter.m
  20. +39 −0 SBJson/SBJsonStreamWriterAccumulator.h
  21. +56 −0 SBJson/SBJsonStreamWriterAccumulator.m
  22. +69 −0 SBJson/SBJsonStreamWriterState.h
  23. +139 −0 SBJson/SBJsonStreamWriterState.m
  24. +70 −0 SBJson/SBJsonTokeniser.h
  25. +463 −0 SBJson/SBJsonTokeniser.m
  26. +59 −0 SBJson/SBJsonUTF8Stream.h
  27. +143 −0 SBJson/SBJsonUTF8Stream.m
  28. +115 −0 SBJson/SBJsonWriter.h
  29. +113 −0 SBJson/SBJsonWriter.m
  30. +377 −0 TGJSBridge.xcodeproj/project.pbxproj
  31. +21 −0 TGJSBridge/TGAppDelegate.h
  32. +92 −0 TGJSBridge/TGAppDelegate.m
  33. +45 −0 TGJSBridge/TGJSBridge-Info.plist
  34. +14 −0 TGJSBridge/TGJSBridge-Prefix.pch
  35. +35 −0 TGJSBridge/TGJSBridge/TGJSBridge.h
  36. +85 −0 TGJSBridge/TGJSBridge/TGJSBridge.js
  37. +188 −0 TGJSBridge/TGJSBridge/TGJSBridge.m
  38. +2 −0 TGJSBridge/en.lproj/InfoPlist.strings
  39. +18 −0 TGJSBridge/main.m
  40. +35 −0 TGJSBridge/test.html
@@ -0,0 +1,11 @@
+# Mac OS X
+*.DS_Store
+
+# Xcode
+*.pbxuser
+*.mode1v3
+*.mode2v3
+*.perspectivev3
+*.xcuserstate
+project.xcworkspace
+xcuserdata
24 LICENSE
@@ -0,0 +1,24 @@
+Copyright (C) 2012 Chao Shen. 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 the author nor the names of its 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.
@@ -0,0 +1,42 @@
+TGJSBridge
+=============
+TGJSBridge is a lightweight javascript bridge to cocoa.
+TGJSBridge is iOS4 and iPad compatible and released under the BSD license(see TGJSBridge.h)
+
+Usage in objective-c
+----------------------
+### Init jsBridge
+
+ TGJSBridge *jsBridge = [TGJSBridge jsBridgeWithDelegate: webViewDelegate];
+ webView.delegate = jsBridge;
+
+
+### Send notification to javascript
+`postNotificationName:userInfo:toWebView:`
+
+### Listen notification from javascript
+
+ - (void)jsBridge:(TGJSBridge *)bridge didReceivedNotificationName:(NSString *)name userInfo:(NSDictionary *)userInfo fromWebView:(UIWebView *)webview
+
+Usage in webview
+----------------------
+### Send notification to cocoa
+
+ jsBridge.postNotification(msgName,userInfo);
+
+### Listen notification from cocoa
+
+ jsBridge.bind(msgName, function(userInfo){
+ ...
+ });
+
+### Cancel listening notification from cocoa
+
+ jsBridge.unbind('test',callbackHandler);
+
+LICENSE
+----------------------
+Copyright (c) 2012 Chao Shen(Hangzhou Jiuyan Technology Co., Ltd.). This software is licensed under the BSD License.
+
+
+
@@ -0,0 +1,10 @@
+//
+// JSON.h
+// SBJson
+//
+// Created by Stig Brautaset on 01/06/2011.
+// Copyright 2011 Stig Brautaset. All rights reserved.
+//
+
+#warning The JSON.h header is deprecated, and will disappear in a future release. Please change to include SBJson.h instead.
+#include "SBJson.h"
@@ -0,0 +1,67 @@
+/*
+ Copyright (C) 2009 Stig Brautaset. 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 the author nor the names of its 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 <Foundation/Foundation.h>
+
+#pragma mark JSON Writing
+
+/// Adds JSON generation to NSObject
+@interface NSObject (NSObject_SBJsonWriting)
+
+/**
+ @brief Encodes the receiver into a JSON string
+
+ Although defined as a category on NSObject it is only defined for NSArray and NSDictionary.
+
+ @return the receiver encoded in JSON, or nil on error.
+
+ @see @ref objc2json
+ */
+- (NSString *)JSONRepresentation;
+
+@end
+
+
+#pragma mark JSON Parsing
+
+/// Adds JSON parsing methods to NSString
+@interface NSString (NSString_SBJsonParsing)
+
+/**
+ @brief Decodes the receiver's JSON text
+
+ @return the NSDictionary or NSArray represented by the receiver, or nil on error.
+
+ @see @ref json2objc
+ */
+- (id)JSONValue;
+
+@end
+
+
@@ -0,0 +1,58 @@
+/*
+ Copyright (C) 2009 Stig Brautaset. 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 the author nor the names of its 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 "NSObject+SBJson.h"
+#import "SBJsonWriter.h"
+#import "SBJsonParser.h"
+
+@implementation NSObject (NSObject_SBJsonWriting)
+
+- (NSString *)JSONRepresentation {
+ SBJsonWriter *writer = [[[SBJsonWriter alloc] init] autorelease];
+ NSString *json = [writer stringWithObject:self];
+ if (!json)
+ NSLog(@"-JSONRepresentation failed. Error is: %@", writer.error);
+ return json;
+}
+
+@end
+
+
+
+@implementation NSString (NSString_SBJsonParsing)
+
+- (id)JSONValue {
+ SBJsonParser *parser = [[[SBJsonParser alloc] init] autorelease];
+ id repr = [parser objectWithString:self];
+ if (!repr)
+ NSLog(@"-JSONValue failed. Error is: %@", parser.error);
+ return repr;
+}
+
+@end
@@ -0,0 +1,84 @@
+/*
+ Copyright (C) 2009-2011 Stig Brautaset. 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 the author nor the names of its 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.
+ */
+
+/**
+ @page json2objc JSON to Objective-C
+
+ JSON is mapped to Objective-C types in the following way:
+
+ @li null -> NSNull
+ @li string -> NSString
+ @li array -> NSMutableArray
+ @li object -> NSMutableDictionary
+ @li true -> NSNumber's -numberWithBool:YES
+ @li false -> NSNumber's -numberWithBool:NO
+ @li integer up to 19 digits -> NSNumber's -numberWithLongLong:
+ @li all other numbers -> NSDecimalNumber
+
+ Since Objective-C doesn't have a dedicated class for boolean values,
+ these turns into NSNumber instances. However, since these are
+ initialised with the -initWithBool: method they round-trip back to JSON
+ properly. In other words, they won't silently suddenly become 0 or 1;
+ they'll be represented as 'true' and 'false' again.
+
+ As an optimisation integers up to 19 digits in length (the max length
+ for signed long long integers) turn into NSNumber instances, while
+ complex ones turn into NSDecimalNumber instances. We can thus avoid any
+ loss of precision as JSON allows ridiculously large numbers.
+
+ @page objc2json Objective-C to JSON
+
+ Objective-C types are mapped to JSON types in the following way:
+
+ @li NSNull -> null
+ @li NSString -> string
+ @li NSArray -> array
+ @li NSDictionary -> object
+ @li NSNumber's -initWithBool:YES -> true
+ @li NSNumber's -initWithBool:NO -> false
+ @li NSNumber -> number
+
+ @note In JSON the keys of an object must be strings. NSDictionary
+ keys need not be, but attempting to convert an NSDictionary with
+ non-string keys into JSON will throw an exception.
+
+ NSNumber instances created with the -numberWithBool: method are
+ converted into the JSON boolean "true" and "false" values, and vice
+ versa. Any other NSNumber instances are converted to a JSON number the
+ way you would expect.
+
+ */
+
+#import "SBJsonParser.h"
+#import "SBJsonWriter.h"
+#import "SBJsonStreamParser.h"
+#import "SBJsonStreamParserAdapter.h"
+#import "SBJsonStreamWriter.h"
+#import "NSObject+SBJson.h"
+
Oops, something went wrong.

0 comments on commit dfdde76

Please sign in to comment.