Hyang-Ah Hana Kim submitted this change.
example/ivy/ios: format code according to Google style guide
Change-Id: I4cef2b60756b3318c123b832bcdb719d2d45fadc
Reviewed-on: https://go-review.googlesource.com/c/mobile/+/360607
Reviewed-by: Rob Pike <r...@golang.org>
Reviewed-by: Hyang-Ah Hana Kim <hya...@gmail.com>
Trust: Ian Lance Taylor <ia...@golang.org>
Run-TryBot: Hyang-Ah Hana Kim <hya...@gmail.com>
TryBot-Result: Go Bot <go...@golang.org>
---
M example/ivy/ios/ivy/IvyController.m
M example/ivy/ios/ivy/DocsController.h
M example/ivy/ios/ivy/IvyController.h
M example/ivy/ios/ivy/Suggestion.m
M example/ivy/ios/ivy/AppDelegate.h
M example/ivy/ios/ivy/DocsController.m
M example/ivy/ios/ivy/Suggestion.h
M example/ivy/ios/ivy/AppDelegate.m
8 files changed, 349 insertions(+), 389 deletions(-)
diff --git a/example/ivy/ios/ivy/AppDelegate.h b/example/ivy/ios/ivy/AppDelegate.h
index 3901653..1d6dd8c 100644
--- a/example/ivy/ios/ivy/AppDelegate.h
+++ b/example/ivy/ios/ivy/AppDelegate.h
@@ -3,12 +3,12 @@
// license that can be found in the LICENSE file.
#import <WebKit/WebKit.h>
-#import "Suggestion.h"
#import "IvyController.h"
+#import "Suggestion.h"
-@interface AppDelegate
- : UIResponder <UIApplicationDelegate, UITextFieldDelegate, WKUIDelegate>
+@interface AppDelegate : UIResponder <UIApplicationDelegate, UITextFieldDelegate, WKUIDelegate>
-@property (strong, nonatomic) UIWindow *window;
+@property(strong, nonatomic) UIWindow *window;
@end
+
diff --git a/example/ivy/ios/ivy/AppDelegate.m b/example/ivy/ios/ivy/AppDelegate.m
index 41221c6..4e14d36 100644
--- a/example/ivy/ios/ivy/AppDelegate.m
+++ b/example/ivy/ios/ivy/AppDelegate.m
@@ -12,29 +12,24 @@
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
- didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
- return YES;
+ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ return YES;
}
-- (void)applicationWillResignActive:(UIApplication *)application
-{
+- (void)applicationWillResignActive:(UIApplication *)application {
}
-- (void)applicationDidEnterBackground:(UIApplication *)application
-{
+- (void)applicationDidEnterBackground:(UIApplication *)application {
}
-- (void)applicationWillEnterForeground:(UIApplication *)application
-{
+- (void)applicationWillEnterForeground:(UIApplication *)application {
}
-- (void)applicationDidBecomeActive:(UIApplication *)application
-{
+- (void)applicationDidBecomeActive:(UIApplication *)application {
}
-- (void)applicationWillTerminate:(UIApplication *)application
-{
+- (void)applicationWillTerminate:(UIApplication *)application {
}
@end
+
diff --git a/example/ivy/ios/ivy/DocsController.h b/example/ivy/ios/ivy/DocsController.h
index beb2685..964b5c9 100644
--- a/example/ivy/ios/ivy/DocsController.h
+++ b/example/ivy/ios/ivy/DocsController.h
@@ -8,3 +8,4 @@
@interface DocsController : UIViewController
@end
+
diff --git a/example/ivy/ios/ivy/DocsController.m b/example/ivy/ios/ivy/DocsController.m
index c9c57cf..8e35711 100644
--- a/example/ivy/ios/ivy/DocsController.m
+++ b/example/ivy/ios/ivy/DocsController.m
@@ -6,36 +6,37 @@
#import "mobile/Mobile.h"
@interface DocsController () {
- WKWebView *webView;
+ WKWebView *webView;
}
@end
@implementation DocsController
-- (void)viewDidLoad
-{
- [super viewDidLoad];
- webView = (WKWebView *)[self.view viewWithTag:11];
- NSString *helpHTML = MobileHelp();
- NSRange r = [helpHTML rangeOfString:@"<head>"];
- NSString *html = [helpHTML substringToIndex:r.location];
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ webView = (WKWebView *)[self.view viewWithTag:11];
+ NSString *helpHTML = MobileHelp();
+ NSRange r = [helpHTML rangeOfString:@"<head>"];
+ NSString *html = [helpHTML substringToIndex:r.location];
- // With the following meta tag, WKWebView displays the fonts more nicely.
- NSString *meta = @"<meta name='viewport' \
- content='width=device-width, initial-scale=1.0, maximum-scale=1.0, \
- minimum-scale=1.0, user-scalable=no'>";
+ // With the following meta tag, WKWebView displays the fonts more nicely.
+ NSString *meta = @"<meta name='viewport' \
+ content='width=device-width, "
+ @"initial-scale=1.0, maximum-scale=1.0, \
+ minimum-scale=1.0, "
+ @"user-scalable=no'>";
- html = [html stringByAppendingString:@"<head>"];
- html = [html stringByAppendingString:meta];
- html = [html stringByAppendingString:[helpHTML substringFromIndex:r.location]];
+ html = [html stringByAppendingString:@"<head>"];
+ html = [html stringByAppendingString:meta];
+ html = [html stringByAppendingString:[helpHTML substringFromIndex:r.location]];
- [webView loadHTMLString:html baseURL:NULL];
+ [webView loadHTMLString:html baseURL:NULL];
}
-- (void)didReceiveMemoryWarning
-{
- [super didReceiveMemoryWarning];
+- (void)didReceiveMemoryWarning {
+ [super didReceiveMemoryWarning];
}
@end
+
diff --git a/example/ivy/ios/ivy/IvyController.h b/example/ivy/ios/ivy/IvyController.h
index e76bf2f..ac87362 100644
--- a/example/ivy/ios/ivy/IvyController.h
+++ b/example/ivy/ios/ivy/IvyController.h
@@ -2,25 +2,24 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-#import <WebKit/WebKit.h>
#import <UIKit/UIKit.h>
+#import <WebKit/WebKit.h>
#import "Suggestion.h"
// IvyController displays the main app view.
-@interface IvyController
- : UIViewController <UITextFieldDelegate, WKUIDelegate,
- SuggestionDelegate>
+@interface IvyController : UIViewController <UITextFieldDelegate, WKUIDelegate, SuggestionDelegate>
-@property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraint;
+@property(weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraint;
// A text input field coupled to an output "tape", rendered with a WKWebView.
-@property (weak, nonatomic) IBOutlet UITextField *input;
-@property (strong, nonatomic) Suggestion *suggestionView;
-@property (weak, nonatomic) IBOutlet WKWebView *tape;
-@property (weak, nonatomic) IBOutlet UIButton *okButton;
+@property(weak, nonatomic) IBOutlet UITextField *input;
+@property(strong, nonatomic) Suggestion *suggestionView;
+@property(weak, nonatomic) IBOutlet WKWebView *tape;
+@property(weak, nonatomic) IBOutlet UIButton *okButton;
- (IBAction)clear:(id)sender;
- (IBAction)demo:(id)sender;
- (IBAction)okPressed:(id)sender;
@end
+
diff --git a/example/ivy/ios/ivy/IvyController.m b/example/ivy/ios/ivy/IvyController.m
index 654961b..e86f9a7 100644
--- a/example/ivy/ios/ivy/IvyController.m
+++ b/example/ivy/ios/ivy/IvyController.m
@@ -10,225 +10,207 @@
@end
@implementation IvyController {
- NSArray *demo_lines;
- int demo_index;
+ NSArray *demo_lines;
+ int demo_index;
}
-- (void)viewDidLoad
-{
- [super viewDidLoad];
-
- self.input.delegate = self;
- self.input.autocorrectionType = UITextAutocorrectionTypeNo;
- self.input.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
-
- self.suggestionView = [[Suggestion alloc] init];
- self.suggestionView.delegate = self;
-
- self.tape.UIDelegate = self;
- self->demo_lines=NULL;
-
- [self.okButton setTitle:@"" forState:UIControlStateNormal];
- [self.okButton setHidden:TRUE];
-
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(textDidChange:)
- name:UITextFieldTextDidChangeNotification
- object:self.input];
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(keyboardWillShow:)
- name:UIKeyboardWillShowNotification
- object:nil];
- [[NSNotificationCenter defaultCenter]
- addObserver:self
- selector:@selector(keyboardWillHide:)
- name:UIKeyboardWillHideNotification
- object:nil];
+- (void)viewDidLoad {
+ [super viewDidLoad];
- [self.input becomeFirstResponder];
- [self clear:NULL];
+ self.input.delegate = self;
+ self.input.autocorrectionType = UITextAutocorrectionTypeNo;
+ self.input.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+
+ self.suggestionView = [[Suggestion alloc] init];
+ self.suggestionView.delegate = self;
+
+ self.tape.UIDelegate = self;
+ self->demo_lines = NULL;
+
+ [self.okButton setTitle:@"" forState:UIControlStateNormal];
+ [self.okButton setHidden:TRUE];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(textDidChange:)
+ name:UITextFieldTextDidChangeNotification
+ object:self.input];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(keyboardWillShow:)
+ name:UIKeyboardWillShowNotification
+ object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(keyboardWillHide:)
+ name:UIKeyboardWillHideNotification
+ object:nil];
+
+ [self.input becomeFirstResponder];
+ [self clear:NULL];
}
-- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
-{
- if ([textField isEqual:self.input]) {
- textField.inputAccessoryView = self.suggestionView;
- textField.autocorrectionType = UITextAutocorrectionTypeNo;
- [textField reloadInputViews];
- }
- return YES;
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
+ if ([textField isEqual:self.input]) {
+ textField.inputAccessoryView = self.suggestionView;
+ textField.autocorrectionType = UITextAutocorrectionTypeNo;
+ [textField reloadInputViews];
+ }
+ return YES;
}
-- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
-{
- if ([textField isEqual:self.input]) {
- textField.inputAccessoryView = nil;
- [textField reloadInputViews];
- }
- return YES;
+- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
+ if ([textField isEqual:self.input]) {
+ textField.inputAccessoryView = nil;
+ [textField reloadInputViews];
+ }
+ return YES;
}
-- (void)textDidChange:(NSNotification *)notif
-{
- [self.suggestionView suggestFor:self.input.text];
+- (void)textDidChange:(NSNotification *)notif {
+ [self.suggestionView suggestFor:self.input.text];
}
-- (void)suggestionReplace:(NSString *)text
-{
- self.input.text = text;
- [self.suggestionView suggestFor:text];
+- (void)suggestionReplace:(NSString *)text {
+ self.input.text = text;
+ [self.suggestionView suggestFor:text];
}
-- (void)keyboardWillShow:(NSNotification *)aNotification
-{
- // Move the input text field up, as the keyboard has taken some of the screen.
- NSDictionary *info = [aNotification userInfo];
- CGRect kbFrame =
- [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
- NSNumber *duration =
- [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
+- (void)keyboardWillShow:(NSNotification *)aNotification {
+ // Move the input text field up, as the keyboard has taken some of the screen.
+ NSDictionary *info = [aNotification userInfo];
+ CGRect kbFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
+ NSNumber *duration = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
- UIViewAnimationCurve keyboardTransitionAnimationCurve;
- [[info valueForKey:UIKeyboardAnimationCurveUserInfoKey]
- getValue:&keyboardTransitionAnimationCurve];
- UIViewAnimationOptions options =
- keyboardTransitionAnimationCurve | keyboardTransitionAnimationCurve << 16;
-
- [UIView animateWithDuration:duration.floatValue
- delay:0
- options:options
- animations:^{
+ UIViewAnimationCurve keyboardTransitionAnimationCurve;
+ [[info valueForKey:UIKeyboardAnimationCurveUserInfoKey]
+ getValue:&keyboardTransitionAnimationCurve];
+ UIViewAnimationOptions options =
+ keyboardTransitionAnimationCurve | keyboardTransitionAnimationCurve << 16;
+
+ [UIView animateWithDuration:duration.floatValue
+ delay:0
+ options:options
+ animations:^{
self.bottomConstraint.constant = 0 - kbFrame.size.height;
[self.view layoutIfNeeded];
- }
- completion:^(BOOL finished) {
+ }
+ completion:^(BOOL finished) {
[self scrollTapeToBottom];
- }];
+ }];
}
-- (void)keyboardWillHide:(NSNotification *)aNotification
-{
- // Move the input text field back down.
- NSDictionary *info = [aNotification userInfo];
-
- NSNumber *duration =
- [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
+- (void)keyboardWillHide:(NSNotification *)aNotification {
+ // Move the input text field back down.
+ NSDictionary *info = [aNotification userInfo];
- UIViewAnimationCurve keyboardTransitionAnimationCurve;
- [[info valueForKey:UIKeyboardAnimationCurveUserInfoKey]
- getValue:&keyboardTransitionAnimationCurve];
- UIViewAnimationOptions options =
- keyboardTransitionAnimationCurve | keyboardTransitionAnimationCurve << 16;
-
- int offset = self.input.inputAccessoryView != NULL ? self.suggestionView.frame.size.height : 0;
-
- [UIView animateWithDuration:duration.floatValue
- delay:0
- options:options
- animations:^{
+ NSNumber *duration = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
+
+ UIViewAnimationCurve keyboardTransitionAnimationCurve;
+ [[info valueForKey:UIKeyboardAnimationCurveUserInfoKey]
+ getValue:&keyboardTransitionAnimationCurve];
+ UIViewAnimationOptions options =
+ keyboardTransitionAnimationCurve | keyboardTransitionAnimationCurve << 16;
+
+ int offset = self.input.inputAccessoryView != NULL ? self.suggestionView.frame.size.height : 0;
+
+ [UIView animateWithDuration:duration.floatValue
+ delay:0
+ options:options
+ animations:^{
self.bottomConstraint.constant = 0 - offset;
[self.view layoutIfNeeded];
- }
- completion:^(BOOL finished) {
+ }
+ completion:^(BOOL finished) {
[self scrollTapeToBottom];
- }];
+ }];
}
-- (void)enterPressed
-{
- NSString *text = self.input.text;
- if ([text isEqual:@""]){
- if(self->demo_lines==NULL){
- return;
- }
- while (demo_index < self->demo_lines.count) {
- NSString *line = self->demo_lines[self->demo_index++];
- if([line hasPrefix:@"#"]) {
- [self appendTape:line tag:@"comment"];
- } else {
- self.input.text = line;
- break;
- }
- }
- } else if (self->demo_lines!=NULL && [text isEqual:@"quit"]) {
- [self unloadDemo];
- } else {
- [self appendTape:text tag:@"expr"];
- NSString *expr = [text stringByAppendingString:@"\n"];
- NSError *err;
- NSString *result = MobileEval(expr, &err);
- if (err != nil) {
- result = err.description;
- }
- result = [result
- stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
- result =
- [result stringByReplacingOccurrencesOfString:@"<" withString:@"<"];
- result =
- [result stringByReplacingOccurrencesOfString:@">" withString:@">"];
- NSMutableArray *lines =
- (NSMutableArray *)[result componentsSeparatedByString:@"\n"];
- for (NSMutableString *line in lines) {
- if ([line hasPrefix:@"#"])
- [self appendTape:line tag:@"comment"];
- else
- [self appendTape:line tag:@"result"];
- }
- self.input.text = @"";
+- (void)enterPressed {
+ NSString *text = self.input.text;
+ if ([text isEqual:@""]) {
+ if (self->demo_lines == NULL) {
+ return;
}
- [self.input becomeFirstResponder];
-}
-
-- (void)scrollTapeToBottom
-{
- NSString *scroll = @"window.scrollBy(0, document.body.offsetHeight);";
- [self.tape evaluateJavaScript:scroll completionHandler:nil];
-}
-
-- (void)appendTape:(NSString *)text tag:(NSString *)tag
-{
- NSString *injectSrc = @"appendDiv('%@','%@');";
- NSString *runToInject = [NSString stringWithFormat:injectSrc, text, tag];
- [self.tape evaluateJavaScript:runToInject completionHandler:nil];
- [self scrollTapeToBottom];
-}
-
-- (void)loadDemo
-{
- [self.okButton setHidden:FALSE];
- NSString *text = DemoText();
-
- self->demo_lines = [text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
- self->demo_index = 0;
+ while (demo_index < self->demo_lines.count) {
+ NSString *line = self->demo_lines[self->demo_index++];
+ if ([line hasPrefix:@"#"]) {
+ [self appendTape:line tag:@"comment"];
+ } else {
+ self.input.text = line;
+ break;
+ }
+ }
+ } else if (self->demo_lines != NULL && [text isEqual:@"quit"]) {
+ [self unloadDemo];
+ } else {
+ [self appendTape:text tag:@"expr"];
+ NSString *expr = [text stringByAppendingString:@"\n"];
+ NSError *err;
+ NSString *result = MobileEval(expr, &err);
+ if (err != nil) {
+ result = err.description;
+ }
+ result = [result stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
+ result = [result stringByReplacingOccurrencesOfString:@"<" withString:@"<"];
+ result = [result stringByReplacingOccurrencesOfString:@">" withString:@">"];
+ NSMutableArray *lines = (NSMutableArray *)[result componentsSeparatedByString:@"\n"];
+ for (NSMutableString *line in lines) {
+ if ([line hasPrefix:@"#"])
+ [self appendTape:line tag:@"comment"];
+ else
+ [self appendTape:line tag:@"result"];
+ }
self.input.text = @"";
- self.input.enablesReturnKeyAutomatically=TRUE;
- [self enterPressed];
+ }
+ [self.input becomeFirstResponder];
}
-- (void)unloadDemo
-{
- [self.okButton setHidden:TRUE];
- self.input.enablesReturnKeyAutomatically=FALSE;
- self->demo_lines=NULL;
- self.input.text = @"";
+
+- (void)scrollTapeToBottom {
+ NSString *scroll = @"window.scrollBy(0, document.body.offsetHeight);";
+ [self.tape evaluateJavaScript:scroll completionHandler:nil];
+}
+
+- (void)appendTape:(NSString *)text tag:(NSString *)tag {
+ NSString *injectSrc = @"appendDiv('%@','%@');";
+ NSString *runToInject = [NSString stringWithFormat:injectSrc, text, tag];
+ [self.tape evaluateJavaScript:runToInject completionHandler:nil];
+ [self scrollTapeToBottom];
+}
+
+- (void)loadDemo {
+ [self.okButton setHidden:FALSE];
+ NSString *text = DemoText();
+
+ self->demo_lines =
+ [text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
+ self->demo_index = 0;
+ self.input.text = @"";
+ self.input.enablesReturnKeyAutomatically = TRUE;
+ [self enterPressed];
+}
+- (void)unloadDemo {
+ [self.okButton setHidden:TRUE];
+ self.input.enablesReturnKeyAutomatically = FALSE;
+ self->demo_lines = NULL;
+ self.input.text = @"";
}
- (IBAction)okPressed:(id)sender {
- [self enterPressed];
+ [self enterPressed];
}
- (IBAction)demo:(id)sender {
- if (self->demo_lines) { // demo already running
- [self enterPressed];
- } else {
- [self loadDemo];
- }
+ if (self->demo_lines) { // demo already running
+ [self enterPressed];
+ } else {
+ [self loadDemo];
+ }
}
- (IBAction)clear:(id)sender {
- [self unloadDemo];
- NSString *string = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]
- pathForResource:@"tape" ofType:@"html"] encoding:NSUTF8StringEncoding error:NULL];
- [self.tape loadHTMLString:string baseURL:NULL];
+ [self unloadDemo];
+ NSString *string = [NSString
+ stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tape" ofType:@"html"]
+ encoding:NSUTF8StringEncoding
+ error:NULL];
+ [self.tape loadHTMLString:string baseURL:NULL];
}
@end
+
diff --git a/example/ivy/ios/ivy/Suggestion.h b/example/ivy/ios/ivy/Suggestion.h
index fa1efab..eb74e55 100644
--- a/example/ivy/ios/ivy/Suggestion.h
+++ b/example/ivy/ios/ivy/Suggestion.h
@@ -16,6 +16,7 @@
- (instancetype)initWithFrame:(CGRect)frame;
- (void)suggestFor:(NSString *)text;
-@property (weak) id<SuggestionDelegate> delegate;
+@property(weak) id<SuggestionDelegate> delegate;
@end
+
diff --git a/example/ivy/ios/ivy/Suggestion.m b/example/ivy/ios/ivy/Suggestion.m
index 193c846..23a762a 100644
--- a/example/ivy/ios/ivy/Suggestion.m
+++ b/example/ivy/ios/ivy/Suggestion.m
@@ -7,192 +7,158 @@
#define maxSuggestions 4 + 3
@implementation Suggestion {
- NSString *text;
- NSRange range;
+ NSString *text;
+ NSRange range;
- NSMutableOrderedSet *options;
- NSMutableArray *buttons;
- NSArray *possibleSuggestions;
- NSCharacterSet *breakingChars;
+ NSMutableOrderedSet *options;
+ NSMutableArray *buttons;
+ NSArray *possibleSuggestions;
+ NSCharacterSet *breakingChars;
}
-- (instancetype)init
-{
- CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
- self = [self initWithFrame:CGRectMake(0.0f, 0.0f, screenWidth, 36.0f)];
- return self;
+- (instancetype)init {
+ CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
+ self = [self initWithFrame:CGRectMake(0.0f, 0.0f, screenWidth, 36.0f)];
+ return self;
}
-- (instancetype)initWithFrame:(CGRect)frame
-{
- self = [super initWithFrame:frame inputViewStyle:UIInputViewStyleKeyboard];
- if (self) {
- possibleSuggestions = @[
- @")base ",
- @")debug ",
- @")format ",
- @")maxdigits ",
- @")op ",
- @")origin ",
- @")prec ",
- @")prompt ",
- @")seed ",
- @"cos ",
- @"iota ",
- @"log ",
- @"max ",
- @"min ",
- @"pi ",
- @"rho ",
- @"sin ",
- @"sqrt ",
- @"tan "
- ];
- breakingChars =
- [NSCharacterSet characterSetWithCharactersInString:@"/+-*,^|= "];
- options = [[NSMutableOrderedSet alloc] initWithCapacity:maxSuggestions];
- buttons = [[NSMutableArray alloc] init];
- self.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.05f];
- [self setSuggestions:nil];
- }
- return self;
+- (instancetype)initWithFrame:(CGRect)frame {
+ self = [super initWithFrame:frame inputViewStyle:UIInputViewStyleKeyboard];
+ if (self) {
+ possibleSuggestions = @[
+ @")base ", @")debug ", @")format ", @")maxdigits ", @")op ", @")origin ", @")prec ",
+ @")prompt ", @")seed ", @"cos ", @"iota ", @"log ", @"max ", @"min ", @"pi ", @"rho ",
+ @"sin ", @"sqrt ", @"tan "
+ ];
+ breakingChars = [NSCharacterSet characterSetWithCharactersInString:@"/+-*,^|= "];
+ options = [[NSMutableOrderedSet alloc] initWithCapacity:maxSuggestions];
+ buttons = [[NSMutableArray alloc] init];
+ self.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.05f];
+ [self setSuggestions:nil];
+ }
+ return self;
}
-- (void)suggestFor:(NSString *)t
-{
- text = t;
- range =
- [text rangeOfCharacterFromSet:breakingChars options:NSBackwardsSearch];
- if (range.location == NSNotFound) {
- range.location = 0;
- range.length = text.length;
+- (void)suggestFor:(NSString *)t {
+ text = t;
+ range = [text rangeOfCharacterFromSet:breakingChars options:NSBackwardsSearch];
+ if (range.location == NSNotFound) {
+ range.location = 0;
+ range.length = text.length;
+ } else {
+ if (range.location > 0 && [text characterAtIndex:range.location - 1] == ')') {
+ // Special case for suggestions that start with ") ".
+ range.location -= 1;
+ range.length++;
} else {
- if (range.location > 0 &&
- [text characterAtIndex:range.location - 1] == ')') {
- // Special case for suggestions that start with ") ".
- range.location -= 1;
- range.length++;
- } else {
- range.location += 1;
- range.length -= 0;
- }
+ range.location += 1;
+ range.length -= 0;
}
- range.length = text.length - range.location;
- if (range.length == 0) {
- [self setSuggestions:nil];
- } else {
- NSString *prefix = [text substringWithRange:range];
- // TODO: make not so slow.
- NSArray *suggestions = @[];
- for (NSString *suggestion in possibleSuggestions) {
- if ([suggestion hasPrefix:prefix] && prefix.length < suggestion.length) {
- suggestions = [suggestions arrayByAddingObject:suggestion];
- }
- }
- if (suggestions.count > 3) {
- suggestions = nil;
- }
- [self setSuggestions:suggestions];
+ }
+ range.length = text.length - range.location;
+ if (range.length == 0) {
+ [self setSuggestions:nil];
+ } else {
+ NSString *prefix = [text substringWithRange:range];
+ // TODO: make not so slow.
+ NSArray *suggestions = @[];
+ for (NSString *suggestion in possibleSuggestions) {
+ if ([suggestion hasPrefix:prefix] && prefix.length < suggestion.length) {
+ suggestions = [suggestions arrayByAddingObject:suggestion];
+ }
}
- [self setNeedsLayout];
+ if (suggestions.count > 3) {
+ suggestions = nil;
+ }
+ [self setSuggestions:suggestions];
+ }
+ [self setNeedsLayout];
}
-- (void)setSuggestions:(NSArray *)suggestions
-{
- [options removeAllObjects];
+- (void)setSuggestions:(NSArray *)suggestions {
+ [options removeAllObjects];
- if ([suggestions respondsToSelector:
- @selector(countByEnumeratingWithState:objects:count:)]) {
- for (NSString *suggestion in suggestions) {
- if (options.count < maxSuggestions) {
- [options addObject:suggestion];
- } else {
- break;
- }
- }
+ if ([suggestions respondsToSelector:@selector(countByEnumeratingWithState:objects:count:)]) {
+ for (NSString *suggestion in suggestions) {
+ if (options.count < maxSuggestions) {
+ [options addObject:suggestion];
+ } else {
+ break;
+ }
}
+ }
}
-- (void)layoutSubview:(NSString *)t at:(CGFloat)x width:(CGFloat)w
-{
- UIButton *b = [[UIButton alloc]
- initWithFrame:CGRectMake(x, 0.0f, w, self.bounds.size.height)];
- [b setTitle:t forState:UIControlStateNormal];
- b.titleLabel.adjustsFontSizeToFitWidth = YES;
- b.titleLabel.textAlignment = NSTextAlignmentCenter;
- [b setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- [b addTarget:self
- action:@selector(buttonTouched:)
- forControlEvents:UIControlEventTouchUpInside];
- [self addSubview:b];
+- (void)layoutSubview:(NSString *)t at:(CGFloat)x width:(CGFloat)w {
+ UIButton *b = [[UIButton alloc] initWithFrame:CGRectMake(x, 0.0f, w, self.bounds.size.height)];
+ [b setTitle:t forState:UIControlStateNormal];
+ b.titleLabel.adjustsFontSizeToFitWidth = YES;
+ b.titleLabel.textAlignment = NSTextAlignmentCenter;
+ [b setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+ [b addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside];
+ [self addSubview:b];
- if (x > 0) {
- UIView *line = [[UIView alloc]
- initWithFrame:CGRectMake(0.0f, 0.0f, 0.5f, self.bounds.size.height)];
- line.backgroundColor =
- [UIColor colorWithRed:0.984 green:0.977 blue:0.81 alpha:1.0];
- [b addSubview:line];
- }
+ if (x > 0) {
+ UIView *line =
+ [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 0.5f, self.bounds.size.height)];
+ line.backgroundColor = [UIColor colorWithRed:0.984 green:0.977 blue:0.81 alpha:1.0];
+ [b addSubview:line];
+ }
- [buttons addObject:b];
+ [buttons addObject:b];
}
-- (void)layoutSubviews
-{
- for (UIView *subview in buttons) {
- [subview removeFromSuperview];
- }
- [buttons removeAllObjects];
+- (void)layoutSubviews {
+ for (UIView *subview in buttons) {
+ [subview removeFromSuperview];
+ }
+ [buttons removeAllObjects];
- CGFloat symbolWidth = 40.0f;
- [self layoutSubview:@"+" at:0 * symbolWidth width:symbolWidth];
- [self layoutSubview:@"-" at:1 * symbolWidth width:symbolWidth];
- [self layoutSubview:@"*" at:2 * symbolWidth width:symbolWidth];
- [self layoutSubview:@"/" at:3 * symbolWidth width:symbolWidth];
+ CGFloat symbolWidth = 40.0f;
+ [self layoutSubview:@"+" at:0 * symbolWidth width:symbolWidth];
+ [self layoutSubview:@"-" at:1 * symbolWidth width:symbolWidth];
+ [self layoutSubview:@"*" at:2 * symbolWidth width:symbolWidth];
+ [self layoutSubview:@"/" at:3 * symbolWidth width:symbolWidth];
- for (int i = 0; i < options.count; i++) {
- NSString *suggestion = options[i];
- CGFloat width =
- (self.bounds.size.width - (4 * symbolWidth)) / options.count;
- CGFloat x = (4 * symbolWidth) + (i * width);
- [self layoutSubview:suggestion at:x width:width];
- }
+ for (int i = 0; i < options.count; i++) {
+ NSString *suggestion = options[i];
+ CGFloat width = (self.bounds.size.width - (4 * symbolWidth)) / options.count;
+ CGFloat x = (4 * symbolWidth) + (i * width);
+ [self layoutSubview:suggestion at:x width:width];
+ }
}
-- (void)buttonTouched:(UIButton *)button
-{
- NSTimeInterval duration = 0.08f;
- [UIView
- animateWithDuration:duration
- animations:^{
- [button setBackgroundColor:[UIColor whiteColor]];
+- (void)buttonTouched:(UIButton *)button {
+ NSTimeInterval duration = 0.08f;
+ [UIView animateWithDuration:duration
+ animations:^{
+ [button setBackgroundColor:[UIColor whiteColor]];
- if ([self.delegate
- respondsToSelector:@selector(suggestionReplace:)]) {
- NSString *t = self->text;
- if (t == nil) {
- t = @"";
- }
- if (button.currentTitle.length == 1) {
- // Special case for +, -, *, /.
- t = [t stringByAppendingString:button.currentTitle];
- } else {
- t = [self->text stringByReplacingCharactersInRange:
- self->range withString:button.currentTitle];
- }
- [self performSelector:@selector(suggestionReplace:)
- withObject:t
- afterDelay:duration * 0.8f];
- }
- [button performSelector:@selector(setBackgroundColor:)
- withObject:[UIColor clearColor]
- afterDelay:duration];
- }];
+ if ([self.delegate respondsToSelector:@selector(suggestionReplace:)]) {
+ NSString *t = self->text;
+ if (t == nil) {
+ t = @"";
+ }
+ if (button.currentTitle.length == 1) {
+ // Special case for +, -, *, /.
+ t = [t stringByAppendingString:button.currentTitle];
+ } else {
+ t = [self->text stringByReplacingCharactersInRange:self->range
+ withString:button.currentTitle];
+ }
+ [self performSelector:@selector(suggestionReplace:)
+ withObject:t
+ afterDelay:duration * 0.8f];
+ }
+ [button performSelector:@selector(setBackgroundColor:)
+ withObject:[UIColor clearColor]
+ afterDelay:duration];
+ }];
}
-- (void)suggestionReplace:(NSString *)t
-{
- [self.delegate performSelector:@selector(suggestionReplace:) withObject:t];
+- (void)suggestionReplace:(NSString *)t {
+ [self.delegate performSelector:@selector(suggestionReplace:) withObject:t];
}
@end
+
To view, visit change 360607. To unsubscribe, or for help writing mail filters, visit settings.