Changeset 166454 in webkit


Ignore:
Timestamp:
Mar 29, 2014 1:03:15 PM (10 years ago)
Author:
weinig@apple.com
Message:

Convert yet more of HTMLConverter to C++
https://bugs.webkit.org/show_bug.cgi?id=130850

Reviewed by Anders Carlsson.

  • editing/cocoa/HTMLConverter.mm:

(HTMLConverterCaches::isAncestorsOfStartToBeConverted):
(HTMLConverter::HTMLConverter):
(HTMLConverter::~HTMLConverter):
(HTMLConverter::convert):
(HTMLConverter::computedAttributesForElement):
(HTMLConverter::attributesForElement):
(HTMLConverter::_newParagraphForElement):
(HTMLConverter::_newLineForElement):
(HTMLConverter::_newTabForElement):
(HTMLConverter::_addAttachmentForElement):
(HTMLConverter::_addQuoteForElement):
(HTMLConverter::_addValue):
(HTMLConverter::_processHeadElement):
(HTMLConverter::_enterElement):
(HTMLConverter::_addTableCellForElement):
(HTMLConverter::_processElement):
(HTMLConverter::_addMarkersToList):
(HTMLConverter::_exitElement):
(HTMLConverter::_processText):
(HTMLConverter::_traverseNode):
(HTMLConverter::_traverseFooterNode):
(WebCore::attributedStringFromRange):
(_childrenForNode): Deleted.
(HTMLConverter::_computedAttributesForElement): Deleted.
(HTMLConverter::_attributesForElement): Deleted.
(HTMLConverter::_loadFromDOMRange): Deleted.

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r166451 r166454  
     12014-03-27  Sam Weinig  <sam@webkit.org>
     2
     3        Convert yet more of HTMLConverter to C++
     4        https://bugs.webkit.org/show_bug.cgi?id=130850
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * editing/cocoa/HTMLConverter.mm:
     9        (HTMLConverterCaches::isAncestorsOfStartToBeConverted):
     10        (HTMLConverter::HTMLConverter):
     11        (HTMLConverter::~HTMLConverter):
     12        (HTMLConverter::convert):
     13        (HTMLConverter::computedAttributesForElement):
     14        (HTMLConverter::attributesForElement):
     15        (HTMLConverter::_newParagraphForElement):
     16        (HTMLConverter::_newLineForElement):
     17        (HTMLConverter::_newTabForElement):
     18        (HTMLConverter::_addAttachmentForElement):
     19        (HTMLConverter::_addQuoteForElement):
     20        (HTMLConverter::_addValue):
     21        (HTMLConverter::_processHeadElement):
     22        (HTMLConverter::_enterElement):
     23        (HTMLConverter::_addTableCellForElement):
     24        (HTMLConverter::_processElement):
     25        (HTMLConverter::_addMarkersToList):
     26        (HTMLConverter::_exitElement):
     27        (HTMLConverter::_processText):
     28        (HTMLConverter::_traverseNode):
     29        (HTMLConverter::_traverseFooterNode):
     30        (WebCore::attributedStringFromRange):
     31        (_childrenForNode): Deleted.
     32        (HTMLConverter::_computedAttributesForElement): Deleted.
     33        (HTMLConverter::_attributesForElement): Deleted.
     34        (HTMLConverter::_loadFromDOMRange): Deleted.
     35
    1362014-03-28  Csaba Osztrogonác  <ossy@webkit.org>
    237
  • trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm

    r166347 r166454  
    2828
    2929#import "ArchiveResource.h"
    30 #import "CachedImage.h"
    31 #import "ColorMac.h"
    3230#import "CSSComputedStyleDeclaration.h"
    3331#import "CSSParser.h"
    3432#import "CSSPrimitiveValue.h"
     33#import "CachedImage.h"
    3534#import "CharacterData.h"
     35#import "ColorMac.h"
    3636#import "Document.h"
    3737#import "DocumentLoader.h"
    38 #import "DOMCSSPrimitiveValueInternal.h"
    39 #import "DOMCharacterDataInternal.h"
    40 #import "DOMDocumentInternal.h"
    41 #import "DOMElementInternal.h"
    42 #import "DOMHTMLTableCellElement.h"
    43 #import "DOMNodeInternal.h"
    44 #import "DOMPrivate.h"
    45 #import "DOMRGBColorInternal.h"
    46 #import "DOMRangeInternal.h"
    4738#import "Element.h"
     39#import "ElementTraversal.h"
    4840#import "Font.h"
    4941#import "Frame.h"
     
    5143#import "HTMLElement.h"
    5244#import "HTMLFrameElementBase.h"
     45#import "HTMLInputElement.h"
     46#import "HTMLMetaElement.h"
    5347#import "HTMLNames.h"
     48#import "HTMLOListElement.h"
    5449#import "HTMLParserIdioms.h"
     50#import "HTMLTableCellElement.h"
     51#import "HTMLTextAreaElement.h"
    5552#import "LoaderNSURLExtras.h"
    5653#import "RGBColor.h"
     
    420417
    421418    Node* cacheAncestorsOfStartToBeConverted(const Range&);
    422     bool isAncestorsOfStartToBeConverted(Node* node) const { return m_ancestorsUnderCommonAncestor.contains(node); }
     419    bool isAncestorsOfStartToBeConverted(Node& node) const { return m_ancestorsUnderCommonAncestor.contains(&node); }
    423420
    424421private:
     
    442439class HTMLConverter {
    443440public:
    444     HTMLConverter(DOMRange*);
     441    HTMLConverter(Range&);
    445442    ~HTMLConverter();
    446443   
    447     NSAttributedString* convert()
    448     {
    449         _loadFromDOMRange();
    450         if (_errorCode)
    451             return nil;
    452         return [[_attrStr retain] autorelease];
    453     }
     444    NSAttributedString* convert();
    454445   
    455446private:
     447    Ref<Range> m_range;
     448    DocumentLoader* m_dataSource;
     449   
    456450    HashMap<RefPtr<Element>, RetainPtr<NSDictionary>> m_attributesForElements;
     451    HashMap<RetainPtr<NSTextTable>, RefPtr<Element>> m_textTableFooters;
    457452    HashMap<RefPtr<Element>, RetainPtr<NSMutableDictionary>> m_aggregatedAttributesForElements;
    458453
     
    460455    NSMutableDictionary *_documentAttrs;
    461456    NSURL *_baseURL;
    462     DOMDocument *_document;
    463     DOMRange *_domRange;
    464     WebCore::DocumentLoader *_dataSource;
    465457    NSMutableArray *_textLists;
    466458    NSMutableArray *_textBlocks;
    467459    NSMutableArray *_textTables;
    468     NSMutableDictionary *_textTableFooters;
    469460    NSMutableArray *_textTableSpacings;
    470461    NSMutableArray *_textTablePaddings;
     
    477468    CGFloat _defaultTabInterval;
    478469    NSUInteger _domRangeStartIndex;
    479     NSInteger _errorCode;
    480470    NSInteger _quoteLevel;
    481471
     
    490480    } _flags;
    491481   
    492     void _loadFromDOMRange();
    493 
    494482    PlatformColor *_colorForElement(Element&, CSSPropertyID);
    495483   
    496     void _traverseNode(Node* node, unsigned depth, bool embedded);
    497     void _traverseFooterNode(DOMNode *node, NSInteger depth);
    498    
    499     NSDictionary *_computedAttributesForElement(Element&);
    500     NSDictionary *_attributesForElement(DOMElement *);
    501     NSDictionary* attributesForElement(Element& element);
    502     NSDictionary* aggregatedAttributesForAncestors(CharacterData&);
     484    void _traverseNode(Node&, unsigned depth, bool embedded);
     485    void _traverseFooterNode(Element&, unsigned depth);
     486   
     487    NSDictionary *computedAttributesForElement(Element&);
     488    NSDictionary *attributesForElement(Element&);
     489    NSDictionary *aggregatedAttributesForAncestors(CharacterData&);
    503490   
    504491    Element* _blockLevelElementForNode(Node*);
    505492   
    506     void _newParagraphForElement(DOMElement *element, NSString *tag, BOOL flag, BOOL suppressTrailingSpace);
    507     void _newLineForElement(DOMElement *element);
    508     void _newTabForElement(DOMElement *element);
    509     BOOL _addAttachmentForElement(DOMElement *element, NSURL *url, BOOL needsParagraph, BOOL usePlaceholder);
    510     void _addQuoteForElement(DOMElement *element, BOOL opening, NSInteger level);
    511     void _addValue(NSString *value, DOMElement *element);
     493    void _newParagraphForElement(Element&, NSString *tag, BOOL flag, BOOL suppressTrailingSpace);
     494    void _newLineForElement(Element&);
     495    void _newTabForElement(Element&);
     496    BOOL _addAttachmentForElement(Element&, NSURL *url, BOOL needsParagraph, BOOL usePlaceholder);
     497    void _addQuoteForElement(Element&, BOOL opening, NSInteger level);
     498    void _addValue(NSString *value, Element&);
    512499    void _fillInBlock(NSTextBlock *block, Element&, PlatformColor *backgroundColor, CGFloat extraMargin, CGFloat extraPadding, BOOL isTable);
     500   
     501    BOOL _enterElement(Element&, BOOL embedded);
     502    BOOL _processElement(Element&, NSInteger depth);
     503    void _exitElement(Element&, NSInteger depth, NSUInteger startIndex);
     504   
     505    void _processHeadElement(Element&);
    513506    void _processMetaElementWithName(NSString *name, NSString *content);
    514     void _processHeadElement(DOMElement *element);
    515     BOOL _enterElement(DOMElement *element, BOOL embedded);
    516     void _addTableForElement(Element *tableElement);
    517     void _addTableCellForElement(DOMElement *tableCellElement);
    518     BOOL _processElement(DOMElement *element, NSInteger depth);
     507   
     508    void _addTableForElement(Element* tableElement);
     509    void _addTableCellForElement(Element* tableCellElement);
    519510    void _addMarkersToList(NSTextList *list, NSRange range);
    520     void _exitElement(DOMElement *element, NSInteger depth, NSUInteger startIndex);
    521511    void _processText(CharacterData&);
    522512    void _adjustTrailingNewline();
    523513};
    524514
    525 HTMLConverter::HTMLConverter(DOMRange* domRange)
    526 {
    527     _domRange = [domRange retain];
     515HTMLConverter::HTMLConverter(Range& range)
     516    : m_range(range)
     517    , m_dataSource(nullptr)
     518{
    528519    _attrStr = [[NSMutableAttributedString alloc] init];
    529520    _documentAttrs = [[NSMutableDictionary alloc] init];
    530521    _baseURL = nil;
    531     _document = nil;
    532     _dataSource = nullptr;
    533522    _textLists = [[NSMutableArray alloc] init];
    534523    _textBlocks = [[NSMutableArray alloc] init];
    535524    _textTables = [[NSMutableArray alloc] init];
    536     _textTableFooters = [[NSMutableDictionary alloc] init];
    537525    _textTableSpacings = [[NSMutableArray alloc] init];
    538526    _textTablePaddings = [[NSMutableArray alloc] init];
     
    545533    _defaultTabInterval = 36;
    546534    _domRangeStartIndex = 0;
    547     _errorCode = -1;
    548535    _quoteLevel = 0;
    549536   
     
    559546    [_attrStr release];
    560547    [_documentAttrs release];
    561     [_domRange release];
    562548    [_textLists release];
    563549    [_textBlocks release];
    564550    [_textTables release];
    565     [_textTableFooters release];
    566551    [_textTableSpacings release];
    567552    [_textTablePaddings release];
     
    571556    [_fontCache release];
    572557    [_writingDirectionArray release];
     558}
     559
     560NSAttributedString *HTMLConverter::convert()
     561{
     562    Node* commonAncestorContainer = _caches->cacheAncestorsOfStartToBeConverted(m_range.get());
     563    ASSERT(commonAncestorContainer);
     564
     565    m_dataSource = commonAncestorContainer->document().frame()->loader().documentLoader();
     566    if (!m_dataSource)
     567        return nil;
     568   
     569    _domRangeStartIndex = 0;
     570    _traverseNode(*commonAncestorContainer, 0, false /* embedded */);
     571    if (_domRangeStartIndex > 0 && _domRangeStartIndex <= [_attrStr length])
     572        [_attrStr deleteCharactersInRange:NSMakeRange(0, _domRangeStartIndex)];
     573   
     574    return [[_attrStr retain] autorelease];
    573575}
    574576
     
    689691    }
    690692    return defaultParagraphStyle;
    691 }
    692 
    693 
    694 static NSArray *_childrenForNode(DOMNode *node)
    695 {
    696     NSMutableArray *array = [NSMutableArray array];
    697     DOMNode *child = [node firstChild];
    698     while (child) {
    699         [array addObject:child];
    700         child = [child nextSibling];
    701     }
    702     return array;
    703693}
    704694
     
    11351125#define UIFloatIsZero(number) (fabs(number - 0) < FLT_EPSILON)
    11361126
    1137 NSDictionary *HTMLConverter::_computedAttributesForElement(Element& element)
     1127NSDictionary *HTMLConverter::computedAttributesForElement(Element& element)
    11381128{
    11391129    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
     
    13521342}
    13531343
    1354 NSDictionary *HTMLConverter::_attributesForElement(DOMElement *element)
    1355 {
    1356     if (!element)
    1357         return [NSDictionary dictionary];
    1358     return attributesForElement(*core(element));
    1359 }
    13601344
    13611345NSDictionary* HTMLConverter::attributesForElement(Element& element)
     
    13631347    auto& attributes = m_attributesForElements.add(&element, nullptr).iterator->value;
    13641348    if (!attributes)
    1365         attributes = _computedAttributesForElement(element);
     1349        attributes = computedAttributesForElement(element);
    13661350    return attributes.get();
    13671351}
     
    13951379}
    13961380
    1397 void HTMLConverter::_newParagraphForElement(DOMElement *element, NSString *tag, BOOL flag, BOOL suppressTrailingSpace)
     1381void HTMLConverter::_newParagraphForElement(Element& element, NSString *tag, BOOL flag, BOOL suppressTrailingSpace)
    13981382{
    13991383    NSUInteger textLength = [_attrStr length];
     
    14081392            _domRangeStartIndex += [string length] - rangeToReplace.length;
    14091393        rangeToReplace.length = [string length];
    1410         NSDictionary *attrs = _attributesForElement(element);
     1394        NSDictionary *attrs = attributesForElement(element);
    14111395        if (rangeToReplace.length > 0)
    14121396            [_attrStr setAttributes:attrs range:rangeToReplace];
     
    14151399}
    14161400
    1417 void HTMLConverter::_newLineForElement(DOMElement *element)
     1401void HTMLConverter::_newLineForElement(Element& element)
    14181402{
    14191403    unichar c = NSLineSeparatorCharacter;
     
    14251409    if (rangeToReplace.location < _domRangeStartIndex)
    14261410        _domRangeStartIndex += rangeToReplace.length;
    1427     NSDictionary *attrs = _attributesForElement(element);
     1411    NSDictionary *attrs = attributesForElement(element);
    14281412    if (rangeToReplace.length > 0)
    14291413        [_attrStr setAttributes:attrs range:rangeToReplace];
     
    14311415}
    14321416
    1433 void HTMLConverter::_newTabForElement(DOMElement *element)
     1417void HTMLConverter::_newTabForElement(Element& element)
    14341418{
    14351419    NSString *string = @"\t";
     
    14411425    if (rangeToReplace.location < _domRangeStartIndex)
    14421426        _domRangeStartIndex += rangeToReplace.length;
    1443     NSDictionary *attrs = _attributesForElement(element);
     1427    NSDictionary *attrs = attributesForElement(element);
    14441428    if (rangeToReplace.length > 0)
    14451429        [_attrStr setAttributes:attrs range:rangeToReplace];
     
    14611445}
    14621446
    1463 BOOL HTMLConverter::_addAttachmentForElement(DOMElement *element, NSURL *url, BOOL needsParagraph, BOOL usePlaceholder)
    1464 {
    1465     BOOL retval = NO, notFound = NO;
     1447BOOL HTMLConverter::_addAttachmentForElement(Element& element, NSURL *url, BOOL needsParagraph, BOOL usePlaceholder)
     1448{
     1449    BOOL retval = NO;
     1450    BOOL notFound = NO;
    14661451    NSFileWrapper *fileWrapper = nil;
    1467     Frame* frame = core([element ownerDocument])->frame();
     1452    Frame* frame = element.document().frame();
    14681453    DocumentLoader *dataSource = frame->loader().frameHasLoaded() ? frame->loader().documentLoader() : 0;
    14691454    BOOL ignoreOrientation = YES;
     
    14961481    }
    14971482    if (!fileWrapper && !notFound) {
    1498         fileWrapper = fileWrapperForURL(_dataSource, url);
     1483        fileWrapper = fileWrapperForURL(m_dataSource, url);
    14991484        if (usePlaceholder && fileWrapper && [[[[fileWrapper preferredFilename] pathExtension] lowercaseString] hasPrefix:@"htm"])
    15001485            notFound = YES;
     
    15511536        if (rangeToReplace.location < _domRangeStartIndex)
    15521537            _domRangeStartIndex += rangeToReplace.length;
    1553         attrs = _attributesForElement(element);
     1538        attrs = attributesForElement(element);
    15541539        if (rangeToReplace.length > 0) {
    15551540            [_attrStr setAttributes:attrs range:rangeToReplace];
     
    15631548}
    15641549
    1565 void HTMLConverter::_addQuoteForElement(DOMElement *element, BOOL opening, NSInteger level)
     1550void HTMLConverter::_addQuoteForElement(Element& element, BOOL opening, NSInteger level)
    15661551{
    15671552    unichar c = ((level % 2) == 0) ? (opening ? 0x201c : 0x201d) : (opening ? 0x2018 : 0x2019);
     
    15731558    if (rangeToReplace.location < _domRangeStartIndex)
    15741559        _domRangeStartIndex += rangeToReplace.length;
    1575     RetainPtr<NSDictionary> attrs = _attributesForElement(element);
     1560    RetainPtr<NSDictionary> attrs = attributesForElement(element);
    15761561    if (rangeToReplace.length > 0)
    15771562        [_attrStr setAttributes:attrs.get() range:rangeToReplace];
     
    15791564}
    15801565
    1581 void HTMLConverter::_addValue(NSString *value, DOMElement *element)
     1566void HTMLConverter::_addValue(NSString *value, Element& element)
    15821567{
    15831568    NSUInteger textLength = [_attrStr length];
     
    15891574        if (rangeToReplace.location < _domRangeStartIndex)
    15901575            _domRangeStartIndex += rangeToReplace.length;
    1591         RetainPtr<NSDictionary> attrs = _attributesForElement(element);
     1576        RetainPtr<NSDictionary> attrs = attributesForElement(element);
    15921577        if (rangeToReplace.length > 0)
    15931578            [_attrStr setAttributes:attrs.get() range:rangeToReplace];
     
    18071792}
    18081793
    1809 void HTMLConverter::_processHeadElement(DOMElement *element)
    1810 {
    1811     // ??? should gather data from other sources e.g. Word, but for that we would need to be able to get comments from DOM
    1812     NSArray *childNodes = _childrenForNode(element);
    1813     NSUInteger count = [childNodes count];
    1814     for (NSUInteger i = 0; i < count; i++) {
    1815         DOMNode *node = [childNodes objectAtIndex:i];
    1816         unsigned short nodeType = [node nodeType];
    1817         if (DOM_ELEMENT_NODE == nodeType) {
    1818             DOMElement *element = (DOMElement *)node;
    1819             NSString *tag = [element tagName];
    1820             if ([@"META" isEqualToString:tag] && [element respondsToSelector:@selector(name)] && [element respondsToSelector:@selector(content)]) {
    1821                 NSString *name = [(DOMHTMLMetaElement *)element name];
    1822                 NSString *content = [(DOMHTMLMetaElement *)element content];
    1823                 if (name && content)
    1824                     _processMetaElementWithName(name, content);
    1825             }
    1826         }
    1827     }
    1828 }
    1829 
    1830 BOOL HTMLConverter::_enterElement(DOMElement *element, BOOL embedded)
    1831 {
    1832     ASSERT(element);
    1833     Element& coreElement = *core(element);
    1834     String displayValue = _caches->propertyValueForNode(coreElement, CSSPropertyDisplay);
    1835 
    1836     if (coreElement.hasTagName(headTag) && !embedded)
     1794void HTMLConverter::_processHeadElement(Element& element)
     1795{
     1796    // FIXME: Should gather data from other sources e.g. Word, but for that we would need to be able to get comments from DOM
     1797   
     1798    for (HTMLMetaElement* child = Traversal<HTMLMetaElement>::firstChild(&element); child; child = Traversal<HTMLMetaElement>::nextSibling(child)) {
     1799        NSString *name = child->name();
     1800        NSString *content = child->content();
     1801        if (name && content)
     1802            _processMetaElementWithName(name, content);
     1803    }
     1804}
     1805
     1806BOOL HTMLConverter::_enterElement(Element& element, BOOL embedded)
     1807{
     1808    String displayValue = _caches->propertyValueForNode(element, CSSPropertyDisplay);
     1809
     1810    if (element.hasTagName(headTag) && !embedded)
    18371811        _processHeadElement(element);
    18381812    else if (!displayValue.length() || !(displayValue == "none" || displayValue == "table-column" || displayValue == "table-column-group")) {
    1839         if (_caches->isBlockElement(coreElement) && !coreElement.hasTagName(brTag) && !(displayValue == "table-cell" && [_textTables count] == 0)
    1840             && !([_textLists count] > 0 && displayValue == "block" && !coreElement.hasTagName(liTag) && !coreElement.hasTagName(ulTag) && !coreElement.hasTagName(olTag)))
    1841             _newParagraphForElement(element, [element tagName], NO, YES);
     1813        if (_caches->isBlockElement(element) && !element.hasTagName(brTag) && !(displayValue == "table-cell" && [_textTables count] == 0)
     1814            && !([_textLists count] > 0 && displayValue == "block" && !element.hasTagName(liTag) && !element.hasTagName(ulTag) && !element.hasTagName(olTag)))
     1815            _newParagraphForElement(element, element.tagName(), NO, YES);
    18421816        return YES;
    18431817    }
     
    18851859}
    18861860
    1887 void HTMLConverter::_addTableCellForElement(DOMElement *tableCellElement)
     1861void HTMLConverter::_addTableCellForElement(Element* element)
    18881862{
    18891863    NSTextTable *table = [_textTables lastObject];
     
    19031877            columnNumber = [previousBlock startingColumn] + [previousBlock columnSpan];
    19041878    }
    1905     if (tableCellElement) {
    1906         if ([tableCellElement respondsToSelector:@selector(rowSpan)]) {
    1907             rowSpan = [(DOMHTMLTableCellElement *)tableCellElement rowSpan];
     1879   
     1880    RetainPtr<NSTextTableBlock> block;
     1881   
     1882    if (element) {
     1883        if (isHTMLTableCellElement(*element)) {
     1884            HTMLTableCellElement& tableCellElement = toHTMLTableCellElement(*element);
     1885           
     1886            rowSpan = tableCellElement.rowSpan();
    19081887            if (rowSpan < 1)
    19091888                rowSpan = 1;
    1910         }
    1911         if ([tableCellElement respondsToSelector:@selector(colSpan)]) {
    1912             colSpan = [(DOMHTMLTableCellElement *)tableCellElement colSpan];
     1889            colSpan = tableCellElement.colSpan();
    19131890            if (colSpan < 1)
    19141891                colSpan = 1;
    19151892        }
    1916     }
    1917     RetainPtr<NSTextTableBlock> block = adoptNS([[PlatformNSTextTableBlock alloc] initWithTable:table startingRow:rowNumber rowSpan:rowSpan startingColumn:columnNumber columnSpan:colSpan]);
    1918     if (tableCellElement) {
    1919         Element& coreTableCellElement = *core(tableCellElement);
    19201893       
    1921         String verticalAlign = _caches->propertyValueForNode(coreTableCellElement, CSSPropertyVerticalAlign);
     1894        block = adoptNS([[PlatformNSTextTableBlock alloc] initWithTable:table startingRow:rowNumber rowSpan:rowSpan startingColumn:columnNumber columnSpan:colSpan]);
    19221895       
    1923         _fillInBlock(block.get(), coreTableCellElement, color, cellSpacingVal / 2, 0, NO);
     1896        String verticalAlign = _caches->propertyValueForNode(*element, CSSPropertyVerticalAlign);
     1897       
     1898        _fillInBlock(block.get(), *element, color, cellSpacingVal / 2, 0, NO);
    19241899        if (verticalAlign == "middle")
    19251900            [block setVerticalAlignment:NSTextBlockMiddleAlignment];
     
    19301905        else if (verticalAlign == "top")
    19311906            [block setVerticalAlignment:NSTextBlockTopAlignment];
    1932     }
     1907    } else {
     1908        block = adoptNS([[PlatformNSTextTableBlock alloc] initWithTable:table startingRow:rowNumber rowSpan:rowSpan startingColumn:columnNumber columnSpan:colSpan]);
     1909    }
     1910   
    19331911    [_textBlocks addObject:block.get()];
    19341912    [rowArray addObject:block.get()];
     
    19361914}
    19371915
    1938 BOOL HTMLConverter::_processElement(DOMElement *element, NSInteger depth)
    1939 {
    1940     if (!element)
    1941         return NO;
     1916BOOL HTMLConverter::_processElement(Element& element, NSInteger depth)
     1917{
    19421918    BOOL retval = YES;
    1943     Element& coreElement = *core(element);
    1944     BOOL isBlockLevel = _caches->isBlockElement(coreElement);
    1945     String displayValue = _caches->propertyValueForNode(coreElement, CSSPropertyDisplay);
     1919    BOOL isBlockLevel = _caches->isBlockElement(element);
     1920    String displayValue = _caches->propertyValueForNode(element, CSSPropertyDisplay);
    19461921    if (isBlockLevel)
    19471922        [_writingDirectionArray removeAllObjects];
    19481923    else {
    1949         String bidi = _caches->propertyValueForNode(coreElement, CSSPropertyUnicodeBidi);
     1924        String bidi = _caches->propertyValueForNode(element, CSSPropertyUnicodeBidi);
    19501925        if (bidi == "embed") {
    19511926            NSUInteger val = NSTextWritingDirectionEmbedding;
    1952             if (_caches->propertyValueForNode(coreElement, CSSPropertyDirection) == "rtl")
     1927            if (_caches->propertyValueForNode(element, CSSPropertyDirection) == "rtl")
    19531928                val |= NSWritingDirectionRightToLeft;
    19541929            [_writingDirectionArray addObject:[NSNumber numberWithUnsignedInteger:val]];
    19551930        } else if (bidi == "bidi-override") {
    19561931            NSUInteger val = NSTextWritingDirectionOverride;
    1957             if (_caches->propertyValueForNode(coreElement, CSSPropertyDirection) == "rtl")
     1932            if (_caches->propertyValueForNode(element, CSSPropertyDirection) == "rtl")
    19581933                val |= NSWritingDirectionRightToLeft;
    19591934            [_writingDirectionArray addObject:[NSNumber numberWithUnsignedInteger:val]];
     
    19611936    }
    19621937    if (displayValue == "table" || ([_textTables count] == 0 && displayValue == "table-row-group")) {
    1963         Element* tableElement = &coreElement;
     1938        Element* tableElement = &element;
    19641939        if (displayValue == "table-row-group") {
    19651940            // If we are starting in medias res, the first thing we see may be the tbody, so go up to the table
    1966             tableElement = _blockLevelElementForNode(coreElement.parentNode());
     1941            tableElement = _blockLevelElementForNode(element.parentNode());
    19671942            if (!tableElement || _caches->propertyValueForNode(*tableElement, CSSPropertyDisplay) != "table")
    1968                 tableElement = &coreElement;
     1943                tableElement = &element;
    19691944        }
    19701945        while ([_textTables count] > [_textBlocks count])
     
    19721947        _addTableForElement(tableElement);
    19731948    } else if (displayValue == "table-footer-group" && [_textTables count] > 0) {
    1974         [_textTableFooters setObject:element forKey:[NSValue valueWithNonretainedObject:[_textTables lastObject]]];
     1949        m_textTableFooters.add([_textTables lastObject], &element);
    19751950        retval = NO;
    19761951    } else if (displayValue == "table-row" && [_textTables count] > 0) {
    1977         PlatformColor *color = _colorForElement(coreElement, CSSPropertyBackgroundColor);
    1978         if (!color) color = [PlatformColorClass clearColor];
     1952        PlatformColor *color = _colorForElement(element, CSSPropertyBackgroundColor);
     1953        if (!color)
     1954            color = [PlatformColorClass clearColor];
    19791955        [_textTableRowBackgroundColors addObject:color];
    19801956    } else if (displayValue == "table-cell") {
    19811957        while ([_textTables count] < [_textBlocks count] + 1)
    19821958            _addTableForElement(nil);
    1983         _addTableCellForElement(element);
    1984     } else if (coreElement.hasTagName(imgTag)) {
    1985         NSString *urlString = [element getAttribute:@"src"];
     1959        _addTableCellForElement(&element);
     1960    } else if (element.hasTagName(imgTag)) {
     1961        NSString *urlString = element.getAttribute(srcAttr);
    19861962        if (urlString && [urlString length] > 0) {
    1987             NSURL *url = core([element ownerDocument])->completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));
    1988             if (!url) url = [NSURL _web_URLWithString:[urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] relativeToURL:_baseURL];
     1963            NSURL *url = element.document().completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));
     1964            if (!url)
     1965                url = [NSURL _web_URLWithString:[urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] relativeToURL:_baseURL];
    19891966#if PLATFORM(IOS)
    19901967            BOOL usePlaceholderImage = NO;
     
    19961973        }
    19971974        retval = NO;
    1998     } else if (coreElement.hasTagName(objectTag)) {
    1999         NSString *baseString = [element getAttribute:@"codebase"];
    2000         NSString *urlString = [element getAttribute:@"data"];
    2001         NSString *declareString = [element getAttribute:@"declare"];
     1975    } else if (element.hasTagName(objectTag)) {
     1976        NSString *baseString = element.getAttribute(codebaseAttr);
     1977        NSString *urlString = element.getAttribute(dataAttr);
     1978        NSString *declareString = element.getAttribute(declareAttr);
    20021979        if (urlString && [urlString length] > 0 && ![@"true" isEqualToString:declareString]) {
    20031980            NSURL *baseURL = nil;
    20041981            NSURL *url = nil;
    20051982            if (baseString && [baseString length] > 0) {
    2006                 baseURL = core([element ownerDocument])->completeURL(stripLeadingAndTrailingHTMLSpaces(baseString));
     1983                baseURL = element.document().completeURL(stripLeadingAndTrailingHTMLSpaces(baseString));
    20071984                if (!baseURL)
    20081985                    baseURL = [NSURL _web_URLWithString:[baseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] relativeToURL:_baseURL];
     
    20111988                url = [NSURL _web_URLWithString:[urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] relativeToURL:baseURL];
    20121989            if (!url)
    2013                 url = core([element ownerDocument])->completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));
     1990                url = element.document().completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));
    20141991            if (!url)
    20151992                url = [NSURL _web_URLWithString:[urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] relativeToURL:_baseURL];
     
    20171994                retval = !_addAttachmentForElement(element, url, isBlockLevel, NO);
    20181995        }
    2019     } else if (coreElement.hasTagName(frameTag) || coreElement.hasTagName(iframeTag)) {
    2020         if (Document* contentDocument = toHTMLFrameElementBase(coreElement).contentDocument()) {
    2021             _traverseNode(contentDocument, depth + 1, true /* embedded */);
     1996    } else if (element.hasTagName(frameTag) || element.hasTagName(iframeTag)) {
     1997        if (Document* contentDocument = toHTMLFrameElementBase(element).contentDocument()) {
     1998            _traverseNode(*contentDocument, depth + 1, true /* embedded */);
    20221999            retval = NO;
    20232000        }
    2024     } else if (coreElement.hasTagName(brTag)) {
    2025         Element* blockElement = _blockLevelElementForNode(coreElement.parentNode());
    2026         NSString *breakClass = [element getAttribute:@"class"];
     2001    } else if (element.hasTagName(brTag)) {
     2002        Element* blockElement = _blockLevelElementForNode(element.parentNode());
     2003        NSString *breakClass = element.getAttribute(classAttr);
    20272004        NSString *blockTag = blockElement ? (NSString *)blockElement->tagName() : nil;
    20282005        BOOL isExtraBreak = [@"Apple-interchange-newline" isEqualToString:breakClass];
     
    20342011                _newLineForElement(element);
    20352012            else
    2036                 _newParagraphForElement(element, [element tagName], YES, NO);
    2037         }
    2038     } else if (coreElement.hasTagName(ulTag)) {
     2013                _newParagraphForElement(element, element.tagName(), YES, NO);
     2014        }
     2015    } else if (element.hasTagName(ulTag)) {
    20392016        RetainPtr<NSTextList> list;
    2040         String listStyleType = _caches->propertyValueForNode(coreElement, CSSPropertyListStyleType);
     2017        String listStyleType = _caches->propertyValueForNode(element, CSSPropertyListStyleType);
    20412018        if (!listStyleType.length())
    20422019            listStyleType = @"disc";
    20432020        list = adoptNS([[PlatformNSTextList alloc] initWithMarkerFormat:String("{" + listStyleType + "}") options:0]);
    20442021        [_textLists addObject:list.get()];
    2045     } else if (coreElement.hasTagName(olTag)) {
     2022    } else if (element.hasTagName(olTag)) {
    20462023        RetainPtr<NSTextList> list;
    2047         String listStyleType = _caches->propertyValueForNode(coreElement, CSSPropertyListStyleType);
     2024        String listStyleType = _caches->propertyValueForNode(element, CSSPropertyListStyleType);
    20482025        if (!listStyleType.length())
    20492026            listStyleType = "decimal";
    20502027        list = adoptNS([[PlatformNSTextList alloc] initWithMarkerFormat:String("{" + listStyleType + "}") options:0]);
    2051         if ([element respondsToSelector:@selector(start)]) {
    2052             NSInteger startingItemNumber = [(DOMHTMLOListElement *)element start];
     2028        if (isHTMLOListElement(element)) {
     2029            NSInteger startingItemNumber = toHTMLOListElement(element).start();;
    20532030            [list setStartingItemNumber:startingItemNumber];
    20542031        }
    20552032        [_textLists addObject:list.get()];
    2056     } else if (coreElement.hasTagName(qTag)) {
     2033    } else if (element.hasTagName(qTag)) {
    20572034        _addQuoteForElement(element, YES, _quoteLevel++);
    2058     } else if (coreElement.hasTagName(inputTag)) {
    2059         if ([element respondsToSelector:@selector(type)] && [element respondsToSelector:@selector(value)] && [@"text" compare:[(DOMHTMLInputElement *)element type] options:NSCaseInsensitiveSearch] == NSOrderedSame) {
    2060             NSString *value = [(DOMHTMLInputElement *)element value];
    2061             if (value && [value length] > 0)
    2062                 _addValue(value, element);
    2063         }
    2064     } else if (coreElement.hasTagName(textareaTag)) {
    2065         if ([element respondsToSelector:@selector(value)]) {
    2066             NSString *value = [(DOMHTMLTextAreaElement *)element value];
     2035    } else if (element.hasTagName(inputTag)) {
     2036        if (isHTMLInputElement(element)) {
     2037            HTMLInputElement& inputElement = toHTMLInputElement(element);
     2038            if (inputElement.type() == "text") {
     2039                NSString *value = inputElement.value();
     2040                if (value && [value length] > 0)
     2041                    _addValue(value, element);
     2042            }
     2043        }
     2044    } else if (element.hasTagName(textareaTag)) {
     2045        if (isHTMLTextAreaElement(element)) {
     2046            HTMLTextAreaElement& textAreaElement = toHTMLTextAreaElement(element);
     2047            NSString *value = textAreaElement.value();
    20672048            if (value && [value length] > 0)
    20682049                _addValue(value, element);
     
    21192100                    range.length += insertLength;
    21202101                    paragraphRange.length += insertLength;
    2121                     if (paragraphRange.location < _domRangeStartIndex) _domRangeStartIndex += insertLength;
     2102                    if (paragraphRange.location < _domRangeStartIndex)
     2103                        _domRangeStartIndex += insertLength;
    21222104                   
    21232105                    newStyle = [paragraphStyle mutableCopy];
     
    21602142}
    21612143
    2162 void HTMLConverter::_exitElement(DOMElement *element, NSInteger depth, NSUInteger startIndex)
    2163 {
    2164     ASSERT(element);
    2165     Element& coreElement = *core(element);
    2166     String displayValue = _caches->propertyValueForNode(coreElement, CSSPropertyDisplay);
     2144void HTMLConverter::_exitElement(Element& element, NSInteger depth, NSUInteger startIndex)
     2145{
     2146    String displayValue = _caches->propertyValueForNode(element, CSSPropertyDisplay);
    21672147    NSRange range = NSMakeRange(startIndex, [_attrStr length] - startIndex);
    2168     if (range.length > 0 && coreElement.hasTagName(aTag)) {
    2169         NSString *urlString = [element getAttribute:@"href"];
     2148    if (range.length > 0 && element.hasTagName(aTag)) {
     2149        NSString *urlString = element.getAttribute(hrefAttr);
    21702150        NSString *strippedString = [urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    21712151        if (urlString && [urlString length] > 0 && strippedString && [strippedString length] > 0 && ![strippedString hasPrefix:@"#"]) {
    2172             NSURL *url = core([element ownerDocument])->completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));
     2152            NSURL *url = element.document().completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));
    21732153            if (!url)
    2174                 url = core([element ownerDocument])->completeURL(stripLeadingAndTrailingHTMLSpaces(strippedString));
     2154                url = element.document().completeURL(stripLeadingAndTrailingHTMLSpaces(strippedString));
    21752155            if (!url)
    21762156                url = [NSURL _web_URLWithString:strippedString relativeToURL:_baseURL];
     
    21782158        }
    21792159    }
    2180     if (!_flags.reachedEnd && _caches->isBlockElement(coreElement)) {
     2160    if (!_flags.reachedEnd && _caches->isBlockElement(element)) {
    21812161        [_writingDirectionArray removeAllObjects];
    21822162        if (displayValue == "table-cell" && [_textBlocks count] == 0) {
    21832163            _newTabForElement(element);
    2184         } else if ([_textLists count] > 0 && displayValue == "block" && !coreElement.hasTagName(liTag) && !coreElement.hasTagName(ulTag) && !coreElement.hasTagName(olTag)) {
     2164        } else if ([_textLists count] > 0 && displayValue == "block" && !element.hasTagName(liTag) && !element.hasTagName(ulTag) && !element.hasTagName(olTag)) {
    21852165            _newLineForElement(element);
    21862166        } else {
    2187             _newParagraphForElement(element, [element tagName], (range.length == 0), YES);
     2167            _newParagraphForElement(element, element.tagName(), (range.length == 0), YES);
    21882168        }
    21892169    } else if ([_writingDirectionArray count] > 0) {
    2190         String bidi = _caches->propertyValueForNode(coreElement, CSSPropertyUnicodeBidi);
     2170        String bidi = _caches->propertyValueForNode(element, CSSPropertyUnicodeBidi);
    21912171        if (bidi == "embed" || bidi == "bidi-override")
    21922172            [_writingDirectionArray removeLastObject];
     
    21942174    range = NSMakeRange(startIndex, [_attrStr length] - startIndex);
    21952175    if (displayValue == "table" && [_textTables count] > 0) {
    2196         NSValue *key = [NSValue valueWithNonretainedObject:[_textTables lastObject]];
    2197         DOMNode *footer = [_textTableFooters objectForKey:key];
     2176        NSTextTable *key = [_textTables lastObject];
     2177        Element* footer = m_textTableFooters.get(key);
    21982178        while ([_textTables count] < [_textBlocks count] + 1)
    21992179            [_textBlocks removeLastObject];
    22002180        if (footer) {
    2201             _traverseFooterNode(footer, depth + 1);
    2202             [_textTableFooters removeObjectForKey:key];
     2181            _traverseFooterNode(*footer, depth + 1);
     2182            m_textTableFooters.remove(key);
    22032183        }
    22042184        [_textTables removeLastObject];
     
    22492229        }
    22502230        [_textBlocks removeLastObject];
    2251     } else if ((coreElement.hasTagName(ulTag) || coreElement.hasTagName(olTag)) && [_textLists count] > 0) {
     2231    } else if ((element.hasTagName(ulTag) || element.hasTagName(olTag)) && [_textLists count] > 0) {
    22522232        NSTextList *list = [_textLists lastObject];
    22532233        _addMarkersToList(list, range);
    22542234        [_textLists removeLastObject];
    2255     } else if (coreElement.hasTagName(qTag)) {
     2235    } else if (element.hasTagName(qTag)) {
    22562236        _addQuoteForElement(element, NO, --_quoteLevel);
    2257     } else if (coreElement.hasTagName(spanTag)) {
    2258         NSString *className = [element getAttribute:@"class"];
     2237    } else if (element.hasTagName(spanTag)) {
     2238        NSString *className = element.getAttribute(classAttr);
    22592239        NSMutableString *mutableString;
    22602240        NSUInteger i, count = 0;
     
    23072287    unsigned startOffset = 0;
    23082288    unsigned endOffset = originalString.length();
    2309     if (_domRange) {
    2310         if (&characterData == core([_domRange startContainer])) {
    2311             startOffset = (NSUInteger)[_domRange startOffset];
    2312             _domRangeStartIndex = [_attrStr length];
    2313             _flags.reachedStart = YES;
    2314         }
    2315         if (&characterData == core([_domRange endContainer])) {
    2316             endOffset = (NSUInteger)[_domRange endOffset];
    2317             _flags.reachedEnd = YES;
    2318         }
    2319         if ((startOffset > 0 || endOffset < originalString.length()) && endOffset >= startOffset)
    2320             originalString = originalString.substring(startOffset, endOffset - startOffset);
    2321     }
     2289    if (&characterData == m_range->startContainer()) {
     2290        startOffset = m_range->startOffset();
     2291        _domRangeStartIndex = [_attrStr length];
     2292        _flags.reachedStart = YES;
     2293    }
     2294    if (&characterData == m_range->endContainer()) {
     2295        endOffset = m_range->endOffset();
     2296        _flags.reachedEnd = YES;
     2297    }
     2298    if ((startOffset > 0 || endOffset < originalString.length()) && endOffset >= startOffset)
     2299        originalString = originalString.substring(startOffset, endOffset - startOffset);
    23222300    String outputString = originalString;
    23232301
     
    23742352}
    23752353
    2376 void HTMLConverter::_traverseNode(Node* node, unsigned depth, bool embedded)
    2377 {
    2378     if (!node || _flags.reachedEnd)
     2354void HTMLConverter::_traverseNode(Node& node, unsigned depth, bool embedded)
     2355{
     2356    if (_flags.reachedEnd)
    23792357        return;
    2380     if (_domRange && !_flags.reachedStart && !_caches->isAncestorsOfStartToBeConverted(node))
     2358    if (!_flags.reachedStart && !_caches->isAncestorsOfStartToBeConverted(node))
    23812359        return;
    23822360
     
    23852363    bool isStart = false;
    23862364    bool isEnd = false;
    2387     if (_domRange) {
    2388         if (node == core([_domRange startContainer])) {
    2389             startOffset = (NSUInteger)[_domRange startOffset];
    2390             isStart = true;
    2391             _flags.reachedStart = YES;
    2392         }
    2393         if (node == core([_domRange endContainer])) {
    2394             endOffset = (NSUInteger)[_domRange endOffset];
    2395             isEnd = true;
    2396         }
    2397     }
    2398    
    2399     if (node->isDocumentNode() || node->isDocumentFragment()) {
    2400         Node* child = node->firstChild();
     2365    if (&node == m_range->startContainer()) {
     2366        startOffset = m_range->startOffset();
     2367        isStart = true;
     2368        _flags.reachedStart = YES;
     2369    }
     2370    if (&node == m_range->endContainer()) {
     2371        endOffset = m_range->endOffset();
     2372        isEnd = true;
     2373    }
     2374   
     2375    if (node.isDocumentNode() || node.isDocumentFragment()) {
     2376        Node* child = node.firstChild();
    24012377        for (NSUInteger i = 0; child; i++) {
    24022378            if (isStart && i == startOffset)
    24032379                _domRangeStartIndex = [_attrStr length];
    24042380            if ((!isStart || startOffset <= i) && (!isEnd || endOffset > i))
    2405                 _traverseNode(child, depth + 1, embedded);
     2381                _traverseNode(*child, depth + 1, embedded);
    24062382            if (isEnd && i + 1 >= endOffset)
    24072383                _flags.reachedEnd = YES;
     
    24102386            child = child->nextSibling();
    24112387        }
    2412     } else if (node->isElementNode()) {
    2413         DOMElement* element = kit(toElement(node));
     2388    } else if (node.isElementNode()) {
     2389        Element& element = toElement(node);
    24142390        if (_enterElement(element, embedded)) {
    24152391            NSUInteger startIndex = [_attrStr length];
    24162392            if (_processElement(element, depth)) {
    2417                 Node* child = node->firstChild();
     2393                Node* child = node.firstChild();
    24182394                for (NSUInteger i = 0; child; i++) {
    24192395                    if (isStart && i == startOffset)
    24202396                        _domRangeStartIndex = [_attrStr length];
    24212397                    if ((!isStart || startOffset <= i) && (!isEnd || endOffset > i))
    2422                         _traverseNode(child, depth + 1, embedded);
     2398                        _traverseNode(*child, depth + 1, embedded);
    24232399                    if (isEnd && i + 1 >= endOffset)
    24242400                        _flags.reachedEnd = YES;
     
    24302406            }
    24312407        }
    2432     } else if (node->isCharacterDataNode())
    2433         _processText(*toCharacterData(node));
     2408    } else if (node.isCharacterDataNode())
     2409        _processText(toCharacterData(node));
    24342410
    24352411    if (isEnd)
     
    24372413}
    24382414
    2439 void HTMLConverter::_traverseFooterNode(DOMNode *node, NSInteger depth)
    2440 {
    2441     DOMElement *element = (DOMElement *)node;
    2442 
     2415void HTMLConverter::_traverseFooterNode(Element& element, unsigned depth)
     2416{
    24432417    if (_flags.reachedEnd)
    24442418        return;
    2445     if (_domRange && !_flags.reachedStart && !_caches->isAncestorsOfStartToBeConverted(core(node)))
     2419    if (!_flags.reachedStart && !_caches->isAncestorsOfStartToBeConverted(element))
    24462420        return;
    24472421
     
    24502424    bool isStart = false;
    24512425    bool isEnd = false;
    2452     if (_domRange) {
    2453         if (node == [_domRange startContainer]) {
    2454             startOffset = (NSUInteger)[_domRange startOffset];
    2455             isStart = true;
    2456             _flags.reachedStart = YES;
    2457         }
    2458         if (node == [_domRange endContainer]) {
    2459             endOffset = (NSUInteger)[_domRange endOffset];
    2460             isEnd = true;
    2461         }
    2462     }
     2426    if (&element == m_range->startContainer()) {
     2427        startOffset = m_range->startOffset();
     2428        isStart = true;
     2429        _flags.reachedStart = YES;
     2430    }
     2431    if (&element == m_range->endContainer()) {
     2432        endOffset = m_range->endOffset();
     2433        isEnd = true;
     2434    }
     2435   
    24632436    if (_enterElement(element, YES)) {
    24642437        NSUInteger startIndex = [_attrStr length];
    24652438        if (_processElement(element, depth)) {
    2466             Node* child = core(element)->firstChild();
     2439            Node* child = element.firstChild();
    24672440            for (NSUInteger i = 0; child; i++) {
    24682441                if (isStart && i == startOffset)
    24692442                    _domRangeStartIndex = [_attrStr length];
    24702443                if ((!isStart || startOffset <= i) && (!isEnd || endOffset > i))
    2471                     _traverseNode(child, depth + 1, true /* embedded */);
     2444                    _traverseNode(*child, depth + 1, true /* embedded */);
    24722445                if (isEnd && i + 1 >= endOffset)
    24732446                    _flags.reachedEnd = YES;
     
    25052478
    25062479    return commonAncestor;
    2507 }
    2508 
    2509 void HTMLConverter::_loadFromDOMRange()
    2510 {
    2511     ASSERT(_domRange);
    2512     if (-1 == _errorCode) {
    2513         Node* commonAncestorContainer = _caches->cacheAncestorsOfStartToBeConverted(*core(_domRange));
    2514         ASSERT(commonAncestorContainer);
    2515 
    2516         _document = kit(commonAncestorContainer->ownerDocument());
    2517         _dataSource = (DocumentLoader *)core(_document)->frame()->loader().documentLoader();
    2518        
    2519         if (_document && _dataSource) {
    2520             _domRangeStartIndex = 0;
    2521             _errorCode = 0;
    2522             _traverseNode(commonAncestorContainer, 0, false /* embedded */);
    2523             if (_domRangeStartIndex > 0 && _domRangeStartIndex <= [_attrStr length])
    2524                 [_attrStr deleteCharactersInRange:NSMakeRange(0, _domRangeStartIndex)];
    2525         }
    2526     }
    25272480}
    25282481
     
    25872540NSAttributedString *attributedStringFromRange(Range& range)
    25882541{
    2589     HTMLConverter converter(kit(&range));
     2542    HTMLConverter converter(range);
    25902543    return converter.convert();
    25912544}
Note: See TracChangeset for help on using the changeset viewer.