fbneo/projectfiles/xcode/Emulator/Controllers/FBLogViewerController.m

111 lines
2.9 KiB
Objective-C

// Copyright (c) Akop Karapetyan
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "FBLogViewerController.h"
#import "NSWindowController+Core.h"
#import "AppDelegate.h"
@interface NSString (LogFormatter)
- (NSMutableAttributedString *) applyFormat;
@end
@implementation FBLogViewerController
{
NSMutableAttributedString *logContent;
}
- (id) init
{
if (self = [super initWithWindowNibName:@"LogViewer"]) {
logContent = [NSMutableAttributedString new];
}
return self;
}
- (void) awakeFromNib
{
[self.runloop addObserver:self];
}
- (void) dealloc
{
[self.runloop removeObserver:self];
}
#pragma mark - NSWindowController
- (void) windowDidLoad
{
[super windowDidLoad];
[logContent appendAttributedString:[self.runloop.log applyFormat]];
textView.textStorage.attributedString = logContent;
[textView scrollToEndOfDocument:self];
}
#pragma mark - FBMainThreadDelegate
- (void) logDidUpdate:(NSString *) message
{
[logContent appendAttributedString:[message applyFormat]];
textView.textStorage.attributedString = logContent;
if (self.window.visible)
[textView scrollToEndOfDocument:self];
}
- (void) logDidClear
{
[logContent setAttributedString:[NSAttributedString new]];
}
@end
#pragma mark - NSString (LogFormatter)
@implementation NSString (LogFormatter)
- (NSMutableAttributedString *) applyFormat
{
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:self];
[str addAttribute:NSFontAttributeName
value:[NSFont fontWithName:@"Menlo" size:11]
range:NSMakeRange(0, str.length)];
NSRegularExpression *rx = [NSRegularExpression regularExpressionWithPattern:@"^!.*$"
options:NSRegularExpressionAnchorsMatchLines
error:NULL];
NSArray *matches = [rx matchesInString:self
options:0
range:NSMakeRange(0, self.length)];
for (NSTextCheckingResult *match in matches) {
[str addAttribute:NSForegroundColorAttributeName
value:NSColor.redColor
range:match.range];
[str addAttribute:NSFontAttributeName
value:[NSFont fontWithName:@"Menlo-Bold" size:11]
range:match.range];
}
return str;
}
@end