18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebTextIterator.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMNodeInternal.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMRangeInternal.h"
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebTypesInternal.h"
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <JavaScriptCore/Vector.h>
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/TextIterator.h>
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebCore/WebCoreObjCExtras.h>
3421939df44de1705786c545cd1bf519d47250322dBen Murdoch#import <runtime/InitializeThreading.h>
3521939df44de1705786c545cd1bf519d47250322dBen Murdoch#import <wtf/Threading.h>
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace JSC;
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore;
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@interface WebTextIteratorPrivate : NSObject {
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@public
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    OwnPtr<TextIterator> _textIterator;
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebTextIteratorPrivate
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project+ (void)initialize
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5021939df44de1705786c545cd1bf519d47250322dBen Murdoch    JSC::initializeThreading();
5121939df44de1705786c545cd1bf519d47250322dBen Murdoch    WTF::initializeMainThreadToProcessMainThread();
52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef BUILDING_ON_TIGER
53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    WebCoreObjCFinalizeOnMainThread(self);
54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebTextIterator
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    [_private release];
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    [super dealloc];
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithRange:(DOMRange *)range
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    self = [super init];
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!self)
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return self;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    _private = [[WebTextIteratorPrivate alloc] init];
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    _private->_textIterator.set(new TextIterator(core(range)));
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return self;
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)advance
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    _private->_textIterator->advance();
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (BOOL)atEnd
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return _private->_textIterator->atEnd();
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (DOMRange *)currentRange
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return kit(_private->_textIterator->range().get());
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (const unichar *)currentTextPointer
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return _private->_textIterator->characters();
96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NSUInteger)currentTextLength
99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return _private->_textIterator->length();
101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@end
104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@implementation WebTextIterator (WebTextIteratorDeprecated)
106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (DOMNode *)currentNode
108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return kit(_private->_textIterator->node());
110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NSString *)currentText
113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return [NSString stringWithCharacters:_private->_textIterator->characters() length:_private->_textIterator->length()];
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end
118