summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm')
-rw-r--r--Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm175
1 files changed, 0 insertions, 175 deletions
diff --git a/Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm b/Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm
deleted file mode 100644
index 2469da8..0000000
--- a/Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2005, 2007, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE AND ITS 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 APPLE OR ITS 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 "WebNSAttributedStringExtras.h"
-
-#import "DOMRangeInternal.h"
-#import "WebDataSourcePrivate.h"
-#import "WebFrame.h"
-#import "WebFrameInternal.h"
-#import "WebTypesInternal.h"
-#import <WebCore/BlockExceptions.h>
-#import <WebCore/ColorMac.h>
-#import <WebCore/CSSHelper.h>
-#import <WebCore/Document.h>
-#import <WebCore/Element.h>
-#import <WebCore/Frame.h>
-#import <WebCore/FrameLoader.h>
-#import <WebCore/HTMLNames.h>
-#import <WebCore/Image.h>
-#import <WebCore/InlineTextBox.h>
-#import <WebCore/Range.h>
-#import <WebCore/RenderImage.h>
-#import <WebCore/RenderListItem.h>
-#import <WebCore/RenderObject.h>
-#import <WebCore/RenderStyle.h>
-#import <WebCore/RenderText.h>
-#import <WebCore/SimpleFontData.h>
-#import <WebCore/Text.h>
-#import <WebCore/TextIterator.h>
-
-using namespace WebCore;
-using namespace HTMLNames;
-
-struct ListItemInfo {
- unsigned start;
- unsigned end;
-};
-
-static NSFileWrapper *fileWrapperForElement(Element* e)
-{
- NSFileWrapper *wrapper = nil;
- BEGIN_BLOCK_OBJC_EXCEPTIONS;
-
- const AtomicString& attr = e->getAttribute(srcAttr);
- if (!attr.isEmpty()) {
- NSURL *URL = e->document()->completeURL(attr);
- wrapper = [[kit(e->document()->frame()) _dataSource] _fileWrapperForURL:URL];
- }
- if (!wrapper) {
- RenderImage* renderer = toRenderImage(e->renderer());
- if (renderer->cachedImage() && !renderer->cachedImage()->errorOccurred()) {
- wrapper = [[NSFileWrapper alloc] initRegularFileWithContents:(NSData *)(renderer->cachedImage()->image()->getTIFFRepresentation())];
- [wrapper setPreferredFilename:@"image.tiff"];
- [wrapper autorelease];
- }
- }
-
- return wrapper;
-
- END_BLOCK_OBJC_EXCEPTIONS;
-
- return nil;
-}
-
-@implementation NSAttributedString (WebKitExtras)
-
-- (NSAttributedString *)_web_attributedStringByStrippingAttachmentCharacters
-{
- // This code was originally copied from NSTextView
- NSRange attachmentRange;
- NSString *originalString = [self string];
- static NSString *attachmentCharString = nil;
-
- if (!attachmentCharString) {
- unichar chars[2];
- if (!attachmentCharString) {
- chars[0] = NSAttachmentCharacter;
- chars[1] = 0;
- attachmentCharString = [[NSString alloc] initWithCharacters:chars length:1];
- }
- }
-
- attachmentRange = [originalString rangeOfString:attachmentCharString];
- if (attachmentRange.location != NSNotFound && attachmentRange.length > 0) {
- NSMutableAttributedString *newAttributedString = [[self mutableCopyWithZone:NULL] autorelease];
-
- while (attachmentRange.location != NSNotFound && attachmentRange.length > 0) {
- [newAttributedString replaceCharactersInRange:attachmentRange withString:@""];
- attachmentRange = [[newAttributedString string] rangeOfString:attachmentCharString];
- }
- return newAttributedString;
- }
-
- return self;
-}
-
-+ (NSAttributedString *)_web_attributedStringFromRange:(Range*)range
-{
- NSMutableAttributedString *string = [[NSMutableAttributedString alloc] init];
- NSUInteger stringLength = 0;
- RetainPtr<NSMutableDictionary> attrs(AdoptNS, [[NSMutableDictionary alloc] init]);
-
- for (TextIterator it(range); !it.atEnd(); it.advance()) {
- RefPtr<Range> currentTextRange = it.range();
- ExceptionCode ec = 0;
- Node* startContainer = currentTextRange->startContainer(ec);
- Node* endContainer = currentTextRange->endContainer(ec);
- int startOffset = currentTextRange->startOffset(ec);
- int endOffset = currentTextRange->endOffset(ec);
-
- if (startContainer == endContainer && (startOffset == endOffset - 1)) {
- Node* node = startContainer->childNode(startOffset);
- if (node && node->hasTagName(imgTag)) {
- NSFileWrapper *fileWrapper = fileWrapperForElement(static_cast<Element*>(node));
- NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithFileWrapper:fileWrapper];
- [string appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
- [attachment release];
- }
- }
-
- int currentTextLength = it.length();
- if (!currentTextLength)
- continue;
-
- RenderObject* renderer = startContainer->renderer();
- ASSERT(renderer);
- if (!renderer)
- continue;
- RenderStyle* style = renderer->style();
- NSFont *font = style->font().primaryFont()->getNSFont();
- [attrs.get() setObject:font forKey:NSFontAttributeName];
- if (style->visitedDependentColor(CSSPropertyColor).alpha())
- [attrs.get() setObject:nsColor(style->visitedDependentColor(CSSPropertyColor)) forKey:NSForegroundColorAttributeName];
- else
- [attrs.get() removeObjectForKey:NSForegroundColorAttributeName];
- if (style->visitedDependentColor(CSSPropertyBackgroundColor).alpha())
- [attrs.get() setObject:nsColor(style->visitedDependentColor(CSSPropertyBackgroundColor)) forKey:NSBackgroundColorAttributeName];
- else
- [attrs.get() removeObjectForKey:NSBackgroundColorAttributeName];
-
- RetainPtr<NSString> substring(AdoptNS, [[NSString alloc] initWithCharactersNoCopy:const_cast<UChar*>(it.characters()) length:currentTextLength freeWhenDone:NO]);
- [string replaceCharactersInRange:NSMakeRange(stringLength, 0) withString:substring.get()];
- [string setAttributes:attrs.get() range:NSMakeRange(stringLength, currentTextLength)];
- stringLength += currentTextLength;
- }
-
- return [string autorelease];
-}
-
-@end