111 lines
2.9 KiB
Objective-C
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
|